ghorsington 5 years ago
parent
commit
012b6c83da
160 changed files with 3935 additions and 1060 deletions
  1. 5 5
      Assembly-CSharp.sln
  2. 1 1
      Assembly-CSharp/ADVKagManager.cs
  3. 10 0
      Assembly-CSharp/AcquiredAttributeUnit.cs
  4. 10 0
      Assembly-CSharp/AcquiredSkillUnit.cs
  5. 20 12
      Assembly-CSharp/AdditionalScenario.cs
  6. 22 17
      Assembly-CSharp/Assembly-CSharp.csproj
  7. 2 0
      Assembly-CSharp/AttributeViewer.cs
  8. 2 2
      Assembly-CSharp/BGWindow.cs
  9. 27 4
      Assembly-CSharp/BacklogCtrl.cs
  10. 166 1
      Assembly-CSharp/BaseKagManager.cs
  11. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  12. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  13. 10 6
      Assembly-CSharp/BetSetUI.cs
  14. 5 3
      Assembly-CSharp/BlackjackGame.cs
  15. 55 5
      Assembly-CSharp/CMSystem.cs
  16. 14 3
      Assembly-CSharp/CasinoItemUI.cs
  17. 16 0
      Assembly-CSharp/CasinoShopItem.cs
  18. 1 1
      Assembly-CSharp/CharaSelectStatusMgr.cs
  19. 9 4
      Assembly-CSharp/CharacterMgr.cs
  20. 3 3
      Assembly-CSharp/CharacterSelectMain.cs
  21. 2 11
      Assembly-CSharp/ClassChangePanel.cs
  22. 2 6
      Assembly-CSharp/ClassUnit.cs
  23. 106 11
      Assembly-CSharp/ConfigManager.cs
  24. 1 1
      Assembly-CSharp/ConfigMgr.cs
  25. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  26. 70 25
      Assembly-CSharp/ControllerShortcutWindow.cs
  27. 2 2
      Assembly-CSharp/CreateBGObjectSubWindow.cs
  28. 1 1
      Assembly-CSharp/DailyCtrl.cs
  29. 2 0
      Assembly-CSharp/Dance/SettingData.cs
  30. 2 2
      Assembly-CSharp/DanceSelect.cs
  31. 38 7
      Assembly-CSharp/DanceSetting.cs
  32. 91 22
      Assembly-CSharp/DanceSubtitleMgr.cs
  33. 2 2
      Assembly-CSharp/DeskManager.cs
  34. 3 3
      Assembly-CSharp/DynamicBone.cs
  35. 1 1
      Assembly-CSharp/DynamicSkirtBone.cs
  36. 132 129
      Assembly-CSharp/Edit/MaidProfile.cs
  37. 1 1
      Assembly-CSharp/EditMod.cs
  38. 1 1
      Assembly-CSharp/EmpireLifeModeManager.cs
  39. 16 3
      Assembly-CSharp/ExChangeUI.cs
  40. 2 2
      Assembly-CSharp/FaceWindow.cs
  41. 1 1
      Assembly-CSharp/Facility.cs
  42. 1 1
      Assembly-CSharp/FacilityManager.cs
  43. 1 1
      Assembly-CSharp/FacilityUIPowerUpMaterialList.cs
  44. 10 0
      Assembly-CSharp/FluctuationOfParameterUnit.cs
  45. 41 0
      Assembly-CSharp/FreeSkillSelect.cs
  46. 4 4
      Assembly-CSharp/GameInShopMain.cs
  47. 20 4
      Assembly-CSharp/GameMain.cs
  48. 1 1
      Assembly-CSharp/GameModeManager.cs
  49. 263 260
      Assembly-CSharp/GameUty.cs
  50. 34 2
      Assembly-CSharp/HandSignShortcut.cs
  51. 32 0
      Assembly-CSharp/Kasizuki/AppealData.cs
  52. 3 0
      Assembly-CSharp/Kasizuki/ClubRoomSelectCtrl.cs
  53. 12 8
      Assembly-CSharp/Kasizuki/KasizukiMainMenu.cs
  54. 4 0
      Assembly-CSharp/Kasizuki/KasizukiManSelectCtrl.cs
  55. 1 1
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  56. 4 0
      Assembly-CSharp/Kasizuki/KasizukiPlayInfoCtrl.cs
  57. 65 18
      Assembly-CSharp/Kasizuki/KasizukiSaveAndLoadCtrl.cs
  58. 65 0
      Assembly-CSharp/Kasizuki/MaidAppealComment.cs
  59. 2 0
      Assembly-CSharp/Kasizuki/MaidLikabilityCtrl.cs
  60. 19 2
      Assembly-CSharp/Kasizuki/MaidMiniStatusCtrl.cs
  61. 2 0
      Assembly-CSharp/Kasizuki/MaidPropensitysCtrl.cs
  62. 24 0
      Assembly-CSharp/Kasizuki/ManData.cs
  63. 29 0
      Assembly-CSharp/Kasizuki/PlayData.cs
  64. 16 0
      Assembly-CSharp/Kasizuki/RoomData.cs
  65. 387 0
      Assembly-CSharp/KupaCtrl.cs
  66. 84 3
      Assembly-CSharp/Maid.cs
  67. 6 1
      Assembly-CSharp/MaidManagementMain.cs
  68. 1 1
      Assembly-CSharp/MaidParts.cs
  69. 1 1
      Assembly-CSharp/MaidPlate.cs
  70. 1 1
      Assembly-CSharp/MaidProp.cs
  71. 111 3
      Assembly-CSharp/MaidRandomName.cs
  72. 11 0
      Assembly-CSharp/MaidStatus/AdditionalRelation.cs
  73. 39 0
      Assembly-CSharp/MaidStatus/EnumConvert.cs
  74. 57 1
      Assembly-CSharp/MaidStatus/Status.cs
  75. 5 1
      Assembly-CSharp/Menu.cs
  76. 45 16
      Assembly-CSharp/MessageClass.cs
  77. 15 3
      Assembly-CSharp/MessageWindowCtrl.cs
  78. 4 3
      Assembly-CSharp/MessageWindowMgr.cs
  79. 1 1
      Assembly-CSharp/Misc.cs
  80. 1 1
      Assembly-CSharp/ModCompile.cs
  81. 2 2
      Assembly-CSharp/MotionWindow.cs
  82. 29 3
      Assembly-CSharp/MyRoomCustom/CreativeRoom.cs
  83. 1 1
      Assembly-CSharp/MyRoomCustom/CreativeRoomManager.cs
  84. 4 2
      Assembly-CSharp/MyRoomCustom/CreativeRoomUIObjectSettings.cs
  85. 2 2
      Assembly-CSharp/MyRoomCustom/CreativeRoomUISaveLoad.cs
  86. 8 0
      Assembly-CSharp/MyRoomCustom/PlacementData.cs
  87. 0 13
      Assembly-CSharp/NewBehaviourScript.cs
  88. 2 6
      Assembly-CSharp/ObjectManagerWindow.cs
  89. 2 2
      Assembly-CSharp/OnHoverTaskIcon.cs
  90. 31 0
      Assembly-CSharp/OtherCommandShortcut.cs
  91. 4 0
      Assembly-CSharp/OvrHandItemMgr.cs
  92. 2 2
      Assembly-CSharp/OvrIK.cs
  93. 1 1
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  94. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  95. 1 1
      Assembly-CSharp/PopupAndButtonList.cs
  96. 1 1
      Assembly-CSharp/PopupAndTabList.cs
  97. 4 0
      Assembly-CSharp/PresetCtrl.cs
  98. 146 0
      Assembly-CSharp/Product.cs
  99. 55 21
      Assembly-CSharp/ProfileCtrl.cs
  100. 83 41
      Assembly-CSharp/RandomPresetCtrl.cs
  101. 7 7
      Assembly-CSharp/SaveAndLoadCtrl.cs
  102. 111 8
      Assembly-CSharp/ScenarioData.cs
  103. 9 0
      Assembly-CSharp/ScenarioSelectMgr.cs
  104. 10 5
      Assembly-CSharp/SceneCasino.cs
  105. 28 5
      Assembly-CSharp/SceneCasinoShop.cs
  106. 5 2
      Assembly-CSharp/SceneCasinoSlot.cs
  107. 63 28
      Assembly-CSharp/SceneEdit.cs
  108. 14 14
      Assembly-CSharp/SceneEditInfo.cs
  109. 7 0
      Assembly-CSharp/SceneEditNameSettingPanel.cs
  110. 15 5
      Assembly-CSharp/SceneEditWindow/UndressWindow.cs
  111. 6 0
      Assembly-CSharp/SceneFreeModeSelectManager.cs
  112. 11 0
      Assembly-CSharp/SceneLogo.cs
  113. 1 1
      Assembly-CSharp/SceneNPCEdit/SaveData.cs
  114. 6 1
      Assembly-CSharp/SceneScenarioSelect.cs
  115. 15 3
      Assembly-CSharp/SceneWarning.cs
  116. 5 0
      Assembly-CSharp/Schedule/ResultYotogiTask.cs
  117. 4 0
      Assembly-CSharp/Schedule/ScheduleCSVData.cs
  118. 2 2
      Assembly-CSharp/ScheduleCtrl.cs
  119. 14 17
      Assembly-CSharp/ScheduleMaidStatusUnit.cs
  120. 3 1
      Assembly-CSharp/ScreenTrophyMain.cs
  121. 27 1
      Assembly-CSharp/ScriptManager.cs
  122. 4 8
      Assembly-CSharp/ShopItem.cs
  123. 1 1
      Assembly-CSharp/SlotUImgr.cs
  124. 17 35
      Assembly-CSharp/StatusCtrl.cs
  125. 3 2
      Assembly-CSharp/StatusMgr.cs
  126. 22 14
      Assembly-CSharp/SubtitleDisplayManager.cs
  127. 9 9
      Assembly-CSharp/SystemShortcut.cs
  128. 27 1
      Assembly-CSharp/TBody.cs
  129. 11 0
      Assembly-CSharp/TBodySkin.cs
  130. 2 2
      Assembly-CSharp/TaskUnit.cs
  131. 10 2
      Assembly-CSharp/TatooAlphaWindow.cs
  132. 31 20
      Assembly-CSharp/TitleCtrl.cs
  133. 41 31
      Assembly-CSharp/TouchAction_Mgr.cs
  134. 107 0
      Assembly-CSharp/TransformLocalizeSupport.cs
  135. 20 0
      Assembly-CSharp/Trophy.cs
  136. 11 0
      Assembly-CSharp/TrophyAchieveEffect.cs
  137. 5 1
      Assembly-CSharp/TrophyInfo.cs
  138. 107 0
      Assembly-CSharp/UIRectTransformlLocalizeSupport.cs
  139. 47 0
      Assembly-CSharp/UIStates.cs
  140. 2 2
      Assembly-CSharp/UIWFConditionList.cs
  141. 101 0
      Assembly-CSharp/UIWFPositionStore.cs
  142. 10 1
      Assembly-CSharp/UndressDance_Mgr.cs
  143. 39 0
      Assembly-CSharp/VRFaceShortcutConfig.cs
  144. 1 1
      Assembly-CSharp/WindowPartsFingerPreset.cs
  145. 5 12
      Assembly-CSharp/YotogiClassListManager.cs
  146. 9 8
      Assembly-CSharp/YotogiCommandFactory.cs
  147. 1 0
      Assembly-CSharp/YotogiCommandMenuOVR.cs
  148. 1 1
      Assembly-CSharp/YotogiParamScroll.cs
  149. 3 3
      Assembly-CSharp/YotogiParameterViewer.cs
  150. 112 15
      Assembly-CSharp/YotogiPlayManager.cs
  151. 11 7
      Assembly-CSharp/YotogiResultManager.cs
  152. 1 1
      Assembly-CSharp/YotogiSkillContainerViewer.cs
  153. 2 2
      Assembly-CSharp/YotogiSkillListManager.cs
  154. 1 1
      Assembly-CSharp/YotogiSkillSelectManager.cs
  155. 4 1
      Assembly-CSharp/YotogiSkillSelectSpecialCondition.cs
  156. 1 1
      Assembly-CSharp/YotogiSkillUnit.cs
  157. 3 1
      Assembly-CSharp/YotogiStageUnit.cs
  158. 85 37
      Assembly-CSharp/Yotogis/Skill.cs
  159. 1 1
      Assembly-CSharp/Yotogis/SkillAcquisitionCondition.cs
  160. 45 0
      Assembly-CSharp/wf/Utility.cs

+ 5 - 5
Assembly-CSharp.sln

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
 # Visual Studio 15
 VisualStudioVersion = 15.0.26228.4
 VisualStudioVersion = 15.0.26228.4
 MinimumVisualStudioVersion = 10.0.40219.1
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{1100033F-2788-4BBC-9106-CABDF94B43AD}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{48FC93A8-9592-437F-BCF4-565C49CC7BF4}"
 EndProject
 EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{1100033F-2788-4BBC-9106-CABDF94B43AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1100033F-2788-4BBC-9106-CABDF94B43AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{1100033F-2788-4BBC-9106-CABDF94B43AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{1100033F-2788-4BBC-9106-CABDF94B43AD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{48FC93A8-9592-437F-BCF4-565C49CC7BF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{48FC93A8-9592-437F-BCF4-565C49CC7BF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{48FC93A8-9592-437F-BCF4-565C49CC7BF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{48FC93A8-9592-437F-BCF4-565C49CC7BF4}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 1 - 1
Assembly-CSharp/ADVKagManager.cs

@@ -343,7 +343,7 @@ public class ADVKagManager : BaseKagManager
 	{
 	{
 		Action<string, string> onClickCallBack = delegate(string choices_title, string label_name)
 		Action<string, string> onClickCallBack = delegate(string choices_title, string label_name)
 		{
 		{
-			if (!GameUty.supportMultiLanguage)
+			if (!Product.SPP)
 			{
 			{
 				string text = "=> " + choices_title;
 				string text = "=> " + choices_title;
 				this.message_mgr_.AddBackLog(string.Empty, text, string.Empty, 0, AudioSourceMgr.Type.VoiceHeroine);
 				this.message_mgr_.AddBackLog(string.Empty, text, string.Empty, 0, AudioSourceMgr.Type.VoiceHeroine);

+ 10 - 0
Assembly-CSharp/AcquiredAttributeUnit.cs

@@ -1,11 +1,14 @@
 using System;
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class AcquiredAttributeUnit : MonoBehaviour
 public class AcquiredAttributeUnit : MonoBehaviour
 {
 {
 	private void Awake()
 	private void Awake()
 	{
 	{
 		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
 		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
+		this.label_loc_ = this.label_.GetComponent<Localize>();
 	}
 	}
 
 
 	public void SetActive(bool value)
 	public void SetActive(bool value)
@@ -23,5 +26,12 @@ public class AcquiredAttributeUnit : MonoBehaviour
 		this.label_.text = text;
 		this.label_.text = text;
 	}
 	}
 
 
+	public void SetTerm(string termText)
+	{
+		Utility.SetLocalizeTerm(this.label_loc_, termText);
+	}
+
 	private UILabel label_;
 	private UILabel label_;
+
+	private Localize label_loc_;
 }
 }

+ 10 - 0
Assembly-CSharp/AcquiredSkillUnit.cs

@@ -1,5 +1,7 @@
 using System;
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class AcquiredSkillUnit : MonoBehaviour
 public class AcquiredSkillUnit : MonoBehaviour
 {
 {
@@ -7,6 +9,7 @@ public class AcquiredSkillUnit : MonoBehaviour
 	{
 	{
 		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
 		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
 		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
 		this.label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
+		this.label_loc_ = this.label_.GetComponent<Localize>();
 	}
 	}
 
 
 	public void SetActive(bool value)
 	public void SetActive(bool value)
@@ -34,7 +37,14 @@ public class AcquiredSkillUnit : MonoBehaviour
 		this.label_.text = text;
 		this.label_.text = text;
 	}
 	}
 
 
+	public void SetTerm(string termText)
+	{
+		Utility.SetLocalizeTerm(this.label_loc_, termText);
+	}
+
 	private UISprite bg_sprite_;
 	private UISprite bg_sprite_;
 
 
 	private UILabel label_;
 	private UILabel label_;
+
+	private Localize label_loc_;
 }
 }

+ 20 - 12
Assembly-CSharp/AdditionalScenario.cs

@@ -61,53 +61,61 @@ public class AdditionalScenario : MonoBehaviour
 		gameObject.SetActive(true);
 		gameObject.SetActive(true);
 		this.m_UIScroll = gameObject.transform.Find("Contents").GetComponent<UIScrollView>();
 		this.m_UIScroll = gameObject.transform.Find("Contents").GetComponent<UIScrollView>();
 		this.m_UIGrid = gameObject.transform.Find("Contents/Grid").GetComponent<UIGrid>();
 		this.m_UIGrid = gameObject.transform.Find("Contents/Grid").GetComponent<UIGrid>();
-		Action<string, string> action = delegate(string title, string chara)
+		Action<string, string, string, string> action = delegate(string title, string chara, string titleTerm, string charaTerm)
 		{
 		{
 			GameObject gameObject2 = Utility.CreatePrefab(this.m_UIGrid.gameObject, "SceneScenarioSelect/Prefab/Additional", true);
 			GameObject gameObject2 = Utility.CreatePrefab(this.m_UIGrid.gameObject, "SceneScenarioSelect/Prefab/Additional", true);
-			gameObject2.transform.Find("Title").GetComponent<UILabel>().text = title;
-			gameObject2.transform.Find("Chara").GetComponent<UILabel>().text = chara;
+			UILabel component = gameObject2.transform.Find("Title").GetComponent<UILabel>();
+			UILabel component2 = gameObject2.transform.Find("Chara").GetComponent<UILabel>();
+			component.text = title;
+			component2.text = chara;
+			Utility.SetLocalizeTerm(component, titleTerm);
+			Utility.SetLocalizeTerm(component2, charaTerm);
 		};
 		};
 		foreach (ScenarioData scenarioData2 in addedScenario)
 		foreach (ScenarioData scenarioData2 in addedScenario)
 		{
 		{
+			string notLineTitle = scenarioData2.NotLineTitle;
+			string titleTerm2 = scenarioData2.TitleTerm;
+			string notification = scenarioData2.Notification;
+			string notificationTerm = scenarioData2.NotificationTerm;
 			if (!scenarioData2.IsFixedMaid)
 			if (!scenarioData2.IsFixedMaid)
 			{
 			{
 				if (scenarioData2.EventMaidCount > 0)
 				if (scenarioData2.EventMaidCount > 0)
 				{
 				{
 					foreach (Maid maid2 in scenarioData2.GetEventMaidList())
 					foreach (Maid maid2 in scenarioData2.GetEventMaidList())
 					{
 					{
-						if (string.IsNullOrEmpty(scenarioData2.Notification))
+						if (string.IsNullOrEmpty(notification))
 						{
 						{
-							action(scenarioData2.NotLineTitle, (!maid2.status.isFirstNameCall) ? maid2.status.lastName : maid2.status.firstName);
+							action(notLineTitle, (!maid2.status.isFirstNameCall) ? maid2.status.lastName : maid2.status.firstName, titleTerm2, string.Empty);
 						}
 						}
 						else
 						else
 						{
 						{
-							action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+							action(notLineTitle, notification, titleTerm2, notificationTerm);
 						}
 						}
 					}
 					}
 				}
 				}
 				else
 				else
 				{
 				{
-					action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+					action(notLineTitle, notification, titleTerm2, notificationTerm);
 				}
 				}
 			}
 			}
-			else if (!string.IsNullOrEmpty(scenarioData2.Notification))
+			else if (!string.IsNullOrEmpty(notification))
 			{
 			{
-				action(scenarioData2.NotLineTitle, scenarioData2.Notification);
+				action(notLineTitle, notification, titleTerm2, notificationTerm);
 			}
 			}
 			else if (scenarioData2.EventMaidCount == 1)
 			else if (scenarioData2.EventMaidCount == 1)
 			{
 			{
 				if (scenarioData2.GetEventMaid(0).status.heroineType == HeroineType.Sub)
 				if (scenarioData2.GetEventMaid(0).status.heroineType == HeroineType.Sub)
 				{
 				{
-					action(scenarioData2.NotLineTitle, "NPC");
+					action(notLineTitle, "NPC", titleTerm2, "SceneScenarioSelect/通知時表記/NPC");
 				}
 				}
 				else
 				else
 				{
 				{
-					action(scenarioData2.NotLineTitle, GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(scenarioData2.GetEventMaid(0)));
+					action(notLineTitle, GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(scenarioData2.GetEventMaid(0)), titleTerm2, GameMain.Instance.ScenarioSelectMgr.GetConvertPersonalTerm(scenarioData2.GetEventMaid(0)));
 				}
 				}
 			}
 			}
 			else
 			else
 			{
 			{
-				action(scenarioData2.NotLineTitle, this.m_IdolNotice);
+				action(notLineTitle, this.m_IdolNotice, titleTerm2, "SceneScenarioSelect/通知時表記/" + this.m_IdolNotice);
 			}
 			}
 		}
 		}
 		if (this.m_UIGrid)
 		if (this.m_UIGrid)

+ 22 - 17
Assembly-CSharp/Assembly-CSharp.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{1100033F-2788-4BBC-9106-CABDF94B43AD}</ProjectGuid>
+    <ProjectGuid>{48FC93A8-9592-437F-BCF4-565C49CC7BF4}</ProjectGuid>
     <OutputType>Library</OutputType>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -34,49 +34,49 @@
   </PropertyGroup>
   </PropertyGroup>
   <ItemGroup>
   <ItemGroup>
     <Reference Include="Assembly-CSharp-firstpass">
     <Reference Include="Assembly-CSharp-firstpass">
-      <HintPath>..\..\com126\Managed\Assembly-CSharp-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\Assembly-CSharp-firstpass.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="Assembly-UnityScript-firstpass">
     <Reference Include="Assembly-UnityScript-firstpass">
-      <HintPath>..\..\com126\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="FoveUnityPlugin">
     <Reference Include="FoveUnityPlugin">
-      <HintPath>..\..\com126\Managed\FoveUnityPlugin.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\FoveUnityPlugin.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="Ionic.Zlib">
     <Reference Include="Ionic.Zlib">
-      <HintPath>..\..\com126\Managed\Ionic.Zlib.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\Ionic.Zlib.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="JsonFx.Json">
     <Reference Include="JsonFx.Json">
-      <HintPath>..\..\com126\Managed\JsonFx.Json.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\JsonFx.Json.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="LeapCSharp.NET3.5">
     <Reference Include="LeapCSharp.NET3.5">
-      <HintPath>..\..\com126\Managed\LeapCSharp.NET3.5.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\LeapCSharp.NET3.5.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System">
     <Reference Include="System">
-      <HintPath>..\..\com126\Managed\System.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Core">
     <Reference Include="System.Core">
-      <HintPath>..\..\com126\Managed\System.Core.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.Core.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Drawing">
     <Reference Include="System.Drawing">
-      <HintPath>..\..\com126\Managed\System.Drawing.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.Drawing.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Windows.Forms">
     <Reference Include="System.Windows.Forms">
-      <HintPath>..\..\com126\Managed\System.Windows.Forms.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.Windows.Forms.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Xml">
     <Reference Include="System.Xml">
-      <HintPath>..\..\com126\Managed\System.Xml.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.Xml.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="System.Xml.Linq">
     <Reference Include="System.Xml.Linq">
-      <HintPath>..\..\com126\Managed\System.Xml.Linq.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\System.Xml.Linq.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="UnityEngine">
     <Reference Include="UnityEngine">
-      <HintPath>..\..\com126\Managed\UnityEngine.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\UnityEngine.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="UnityEngine.UI">
     <Reference Include="UnityEngine.UI">
-      <HintPath>..\..\com126\Managed\UnityEngine.UI.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\UnityEngine.UI.dll</HintPath>
     </Reference>
     </Reference>
     <Reference Include="zxing.unity">
     <Reference Include="zxing.unity">
-      <HintPath>..\..\com126\Managed\zxing.unity.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\Managed\zxing.unity.dll</HintPath>
     </Reference>
     </Reference>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
@@ -578,6 +578,7 @@
     <Compile Include="Kasizuki\SystemDataType.cs" />
     <Compile Include="Kasizuki\SystemDataType.cs" />
     <Compile Include="Kasizuki\WorkCountReplace.cs" />
     <Compile Include="Kasizuki\WorkCountReplace.cs" />
     <Compile Include="KeyboardShortcutManager.cs" />
     <Compile Include="KeyboardShortcutManager.cs" />
+    <Compile Include="KupaCtrl.cs" />
     <Compile Include="LagPosition.cs" />
     <Compile Include="LagPosition.cs" />
     <Compile Include="LagRotation.cs" />
     <Compile Include="LagRotation.cs" />
     <Compile Include="LanguageSelection.cs" />
     <Compile Include="LanguageSelection.cs" />
@@ -695,6 +696,7 @@
     <Compile Include="MaidProp.cs" />
     <Compile Include="MaidProp.cs" />
     <Compile Include="MaidRandomName.cs" />
     <Compile Include="MaidRandomName.cs" />
     <Compile Include="MaidStatusListCtrl.cs" />
     <Compile Include="MaidStatusListCtrl.cs" />
+    <Compile Include="MaidStatus\AdditionalRelation.cs" />
     <Compile Include="MaidStatus\BodyData.cs" />
     <Compile Include="MaidStatus\BodyData.cs" />
     <Compile Include="MaidStatus\BonusStatus.cs" />
     <Compile Include="MaidStatus\BonusStatus.cs" />
     <Compile Include="MaidStatus\ClassData.cs" />
     <Compile Include="MaidStatus\ClassData.cs" />
@@ -766,7 +768,6 @@
     <Compile Include="MyRoomCustom\CreativeRoomUISaveLoad.cs" />
     <Compile Include="MyRoomCustom\CreativeRoomUISaveLoad.cs" />
     <Compile Include="MyRoomCustom\PlacementData.cs" />
     <Compile Include="MyRoomCustom\PlacementData.cs" />
     <Compile Include="MyRoomCustom\TextureData.cs" />
     <Compile Include="MyRoomCustom\TextureData.cs" />
-    <Compile Include="NewBehaviourScript.cs" />
     <Compile Include="NGUIDebug.cs" />
     <Compile Include="NGUIDebug.cs" />
     <Compile Include="NGUILabelLocalizeSupport.cs" />
     <Compile Include="NGUILabelLocalizeSupport.cs" />
     <Compile Include="NGUIMath.cs" />
     <Compile Include="NGUIMath.cs" />
@@ -929,6 +930,7 @@
     <Compile Include="PresetCtrl.cs" />
     <Compile Include="PresetCtrl.cs" />
     <Compile Include="PresetMgr.cs" />
     <Compile Include="PresetMgr.cs" />
     <Compile Include="PresetServer.cs" />
     <Compile Include="PresetServer.cs" />
+    <Compile Include="Product.cs" />
     <Compile Include="ProductParse.cs" />
     <Compile Include="ProductParse.cs" />
     <Compile Include="Product_Mgr.cs" />
     <Compile Include="Product_Mgr.cs" />
     <Compile Include="ProfileCtrl.cs" />
     <Compile Include="ProfileCtrl.cs" />
@@ -1233,6 +1235,7 @@
     <Compile Include="TouchRegionExplanationWithChubLip.cs" />
     <Compile Include="TouchRegionExplanationWithChubLip.cs" />
     <Compile Include="TouchToMouse.cs" />
     <Compile Include="TouchToMouse.cs" />
     <Compile Include="TrainingTaskUnit.cs" />
     <Compile Include="TrainingTaskUnit.cs" />
+    <Compile Include="TransformLocalizeSupport.cs" />
     <Compile Include="Translations.cs" />
     <Compile Include="Translations.cs" />
     <Compile Include="TriLib\AiComponent.cs" />
     <Compile Include="TriLib\AiComponent.cs" />
     <Compile Include="TriLib\AiPrimitiveType.cs" />
     <Compile Include="TriLib\AiPrimitiveType.cs" />
@@ -1367,6 +1370,7 @@
     <Compile Include="UIPopupList.cs" />
     <Compile Include="UIPopupList.cs" />
     <Compile Include="UIProgressBar.cs" />
     <Compile Include="UIProgressBar.cs" />
     <Compile Include="UIRect.cs" />
     <Compile Include="UIRect.cs" />
+    <Compile Include="UIRectTransformlLocalizeSupport.cs" />
     <Compile Include="UIRoot.cs" />
     <Compile Include="UIRoot.cs" />
     <Compile Include="UIRuleControler.cs" />
     <Compile Include="UIRuleControler.cs" />
     <Compile Include="UISavedOption.cs" />
     <Compile Include="UISavedOption.cs" />
@@ -1395,6 +1399,7 @@
     <Compile Include="UIViewport.cs" />
     <Compile Include="UIViewport.cs" />
     <Compile Include="UIWFConditionList.cs" />
     <Compile Include="UIWFConditionList.cs" />
     <Compile Include="UIWFHitMasks.cs" />
     <Compile Include="UIWFHitMasks.cs" />
+    <Compile Include="UIWFPositionStore.cs" />
     <Compile Include="UIWFScrollBGAlphaSupport.cs" />
     <Compile Include="UIWFScrollBGAlphaSupport.cs" />
     <Compile Include="UIWFSelectButton.cs" />
     <Compile Include="UIWFSelectButton.cs" />
     <Compile Include="UIWFSwitchPanel.cs" />
     <Compile Include="UIWFSwitchPanel.cs" />

+ 2 - 0
Assembly-CSharp/AttributeViewer.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Collections.Generic;
 using MaidStatus;
 using MaidStatus;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class AttributeViewer : MonoBehaviour
 public class AttributeViewer : MonoBehaviour
 {
 {
@@ -52,6 +53,7 @@ public class AttributeViewer : MonoBehaviour
 			if (!(componentInChildren == null))
 			if (!(componentInChildren == null))
 			{
 			{
 				componentInChildren.text = data.drawName;
 				componentInChildren.text = data.drawName;
+				Utility.SetLocalizeTerm(componentInChildren, data.termName);
 				num++;
 				num++;
 			}
 			}
 		}
 		}

+ 2 - 2
Assembly-CSharp/BGWindow.cs

@@ -24,14 +24,14 @@ public class BGWindow : BaseMaidPhotoWindow
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 			}
 			}
 		}
 		}
-		if (!GameUty.supportMultiLanguage)
+		if (!Product.SPP)
 		{
 		{
 			dictionary = null;
 			dictionary = null;
 		}
 		}
 		this.PopupAndTabList.SetData(dictionary2, dictionary, false);
 		this.PopupAndTabList.SetData(dictionary2, dictionary, false);
 		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
 		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
 		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
 		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
-		this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : PhotoBGData.popup_category_term_list);
+		this.PopupAndTabList.popup_term_list = ((!Product.SPP) ? null : PhotoBGData.popup_category_term_list);
 		this.PopupAndTabList.popup_value_list = PhotoBGData.popup_category_list;
 		this.PopupAndTabList.popup_value_list = PhotoBGData.popup_category_list;
 		this.CheckSolidColor.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckSolidColorCheckBox));
 		this.CheckSolidColor.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckSolidColorCheckBox));
 		this.ColorInput.onChangeValue.Add(new Action<WindowPartsInputColorrPalette, Color>(this.OnChangeValueColorInput));
 		this.ColorInput.onChangeValue.Add(new Action<WindowPartsInputColorrPalette, Color>(this.OnChangeValueColorInput));

+ 27 - 4
Assembly-CSharp/BacklogCtrl.cs

@@ -42,10 +42,31 @@ public class BacklogCtrl : MonoBehaviour
 				gameObject.transform.localScale = Vector3.one;
 				gameObject.transform.localScale = Vector3.one;
 				gameObject.transform.localPosition = Vector3.zero;
 				gameObject.transform.localPosition = Vector3.zero;
 				gameObject.transform.rotation = Quaternion.identity;
 				gameObject.transform.rotation = Quaternion.identity;
-				UILabel component2 = UTY.GetChildObject(gameObject, "SpeakerName", false).GetComponent<UILabel>();
-				component2.text = backlogUnit.m_speakerName;
-				UILabel component3 = UTY.GetChildObject(gameObject, "Message", false).GetComponent<UILabel>();
-				component3.text = backlogUnit.m_msg;
+				if (!Product.SPP)
+				{
+					UILabel component2 = UTY.GetChildObject(gameObject, "SpeakerName", false).GetComponent<UILabel>();
+					component2.text = backlogUnit.m_speakerName;
+					UILabel component3 = UTY.GetChildObject(gameObject, "Message", false).GetComponent<UILabel>();
+					component3.text = backlogUnit.m_msg;
+				}
+				else
+				{
+					SubtitleDisplayManager component4 = gameObject.GetComponent<SubtitleDisplayManager>();
+					component4.charaNameText = backlogUnit.m_speakerNameSet;
+					component4.originalText = backlogUnit.m_msg;
+					component4.subtitlesText = backlogUnit.m_subtitlemsg;
+				}
+			}
+		}
+		if (Product.SPP)
+		{
+			if (SubtitleDisplayManager.configDisplayType == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle)
+			{
+				base.GetComponent<UIGrid>().cellHeight = 240f;
+			}
+			else
+			{
+				base.GetComponent<UIGrid>().cellHeight = 182f;
 			}
 			}
 		}
 		}
 		base.GetComponent<UIGrid>().Reposition();
 		base.GetComponent<UIGrid>().Reposition();
@@ -92,6 +113,8 @@ public class BacklogCtrl : MonoBehaviour
 	{
 	{
 		public string m_speakerName { get; set; }
 		public string m_speakerName { get; set; }
 
 
+		public KeyValuePair<string, string> m_speakerNameSet { get; set; }
+
 		public string m_msg { get; set; }
 		public string m_msg { get; set; }
 
 
 		public string m_subtitlemsg { get; set; }
 		public string m_subtitlemsg { get; set; }

+ 166 - 1
Assembly-CSharp/BaseKagManager.cs

@@ -177,6 +177,7 @@ public class BaseKagManager : IDisposable
 		this.kag_.AddTagCallBack("endsubtitledisplay", new KagScript.KagTagCallBack(this.TagEndSubtitleDisplay));
 		this.kag_.AddTagCallBack("endsubtitledisplay", new KagScript.KagTagCallBack(this.TagEndSubtitleDisplay));
 		this.kag_.AddTagCallBack("subtitledisplayforplayvoice", new KagScript.KagTagCallBack(this.TagSubtitleDisplayForPlayVoice));
 		this.kag_.AddTagCallBack("subtitledisplayforplayvoice", new KagScript.KagTagCallBack(this.TagSubtitleDisplayForPlayVoice));
 		this.kag_.AddTagCallBack("subtitledisplay", new KagScript.KagTagCallBack(this.TagSubtitleDisplay));
 		this.kag_.AddTagCallBack("subtitledisplay", new KagScript.KagTagCallBack(this.TagSubtitleDisplay));
+		this.kag_.AddTagCallBack("kupa", new KagScript.KagTagCallBack(this.TagKupa));
 	}
 	}
 
 
 	public virtual void Update()
 	public virtual void Update()
@@ -4815,6 +4816,19 @@ public class BaseKagManager : IDisposable
 
 
 	public bool TagLoadSubtitleFile(KagTagSupport tag_data)
 	public bool TagLoadSubtitleFile(KagTagSupport tag_data)
 	{
 	{
+		if (!Product.SPP)
+		{
+			return false;
+		}
+		this.CheckAbsolutelyNecessaryTag(tag_data, "loadsubtitlefile", new string[]
+		{
+			"file"
+		});
+		string fileName = Path.ChangeExtension(tag_data.GetTagProperty("file").AsString(), ".ks");
+		SubtitleMovieManager globalInstance = SubtitleMovieManager.GetGlobalInstance(false);
+		globalInstance.autoDestroy = true;
+		globalInstance.LoadSubtitleScriptFile(fileName);
+		globalInstance.Play();
 		return false;
 		return false;
 	}
 	}
 
 
@@ -4826,11 +4840,162 @@ public class BaseKagManager : IDisposable
 
 
 	public bool TagSubtitleDisplayForPlayVoice(KagTagSupport tag_data)
 	public bool TagSubtitleDisplayForPlayVoice(KagTagSupport tag_data)
 	{
 	{
+		if (!Product.SPP)
+		{
+			return false;
+		}
+		this.CheckAbsolutelyNecessaryTag(tag_data, "subtitledisplayforplayvoice", new string[]
+		{
+			"text"
+		});
+		this.subtitle_data.text = tag_data.GetTagProperty("text").AsString();
+		this.subtitle_data.displayTime = -1;
+		if (tag_data.IsValid("addtime"))
+		{
+			this.subtitle_data.addDisplayTime = tag_data.GetTagProperty("addtime").AsInteger();
+		}
+		else if (tag_data.IsValid("wait"))
+		{
+			this.subtitle_data.displayTime = tag_data.GetTagProperty("wait").AsInteger();
+		}
+		this.subtitle_data.casinoType = tag_data.IsValid("mode_c");
 		return false;
 		return false;
 	}
 	}
 
 
 	public bool TagSubtitleDisplay(KagTagSupport tag_data)
 	public bool TagSubtitleDisplay(KagTagSupport tag_data)
 	{
 	{
+		if (!Product.SPP)
+		{
+			return false;
+		}
+		this.CheckAbsolutelyNecessaryTag(tag_data, "subtitledisplay", new string[]
+		{
+			"text",
+			"time"
+		});
+		string text = tag_data.GetTagProperty("text").AsString();
+		int displayTime = int.Parse(tag_data.GetTagProperty("time").AsString());
+		SubtitleMovieManager globalInstance = SubtitleMovieManager.GetGlobalInstance(false);
+		globalInstance.autoDestroy = true;
+		globalInstance.Play(text, displayTime);
+		return false;
+	}
+
+	public bool TagKupa(KagTagSupport tag_data)
+	{
+		if (!Product.SIBD || Product.VBA)
+		{
+			return false;
+		}
+		List<KupaCtrl> list2 = new List<KupaCtrl>();
+		Action<Maid, List<KupaCtrl>> action = delegate(Maid maid, List<KupaCtrl> list)
+		{
+			if (maid != null && maid.body0 != null && maid.body0.isLoadedBody)
+			{
+				TBodySkin tbodySkin = maid.body0.goSlot[0];
+				if (tbodySkin != null && tbodySkin.kupaCtrl != null)
+				{
+					list.Add(tbodySkin.kupaCtrl);
+				}
+			}
+		};
+		if (tag_data.IsValid("maid") || tag_data.IsValid("man"))
+		{
+			action(this.GetMaidAndMan(tag_data, true), list2);
+		}
+		else
+		{
+			for (int i = 0; i < GameMain.Instance.CharacterMgr.GetMaidCount(); i++)
+			{
+				action(GameMain.Instance.CharacterMgr.GetMaid(i), list2);
+			}
+			for (int j = 0; j < GameMain.Instance.CharacterMgr.GetManCount(); j++)
+			{
+				action(GameMain.Instance.CharacterMgr.GetMan(j), list2);
+			}
+		}
+		if (tag_data.IsValid("auto"))
+		{
+			this.CheckAbsolutelyNecessaryTag(tag_data, "reg", new string[]
+			{
+				"targetman"
+			});
+			string value = tag_data.GetTagProperty("reg").AsString();
+			KupaCtrl.OPEN reg = (KupaCtrl.OPEN)Enum.Parse(typeof(KupaCtrl.OPEN), value, true);
+			int man_no = tag_data.GetTagProperty("targetman").AsInteger();
+			Maid man = this.GetMan(man_no);
+			float val = (float)tag_data.GetTagProperty("val").AsInteger() * 0.01f;
+			float speedIn = 5f;
+			if (tag_data.IsValid("speedin"))
+			{
+				speedIn = (float)tag_data.GetTagProperty("speedin").AsInteger() * 0.01f;
+			}
+			float sppedOut = 5f;
+			if (tag_data.IsValid("speedout"))
+			{
+				sppedOut = (float)tag_data.GetTagProperty("speedout").AsInteger() * 0.01f;
+			}
+			float outVal = 0f;
+			if (tag_data.IsValid("outval"))
+			{
+				outVal = (float)tag_data.GetTagProperty("outval").AsInteger() * 0.01f;
+			}
+			list2[0].AutoKupaStart(reg, man, val, speedIn, sppedOut, outVal);
+		}
+		else if (tag_data.IsValid("finish"))
+		{
+			foreach (KupaCtrl kupaCtrl in list2)
+			{
+				if (tag_data.IsValid("reg"))
+				{
+					string value2 = tag_data.GetTagProperty("reg").AsString();
+					KupaCtrl.OPEN reg2 = (KupaCtrl.OPEN)Enum.Parse(typeof(KupaCtrl.OPEN), value2, true);
+					kupaCtrl.Finish(reg2);
+				}
+				else
+				{
+					kupaCtrl.FinishAll();
+				}
+			}
+		}
+		else if (tag_data.IsValid("reset"))
+		{
+			foreach (KupaCtrl kupaCtrl2 in list2)
+			{
+				if (tag_data.IsValid("reg"))
+				{
+					string value3 = tag_data.GetTagProperty("reg").AsString();
+					KupaCtrl.OPEN reg3 = (KupaCtrl.OPEN)Enum.Parse(typeof(KupaCtrl.OPEN), value3, true);
+					kupaCtrl2.Reset(reg3);
+				}
+				else
+				{
+					kupaCtrl2.ResetAll();
+				}
+			}
+		}
+		else
+		{
+			this.CheckAbsolutelyNecessaryTag(tag_data, "reg", new string[]
+			{
+				"val"
+			});
+			bool add = tag_data.IsValid("add");
+			string value4 = tag_data.GetTagProperty("reg").AsString();
+			KupaCtrl.OPEN reg4 = (KupaCtrl.OPEN)Enum.Parse(typeof(KupaCtrl.OPEN), value4, true);
+			int num = 0;
+			if (tag_data.IsValid("time"))
+			{
+				num = tag_data.GetTagProperty("time").AsInteger();
+			}
+			int num2 = 0;
+			if (tag_data.IsValid("wait"))
+			{
+				num2 = tag_data.GetTagProperty("wait").AsInteger();
+			}
+			int num3 = tag_data.GetTagProperty("val").AsInteger();
+			list2[0].KupaStart(reg4, (float)num * 0.001f, (float)num2 * 0.001f, (float)num3 * 0.01f, add);
+		}
 		return false;
 		return false;
 	}
 	}
 
 
@@ -5111,7 +5276,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	public void Serialize(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_KAG");
 		binary.Write("CM3D2_KAG");
-		binary.Write(1260);
+		binary.Write(1270);
 		byte[] array = this.kag_.Serialize();
 		byte[] array = this.kag_.Serialize();
 		int value = array.Length;
 		int value = array.Length;
 		binary.Write(value);
 		binary.Write(value);

+ 1 - 1
Assembly-CSharp/BasePhotoCustomObject.cs

@@ -173,7 +173,7 @@ public abstract class BasePhotoCustomObject : MonoBehaviour, IComparable<BasePho
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			{
 			{
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
-				binaryWriter.Write(1260);
+				binaryWriter.Write(1270);
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.scale_);
 				binaryWriter.Write(this.scale_);
 				binaryWriter.Write(this.enabledTextureColor_);
 				binaryWriter.Write(this.enabledTextureColor_);

+ 1 - 1
Assembly-CSharp/BasePhotoWindowManager.cs

@@ -153,7 +153,7 @@ public abstract class BasePhotoWindowManager : MonoBehaviour
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			using (BinaryWriter binaryWriter = new BinaryWriter(memoryStream))
 			{
 			{
 				binaryWriter.Write(this.save_header_uidata);
 				binaryWriter.Write(this.save_header_uidata);
-				binaryWriter.Write(1260);
+				binaryWriter.Write(1270);
 				binaryWriter.Write(this.save_data_.Count);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{
 				{

+ 10 - 6
Assembly-CSharp/BetSetUI.cs

@@ -93,27 +93,31 @@ public class BetSetUI : MonoBehaviour
 		if (GameMain.Instance.CharacterMgr.status.GetFlag("ベット額警告非表示") == 0)
 		if (GameMain.Instance.CharacterMgr.status.GetFlag("ベット額警告非表示") == 0)
 		{
 		{
 			bool flag = this.m_MoneySetting.MoneyValue >= (long)this.m_WarningMoney;
 			bool flag = this.m_MoneySetting.MoneyValue >= (long)this.m_WarningMoney;
-			string warning_message = string.Format("{0:#,##0}枚以上賭けようとしています。\n本当に賭けますか?", this.m_WarningMoney);
+			string warning_message_term = "SceneCasino/ダイアログ/賭けようとしています。本当に賭けますか?";
+			string[] warning_message_term_args = new string[]
+			{
+				string.Format("{0:#,##0}", this.m_WarningMoney)
+			};
 			bool flag2 = this.m_MoneySetting.MoneyValue * 2L > GameMain.Instance.CharacterMgr.status.casinoCoin;
 			bool flag2 = this.m_MoneySetting.MoneyValue * 2L > GameMain.Instance.CharacterMgr.status.casinoCoin;
-			string f_strMsg = "現在の賭け額と所持コインの枚数では\nダブルダウン・スプリットは行えません\n本当に賭けますか?";
+			string messageTerm = "SceneCasino/ダイアログ/現在の賭け額と所持コインの枚数ではダブルダウンとスプリットは行えません";
 			if (flag2)
 			if (flag2)
 			{
 			{
 				if (flag)
 				if (flag)
 				{
 				{
 					SystemDialog.OnClick f_dgOk = delegate()
 					SystemDialog.OnClick f_dgOk = delegate()
 					{
 					{
-						GameMain.Instance.SysDlg.Show(warning_message, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+						GameMain.Instance.SysDlg.ShowFromLanguageTerm(warning_message_term, warning_message_term_args, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
 					};
 					};
-					GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, f_dgOk, null);
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, null, SystemDialog.TYPE.OK_CANCEL, f_dgOk, null);
 				}
 				}
 				else
 				else
 				{
 				{
-					GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
 				}
 				}
 			}
 			}
 			else if (flag)
 			else if (flag)
 			{
 			{
-				GameMain.Instance.SysDlg.Show(warning_message, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm(warning_message_term, warning_message_term_args, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BetFadeOut), null);
 			}
 			}
 			else
 			else
 			{
 			{

+ 5 - 3
Assembly-CSharp/BlackjackGame.cs

@@ -493,7 +493,7 @@ public class BlackjackGame : MonoBehaviour
 
 
 	public void PushEndButton()
 	public void PushEndButton()
 	{
 	{
-		GameMain.Instance.SysDlg.Show("カジノ画面に戻ります", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BJEnd), null);
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/カジノ画面に戻ります", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BJEnd), null);
 	}
 	}
 
 
 	public void BJStart()
 	public void BJStart()
@@ -506,8 +506,10 @@ public class BlackjackGame : MonoBehaviour
 		}
 		}
 		else
 		else
 		{
 		{
-			string f_strMsg = string.Format("ブラックジャックをするには最低でも\nコインが{0:#,##0}枚必用です", BetSetUI.Instance.MoneySetting.MinValue);
-			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/ブラックジャックをするには最低でもコインが必用です", new string[]
+			{
+				string.Format("{0:#,##0}", BetSetUI.Instance.MoneySetting.MinValue)
+			}, SystemDialog.TYPE.OK, null, null);
 		}
 		}
 	}
 	}
 
 

+ 55 - 5
Assembly-CSharp/CMSystem.cs

@@ -29,6 +29,7 @@ public class CMSystem
 		this.MsgAlreadySkip = true;
 		this.MsgAlreadySkip = true;
 		this.MsgVoiceNoStop = true;
 		this.MsgVoiceNoStop = true;
 		this.SubtitleType = SubtitleDisplayManager.DisplayType.OriginalAndSubtitle;
 		this.SubtitleType = SubtitleDisplayManager.DisplayType.OriginalAndSubtitle;
+		this.YotogiSubtitleVisible = true;
 		this.EjaculationSeEnabled = true;
 		this.EjaculationSeEnabled = true;
 		this.NetUse = false;
 		this.NetUse = false;
 		this.CM3D2Path = string.Empty;
 		this.CM3D2Path = string.Empty;
@@ -176,6 +177,18 @@ public class CMSystem
 
 
 	public bool MsgVoiceNoStop { get; set; }
 	public bool MsgVoiceNoStop { get; set; }
 
 
+	public Product.Language SystemLanguage
+	{
+		get
+		{
+			return Product.WMZI;
+		}
+		set
+		{
+			Product.WMZI = value;
+		}
+	}
+
 	public SubtitleDisplayManager.DisplayType SubtitleType
 	public SubtitleDisplayManager.DisplayType SubtitleType
 	{
 	{
 		get
 		get
@@ -184,7 +197,19 @@ public class CMSystem
 		}
 		}
 		set
 		set
 		{
 		{
-			this.m_SubtitleType = SubtitleDisplayManager.DisplayType.None;
+			this.m_SubtitleType = ((!Product.SPP) ? SubtitleDisplayManager.DisplayType.None : value);
+		}
+	}
+
+	public bool YotogiSubtitleVisible
+	{
+		get
+		{
+			return this.m_YotogiSubtitleVisible;
+		}
+		set
+		{
+			this.m_YotogiSubtitleVisible = (!Product.SPP || value);
 		}
 		}
 	}
 	}
 
 
@@ -808,7 +833,7 @@ public class CMSystem
 	{
 	{
 		XElement xelement = new XElement("Config", new object[]
 		XElement xelement = new XElement("Config", new object[]
 		{
 		{
-			new XAttribute("Version", 1260),
+			new XAttribute("Version", 1270),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			new XElement("Screen", new object[]
 			{
 			{
@@ -833,7 +858,9 @@ public class CMSystem
 				new XElement("MsgAutoSpeed", this.MsgAutoSpeed),
 				new XElement("MsgAutoSpeed", this.MsgAutoSpeed),
 				new XElement("MsgAlreadySkip", this.MsgAlreadySkip),
 				new XElement("MsgAlreadySkip", this.MsgAlreadySkip),
 				new XElement("MsgVoiceNoStop", this.MsgVoiceNoStop),
 				new XElement("MsgVoiceNoStop", this.MsgVoiceNoStop),
+				new XElement("SystemLanguage", this.SystemLanguage.ToString()),
 				new XElement("SubtitleType", this.SubtitleType.ToString()),
 				new XElement("SubtitleType", this.SubtitleType.ToString()),
+				new XElement("YotogiSubtitleVisible", this.YotogiSubtitleVisible.ToString()),
 				new XElement("EjaculationSeEnabled", this.EjaculationSeEnabled)
 				new XElement("EjaculationSeEnabled", this.EjaculationSeEnabled)
 			}),
 			}),
 			new XElement("Other", new object[]
 			new XElement("Other", new object[]
@@ -854,6 +881,18 @@ public class CMSystem
 				new XElement("QuitWhenAssert", this.QuitWhenAssert)
 				new XElement("QuitWhenAssert", this.QuitWhenAssert)
 			})
 			})
 		});
 		});
+		if (!Product.SPP)
+		{
+			XElement xelement2 = xelement.Element("Message");
+			if (xelement2 != null)
+			{
+				xelement2 = xelement2.Element("SystemLanguage");
+				if (xelement2 != null && xelement2 != null)
+				{
+					xelement2.Remove();
+				}
+			}
+		}
 		if (GameMain.Instance.VRMode && !GameMain.Instance.VRDummyMode)
 		if (GameMain.Instance.VRMode && !GameMain.Instance.VRDummyMode)
 		{
 		{
 			XContainer xcontainer = xelement;
 			XContainer xcontainer = xelement;
@@ -953,12 +992,21 @@ public class CMSystem
 				this.MsgVoiceNoStop = bool.Parse(this.getElemetn(xelm3, "MsgVoiceNoStop", "true").Value);
 				this.MsgVoiceNoStop = bool.Parse(this.getElemetn(xelm3, "MsgVoiceNoStop", "true").Value);
 				try
 				try
 				{
 				{
+					this.SystemLanguage = (Product.Language)Enum.Parse(typeof(Product.Language), this.getElemetn(xelm3, "SystemLanguage", Product.OOWU.ToString()).Value);
+				}
+				catch (Exception)
+				{
+					this.SystemLanguage = Product.OOWU;
+				}
+				try
+				{
 					this.SubtitleType = (SubtitleDisplayManager.DisplayType)Enum.Parse(typeof(SubtitleDisplayManager.DisplayType), this.getElemetn(xelm3, "SubtitleType", SubtitleDisplayManager.DisplayType.OriginalAndSubtitle.ToString()).Value);
 					this.SubtitleType = (SubtitleDisplayManager.DisplayType)Enum.Parse(typeof(SubtitleDisplayManager.DisplayType), this.getElemetn(xelm3, "SubtitleType", SubtitleDisplayManager.DisplayType.OriginalAndSubtitle.ToString()).Value);
 				}
 				}
 				catch (Exception)
 				catch (Exception)
 				{
 				{
 					this.SubtitleType = SubtitleDisplayManager.DisplayType.None;
 					this.SubtitleType = SubtitleDisplayManager.DisplayType.None;
 				}
 				}
+				this.YotogiSubtitleVisible = bool.Parse(this.getElemetn(xelm3, "YotogiSubtitleVisible", "true").Value);
 				this.EjaculationSeEnabled = bool.Parse(this.getElemetn(xelm3, "EjaculationSeEnabled", "true").Value);
 				this.EjaculationSeEnabled = bool.Parse(this.getElemetn(xelm3, "EjaculationSeEnabled", "true").Value);
 				XElement xelement2 = xelement.Element("Other");
 				XElement xelement2 = xelement.Element("Other");
 				if (xelement2 != null)
 				if (xelement2 != null)
@@ -1133,7 +1181,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
 		{
@@ -1301,6 +1349,8 @@ public class CMSystem
 
 
 	private SubtitleDisplayManager.DisplayType m_SubtitleType;
 	private SubtitleDisplayManager.DisplayType m_SubtitleType;
 
 
+	private bool m_YotogiSubtitleVisible;
+
 	private int m_nDesktopCaptureMonitorNo = 1;
 	private int m_nDesktopCaptureMonitorNo = 1;
 
 
 	private bool m_bEditItemGroup = true;
 	private bool m_bEditItemGroup = true;
@@ -1765,7 +1815,7 @@ public class CMSystem
 
 
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1260;
+			this.m_nVersion = 1270;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -1773,7 +1823,7 @@ public class CMSystem
 		}
 		}
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1260;
+		private int m_nVersion = 1270;
 
 
 		[SerializeField]
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";

+ 14 - 3
Assembly-CSharp/CasinoItemUI.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -30,11 +31,20 @@ public class CasinoItemUI : MonoBehaviour
 	{
 	{
 		if (!this.m_ItemData.IsCanBuy)
 		if (!this.m_ItemData.IsCanBuy)
 		{
 		{
-			GameMain.Instance.SysDlg.Show("カジノコインが不足しています。", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/カジノコインが不足しています。", null, SystemDialog.TYPE.OK, null, null);
 			return;
 			return;
 		}
 		}
-		string f_strMsg = this.m_ItemData.Name + "\nを購入しますか?\nカジノコイン -" + Utility.ConvertMoneyText(this.m_ItemData.Price) + "枚";
-		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, delegate
+		string messageTerm = "SceneCasino/ダイアログ/{0}を購入しますか?";
+		string[] array = new string[]
+		{
+			this.m_ItemData.Name,
+			Utility.ConvertMoneyText(this.m_ItemData.Price)
+		};
+		if (Product.SPP)
+		{
+			array[0] = LocalizationManager.GetTranslation(this.m_ItemData.NameTerm, true, 0, true, false, null, null);
+		}
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, array, SystemDialog.TYPE.OK_CANCEL, delegate
 		{
 		{
 			KasaSceneMgr<SceneCasinoShop>.Instance.ItemBuy(this.m_ItemData);
 			KasaSceneMgr<SceneCasinoShop>.Instance.ItemBuy(this.m_ItemData);
 		}, null);
 		}, null);
@@ -44,6 +54,7 @@ public class CasinoItemUI : MonoBehaviour
 	{
 	{
 		this.m_ItemData = item_data;
 		this.m_ItemData = item_data;
 		this.m_NameLabel.text = item_data.Name;
 		this.m_NameLabel.text = item_data.Name;
+		Utility.SetLocalizeTerm(this.m_NameLabel, item_data.NameTerm);
 		this.m_PriceLabel.text = Utility.ConvertMoneyText(item_data.Price);
 		this.m_PriceLabel.text = Utility.ConvertMoneyText(item_data.Price);
 		this.m_ItemIcon = this.m_ItemIconObj.GetComponent<UI2DSprite>();
 		this.m_ItemIcon = this.m_ItemIconObj.GetComponent<UI2DSprite>();
 		this.m_IconButton = this.m_ItemIconObj.GetComponent<UIButton>();
 		this.m_IconButton = this.m_ItemIconObj.GetComponent<UIButton>();

+ 16 - 0
Assembly-CSharp/CasinoShopItem.cs

@@ -68,6 +68,22 @@ public class CasinoShopItem
 		}
 		}
 	}
 	}
 
 
+	public string NameTerm
+	{
+		get
+		{
+			return "SceneCasino/アイテム/" + this.Name;
+		}
+	}
+
+	public string DocumentTerm
+	{
+		get
+		{
+			return "SceneCasino/アイテム説明/" + this.Name;
+		}
+	}
+
 	public bool IsCategoryCostume
 	public bool IsCategoryCostume
 	{
 	{
 		get
 		get

+ 1 - 1
Assembly-CSharp/CharaSelectStatusMgr.cs

@@ -5,7 +5,7 @@ public class CharaSelectStatusMgr : StatusMgr
 {
 {
 	public override void Init()
 	public override void Init()
 	{
 	{
-		this.m_ctrl = (GameUty.supportMultiLanguage ? this.statusLocalizeCtrl : this.statusCtrl);
+		this.m_ctrl = (Product.SPP ? this.statusLocalizeCtrl : this.statusCtrl);
 		this.m_goPanel = this.m_ctrl.gameObject;
 		this.m_goPanel = this.m_ctrl.gameObject;
 		this.m_ctrl.Init(this, this.m_goPanel);
 		this.m_ctrl.Init(this, this.m_goPanel);
 		this.m_goPanel.SetActive(false);
 		this.m_goPanel.SetActive(false);

+ 9 - 4
Assembly-CSharp/CharacterMgr.cs

@@ -990,7 +990,7 @@ public class CharacterMgr : MonoBehaviour
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		string result = string.Empty;
 		string result = string.Empty;
 		binaryWriter.Write("CM3D2_PRESET_S");
 		binaryWriter.Write("CM3D2_PRESET_S");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		binaryWriter.Write((char)presset_type);
 		binaryWriter.Write((char)presset_type);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
@@ -1007,7 +1007,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		binaryWriter.Write((int)f_type);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		if (texture2D != null)
 		{
 		{
@@ -1053,7 +1053,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		binaryWriter.Write((int)f_type);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		if (texture2D != null)
 		{
 		{
@@ -1306,13 +1306,18 @@ public class CharacterMgr : MonoBehaviour
 				f_maid.Parts.SetPartsColor((MaidParts.PARTS_COLOR)k, f_prest.aryPartsColor[k]);
 				f_maid.Parts.SetPartsColor((MaidParts.PARTS_COLOR)k, f_prest.aryPartsColor[k]);
 			}
 			}
 		}
 		}
+		if (Product.VBA)
+		{
+			f_maid.SetProp(MPN.bra, "bra030_i_.menu", 0, false, false);
+			f_maid.SetProp(MPN.panz, "Pants030_i_.menu", 0, false, false);
+		}
 		f_maid.AllProcPropSeqStart();
 		f_maid.AllProcPropSeqStart();
 	}
 	}
 
 
 	public bool Serialize(BinaryWriter bwWrite)
 	public bool Serialize(BinaryWriter bwWrite)
 	{
 	{
 		bwWrite.Write("CM3D2_CHR_MGR");
 		bwWrite.Write("CM3D2_CHR_MGR");
-		bwWrite.Write(1260);
+		bwWrite.Write(1270);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)
 		for (int i = 0; i < this.m_listStockMan.Count; i++)

+ 3 - 3
Assembly-CSharp/CharacterSelectMain.cs

@@ -177,7 +177,7 @@ public class CharacterSelectMain : WfScreenChildren
 			}
 			}
 			else
 			else
 			{
 			{
-				explanatoryLabel = "夜伽を行うメイドを選択してください。";
+				explanatoryLabel = (Product.VBA ? "メイドを選択してください。" : "夜伽を行うメイドを選択してください。");
 			}
 			}
 			this.SetExplanatoryLabel(explanatoryLabel);
 			this.SetExplanatoryLabel(explanatoryLabel);
 			if (!this.auto_select_)
 			if (!this.auto_select_)
@@ -676,8 +676,8 @@ public class CharacterSelectMain : WfScreenChildren
 		{
 		{
 			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogi)
 			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogi)
 			{
 			{
-				string f_strMsg = "まだ夜伽を実行していないメイドがいます。\n夜伽を終了しますか?";
-				GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, delegate
+				string messageTerm = "Dialog/まだ夜伽を実行していないメイドがいます。夜伽を終了しますか?";
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, null, SystemDialog.TYPE.OK_CANCEL, delegate
 				{
 				{
 					GameMain.Instance.SysDlg.Close();
 					GameMain.Instance.SysDlg.Close();
 					this.select_maid_ = null;
 					this.select_maid_ = null;

+ 2 - 11
Assembly-CSharp/ClassChangePanel.cs

@@ -1,6 +1,5 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using MaidStatus.CsvData;
 using MaidStatus.CsvData;
 using UnityEngine;
 using UnityEngine;
@@ -223,17 +222,9 @@ public class ClassChangePanel : MonoBehaviour
 		JobClass.Data data = JobClass.GetData(maid_class_type);
 		JobClass.Data data = JobClass.GetData(maid_class_type);
 		ClassData<JobClass.Data> classData = this.maid_.status.jobClass.Get(maid_class_type);
 		ClassData<JobClass.Data> classData = this.maid_.status.jobClass.Get(maid_class_type);
 		this.info_panel_item_.class_name.text = data.drawName;
 		this.info_panel_item_.class_name.text = data.drawName;
-		Localize component = this.info_panel_item_.class_name.GetComponent<Localize>();
-		if (component != null && GameUty.supportMultiLanguage)
-		{
-			component.SetTerm(data.termName);
-		}
+		Utility.SetLocalizeTerm(this.info_panel_item_.class_name, data.termName);
 		this.info_panel_item_.info_text.text = data.explanatoryText;
 		this.info_panel_item_.info_text.text = data.explanatoryText;
-		component = this.info_panel_item_.info_text.GetComponent<Localize>();
-		if (component != null && GameUty.supportMultiLanguage)
-		{
-			component.SetTerm(data.termExplanatoryText);
-		}
+		Utility.SetLocalizeTerm(this.info_panel_item_.info_text, data.termExplanatoryText);
 		if (classData != null)
 		if (classData != null)
 		{
 		{
 			this.info_panel_item_.class_level.text = classData.level.ToString();
 			this.info_panel_item_.class_level.text = classData.level.ToString();

+ 2 - 6
Assembly-CSharp/ClassUnit.cs

@@ -1,7 +1,7 @@
 using System;
 using System;
-using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class ClassUnit : MonoBehaviour
 public class ClassUnit : MonoBehaviour
 {
 {
@@ -61,11 +61,7 @@ public class ClassUnit : MonoBehaviour
 		JobClass.Data data = JobClass.GetData(class_type);
 		JobClass.Data data = JobClass.GetData(class_type);
 		this.class_name_.text = data.drawName;
 		this.class_name_.text = data.drawName;
 		this.class_level_.text = "0";
 		this.class_level_.text = "0";
-		Localize component = this.class_name_.GetComponent<Localize>();
-		if (component != null && GameUty.supportMultiLanguage)
-		{
-			component.SetTerm(data.termName);
-		}
+		Utility.SetLocalizeTerm(this.class_name_, data.termName);
 	}
 	}
 
 
 	public void SetYotogiClassType(int class_type)
 	public void SetYotogiClassType(int class_type)

+ 106 - 11
Assembly-CSharp/ConfigManager.cs

@@ -45,7 +45,10 @@ public class ConfigManager : MonoBehaviour
 		{
 		{
 			key.repositionNow = true;
 			key.repositionNow = true;
 		}
 		}
-		this.systemFrame.height -= 72;
+		if (!Product.SPP)
+		{
+			this.systemFrame.height -= 72;
+		}
 		EventDelegate.Add(this.closeButton.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.CloseConfigPanel));
 		EventDelegate.Add(this.closeButton.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.CloseConfigPanel));
 		EventDelegate.Add(this.vrConfigButton.onClick, delegate()
 		EventDelegate.Add(this.vrConfigButton.onClick, delegate()
 		{
 		{
@@ -112,6 +115,20 @@ public class ConfigManager : MonoBehaviour
 		{
 		{
 			GameMain.Instance.CMSystem.EjaculationSeEnabled = this.enabled;
 			GameMain.Instance.CMSystem.EjaculationSeEnabled = this.enabled;
 		};
 		};
+		if (Product.VBA)
+		{
+			this.ejaculationSe.gameObject.SetActive(false);
+		}
+		action(this.yotogiSubtitleVisible);
+		this.yotogiSubtitleVisible.onGetValue = (() => GameMain.Instance.CMSystem.YotogiSubtitleVisible);
+		this.yotogiSubtitleVisible.onSetValue = delegate(bool setValue)
+		{
+			GameMain.Instance.CMSystem.YotogiSubtitleVisible = this.enabled;
+		};
+		if (!Product.SPP)
+		{
+			this.yotogiSubtitleVisible.gameObject.SetActive(false);
+		}
 		foreach (Size<int> size in this.MakeResolutionPopupList())
 		foreach (Size<int> size in this.MakeResolutionPopupList())
 		{
 		{
 			this.screenResolution.items.Add(string.Format("{0}x{1}", size.width, size.height));
 			this.screenResolution.items.Add(string.Format("{0}x{1}", size.width, size.height));
@@ -145,7 +162,7 @@ public class ConfigManager : MonoBehaviour
 		});
 		});
 		if (this.subtitleType != null)
 		if (this.subtitleType != null)
 		{
 		{
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				IEnumerator enumerator2 = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
 				IEnumerator enumerator2 = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
 				try
 				try
@@ -153,7 +170,10 @@ public class ConfigManager : MonoBehaviour
 					while (enumerator2.MoveNext())
 					while (enumerator2.MoveNext())
 					{
 					{
 						object obj = enumerator2.Current;
 						object obj = enumerator2.Current;
-						this.subtitleType.AddItem(SubtitleDisplayManager.EnumConvert.GetTerm((SubtitleDisplayManager.DisplayType)obj));
+						if ((SubtitleDisplayManager.DisplayType)obj != SubtitleDisplayManager.DisplayType.None)
+						{
+							this.subtitleType.AddItem(SubtitleDisplayManager.EnumConvert.GetTerm((SubtitleDisplayManager.DisplayType)obj));
+						}
 					}
 					}
 				}
 				}
 				finally
 				finally
@@ -167,26 +187,26 @@ public class ConfigManager : MonoBehaviour
 				EventDelegate.Add(this.subtitleType.onChange, delegate()
 				EventDelegate.Add(this.subtitleType.onChange, delegate()
 				{
 				{
 					string currentPopupListValue = this.GetCurrentPopupListValue();
 					string currentPopupListValue = this.GetCurrentPopupListValue();
-					IEnumerator enumerator3 = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
+					IEnumerator enumerator4 = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
 					try
 					try
 					{
 					{
-						while (enumerator3.MoveNext())
+						while (enumerator4.MoveNext())
 						{
 						{
-							object obj2 = enumerator3.Current;
-							string term = SubtitleDisplayManager.EnumConvert.GetTerm((SubtitleDisplayManager.DisplayType)obj2);
+							object obj3 = enumerator4.Current;
+							string term = SubtitleDisplayManager.EnumConvert.GetTerm((SubtitleDisplayManager.DisplayType)obj3);
 							if (currentPopupListValue == term)
 							if (currentPopupListValue == term)
 							{
 							{
-								GameMain.Instance.CMSystem.SubtitleType = (SubtitleDisplayManager.DisplayType)obj2;
+								GameMain.Instance.CMSystem.SubtitleType = (SubtitleDisplayManager.DisplayType)obj3;
 								break;
 								break;
 							}
 							}
 						}
 						}
 					}
 					}
 					finally
 					finally
 					{
 					{
-						IDisposable disposable2;
-						if ((disposable2 = (enumerator3 as IDisposable)) != null)
+						IDisposable disposable3;
+						if ((disposable3 = (enumerator4 as IDisposable)) != null)
 						{
 						{
-							disposable2.Dispose();
+							disposable3.Dispose();
 						}
 						}
 					}
 					}
 				});
 				});
@@ -204,6 +224,67 @@ public class ConfigManager : MonoBehaviour
 				}
 				}
 			}
 			}
 		}
 		}
+		if (this.systemLanguage != null)
+		{
+			if (Product.SPP)
+			{
+				IEnumerator enumerator3 = Enum.GetValues(typeof(Product.Language)).GetEnumerator();
+				try
+				{
+					while (enumerator3.MoveNext())
+					{
+						object obj2 = enumerator3.Current;
+						this.systemLanguage.AddItem(Product.EnumConvert.GetTerm((Product.Language)obj2));
+					}
+				}
+				finally
+				{
+					IDisposable disposable2;
+					if ((disposable2 = (enumerator3 as IDisposable)) != null)
+					{
+						disposable2.Dispose();
+					}
+				}
+				EventDelegate.Add(this.systemLanguage.onChange, delegate()
+				{
+					string currentPopupListValue = this.GetCurrentPopupListValue();
+					IEnumerator enumerator4 = Enum.GetValues(typeof(Product.Language)).GetEnumerator();
+					try
+					{
+						while (enumerator4.MoveNext())
+						{
+							object obj3 = enumerator4.Current;
+							string term = Product.EnumConvert.GetTerm((Product.Language)obj3);
+							if (currentPopupListValue == term)
+							{
+								GameMain.Instance.CMSystem.SystemLanguage = (Product.Language)obj3;
+								break;
+							}
+						}
+					}
+					finally
+					{
+						IDisposable disposable3;
+						if ((disposable3 = (enumerator4 as IDisposable)) != null)
+						{
+							disposable3.Dispose();
+						}
+					}
+				});
+			}
+			else
+			{
+				Transform transform2 = this.systemLanguage.transform;
+				while (transform2.parent == null || transform2.parent.GetComponent<UIGrid>() == null)
+				{
+					transform2 = transform2.parent;
+				}
+				if (transform2 != null)
+				{
+					transform2.gameObject.SetActive(false);
+				}
+			}
+		}
 		intSliderInit(this.manAlpha);
 		intSliderInit(this.manAlpha);
 		this.manAlpha.onGetValue = (() => GameMain.Instance.CMSystem.ManAlpha);
 		this.manAlpha.onGetValue = (() => GameMain.Instance.CMSystem.ManAlpha);
 		this.manAlpha.onSetValue = delegate(int setValue)
 		this.manAlpha.onSetValue = delegate(int setValue)
@@ -264,6 +345,10 @@ public class ConfigManager : MonoBehaviour
 		action3(this.threeDEffectSE, AudioSourceMgr.Type.Se);
 		action3(this.threeDEffectSE, AudioSourceMgr.Type.Se);
 		action2(this.volumeEnv, AudioSourceMgr.Type.Env);
 		action2(this.volumeEnv, AudioSourceMgr.Type.Env);
 		action3(this.threeDEffectEnv, AudioSourceMgr.Type.Env);
 		action3(this.threeDEffectEnv, AudioSourceMgr.Type.Env);
+		foreach (UIGrid uigrid in base.GetComponentsInChildren<UIGrid>())
+		{
+			uigrid.repositionNow = true;
+		}
 	}
 	}
 
 
 	public void LoadConfig()
 	public void LoadConfig()
@@ -289,6 +374,8 @@ public class ConfigManager : MonoBehaviour
 		this.antiAlias.value = GameMain.Instance.CMSystem.Antialias.ToString();
 		this.antiAlias.value = GameMain.Instance.CMSystem.Antialias.ToString();
 		this.shadowQuality.value = GameMain.Instance.CMSystem.ShadowQuality.ToString();
 		this.shadowQuality.value = GameMain.Instance.CMSystem.ShadowQuality.ToString();
 		this.textureQuality.value = GameMain.Instance.CMSystem.TextureQuality.ToString();
 		this.textureQuality.value = GameMain.Instance.CMSystem.TextureQuality.ToString();
+		this.subtitleType.value = SubtitleDisplayManager.EnumConvert.GetTerm(GameMain.Instance.CMSystem.SubtitleType);
+		this.systemLanguage.value = Product.EnumConvert.GetTerm(GameMain.Instance.CMSystem.SystemLanguage);
 	}
 	}
 
 
 	public void SetCloseButtonActive(bool active)
 	public void SetCloseButtonActive(bool active)
@@ -486,6 +573,10 @@ public class ConfigManager : MonoBehaviour
 	private ConfigSelectButton ejaculationSe;
 	private ConfigSelectButton ejaculationSe;
 
 
 	[SerializeField]
 	[SerializeField]
+	[Header("夜伽中の字幕表示")]
+	private ConfigSelectButton yotogiSubtitleVisible;
+
+	[SerializeField]
 	[Header("男透明度")]
 	[Header("男透明度")]
 	private ConfigIntegerSlider manAlpha;
 	private ConfigIntegerSlider manAlpha;
 
 
@@ -530,6 +621,10 @@ public class ConfigManager : MonoBehaviour
 	private UIPopupList textureQuality;
 	private UIPopupList textureQuality;
 
 
 	[SerializeField]
 	[SerializeField]
+	[Header("システム言語")]
+	private UIPopupList systemLanguage;
+
+	[SerializeField]
 	[Header("翻訳版用-ADVの表示タイプ")]
 	[Header("翻訳版用-ADVの表示タイプ")]
 	private UIPopupList subtitleType;
 	private UIPopupList subtitleType;
 
 

+ 1 - 1
Assembly-CSharp/ConfigMgr.cs

@@ -75,7 +75,7 @@ public class ConfigMgr : BaseMgr<ConfigMgr>
 
 
 	public void Update()
 	public void Update()
 	{
 	{
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			int num = int.MinValue;
 			int num = int.MinValue;
 			if (Input.GetKeyDown(KeyCode.F1))
 			if (Input.GetKeyDown(KeyCode.F1))

+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

@@ -33,7 +33,7 @@ public static class ControllerShortcutSettingData
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1260;
+			this.m_nVersion = 1270;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -261,7 +261,7 @@ public static class ControllerShortcutSettingData
 		private const string CONF_NAME = "OvrControllerShortcutConfig.json";
 		private const string CONF_NAME = "OvrControllerShortcutConfig.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1260;
+		private int m_nVersion = 1270;
 
 
 		[SerializeField]
 		[SerializeField]
 		private bool IsDirectShortcutMode = true;
 		private bool IsDirectShortcutMode = true;

+ 70 - 25
Assembly-CSharp/ControllerShortcutWindow.cs

@@ -1,8 +1,10 @@
 using System;
 using System;
 using System.Collections;
 using System.Collections;
+using I2.Loc;
 using Kasizuki;
 using Kasizuki;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.SceneManagement;
 using UnityEngine.SceneManagement;
+using wf;
 
 
 public class ControllerShortcutWindow : MonoBehaviour
 public class ControllerShortcutWindow : MonoBehaviour
 {
 {
@@ -82,8 +84,16 @@ public class ControllerShortcutWindow : MonoBehaviour
 		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Start", "FadeWindow Start");
 		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Start", "FadeWindow Start");
 		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Countdown", "FadeWindow Countdown");
 		this.m_FadeWindowCalibration.CacheChildObject<NGUIWindow>("Window Countdown", "FadeWindow Countdown");
 		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label countdown", "countdown");
 		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label countdown", "countdown");
-		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label description", "label count desc");
-		this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Start/label", "label start desc");
+		if (Product.SPP)
+		{
+			this.m_FadeWindowCalibration.CacheChildObject<Localize>("Window Countdown/label description", "label count desc");
+			this.m_FadeWindowCalibration.CacheChildObject<Localize>("Window Start/label", "label start desc");
+		}
+		else
+		{
+			this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Countdown/label description", "label count desc");
+			this.m_FadeWindowCalibration.CacheChildObject<UILabel>("Window Start/label", "label start desc");
+		}
 		UIButton uibutton = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button start", "startButton");
 		UIButton uibutton = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button start", "startButton");
 		UIButton uibutton2 = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button end", "endButton");
 		UIButton uibutton2 = this.m_FadeWindowCalibration.CacheChildObject<UIButton>("Window Start/button end", "endButton");
 		NGUIWindow fadeWindowCalibration = this.m_FadeWindowCalibration;
 		NGUIWindow fadeWindowCalibration = this.m_FadeWindowCalibration;
@@ -99,8 +109,16 @@ public class ControllerShortcutWindow : MonoBehaviour
 		}));
 		}));
 		EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.OnClickCalibrationStart));
 		EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.OnClickCalibrationStart));
 		EventDelegate.Add(uibutton2.onClick, new EventDelegate.Callback(this.OnClickCalibrationEnd));
 		EventDelegate.Add(uibutton2.onClick, new EventDelegate.Callback(this.OnClickCalibrationEnd));
-		this.m_FadeWindowCalibration.GetCache<UILabel>("label count desc").text = ControllerShortcutWindow.STR_LABEL_DESC_COUNT_DOWN;
-		this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc").supportEncoding = true;
+		if (Product.SPP)
+		{
+			this.m_FadeWindowCalibration.GetCache<Localize>("label count desc").SetTerm(ControllerShortcutWindow.STR_LABEL_DESC_COUNT_DOWN_TERMS);
+			this.m_FadeWindowCalibration.GetCache<Localize>("label start desc").GetComponent<UILabel>().supportEncoding = true;
+		}
+		else
+		{
+			this.m_FadeWindowCalibration.GetCache<UILabel>("label count desc").text = ControllerShortcutWindow.STR_LABEL_DESC_COUNT_DOWN;
+			this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc").supportEncoding = true;
+		}
 	}
 	}
 
 
 	private void OnOpenFadeWindowParent()
 	private void OnOpenFadeWindowParent()
@@ -110,21 +128,32 @@ public class ControllerShortcutWindow : MonoBehaviour
 
 
 	private void ChangeLayout()
 	private void ChangeLayout()
 	{
 	{
-		UILabel cache = this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc");
-		UIButton cache2 = this.m_FadeWindowCalibration.GetCache<UIButton>("startButton");
-		UIButton cache3 = this.m_FadeWindowCalibration.GetCache<UIButton>("endButton");
-		UIWFTabButton cache4 = this.m_ButtonDic.GetCache<UIWFTabButton>("表情");
-		UIWFTabButton cache5 = this.m_ButtonDic.GetCache<UIWFTabButton>("モーション");
-		UIWFTabButton cache6 = this.m_ButtonDic.GetCache<UIWFTabButton>("ハンドサイン");
-		UIWFTabButton cache7 = this.m_ButtonDic.GetCache<UIWFTabButton>("一般オブジェクト");
+		UILabel uilabel = null;
+		Localize localize = null;
+		if (Product.SPP)
+		{
+			localize = this.m_FadeWindowCalibration.GetCache<Localize>("label start desc");
+			uilabel = localize.GetComponent<UILabel>();
+		}
+		else
+		{
+			uilabel = this.m_FadeWindowCalibration.GetCache<UILabel>("label start desc");
+		}
+		UIButton cache = this.m_FadeWindowCalibration.GetCache<UIButton>("startButton");
+		UIButton cache2 = this.m_FadeWindowCalibration.GetCache<UIButton>("endButton");
+		UIWFTabButton cache3 = this.m_ButtonDic.GetCache<UIWFTabButton>("表情");
+		UIWFTabButton cache4 = this.m_ButtonDic.GetCache<UIWFTabButton>("モーション");
+		UIWFTabButton cache5 = this.m_ButtonDic.GetCache<UIWFTabButton>("ハンドサイン");
+		UIWFTabButton cache6 = this.m_ButtonDic.GetCache<UIWFTabButton>("一般オブジェクト");
 		if (!OvrIK.IsVRIKMode)
 		if (!OvrIK.IsVRIKMode)
 		{
 		{
 			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
 			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
 			if (maid == null || !maid.Visible || maid.IsBusy || !maid.body0.isLoadedBody)
 			if (maid == null || !maid.Visible || maid.IsBusy || !maid.body0.isLoadedBody)
 			{
 			{
-				cache.text = ControllerShortcutWindow.STR_LABEL_DESC_MISSING_MAID;
+				uilabel.text = ControllerShortcutWindow.STR_LABEL_DESC_MISSING_MAID;
+				Utility.SetLocalizeTerm(localize, ControllerShortcutWindow.STR_LABEL_DESC_MISSING_MAID_TERMS);
+				cache.gameObject.SetActive(false);
 				cache2.gameObject.SetActive(false);
 				cache2.gameObject.SetActive(false);
-				cache3.gameObject.SetActive(false);
 				Debug.Log("OvrIK\u3000メイドの準備がまだ行われていません。");
 				Debug.Log("OvrIK\u3000メイドの準備がまだ行われていません。");
 			}
 			}
 			else
 			else
@@ -148,36 +177,40 @@ public class ControllerShortcutWindow : MonoBehaviour
 				}
 				}
 				if (!GameMain.Instance.CMSystem.SConfig.OvrIkAllSceneEnable && flag)
 				if (!GameMain.Instance.CMSystem.SConfig.OvrIkAllSceneEnable && flag)
 				{
 				{
-					cache.text = ControllerShortcutWindow.STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA;
+					uilabel.text = ControllerShortcutWindow.STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA;
+					Utility.SetLocalizeTerm(localize, ControllerShortcutWindow.STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA_TERMS);
+					cache.gameObject.SetActive(false);
 					cache2.gameObject.SetActive(false);
 					cache2.gameObject.SetActive(false);
-					cache3.gameObject.SetActive(false);
 				}
 				}
 				else
 				else
 				{
 				{
-					cache.text = ControllerShortcutWindow.STR_LABEL_DESC_START;
-					cache2.gameObject.SetActive(true);
-					cache3.gameObject.SetActive(false);
+					uilabel.text = ControllerShortcutWindow.STR_LABEL_DESC_START;
+					Utility.SetLocalizeTerm(localize, ControllerShortcutWindow.STR_LABEL_DESC_START_TERMS);
+					cache.gameObject.SetActive(true);
+					cache2.gameObject.SetActive(false);
 					if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.VIVE && ControllerShortcutSettingData.config.use1TrackerForHead)
 					if (GameMain.Instance.VRDeviceTypeID == GameMain.VRDeviceType.VIVE && ControllerShortcutSettingData.config.use1TrackerForHead)
 					{
 					{
-						UILabel uilabel = cache;
-						uilabel.text = uilabel.text + "\n" + ControllerShortcutWindow.STR_LABEL_DESC_START_NOTES_TRACKER;
+						UILabel uilabel2 = uilabel;
+						uilabel2.text = uilabel2.text + "\n" + ControllerShortcutWindow.STR_LABEL_DESC_START_NOTES_TRACKER;
+						Utility.SetLocalizeTerm(localize, ControllerShortcutWindow.STR_LABEL_DESC_START_NOTES_TRACKER_TERMS);
 					}
 					}
 				}
 				}
 			}
 			}
+			cache3.isEnabled = false;
 			cache4.isEnabled = false;
 			cache4.isEnabled = false;
 			cache5.isEnabled = false;
 			cache5.isEnabled = false;
 			cache6.isEnabled = false;
 			cache6.isEnabled = false;
-			cache7.isEnabled = false;
 		}
 		}
 		else
 		else
 		{
 		{
-			cache.text = ControllerShortcutWindow.STR_LABEL_DESC_END;
-			cache2.gameObject.SetActive(false);
-			cache3.gameObject.SetActive(true);
+			uilabel.text = ControllerShortcutWindow.STR_LABEL_DESC_END;
+			Utility.SetLocalizeTerm(localize, ControllerShortcutWindow.STR_LABEL_DESC_END_TERMS);
+			cache.gameObject.SetActive(false);
+			cache2.gameObject.SetActive(true);
+			cache3.isEnabled = true;
 			cache4.isEnabled = true;
 			cache4.isEnabled = true;
 			cache5.isEnabled = true;
 			cache5.isEnabled = true;
 			cache6.isEnabled = true;
 			cache6.isEnabled = true;
-			cache7.isEnabled = true;
 		}
 		}
 	}
 	}
 
 
@@ -387,6 +420,18 @@ public class ControllerShortcutWindow : MonoBehaviour
 
 
 	private ObjectCacheDic m_ButtonDic;
 	private ObjectCacheDic m_ButtonDic;
 
 
+	private static readonly string STR_LABEL_DESC_MISSING_MAID_TERMS = "VAS/センターテキスト/キャリブレーション開始";
+
+	private static readonly string STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA_TERMS = "VAS/センターテキスト/センターテキスト/移動カメラエラー";
+
+	private static readonly string STR_LABEL_DESC_START_TERMS = "VAS/センターテキスト/キャリブレーション開始";
+
+	private static readonly string STR_LABEL_DESC_START_NOTES_TRACKER_TERMS = "VAS/センターテキスト/キャリブレーション開始+注意";
+
+	private static readonly string STR_LABEL_DESC_COUNT_DOWN_TERMS = "VAS/センターテキスト/カウントダウン注意";
+
+	private static readonly string STR_LABEL_DESC_END_TERMS = "VAS/センターテキスト/終了文";
+
 	private static readonly string STR_LABEL_DESC_MISSING_MAID = "メイドの準備ができていません。";
 	private static readonly string STR_LABEL_DESC_MISSING_MAID = "メイドの準備ができていません。";
 
 
 	private static readonly string STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA = "移動カメラモードでは実行できません。";
 	private static readonly string STR_LABEL_DESC_NOT_SUPPORT_MOVE_CAMERA = "移動カメラモードでは実行できません。";

+ 2 - 2
Assembly-CSharp/CreateBGObjectSubWindow.cs

@@ -30,8 +30,8 @@ public class CreateBGObjectSubWindow : BasePhotoSubWindow
 		}
 		}
 		this.addButtonList.SetData(dictionary2, dictionary, false);
 		this.addButtonList.SetData(dictionary2, dictionary, false);
 		this.addButtonList.onClickEventList.Add(new Action<object>(this.OnClickItem));
 		this.addButtonList.onClickEventList.Add(new Action<object>(this.OnClickItem));
-		this.addButtonList.PopUpList.PopupList.isLocalized = GameUty.supportMultiLanguage;
-		this.addButtonList.PopUpList.PopupList.itemTerms = ((!GameUty.supportMultiLanguage) ? null : PhotoBGObjectData.popup_category_term_list);
+		this.addButtonList.PopUpList.PopupList.isLocalized = Product.SPP;
+		this.addButtonList.PopUpList.PopupList.itemTerms = ((!this.addButtonList.PopUpList.PopupList.isLocalized) ? null : PhotoBGObjectData.popup_category_term_list);
 		this.addButtonList.popup_value_list = PhotoBGObjectData.popup_category_list;
 		this.addButtonList.popup_value_list = PhotoBGObjectData.popup_category_list;
 	}
 	}
 
 

+ 1 - 1
Assembly-CSharp/DailyCtrl.cs

@@ -94,7 +94,7 @@ public class DailyCtrl : MonoBehaviour
 				DailyCtrl.ButtonType.LegacyMode
 				DailyCtrl.ButtonType.LegacyMode
 			};
 			};
 		}
 		}
-		this.GetMenuButton(DailyCtrl.ButtonType.NPCEdit).active = PluginData.IsEnabled("GP001");
+		this.GetMenuButton(DailyCtrl.ButtonType.NPCEdit).active = (!Product.VBA && PluginData.IsEnabled("GP001"));
 		foreach (DailyCtrl.ButtonType type in array3)
 		foreach (DailyCtrl.ButtonType type in array3)
 		{
 		{
 			this.GetMenuButton(type).active = false;
 			this.GetMenuButton(type).active = false;

+ 2 - 0
Assembly-CSharp/Dance/SettingData.cs

@@ -32,5 +32,7 @@ namespace Dance
 		public bool AllRelease;
 		public bool AllRelease;
 
 
 		public bool IsSubtitleOn = true;
 		public bool IsSubtitleOn = true;
+
+		public SubtitleDisplayManager.DisplayType SubtitleType = SubtitleDisplayManager.DisplayType.Subtitle;
 	}
 	}
 }
 }

+ 2 - 2
Assembly-CSharp/DanceSelect.cs

@@ -237,7 +237,7 @@ public class DanceSelect : WfScreenChildren
 		{
 		{
 			NDebug.AssertNull(this.select_panelset_array_[i].ContentsPanel != null && this.select_panelset_array_[i].ParentPanel != null);
 			NDebug.AssertNull(this.select_panelset_array_[i].ContentsPanel != null && this.select_panelset_array_[i].ParentPanel != null);
 		}
 		}
-		if (!GameUty.supportMultiLanguage)
+		if (!Product.SPP)
 		{
 		{
 			this.m_CharaSelectLabel = UTY.GetChildObject(this.CharaSelectPanel.ParentPanel.gameObject, "ExplanatoryText/Value", false).GetComponent<UILabel>();
 			this.m_CharaSelectLabel = UTY.GetChildObject(this.CharaSelectPanel.ParentPanel.gameObject, "ExplanatoryText/Value", false).GetComponent<UILabel>();
 			Localize component3 = this.m_CharaSelectLabel.GetComponent<Localize>();
 			Localize component3 = this.m_CharaSelectLabel.GetComponent<Localize>();
@@ -665,7 +665,7 @@ public class DanceSelect : WfScreenChildren
 			{
 			{
 				DanceSelect.m_SelectedDance.Add(this.m_SecondDanceData);
 				DanceSelect.m_SelectedDance.Add(this.m_SecondDanceData);
 			}
 			}
-			if (!GameUty.supportMultiLanguage && (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Challenge || RhythmAction_Mgr.IsVSDance))
+			if (!Product.SPP && (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Challenge || RhythmAction_Mgr.IsVSDance))
 			{
 			{
 				this.m_CharaSelectLabel.text = "ダンスを行うメイドを" + select_chara_num + "人選択してください。";
 				this.m_CharaSelectLabel.text = "ダンスを行うメイドを" + select_chara_num + "人選択してください。";
 			}
 			}

+ 38 - 7
Assembly-CSharp/DanceSetting.cs

@@ -204,18 +204,21 @@ public class DanceSetting : MonoBehaviour
 			case DanceSetting.SettingType.Undress:
 			case DanceSetting.SettingType.Undress:
 				flag = this.IsUndressFaceMatch(text3);
 				flag = this.IsUndressFaceMatch(text3);
 				break;
 				break;
-			case DanceSetting.SettingType.Subtitle:
+			case DanceSetting.SettingType.SubtitleOn:
 				flag = this.IsSettingOn(text3, DanceSetting.Settings.IsSubtitleOn);
 				flag = this.IsSettingOn(text3, DanceSetting.Settings.IsSubtitleOn);
 				break;
 				break;
+			case DanceSetting.SettingType.SubtitleType:
+				flag = this.IsSubtitleTypeMatch(text3);
+				break;
 			}
 			}
-			IL_1DF:
+			IL_1F2:
 			if (flag)
 			if (flag)
 			{
 			{
 				list.value = ((!flag2) ? text3 : text2);
 				list.value = ((!flag2) ? text3 : text2);
 				break;
 				break;
 			}
 			}
 			continue;
 			continue;
-			goto IL_1DF;
+			goto IL_1F2;
 		}
 		}
 	}
 	}
 
 
@@ -311,6 +314,12 @@ public class DanceSetting : MonoBehaviour
 		return DanceSetting.Settings.NoteJudgeTiming == float.Parse(text.Replace("秒", string.Empty));
 		return DanceSetting.Settings.NoteJudgeTiming == float.Parse(text.Replace("秒", string.Empty));
 	}
 	}
 
 
+	private bool IsSubtitleTypeMatch(string text)
+	{
+		string @string = SubtitleDisplayManager.EnumConvert.GetString(DanceSetting.Settings.SubtitleType);
+		return text == @string;
+	}
+
 	private void OnDestroy()
 	private void OnDestroy()
 	{
 	{
 		using (FileStream fileStream = new FileStream(Path.GetFullPath(".\\dance_setting_br.dat"), FileMode.Create, FileAccess.Write))
 		using (FileStream fileStream = new FileStream(Path.GetFullPath(".\\dance_setting_br.dat"), FileMode.Create, FileAccess.Write))
@@ -470,6 +479,19 @@ public class DanceSetting : MonoBehaviour
 		DanceSetting.Settings.NoteJudgeTiming = float.Parse(value_text);
 		DanceSetting.Settings.NoteJudgeTiming = float.Parse(value_text);
 	}
 	}
 
 
+	private void SetSubtitleType(string value_text)
+	{
+		foreach (SubtitleDisplayManager.DisplayType displayType in (SubtitleDisplayManager.DisplayType[])Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)))
+		{
+			string @string = SubtitleDisplayManager.EnumConvert.GetString(displayType);
+			if (value_text == @string)
+			{
+				DanceSetting.Settings.SubtitleType = displayType;
+				break;
+			}
+		}
+	}
+
 	private void ValueSetting()
 	private void ValueSetting()
 	{
 	{
 		string text = UIPopupList.current.value.Replace("\r", string.Empty);
 		string text = UIPopupList.current.value.Replace("\r", string.Empty);
@@ -529,9 +551,12 @@ public class DanceSetting : MonoBehaviour
 		case DanceSetting.SettingType.Undress:
 		case DanceSetting.SettingType.Undress:
 			this.SetUndressFace(text2);
 			this.SetUndressFace(text2);
 			break;
 			break;
-		case DanceSetting.SettingType.Subtitle:
+		case DanceSetting.SettingType.SubtitleOn:
 			this.SwitchFlag(text2, ref DanceSetting.Settings.IsSubtitleOn);
 			this.SwitchFlag(text2, ref DanceSetting.Settings.IsSubtitleOn);
 			break;
 			break;
+		case DanceSetting.SettingType.SubtitleType:
+			this.SetSubtitleType(text2);
+			break;
 		}
 		}
 		if (this.m_SettingUIList[UIPopupList.current].Label)
 		if (this.m_SettingUIList[UIPopupList.current].Label)
 		{
 		{
@@ -598,10 +623,14 @@ public class DanceSetting : MonoBehaviour
 			{
 			{
 				flag &= uiinspectorSetting.UseVR;
 				flag &= uiinspectorSetting.UseVR;
 			}
 			}
-			if (uiinspectorSetting.MyType == DanceSetting.SettingType.Subtitle)
+			if (uiinspectorSetting.MyType == DanceSetting.SettingType.SubtitleOn)
 			{
 			{
 				flag = false;
 				flag = false;
 			}
 			}
+			else if (uiinspectorSetting.MyType == DanceSetting.SettingType.SubtitleType)
+			{
+				flag &= Product.SPP;
+			}
 			gameObject.SetActive(flag);
 			gameObject.SetActive(flag);
 			if (flag)
 			if (flag)
 			{
 			{
@@ -652,7 +681,8 @@ public class DanceSetting : MonoBehaviour
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.FpsCam),
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.FpsCam),
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Cutin),
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Cutin),
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Undress),
 		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Undress),
-		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.Subtitle)
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.SubtitleOn),
+		new DanceSetting.UIInspectorSetting(DanceSetting.SettingType.SubtitleType)
 	};
 	};
 
 
 	private bool m_IsSettingChange;
 	private bool m_IsSettingChange;
@@ -697,7 +727,8 @@ public class DanceSetting : MonoBehaviour
 		Cutin,
 		Cutin,
 		Undress,
 		Undress,
 		AllRelease,
 		AllRelease,
-		Subtitle
+		SubtitleOn,
+		SubtitleType
 	}
 	}
 
 
 	[Serializable]
 	[Serializable]

+ 91 - 22
Assembly-CSharp/DanceSubtitleMgr.cs

@@ -28,6 +28,7 @@ public class DanceSubtitleMgr : PartsMgrBase
 			this.m_SubtitleDataList.Add(subtitleData);
 			this.m_SubtitleDataList.Add(subtitleData);
 		}, 1, delegate
 		}, 1, delegate
 		{
 		{
+			this.IsActive = false;
 			Debug.Log(csv_path + "が見つからなかったので、ダンスの字幕を非表示にします。");
 			Debug.Log(csv_path + "が見つからなかったので、ダンスの字幕を非表示にします。");
 			this.gameObject.SetActive(false);
 			this.gameObject.SetActive(false);
 		});
 		});
@@ -36,35 +37,69 @@ public class DanceSubtitleMgr : PartsMgrBase
 	private void DrawSubtitle()
 	private void DrawSubtitle()
 	{
 	{
 		float danceTimer = RhythmAction_Mgr.Instance.DanceTimer;
 		float danceTimer = RhythmAction_Mgr.Instance.DanceTimer;
-		string str = DanceMain.SelectDanceData.SubtitleSheetName + "/";
-		string currentLanguageCode = LocalizationManager.CurrentLanguageCode;
-		foreach (DanceSubtitleMgr.SubtitleData subtitleData in this.m_SubtitleDataList)
+		string sheet_name = DanceMain.SelectDanceData.SubtitleSheetName + "/";
+		Product.Language wmzi = Product.WMZI;
+		using (List<DanceSubtitleMgr.SubtitleData>.Enumerator enumerator = this.m_SubtitleDataList.GetEnumerator())
 		{
 		{
-			if (subtitleData.EndTime <= danceTimer)
+			while (enumerator.MoveNext())
 			{
 			{
-				if (subtitleData.SubtitleUI)
+				DanceSubtitleMgr.SubtitleData data = enumerator.Current;
+				if (data.EndTime <= danceTimer)
 				{
 				{
-					UnityEngine.Object.DestroyImmediate(subtitleData.SubtitleUI);
-					this.m_SubtitleUIGrid.UpdateChildUI();
+					if (data.IsExistUIObj)
+					{
+						data.DestroyUIObj();
+						this.m_SubtitleUIGrid.UpdateChildUI();
+					}
 				}
 				}
-			}
-			else if (subtitleData.StartTime <= danceTimer && !subtitleData.SubtitleUI)
-			{
-				string term = str + subtitleData.TranslationKey;
-				string translation = LocalizationManager.GetTranslation(term, true, 0, true, false, null, currentLanguageCode);
-				if (!string.IsNullOrEmpty(translation))
+				else if (data.StartTime <= danceTimer && !data.IsExistUIObj)
 				{
 				{
-					subtitleData.SubtitleUI = UnityEngine.Object.Instantiate<GameObject>(this.m_SubtitleUI, this.m_SubtitleUIGrid.transform, false);
-					subtitleData.SubtitleUI.SetActive(true);
-					UILabel component = subtitleData.SubtitleUI.GetComponent<UILabel>();
-					component.text = translation;
-					if (component.width > this.m_NewLineWidthSize)
+					bool create_success = false;
+					Action<Product.Language> action = delegate(Product.Language langage)
 					{
 					{
-						component.overflowMethod = UILabel.Overflow.ResizeHeight;
-						component.width = this.m_NewLineWidthSize;
-						component.ProcessText();
+						string term = sheet_name + data.TranslationKey;
+						string translation = LocalizationManager.GetTranslation(term, true, 0, true, false, null, Product.EnumConvert.ToI2LocalizeLanguageName(langage));
+						if (string.IsNullOrEmpty(translation))
+						{
+							return;
+						}
+						GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.m_SubtitleUI, this.m_SubtitleUIGrid.transform, false);
+						gameObject.SetActive(true);
+						data.SetUIObj(langage, gameObject);
+						UILabel component = gameObject.GetComponent<UILabel>();
+						component.text = translation;
+						if (component.width > this.m_NewLineWidthSize)
+						{
+							component.overflowMethod = UILabel.Overflow.ResizeHeight;
+							component.width = this.m_NewLineWidthSize;
+							component.ProcessText();
+						}
+						create_success |= true;
+					};
+					if (Product.SPP)
+					{
+						switch (DanceSetting.Settings.SubtitleType)
+						{
+						case SubtitleDisplayManager.DisplayType.OriginalAndSubtitle:
+							action(Product.Language.INKD);
+							action(wmzi);
+							break;
+						case SubtitleDisplayManager.DisplayType.Subtitle:
+							action(wmzi);
+							break;
+						case SubtitleDisplayManager.DisplayType.Original:
+							action(Product.Language.INKD);
+							break;
+						}
+					}
+					else
+					{
+						action(Product.Language.INKD);
+					}
+					if (create_success)
+					{
+						this.m_SubtitleUIGrid.UpdateChildUI();
 					}
 					}
-					this.m_SubtitleUIGrid.UpdateChildUI();
 				}
 				}
 			}
 			}
 		}
 		}
@@ -91,6 +126,38 @@ public class DanceSubtitleMgr : PartsMgrBase
 
 
 	private class SubtitleData
 	private class SubtitleData
 	{
 	{
+		public bool IsExistUIObj
+		{
+			get
+			{
+				return this.OrijinalUI != null || this.SubtitleUI != null;
+			}
+		}
+
+		public void SetUIObj(Product.Language langage_code, GameObject ui_obj)
+		{
+			if (langage_code == Product.Language.INKD)
+			{
+				this.OrijinalUI = ui_obj;
+			}
+			else
+			{
+				this.SubtitleUI = ui_obj;
+			}
+		}
+
+		public void DestroyUIObj()
+		{
+			if (this.OrijinalUI)
+			{
+				UnityEngine.Object.DestroyImmediate(this.OrijinalUI);
+			}
+			if (this.SubtitleUI)
+			{
+				UnityEngine.Object.DestroyImmediate(this.SubtitleUI);
+			}
+		}
+
 		public int ID;
 		public int ID;
 
 
 		public float StartTime;
 		public float StartTime;
@@ -99,6 +166,8 @@ public class DanceSubtitleMgr : PartsMgrBase
 
 
 		public string TranslationKey;
 		public string TranslationKey;
 
 
+		public GameObject OrijinalUI;
+
 		public GameObject SubtitleUI;
 		public GameObject SubtitleUI;
 	}
 	}
 }
 }

+ 2 - 2
Assembly-CSharp/DeskManager.cs

@@ -143,7 +143,7 @@ internal class DeskManager
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_DeskCustomize");
 		binary.Write("CM3D2_DeskCustomize");
-		binary.Write(1260);
+		binary.Write(1270);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		{
 		{
@@ -317,7 +317,7 @@ internal class DeskManager
 		{
 		{
 			get
 			get
 			{
 			{
-				return !GameUty.supportMultiLanguage && this.seasonal_;
+				return !Product.SPP && this.seasonal_;
 			}
 			}
 		}
 		}
 
 

+ 3 - 3
Assembly-CSharp/DynamicBone.cs

@@ -30,7 +30,7 @@ public class DynamicBone : MonoBehaviour
 			return false;
 			return false;
 		};
 		};
 		f_bw.Write("CM3D21_PHY");
 		f_bw.Write("CM3D21_PHY");
-		f_bw.Write(1260);
+		f_bw.Write(1270);
 		if (this.m_Root == null)
 		if (this.m_Root == null)
 		{
 		{
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
@@ -94,7 +94,7 @@ public class DynamicBone : MonoBehaviour
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	{
 	{
 		f_bw.Write("CM3D21_COL");
 		f_bw.Write("CM3D21_COL");
-		f_bw.Write(1260);
+		f_bw.Write(1270);
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		{
 		{
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
@@ -110,7 +110,7 @@ public class DynamicBone : MonoBehaviour
 			else
 			else
 			{
 			{
 				f_bw.Write(this.m_Colliders[i].TypeName);
 				f_bw.Write(this.m_Colliders[i].TypeName);
-				this.m_Colliders[i].Serialize(f_bw, 1260);
+				this.m_Colliders[i].Serialize(f_bw, 1270);
 			}
 			}
 		}
 		}
 		this.m_ColliderFileName = f_strFileName;
 		this.m_ColliderFileName = f_strFileName;

+ 1 - 1
Assembly-CSharp/DynamicSkirtBone.cs

@@ -18,7 +18,7 @@ public class DynamicSkirtBone : MonoBehaviour
 	public bool SerializeWrite(BinaryWriter f_bw)
 	public bool SerializeWrite(BinaryWriter f_bw)
 	{
 	{
 		f_bw.Write("CM3D21_PSK");
 		f_bw.Write("CM3D21_PSK");
-		f_bw.Write(1260);
+		f_bw.Write(1270);
 		f_bw.Write(this.m_fPanierRadius);
 		f_bw.Write(this.m_fPanierRadius);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;

+ 132 - 129
Assembly-CSharp/Edit/MaidProfile.cs

@@ -196,159 +196,162 @@ namespace Edit
 				}
 				}
 			}
 			}
 			text = "profile_comment_4.nei";
 			text = "profile_comment_4.nei";
-			using (AFileBase afileBase4 = GameUty.FileSystem.FileOpen(text))
+			if (!Product.VBA)
 			{
 			{
-				NDebug.Assert(afileBase4.IsValid(), "file open failed.\n" + text);
-				using (CsvParser csv = new CsvParser())
+				using (AFileBase afileBase4 = GameUty.FileSystem.FileOpen(text))
 				{
 				{
-					if (!csv.Open(afileBase4))
-					{
-						NDebug.Assert("csv open failed.\n" + text, false);
-					}
-					Func<MaidProfile.CsvDataBlock, int, bool> line_func9 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+					NDebug.Assert(afileBase4.IsValid(), "file open failed.\n" + text);
+					using (CsvParser csv = new CsvParser())
 					{
 					{
-						int num = 1;
-						if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
+						if (!csv.Open(afileBase4))
 						{
 						{
-							YotogiClass.Data data = YotogiClass.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y));
-							if (data.id != status_.selectedJobClass.data.id)
-							{
-								return false;
-							}
+							NDebug.Assert("csv open failed.\n" + text, false);
 						}
 						}
-						int[] array = new int[]
-						{
-							status_.sexPlayNumberOfPeople,
-							status_.inyoku,
-							status_.lovely,
-							status_.mvalue,
-							status_.elegance,
-							status_.hentai,
-							status_.charm,
-							status_.housi
-						};
-						foreach (int num2 in array)
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func9 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 						{
 						{
+							int num = 1;
 							if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
 							if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
 							{
 							{
-								int cellAsInteger = csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y);
-								if (cellAsInteger > num2)
+								YotogiClass.Data data = YotogiClass.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y));
+								if (data.id != status_.selectedJobClass.data.id)
 								{
 								{
 									return false;
 									return false;
 								}
 								}
 							}
 							}
-						}
-						return true;
-					};
-					MaidProfile.CsvDataBlock csvDataBlock4 = new MaidProfile.CsvDataBlock(csv, 0);
-					Func<MaidProfile.CsvDataBlock, int, bool> line_func10 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
-					{
-						Personal.Data data = Personal.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y));
-						return status_.personal.id == data.id;
-					};
-					csvDataBlock4.BlockAnalysis(1, line_func10, success_call_back);
-					csvDataBlock4.NextBlock();
-					Func<MaidProfile.CsvDataBlock, int, bool> line_func11 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
-					{
-						Contract cellAsInteger = (Contract)cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
-						return status_.contract == cellAsInteger;
-					};
-					csvDataBlock4.BlockAnalysis(1, line_func11, success_call_back);
-					csvDataBlock4.NextBlock();
-					if (!employment && status_.seikeiken == Seikeiken.No_No)
-					{
-						Func<MaidProfile.CsvDataBlock, int, bool> line_func12 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
-						{
-							int num = int.MinValue;
-							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							int[] array = new int[]
 							{
 							{
-								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
-							}
-							bool flag = num <= status_.inyoku;
-							if (flag)
+								status_.sexPlayNumberOfPeople,
+								status_.inyoku,
+								status_.lovely,
+								status_.mvalue,
+								status_.elegance,
+								status_.hentai,
+								status_.charm,
+								status_.housi
+							};
+							foreach (int num2 in array)
 							{
 							{
-								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+								if (csv.IsCellToExistData(cur_block.GetOriginalX(num++), line_y))
+								{
+									int cellAsInteger = csv.GetCellAsInteger(cur_block.GetOriginalX(num - 1), line_y);
+									if (cellAsInteger > num2)
+									{
+										return false;
+									}
+								}
 							}
 							}
-							return flag;
+							return true;
 						};
 						};
-						csvDataBlock4.BlockAnalysis(1, line_func12, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (employment && status_.seikeiken == Seikeiken.No_No)
-					{
-						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (!employment && status_.seikeiken == Seikeiken.Yes_No)
-					{
-						Func<MaidProfile.CsvDataBlock, int, bool> line_func13 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						MaidProfile.CsvDataBlock csvDataBlock4 = new MaidProfile.CsvDataBlock(csv, 0);
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func10 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 						{
 						{
-							int num = int.MinValue;
-							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
-							{
-								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
-							}
-							bool flag = num <= status_.sexPlayNumberOfPeople;
-							if (flag)
-							{
-								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
-							}
-							return flag;
+							Personal.Data data = Personal.GetData(cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y));
+							return status_.personal.id == data.id;
 						};
 						};
-						csvDataBlock4.BlockAnalysis(1, line_func13, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (employment && status_.seikeiken == Seikeiken.Yes_No)
-					{
-						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (!employment && status_.seikeiken == Seikeiken.No_Yes)
-					{
-						Func<MaidProfile.CsvDataBlock, int, bool> line_func14 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+						csvDataBlock4.BlockAnalysis(1, line_func10, success_call_back);
+						csvDataBlock4.NextBlock();
+						Func<MaidProfile.CsvDataBlock, int, bool> line_func11 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 						{
 						{
-							int num = int.MinValue;
-							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							Contract cellAsInteger = (Contract)cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+							return status_.contract == cellAsInteger;
+						};
+						csvDataBlock4.BlockAnalysis(1, line_func11, success_call_back);
+						csvDataBlock4.NextBlock();
+						if (!employment && status_.seikeiken == Seikeiken.No_No)
+						{
+							Func<MaidProfile.CsvDataBlock, int, bool> line_func12 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 							{
 							{
-								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
-							}
-							bool flag = num <= status_.sexPlayNumberOfPeople;
-							if (flag)
+								int num = int.MinValue;
+								if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+								{
+									num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+								}
+								bool flag = num <= status_.inyoku;
+								if (flag)
+								{
+									status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+								}
+								return flag;
+							};
+							csvDataBlock4.BlockAnalysis(1, line_func12, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (employment && status_.seikeiken == Seikeiken.No_No)
+						{
+							csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (!employment && status_.seikeiken == Seikeiken.Yes_No)
+						{
+							Func<MaidProfile.CsvDataBlock, int, bool> line_func13 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 							{
 							{
-								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
-							}
-							return flag;
-						};
-						csvDataBlock4.BlockAnalysis(1, line_func14, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (employment && status_.seikeiken == Seikeiken.No_Yes)
-					{
-						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (!employment && status_.seikeiken == Seikeiken.Yes_Yes)
-					{
-						Func<MaidProfile.CsvDataBlock, int, bool> line_func15 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
+								int num = int.MinValue;
+								if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+								{
+									num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+								}
+								bool flag = num <= status_.sexPlayNumberOfPeople;
+								if (flag)
+								{
+									status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+								}
+								return flag;
+							};
+							csvDataBlock4.BlockAnalysis(1, line_func13, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (employment && status_.seikeiken == Seikeiken.Yes_No)
 						{
 						{
-							int num = int.MinValue;
-							if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+							csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (!employment && status_.seikeiken == Seikeiken.No_Yes)
+						{
+							Func<MaidProfile.CsvDataBlock, int, bool> line_func14 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 							{
 							{
-								num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
-							}
-							bool flag = num <= status_.sexPlayNumberOfPeople;
-							if (flag)
+								int num = int.MinValue;
+								if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+								{
+									num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+								}
+								bool flag = num <= status_.sexPlayNumberOfPeople;
+								if (flag)
+								{
+									status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+								}
+								return flag;
+							};
+							csvDataBlock4.BlockAnalysis(1, line_func14, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (employment && status_.seikeiken == Seikeiken.No_Yes)
+						{
+							csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (!employment && status_.seikeiken == Seikeiken.Yes_Yes)
+						{
+							Func<MaidProfile.CsvDataBlock, int, bool> line_func15 = delegate(MaidProfile.CsvDataBlock cur_block, int line_y)
 							{
 							{
-								status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
-							}
-							return flag;
-						};
-						csvDataBlock4.BlockAnalysis(1, line_func15, success_call_back);
-					}
-					csvDataBlock4.NextBlock();
-					if (employment && status_.seikeiken == Seikeiken.Yes_Yes)
-					{
-						csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+								int num = int.MinValue;
+								if (csv.IsCellToExistData(cur_block.GetOriginalX(1), line_y))
+								{
+									num = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(1), line_y);
+								}
+								bool flag = num <= status_.sexPlayNumberOfPeople;
+								if (flag)
+								{
+									status_.studyRate = cur_block.csv.GetCellAsInteger(cur_block.GetOriginalX(2), line_y);
+								}
+								return flag;
+							};
+							csvDataBlock4.BlockAnalysis(1, line_func15, success_call_back);
+						}
+						csvDataBlock4.NextBlock();
+						if (employment && status_.seikeiken == Seikeiken.Yes_Yes)
+						{
+							csvDataBlock4.BlockAnalysis(1, line_func9, success_call_back);
+						}
 					}
 					}
 				}
 				}
 			}
 			}

+ 1 - 1
Assembly-CSharp/EditMod.cs

@@ -303,7 +303,7 @@ public class EditMod : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MOD");
 		binaryWriter.Write("CM3D2_MOD");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		binaryWriter.Write(value);
 		binaryWriter.Write(value);
 		binaryWriter.Write(text2.ToLower());
 		binaryWriter.Write(text2.ToLower());
 		binaryWriter.Write(value2);
 		binaryWriter.Write(value2);

+ 1 - 1
Assembly-CSharp/EmpireLifeModeManager.cs

@@ -477,7 +477,7 @@ public class EmpireLifeModeManager : MonoBehaviour
 	public bool Serialize(BinaryWriter brWrite)
 	public bool Serialize(BinaryWriter brWrite)
 	{
 	{
 		brWrite.Write("CM3D21_LIFE_MODE_MGR");
 		brWrite.Write("CM3D21_LIFE_MODE_MGR");
-		brWrite.Write(1260);
+		brWrite.Write(1270);
 		brWrite.Write("2");
 		brWrite.Write("2");
 		DataArray<int, byte> saveDataScenarioExecuteCountArray = this.m_SaveDataScenarioExecuteCountArray;
 		DataArray<int, byte> saveDataScenarioExecuteCountArray = this.m_SaveDataScenarioExecuteCountArray;
 		if (EmpireLifeModeManager.<>f__mg$cache1 == null)
 		if (EmpireLifeModeManager.<>f__mg$cache1 == null)

+ 16 - 3
Assembly-CSharp/ExChangeUI.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.UI;
 using wf;
 using wf;
@@ -28,6 +29,15 @@ public class ExChangeUI : MonoBehaviour
 		moneySetting.ValueUpdateAction = (MoneySetttingUI.ValueUpdateMethod)Delegate.Combine(moneySetting.ValueUpdateAction, new MoneySetttingUI.ValueUpdateMethod(this.UIStateUpdate));
 		moneySetting.ValueUpdateAction = (MoneySetttingUI.ValueUpdateMethod)Delegate.Combine(moneySetting.ValueUpdateAction, new MoneySetttingUI.ValueUpdateMethod(this.UIStateUpdate));
 		this.m_MyCanvas = base.GetComponent<CanvasGroup>();
 		this.m_MyCanvas = base.GetComponent<CanvasGroup>();
 		this.m_RateText.text = string.Format("コイン1枚 = {0}CR", Utility.ConvertMoneyText(this.m_CoinRate));
 		this.m_RateText.text = string.Format("コイン1枚 = {0}CR", Utility.ConvertMoneyText(this.m_CoinRate));
+		if (Product.SPP)
+		{
+			Localize localize = this.m_RateText.gameObject.AddComponent<Localize>();
+			localize.TermArgs = new Localize.ArgsPair[]
+			{
+				Localize.ArgsPair.Create(Utility.ConvertMoneyText(this.m_CoinRate))
+			};
+			Utility.SetLocalizeTerm(localize, "SceneCasino/コイン1枚 = {0}CR");
+		}
 		this.TextUIUpdate();
 		this.TextUIUpdate();
 		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, true);
 		this.m_MoneySetting.SetMoneyUI(this.m_MoneySetting.MinValue, true);
 		base.gameObject.SetActive(false);
 		base.gameObject.SetActive(false);
@@ -99,13 +109,16 @@ public class ExChangeUI : MonoBehaviour
 	{
 	{
 		if (GameMain.Instance.CharacterMgr.status.money < this.m_MoneySetting.MinValue * (long)this.m_CoinRate)
 		if (GameMain.Instance.CharacterMgr.status.money < this.m_MoneySetting.MinValue * (long)this.m_CoinRate)
 		{
 		{
-			string f_strMsg = string.Format("換金するには最低でも\n資金が{0:#,##0}CR必用です", this.m_MoneySetting.MinValue * (long)this.m_CoinRate);
-			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+			string messageTerm = string.Format("SceneCasino/ダイアログ/換金するには最低でも資金が必用です", this.m_MoneySetting.MinValue * (long)this.m_CoinRate);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, new string[]
+			{
+				string.Format("{0:#,##0}", this.m_MoneySetting.MinValue * (long)this.m_CoinRate)
+			}, SystemDialog.TYPE.OK, null, null);
 			return;
 			return;
 		}
 		}
 		if (GameMain.Instance.CharacterMgr.status.casinoCoin >= 999999L - this.m_MoneySetting.MinValue)
 		if (GameMain.Instance.CharacterMgr.status.casinoCoin >= 999999L - this.m_MoneySetting.MinValue)
 		{
 		{
-			GameMain.Instance.SysDlg.Show("これ以上換金できません", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/これ以上換金できません", null, SystemDialog.TYPE.OK, null, null);
 			return;
 			return;
 		}
 		}
 		if (this.FadeInStartAction != null)
 		if (this.FadeInStartAction != null)

+ 2 - 2
Assembly-CSharp/FaceWindow.cs

@@ -25,7 +25,7 @@ public class FaceWindow : BaseMaidPhotoWindow
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].termName);
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].termName);
 			}
 			}
 		}
 		}
-		if (!GameUty.supportMultiLanguage)
+		if (!Product.SPP)
 		{
 		{
 			dictionary = null;
 			dictionary = null;
 		}
 		}
@@ -448,7 +448,7 @@ public class FaceWindow : BaseMaidPhotoWindow
 			}
 			}
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
 			PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
-			this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : PhotoFaceData.popup_category_term_list);
+			this.PopupAndTabList.popup_term_list = ((!Product.SPP) ? null : PhotoFaceData.popup_category_term_list);
 			this.PopupAndTabList.popup_value_list = PhotoFaceData.popup_category_list;
 			this.PopupAndTabList.popup_value_list = PhotoFaceData.popup_category_list;
 			this.PopupAndTabList.SetPopupValue(photoFaceData.category);
 			this.PopupAndTabList.SetPopupValue(photoFaceData.category);
 			this.PopupAndTabList.SetSelectButton(photoFaceData, false);
 			this.PopupAndTabList.SetSelectButton(photoFaceData, false);

+ 1 - 1
Assembly-CSharp/Facility.cs

@@ -15,7 +15,7 @@ public class Facility : MonoBehaviour
 		Facility.FacilityStatus facilityStatus = FacilityDataTable.GetFacilityStatus(facilityTypeID, true);
 		Facility.FacilityStatus facilityStatus = FacilityDataTable.GetFacilityStatus(facilityTypeID, true);
 		this.param.typeID = facilityStatus.typeID;
 		this.param.typeID = facilityStatus.typeID;
 		this.param.name = facilityStatus.name;
 		this.param.name = facilityStatus.name;
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			string translation = LocalizationManager.GetTranslation(facilityStatus.termName, true, 0, true, false, null, null);
 			string translation = LocalizationManager.GetTranslation(facilityStatus.termName, true, 0, true, false, null, null);
 			if (!string.IsNullOrEmpty(translation))
 			if (!string.IsNullOrEmpty(translation))

+ 1 - 1
Assembly-CSharp/FacilityManager.cs

@@ -657,7 +657,7 @@ public class FacilityManager : MonoBehaviour
 		Stopwatch stopwatch = new Stopwatch();
 		Stopwatch stopwatch = new Stopwatch();
 		stopwatch.Start();
 		stopwatch.Start();
 		brWrite.Write("CM3D21_FACILITY_MGR");
 		brWrite.Write("CM3D21_FACILITY_MGR");
-		brWrite.Write(1260);
+		brWrite.Write(1270);
 		brWrite.Write("5");
 		brWrite.Write("5");
 		int num = 0;
 		int num = 0;
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)

+ 1 - 1
Assembly-CSharp/FacilityUIPowerUpMaterialList.cs

@@ -50,7 +50,7 @@ public class FacilityUIPowerUpMaterialList : MonoBehaviour
 			componentInChildren.ClearOptions();
 			componentInChildren.ClearOptions();
 			Facility.PowerUpMaterial[] materialArray = <SetupFacilityPowerUpMaterialListDropDown>c__AnonStorey.$this.FacilityMgr.GetFacilityPowerUpItemEnableArray(num);
 			Facility.PowerUpMaterial[] materialArray = <SetupFacilityPowerUpMaterialListDropDown>c__AnonStorey.$this.FacilityMgr.GetFacilityPowerUpItemEnableArray(num);
 			LocalizeDropdown localizeDropdown = null;
 			LocalizeDropdown localizeDropdown = null;
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				localizeDropdown = componentInChildren.GetComponent<LocalizeDropdown>();
 				localizeDropdown = componentInChildren.GetComponent<LocalizeDropdown>();
 				if (localizeDropdown != null)
 				if (localizeDropdown != null)

+ 10 - 0
Assembly-CSharp/FluctuationOfParameterUnit.cs

@@ -1,5 +1,7 @@
 using System;
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class FluctuationOfParameterUnit : MonoBehaviour
 public class FluctuationOfParameterUnit : MonoBehaviour
 {
 {
@@ -8,6 +10,7 @@ public class FluctuationOfParameterUnit : MonoBehaviour
 		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
 		this.bg_sprite_ = UTY.GetChildObject(base.gameObject, "BGGray", false).GetComponent<UISprite>();
 		this.name_label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
 		this.name_label_ = UTY.GetChildObject(base.gameObject, "Name", false).GetComponent<UILabel>();
 		this.value_label_ = UTY.GetChildObject(base.gameObject, "Value", false).GetComponent<UILabel>();
 		this.value_label_ = UTY.GetChildObject(base.gameObject, "Value", false).GetComponent<UILabel>();
+		this.name_label_loc_ = this.name_label_.GetComponent<Localize>();
 	}
 	}
 
 
 	public void SetActive(bool value)
 	public void SetActive(bool value)
@@ -35,6 +38,11 @@ public class FluctuationOfParameterUnit : MonoBehaviour
 		this.name_label_.text = name;
 		this.name_label_.text = name;
 	}
 	}
 
 
+	public void SetTextNameTerm(string term)
+	{
+		Utility.SetLocalizeTerm(this.name_label_loc_, term);
+	}
+
 	public void SetTextValue(int value)
 	public void SetTextValue(int value)
 	{
 	{
 		this.value_label_.text = "0";
 		this.value_label_.text = "0";
@@ -94,4 +102,6 @@ public class FluctuationOfParameterUnit : MonoBehaviour
 	private UILabel value_label_;
 	private UILabel value_label_;
 
 
 	private Action anime_event_;
 	private Action anime_event_;
+
+	private Localize name_label_loc_;
 }
 }

+ 41 - 0
Assembly-CSharp/FreeSkillSelect.cs

@@ -136,6 +136,32 @@ public class FreeSkillSelect : MonoBehaviour
 			if (buttonData.children_list.Count != 0)
 			if (buttonData.children_list.Count != 0)
 			{
 			{
 				buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject2, buttonData.name, buttonData.nameTerm, 0 < this.button_data_list_[l].children_list.Count, eventDelegate);
 				buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject2, buttonData.name, buttonData.nameTerm, 0 < this.button_data_list_[l].children_list.Count, eventDelegate);
+				bool flag = false;
+				foreach (FreeSkillSelect.ButtonData buttonData2 in buttonData.children_list)
+				{
+					foreach (FreeSkillSelect.ButtonData buttonData3 in buttonData2.children_list)
+					{
+						Skill.Data skill_data = buttonData3.skill_data;
+						if (1 < skill_data.user_player_num && 0 < skill_data.recollectionHaremLockPersonalIds.Count)
+						{
+							int num = 1;
+							while (num < skill_data.user_player_num && !flag)
+							{
+								Maid maid = GameMain.Instance.CharacterMgr.GetMaid(num);
+								if (maid != null && !skill_data.recollectionHaremLockPersonalIds.Contains(maid.status.personal.id))
+								{
+									flag = true;
+								}
+								num++;
+							}
+						}
+						else
+						{
+							flag = true;
+						}
+					}
+				}
+				buttonData.tab_button_obj.isEnabled = flag;
 			}
 			}
 		}
 		}
 		updateObject2.Update();
 		updateObject2.Update();
@@ -363,7 +389,22 @@ public class FreeSkillSelect : MonoBehaviour
 		{
 		{
 			component2.SetTerm(skill_data.termName);
 			component2.SetTerm(skill_data.termName);
 		}
 		}
+		bool flag = true;
+		if (1 < skill_data.user_player_num && 0 < skill_data.recollectionHaremLockPersonalIds.Count)
+		{
+			int num = 1;
+			while (num < skill_data.user_player_num && flag)
+			{
+				Maid maid = GameMain.Instance.CharacterMgr.GetMaid(num);
+				if (maid != null && skill_data.recollectionHaremLockPersonalIds.Contains(maid.status.personal.id))
+				{
+					flag = false;
+				}
+				num++;
+			}
+		}
 		UIWFTabButton component3 = UTY.GetChildObject(gameObject, "BG", false).GetComponent<UIWFTabButton>();
 		UIWFTabButton component3 = UTY.GetChildObject(gameObject, "BG", false).GetComponent<UIWFTabButton>();
+		component3.isEnabled = flag;
 		if (onclick_event != null)
 		if (onclick_event != null)
 		{
 		{
 			component3.onClick.Add(onclick_event);
 			component3.onClick.Add(onclick_event);

+ 4 - 4
Assembly-CSharp/GameInShopMain.cs

@@ -60,7 +60,7 @@ public class GameInShopMain : WfScreenChildren
 			UILabel component = UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>();
 			UILabel component = UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>();
 			component.text = gameObject.name;
 			component.text = gameObject.name;
 			Localize component2 = component.GetComponent<Localize>();
 			Localize component2 = component.GetComponent<Localize>();
-			if (GameUty.supportMultiLanguage && component2 != null)
+			if (Product.SPP && component2 != null)
 			{
 			{
 				string[] array = new string[]
 				string[] array = new string[]
 				{
 				{
@@ -123,7 +123,7 @@ public class GameInShopMain : WfScreenChildren
 			GameMain.Instance.CharacterMgr.SetActiveMaid(this.maid_, 0);
 			GameMain.Instance.CharacterMgr.SetActiveMaid(this.maid_, 0);
 		}
 		}
 		this.maid_.Visible = true;
 		this.maid_.Visible = true;
-		this.maid_.AllProcPropSeqStart();
+		SceneEdit.AllProcPropSeqStart(this.maid_);
 		this.player_ = GameMain.Instance.CharacterMgr.status;
 		this.player_ = GameMain.Instance.CharacterMgr.status;
 		foreach (KeyValuePair<string, Dictionary<string, List<Shop.ItemDataBase>>> keyValuePair in this.access_lineup_dic_)
 		foreach (KeyValuePair<string, Dictionary<string, List<Shop.ItemDataBase>>> keyValuePair in this.access_lineup_dic_)
 		{
 		{
@@ -440,7 +440,7 @@ public class GameInShopMain : WfScreenChildren
 		{
 		{
 			this.maid_.body0.SetMaskMode(itemDataBase.mask_mode);
 			this.maid_.body0.SetMaskMode(itemDataBase.mask_mode);
 		}
 		}
-		this.maid_.AllProcPropSeqStart();
+		SceneEdit.AllProcPropSeqStart(this.maid_);
 		this.trialwear_reset_button_.isEnabled = true;
 		this.trialwear_reset_button_.isEnabled = true;
 	}
 	}
 
 
@@ -453,7 +453,7 @@ public class GameInShopMain : WfScreenChildren
 		this.trialwear_reset_button_.isEnabled = false;
 		this.trialwear_reset_button_.isEnabled = false;
 		this.trialwear_data_.Load(this.maid_);
 		this.trialwear_data_.Load(this.maid_);
 		this.trialwear_data_.Clear();
 		this.trialwear_data_.Clear();
-		this.maid_.AllProcPropSeqStart();
+		SceneEdit.AllProcPropSeqStart(this.maid_);
 		this.maid_.body0.SetMaskMode(TBody.MaskMode.None);
 		this.maid_.body0.SetMaskMode(TBody.MaskMode.None);
 	}
 	}
 
 

+ 20 - 4
Assembly-CSharp/GameMain.cs

@@ -6,7 +6,6 @@ using System.Globalization;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
 using System.Threading;
 using System.Threading;
-using I2.Loc;
 using Kasizuki;
 using Kasizuki;
 using MaidStatus;
 using MaidStatus;
 using SceneNPCEdit;
 using SceneNPCEdit;
@@ -338,7 +337,6 @@ public class GameMain : MonoSingleton<GameMain>
 			}
 			}
 		}
 		}
 		UnityEngine.Debug.Log("TestSingleton#OnInitialize");
 		UnityEngine.Debug.Log("TestSingleton#OnInitialize");
-		LocalizationManager.CurrentLanguage = "Japanese";
 		Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-JP");
 		Thread.CurrentThread.CurrentCulture = new CultureInfo("ja-JP");
 		UnityEngine.Debug.Log(SystemInfo.operatingSystem);
 		UnityEngine.Debug.Log(SystemInfo.operatingSystem);
 		UnityEngine.Debug.Log(string.Concat(new object[]
 		UnityEngine.Debug.Log(string.Concat(new object[]
@@ -679,7 +677,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.nMaidNum = this.m_CharacterMgr.GetStockMaidCount();
 		serializeHeader.nMaidNum = this.m_CharacterMgr.GetStockMaidCount();
 		serializeHeader.strComment = f_strComment;
 		serializeHeader.strComment = f_strComment;
 		binaryWriter.Write("COM3D2_SAVE");
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -796,7 +794,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		File.WriteAllBytes(path, memoryStream.ToArray());
 		File.WriteAllBytes(path, memoryStream.ToArray());
@@ -1276,6 +1274,23 @@ public class GameMain : MonoSingleton<GameMain>
 
 
 	private void Update()
 	private void Update()
 	{
 	{
+		if (Product.SPP && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) && Input.GetKeyDown(KeyCode.F6))
+		{
+			string[] names = Enum.GetNames(typeof(Product.Language));
+			for (int i = 0; i < names.Length; i++)
+			{
+				if (names[i] == Product.WMZI.ToString())
+				{
+					string value = names[0];
+					if (i + 1 < names.Length)
+					{
+						value = names[i + 1];
+					}
+					Product.WMZI = (Product.Language)Enum.Parse(typeof(Product.Language), value);
+					break;
+				}
+			}
+		}
 		if (GameMain.Instance.VRMode)
 		if (GameMain.Instance.VRMode)
 		{
 		{
 			NInput.SelfUpdateVR();
 			NInput.SelfUpdateVR();
@@ -1331,6 +1346,7 @@ public class GameMain : MonoSingleton<GameMain>
 		this.m_bQuitting = true;
 		this.m_bQuitting = true;
 		base.OnApplicationQuit();
 		base.OnApplicationQuit();
 		UnityEngine.Debug.Log("GameMain::OnApplicationQuit");
 		UnityEngine.Debug.Log("GameMain::OnApplicationQuit");
+		Product.OnApplicationQuit();
 	}
 	}
 
 
 	private static GameMain m_objInstance;
 	private static GameMain m_objInstance;

+ 1 - 1
Assembly-CSharp/GameModeManager.cs

@@ -31,7 +31,7 @@ public static class GameModeManager
 	public static bool Serialize(BinaryWriter brWrite)
 	public static bool Serialize(BinaryWriter brWrite)
 	{
 	{
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
-		brWrite.Write(1260);
+		brWrite.Write(1270);
 		brWrite.Write(1);
 		brWrite.Write(1);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		return true;
 		return true;

+ 263 - 260
Assembly-CSharp/GameUty.cs

@@ -38,15 +38,7 @@ public class GameUty
 	{
 	{
 		get
 		get
 		{
 		{
-			return 0 < GameUty.PathListOld.Count;
-		}
-	}
-
-	public static bool supportMultiLanguage
-	{
-		get
-		{
-			return false;
+			return 0 < GameUty.PathListOld.Count && Product.type == Product.Type.AAA;
 		}
 		}
 	}
 	}
 
 
@@ -374,7 +366,9 @@ public class GameUty
 		};
 		};
 		string str = string.Empty;
 		string str = string.Empty;
 		str = "必用アーカイブがありません。GameData\\";
 		str = "必用アーカイブがありません。GameData\\";
-		StopWatch stopWatch = new StopWatch();
+		GameUty.m_FileSystem.SetBaseDirectory(fullPath);
+		AddFolderOrArchive("product");
+		Product.Initialize(GameUty.m_FileSystem);
 		Debug.Log("IsEnabledCompatibilityMode:" + GameUty.IsEnabledCompatibilityMode.ToString());
 		Debug.Log("IsEnabledCompatibilityMode:" + GameUty.IsEnabledCompatibilityMode.ToString());
 		string text = "カスタムオーダーメイド3D 2";
 		string text = "カスタムオーダーメイド3D 2";
 		string str2 = "カスタムメイド3D 2";
 		string str2 = "カスタムメイド3D 2";
@@ -391,313 +385,321 @@ public class GameUty
 		{
 		{
 			Debug.Log(str2 + " GameVersion " + GameUty.GetLegacyGameVersionText());
 			Debug.Log(str2 + " GameVersion " + GameUty.GetLegacyGameVersionText());
 		}
 		}
-		if (GameUty.IsEnabledCompatibilityMode)
+		if (Product.type != Product.Type.AAA)
 		{
 		{
-			Debug.Log("■■■■■■■■ Archive Log[2.0] (CM3D2 GameData) ■■■■■■■■");
-			GameUty.m_FileSystem.SetBaseDirectory(GameMain.Instance.CMSystem.CM3D2Path);
-			GameUty.PathList = GameUty.PathListOld;
-			AddFolderOrArchive("material");
-			foreach (string text2 in GameUty.PathListOld)
+			GameUty.E();
+		}
+		else
+		{
+			StopWatch stopWatch = new StopWatch();
+			if (GameUty.IsEnabledCompatibilityMode)
 			{
 			{
-				string str3 = "material";
-				if (text2 == "denkigai2015wTowelR")
-				{
-					AddFolderOrArchive(str3 + "_denkigai2015wTowel");
-				}
-				string text3 = str3 + "_" + text2;
-				bool flag = AddFolderOrArchive(text3);
-				if (flag && !addedLegacyArchives.Contains(text3))
+				Debug.Log("■■■■■■■■ Archive Log[2.0] (CM3D2 GameData) ■■■■■■■■");
+				GameUty.m_FileSystem.SetBaseDirectory(GameMain.Instance.CMSystem.CM3D2Path);
+				GameUty.PathList = GameUty.PathListOld;
+				AddFolderOrArchive("material");
+				foreach (string text2 in GameUty.PathListOld)
 				{
 				{
-					addedLegacyArchives.Add(text3);
+					string str3 = "material";
+					if (text2 == "denkigai2015wTowelR")
+					{
+						AddFolderOrArchive(str3 + "_denkigai2015wTowel");
+					}
+					string text3 = str3 + "_" + text2;
+					bool flag = AddFolderOrArchive(text3);
+					if (flag && !addedLegacyArchives.Contains(text3))
+					{
+						addedLegacyArchives.Add(text3);
+					}
+					if (flag)
+					{
+						for (int i2 = 2; i2 <= check_ver_no; i2++)
+						{
+							AddFolderOrArchive(text3 + "_" + i2);
+						}
+					}
 				}
 				}
-				if (flag)
+				AddFolderOrArchive("material2");
+				AddFolderOrArchive("menu");
+				action("menu");
+				AddFolderOrArchive("menu2");
+				AddFolderOrArchive("model");
+				action("model");
+				AddFolderOrArchive("model2");
+				AddFolderOrArchive("texture");
+				action("texture");
+				AddFolderOrArchive("texture2");
+				AddFolderOrArchive("texture3");
+				AddFolderOrArchive("prioritymaterial");
+				Debug.Log("■■■■■■■■■■■■■■■■■■■■");
+			}
+			Debug.Log("■■■■■■■■ Archive Log[2.1 Compatibility] (GameData_20) ■■■■■■■■");
+			gameDataPath = "GameData_20";
+			GameUty.m_FileSystem.SetBaseDirectory(fullPath);
+			if (GameUty.IsEnabledCompatibilityMode)
+			{
+				GameUty.m_FileSystem.AddPatchDecryptPreferredSearchDirectory(GameMain.Instance.CMSystem.CM3D2Path + "\\GameData");
+			}
+			GameUty.PathList = GameUty.ReadAutoPathFile("[2.1Compatibility]", fullPath + gameDataPath + "\\paths.dat");
+			if (GameUty.PathList != null && 0 < GameUty.PathList.Count)
+			{
+				foreach (string text4 in GameUty.PathList)
 				{
 				{
-					for (int i2 = 2; i2 <= check_ver_no; i2++)
+					string text5 = "material";
+					if (text4 == "denkigai2015wTowelR")
+					{
+						AddFolderOrArchive(text5 + "_denkigai2015wTowel");
+					}
+					string text6 = text5 + "_" + text4;
+					bool flag2 = AddFolderOrArchive(text6);
+					if (!flag2 && addedLegacyArchives.Contains(text6))
 					{
 					{
-						AddFolderOrArchive(text3 + "_" + i2);
+						flag2 = true;
+					}
+					if (flag2)
+					{
+						for (int j = 2; j <= check_ver_no; j++)
+						{
+							AddFolderOrArchive(string.Concat(new object[]
+							{
+								text5,
+								"_",
+								text4,
+								"_",
+								j
+							}));
+						}
 					}
 					}
 				}
 				}
+				action2("menu");
+				action2("model");
+				action2("texture");
+				AddFolderOrArchive("prioritymaterial");
+				List<string> pathList = GameUty.PathList;
+				GameUty.PathList = new List<string>();
+				GameUty.PathList.Add("vp001");
+				action2("bg");
+				action2("motion");
+				GameUty.PathList = pathList;
 			}
 			}
-			AddFolderOrArchive("material2");
-			AddFolderOrArchive("menu");
-			action("menu");
-			AddFolderOrArchive("menu2");
-			AddFolderOrArchive("model");
-			action("model");
-			AddFolderOrArchive("model2");
-			AddFolderOrArchive("texture");
-			action("texture");
-			AddFolderOrArchive("texture2");
-			AddFolderOrArchive("texture3");
-			AddFolderOrArchive("prioritymaterial");
+			GameUty.m_FileSystem.ClearPatchDecryptPreferredSearchDirectory();
 			Debug.Log("■■■■■■■■■■■■■■■■■■■■");
 			Debug.Log("■■■■■■■■■■■■■■■■■■■■");
-		}
-		Debug.Log("■■■■■■■■ Archive Log[2.1 Compatibility] (GameData_20) ■■■■■■■■");
-		gameDataPath = "GameData_20";
-		GameUty.m_FileSystem.SetBaseDirectory(fullPath);
-		if (GameUty.IsEnabledCompatibilityMode)
-		{
-			GameUty.m_FileSystem.AddPatchDecryptPreferredSearchDirectory(GameMain.Instance.CMSystem.CM3D2Path + "\\GameData");
-		}
-		GameUty.PathList = GameUty.ReadAutoPathFile("[2.1Compatibility]", fullPath + gameDataPath + "\\paths.dat");
-		if (GameUty.PathList != null && 0 < GameUty.PathList.Count)
-		{
-			foreach (string text4 in GameUty.PathList)
+			Debug.Log("■■■■■■■■ Archive Log[2.1] (GameData) ■■■■■■■■");
+			gameDataPath = "GameData";
+			GameUty.PathList = GameUty.ReadAutoPathFile("[2.1]", fullPath + gameDataPath + "\\paths.dat");
+			if (GameUty.PathList == null)
 			{
 			{
-				string text5 = "material";
-				if (text4 == "denkigai2015wTowelR")
-				{
-					AddFolderOrArchive(text5 + "_denkigai2015wTowel");
-				}
-				string text6 = text5 + "_" + text4;
-				bool flag2 = AddFolderOrArchive(text6);
-				if (!flag2 && addedLegacyArchives.Contains(text6))
-				{
-					flag2 = true;
-				}
-				if (flag2)
+				GameUty.PathList = new List<string>();
+				NDebug.Assert("paths.datを読み込めませんでした", false);
+			}
+			AddFolderOrArchive("csv");
+			foreach (string text7 in GameUty.PathList)
+			{
+				string text8 = "csv";
+				if (AddFolderOrArchive(text8 + "_" + text7))
 				{
 				{
-					for (int j = 2; j <= check_ver_no; j++)
+					for (int k = 2; k <= check_ver_no; k++)
 					{
 					{
 						AddFolderOrArchive(string.Concat(new object[]
 						AddFolderOrArchive(string.Concat(new object[]
 						{
 						{
-							text5,
+							text8,
 							"_",
 							"_",
-							text4,
+							text7,
 							"_",
 							"_",
-							j
+							k
 						}));
 						}));
 					}
 					}
 				}
 				}
 			}
 			}
-			action2("menu");
-			action2("model");
-			action2("texture");
 			AddFolderOrArchive("prioritymaterial");
 			AddFolderOrArchive("prioritymaterial");
-			List<string> pathList = GameUty.PathList;
-			GameUty.PathList = new List<string>();
-			GameUty.PathList.Add("vp001");
-			action2("bg");
-			action2("motion");
-			GameUty.PathList = pathList;
-		}
-		GameUty.m_FileSystem.ClearPatchDecryptPreferredSearchDirectory();
-		Debug.Log("■■■■■■■■■■■■■■■■■■■■");
-		Debug.Log("■■■■■■■■ Archive Log[2.1] (GameData) ■■■■■■■■");
-		gameDataPath = "GameData";
-		GameUty.PathList = GameUty.ReadAutoPathFile("[2.1]", fullPath + gameDataPath + "\\paths.dat");
-		if (GameUty.PathList == null)
-		{
-			GameUty.PathList = new List<string>();
-			NDebug.Assert("paths.datを読み込めませんでした", false);
-		}
-		AddFolderOrArchive("csv");
-		foreach (string text7 in GameUty.PathList)
-		{
-			string text8 = "csv";
-			if (AddFolderOrArchive(text8 + "_" + text7))
+			NDebug.Assert(AddFolderOrArchive("motion"), str + "motion");
+			foreach (string text9 in GameUty.PathList)
 			{
 			{
-				for (int k = 2; k <= check_ver_no; k++)
+				string text10 = "motion";
+				if (AddFolderOrArchive(text10 + "_" + text9))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int l = 2; l <= check_ver_no; l++)
 					{
 					{
-						text8,
-						"_",
-						text7,
-						"_",
-						k
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text10,
+							"_",
+							text9,
+							"_",
+							l
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("prioritymaterial");
-		NDebug.Assert(AddFolderOrArchive("motion"), str + "motion");
-		foreach (string text9 in GameUty.PathList)
-		{
-			string text10 = "motion";
-			if (AddFolderOrArchive(text10 + "_" + text9))
+			AddFolderOrArchive("motion2");
+			NDebug.Assert(AddFolderOrArchive("script"), str + "script");
+			foreach (string text11 in GameUty.PathList)
 			{
 			{
-				for (int l = 2; l <= check_ver_no; l++)
+				string text12 = "script";
+				if (AddFolderOrArchive(text12 + "_" + text11))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int m = 2; m <= check_ver_no; m++)
 					{
 					{
-						text10,
-						"_",
-						text9,
-						"_",
-						l
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text12,
+							"_",
+							text11,
+							"_",
+							m
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("motion2");
-		NDebug.Assert(AddFolderOrArchive("script"), str + "script");
-		foreach (string text11 in GameUty.PathList)
-		{
-			string text12 = "script";
-			if (AddFolderOrArchive(text12 + "_" + text11))
+			AddFolderOrArchive("script_share");
+			foreach (string text13 in GameUty.PathList)
 			{
 			{
-				for (int m = 2; m <= check_ver_no; m++)
+				string text14 = "script_share";
+				if (AddFolderOrArchive(text14 + "_" + text13))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int n = 2; n <= check_ver_no; n++)
 					{
 					{
-						text12,
-						"_",
-						text11,
-						"_",
-						m
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text14,
+							"_",
+							text13,
+							"_",
+							n
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("script_share");
-		foreach (string text13 in GameUty.PathList)
-		{
-			string text14 = "script_share";
-			if (AddFolderOrArchive(text14 + "_" + text13))
+			AddFolderOrArchive("script_share2");
+			NDebug.Assert(AddFolderOrArchive("sound"), str + "sound");
+			foreach (string text15 in GameUty.PathList)
 			{
 			{
-				for (int n = 2; n <= check_ver_no; n++)
+				string text16 = "sound";
+				if (AddFolderOrArchive(text16 + "_" + text15))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num = 2; num <= check_ver_no; num++)
 					{
 					{
-						text14,
-						"_",
-						text13,
-						"_",
-						n
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text16,
+							"_",
+							text15,
+							"_",
+							num
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("script_share2");
-		NDebug.Assert(AddFolderOrArchive("sound"), str + "sound");
-		foreach (string text15 in GameUty.PathList)
-		{
-			string text16 = "sound";
-			if (AddFolderOrArchive(text16 + "_" + text15))
+			AddFolderOrArchive("sound2");
+			NDebug.Assert(AddFolderOrArchive("system"), str + "system");
+			foreach (string text17 in GameUty.PathList)
 			{
 			{
-				for (int num = 2; num <= check_ver_no; num++)
+				string text18 = "system";
+				if (AddFolderOrArchive(text18 + "_" + text17))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num2 = 2; num2 <= check_ver_no; num2++)
 					{
 					{
-						text16,
-						"_",
-						text15,
-						"_",
-						num
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text18,
+							"_",
+							text17,
+							"_",
+							num2
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("sound2");
-		NDebug.Assert(AddFolderOrArchive("system"), str + "system");
-		foreach (string text17 in GameUty.PathList)
-		{
-			string text18 = "system";
-			if (AddFolderOrArchive(text18 + "_" + text17))
+			AddFolderOrArchive("system2");
+			AddFolderOrArchive("language");
+			foreach (string text19 in GameUty.PathList)
 			{
 			{
-				for (int num2 = 2; num2 <= check_ver_no; num2++)
+				string text20 = "language";
+				if (AddFolderOrArchive(text20 + "_" + text19))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num3 = 2; num3 <= check_ver_no; num3++)
 					{
 					{
-						text18,
-						"_",
-						text17,
-						"_",
-						num2
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text20,
+							"_",
+							text19,
+							"_",
+							num3
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		AddFolderOrArchive("system2");
-		AddFolderOrArchive("language");
-		foreach (string text19 in GameUty.PathList)
-		{
-			string text20 = "language";
-			if (AddFolderOrArchive(text20 + "_" + text19))
+			foreach (string text21 in GameUty.PathList)
 			{
 			{
-				for (int num3 = 2; num3 <= check_ver_no; num3++)
+				string text22 = "bg";
+				if (AddFolderOrArchive(text22 + "_" + text21))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num4 = 2; num4 <= check_ver_no; num4++)
 					{
 					{
-						text20,
-						"_",
-						text19,
-						"_",
-						num3
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text22,
+							"_",
+							text21,
+							"_",
+							num4
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		foreach (string text21 in GameUty.PathList)
-		{
-			string text22 = "bg";
-			if (AddFolderOrArchive(text22 + "_" + text21))
+			AddFolderOrArchive("voice");
+			for (int num5 = 0; num5 < 25; num5++)
 			{
 			{
-				for (int num4 = 2; num4 <= check_ver_no; num4++)
-				{
-					AddFolderOrArchive(string.Concat(new object[]
-					{
-						text22,
-						"_",
-						text21,
-						"_",
-						num4
-					}));
-				}
+				string arg = "voice";
+				string arg2 = arg + "_" + (char)(97 + num5);
+				AddFolderOrArchive(arg2);
 			}
 			}
-		}
-		AddFolderOrArchive("voice");
-		for (int num5 = 0; num5 < 25; num5++)
-		{
-			string arg = "voice";
-			string arg2 = arg + "_" + (char)(97 + num5);
-			AddFolderOrArchive(arg2);
-		}
-		foreach (string text23 in GameUty.PathList)
-		{
-			string text24 = "voice";
-			if (AddFolderOrArchive(text24 + "_" + text23))
+			foreach (string text23 in GameUty.PathList)
 			{
 			{
-				for (int num6 = 2; num6 <= check_ver_no; num6++)
+				string text24 = "voice";
+				if (AddFolderOrArchive(text24 + "_" + text23))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num6 = 2; num6 <= check_ver_no; num6++)
 					{
 					{
-						text24,
-						"_",
-						text23,
-						"_",
-						num6
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text24,
+							"_",
+							text23,
+							"_",
+							num6
+						}));
+					}
 				}
 				}
 			}
 			}
-		}
-		for (int num7 = 2; num7 <= check_ver_no; num7++)
-		{
-			string arg3 = "voice";
-			AddFolderOrArchive(arg3 + num7);
-		}
-		string text25 = "parts";
-		NDebug.Assert(AddFolderOrArchive(text25), str + text25);
-		foreach (string text26 in GameUty.PathList)
-		{
-			if (AddFolderOrArchive(text25 + "_" + text26))
+			for (int num7 = 2; num7 <= check_ver_no; num7++)
+			{
+				string arg3 = "voice";
+				AddFolderOrArchive(arg3 + num7);
+			}
+			string text25 = "parts";
+			NDebug.Assert(AddFolderOrArchive(text25), str + text25);
+			foreach (string text26 in GameUty.PathList)
 			{
 			{
-				for (int num8 = 2; num8 <= check_ver_no; num8++)
+				if (AddFolderOrArchive(text25 + "_" + text26))
 				{
 				{
-					AddFolderOrArchive(string.Concat(new object[]
+					for (int num8 = 2; num8 <= check_ver_no; num8++)
 					{
 					{
-						text25,
-						"_",
-						text26,
-						"_",
-						num8
-					}));
+						AddFolderOrArchive(string.Concat(new object[]
+						{
+							text25,
+							"_",
+							text26,
+							"_",
+							num8
+						}));
+					}
 				}
 				}
 			}
 			}
+			AddFolderOrArchive("parts2");
+			Debug.Log("■■■■■■■■■■■■■■■■■■■■" + stopWatch.Stop().ToString() + " ms");
 		}
 		}
-		AddFolderOrArchive("parts2");
-		Debug.Log("■■■■■■■■■■■■■■■■■■■■" + stopWatch.Stop().ToString() + " ms");
 		GameUty.m_FileSystem.AddAutoPathForAllFolder();
 		GameUty.m_FileSystem.AddAutoPathForAllFolder();
 		GameUty.BgFiles = new Dictionary<string, AFileSystemBase>();
 		GameUty.BgFiles = new Dictionary<string, AFileSystemBase>();
 		string[] list = GameUty.m_FileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
 		string[] list = GameUty.m_FileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
@@ -712,7 +714,7 @@ public class GameUty
 				}
 				}
 			}
 			}
 		}
 		}
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			list = GameUty.m_FileSystem.GetList("languagesource", AFileSystemBase.ListType.AllFile);
 			list = GameUty.m_FileSystem.GetList("languagesource", AFileSystemBase.ListType.AllFile);
 			if (list != null && 0 < list.Length)
 			if (list != null && 0 < list.Length)
@@ -722,19 +724,16 @@ public class GameUty
 					string fileName2 = Path.GetFileName(path2);
 					string fileName2 = Path.GetFileName(path2);
 					if (!(Path.GetExtension(fileName2) != ".asset_language"))
 					if (!(Path.GetExtension(fileName2) != ".asset_language"))
 					{
 					{
-						if (GameUty.supportMultiLanguage || (!(fileName2 == "parts.asset_language") && !(fileName2 == "yotogi.asset_language")))
+						using (AFileBase afileBase = GameUty.m_FileSystem.FileOpen(fileName2))
 						{
 						{
-							using (AFileBase afileBase = GameUty.m_FileSystem.FileOpen(fileName2))
+							AssetBundle assetBundle = AssetBundle.LoadFromMemory(afileBase.ReadAll());
+							LanguageSource languageSource = UnityEngine.Object.Instantiate<LanguageSource>(assetBundle.LoadAllAssets<GameObject>()[0].GetComponent<LanguageSource>());
+							if (GameMain.Instance.transform.Find("Language") == null)
 							{
 							{
-								AssetBundle assetBundle = AssetBundle.LoadFromMemory(afileBase.ReadAll());
-								LanguageSource languageSource = UnityEngine.Object.Instantiate<LanguageSource>(assetBundle.LoadAllAssets<GameObject>()[0].GetComponent<LanguageSource>());
-								if (GameMain.Instance.transform.Find("Language") == null)
-								{
-									new GameObject("Language").transform.SetParent(GameMain.Instance.transform);
-								}
-								languageSource.transform.SetParent(GameMain.Instance.transform.Find("Language"));
-								assetBundle.Unload(true);
+								new GameObject("Language").transform.SetParent(GameMain.Instance.transform);
 							}
 							}
+							languageSource.transform.SetParent(GameMain.Instance.transform.Find("Language"));
+							assetBundle.Unload(true);
 						}
 						}
 					}
 					}
 				}
 				}
@@ -803,6 +802,10 @@ public class GameUty
 		}
 		}
 	}
 	}
 
 
+	public static void E()
+	{
+	}
+
 	public static void UpdateFileSystemPathOld()
 	public static void UpdateFileSystemPathOld()
 	{
 	{
 		if (!GameUty.IsEnabledCompatibilityMode)
 		if (!GameUty.IsEnabledCompatibilityMode)
@@ -985,14 +988,14 @@ public class GameUty
 
 
 	public static string GetBuildVersionText()
 	public static string GetBuildVersionText()
 	{
 	{
-		int num = 1260;
+		int num = 1270;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 	}
 
 
 	public static string GetGameVersionText()
 	public static string GetGameVersionText()
 	{
 	{
 		string text = "COM3D2x64.exe";
 		string text = "COM3D2x64.exe";
-		int num = 1260;
+		int num = 1270;
 		string path = Path.GetFullPath(".\\") + "update.lst";
 		string path = Path.GetFullPath(".\\") + "update.lst";
 		string[] array = new string[0];
 		string[] array = new string[0];
 		if (File.Exists(path))
 		if (File.Exists(path))

+ 34 - 2
Assembly-CSharp/HandSignShortcut.cs

@@ -1,9 +1,11 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.Events;
 using UnityEngine.UI;
 using UnityEngine.UI;
+using wf;
 
 
 public class HandSignShortcut : MonoBehaviour
 public class HandSignShortcut : MonoBehaviour
 {
 {
@@ -140,6 +142,15 @@ public class HandSignShortcut : MonoBehaviour
 		transform.localEulerAngles = localEulerAngles;
 		transform.localEulerAngles = localEulerAngles;
 		GameObject childObject = UTY.GetChildObject(this.circleList.gameObject, "CircleCommandUI/text right hand", false);
 		GameObject childObject = UTY.GetChildObject(this.circleList.gameObject, "CircleCommandUI/text right hand", false);
 		childObject.GetComponent<Text>().text = ((!this.IsLeftHand) ? "右" : "左");
 		childObject.GetComponent<Text>().text = ((!this.IsLeftHand) ? "右" : "左");
+		Localize localize = childObject.AddComponent<Localize>();
+		if (this.IsLeftHand)
+		{
+			Utility.SetLocalizeTerm(localize, "System/左");
+		}
+		else
+		{
+			Utility.SetLocalizeTerm(localize, "System/右");
+		}
 	}
 	}
 
 
 	private void CreateItemList(int count)
 	private void CreateItemList(int count)
@@ -152,6 +163,7 @@ public class HandSignShortcut : MonoBehaviour
 			trans.localScale = Vector3.one * 0.5f;
 			trans.localScale = Vector3.one * 0.5f;
 			HandSignShortcut.ItemData itemData = trans.gameObject.AddComponent<HandSignShortcut.ItemData>();
 			HandSignShortcut.ItemData itemData = trans.gameObject.AddComponent<HandSignShortcut.ItemData>();
 			itemData.text = componentInChildren;
 			itemData.text = componentInChildren;
+			itemData.SetLocalizeTerm("VAS/" + componentInChildren);
 			if (index == 0)
 			if (index == 0)
 			{
 			{
 				itemData.data = null;
 				itemData.data = null;
@@ -494,7 +506,7 @@ public class HandSignShortcut : MonoBehaviour
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1260;
+			this.m_nVersion = 1270;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -803,7 +815,7 @@ public class HandSignShortcut : MonoBehaviour
 		private const string CONF_NAME = "MaidFingerDataList.json";
 		private const string CONF_NAME = "MaidFingerDataList.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1260;
+		private int m_nVersion = 1270;
 
 
 		[SerializeField]
 		[SerializeField]
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();
@@ -972,6 +984,24 @@ public class HandSignShortcut : MonoBehaviour
 
 
 		public Text text { get; set; }
 		public Text text { get; set; }
 
 
+		private Localize localize { get; set; }
+
+		public void SetLocalizeTerm(string key)
+		{
+			Localize localize2;
+			if (this.localize == null)
+			{
+				Localize localize = this.text.gameObject.AddComponent<Localize>();
+				this.localize = localize;
+				localize2 = localize;
+			}
+			else
+			{
+				localize2 = this.localize;
+			}
+			Utility.SetLocalizeTerm(localize2, key);
+		}
+
 		private void UpdateText()
 		private void UpdateText()
 		{
 		{
 			if (this.text == null)
 			if (this.text == null)
@@ -981,10 +1011,12 @@ public class HandSignShortcut : MonoBehaviour
 			if (this.m_Data == null)
 			if (this.m_Data == null)
 			{
 			{
 				this.text.text = "自由モード";
 				this.text.text = "自由モード";
+				this.SetLocalizeTerm("VAS/自由モード");
 			}
 			}
 			else
 			else
 			{
 			{
 				this.text.text = this.m_Data.name;
 				this.text.text = this.m_Data.name;
+				this.SetLocalizeTerm("VAS/" + this.m_Data.name);
 			}
 			}
 		}
 		}
 
 

+ 32 - 0
Assembly-CSharp/Kasizuki/AppealData.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -129,6 +130,14 @@ namespace Kasizuki
 				}
 				}
 			}
 			}
 
 
+			public string texNameTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/アピールイメージ/" + this.ID;
+				}
+			}
+
 			public Texture2D GetTexture()
 			public Texture2D GetTexture()
 			{
 			{
 				if (!string.IsNullOrEmpty(this.texName))
 				if (!string.IsNullOrEmpty(this.texName))
@@ -150,6 +159,29 @@ namespace Kasizuki
 				return null;
 				return null;
 			}
 			}
 
 
+			public Texture2D GetTexture(string languageCode)
+			{
+				string languageFromCode = LocalizationManager.GetLanguageFromCode(languageCode, true);
+				string termTranslation = LocalizationManager.GetTermTranslation(this.texNameTerm, true, 0, true, false, null, languageFromCode);
+				if (!string.IsNullOrEmpty(termTranslation))
+				{
+					string f_strFileName = termTranslation + ".tex";
+					if (GameUty.FileSystem.IsExistentFile(f_strFileName))
+					{
+						return ImportCM.CreateTexture(f_strFileName);
+					}
+					Debug.LogWarningFormat("テクスチャ「{0}」がない", new object[]
+					{
+						termTranslation
+					});
+				}
+				else
+				{
+					Debug.LogWarning("テクスチャ名が空でした");
+				}
+				return null;
+			}
+
 			public readonly int ID;
 			public readonly int ID;
 
 
 			public readonly string personalUniqueName;
 			public readonly string personalUniqueName;

+ 3 - 0
Assembly-CSharp/Kasizuki/ClubRoomSelectCtrl.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -74,8 +75,10 @@ namespace Kasizuki
 			}
 			}
 			UILabel component = UTY.GetChildObject(trans.gameObject, "Label Name", false).GetComponent<UILabel>();
 			UILabel component = UTY.GetChildObject(trans.gameObject, "Label Name", false).GetComponent<UILabel>();
 			component.text = data.drawName;
 			component.text = data.drawName;
+			Utility.SetLocalizeTerm(component, data.drawNameTerm);
 			UILabel component2 = UTY.GetChildObject(trans.gameObject, "Comment/Value", false).GetComponent<UILabel>();
 			UILabel component2 = UTY.GetChildObject(trans.gameObject, "Comment/Value", false).GetComponent<UILabel>();
 			component2.text = data.explanatoryText;
 			component2.text = data.explanatoryText;
+			Utility.SetLocalizeTerm(component2, data.explanatoryTextTerm);
 			UIButton uiButton = trans.GetComponent<UIButton>();
 			UIButton uiButton = trans.GetComponent<UIButton>();
 			if (uiButton)
 			if (uiButton)
 			{
 			{

+ 12 - 8
Assembly-CSharp/Kasizuki/KasizukiMainMenu.cs

@@ -2,6 +2,7 @@
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -289,13 +290,16 @@ namespace Kasizuki
 			{
 			{
 				UILabel cache = comp.descriptionCache.GetCache<UILabel>("説明文");
 				UILabel cache = comp.descriptionCache.GetCache<UILabel>("説明文");
 				cache.text = playData.strDescription;
 				cache.text = playData.strDescription;
+				Utility.SetLocalizeTerm(cache, playData.strDescriptionTerm);
 				uGUIListViewer cache2 = comp.descriptionCache.GetCache<uGUIListViewer>("条件一覧");
 				uGUIListViewer cache2 = comp.descriptionCache.GetCache<uGUIListViewer>("条件一覧");
 				string[] strConditionArray = playData.strConditionArray;
 				string[] strConditionArray = playData.strConditionArray;
+				string[] strConditionArrayTerm = playData.strConditionArrayTerms;
 				cache2.Show<Transform>(strConditionArray.Length, delegate(int index, Transform trans)
 				cache2.Show<Transform>(strConditionArray.Length, delegate(int index, Transform trans)
 				{
 				{
 					UILabel component = UTY.GetChildObject(trans.gameObject, "Value", false).GetComponent<UILabel>();
 					UILabel component = UTY.GetChildObject(trans.gameObject, "Value", false).GetComponent<UILabel>();
 					UILabel component2 = UTY.GetChildObject(trans.gameObject, "Number", false).GetComponent<UILabel>();
 					UILabel component2 = UTY.GetChildObject(trans.gameObject, "Number", false).GetComponent<UILabel>();
 					component.text = strConditionArray[index];
 					component.text = strConditionArray[index];
+					Utility.SetLocalizeTerm(component, strConditionArrayTerm[index]);
 					component2.text = (index + 1).ToString();
 					component2.text = (index + 1).ToString();
 				});
 				});
 				cache2.GetComponent<UIGrid>().Reposition();
 				cache2.GetComponent<UIGrid>().Reposition();
@@ -462,12 +466,12 @@ namespace Kasizuki
 			{
 			{
 				if (!this.CheckPlayableRoom())
 				if (!this.CheckPlayableRoom())
 				{
 				{
-					GameMain.Instance.SysDlg.Show("利用可能な施設がありません。", SystemDialog.TYPE.OK, null, null);
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneKasizukiMainMenu/ダイアログ/利用可能な施設がありません。", null, SystemDialog.TYPE.OK, null, null);
 					return;
 					return;
 				}
 				}
 				if (!this.CheckPlayableMaid())
 				if (!this.CheckPlayableMaid())
 				{
 				{
-					GameMain.Instance.SysDlg.Show("プレイ可能なメイドがいません。", SystemDialog.TYPE.OK, null, null);
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneKasizukiMainMenu/ダイアログ/プレイ可能なメイドがいません。", null, SystemDialog.TYPE.OK, null, null);
 					return;
 					return;
 				}
 				}
 				this.OnSelectRoom(null);
 				this.OnSelectRoom(null);
@@ -498,7 +502,7 @@ namespace Kasizuki
 			}
 			}
 			else if (name == "タイトルに戻る")
 			else if (name == "タイトルに戻る")
 			{
 			{
-				GameMain.Instance.SysDlg.Show("保存されていない情報は失われます。\nタイトルに戻りますか?", SystemDialog.TYPE.YES_NO, delegate
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneKasizukiMainMenu/ダイアログ/保存されていない情報は失われます。タイトルに戻りますか?", null, SystemDialog.TYPE.YES_NO, delegate
 				{
 				{
 					GameMain.Instance.SysDlg.Close();
 					GameMain.Instance.SysDlg.Close();
 					GameMain.Instance.LoadScene("SceneToTitle");
 					GameMain.Instance.LoadScene("SceneToTitle");
@@ -813,7 +817,7 @@ namespace Kasizuki
 			NDebug.AssertNull(targetPlay != null);
 			NDebug.AssertNull(targetPlay != null);
 			if (!targetPlay.IsCorrectPersonal(targetMaid))
 			if (!targetPlay.IsCorrectPersonal(targetMaid))
 			{
 			{
-				GameMain.Instance.SysDlg.Show("メイドの性格が対応していません。", SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneKasizukiMainMenu/ダイアログ/メイドの性格が対応していません。", null, SystemDialog.TYPE.OK, null, null);
 				return false;
 				return false;
 			}
 			}
 			return true;
 			return true;
@@ -857,13 +861,13 @@ namespace Kasizuki
 
 
 		private static string m_BackUpBeforeMaidInfoParameter = string.Empty;
 		private static string m_BackUpBeforeMaidInfoParameter = string.Empty;
 
 
-		private const string STR_MESSAGE_NOTHING_ROOM = "利用可能な施設がありません。";
+		private const string STR_MESSAGE_NOTHING_ROOM = "SceneKasizukiMainMenu/ダイアログ/利用可能な施設がありません。";
 
 
-		private const string STR_MESSAGE_NOTHING_MAID = "プレイ可能なメイドがいません。";
+		private const string STR_MESSAGE_NOTHING_MAID = "SceneKasizukiMainMenu/ダイアログ/プレイ可能なメイドがいません。";
 
 
-		private const string STR_MESSAGE_END = "保存されていない情報は失われます。\nタイトルに戻りますか?";
+		private const string STR_MESSAGE_END = "SceneKasizukiMainMenu/ダイアログ/保存されていない情報は失われます。タイトルに戻りますか?";
 
 
-		private const string STR_MESSAGE_INCORRECT_PERSONAL = "メイドの性格が対応していません。";
+		private const string STR_MESSAGE_INCORRECT_PERSONAL = "SceneKasizukiMainMenu/ダイアログ/メイドの性格が対応していません。";
 
 
 		private static RoomData.Data m_NowSelectingRoom;
 		private static RoomData.Data m_NowSelectingRoom;
 
 

+ 4 - 0
Assembly-CSharp/Kasizuki/KasizukiManSelectCtrl.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -32,6 +33,7 @@ namespace Kasizuki
 			{
 			{
 				UILabel componentInChildren2 = button.GetComponentInChildren<UILabel>();
 				UILabel componentInChildren2 = button.GetComponentInChildren<UILabel>();
 				componentInChildren2.text = <SetUpManList>c__AnonStorey.dataArray[index].drawName;
 				componentInChildren2.text = <SetUpManList>c__AnonStorey.dataArray[index].drawName;
+				Utility.SetLocalizeTerm(componentInChildren2, <SetUpManList>c__AnonStorey.dataArray[index].drawNameTerm);
 				EventDelegate.Add(button.onClick, delegate()
 				EventDelegate.Add(button.onClick, delegate()
 				{
 				{
 					<SetUpManList>c__AnonStorey.OnClickManListButton(<SetUpManList>c__AnonStorey.dataArray[index].ID);
 					<SetUpManList>c__AnonStorey.OnClickManListButton(<SetUpManList>c__AnonStorey.dataArray[index].ID);
@@ -102,8 +104,10 @@ namespace Kasizuki
 			ManData.Data data = ManData.GetData(manID);
 			ManData.Data data = ManData.GetData(manID);
 			UILabel cache = this.m_ManProfileCache.GetCache<UILabel>("フリーコメント");
 			UILabel cache = this.m_ManProfileCache.GetCache<UILabel>("フリーコメント");
 			cache.text = data.profileText;
 			cache.text = data.profileText;
+			Utility.SetLocalizeTerm(cache, data.profileTextTerm);
 			cache = this.m_ManProfileCache.GetCache<UILabel>("好きなプレイ");
 			cache = this.m_ManProfileCache.GetCache<UILabel>("好きなプレイ");
 			cache.text = data.favoritePlayText;
 			cache.text = data.favoritePlayText;
+			Utility.SetLocalizeTerm(cache, data.favoritePlayTextTerm);
 		}
 		}
 
 
 		private void UpdateManInfo()
 		private void UpdateManInfo()

+ 1 - 1
Assembly-CSharp/Kasizuki/KasizukiManager.cs

@@ -808,7 +808,7 @@ namespace Kasizuki
 		public void Serialize(BinaryWriter bw)
 		public void Serialize(BinaryWriter bw)
 		{
 		{
 			bw.Write("COM3D2_KASIZUKI");
 			bw.Write("COM3D2_KASIZUKI");
-			bw.Write(1260);
+			bw.Write(1270);
 			this.SerializeOriginHeader(bw);
 			this.SerializeOriginHeader(bw);
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			{
 			{

+ 4 - 0
Assembly-CSharp/Kasizuki/KasizukiPlayInfoCtrl.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -96,6 +97,7 @@ namespace Kasizuki
 			{
 			{
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				componentInChildren.text = data.drawName;
 				componentInChildren.text = data.drawName;
+				Utility.SetLocalizeTerm(componentInChildren, data.drawNameTerm);
 				EventDelegate.Add(item.onClick, delegate()
 				EventDelegate.Add(item.onClick, delegate()
 				{
 				{
 					<OpenRoomList>c__AnonStorey.OnClickRoom(data);
 					<OpenRoomList>c__AnonStorey.OnClickRoom(data);
@@ -131,6 +133,7 @@ namespace Kasizuki
 			{
 			{
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				componentInChildren.text = data.drawName;
 				componentInChildren.text = data.drawName;
+				Utility.SetLocalizeTerm(componentInChildren, data.drawNameTerm);
 				EventDelegate.Add(item.onClick, delegate()
 				EventDelegate.Add(item.onClick, delegate()
 				{
 				{
 					<OpenManList>c__AnonStorey.OnClickMan(data);
 					<OpenManList>c__AnonStorey.OnClickMan(data);
@@ -169,6 +172,7 @@ namespace Kasizuki
 			{
 			{
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				UILabel componentInChildren = item.GetComponentInChildren<UILabel>();
 				componentInChildren.text = data.drawName;
 				componentInChildren.text = data.drawName;
+				Utility.SetLocalizeTerm(componentInChildren, data.drawNameTerm);
 				EventDelegate.Add(item.onClick, delegate()
 				EventDelegate.Add(item.onClick, delegate()
 				{
 				{
 					<OpenPlayList>c__AnonStorey.OnClickPlay(data);
 					<OpenPlayList>c__AnonStorey.OnClickPlay(data);

+ 65 - 18
Assembly-CSharp/Kasizuki/KasizukiSaveAndLoadCtrl.cs

@@ -335,26 +335,56 @@ namespace Kasizuki
 						if (GameMain.Instance.KasizukiMgr.IsExistSaveData(saveSlot))
 						if (GameMain.Instance.KasizukiMgr.IsExistSaveData(saveSlot))
 						{
 						{
 							msg = string.Format("{0}番に上書きして保存します。\n宜しいですか?", saveSlot);
 							msg = string.Format("{0}番に上書きして保存します。\n宜しいですか?", saveSlot);
+							if (Product.SPP)
+							{
+								msg = "SceneKasizukiMainMenu/ダイアログ/上書きして保存します。宜しいですか?";
+							}
 						}
 						}
 						else
 						else
 						{
 						{
 							msg = string.Format("{0}番にデータを保存しますか?", saveSlot);
 							msg = string.Format("{0}番にデータを保存しますか?", saveSlot);
+							if (Product.SPP)
+							{
+								msg = "SceneKasizukiMainMenu/ダイアログ/データを保存しますか?";
+							}
 						}
 						}
-						this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+						if (Product.SPP)
 						{
 						{
-							this.CloseDialog();
-							this.Save(saveSlot);
-						});
+							this.OpenDialogTerm(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+							{
+								this.CloseDialog();
+								this.Save(saveSlot);
+							});
+						}
+						else
+						{
+							this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+							{
+								this.CloseDialog();
+								this.Save(saveSlot);
+							});
+						}
 					}
 					}
 				}
 				}
 				else
 				else
 				{
 				{
 					string msg = string.Format("{0}番のデータをロードしますか?", saveSlot);
 					string msg = string.Format("{0}番のデータをロードしますか?", saveSlot);
-					this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+					if (Product.SPP)
 					{
 					{
-						this.CloseDialog();
-						this.Load(saveSlot);
-					});
+						this.OpenDialogTerm(SystemDialog.TYPE.OK_CANCEL, "Dialog/セーブロード/データをロードしますか?", delegate
+						{
+							this.CloseDialog();
+							this.Load(saveSlot);
+						});
+					}
+					else
+					{
+						this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+						{
+							this.CloseDialog();
+							this.Load(saveSlot);
+						});
+					}
 				}
 				}
 				return;
 				return;
 			}
 			}
@@ -362,8 +392,8 @@ namespace Kasizuki
 			{
 			{
 				return;
 				return;
 			}
 			}
-			string msg2 = string.Format("データを削除します。\n本当に宜しいですか。", new object[0]);
-			this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg2, delegate
+			string msg2 = string.Format("SceneKasizukiMainMenu/ダイアログ/データを削除します。本当に宜しいですか。", new object[0]);
+			this.OpenDialogTerm(SystemDialog.TYPE.OK_CANCEL, msg2, delegate
 			{
 			{
 				this.CloseDialog();
 				this.CloseDialog();
 				this.Delete(saveSlot);
 				this.Delete(saveSlot);
@@ -376,8 +406,8 @@ namespace Kasizuki
 			{
 			{
 				return;
 				return;
 			}
 			}
-			string msg = "ここに新規顧客情報を登録します。";
-			this.OpenDialog(SystemDialog.TYPE.OK_CANCEL, msg, delegate
+			string msg = "SceneKasizukiMainMenu/ダイアログ/ここに新規顧客情報を登録します。";
+			this.OpenDialogTerm(SystemDialog.TYPE.OK_CANCEL, msg, delegate
 			{
 			{
 				this.CloseDialog();
 				this.CloseDialog();
 				this.NewGame();
 				this.NewGame();
@@ -410,6 +440,17 @@ namespace Kasizuki
 			}, new SystemDialog.OnClick(this.CloseDialog));
 			}, new SystemDialog.OnClick(this.CloseDialog));
 		}
 		}
 
 
+		private void OpenDialogTerm(SystemDialog.TYPE openType, string msg, Action onOK)
+		{
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm(msg, null, openType, delegate
+			{
+				if (onOK != null)
+				{
+					onOK();
+				}
+			}, new SystemDialog.OnClick(this.CloseDialog));
+		}
+
 		private void CloseDialog()
 		private void CloseDialog()
 		{
 		{
 			GameMain.Instance.SysDlg.Close();
 			GameMain.Instance.SysDlg.Close();
@@ -423,7 +464,7 @@ namespace Kasizuki
 			{
 			{
 				this.onSave();
 				this.onSave();
 			}
 			}
-			this.OpenDialog(SystemDialog.TYPE.OK, "データを保存しました。", new Action(this.CloseDialog));
+			this.OpenDialogTerm(SystemDialog.TYPE.OK, "SceneKasizukiMainMenu/ダイアログ/データを保存しました。", new Action(this.CloseDialog));
 		}
 		}
 
 
 		private void Load(int saveSlot)
 		private void Load(int saveSlot)
@@ -443,7 +484,7 @@ namespace Kasizuki
 			{
 			{
 				this.onDelete();
 				this.onDelete();
 			}
 			}
-			this.OpenDialog(SystemDialog.TYPE.OK, "データを削除しました。", new Action(this.CloseDialog));
+			this.OpenDialogTerm(SystemDialog.TYPE.OK, "SceneKasizukiMainMenu/ダイアログ/データを削除しました。", new Action(this.CloseDialog));
 		}
 		}
 
 
 		private void NewGame()
 		private void NewGame()
@@ -482,17 +523,23 @@ namespace Kasizuki
 
 
 		private const string DIALOG_MESSAGE_TO_SAVE_NORMAL = "{0}番にデータを保存しますか?";
 		private const string DIALOG_MESSAGE_TO_SAVE_NORMAL = "{0}番にデータを保存しますか?";
 
 
+		private const string DIALOG_MESSAGE_TO_SAVE_NORMAL_TERM = "SceneKasizukiMainMenu/ダイアログ/データを保存しますか?";
+
 		private const string DIALOG_MESSAGE_TO_SAVE_OVERWRITE = "{0}番に上書きして保存します。\n宜しいですか?";
 		private const string DIALOG_MESSAGE_TO_SAVE_OVERWRITE = "{0}番に上書きして保存します。\n宜しいですか?";
 
 
+		private const string DIALOG_MESSAGE_TO_SAVE_OVERWRITE_TERM = "SceneKasizukiMainMenu/ダイアログ/上書きして保存します。宜しいですか?";
+
 		private const string DIALOG_MESSAGE_TO_LOAD = "{0}番のデータをロードしますか?";
 		private const string DIALOG_MESSAGE_TO_LOAD = "{0}番のデータをロードしますか?";
 
 
-		private const string DIALOG_MESSAGE_TO_DELETE = "データを削除します。\n本当に宜しいですか。";
+		private const string DIALOG_MESSAGE_TO_LOAD_TERM = "Dialog/セーブロード/データをロードしますか?";
+
+		private const string DIALOG_MESSAGE_TO_DELETE = "SceneKasizukiMainMenu/ダイアログ/データを削除します。本当に宜しいですか。";
 
 
-		private const string DIALOG_MESSAGE_RESULT_SAVE = "データを保存しました。";
+		private const string DIALOG_MESSAGE_RESULT_SAVE = "SceneKasizukiMainMenu/ダイアログ/データを保存しました。";
 
 
-		private const string DIALOG_MESSAGE_RESULT_DELETE = "データを削除しました。";
+		private const string DIALOG_MESSAGE_RESULT_DELETE = "SceneKasizukiMainMenu/ダイアログ/データを削除しました。";
 
 
-		private const string DIALOG_MESSAGE_TO_NEW_GAME = "ここに新規顧客情報を登録します。";
+		private const string DIALOG_MESSAGE_TO_NEW_GAME = "SceneKasizukiMainMenu/ダイアログ/ここに新規顧客情報を登録します。";
 
 
 		private bool m_IsStarted;
 		private bool m_IsStarted;
 
 

+ 65 - 0
Assembly-CSharp/Kasizuki/MaidAppealComment.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
 
 
 namespace Kasizuki
 namespace Kasizuki
@@ -33,11 +34,42 @@ namespace Kasizuki
 			}
 			}
 		}
 		}
 
 
+		private void Start()
+		{
+			if (Product.SPP)
+			{
+				this.appealLanguageSprites.Add(Product.Language.INKD.ToString(), this.m_ImageAppealComment);
+				string[] names = Enum.GetNames(typeof(Product.Language));
+				for (int i = 1; i < names.Length; i++)
+				{
+					GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.m_ImageAppealComment.gameObject);
+					gameObject.transform.SetParent(this.m_ImageAppealComment.transform.parent);
+					gameObject.transform.localScale = Vector3.one;
+					gameObject.transform.localPosition = this.m_ImageAppealComment.transform.localPosition;
+					this.appealLanguageSprites.Add(names[i], gameObject.GetComponent<UI2DSprite>());
+					gameObject.name = names[i];
+				}
+				this.OnLocalize();
+			}
+		}
+
 		private void OnDestroy()
 		private void OnDestroy()
 		{
 		{
 			this.DestroyImage();
 			this.DestroyImage();
 		}
 		}
 
 
+		public void OnLocalize()
+		{
+			if (!Product.SPP)
+			{
+				return;
+			}
+			foreach (KeyValuePair<string, UI2DSprite> keyValuePair in this.appealLanguageSprites)
+			{
+				keyValuePair.Value.gameObject.SetActive(keyValuePair.Key == Product.WMZI.ToString());
+			}
+		}
+
 		public void DestroyImage()
 		public void DestroyImage()
 		{
 		{
 			if (this.m_ImageAppealComment != null && this.m_ImageAppealComment.sprite2D != null)
 			if (this.m_ImageAppealComment != null && this.m_ImageAppealComment.sprite2D != null)
@@ -48,6 +80,18 @@ namespace Kasizuki
 				}
 				}
 				this.m_ImageAppealComment.sprite2D = null;
 				this.m_ImageAppealComment.sprite2D = null;
 			}
 			}
+			foreach (KeyValuePair<string, UI2DSprite> keyValuePair in this.appealLanguageSprites)
+			{
+				UI2DSprite value = keyValuePair.Value;
+				if (value != null && value.sprite2D != null)
+				{
+					if (value.sprite2D.texture != null)
+					{
+						UnityEngine.Object.DestroyImmediate(value.sprite2D.texture, true);
+					}
+					value.sprite2D = null;
+				}
+			}
 		}
 		}
 
 
 		public void ChangeImage(Texture2D texture)
 		public void ChangeImage(Texture2D texture)
@@ -62,6 +106,25 @@ namespace Kasizuki
 			this.m_ImageAppealComment.sprite2D = sprite;
 			this.m_ImageAppealComment.sprite2D = sprite;
 		}
 		}
 
 
+		public void ChangeImage(Dictionary<string, Texture2D> languageTexture)
+		{
+			this.DestroyImage();
+			if (languageTexture == null || languageTexture.Count == 0)
+			{
+				return;
+			}
+			foreach (KeyValuePair<string, Texture2D> keyValuePair in languageTexture)
+			{
+				if (!(keyValuePair.Value == null) && this.appealLanguageSprites.ContainsKey(keyValuePair.Key))
+				{
+					Texture2D value = keyValuePair.Value;
+					Sprite sprite = Sprite.Create(value, new Rect(0f, 0f, (float)value.width, (float)value.height), default(Vector2));
+					sprite.name = "Image _" + value.name;
+					this.appealLanguageSprites[keyValuePair.Key].sprite2D = sprite;
+				}
+			}
+		}
+
 		public void SetEnableEditing(bool isEnable)
 		public void SetEnableEditing(bool isEnable)
 		{
 		{
 			if (this.m_ButtonRight != null)
 			if (this.m_ButtonRight != null)
@@ -82,5 +145,7 @@ namespace Kasizuki
 
 
 		[SerializeField]
 		[SerializeField]
 		private UIButton m_ButtonLeft;
 		private UIButton m_ButtonLeft;
+
+		private Dictionary<string, UI2DSprite> appealLanguageSprites = new Dictionary<string, UI2DSprite>();
 	}
 	}
 }
 }

+ 2 - 0
Assembly-CSharp/Kasizuki/MaidLikabilityCtrl.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -92,6 +93,7 @@ namespace Kasizuki
 				}
 				}
 				num = Mathf.Clamp(num, 0, 100);
 				num = Mathf.Clamp(num, 0, 100);
 				component2.text = data.drawName;
 				component2.text = data.drawName;
+				Utility.SetLocalizeTerm(component2, data.drawNameTerm);
 				component3.text = num.ToString();
 				component3.text = num.ToString();
 				component4.fillAmount = (float)num / 100f;
 				component4.fillAmount = (float)num / 100f;
 			});
 			});

+ 19 - 2
Assembly-CSharp/Kasizuki/MaidMiniStatusCtrl.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
@@ -72,8 +73,12 @@ namespace Kasizuki
 			UILabel cache = base.GetCache<UILabel>("Personal");
 			UILabel cache = base.GetCache<UILabel>("Personal");
 			cache.fontSize = 25;
 			cache.fontSize = 25;
 			cache.text = status.personal.drawName;
 			cache.text = status.personal.drawName;
-			Utility.ResizeUILabelFontSize(cache, 251);
+			if (!Utility.SetLocalizeTerm(cache, status.personal.termName))
+			{
+				Utility.ResizeUILabelFontSize(cache, 251);
+			}
 			base.GetCache<UILabel>("SexualExp").text = EnumConvert.GetString(status.seikeiken);
 			base.GetCache<UILabel>("SexualExp").text = EnumConvert.GetString(status.seikeiken);
+			Utility.SetLocalizeTerm(base.GetCache<UILabel>("SexualExp"), EnumConvert.GetTerm(status.seikeiken));
 			base.GetCache<UILabel>("Height").text = status.body.height.ToString();
 			base.GetCache<UILabel>("Height").text = status.body.height.ToString();
 			base.GetCache<UILabel>("Weight").text = status.body.weight.ToString();
 			base.GetCache<UILabel>("Weight").text = status.body.weight.ToString();
 			base.GetCache<UILabel>("Bust").text = status.body.bust.ToString();
 			base.GetCache<UILabel>("Bust").text = status.body.bust.ToString();
@@ -110,7 +115,19 @@ namespace Kasizuki
 		private void SetAppealImage(AppealData.Data data)
 		private void SetAppealImage(AppealData.Data data)
 		{
 		{
 			MaidAppealComment cache = base.GetCache<MaidAppealComment>("Appeal");
 			MaidAppealComment cache = base.GetCache<MaidAppealComment>("Appeal");
-			cache.ChangeImage(data.GetTexture());
+			if (Product.SPP)
+			{
+				Dictionary<string, Texture2D> dictionary = new Dictionary<string, Texture2D>();
+				foreach (string text in LocalizationManager.GetAllLanguagesCode(true, true))
+				{
+					dictionary.Add(text, data.GetTexture(text));
+				}
+				cache.ChangeImage(dictionary);
+			}
+			else
+			{
+				cache.ChangeImage(data.GetTexture());
+			}
 			GameMain.Instance.KasizukiMgr.SetMaidData<int>(this.m_TargetMaid, MaidDataType.アピ\u30FCル欄, data.ID, false);
 			GameMain.Instance.KasizukiMgr.SetMaidData<int>(this.m_TargetMaid, MaidDataType.アピ\u30FCル欄, data.ID, false);
 		}
 		}
 
 

+ 2 - 0
Assembly-CSharp/Kasizuki/MaidPropensitysCtrl.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using MaidStatus;
 using MaidStatus;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 namespace Kasizuki
 namespace Kasizuki
 {
 {
@@ -48,6 +49,7 @@ namespace Kasizuki
 				Propensity.Data data = propensitys[index];
 				Propensity.Data data = propensitys[index];
 				UILabel componentInChildren2 = item.GetComponentInChildren<UILabel>();
 				UILabel componentInChildren2 = item.GetComponentInChildren<UILabel>();
 				componentInChildren2.text = data.drawName;
 				componentInChildren2.text = data.drawName;
+				Utility.SetLocalizeTerm(componentInChildren2, data.termName);
 			});
 			});
 			UIGrid component = this.m_ListViewer.parentItemArea.GetComponent<UIGrid>();
 			UIGrid component = this.m_ListViewer.parentItemArea.GetComponent<UIGrid>();
 			component.enabled = true;
 			component.enabled = true;

+ 24 - 0
Assembly-CSharp/Kasizuki/ManData.cs

@@ -169,6 +169,30 @@ namespace Kasizuki
 				}
 				}
 			}
 			}
 
 
+			public string drawNameTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/男名/" + this.uniqueName;
+				}
+			}
+
+			public string profileTextTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/男プロフ/" + this.uniqueName;
+				}
+			}
+
+			public string favoritePlayTextTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/男好プレイ/" + this.uniqueName;
+				}
+			}
+
 			public readonly int ID;
 			public readonly int ID;
 
 
 			public readonly string uniqueName;
 			public readonly string uniqueName;

+ 29 - 0
Assembly-CSharp/Kasizuki/PlayData.cs

@@ -332,6 +332,35 @@ namespace Kasizuki
 				}
 				}
 			}
 			}
 
 
+			public string drawNameTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/プレイタイトル/" + this.ID.ToString();
+				}
+			}
+
+			public string strDescriptionTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/プレイ内容/" + this.ID.ToString();
+				}
+			}
+
+			public string[] strConditionArrayTerms
+			{
+				get
+				{
+					string[] array = new string[this.strConditionArray.Length];
+					for (int i = 0; i < this.strConditionArray.Length; i++)
+					{
+						array[i] = "SceneKasizukiMainMenu/プレイ条件/" + this.strConditionArray[i];
+					}
+					return array;
+				}
+			}
+
 			public bool IsPassed
 			public bool IsPassed
 			{
 			{
 				get
 				get

+ 16 - 0
Assembly-CSharp/Kasizuki/RoomData.cs

@@ -211,6 +211,22 @@ namespace Kasizuki
 				}
 				}
 			}
 			}
 
 
+			public string drawNameTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/部屋名/" + this.drawName;
+				}
+			}
+
+			public string explanatoryTextTerm
+			{
+				get
+				{
+					return "SceneKasizukiMainMenu/部屋説明/" + this.drawName;
+				}
+			}
+
 			public RoomData.Data GetUpwardRoomData()
 			public RoomData.Data GetUpwardRoomData()
 			{
 			{
 				if (this.isExistUpwardRoom)
 				if (this.isExistUpwardRoom)

+ 387 - 0
Assembly-CSharp/KupaCtrl.cs

@@ -0,0 +1,387 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class KupaCtrl
+{
+	public KupaCtrl(TBody body0, TMorph morph)
+	{
+		this.m_morph = morph;
+		for (int i = 0; i < this.m_morphId.Length; i++)
+		{
+			this.m_morphId[i] = -1;
+		}
+		if (this.m_morph.hash.ContainsKey("openkupa"))
+		{
+			this.m_morphId[0] = (int)this.m_morph.hash["openkupa"];
+		}
+		if (this.m_morph.hash.ContainsKey("openvagina"))
+		{
+			this.m_morphId[1] = (int)this.m_morph.hash["openvagina"];
+		}
+		if (this.m_morph.hash.ContainsKey("openanal"))
+		{
+			this.m_morphId[2] = (int)this.m_morph.hash["openanal"];
+		}
+		if (this.m_morph.hash.ContainsKey("chinkos"))
+		{
+			this.m_morphId[3] = (int)this.m_morph.hash["chinkos"];
+		}
+		Transform transform = CMT.SearchObjName(body0.m_trBones, "_IK_vagina", true);
+		if (transform != null)
+		{
+			this.m_trans[0] = transform;
+		}
+		Transform transform2 = CMT.SearchObjName(body0.m_trBones, "_IK_vagina", true);
+		if (transform2 != null)
+		{
+			this.m_trans[1] = transform2;
+		}
+		Transform transform3 = CMT.SearchObjName(body0.m_trBones, "_IK_anal", true);
+		if (transform3 != null)
+		{
+			this.m_trans[2] = transform3;
+		}
+	}
+
+	public void FinishAll()
+	{
+		for (int i = 0; i < this.m_taskList.Count; i++)
+		{
+			this.m_taskList[i].ForceFinish();
+		}
+		this.m_taskList.Clear();
+		this.m_morph.FixBlendValues();
+	}
+
+	public void ResetAll()
+	{
+		for (int i = 0; i < this.m_morphId.Length; i++)
+		{
+			if (this.m_morphId[i] != -1)
+			{
+				this.m_morph.SetBlendValues(this.m_morphId[i], 0f);
+			}
+		}
+		this.m_taskList.Clear();
+		this.m_morph.FixBlendValues();
+	}
+
+	public void KupaStart(KupaCtrl.OPEN reg, float trans, float delay, float val, bool add = false)
+	{
+		if (!add)
+		{
+			this.Finish(reg);
+		}
+		if (this.m_morphId[(int)reg] != -1)
+		{
+			this.m_taskList.Add(new KupaCtrl.Task(this.m_morph, this.m_morphId[(int)reg], reg, trans, delay, val));
+		}
+	}
+
+	public void AutoKupaStart(KupaCtrl.OPEN reg, Maid targetMan, float val, float speedIn, float sppedOut, float outVal)
+	{
+		this.m_taskList.RemoveAll((KupaCtrl.ATask i) => i.m_reg == reg);
+		Transform trBones = targetMan.body0.m_trBones;
+		NDebug.Assert(trBones != null, "男の体が未だロードされていません。");
+		Transform transform = CMT.SearchObjName(trBones, "chinkoCenter", true);
+		if (transform != null)
+		{
+			Transform[] array = new Transform[3];
+			array[0] = transform.Find("chinko1");
+			array[1] = array[0].Find("chinko2");
+			array[2] = array[1].Find("chinko_nub");
+			if (this.m_morphId[(int)reg] != -1)
+			{
+				this.m_taskList.Add(new KupaCtrl.Target(this.m_morph, this.m_morphId[(int)reg], reg, this.m_trans[(int)reg], array, val, speedIn, sppedOut, outVal));
+			}
+		}
+	}
+
+	public void Finish(KupaCtrl.OPEN reg)
+	{
+		for (int j = 0; j < this.m_taskList.Count; j++)
+		{
+			KupaCtrl.ATask atask = this.m_taskList[j];
+			if (atask.m_reg == reg)
+			{
+				atask.ForceFinish();
+			}
+		}
+		this.m_taskList.RemoveAll((KupaCtrl.ATask i) => i.m_reg == reg);
+	}
+
+	public void Reset(KupaCtrl.OPEN reg)
+	{
+		if (this.m_morphId[(int)reg] != -1)
+		{
+			this.m_morph.SetBlendValues(this.m_morphId[(int)reg], 0f);
+		}
+		this.m_taskList.RemoveAll((KupaCtrl.ATask i) => i.m_reg == reg);
+	}
+
+	public void SelfUpdate()
+	{
+		bool flag = false;
+		for (int j = 0; j < this.m_taskList.Count; j++)
+		{
+			flag |= (this.m_taskList[j].IsVisible() && this.m_taskList[j].SelfUpdate());
+		}
+		if (flag)
+		{
+			this.m_morph.FixBlendValues();
+		}
+		this.m_taskList.RemoveAll((KupaCtrl.ATask i) => !i.IsVisible());
+	}
+
+	public TMorph m_morph;
+
+	private int[] m_morphId = new int[4];
+
+	private List<KupaCtrl.ATask> m_taskList = new List<KupaCtrl.ATask>();
+
+	private Transform[] m_trans = new Transform[4];
+
+	public enum OPEN
+	{
+		KUPA,
+		VAGINA,
+		ANAL,
+		CHINKOS,
+		MAX
+	}
+
+	private abstract class ATask
+	{
+		public ATask(TMorph morph, int id, KupaCtrl.OPEN reg)
+		{
+			this.m_morph = morph;
+			this.m_id = id;
+			this.m_reg = reg;
+		}
+
+		public virtual bool IsVisible()
+		{
+			return this.m_visible;
+		}
+
+		public abstract void ForceFinish();
+
+		public virtual void ForceReset()
+		{
+			this.m_morph.SetBlendValues(this.m_id, 0f);
+			this.m_visible = false;
+		}
+
+		public abstract bool SelfUpdate();
+
+		protected TMorph m_morph;
+
+		protected int m_id;
+
+		public KupaCtrl.OPEN m_reg;
+
+		protected bool m_visible;
+	}
+
+	private class Task : KupaCtrl.ATask
+	{
+		public Task(TMorph morph, int id, KupaCtrl.OPEN reg, float trans, float delay, float val) : base(morph, id, reg)
+		{
+			this.m_transTime = trans;
+			this.m_delayTime = delay;
+			this.m_distVal = Mathf.Clamp01(val);
+			this.m_startTime = Time.realtimeSinceStartup;
+			this.m_visible = true;
+			this.m_start = false;
+			if (trans <= 0f && delay <= 0f)
+			{
+				this.ForceFinish();
+				return;
+			}
+		}
+
+		public override void ForceFinish()
+		{
+			this.m_morph.SetBlendValues(this.m_id, this.m_distVal);
+			this.m_visible = false;
+		}
+
+		public override bool SelfUpdate()
+		{
+			if (!this.m_visible)
+			{
+				return false;
+			}
+			float num = Time.realtimeSinceStartup - this.m_startTime;
+			if (!this.m_start)
+			{
+				if (this.m_delayTime > num)
+				{
+					return false;
+				}
+				if (this.m_transTime <= 0f)
+				{
+					this.ForceFinish();
+					return true;
+				}
+				this.m_start = true;
+				this.m_startVal = this.m_morph.GetBlendValues(this.m_id);
+				this.m_subVal = this.m_distVal - this.m_startVal;
+			}
+			float num2 = num - this.m_delayTime;
+			float num3 = 1f;
+			if (0f < this.m_transTime)
+			{
+				num3 = this.m_startVal + this.m_subVal * (num2 / this.m_transTime);
+			}
+			if (this.m_transTime <= num2 || this.m_distVal == num3)
+			{
+				num3 = this.m_distVal;
+				this.m_visible = false;
+			}
+			float num4 = Mathf.Clamp01(num3);
+			if (num4 != this.m_morph.GetBlendValues(this.m_id))
+			{
+				this.m_morph.SetBlendValues(this.m_id, num4);
+				return true;
+			}
+			return false;
+		}
+
+		private float m_transTime;
+
+		private float m_delayTime;
+
+		private float m_distVal;
+
+		private float m_startTime;
+
+		private float m_startTime2;
+
+		private float m_startVal;
+
+		private float m_subVal;
+
+		private bool m_start;
+	}
+
+	private class Target : KupaCtrl.ATask
+	{
+		public Target(TMorph morph, int id, KupaCtrl.OPEN reg, Transform src, Transform[] target, float val, float speedIn, float sppedOut, float outVal) : base(morph, id, reg)
+		{
+			this.m_src = src;
+			this.m_target = target;
+			this.m_distVal = val;
+			this.m_sppedIn = speedIn;
+			this.m_sppedNow = speedIn;
+			this.m_sppedOut = sppedOut;
+			this.m_outVal = outVal;
+			this.m_visible = true;
+		}
+
+		public override void ForceFinish()
+		{
+			this.m_visible = false;
+		}
+
+		public override void ForceReset()
+		{
+			this.m_morph.SetBlendValues(this.m_id, 0f);
+			this.m_visible = false;
+		}
+
+		public override bool SelfUpdate()
+		{
+			if (!this.m_visible)
+			{
+				return false;
+			}
+			Vector3 lhs = this.m_src.TransformVector(-Vector3.forward);
+			float num = Vector3.Distance(this.m_src.position, this.m_target[this.m_target.Length - 1].position);
+			float num2 = float.PositiveInfinity;
+			int num3 = 0;
+			Vector3 zero = Vector3.zero;
+			float num4 = 0f;
+			for (int i = 1; i < this.m_target.Length; i++)
+			{
+				Vector3 position = this.m_target[i - 1].position;
+				Vector3 position2 = this.m_src.position;
+				MathCM.Segment segment = new MathCM.Segment(position, this.m_target[i].position);
+				Vector3 vector;
+				float num6;
+				float num5 = MathCM.calcPointSegmentDist(ref position2, ref segment, out vector, out num6);
+				if (num5 < num2)
+				{
+					num2 = num5;
+					num3 = i;
+					num4 = num6;
+				}
+			}
+			float num7 = this.m_outNowVal;
+			if (num2 <= this.m_hitDistance)
+			{
+				num7 = this.m_distVal;
+				if (0f < num4 && num4 < 1f)
+				{
+					this.m_outNowVal = this.m_outVal;
+				}
+			}
+			else if (num2 <= this.m_apprDistance)
+			{
+				num7 = this.m_outNowVal + (this.m_distVal - this.m_outNowVal) * (1f - (num2 - this.m_hitDistance) / (this.m_apprDistance - this.m_hitDistance));
+				Vector3 normalized = (this.m_target[num3 - 1].position - this.m_target[num3].position).normalized;
+				float num8 = Vector3.Dot(lhs, normalized);
+				if ((double)num8 <= 0.0)
+				{
+					num7 = 0f;
+				}
+				else if (num8 <= 0.7f)
+				{
+					num7 *= num8 / 0.7f;
+				}
+			}
+			if (num7 - this.m_befRatio > 0f)
+			{
+				this.m_sppedNow = this.m_sppedIn;
+			}
+			else if (num7 - this.m_befRatio < 0f)
+			{
+				this.m_sppedNow = this.m_sppedOut;
+			}
+			this.m_nowRatio += (num7 - this.m_nowRatio) * (Time.deltaTime * this.m_sppedNow);
+			this.m_befRatio = num7;
+			float num9 = Mathf.Clamp01(this.m_nowRatio);
+			if (num9 != this.m_morph.GetBlendValues(this.m_id))
+			{
+				this.m_morph.SetBlendValues(this.m_id, num9);
+				return true;
+			}
+			return false;
+		}
+
+		public Transform m_src;
+
+		public Transform[] m_target;
+
+		private float m_distVal = 1f;
+
+		private float m_outVal;
+
+		private float m_apprDistance = 0.025f;
+
+		private float m_hitDistance = 0.02f;
+
+		private float m_sppedIn = 5f;
+
+		private float m_sppedOut = 5f;
+
+		private float m_sppedNow = 5f;
+
+		private float m_outNowVal;
+
+		private float m_nowRatio;
+
+		private float m_befRatio;
+	}
+}

+ 84 - 3
Assembly-CSharp/Maid.cs

@@ -193,6 +193,11 @@ public class Maid : MonoBehaviour
 		else
 		else
 		{
 		{
 			this.SetUpModel("_I_default.menu");
 			this.SetUpModel("_I_default.menu");
+			if (Product.VBA)
+			{
+				this.SetProp(MPN.bra, "bra030_i_.menu", 0, false, false);
+				this.SetProp(MPN.panz, "Pants030_i_.menu", 0, false, false);
+			}
 		}
 		}
 	}
 	}
 
 
@@ -652,6 +657,60 @@ public class Maid : MonoBehaviour
 			mp.m_dicTBodyAttachPos.Clear();
 			mp.m_dicTBodyAttachPos.Clear();
 			mp.m_dicMaterialProp.Clear();
 			mp.m_dicMaterialProp.Clear();
 			mp.m_dicBoneLength.Clear();
 			mp.m_dicBoneLength.Clear();
+			if (Product.VBA)
+			{
+				f_nFileNameRID = mp.nFileNameRID;
+				if (filename.Contains("_del"))
+				{
+					f_nFileNameRID = 0;
+				}
+				if (mp.idx == 96)
+				{
+					this.m_strBefOnepiceFileName = filename;
+					this.m_nBefOnepiceRID = f_nFileNameRID;
+					if (f_nFileNameRID != 0)
+					{
+						MaidProp prop = this.GetProp(MPN.wear);
+						if (!prop.strFileName.Contains("_del"))
+						{
+							this.m_strBefWearFileName = prop.strFileName;
+							this.m_nBefWearRID = prop.nFileNameRID;
+						}
+						MaidProp prop2 = this.GetProp(MPN.skirt);
+						if (!prop2.strFileName.Contains("_del"))
+						{
+							this.m_strBefSkirtFileName = prop2.strFileName;
+							this.m_nBefSkirtRID = prop2.nFileNameRID;
+						}
+					}
+				}
+				else if (mp.idx == 67)
+				{
+					this.m_strBefWearFileName = filename;
+					this.m_nBefWearRID = f_nFileNameRID;
+					if (f_nFileNameRID != 0 && this.m_nBefOnepiceRID != 0)
+					{
+						this.m_nBefOnepiceRID = 0;
+						if (this.m_nBefSkirtRID != 0)
+						{
+							this.SetProp(MPN.skirt, this.m_strBefSkirtFileName, this.m_nBefSkirtRID, false, false);
+						}
+					}
+				}
+				else if (mp.idx == 68)
+				{
+					this.m_strBefSkirtFileName = filename;
+					this.m_nBefSkirtRID = f_nFileNameRID;
+					if (f_nFileNameRID != 0 && this.m_nBefOnepiceRID != 0)
+					{
+						this.m_nBefOnepiceRID = 0;
+						if (this.m_nBefWearRID != 0)
+						{
+							this.SetProp(MPN.wear, this.m_strBefWearFileName, this.m_nBefWearRID, false, false);
+						}
+					}
+				}
+			}
 		}
 		}
 		if (mp.boTempDut && mp.boDut)
 		if (mp.boTempDut && mp.boDut)
 		{
 		{
@@ -1144,6 +1203,11 @@ public class Maid : MonoBehaviour
 		}
 		}
 		else if (mp.type == 3)
 		else if (mp.type == 3)
 		{
 		{
+			if (Product.VBA && (mp.boTempDut || mp.boDut) && (mp.idx == 44 || mp.idx == 55 || mp.idx == 62 || mp.idx == 63 || mp.idx == 44 || mp.idx == 82 || mp.idx == 90 || mp.idx == 91 || mp.idx == 93))
+			{
+				mp.boDut = false;
+				mp.boTempDut = false;
+			}
 			if (mp.boTempDut && mp.boDut)
 			if (mp.boTempDut && mp.boDut)
 			{
 			{
 				string[] array = new string[6];
 				string[] array = new string[6];
@@ -1279,7 +1343,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1260);
+		f_bwWrite.Write(1270);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		int num = 0;
 		int num = 0;
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
@@ -1313,7 +1377,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1260);
+		f_bwWrite.Write(1270);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		if (this.m_texIcon != null)
 		{
 		{
@@ -1338,7 +1402,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1260);
+		f_bwWrite.Write(1270);
 		return true;
 		return true;
 	}
 	}
 
 
@@ -1370,6 +1434,11 @@ public class Maid : MonoBehaviour
 			MaidProp prop4 = this.GetProp(MPN.EyeSclY);
 			MaidProp prop4 = this.GetProp(MPN.EyeSclY);
 			prop4.value = prop2.value;
 			prop4.value = prop2.value;
 		}
 		}
+		if (!this.boMAN && Product.VBA)
+		{
+			this.SetProp(MPN.bra, "bra030_i_.menu", 0, false, false);
+			this.SetProp(MPN.panz, "Pants030_i_.menu", 0, false, false);
+		}
 		this.AllProcPropSeqStart();
 		this.AllProcPropSeqStart();
 		return true;
 		return true;
 	}
 	}
@@ -2935,6 +3004,18 @@ public class Maid : MonoBehaviour
 
 
 	private int m_nVoicePitch = 50;
 	private int m_nVoicePitch = 50;
 
 
+	private string m_strBefOnepiceFileName;
+
+	private int m_nBefOnepiceRID;
+
+	private string m_strBefWearFileName;
+
+	private int m_nBefWearRID;
+
+	private string m_strBefSkirtFileName;
+
+	private int m_nBefSkirtRID;
+
 	private bool boModelChg;
 	private bool boModelChg;
 
 
 	public bool boAllProcPropBUSY;
 	public bool boAllProcPropBUSY;

+ 6 - 1
Assembly-CSharp/MaidManagementMain.cs

@@ -27,7 +27,7 @@ public class MaidManagementMain : WfScreenChildren
 		}
 		}
 		this.yotogi_skill_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiSkillList", false).GetComponent<YotogiSkillListManager>();
 		this.yotogi_skill_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiSkillList", false).GetComponent<YotogiSkillListManager>();
 		this.yotogi_class_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiClassList", false).GetComponent<YotogiClassListManager>();
 		this.yotogi_class_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiClassList", false).GetComponent<YotogiClassListManager>();
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			this.status_panel_ = UTY.GetChildObject(base.root_obj, "StatusPanel_localize", false);
 			this.status_panel_ = UTY.GetChildObject(base.root_obj, "StatusPanel_localize", false);
 		}
 		}
@@ -169,6 +169,11 @@ public class MaidManagementMain : WfScreenChildren
 		{
 		{
 			this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 200);
 			this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 200);
 		}
 		}
+		if (Product.VBA)
+		{
+			this.button_dic_["移籍"].gameObject.SetActive(false);
+			this.button_dic_["夜伽スキル"].gameObject.SetActive(false);
+		}
 		for (int j = 0; j < this.chara_mgr_.GetMaidCount(); j++)
 		for (int j = 0; j < this.chara_mgr_.GetMaidCount(); j++)
 		{
 		{
 			if (this.chara_mgr_.GetMaid(j) != null)
 			if (this.chara_mgr_.GetMaid(j) != null)

+ 1 - 1
Assembly-CSharp/MaidParts.cs

@@ -37,7 +37,7 @@ public class MaidParts : MonoBehaviour
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MULTI_COL");
 		f_bwWrite.Write("CM3D2_MULTI_COL");
-		f_bwWrite.Write(1260);
+		f_bwWrite.Write(1270);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		{
 		{

+ 1 - 1
Assembly-CSharp/MaidPlate.cs

@@ -39,7 +39,7 @@ public class MaidPlate : MonoBehaviour
 		this.left_plate_.last_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextLastName", false).GetComponent<UILabel>();
 		this.left_plate_.last_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextLastName", false).GetComponent<UILabel>();
 		this.left_plate_.first_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextFirstName", false).GetComponent<UILabel>();
 		this.left_plate_.first_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextFirstName", false).GetComponent<UILabel>();
 		this.left_plate_.contract_type_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextTypeName", false).GetComponent<UILabel>();
 		this.left_plate_.contract_type_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextTypeName", false).GetComponent<UILabel>();
-		if (this.engModeMoveText && GameUty.supportMultiLanguage)
+		if (this.engModeMoveText && Product.SPP)
 		{
 		{
 			Vector3 localPosition = this.left_plate_.contract_type_label.transform.localPosition;
 			Vector3 localPosition = this.left_plate_.contract_type_label.transform.localPosition;
 			this.left_plate_.contract_type_label.transform.localPosition = new Vector3(80f, localPosition.y, localPosition.z);
 			this.left_plate_.contract_type_label.transform.localPosition = new Vector3(80f, localPosition.y, localPosition.z);

+ 1 - 1
Assembly-CSharp/MaidProp.cs

@@ -8,7 +8,7 @@ public class MaidProp
 	public bool Serialize(BinaryWriter f_bwWrite)
 	public bool Serialize(BinaryWriter f_bwWrite)
 	{
 	{
 		f_bwWrite.Write("CM3D2_MPROP");
 		f_bwWrite.Write("CM3D2_MPROP");
-		f_bwWrite.Write(1260);
+		f_bwWrite.Write(1270);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.type);
 		f_bwWrite.Write(this.type);

+ 111 - 3
Assembly-CSharp/MaidRandomName.cs

@@ -5,20 +5,32 @@ internal static class MaidRandomName
 {
 {
 	public static string GetLastName()
 	public static string GetLastName()
 	{
 	{
+		if (Product.SIBD)
+		{
+			return MaidRandomName.last_name_array_en[UnityEngine.Random.Range(0, MaidRandomName.last_name_array_en.Length)];
+		}
 		return MaidRandomName.last_name_array[UnityEngine.Random.Range(0, MaidRandomName.last_name_array.Length)];
 		return MaidRandomName.last_name_array[UnityEngine.Random.Range(0, MaidRandomName.last_name_array.Length)];
 	}
 	}
 
 
 	public static string GetFirstName()
 	public static string GetFirstName()
 	{
 	{
+		if (Product.SIBD)
+		{
+			return MaidRandomName.first_name_array_en[UnityEngine.Random.Range(0, MaidRandomName.first_name_array_en.Length)];
+		}
 		return MaidRandomName.first_name_array[UnityEngine.Random.Range(0, MaidRandomName.first_name_array.Length)];
 		return MaidRandomName.first_name_array[UnityEngine.Random.Range(0, MaidRandomName.first_name_array.Length)];
 	}
 	}
 
 
 	public static string GetPlayerName()
 	public static string GetPlayerName()
 	{
 	{
+		if (Product.SIBD)
+		{
+			return MaidRandomName.player_name_array_en[UnityEngine.Random.Range(0, MaidRandomName.player_name_array_en.Length)];
+		}
 		return MaidRandomName.player_name_array[UnityEngine.Random.Range(0, MaidRandomName.player_name_array.Length)];
 		return MaidRandomName.player_name_array[UnityEngine.Random.Range(0, MaidRandomName.player_name_array.Length)];
 	}
 	}
 
 
-	public static string[] last_name_array = new string[]
+	private static string[] last_name_array = new string[]
 	{
 	{
 		"赤木",
 		"赤木",
 		"青柳",
 		"青柳",
@@ -97,7 +109,7 @@ internal static class MaidRandomName
 		"勅使河原"
 		"勅使河原"
 	};
 	};
 
 
-	public static string[] first_name_array = new string[]
+	private static string[] first_name_array = new string[]
 	{
 	{
 		"澪",
 		"澪",
 		"愛乃",
 		"愛乃",
@@ -176,7 +188,7 @@ internal static class MaidRandomName
 		"ひなた"
 		"ひなた"
 	};
 	};
 
 
-	public static string[] player_name_array = new string[]
+	private static string[] player_name_array = new string[]
 	{
 	{
 		"翔太",
 		"翔太",
 		"蓮",
 		"蓮",
@@ -354,4 +366,100 @@ internal static class MaidRandomName
 		"望己利",
 		"望己利",
 		"聖帝"
 		"聖帝"
 	};
 	};
+
+	private static string[] last_name_array_en = new string[]
+	{
+		"Smith",
+		"Johnson",
+		"William",
+		"Jones",
+		"Brown",
+		"Davis",
+		"Miller",
+		"Willson",
+		"Moore",
+		"Taylor",
+		"Martinez",
+		"Anderson",
+		"Taylor",
+		"Thomas",
+		"Hernandez",
+		"Moore",
+		"Martin",
+		"Jackson",
+		"Thompson",
+		"White",
+		"Lopez",
+		"Harris",
+		"Clark",
+		"Walker",
+		"Gonzalez",
+		"Allen",
+		"Wright"
+	};
+
+	private static string[] first_name_array_en = new string[]
+	{
+		"Mary",
+		"Patricia",
+		"Linda",
+		"Barbara",
+		"Elizabeth",
+		"Jennipher",
+		"Maria",
+		"Margaret",
+		"Dorothy",
+		"Lisa",
+		"Madison",
+		"Hannah",
+		"Samantha",
+		"Ashley",
+		"Emma",
+		"Olivia",
+		"Ava",
+		"Sophia",
+		"Isabella",
+		"Mia",
+		"Charlotte",
+		"Abigail",
+		"Emily",
+		"Harper",
+		"Amelia",
+		"Evelyn",
+		"Harper"
+	};
+
+	private static string[] player_name_array_en = new string[]
+	{
+		"James",
+		"John",
+		"Robert",
+		"David",
+		"Richard",
+		"Charles",
+		"Joseph",
+		"Thomas",
+		"Jacob",
+		"Joshua",
+		"Matthew",
+		"Ethan",
+		"Andrew",
+		"Daniel",
+		"Anthony",
+		"Christopher",
+		"Joseph",
+		"Noah",
+		"Liam",
+		"William",
+		"Mason",
+		"James",
+		"Benjamin",
+		"Jacob",
+		"Michael",
+		"Elijah",
+		"Ethan",
+		"Logan",
+		"Oliver",
+		"Alexander"
+	};
 }
 }

+ 11 - 0
Assembly-CSharp/MaidStatus/AdditionalRelation.cs

@@ -0,0 +1,11 @@
+using System;
+
+namespace MaidStatus
+{
+	public enum AdditionalRelation
+	{
+		Null,
+		Vigilance,
+		LoverPlus
+	}
+}

+ 39 - 0
Assembly-CSharp/MaidStatus/EnumConvert.cs

@@ -20,6 +20,16 @@ namespace MaidStatus
 			return "MaidStatus/関係タイプ/" + EnumConvert.GetString(relation);
 			return "MaidStatus/関係タイプ/" + EnumConvert.GetString(relation);
 		}
 		}
 
 
+		public static string GetTerm(AdditionalRelation relationEnhance)
+		{
+			return "MaidStatus/関係タイプ/" + EnumConvert.GetString(relationEnhance);
+		}
+
+		public static string GetTerm(Relation relation, AdditionalRelation relationEnhance)
+		{
+			return (relationEnhance != AdditionalRelation.Null) ? EnumConvert.GetTerm(relationEnhance) : EnumConvert.GetTerm(relation);
+		}
+
 		public static string GetString(HeroineType heroineType)
 		public static string GetString(HeroineType heroineType)
 		{
 		{
 			string result = string.Empty;
 			string result = string.Empty;
@@ -113,6 +123,35 @@ namespace MaidStatus
 			return result;
 			return result;
 		}
 		}
 
 
+		public static string GetString(AdditionalRelation relation)
+		{
+			string result = string.Empty;
+			if (relation != AdditionalRelation.Vigilance)
+			{
+				if (relation != AdditionalRelation.LoverPlus)
+				{
+					if (relation == AdditionalRelation.Null)
+					{
+						result = "Null";
+					}
+				}
+				else
+				{
+					result = "恋人+";
+				}
+			}
+			else
+			{
+				result = "警戒";
+			}
+			return result;
+		}
+
+		public static string GetString(Relation relation, AdditionalRelation relationEnhance)
+		{
+			return (relationEnhance != AdditionalRelation.Null) ? EnumConvert.GetString(relationEnhance) : EnumConvert.GetString(relation);
+		}
+
 		public static string GetString(Relation relation)
 		public static string GetString(Relation relation)
 		{
 		{
 			string result = string.Empty;
 			string result = string.Empty;

+ 57 - 1
Assembly-CSharp/MaidStatus/Status.cs

@@ -129,6 +129,18 @@ namespace MaidStatus
 			}
 			}
 		}
 		}
 
 
+		public string nickName
+		{
+			get
+			{
+				return this.nickName_;
+			}
+			set
+			{
+				this.nickName_ = ((value != null) ? Status.ConvertString(value, 8) : string.Empty);
+			}
+		}
+
 		public string freeComment
 		public string freeComment
 		{
 		{
 			get
 			get
@@ -180,6 +192,25 @@ namespace MaidStatus
 			}
 			}
 		}
 		}
 
 
+		public AdditionalRelation additionalRelation
+		{
+			get
+			{
+				return this.additionalRelation_;
+			}
+			set
+			{
+				if (Product.enabeldAdditionalRelation && (this.personal.uniqueName == "Muku" || this.personal.uniqueName == "Majime" || this.personal.uniqueName == "Rindere"))
+				{
+					this.additionalRelation_ = value;
+				}
+				else
+				{
+					this.additionalRelation_ = AdditionalRelation.Null;
+				}
+			}
+		}
+
 		public string conditionText
 		public string conditionText
 		{
 		{
 			get
 			get
@@ -824,6 +855,7 @@ namespace MaidStatus
 			text = text.Replace(" ", string.Empty);
 			text = text.Replace(" ", string.Empty);
 			this.creationTimeNum = ulong.Parse(text);
 			this.creationTimeNum = ulong.Parse(text);
 			this.employmentDay = GameMain.Instance.CharacterMgr.status.days;
 			this.employmentDay = GameMain.Instance.CharacterMgr.status.days;
+			this.additionalRelation = AdditionalRelation.Vigilance;
 			List<JobClass.Data> learnPossibleClassDatas = this.jobClass.GetLearnPossibleClassDatas(true, AbstractClassData.ClassType.Share | AbstractClassData.ClassType.New);
 			List<JobClass.Data> learnPossibleClassDatas = this.jobClass.GetLearnPossibleClassDatas(true, AbstractClassData.ClassType.Share | AbstractClassData.ClassType.New);
 			foreach (JobClass.Data data in learnPossibleClassDatas)
 			foreach (JobClass.Data data in learnPossibleClassDatas)
 			{
 			{
@@ -1231,7 +1263,7 @@ namespace MaidStatus
 		public void Serialize(BinaryWriter binary)
 		public void Serialize(BinaryWriter binary)
 		{
 		{
 			binary.Write("CM3D2_MAID_STATUS");
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1260);
+			binary.Write(1270);
 			binary.Write(this.guid);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);
 			binary.Write((short)this.heroineType);
@@ -1341,6 +1373,9 @@ namespace MaidStatus
 			{
 			{
 				binary.Write(this.selectedYotogiClass.data.id);
 				binary.Write(this.selectedYotogiClass.data.id);
 			}
 			}
+			binary.Write((short)this.additionalRelation_);
+			binary.Write(this.nickName_);
+			binary.Write(this.age);
 			binary.Write(2177629204u);
 			binary.Write(2177629204u);
 		}
 		}
 
 
@@ -1563,6 +1598,13 @@ namespace MaidStatus
 					this.selectedYotogiClass = selectedYotogiClass;
 					this.selectedYotogiClass = selectedYotogiClass;
 				}
 				}
 			}
 			}
+			this.additionalRelation_ = AdditionalRelation.Null;
+			if (1270 <= num)
+			{
+				this.additionalRelation_ = (AdditionalRelation)binary.ReadInt16();
+				this.nickName_ = binary.ReadString();
+				this.age = binary.ReadInt32();
+			}
 			uint num9 = binary.ReadUInt32();
 			uint num9 = binary.ReadUInt32();
 			NDebug.Assert(2177629204u == num9, "メイドパラメータのロードに失敗しました");
 			NDebug.Assert(2177629204u == num9, "メイドパラメータのロードに失敗しました");
 			if (num <= 1050)
 			if (num <= 1050)
@@ -1586,6 +1628,14 @@ namespace MaidStatus
 					this.yotogiSkill.Remove(skillId);
 					this.yotogiSkill.Remove(skillId);
 				}
 				}
 			}
 			}
+			List<Skill.Data> learnPossibleSkills = Skill.GetLearnPossibleSkills(this);
+			foreach (Skill.Data data2 in learnPossibleSkills)
+			{
+				if (data2.specialConditionType == Skill.Data.SpecialConditionType.GP01Recollect)
+				{
+					this.yotogiSkill.Add(data2);
+				}
+			}
 		}
 		}
 
 
 		public void Deserialize(StatusReader oldStatusReader, bool convertYotogiSkill)
 		public void Deserialize(StatusReader oldStatusReader, bool convertYotogiSkill)
@@ -1810,6 +1860,8 @@ namespace MaidStatus
 
 
 		public string profileComment;
 		public string profileComment;
 
 
+		public int age;
+
 		public Seikeiken initSeikeiken;
 		public Seikeiken initSeikeiken;
 
 
 		public Seikeiken seikeiken;
 		public Seikeiken seikeiken;
@@ -1850,8 +1902,12 @@ namespace MaidStatus
 
 
 		private string firstName_ = string.Empty;
 		private string firstName_ = string.Empty;
 
 
+		private string nickName_ = string.Empty;
+
 		private Relation relation_;
 		private Relation relation_;
 
 
+		private AdditionalRelation additionalRelation_;
+
 		private ushort playCountYotogi_;
 		private ushort playCountYotogi_;
 
 
 		private ushort playCountNightWork_;
 		private ushort playCountNightWork_;

+ 5 - 1
Assembly-CSharp/Menu.cs

@@ -838,6 +838,10 @@ public class Menu : MonoBehaviour
 		byte[] buffer = null;
 		byte[] buffer = null;
 		try
 		try
 		{
 		{
+			if (!GameUty.IsExistFile(filename, null))
+			{
+				return;
+			}
 			using (AFileBase afileBase = GameUty.FileOpen(filename, null))
 			using (AFileBase afileBase = GameUty.FileOpen(filename, null))
 			{
 			{
 				if (!afileBase.IsValid())
 				if (!afileBase.IsValid())
@@ -907,7 +911,7 @@ public class Menu : MonoBehaviour
 			Directory.CreateDirectory(text);
 			Directory.CreateDirectory(text);
 		}
 		}
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
-		streamWriter.WriteLine("出力バージョン\t" + 1260);
+		streamWriter.WriteLine("出力バージョン\t" + 1270);
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		try
 		try
 		{
 		{

+ 45 - 16
Assembly-CSharp/MessageClass.cs

@@ -18,8 +18,19 @@ public class MessageClass
 		this.hitret_sprite_.alpha = 0f;
 		this.hitret_sprite_.alpha = 0f;
 		this.mainTextAnimation = new MessageClass.TextAnimation();
 		this.mainTextAnimation = new MessageClass.TextAnimation();
 		this.subTextAnimation = new MessageClass.TextAnimation();
 		this.subTextAnimation = new MessageClass.TextAnimation();
-		this.subtitles_manager_.visible = false;
-		this.subtitles_manager_ = null;
+		if (!Product.SPP)
+		{
+			this.subtitles_manager_.visible = false;
+			this.subtitles_manager_ = null;
+		}
+		else
+		{
+			this.subtitles_manager_.visible = true;
+			this.message_label_.gameObject.SetActive(false);
+			this.name_label_.gameObject.SetActive(false);
+			UTY.GetChildObject(this.message_window_panel_, "MessageViewer/MsgParent/MessageBox", false).SetActive(false);
+			this.message_label_ = (this.name_label_ = null);
+		}
 	}
 	}
 
 
 	public static KeyValuePair<string, string> GetTranslationText(string baseText)
 	public static KeyValuePair<string, string> GetTranslationText(string baseText)
@@ -37,6 +48,10 @@ public class MessageClass
 				return new KeyValuePair<string, string>(baseText, string.Empty);
 				return new KeyValuePair<string, string>(baseText, string.Empty);
 			}
 			}
 		}
 		}
+		if (!Product.SPP)
+		{
+			return new KeyValuePair<string, string>(baseText.Substring(0, num), string.Empty);
+		}
 		return new KeyValuePair<string, string>(baseText.Substring(0, num), baseText.Substring(num + 3, baseText.Length - (num + 3)));
 		return new KeyValuePair<string, string>(baseText.Substring(0, num), baseText.Substring(num + 3, baseText.Length - (num + 3)));
 	}
 	}
 
 
@@ -120,19 +135,13 @@ public class MessageClass
 	{
 	{
 		this.exit_wait_count_ = -1;
 		this.exit_wait_count_ = -1;
 		this.hitret_sprite_.alpha = 0f;
 		this.hitret_sprite_.alpha = 0f;
-		this.charaNameText = name;
-		if (!GameUty.supportMultiLanguage)
-		{
-			this.mainTextAnimation.StartAnimation(MessageClass.GetWrapString(this.message_label_, text));
-			this.message_mgr_.AddBackLog(name, this.mainTextAnimation.text, voice_file, voice_pitch, type);
-		}
-		else
-		{
-			KeyValuePair<string, string> translationText = MessageClass.GetTranslationText(text);
-			this.mainTextAnimation.StartAnimation(translationText.Key);
-			this.subTextAnimation.StartAnimation(translationText.Value);
-			this.message_mgr_.AddBackLog(name, this.mainTextAnimation.text, this.subTextAnimation.text, voice_file, voice_pitch, type);
-		}
+		KeyValuePair<string, string> translationText = MessageClass.GetTranslationText(name);
+		this.charaNameText = translationText.Key;
+		this.charaNameTranslationSet = translationText;
+		KeyValuePair<string, string> translationText2 = MessageClass.GetTranslationText(text);
+		this.mainTextAnimation.StartAnimation(translationText2.Key);
+		this.subTextAnimation.StartAnimation(translationText2.Value);
+		this.message_mgr_.AddBackLog(translationText, this.mainTextAnimation.text, this.subTextAnimation.text, voice_file, voice_pitch, type);
 		this.Update();
 		this.Update();
 	}
 	}
 
 
@@ -144,6 +153,7 @@ public class MessageClass
 		text = text;
 		text = text;
 		this.messageText = text;
 		this.messageText = text;
 		this.subtitlesText = text;
 		this.subtitlesText = text;
+		this.charaNameTranslationSet = new KeyValuePair<string, string>(string.Empty, string.Empty);
 		this.mainTextAnimation.Clear();
 		this.mainTextAnimation.Clear();
 		this.subTextAnimation.Clear();
 		this.subTextAnimation.Clear();
 		this.hitret_sprite_.alpha = 0f;
 		this.hitret_sprite_.alpha = 0f;
@@ -229,6 +239,13 @@ public class MessageClass
 			{
 			{
 				this.name_label_.text = value;
 				this.name_label_.text = value;
 			}
 			}
+		}
+	}
+
+	private KeyValuePair<string, string> charaNameTranslationSet
+	{
+		set
+		{
 			if (this.subtitles_manager_ != null)
 			if (this.subtitles_manager_ != null)
 			{
 			{
 				this.subtitles_manager_.charaNameText = value;
 				this.subtitles_manager_.charaNameText = value;
@@ -272,7 +289,15 @@ public class MessageClass
 		{
 		{
 			get
 			get
 			{
 			{
-				return (int)((100f - (float)GameMain.Instance.CMSystem.MsgTextSpeed) * 1.5f);
+				if (!Product.SPP)
+				{
+					return (int)((100f - (float)GameMain.Instance.CMSystem.MsgTextSpeed) * 1.5f);
+				}
+				if (this.text_info == null || this.text_info.LengthInTextElements == 0)
+				{
+					return 0;
+				}
+				return (100 - GameMain.Instance.CMSystem.MsgTextSpeed) * 20 / this.text_info.LengthInTextElements;
 			}
 			}
 		}
 		}
 
 
@@ -295,6 +320,10 @@ public class MessageClass
 		public void StartAnimation(string text)
 		public void StartAnimation(string text)
 		{
 		{
 			this.Clear();
 			this.Clear();
+			if (string.IsNullOrEmpty(text))
+			{
+				return;
+			}
 			this.text_info = new StringInfo(text);
 			this.text_info = new StringInfo(text);
 			this.type = MessageClass.TextAnimation.Type.Execution;
 			this.type = MessageClass.TextAnimation.Type.Execution;
 			this.start_time = GameMain.tick_count - this.ch_wait;
 			this.start_time = GameMain.tick_count - this.ch_wait;

+ 15 - 3
Assembly-CSharp/MessageWindowCtrl.cs

@@ -33,10 +33,11 @@ public class MessageWindowCtrl : MonoBehaviour
 	{
 	{
 		UTY.GetChildObject(this.m_goSelectorViewer, "Scroll Bar/Down", false).GetComponent<UISprite>().enabled = true;
 		UTY.GetChildObject(this.m_goSelectorViewer, "Scroll Bar/Down", false).GetComponent<UISprite>().enabled = true;
 		UTY.GetChildObject(this.m_goSelectorViewer, "Scroll Bar/Up", false).GetComponent<UISprite>().enabled = true;
 		UTY.GetChildObject(this.m_goSelectorViewer, "Scroll Bar/Up", false).GetComponent<UISprite>().enabled = true;
-		UnityEngine.Object @object = Resources.Load("SystemUI/MessageWindow/Main/Prefabs/SelectButton");
+		string text = (!Product.SPP) ? "SystemUI/MessageWindow/Main/Prefabs/SelectButton" : "SystemUI/MessageWindow/Main/Prefabs/SelectButtonDouble";
+		UnityEngine.Object @object = Resources.Load(text);
 		if (@object == null)
 		if (@object == null)
 		{
 		{
-			Debug.LogError(string.Format("ロードされるプレハブが見つかりませんでした。パス={0}", "SystemUI/MessageWindow/Main/Prefabs/SelectButton"));
+			Debug.LogError(string.Format("ロードされるプレハブが見つかりませんでした。パス={0}", text));
 			return;
 			return;
 		}
 		}
 		this.m_selectButtonCtrl.CreateSelectButtons(listSelectBtn, onClickCallBack, @object);
 		this.m_selectButtonCtrl.CreateSelectButtons(listSelectBtn, onClickCallBack, @object);
@@ -51,7 +52,16 @@ public class MessageWindowCtrl : MonoBehaviour
 
 
 	public void CreateBacklog(List<BacklogCtrl.BacklogUnit> dicBacklog)
 	public void CreateBacklog(List<BacklogCtrl.BacklogUnit> dicBacklog)
 	{
 	{
-		UnityEngine.Object @object = Resources.Load("SystemUI/MessageWindow/Backlog/Prefabs/BacklogUnit");
+		string path;
+		if (!Product.SPP)
+		{
+			path = "SystemUI/MessageWindow/Backlog/Prefabs/BacklogUnit";
+		}
+		else
+		{
+			path = "SystemUI/MessageWindow/Backlog/Prefabs/BacklogSubtitleUnit";
+		}
+		UnityEngine.Object @object = Resources.Load(path);
 		if (@object == null)
 		if (@object == null)
 		{
 		{
 			Debug.LogError(string.Format("ロードされるプレハブが見つかりませんでした。パス={0}", "SystemUI/MessageWindow/Backlog/Prefabs/BacklogUnit"));
 			Debug.LogError(string.Format("ロードされるプレハブが見つかりませんでした。パス={0}", "SystemUI/MessageWindow/Backlog/Prefabs/BacklogUnit"));
@@ -165,6 +175,8 @@ public class MessageWindowCtrl : MonoBehaviour
 
 
 	private const string SELECT_BTN_PARENT_PATH = "SelectorViewer/Contents/SelectButtonParent";
 	private const string SELECT_BTN_PARENT_PATH = "SelectorViewer/Contents/SelectButtonParent";
 
 
+	private const string SELECT_BUTTON_PREFAB_PATH_EN = "SystemUI/MessageWindow/Main/Prefabs/SelectButtonDouble";
+
 	private const string SELECT_BUTTON_PREFAB_PATH = "SystemUI/MessageWindow/Main/Prefabs/SelectButton";
 	private const string SELECT_BUTTON_PREFAB_PATH = "SystemUI/MessageWindow/Main/Prefabs/SelectButton";
 
 
 	private const string BACKLOG_UNIT_PARENT_PATH = "BacklogViewer/Contents/BacklogUnitParent";
 	private const string BACKLOG_UNIT_PARENT_PATH = "BacklogViewer/Contents/BacklogUnitParent";

+ 4 - 3
Assembly-CSharp/MessageWindowMgr.cs

@@ -316,13 +316,14 @@ public class MessageWindowMgr : BaseMgr<MessageWindowMgr>
 
 
 	public void AddBackLog(string name, string text, string voice_file, int pitch, AudioSourceMgr.Type type)
 	public void AddBackLog(string name, string text, string voice_file, int pitch, AudioSourceMgr.Type type)
 	{
 	{
-		this.AddBackLog(name, text, string.Empty, voice_file, pitch, type);
+		this.AddBackLog(new KeyValuePair<string, string>(name, name), text, string.Empty, voice_file, pitch, type);
 	}
 	}
 
 
-	public void AddBackLog(string name, string text, string subtitle_text, string voice_file, int pitch, AudioSourceMgr.Type type)
+	public void AddBackLog(KeyValuePair<string, string> nameSet, string text, string subtitle_text, string voice_file, int pitch, AudioSourceMgr.Type type)
 	{
 	{
 		BacklogCtrl.BacklogUnit backlogUnit = new BacklogCtrl.BacklogUnit();
 		BacklogCtrl.BacklogUnit backlogUnit = new BacklogCtrl.BacklogUnit();
-		backlogUnit.m_speakerName = name;
+		backlogUnit.m_speakerName = nameSet.Key;
+		backlogUnit.m_speakerNameSet = nameSet;
 		backlogUnit.m_msg = text;
 		backlogUnit.m_msg = text;
 		backlogUnit.m_subtitlemsg = subtitle_text;
 		backlogUnit.m_subtitlemsg = subtitle_text;
 		backlogUnit.m_voiceId = voice_file;
 		backlogUnit.m_voiceId = voice_file;

+ 1 - 1
Assembly-CSharp/Misc.cs

@@ -2,7 +2,7 @@
 
 
 public class Misc
 public class Misc
 {
 {
-	public const int GAME_VERSION = 1260;
+	public const int GAME_VERSION = 1270;
 
 
 	public const string GAME_DATA_PATH = "GameData";
 	public const string GAME_DATA_PATH = "GameData";
 
 

+ 1 - 1
Assembly-CSharp/ModCompile.cs

@@ -604,7 +604,7 @@ public class ModCompile : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MESH");
 		binaryWriter.Write("CM3D2_MESH");
-		binaryWriter.Write(1260);
+		binaryWriter.Write(1270);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(exObjIn2.strName);
 		binaryWriter.Write(exObjIn2.strName);

+ 2 - 2
Assembly-CSharp/MotionWindow.cs

@@ -25,7 +25,7 @@ public class MotionWindow : BaseMaidPhotoWindow
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 			}
 			}
 		}
 		}
-		if (!GameUty.supportMultiLanguage)
+		if (!Product.SPP)
 		{
 		{
 			dictionary = null;
 			dictionary = null;
 		}
 		}
@@ -217,7 +217,7 @@ public class MotionWindow : BaseMaidPhotoWindow
 			UTY.GetChildObject(this.content_game_object, "ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = true;
 			UTY.GetChildObject(this.content_game_object, "ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = true;
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			PhotoMotionData photoMotionData = PhotoMotionData.Get(long.Parse(maidStoreData["id"]));
 			PhotoMotionData photoMotionData = PhotoMotionData.Get(long.Parse(maidStoreData["id"]));
-			this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : (maid.boMAN ? PhotoMotionData.popup_category_term_list_for_man : PhotoMotionData.popup_category_term_list));
+			this.PopupAndTabList.popup_term_list = ((!Product.SPP) ? null : (maid.boMAN ? PhotoMotionData.popup_category_term_list_for_man : PhotoMotionData.popup_category_term_list));
 			this.PopupAndTabList.popup_value_list = (maid.boMAN ? PhotoMotionData.popup_category_list_for_man : PhotoMotionData.popup_category_list);
 			this.PopupAndTabList.popup_value_list = (maid.boMAN ? PhotoMotionData.popup_category_list_for_man : PhotoMotionData.popup_category_list);
 			this.PopupAndTabList.SetPopupValue(photoMotionData.category);
 			this.PopupAndTabList.SetPopupValue(photoMotionData.category);
 			this.PopupAndTabList.SetSelectButton(photoMotionData, false);
 			this.PopupAndTabList.SetSelectButton(photoMotionData, false);

+ 29 - 3
Assembly-CSharp/MyRoomCustom/CreativeRoom.cs

@@ -1,10 +1,12 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.EventSystems;
 using UnityEngine.EventSystems;
 using UnityEngine.Rendering;
 using UnityEngine.Rendering;
 using UnityEngine.UI;
 using UnityEngine.UI;
+using wf;
 
 
 namespace MyRoomCustom
 namespace MyRoomCustom
 {
 {
@@ -579,9 +581,33 @@ namespace MyRoomCustom
 
 
 		private void UpdateRoomSizeText()
 		private void UpdateRoomSizeText()
 		{
 		{
-			this.m_UITextRoomSizeX.text = "横幅:" + string.Format("{0:#0.##}", (float)this.mapSizeX * this.unitSize) + "m";
-			this.m_UITextRoomSizeZ.text = "奥行:" + string.Format("{0:#0.##}", (float)this.mapSizeZ * this.unitSize) + "m";
-			this.m_UITextRoomSizeY.text = "高さ:" + string.Format("{0:#0.##}", (float)this.mapSizeY * this.unitSize) + "m";
+			if (!Product.SPP)
+			{
+				this.m_UITextRoomSizeX.text = "横幅:" + string.Format("{0:#0.##}", (float)this.mapSizeX * this.unitSize) + "m";
+				this.m_UITextRoomSizeZ.text = "奥行:" + string.Format("{0:#0.##}", (float)this.mapSizeZ * this.unitSize) + "m";
+				this.m_UITextRoomSizeY.text = "高さ:" + string.Format("{0:#0.##}", (float)this.mapSizeY * this.unitSize) + "m";
+			}
+			else
+			{
+				Localize component = this.m_UITextRoomSizeX.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.TermSuffix = ":" + string.Format("{0:#0.##}", (float)this.mapSizeX * this.unitSize) + "m";
+					Utility.SetLocalizeTerm(component, "SceneCreativeRoom/横幅");
+				}
+				component = this.m_UITextRoomSizeZ.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.TermSuffix = ":" + string.Format("{0:#0.##}", (float)this.mapSizeZ * this.unitSize) + "m";
+					Utility.SetLocalizeTerm(component, "SceneCreativeRoom/奥行");
+				}
+				component = this.m_UITextRoomSizeY.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.TermSuffix = ":" + string.Format("{0:#0.##}", (float)this.mapSizeY * this.unitSize) + "m";
+					Utility.SetLocalizeTerm(component, "SceneCreativeRoom/高さ");
+				}
+			}
 		}
 		}
 
 
 		private void AddEventQuad(CreativeRoom.TileObject Obj, Action<BaseEventData, CreativeRoom.TileObject> pointerEnter, Action<BaseEventData, CreativeRoom.TileObject> pointerExit, Action<BaseEventData, CreativeRoom.TileObject> pointerClick)
 		private void AddEventQuad(CreativeRoom.TileObject Obj, Action<BaseEventData, CreativeRoom.TileObject> pointerEnter, Action<BaseEventData, CreativeRoom.TileObject> pointerExit, Action<BaseEventData, CreativeRoom.TileObject> pointerClick)

+ 1 - 1
Assembly-CSharp/MyRoomCustom/CreativeRoomManager.cs

@@ -376,7 +376,7 @@ namespace MyRoomCustom
 			{
 			{
 				return;
 				return;
 			}
 			}
-			GameMain.Instance.SysDlg.Show("セーブしていないデータは失われます。\n終了しますか?", SystemDialog.TYPE.YES_NO, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/セーブしていないデータは失われます。終了しますか?", null, SystemDialog.TYPE.YES_NO, delegate
 			{
 			{
 				if (string.IsNullOrEmpty(this.m_strScriptReturnLabel))
 				if (string.IsNullOrEmpty(this.m_strScriptReturnLabel))
 				{
 				{

+ 4 - 2
Assembly-CSharp/MyRoomCustom/CreativeRoomUIObjectSettings.cs

@@ -787,6 +787,7 @@ namespace MyRoomCustom
 						transform2.SetParent(transform, false);
 						transform2.SetParent(transform, false);
 						Button[] componentsInChildren = transform2.GetComponentsInChildren<Button>();
 						Button[] componentsInChildren = transform2.GetComponentsInChildren<Button>();
 						componentsInChildren[0].GetComponentInChildren<Text>().text = PlacementData.GetData(deployObjectInstanceData.objectID).drawName;
 						componentsInChildren[0].GetComponentInChildren<Text>().text = PlacementData.GetData(deployObjectInstanceData.objectID).drawName;
+						Utility.SetLocalizeTerm(componentsInChildren[0].GetComponentInChildren<Text>(), PlacementData.GetData(deployObjectInstanceData.objectID).drawNameTerm);
 						componentsInChildren[0].onClick.RemoveAllListeners();
 						componentsInChildren[0].onClick.RemoveAllListeners();
 						componentsInChildren[1].onClick.RemoveAllListeners();
 						componentsInChildren[1].onClick.RemoveAllListeners();
 						componentsInChildren[0].onClick.AddListener(delegate()
 						componentsInChildren[0].onClick.AddListener(delegate()
@@ -808,7 +809,7 @@ namespace MyRoomCustom
 					}
 					}
 				}
 				}
 			}
 			}
-			this.m_UITextDeployObjectNum.text = this.m_DeploymentObjectInstanceArray.Count.ToString() + "個";
+			this.m_UITextDeployObjectNum.text = this.m_DeploymentObjectInstanceArray.Count.ToString();
 			component.enabled = true;
 			component.enabled = true;
 		}
 		}
 
 
@@ -824,7 +825,7 @@ namespace MyRoomCustom
 				this.m_DeploymentObjectInstanceArray.Remove(Obj);
 				this.m_DeploymentObjectInstanceArray.Remove(Obj);
 				UnityEngine.Object.Destroy(Obj);
 				UnityEngine.Object.Destroy(Obj);
 			}
 			}
-			this.m_UITextDeployObjectNum.text = this.m_DeploymentObjectInstanceArray.Count.ToString() + "個";
+			this.m_UITextDeployObjectNum.text = this.m_DeploymentObjectInstanceArray.Count.ToString();
 		}
 		}
 
 
 		public void SaveDeployObjectData(BinaryWriter binary)
 		public void SaveDeployObjectData(BinaryWriter binary)
@@ -942,6 +943,7 @@ namespace MyRoomCustom
 			{
 			{
 				Text componentInChildren = button.GetComponentInChildren<Text>();
 				Text componentInChildren = button.GetComponentInChildren<Text>();
 				componentInChildren.text = PlacementData.GetCategoryName(<OnEnable>c__AnonStorey.categoryIDList[i]);
 				componentInChildren.text = PlacementData.GetCategoryName(<OnEnable>c__AnonStorey.categoryIDList[i]);
+				Utility.SetLocalizeTerm(componentInChildren, "SceneCreativeRoom/カテゴリー/" + <OnEnable>c__AnonStorey.categoryIDList[i].ToString());
 				button.onClick.AddListener(delegate()
 				button.onClick.AddListener(delegate()
 				{
 				{
 					Debug.LogFormat("カテゴリ「{0}」", new object[]
 					Debug.LogFormat("カテゴリ「{0}」", new object[]

+ 2 - 2
Assembly-CSharp/MyRoomCustom/CreativeRoomUISaveLoad.cs

@@ -55,7 +55,7 @@ namespace MyRoomCustom
 					{
 					{
 						return;
 						return;
 					}
 					}
-					GameMain.Instance.SysDlg.Show("上書きしますか?", SystemDialog.TYPE.OK_CANCEL, delegate
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/データを保存しますか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 					{
 					{
 						CreativeRoomManager.CreativeRoomHeader creativeRoomHeader = this.m_Manager.Save(number);
 						CreativeRoomManager.CreativeRoomHeader creativeRoomHeader = this.m_Manager.Save(number);
 						textDate.text = this.m_Manager.DateTimeParse(creativeRoomHeader.lastWriteTime);
 						textDate.text = this.m_Manager.DateTimeParse(creativeRoomHeader.lastWriteTime);
@@ -122,7 +122,7 @@ namespace MyRoomCustom
 					{
 					{
 						return;
 						return;
 					}
 					}
-					GameMain.Instance.SysDlg.Show("ロードしますか?", SystemDialog.TYPE.OK_CANCEL, delegate
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/データをロードしますか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 					{
 					{
 						this.m_Manager.Load(number);
 						this.m_Manager.Load(number);
 						GameMain.Instance.SysDlg.Close();
 						GameMain.Instance.SysDlg.Close();

+ 8 - 0
Assembly-CSharp/MyRoomCustom/PlacementData.cs

@@ -208,6 +208,14 @@ namespace MyRoomCustom
 				return result;
 				return result;
 			}
 			}
 
 
+			public string drawNameTerm
+			{
+				get
+				{
+					return "SceneCreativeRoom/オブジェクト/" + this.ID.ToString();
+				}
+			}
+
 			public readonly int ID;
 			public readonly int ID;
 
 
 			public readonly string drawName;
 			public readonly string drawName;

+ 0 - 13
Assembly-CSharp/NewBehaviourScript.cs

@@ -1,13 +0,0 @@
-using System;
-using UnityEngine;
-
-public class NewBehaviourScript : MonoBehaviour
-{
-	private void Start()
-	{
-	}
-
-	private void Update()
-	{
-	}
-}

+ 2 - 6
Assembly-CSharp/ObjectManagerWindow.cs

@@ -48,7 +48,7 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 		this.AttachPointWindow.onStateTextChangeEvent = delegate(string text)
 		this.AttachPointWindow.onStateTextChangeEvent = delegate(string text)
 		{
 		{
 			this.AttachPointStateLabel.text = text;
 			this.AttachPointStateLabel.text = text;
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				string termPrefix = string.Empty;
 				string termPrefix = string.Empty;
 				string term;
 				string term;
@@ -430,11 +430,7 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 		GameObject gameObject = Utility.CreatePrefab(parent_obj, "ScenePhotoMode/WindowListItem", true);
 		GameObject gameObject = Utility.CreatePrefab(parent_obj, "ScenePhotoMode/WindowListItem", true);
 		gameObject.name = target.guid.ToString();
 		gameObject.name = target.guid.ToString();
 		gameObject.GetComponentInChildren<UILabel>().text = target.draw_name;
 		gameObject.GetComponentInChildren<UILabel>().text = target.draw_name;
-		Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
-		if (componentInChildren != null && GameUty.supportMultiLanguage)
-		{
-			componentInChildren.SetTerm(target.nameTerm);
-		}
+		Utility.SetLocalizeTerm(gameObject.GetComponentInChildren<Localize>(), target.nameTerm);
 		UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
 		UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
 		EventDelegate.Add(component.onSelect, delegate()
 		EventDelegate.Add(component.onSelect, delegate()
 		{
 		{

+ 2 - 2
Assembly-CSharp/OnHoverTaskIcon.cs

@@ -53,7 +53,7 @@ public class OnHoverTaskIcon : MonoBehaviour
 	public void SetText(string message, int needNum = -1)
 	public void SetText(string message, int needNum = -1)
 	{
 	{
 		UISprite component = this.m_goNamePlate.GetComponent<UISprite>();
 		UISprite component = this.m_goNamePlate.GetComponent<UISprite>();
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			string text = message;
 			string text = message;
 			if (message.IndexOf('\n') != -1)
 			if (message.IndexOf('\n') != -1)
@@ -113,7 +113,7 @@ public class OnHoverTaskIcon : MonoBehaviour
 		{
 		{
 			if (this.m_goNamePlate != null)
 			if (this.m_goNamePlate != null)
 			{
 			{
-				if (GameUty.supportMultiLanguage)
+				if (Product.SPP)
 				{
 				{
 					this.SetText(this.taskName, -1);
 					this.SetText(this.taskName, -1);
 				}
 				}

+ 31 - 0
Assembly-CSharp/OtherCommandShortcut.cs

@@ -1,8 +1,10 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.Events;
 using UnityEngine.UI;
 using UnityEngine.UI;
+using wf;
 
 
 public class OtherCommandShortcut : MonoBehaviour
 public class OtherCommandShortcut : MonoBehaviour
 {
 {
@@ -91,6 +93,7 @@ public class OtherCommandShortcut : MonoBehaviour
 			{
 			{
 				itemData.text.text = "カメラ視線OFF";
 				itemData.text.text = "カメラ視線OFF";
 			}
 			}
+			itemData.SetLocalizeTerm("VAS/" + itemData.text.text);
 		}));
 		}));
 		this.CreateItemList();
 		this.CreateItemList();
 		CircleCommandUI circleCommandUI = this.circleList.circleCommandUI;
 		CircleCommandUI circleCommandUI = this.circleList.circleCommandUI;
@@ -114,6 +117,15 @@ public class OtherCommandShortcut : MonoBehaviour
 		transform.localEulerAngles = localEulerAngles;
 		transform.localEulerAngles = localEulerAngles;
 		GameObject childObject = UTY.GetChildObject(this.circleList.gameObject, "CircleCommandUI/text right hand", false);
 		GameObject childObject = UTY.GetChildObject(this.circleList.gameObject, "CircleCommandUI/text right hand", false);
 		childObject.GetComponent<Text>().text = ((!this.IsLeftHand) ? "右" : "左");
 		childObject.GetComponent<Text>().text = ((!this.IsLeftHand) ? "右" : "左");
+		Localize localize = childObject.AddComponent<Localize>();
+		if (this.IsLeftHand)
+		{
+			Utility.SetLocalizeTerm(localize, "System/左");
+		}
+		else
+		{
+			Utility.SetLocalizeTerm(localize, "System/右");
+		}
 	}
 	}
 
 
 	private void CreateItemList()
 	private void CreateItemList()
@@ -128,6 +140,7 @@ public class OtherCommandShortcut : MonoBehaviour
 			KeyValuePair<string, Action<OtherCommandShortcut.ItemData>> keyValuePair = this.m_ItemList[index];
 			KeyValuePair<string, Action<OtherCommandShortcut.ItemData>> keyValuePair = this.m_ItemList[index];
 			itemData.text.text = keyValuePair.Key;
 			itemData.text.text = keyValuePair.Key;
 			itemData.onDecide = keyValuePair.Value;
 			itemData.onDecide = keyValuePair.Value;
+			itemData.SetLocalizeTerm("VAS/" + itemData.text.text);
 		});
 		});
 	}
 	}
 
 
@@ -215,5 +228,23 @@ public class OtherCommandShortcut : MonoBehaviour
 		public Action<OtherCommandShortcut.ItemData> onDecide { get; set; }
 		public Action<OtherCommandShortcut.ItemData> onDecide { get; set; }
 
 
 		public Text text { get; set; }
 		public Text text { get; set; }
+
+		private Localize localize { get; set; }
+
+		public void SetLocalizeTerm(string key)
+		{
+			Localize localize2;
+			if (this.localize == null)
+			{
+				Localize localize = this.text.gameObject.AddComponent<Localize>();
+				this.localize = localize;
+				localize2 = localize;
+			}
+			else
+			{
+				localize2 = this.localize;
+			}
+			Utility.SetLocalizeTerm(localize2, key);
+		}
 	}
 	}
 }
 }

+ 4 - 0
Assembly-CSharp/OvrHandItemMgr.cs

@@ -50,6 +50,10 @@ public class OvrHandItemMgr : MonoBehaviour
 
 
 	public void ChangeModel(int f_nType)
 	public void ChangeModel(int f_nType)
 	{
 	{
+		if (Product.VBA)
+		{
+			f_nType = 0;
+		}
 		for (int i = 0; i < this.m_goItem.Length; i++)
 		for (int i = 0; i < this.m_goItem.Length; i++)
 		{
 		{
 			GameObject gameObject = this.m_goItem[i];
 			GameObject gameObject = this.m_goItem[i];

+ 2 - 2
Assembly-CSharp/OvrIK.cs

@@ -1568,7 +1568,7 @@ public class OvrIK : MonoBehaviour
 	{
 	{
 		public void OnBeforeSerialize()
 		public void OnBeforeSerialize()
 		{
 		{
-			this.m_nVersion = 1260;
+			this.m_nVersion = 1270;
 		}
 		}
 
 
 		public void OnAfterDeserialize()
 		public void OnAfterDeserialize()
@@ -1628,7 +1628,7 @@ public class OvrIK : MonoBehaviour
 		private const string CONF_NAME = "OvrIK.json";
 		private const string CONF_NAME = "OvrIK.json";
 
 
 		[SerializeField]
 		[SerializeField]
-		private int m_nVersion = 1260;
+		private int m_nVersion = 1270;
 
 
 		[SerializeField]
 		[SerializeField]
 		private float solver_locomotion_weight = 1f;
 		private float solver_locomotion_weight = 1f;

+ 1 - 1
Assembly-CSharp/PhotoModeSaveAndLoad.cs

@@ -450,7 +450,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 	private XElement CreateCommonData(string title, string comment)
 	private XElement CreateCommonData(string title, string comment)
 	{
 	{
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
-		XElement xelement = new XElement("GameVersion", 1260);
+		XElement xelement = new XElement("GameVersion", 1270);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);
 		XElement xelement4 = new XElement("Comment", comment);

+ 1 - 1
Assembly-CSharp/PlayerStatus/Status.cs

@@ -827,7 +827,7 @@ namespace PlayerStatus
 		public void Serialize(BinaryWriter binary)
 		public void Serialize(BinaryWriter binary)
 		{
 		{
 			binary.Write("CM3D2_PLAYER_STATUS");
 			binary.Write("CM3D2_PLAYER_STATUS");
-			binary.Write(1260);
+			binary.Write(1270);
 			binary.Write(this.playerName_);
 			binary.Write(this.playerName_);
 			binary.Write(this.days_);
 			binary.Write(this.days_);
 			binary.Write(this.totalPurchasePrice_);
 			binary.Write(this.totalPurchasePrice_);

+ 1 - 1
Assembly-CSharp/PopupAndButtonList.cs

@@ -146,7 +146,7 @@ public class PopupAndButtonList : MonoBehaviour
 			gameObject.SetActive(true);
 			gameObject.SetActive(true);
 			gameObject.name = list[k].guid.ToString();
 			gameObject.name = list[k].guid.ToString();
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
 				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
 				if (componentInChildren != null)
 				if (componentInChildren != null)

+ 1 - 1
Assembly-CSharp/PopupAndTabList.cs

@@ -169,7 +169,7 @@ public class PopupAndTabList : MonoBehaviour
 			gameObject.SetActive(true);
 			gameObject.SetActive(true);
 			gameObject.name = list[k].guid.ToString();
 			gameObject.name = list[k].guid.ToString();
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
 				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
 				if (componentInChildren != null)
 				if (componentInChildren != null)

+ 4 - 0
Assembly-CSharp/PresetCtrl.cs

@@ -220,6 +220,10 @@ public class PresetCtrl : MonoBehaviour
 		{
 		{
 			CharacterMgr.Preset preset = presetButton.preset;
 			CharacterMgr.Preset preset = presetButton.preset;
 			GameMain.Instance.CharacterMgr.PresetSet(this.m_maid, preset);
 			GameMain.Instance.CharacterMgr.PresetSet(this.m_maid, preset);
+			if (Product.VBA)
+			{
+				this.m_maid.AllProcProp();
+			}
 		}
 		}
 		else
 		else
 		{
 		{

+ 146 - 0
Assembly-CSharp/Product.cs

@@ -0,0 +1,146 @@
+using System;
+using I2.Loc;
+
+public static class Product
+{
+	public static Product.Type type { get; private set; }
+
+	public static bool SPP
+	{
+		get
+		{
+			return Product.type != Product.Type.AAA && Product.type != Product.Type.BBB;
+		}
+	}
+
+	public static bool VBA
+	{
+		get
+		{
+			return Product.type == Product.Type.BBB || Product.type == Product.Type.DDD;
+		}
+	}
+
+	public static bool PIEQ
+	{
+		get
+		{
+			return Product.type == Product.Type.AAA || Product.type == Product.Type.BBB;
+		}
+	}
+
+	public static bool SIBD
+	{
+		get
+		{
+			return Product.type == Product.Type.CCC || Product.type == Product.Type.DDD;
+		}
+	}
+
+	public static Product.Language WMZI
+	{
+		get
+		{
+			if (!Product.SPP)
+			{
+				return Product.Language.INKD;
+			}
+			string currentLanguage = LocalizationManager.CurrentLanguage;
+			return (!(currentLanguage == "English")) ? Product.Language.INKD : Product.Language.QBED;
+		}
+		set
+		{
+			if (!Product.SPP)
+			{
+				return;
+			}
+			LocalizationManager.CurrentLanguage = Product.EnumConvert.ToI2LocalizeLanguageName(value);
+		}
+	}
+
+	public static Product.Language OOWU
+	{
+		get
+		{
+			return (!Product.SPP) ? Product.Language.INKD : Product.Language.QBED;
+		}
+	}
+
+	public static string gameTitle
+	{
+		get
+		{
+			return LocalizationManager.GetTranslation("System/カスタムオーダーメイド3D 2", true, 0, true, false, null, null);
+		}
+	}
+
+	public static string gameDataPath
+	{
+		get
+		{
+			return string.Empty;
+		}
+	}
+
+	public static bool enabeldAdditionalRelation
+	{
+		get
+		{
+			return Product.type != Product.Type.AAA;
+		}
+	}
+
+	public static void Initialize(AFileSystemBase fileSystem)
+	{
+		Product.type = Product.Type.AAA;
+		Product.WMZI = Product.OOWU;
+	}
+
+	public static void OnApplicationQuit()
+	{
+	}
+
+	public enum Type
+	{
+		AAA,
+		BBB,
+		CCC,
+		DDD
+	}
+
+	public enum Language
+	{
+		INKD,
+		QBED
+	}
+
+	public static class EnumConvert
+	{
+		public static string GetString(Product.Language language)
+		{
+			if (language == Product.Language.INKD)
+			{
+				return "日本語";
+			}
+			return "英語";
+		}
+
+		public static string ToI2LocalizeLanguageName(Product.Language language)
+		{
+			if (language == Product.Language.INKD)
+			{
+				return "Japanese";
+			}
+			if (language != Product.Language.QBED)
+			{
+				return "Japanese";
+			}
+			return "English";
+		}
+
+		public static string GetTerm(Product.Language language)
+		{
+			return "System/言語/" + Product.EnumConvert.GetString(language);
+		}
+	}
+}

+ 55 - 21
Assembly-CSharp/ProfileCtrl.cs

@@ -6,6 +6,7 @@ using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using MaidStatus.CsvData;
 using MaidStatus.CsvData;
 using UnityEngine;
 using UnityEngine;
+using wf;
 using Yotogis;
 using Yotogis;
 
 
 public class ProfileCtrl : MonoBehaviour
 public class ProfileCtrl : MonoBehaviour
@@ -51,6 +52,13 @@ public class ProfileCtrl : MonoBehaviour
 			this.m_inLastName.RemoveFocus();
 			this.m_inLastName.RemoveFocus();
 			this.m_inLastName.value = MaidRandomName.GetLastName();
 			this.m_inLastName.value = MaidRandomName.GetLastName();
 		});
 		});
+		if (Product.SIBD)
+		{
+			Vector3 localPosition = this.m_inLastName.transform.localPosition;
+			Vector3 localPosition2 = this.m_inFirstName.transform.localPosition;
+			this.m_inLastName.transform.localPosition = localPosition2;
+			this.m_inFirstName.transform.localPosition = localPosition;
+		}
 		this.m_lMaidClassName = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Type", false).GetComponent<UILabel>();
 		this.m_lMaidClassName = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Type", false).GetComponent<UILabel>();
 		this.m_lMaidClassLevel = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Level", false).GetComponent<UILabel>();
 		this.m_lMaidClassLevel = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Level", false).GetComponent<UILabel>();
 		this.m_lMaidClassExp = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Exp", false).GetComponent<UILabel>();
 		this.m_lMaidClassExp = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/ProfileBase/MaidClass/Exp", false).GetComponent<UILabel>();
@@ -106,12 +114,26 @@ public class ProfileCtrl : MonoBehaviour
 			}
 			}
 		}
 		}
 		this.m_pPersonal.items.Clear();
 		this.m_pPersonal.items.Clear();
-		ProfileCtrl.m_dicPersonal = new Dictionary<string, Personal.Data>();
-		foreach (Personal.Data data2 in list)
+		if (Product.SPP)
 		{
 		{
-			string drawName = data2.drawName;
-			this.m_pPersonal.items.Add(drawName);
-			ProfileCtrl.m_dicPersonal.Add(drawName, data2);
+			this.m_pPersonal.isLocalized = true;
+			ProfileCtrl.m_dicPersonal = new Dictionary<string, Personal.Data>();
+			foreach (Personal.Data data2 in list)
+			{
+				string termName = data2.termName;
+				this.m_pPersonal.items.Add(termName);
+				ProfileCtrl.m_dicPersonal.Add(termName, data2);
+			}
+		}
+		else
+		{
+			ProfileCtrl.m_dicPersonal = new Dictionary<string, Personal.Data>();
+			foreach (Personal.Data data3 in list)
+			{
+				string drawName = data3.drawName;
+				this.m_pPersonal.items.Add(drawName);
+				ProfileCtrl.m_dicPersonal.Add(drawName, data3);
+			}
 		}
 		}
 		EventDelegate.Add(this.m_pPersonal.onChange, delegate()
 		EventDelegate.Add(this.m_pPersonal.onChange, delegate()
 		{
 		{
@@ -192,12 +214,12 @@ public class ProfileCtrl : MonoBehaviour
 			}
 			}
 		};
 		};
 		this.m_dicUpperBtn = new Dictionary<ProfileMgr.UpperButtonType, ProfileCtrl.UpperButton>();
 		this.m_dicUpperBtn = new Dictionary<ProfileMgr.UpperButtonType, ProfileCtrl.UpperButton>();
-		IEnumerator enumerator3 = Enum.GetValues(typeof(ProfileMgr.UpperButtonType)).GetEnumerator();
+		IEnumerator enumerator4 = Enum.GetValues(typeof(ProfileMgr.UpperButtonType)).GetEnumerator();
 		try
 		try
 		{
 		{
-			while (enumerator3.MoveNext())
+			while (enumerator4.MoveNext())
 			{
 			{
-				object obj = enumerator3.Current;
+				object obj = enumerator4.Current;
 				ProfileMgr.UpperButtonType upperButtonType = (ProfileMgr.UpperButtonType)obj;
 				ProfileMgr.UpperButtonType upperButtonType = (ProfileMgr.UpperButtonType)obj;
 				if (upperButtonType != ProfileMgr.UpperButtonType.None)
 				if (upperButtonType != ProfileMgr.UpperButtonType.None)
 				{
 				{
@@ -216,7 +238,7 @@ public class ProfileCtrl : MonoBehaviour
 		finally
 		finally
 		{
 		{
 			IDisposable disposable;
 			IDisposable disposable;
-			if ((disposable = (enumerator3 as IDisposable)) != null)
+			if ((disposable = (enumerator4 as IDisposable)) != null)
 			{
 			{
 				disposable.Dispose();
 				disposable.Dispose();
 			}
 			}
@@ -244,6 +266,15 @@ public class ProfileCtrl : MonoBehaviour
 		this.LoadMaidParamData();
 		this.LoadMaidParamData();
 		this.SetEnableInput(this.m_enabledInput, this.m_enabledPersonalityInput);
 		this.SetEnableInput(this.m_enabledInput, this.m_enabledPersonalityInput);
 		this.m_bInited = true;
 		this.m_bInited = true;
+		if (Product.VBA)
+		{
+			UIWFPositionStore component2 = UTY.GetChildObject(base.gameObject, "Layout_jp_public", false).GetComponent<UIWFPositionStore>();
+			if (component2 != null)
+			{
+				component2.Apply();
+			}
+			UTY.GetChildObject(base.gameObject, "UpperButton/Character", false).GetComponent<UISprite>().width = 392;
+		}
 	}
 	}
 
 
 	private void SetEnableInput(bool enabledInput, bool enabledPersonalityInput)
 	private void SetEnableInput(bool enabledInput, bool enabledPersonalityInput)
@@ -340,14 +371,8 @@ public class ProfileCtrl : MonoBehaviour
 		ClassData<JobClass.Data> selectedJobClass = this.m_maidStatus.selectedJobClass;
 		ClassData<JobClass.Data> selectedJobClass = this.m_maidStatus.selectedJobClass;
 		if (selectedJobClass != null)
 		if (selectedJobClass != null)
 		{
 		{
-			if (!GameUty.supportMultiLanguage)
-			{
-				this.m_lMaidClassName.text = selectedJobClass.data.drawName;
-			}
-			else
-			{
-				this.m_lMaidClassName.gameObject.GetComponent<Localize>().SetTerm(selectedJobClass.data.termName);
-			}
+			this.m_lMaidClassName.text = selectedJobClass.data.drawName;
+			Utility.SetLocalizeTerm(this.m_lMaidClassName, selectedJobClass.data.termName);
 			this.m_lMaidClassLevel.text = selectedJobClass.level.ToString();
 			this.m_lMaidClassLevel.text = selectedJobClass.level.ToString();
 			this.m_lMaidClassExp.text = selectedJobClass.cur_exp.ToString();
 			this.m_lMaidClassExp.text = selectedJobClass.cur_exp.ToString();
 			this.m_lMaidClassRequiredExp.text = selectedJobClass.next_exp.ToString();
 			this.m_lMaidClassRequiredExp.text = selectedJobClass.next_exp.ToString();
@@ -366,7 +391,7 @@ public class ProfileCtrl : MonoBehaviour
 		this.m_lWaist.text = this.m_maidStatus.body.waist.ToString();
 		this.m_lWaist.text = this.m_maidStatus.body.waist.ToString();
 		this.m_lHip.text = this.m_maidStatus.body.hip.ToString();
 		this.m_lHip.text = this.m_maidStatus.body.hip.ToString();
 		this.m_lCup.text = this.m_maidStatus.body.cup;
 		this.m_lCup.text = this.m_maidStatus.body.cup;
-		this.m_lRelation.GetComponent<Localize>().SetTerm(this.GetCondition(this.m_maidStatus.relation));
+		this.m_lRelation.GetComponent<Localize>().SetTerm(this.GetCondition(this.m_maidStatus.relation, this.m_maidStatus.additionalRelation));
 		this.m_lConditionText.GetComponent<UILabel>().text = this.m_maidStatus.conditionText;
 		this.m_lConditionText.GetComponent<UILabel>().text = this.m_maidStatus.conditionText;
 		this.m_lConditionText.GetComponent<Localize>().SetTerm(this.m_maidStatus.conditionTermText);
 		this.m_lConditionText.GetComponent<Localize>().SetTerm(this.m_maidStatus.conditionTermText);
 		this.m_lYotogiPlayCount.text = this.m_maidStatus.playCountYotogi.ToString();
 		this.m_lYotogiPlayCount.text = this.m_maidStatus.playCountYotogi.ToString();
@@ -473,9 +498,9 @@ public class ProfileCtrl : MonoBehaviour
 		return EnumConvert.GetTerm(contractType);
 		return EnumConvert.GetTerm(contractType);
 	}
 	}
 
 
-	private string GetCondition(Relation relation)
+	private string GetCondition(Relation relation, AdditionalRelation addRelation)
 	{
 	{
-		return EnumConvert.GetTerm(relation);
+		return EnumConvert.GetTerm(relation, addRelation);
 	}
 	}
 
 
 	private string AdjustStrLengthIfOver(string str, int length)
 	private string AdjustStrLengthIfOver(string str, int length)
@@ -603,6 +628,15 @@ public class ProfileCtrl : MonoBehaviour
 				this.SetTransformInfo(gameObject2, goParent);
 				this.SetTransformInfo(gameObject2, goParent);
 				UILabel component = UTY.GetChildObject(gameObject2, "Parameter", false).GetComponent<UILabel>();
 				UILabel component = UTY.GetChildObject(gameObject2, "Parameter", false).GetComponent<UILabel>();
 				component.text = list[i].m_parameter;
 				component.text = list[i].m_parameter;
+				Localize localize = component.gameObject.AddComponent<Localize>();
+				if (btnType == ProfileMgr.UpperButtonType.Character)
+				{
+					Utility.SetLocalizeTerm(localize, "MaidStatus/性癖タイプ/" + list[i].m_parameter);
+				}
+				else if (btnType == ProfileMgr.UpperButtonType.Propensity)
+				{
+					Utility.SetLocalizeTerm(localize, "MaidStatus/性癖タイプ/" + list[i].m_parameter);
+				}
 			}
 			}
 			this.m_goProfileLabelUnitPrefab = gameObject;
 			this.m_goProfileLabelUnitPrefab = gameObject;
 			break;
 			break;
@@ -684,7 +718,7 @@ public class ProfileCtrl : MonoBehaviour
 
 
 	private int ToPercent(int number)
 	private int ToPercent(int number)
 	{
 	{
-		return (int)Math.Floor((double)(number / 10));
+		return (int)System.Math.Floor((double)(number / 10));
 	}
 	}
 
 
 	public void OnDisable()
 	public void OnDisable()

+ 83 - 41
Assembly-CSharp/RandomPresetCtrl.cs

@@ -40,58 +40,77 @@ public class RandomPresetCtrl : MonoBehaviour
 		this.m_dicPartsTypePair = SceneEditInfo.m_dicPartsTypePair;
 		this.m_dicPartsTypePair = SceneEditInfo.m_dicPartsTypePair;
 		this.m_dicRandomPresetBtn = new Dictionary<string, RandomPresetButton>();
 		this.m_dicRandomPresetBtn = new Dictionary<string, RandomPresetButton>();
 		bool flag = false;
 		bool flag = false;
+		HashSet<int> hashSet = new HashSet<int>();
 		foreach (KeyValuePair<MPN, SceneEditInfo.CCateNameType> keyValuePair in this.m_dicPartsTypePair)
 		foreach (KeyValuePair<MPN, SceneEditInfo.CCateNameType> keyValuePair in this.m_dicPartsTypePair)
 		{
 		{
-			RandomPresetContent.MPNMapping mpnmapping;
-			if (RandomPresetContent.m_dicMPNMapping.TryGetValue(keyValuePair.Key, out mpnmapping))
+			if (!Product.VBA || (keyValuePair.Key != MPN.chikubicolor && keyValuePair.Key != MPN.underhair))
 			{
 			{
-				string str;
-				if (RandomPresetContent.m_dicCategoryMapping.TryGetValue(keyValuePair.Value.m_eMenuCate, out str))
+				RandomPresetContent.MPNMapping mpnmapping;
+				if (RandomPresetContent.m_dicMPNMapping.TryGetValue(keyValuePair.Key, out mpnmapping))
 				{
 				{
-					GameObject childObject = UTY.GetChildObject(goRandomPresetPanel, "Contents/" + str + "/Buttons/" + mpnmapping.m_buttonName, true);
-					NDebug.Assert(childObject != null, string.Concat(new string[]
+					string str;
+					if (RandomPresetContent.m_dicCategoryMapping.TryGetValue(keyValuePair.Value.m_eMenuCate, out str))
 					{
 					{
-						"ランダムプリセットのボタン[",
-						mpnmapping.m_buttonTitle,
-						"]のオブジェクト、[",
-						mpnmapping.m_buttonName,
-						"]が見つかりませんでした"
-					}));
-					UIButton component = childObject.GetComponent<UIButton>();
-					if (!flag)
-					{
-						this.activeColor = new Color(component.defaultColor.r, component.defaultColor.g, component.defaultColor.b, 1f);
-						this.inActiveColor = component.defaultColor;
-						flag = true;
-					}
-					SceneEditInfo.CCateNameType.EType eType = keyValuePair.Value.m_eType;
-					RandomPresetButton buttonByType = this.GetButtonByType(eType);
-					buttonByType.m_menuCategory = keyValuePair.Value.m_eMenuCate;
-					buttonByType.m_eButtonType = eType;
-					buttonByType.m_name = mpnmapping.m_buttonName;
-					buttonByType.m_mpn = keyValuePair.Key;
-					buttonByType.m_btnButton = component;
-					buttonByType.m_bBtnActive = false;
-					buttonByType.m_executionOrder = mpnmapping.m_executionOrder;
-					if (eType != SceneEditInfo.CCateNameType.EType.Item)
-					{
-						if (eType != SceneEditInfo.CCateNameType.EType.Slider)
+						GameObject childObject = UTY.GetChildObject(goRandomPresetPanel, "Contents/" + str + "/Buttons/" + mpnmapping.m_buttonName, true);
+						NDebug.Assert(childObject != null, string.Concat(new string[]
 						{
 						{
-							if (eType == SceneEditInfo.CCateNameType.EType.Color)
+							"ランダムプリセットのボタン[",
+							mpnmapping.m_buttonTitle,
+							"]のオブジェクト、[",
+							mpnmapping.m_buttonName,
+							"]が見つかりませんでした"
+						}));
+						UIButton component = childObject.GetComponent<UIButton>();
+						if (!flag)
+						{
+							this.activeColor = new Color(component.defaultColor.r, component.defaultColor.g, component.defaultColor.b, 1f);
+							this.inActiveColor = component.defaultColor;
+							flag = true;
+						}
+						SceneEditInfo.CCateNameType.EType eType = keyValuePair.Value.m_eType;
+						RandomPresetButton buttonByType = this.GetButtonByType(eType);
+						buttonByType.m_menuCategory = keyValuePair.Value.m_eMenuCate;
+						buttonByType.m_eButtonType = eType;
+						buttonByType.m_name = mpnmapping.m_buttonName;
+						buttonByType.m_mpn = keyValuePair.Key;
+						buttonByType.m_btnButton = component;
+						if (!hashSet.Contains(component.GetInstanceID()))
+						{
+							hashSet.Add(component.GetInstanceID());
+						}
+						buttonByType.m_bBtnActive = false;
+						buttonByType.m_executionOrder = mpnmapping.m_executionOrder;
+						if (eType != SceneEditInfo.CCateNameType.EType.Item)
+						{
+							if (eType != SceneEditInfo.CCateNameType.EType.Slider)
+							{
+								if (eType == SceneEditInfo.CCateNameType.EType.Color)
+								{
+									buttonByType.m_txtColor = UTY.GetChildObject(childObject, "Color", false).GetComponent<UITexture>();
+								}
+							}
+							else
 							{
 							{
-								buttonByType.m_txtColor = UTY.GetChildObject(childObject, "Color", false).GetComponent<UITexture>();
+								buttonByType.m_lValue = UTY.GetChildObject(childObject, "Value", false).GetComponent<UILabel>();
 							}
 							}
 						}
 						}
 						else
 						else
 						{
 						{
-							buttonByType.m_lValue = UTY.GetChildObject(childObject, "Value", false).GetComponent<UILabel>();
+							buttonByType.m_txtItem = UTY.GetChildObject(childObject, "Item", false).GetComponent<UITexture>();
 						}
 						}
+						this.m_dicRandomPresetBtn.Add(buttonByType.m_name, buttonByType);
 					}
 					}
-					else
-					{
-						buttonByType.m_txtItem = UTY.GetChildObject(childObject, "Item", false).GetComponent<UITexture>();
-					}
-					this.m_dicRandomPresetBtn.Add(buttonByType.m_name, buttonByType);
+				}
+			}
+		}
+		if (Product.VBA)
+		{
+			UIButton[] componentsInChildren = UTY.GetChildObject(goRandomPresetPanel, "Contents", false).GetComponentsInChildren<UIButton>();
+			foreach (UIButton uibutton in componentsInChildren)
+			{
+				if (!hashSet.Contains(uibutton.GetInstanceID()))
+				{
+					uibutton.transform.gameObject.SetActive(false);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -156,6 +175,21 @@ public class RandomPresetCtrl : MonoBehaviour
 		Debug.Log("データのロード処理が完了しました。");
 		Debug.Log("データのロード処理が完了しました。");
 	}
 	}
 
 
+	private void OnEnable()
+	{
+		if (!Product.VBA)
+		{
+			return;
+		}
+		foreach (UITable uitable in base.gameObject.GetComponentsInChildren<UITable>(true))
+		{
+			if (uitable != null)
+			{
+				uitable.Reposition();
+			}
+		}
+	}
+
 	private Texture2D GetTextureByRid(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn, int rid)
 	private Texture2D GetTextureByRid(SceneEditInfo.EMenuCategory eMenuCategory, MPN btnMpn, int rid)
 	{
 	{
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
@@ -376,7 +410,7 @@ public class RandomPresetCtrl : MonoBehaviour
 				}
 				}
 			}
 			}
 		}
 		}
-		maid.AllProcPropSeqStart();
+		SceneEdit.AllProcPropSeqStart(maid);
 		base.StartCoroutine(this.ExecuteAfterSetModel(maid));
 		base.StartCoroutine(this.ExecuteAfterSetModel(maid));
 	}
 	}
 
 
@@ -530,7 +564,7 @@ public class RandomPresetCtrl : MonoBehaviour
 		foreach (MPN mpn in m_listCheckRandomActive)
 		foreach (MPN mpn in m_listCheckRandomActive)
 		{
 		{
 			RandomPresetButton buttonByMPN = this.GetButtonByMPN(mpn);
 			RandomPresetButton buttonByMPN = this.GetButtonByMPN(mpn);
-			if (buttonByMPN.m_bBtnActive)
+			if (buttonByMPN != null && buttonByMPN.m_bBtnActive)
 			{
 			{
 				list.Add(mpn);
 				list.Add(mpn);
 			}
 			}
@@ -562,6 +596,10 @@ public class RandomPresetCtrl : MonoBehaviour
 	{
 	{
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
 		List<SceneEdit.SMenuItem> menuItemList = this.GetMenuItemList(btn.m_menuCategory, btn.m_mpn);
 		List<SceneEdit.SMenuItem> menuItemList = this.GetMenuItemList(btn.m_menuCategory, btn.m_mpn);
+		if (menuItemList == null)
+		{
+			return;
+		}
 		Dictionary<int, RandomPresetContent.PartMapping> dicMapping = RandomPresetContent.m_dicPriorityPartMapping;
 		Dictionary<int, RandomPresetContent.PartMapping> dicMapping = RandomPresetContent.m_dicPriorityPartMapping;
 		List<string> list = this.GetIconNameListIfPushButtonIsMappingTarget(dicMapping, btn.m_mpn, maid);
 		List<string> list = this.GetIconNameListIfPushButtonIsMappingTarget(dicMapping, btn.m_mpn, maid);
 		if (list == null)
 		if (list == null)
@@ -623,6 +661,10 @@ public class RandomPresetCtrl : MonoBehaviour
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
 		List<SceneEdit.SCategory> categoryList = this.m_sceneEdit.CategoryList;
 		MPN mpn = RandomPresetContent.m_dicColorFolderMapping[btn.m_mpn];
 		MPN mpn = RandomPresetContent.m_dicColorFolderMapping[btn.m_mpn];
 		List<SceneEdit.SMenuItem> menuItemList = this.GetMenuItemList(btn.m_menuCategory, mpn);
 		List<SceneEdit.SMenuItem> menuItemList = this.GetMenuItemList(btn.m_menuCategory, mpn);
+		if (menuItemList == null)
+		{
+			return;
+		}
 		int index = UnityEngine.Random.Range(0, menuItemList.Count);
 		int index = UnityEngine.Random.Range(0, menuItemList.Count);
 		SceneEdit.SMenuItem smenuItem = menuItemList[index];
 		SceneEdit.SMenuItem smenuItem = menuItemList[index];
 		if (smenuItem.m_boDelOnly)
 		if (smenuItem.m_boDelOnly)

+ 7 - 7
Assembly-CSharp/SaveAndLoadCtrl.cs

@@ -248,7 +248,7 @@ public class SaveAndLoadCtrl : BaseCreateViewerCtrl
 
 
 	public void SaveAndLoad(SaveAndLoadMgr.ViewType currentView, string buttonName)
 	public void SaveAndLoad(SaveAndLoadMgr.ViewType currentView, string buttonName)
 	{
 	{
-		string f_strMsg = string.Empty;
+		string messageTerm = string.Empty;
 		SystemDialog.OnClick f_dgOk = null;
 		SystemDialog.OnClick f_dgOk = null;
 		SaveAndLoadCtrl.LoadDataUnit loadDataUnit = null;
 		SaveAndLoadCtrl.LoadDataUnit loadDataUnit = null;
 		if (!this.m_dicLoadData.TryGetValue(buttonName, out loadDataUnit))
 		if (!this.m_dicLoadData.TryGetValue(buttonName, out loadDataUnit))
@@ -266,12 +266,12 @@ public class SaveAndLoadCtrl : BaseCreateViewerCtrl
 				this.m_loadDataNo = buttonName;
 				this.m_loadDataNo = buttonName;
 				if (this.kasiduki)
 				if (this.kasiduki)
 				{
 				{
-					f_strMsg = "このエンパイアクラブでゲストモードを開始しますか?";
+					messageTerm = "Dialog/このエンパイアクラブでゲストモードを開始しますか?";
 					f_dgOk = new SystemDialog.OnClick(this.LoadDataOnKasizuli);
 					f_dgOk = new SystemDialog.OnClick(this.LoadDataOnKasizuli);
 				}
 				}
 				else
 				else
 				{
 				{
-					f_strMsg = "データをロードしますか?";
+					messageTerm = "Dialog/セーブロード/データをロードしますか?";
 					f_dgOk = new SystemDialog.OnClick(this.LoadData);
 					f_dgOk = new SystemDialog.OnClick(this.LoadData);
 				}
 				}
 			}
 			}
@@ -280,16 +280,16 @@ public class SaveAndLoadCtrl : BaseCreateViewerCtrl
 		{
 		{
 			if (loadDataUnit.isEmpty)
 			if (loadDataUnit.isEmpty)
 			{
 			{
-				f_strMsg = "データを保存しますか?";
+				messageTerm = "Dialog/セーブロード/データを保存しますか?";
 			}
 			}
 			else
 			else
 			{
 			{
-				f_strMsg = "上書きして保存しますが宜しいですか?";
+				messageTerm = "Dialog/セーブロード/上書きして保存しますが宜しいですか?";
 			}
 			}
 			this.m_saveDataNo = buttonName;
 			this.m_saveDataNo = buttonName;
 			f_dgOk = new SystemDialog.OnClick(this.SaveData);
 			f_dgOk = new SystemDialog.OnClick(this.SaveData);
 		}
 		}
-		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, f_dgOk, new SystemDialog.OnClick(this.CloseDialog));
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, null, SystemDialog.TYPE.OK_CANCEL, f_dgOk, new SystemDialog.OnClick(this.CloseDialog));
 	}
 	}
 
 
 	public void SetSaveOrLoadDataActive(string buttonName)
 	public void SetSaveOrLoadDataActive(string buttonName)
@@ -335,7 +335,7 @@ public class SaveAndLoadCtrl : BaseCreateViewerCtrl
 		}
 		}
 		GameMain.Instance.Serialize(loadDataUnit.serialNo, f_strComment);
 		GameMain.Instance.Serialize(loadDataUnit.serialNo, f_strComment);
 		this.m_mgr.PageUpper();
 		this.m_mgr.PageUpper();
-		GameMain.Instance.SysDlg.Show("データが保存されました。", SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.CloseDialog), null);
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/データが保存されました。", null, SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.CloseDialog), null);
 		this.m_saveDataNo = string.Empty;
 		this.m_saveDataNo = string.Empty;
 	}
 	}
 
 

+ 111 - 8
Assembly-CSharp/ScenarioData.cs

@@ -1,4 +1,5 @@
 using System;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
@@ -15,7 +16,50 @@ public class ScenarioData
 		{
 		{
 			if (csv.IsCellToExistData(cx, cy) && !$this.m_PlayableData.ContainsKey(condition))
 			if (csv.IsCellToExistData(cx, cy) && !$this.m_PlayableData.ContainsKey(condition))
 			{
 			{
-				$this.m_PlayableData.Add(condition, new ScenarioData.PlayableData(csv.GetCellAsString(cx, cy), condition));
+				string cellAsString2 = csv.GetCellAsString(cx, cy);
+				if (condition == ScenarioData.PlayableCondition.関係 && cellAsString2.Contains(","))
+				{
+					HashSet<string> hashSet = new HashSet<string>();
+					IEnumerator enumerator = Enum.GetValues(typeof(AdditionalRelation)).GetEnumerator();
+					try
+					{
+						while (enumerator.MoveNext())
+						{
+							object obj = enumerator.Current;
+							hashSet.Add(EnumConvert.GetString((AdditionalRelation)obj));
+						}
+					}
+					finally
+					{
+						IDisposable disposable;
+						if ((disposable = (enumerator as IDisposable)) != null)
+						{
+							disposable.Dispose();
+						}
+					}
+					foreach (string text in cellAsString2.Split(new char[]
+					{
+						','
+					}))
+					{
+						string text2 = text.Trim();
+						if (hashSet.Contains(text2))
+						{
+							if (!$this.m_PlayableData.ContainsKey(ScenarioData.PlayableCondition.追加関係))
+							{
+								$this.m_PlayableData.Add(ScenarioData.PlayableCondition.追加関係, new ScenarioData.PlayableData(text2, ScenarioData.PlayableCondition.追加関係));
+							}
+						}
+						else if (!$this.m_PlayableData.ContainsKey(condition))
+						{
+							$this.m_PlayableData.Add(condition, new ScenarioData.PlayableData(text2, condition));
+						}
+					}
+				}
+				else
+				{
+					$this.m_PlayableData.Add(condition, new ScenarioData.PlayableData(cellAsString2, condition));
+				}
 			}
 			}
 		};
 		};
 		for (int i = 0; i < csv.max_cell_x; i++)
 		for (int i = 0; i < csv.max_cell_x; i++)
@@ -95,7 +139,7 @@ public class ScenarioData
 				this.Notification = csv.GetCellAsString(i, cy);
 				this.Notification = csv.GetCellAsString(i, cy);
 				break;
 				break;
 			case 22:
 			case 22:
-				this.ConditionText = csv.GetCellAsString(i, cy).Replace("\n", "&").Split(new char[]
+				this.ConditionText = csv.GetCellAsString(i, cy).Replace("\n", "&").Replace("\"", string.Empty).Split(new char[]
 				{
 				{
 					'&'
 					'&'
 				});
 				});
@@ -167,6 +211,43 @@ public class ScenarioData
 		}
 		}
 	}
 	}
 
 
+	public string TitleTerm
+	{
+		get
+		{
+			return "SceneScenarioSelect/" + this.ID.ToString() + "/タイトル";
+		}
+	}
+
+	public string EventContentTerm
+	{
+		get
+		{
+			return "SceneScenarioSelect/" + this.ID.ToString() + "/内容";
+		}
+	}
+
+	public string NotificationTerm
+	{
+		get
+		{
+			return "SceneScenarioSelect/通知時表記/" + this.Notification;
+		}
+	}
+
+	public string[] ConditionTextTerms
+	{
+		get
+		{
+			List<string> list = new List<string>();
+			foreach (string str in this.ConditionText)
+			{
+				list.Add("SceneScenarioSelect/条件文/" + str);
+			}
+			return list.ToArray();
+		}
+	}
+
 	public bool IsFixedMaid { get; private set; }
 	public bool IsFixedMaid { get; private set; }
 
 
 	public static bool operator true(ScenarioData data)
 	public static bool operator true(ScenarioData data)
@@ -367,12 +448,12 @@ public class ScenarioData
 								if (text == "移籍メイド")
 								if (text == "移籍メイド")
 								{
 								{
 									add_maid(stockMaid2);
 									add_maid(stockMaid2);
-									goto IL_43F;
+									goto IL_443;
 								}
 								}
 								if (text == "雇用移籍メイド")
 								if (text == "雇用移籍メイド")
 								{
 								{
 									action(stockMaid2, !stockMaid2.status.mainChara);
 									action(stockMaid2, !stockMaid2.status.mainChara);
-									goto IL_43F;
+									goto IL_443;
 								}
 								}
 							}
 							}
 							string convertPersonal = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
 							string convertPersonal = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
@@ -393,7 +474,7 @@ public class ScenarioData
 								action(stockMaid2, "移籍" + convertPersonal == text);
 								action(stockMaid2, "移籍" + convertPersonal == text);
 							}
 							}
 						}
 						}
-						IL_43F:;
+						IL_443:;
 					}
 					}
 					else if (stockMaid2.status.heroineType == HeroineType.Original)
 					else if (stockMaid2.status.heroineType == HeroineType.Original)
 					{
 					{
@@ -402,12 +483,12 @@ public class ScenarioData
 							if (text == "オリジナルメイド")
 							if (text == "オリジナルメイド")
 							{
 							{
 								add_maid(stockMaid2);
 								add_maid(stockMaid2);
-								goto IL_57F;
+								goto IL_583;
 							}
 							}
 							if (text == "雇用メイド")
 							if (text == "雇用メイド")
 							{
 							{
 								action(stockMaid2, !stockMaid2.status.mainChara);
 								action(stockMaid2, !stockMaid2.status.mainChara);
-								goto IL_57F;
+								goto IL_583;
 							}
 							}
 						}
 						}
 						string convertPersonal2 = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
 						string convertPersonal2 = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
@@ -428,7 +509,7 @@ public class ScenarioData
 							action(stockMaid2, convertPersonal2 == text);
 							action(stockMaid2, convertPersonal2 == text);
 						}
 						}
 					}
 					}
-					IL_57F:;
+					IL_583:;
 				}
 				}
 				break;
 				break;
 			}
 			}
@@ -561,6 +642,14 @@ public class ScenarioData
 					action(stockMaid9, EnumConvert.GetString(stockMaid9.status.relation) == text);
 					action(stockMaid9, EnumConvert.GetString(stockMaid9.status.relation) == text);
 				}
 				}
 				break;
 				break;
+			case ScenarioData.PlayableCondition.追加関係:
+				action2();
+				for (int num9 = 0; num9 < characterMgr.GetStockMaidCount(); num9++)
+				{
+					Maid stockMaid10 = characterMgr.GetStockMaid(num9);
+					action(stockMaid10, EnumConvert.GetString(stockMaid10.status.additionalRelation) == text);
+				}
+				break;
 			case ScenarioData.PlayableCondition.アイテム:
 			case ScenarioData.PlayableCondition.アイテム:
 			{
 			{
 				int facilityPowerUpMaterialID = FacilityDataTable.GetFacilityPowerUpMaterialID(text);
 				int facilityPowerUpMaterialID = FacilityDataTable.GetFacilityPowerUpMaterialID(text);
@@ -599,6 +688,17 @@ public class ScenarioData
 				}
 				}
 				break;
 				break;
 			}
 			}
+			if (maid_check)
+			{
+				if (and_operator)
+				{
+					isOk &= (this.m_EventMaid.Count > 0);
+				}
+				else
+				{
+					isOk |= (this.m_EventMaid.Count > 0);
+				}
+			}
 		}
 		}
 		return isOk;
 		return isOk;
 	}
 	}
@@ -727,6 +827,8 @@ public class ScenarioData
 		this.IsOncePlayed = false;
 		this.IsOncePlayed = false;
 	}
 	}
 
 
+	public const string TermPrefixNotification = "SceneScenarioSelect/通知時表記/";
+
 	private static string[] m_MainMaidList = new string[]
 	private static string[] m_MainMaidList = new string[]
 	{
 	{
 		"無垢",
 		"無垢",
@@ -778,6 +880,7 @@ public class ScenarioData
 		ジョブクラス,
 		ジョブクラス,
 		夜伽クラス,
 		夜伽クラス,
 		関係,
 		関係,
+		追加関係,
 		アイテム,
 		アイテム,
 		施設,
 		施設,
 		NTRブロック,
 		NTRブロック,

+ 9 - 0
Assembly-CSharp/ScenarioSelectMgr.cs

@@ -141,6 +141,15 @@ public class ScenarioSelectMgr
 		return string.Empty;
 		return string.Empty;
 	}
 	}
 
 
+	public string GetConvertPersonalTerm(Maid maid)
+	{
+		if (this.m_PersonalConvertData.ContainsKey(maid.status.personal.uniqueName))
+		{
+			return "SceneScenarioSelect/性格名/" + this.m_PersonalConvertData[maid.status.personal.uniqueName];
+		}
+		return string.Empty;
+	}
+
 	public void Serialize(BinaryWriter writer)
 	public void Serialize(BinaryWriter writer)
 	{
 	{
 		writer.Write("COM3D2_SCENARIO_SELECT");
 		writer.Write("COM3D2_SCENARIO_SELECT");

+ 10 - 5
Assembly-CSharp/SceneCasino.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using MaidStatus;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.UI;
@@ -32,7 +33,7 @@ public class SceneCasino : KasaSceneMgr<SceneCasino>
 				select_dialog.Close();
 				select_dialog.Close();
 				GameMain.Instance.MainCamera.FadeOut(0.5f, false, new CameraMain.dgOnCompleteFade(this.Init), false, default(Color));
 				GameMain.Instance.MainCamera.FadeOut(0.5f, false, new CameraMain.dgOnCompleteFade(this.Init), false, default(Color));
 			};
 			};
-			select_dialog.Show("どちらのカジノでプレイしますか?", CasinoDataMgr.Instance.GetCasinoFacility(true).facilityName, delegate
+			select_dialog.Show(LocalizationManager.GetTranslation("SceneCasino/ダイアログ/どちらのカジノでプレイしますか?", true, 0, true, false, null, null), CasinoDataMgr.Instance.GetCasinoFacility(true).facilityName, delegate
 			{
 			{
 				select_casino(true);
 				select_casino(true);
 			}, CasinoDataMgr.Instance.GetCasinoFacility(false).facilityName, delegate
 			}, CasinoDataMgr.Instance.GetCasinoFacility(false).facilityName, delegate
@@ -246,8 +247,10 @@ public class SceneCasino : KasaSceneMgr<SceneCasino>
 		case SceneCasino.CasinoMenu.Blackjack:
 		case SceneCasino.CasinoMenu.Blackjack:
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 100L)
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 100L)
 			{
 			{
-				string f_strMsg = string.Format("ブラックジャックをするには最低でも\nコインが{0:#,##0}枚必用です", 100);
-				GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/ブラックジャックをするには最低でもコインが{0}枚必用で", new string[]
+				{
+					string.Format("{0:#,##0}", 100)
+				}, SystemDialog.TYPE.OK, null, null);
 			}
 			}
 			else
 			else
 			{
 			{
@@ -258,8 +261,10 @@ public class SceneCasino : KasaSceneMgr<SceneCasino>
 		case SceneCasino.CasinoMenu.Slot:
 		case SceneCasino.CasinoMenu.Slot:
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 300L)
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 300L)
 			{
 			{
-				string f_strMsg2 = string.Format("スロットをするには最低でも\nコインが{0:#,##0}枚必用です", 300);
-				GameMain.Instance.SysDlg.Show(f_strMsg2, SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/スロットをするには最低でもコインが{0}枚必用です", new string[]
+				{
+					string.Format("{0:#,##0}", 300)
+				}, SystemDialog.TYPE.OK, null, null);
 			}
 			}
 			else
 			else
 			{
 			{

+ 28 - 5
Assembly-CSharp/SceneCasinoShop.cs

@@ -2,6 +2,7 @@
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
+using I2.Loc;
 using PlayerStatus;
 using PlayerStatus;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
@@ -45,6 +46,16 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 		this.m_InfoData.Icon = this.m_ItemInfoUI.transform.Find("Base/Icon").GetComponent<UI2DSprite>();
 		this.m_InfoData.Icon = this.m_ItemInfoUI.transform.Find("Base/Icon").GetComponent<UI2DSprite>();
 		this.m_InfoData.InfoLabel = this.m_ItemInfoUI.transform.Find("Base/Info").GetComponent<UILabel>();
 		this.m_InfoData.InfoLabel = this.m_ItemInfoUI.transform.Find("Base/Info").GetComponent<UILabel>();
 		this.m_InfoData.Namelabel = this.m_ItemInfoUI.transform.Find("Base/Title").GetComponent<UILabel>();
 		this.m_InfoData.Namelabel = this.m_ItemInfoUI.transform.Find("Base/Title").GetComponent<UILabel>();
+		Localize component = this.m_InfoData.InfoLabel.GetComponent<Localize>();
+		if (component == null)
+		{
+			this.m_InfoData.InfoLabel.gameObject.AddComponent<Localize>();
+		}
+		component = this.m_InfoData.Namelabel.GetComponent<Localize>();
+		if (component == null)
+		{
+			this.m_InfoData.Namelabel.gameObject.AddComponent<Localize>();
+		}
 		NDebug.Assert(GameMain.Instance.ScriptMgr.adv_kag.tag_backup.ContainsKey("label"), "OK時のラベルが未指定です");
 		NDebug.Assert(GameMain.Instance.ScriptMgr.adv_kag.tag_backup.ContainsKey("label"), "OK時のラベルが未指定です");
 		this.m_JumpLabel = GameMain.Instance.ScriptMgr.adv_kag.tag_backup["label"];
 		this.m_JumpLabel = GameMain.Instance.ScriptMgr.adv_kag.tag_backup["label"];
 		EventDelegate.Add(this.m_TrywearButton.onClick, new EventDelegate.Callback(this.TryWear));
 		EventDelegate.Add(this.m_TrywearButton.onClick, new EventDelegate.Callback(this.TryWear));
@@ -117,6 +128,7 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 			GameObject gameObject = Utility.CreatePrefab(this.m_CategoryUI.Grid.gameObject, "SceneCasinoShop/Prefab/CategoryUI", true);
 			GameObject gameObject = Utility.CreatePrefab(this.m_CategoryUI.Grid.gameObject, "SceneCasinoShop/Prefab/CategoryUI", true);
 			UILabel componentInChildren = gameObject.GetComponentInChildren<UILabel>();
 			UILabel componentInChildren = gameObject.GetComponentInChildren<UILabel>();
 			componentInChildren.text = ((category != CasinoShopItem.Category.Costume) ? "施設強化素材" : "コスチューム");
 			componentInChildren.text = ((category != CasinoShopItem.Category.Costume) ? "施設強化素材" : "コスチューム");
+			Utility.SetLocalizeTerm(componentInChildren, (category != CasinoShopItem.Category.Costume) ? "SceneShop/メインカテゴリー/施設強化素材" : "SceneEdit/カテゴリー/サブ/コスチューム");
 			UIWFTabButton componentInChildren2 = gameObject.GetComponentInChildren<UIWFTabButton>();
 			UIWFTabButton componentInChildren2 = gameObject.GetComponentInChildren<UIWFTabButton>();
 			this.m_ButtonCategoryPair.Add(componentInChildren2, category);
 			this.m_ButtonCategoryPair.Add(componentInChildren2, category);
 			EventDelegate.Add(componentInChildren2.onSelect, new EventDelegate.Callback(this.SelectCategory));
 			EventDelegate.Add(componentInChildren2.onSelect, new EventDelegate.Callback(this.SelectCategory));
@@ -188,7 +200,7 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 			}
 			}
 		}
 		}
 		this.m_TrywearMaid.body0.SetMaskMode(TBody.MaskMode.None);
 		this.m_TrywearMaid.body0.SetMaskMode(TBody.MaskMode.None);
-		this.m_TrywearMaid.AllProcPropSeqStart();
+		SceneEdit.AllProcPropSeqStart(this.m_TrywearMaid);
 		if (costume_type != Facility.CostumeType.Heroine)
 		if (costume_type != Facility.CostumeType.Heroine)
 		{
 		{
 			Action end_call = delegate()
 			Action end_call = delegate()
@@ -204,7 +216,7 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 				{
 				{
 					CasinoDataMgr.Instance.CurrentCasino.UpdateMaidCostumeToDefaultCostume(this.m_TrywearMaid);
 					CasinoDataMgr.Instance.CurrentCasino.UpdateMaidCostumeToDefaultCostume(this.m_TrywearMaid);
 				}
 				}
-				this.m_TrywearMaid.AllProcPropSeqStart();
+				SceneEdit.AllProcPropSeqStart(this.m_TrywearMaid);
 				this.StartCoroutine(KasaiUtility.CharaLoadWait(load_end));
 				this.StartCoroutine(KasaiUtility.CharaLoadWait(load_end));
 			};
 			};
 			base.StartCoroutine(KasaiUtility.CharaLoadWait(end_call));
 			base.StartCoroutine(KasaiUtility.CharaLoadWait(end_call));
@@ -245,7 +257,7 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 		Action action = delegate()
 		Action action = delegate()
 		{
 		{
 			this.m_TrywearItem.TryWear(this.m_TrywearMaid);
 			this.m_TrywearItem.TryWear(this.m_TrywearMaid);
-			this.m_TrywearMaid.AllProcPropSeqStart();
+			SceneEdit.AllProcPropSeqStart(this.m_TrywearMaid);
 			this.m_TrycancelButton.isEnabled = true;
 			this.m_TrycancelButton.isEnabled = true;
 		};
 		};
 		if (typeCostume == Facility.CostumeType.Heroine)
 		if (typeCostume == Facility.CostumeType.Heroine)
@@ -254,7 +266,7 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 		}
 		}
 		else
 		else
 		{
 		{
-			this.m_TrywearMaid.AllProcPropSeqStart();
+			SceneEdit.AllProcPropSeqStart(this.m_TrywearMaid);
 			base.StartCoroutine(KasaiUtility.CharaLoadWait(action));
 			base.StartCoroutine(KasaiUtility.CharaLoadWait(action));
 		}
 		}
 	}
 	}
@@ -310,7 +322,16 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 		status.casinoCoin -= (long)item_data.Price;
 		status.casinoCoin -= (long)item_data.Price;
 		item_data.ItemBuy();
 		item_data.ItemBuy();
 		this.UpdateUIState();
 		this.UpdateUIState();
-		GameMain.Instance.SysDlg.Show(item_data.Name + "を購入しました", SystemDialog.TYPE.OK, null, null);
+		string messageTerm = "SceneCasino/ダイアログ/{0}を購入しました";
+		string[] array = new string[]
+		{
+			item_data.Name
+		};
+		if (Product.SPP)
+		{
+			array[0] = LocalizationManager.GetTranslation(item_data.NameTerm, true, 0, true, false, null, null);
+		}
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, array, SystemDialog.TYPE.OK, null, null);
 	}
 	}
 
 
 	public void SetTrywearItem(CasinoShopItem item_data)
 	public void SetTrywearItem(CasinoShopItem item_data)
@@ -338,7 +359,9 @@ public class SceneCasinoShop : KasaSceneMgr<SceneCasinoShop>
 		this.m_InfoData.UIobj.SetActive(true);
 		this.m_InfoData.UIobj.SetActive(true);
 		this.m_InfoData.Icon.sprite2D = item_data.Icon;
 		this.m_InfoData.Icon.sprite2D = item_data.Icon;
 		this.m_InfoData.InfoLabel.text = item_data.Document;
 		this.m_InfoData.InfoLabel.text = item_data.Document;
+		Utility.SetLocalizeTerm(this.m_InfoData.InfoLabel, item_data.DocumentTerm);
 		this.m_InfoData.Namelabel.text = item_data.Name;
 		this.m_InfoData.Namelabel.text = item_data.Name;
+		Utility.SetLocalizeTerm(this.m_InfoData.Namelabel, item_data.NameTerm);
 		int num = Mathf.FloorToInt(this.m_ScrollPanel.height / this.m_ShopItemUI.Grid.cellHeight + 0.5f);
 		int num = Mathf.FloorToInt(this.m_ScrollPanel.height / this.m_ShopItemUI.Grid.cellHeight + 0.5f);
 		int num2 = CasinoDataMgr.Instance.GetShopItem(item_data.MyCategory).Count - num;
 		int num2 = CasinoDataMgr.Instance.GetShopItem(item_data.MyCategory).Count - num;
 		int num3 = num + Mathf.FloorToInt((float)num2 * this.m_ShopItemUI.ScrollView.verticalScrollBar.value) - 1;
 		int num3 = num + Mathf.FloorToInt((float)num2 * this.m_ShopItemUI.ScrollView.verticalScrollBar.value) - 1;

+ 5 - 2
Assembly-CSharp/SceneCasinoSlot.cs

@@ -79,8 +79,11 @@ public class SceneCasinoSlot : MonoBehaviour
 		{
 		{
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 300L)
 			if (GameMain.Instance.CharacterMgr.status.casinoCoin < 300L)
 			{
 			{
-				string f_strMsg = string.Format("スロットをするには最低でも\nコインが{0:#,##0}枚必用です", 300);
-				GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+				string messageTerm = "SceneCasino/ダイアログ/スロットをするには最低でもコインが必用です";
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm(messageTerm, new string[]
+				{
+					string.Format("{0:#,##0}", 300)
+				}, SystemDialog.TYPE.OK, null, null);
 				return;
 				return;
 			}
 			}
 			if (this.sManager.state == 1)
 			if (this.sManager.state == 1)

+ 63 - 28
Assembly-CSharp/SceneEdit.cs

@@ -25,6 +25,26 @@ public class SceneEdit : MonoBehaviour
 		}
 		}
 	}
 	}
 
 
+	public static void AllProcPropSeqStart(Maid maid)
+	{
+		if (maid == null)
+		{
+			return;
+		}
+		if (Product.VBA)
+		{
+			maid.AllProcProp();
+			if (SceneEdit.Instance != null)
+			{
+				SceneEdit.Instance.updateCustomViewFlag = true;
+			}
+		}
+		else
+		{
+			maid.AllProcPropSeqStart();
+		}
+	}
+
 	public CustomViewWindow customViewWindow { get; private set; }
 	public CustomViewWindow customViewWindow { get; private set; }
 
 
 	public PoseIconWindow pauseIconWindow { get; private set; }
 	public PoseIconWindow pauseIconWindow { get; private set; }
@@ -424,7 +444,7 @@ public class SceneEdit : MonoBehaviour
 		this.m_dicColor.Clear();
 		this.m_dicColor.Clear();
 		base.StartCoroutine(this.InitMenuNative());
 		base.StartCoroutine(this.InitMenuNative());
 		GameMain.Instance.TutorialPanel.SetImage(TutorialPanel.ImageSet.Edit, false);
 		GameMain.Instance.TutorialPanel.SetImage(TutorialPanel.ImageSet.Edit, false);
-		if (PluginData.IsEnabled("GP001"))
+		if (PluginData.IsEnabled("GP001") || Product.type == Product.Type.BBB)
 		{
 		{
 			uGUITutorialPanel.OpenTutorial("SceneEditGP01", null, false);
 			uGUITutorialPanel.OpenTutorial("SceneEditGP01", null, false);
 			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneEditGP01";
 			GameMain.Instance.SysShortcut.strSceneHelpName = "SceneEditGP01";
@@ -1515,7 +1535,7 @@ public class SceneEdit : MonoBehaviour
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		{
 		{
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
-			if (MPN.EarNone > spartsType.m_mpn || spartsType.m_mpn > MPN.EarScl || PluginData.IsEnabled("GP001"))
+			if (MPN.EarNone > spartsType.m_mpn || spartsType.m_mpn > MPN.EarScl || PluginData.IsEnabled("GP001") || Product.type == Product.Type.BBB)
 			{
 			{
 				UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/ButtonCate");
 				UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/ButtonCate");
 				GameObject gameObject = NGUITools.AddChild(this.m_Panel_PartsType.goGrid, @object as GameObject);
 				GameObject gameObject = NGUITools.AddChild(this.m_Panel_PartsType.goGrid, @object as GameObject);
@@ -1687,32 +1707,35 @@ public class SceneEdit : MonoBehaviour
 			{
 			{
 				if (!smenuItem2.m_requestNewFace || this.isNewFace)
 				if (!smenuItem2.m_requestNewFace || this.isNewFace)
 				{
 				{
-					SceneEdit.SliderItemSet sliderItemSet2;
-					if (smenuItem2.m_mpn == MPN.EarNone)
+					if (!Product.VBA || smenuItem2.m_mpn != MPN.MuneYawaraka)
 					{
 					{
-						SceneEdit.SwitchItemSet switchItemSet = new SceneEdit.SwitchItemSet();
-						switchItemSet.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
-						switchItemSet.onClickEvent = delegate(bool earNone, SceneEdit.SMenuItem menu)
+						SceneEdit.SliderItemSet sliderItemSet2;
+						if (smenuItem2.m_mpn == MPN.EarNone)
 						{
 						{
-							int num2 = (!earNone) ? 0 : 1;
-							MaidProp prop = this.maid.GetProp(menu.m_strCateName);
-							if (prop.value != num2)
+							SceneEdit.SwitchItemSet switchItemSet = new SceneEdit.SwitchItemSet();
+							switchItemSet.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+							switchItemSet.onClickEvent = delegate(bool earNone, SceneEdit.SMenuItem menu)
 							{
 							{
-								this.maid.SetProp(menu.m_strCateName, num2, false);
-								this.UpdateSliders();
-								this.maid.AllProcPropSeqStart();
-							}
-						};
-						sliderItemSet2 = switchItemSet;
-					}
-					else
-					{
-						sliderItemSet2 = new SceneEdit.SliderItemSet();
-						sliderItemSet2.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
-						EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
-						flag2 |= (smenuItem2.m_mpn == MPN.MuneYawaraka);
+								int num2 = (!earNone) ? 0 : 1;
+								MaidProp prop = this.maid.GetProp(menu.m_strCateName);
+								if (prop.value != num2)
+								{
+									this.maid.SetProp(menu.m_strCateName, num2, false);
+									this.UpdateSliders();
+									SceneEdit.AllProcPropSeqStart(this.maid);
+								}
+							};
+							sliderItemSet2 = switchItemSet;
+						}
+						else
+						{
+							sliderItemSet2 = new SceneEdit.SliderItemSet();
+							sliderItemSet2.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+							EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
+							flag2 |= (smenuItem2.m_mpn == MPN.MuneYawaraka);
+						}
+						this.m_listSliderItem.Add(sliderItemSet2);
 					}
 					}
-					this.m_listSliderItem.Add(sliderItemSet2);
 				}
 				}
 			}
 			}
 			BaseMgr<BodyStatusMgr>.Instance.OpenPanel(flag2);
 			BaseMgr<BodyStatusMgr>.Instance.OpenPanel(flag2);
@@ -2414,7 +2437,7 @@ public class SceneEdit : MonoBehaviour
 					}
 					}
 				}
 				}
 			}
 			}
-			maid.AllProcPropSeqStart();
+			SceneEdit.AllProcPropSeqStart(maid);
 			if (componentInChildren.m_MenuItem.m_bColor)
 			if (componentInChildren.m_MenuItem.m_bColor)
 			{
 			{
 				this.UpdateSelected_ColorSet(componentInChildren.m_MenuItem.m_mpn);
 				this.UpdateSelected_ColorSet(componentInChildren.m_MenuItem.m_mpn);
@@ -2698,7 +2721,7 @@ public class SceneEdit : MonoBehaviour
 				string text = CM3.dicDelItem[MPN.accmimi];
 				string text = CM3.dicDelItem[MPN.accmimi];
 				int hashCode = text.ToLower().GetHashCode();
 				int hashCode = text.ToLower().GetHashCode();
 				this.maid.SetProp(MPN.accmimi, text, hashCode, false, false);
 				this.maid.SetProp(MPN.accmimi, text, hashCode, false, false);
-				this.m_maid.AllProcPropSeqStart();
+				SceneEdit.AllProcPropSeqStart(this.m_maid);
 				return;
 				return;
 			}
 			}
 		}
 		}
@@ -3340,7 +3363,13 @@ public class SceneEdit : MonoBehaviour
 		{
 		{
 			get
 			get
 			{
 			{
-				return this.m_strMenuName;
+				if (Product.WMZI == Product.Language.INKD)
+				{
+					return this.m_strMenuName;
+				}
+				string str = this.m_strCateName + "/" + Path.GetFileNameWithoutExtension(this.m_strMenuFileName).ToLower();
+				string translation = LocalizationManager.GetTranslation(str + "|name", true, 0, true, false, null, null);
+				return (!string.IsNullOrEmpty(translation)) ? translation.Replace("《改行》", "\n") : this.m_strMenuName;
 			}
 			}
 		}
 		}
 
 
@@ -3348,7 +3377,13 @@ public class SceneEdit : MonoBehaviour
 		{
 		{
 			get
 			get
 			{
 			{
-				return this.m_strInfo;
+				if (Product.WMZI == Product.Language.INKD)
+				{
+					return this.m_strInfo;
+				}
+				string str = this.m_strCateName + "/" + Path.GetFileNameWithoutExtension(this.m_strMenuFileName).ToLower();
+				string translation = LocalizationManager.GetTranslation(str + "|info", true, 0, true, false, null, null);
+				return (!string.IsNullOrEmpty(translation)) ? translation.Replace("《改行》", "\n") : this.m_strInfo;
 			}
 			}
 		}
 		}
 
 

+ 14 - 14
Assembly-CSharp/SceneEditInfo.cs

@@ -76,22 +76,22 @@ public static class SceneEditInfo
 									ccateNameType.m_strBtnPartsTypeName = array[1];
 									ccateNameType.m_strBtnPartsTypeName = array[1];
 								}
 								}
 								bool flag = csvParser.GetCellAsString(num++, i) == "×";
 								bool flag = csvParser.GetCellAsString(num++, i) == "×";
-								if (flag)
+								if (!flag || !Product.VBA)
 								{
 								{
+									ccateNameType.m_requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
+									NDebug.Assert(!SceneEditInfo.dicPartsTypePair_.ContainsKey(key), "MPN[" + key.ToString() + "]が重複しています");
+									if (!dictionary.ContainsKey(ccateNameType.m_eMenuCate))
+									{
+										dictionary.Add(ccateNameType.m_eMenuCate, 0);
+									}
+									SceneEditInfo.CCateNameType ccateNameType2 = ccateNameType;
+									Dictionary<SceneEditInfo.EMenuCategory, int> dictionary2;
+									SceneEditInfo.EMenuCategory eMenuCate;
+									int nIdx;
+									(dictionary2 = dictionary)[eMenuCate = ccateNameType.m_eMenuCate] = (nIdx = dictionary2[eMenuCate]) + 1;
+									ccateNameType2.m_nIdx = nIdx;
+									SceneEditInfo.dicPartsTypePair_.Add(key, ccateNameType);
 								}
 								}
-								ccateNameType.m_requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
-								NDebug.Assert(!SceneEditInfo.dicPartsTypePair_.ContainsKey(key), "MPN[" + key.ToString() + "]が重複しています");
-								if (!dictionary.ContainsKey(ccateNameType.m_eMenuCate))
-								{
-									dictionary.Add(ccateNameType.m_eMenuCate, 0);
-								}
-								SceneEditInfo.CCateNameType ccateNameType2 = ccateNameType;
-								Dictionary<SceneEditInfo.EMenuCategory, int> dictionary2;
-								SceneEditInfo.EMenuCategory eMenuCate;
-								int nIdx;
-								(dictionary2 = dictionary)[eMenuCate = ccateNameType.m_eMenuCate] = (nIdx = dictionary2[eMenuCate]) + 1;
-								ccateNameType2.m_nIdx = nIdx;
-								SceneEditInfo.dicPartsTypePair_.Add(key, ccateNameType);
 							}
 							}
 						}
 						}
 					}
 					}

+ 7 - 0
Assembly-CSharp/SceneEditNameSettingPanel.cs

@@ -14,6 +14,13 @@ public class SceneEditNameSettingPanel : MonoBehaviour
 
 
 	public void Awake()
 	public void Awake()
 	{
 	{
+		if (Product.SIBD)
+		{
+			Vector3 localPosition = this.lastNameInput.transform.parent.localPosition;
+			Vector3 localPosition2 = this.firstNameInput.transform.parent.localPosition;
+			this.lastNameInput.transform.parent.localPosition = localPosition2;
+			this.firstNameInput.transform.parent.localPosition = localPosition;
+		}
 		this.fadeBasic = base.GetComponent<WfFadeBasic>();
 		this.fadeBasic = base.GetComponent<WfFadeBasic>();
 		EventDelegate.Add(this.lastNameInput.onChange, new EventDelegate.Callback(this.OnInputName));
 		EventDelegate.Add(this.lastNameInput.onChange, new EventDelegate.Callback(this.OnInputName));
 		EventDelegate.Add(this.firstNameInput.onChange, new EventDelegate.Callback(this.OnInputName));
 		EventDelegate.Add(this.firstNameInput.onChange, new EventDelegate.Callback(this.OnInputName));

+ 15 - 5
Assembly-CSharp/SceneEditWindow/UndressWindow.cs

@@ -19,14 +19,24 @@ namespace SceneEditWindow
 		public override void Awake()
 		public override void Awake()
 		{
 		{
 			base.Awake();
 			base.Awake();
+			bool vba = Product.VBA;
+			if (vba)
+			{
+				this.WindowSize.x = 203f;
+				base.ResizeWindow();
+			}
 			for (int i = 0; i < UndressWindow.IconTexFileNames.Length; i++)
 			for (int i = 0; i < UndressWindow.IconTexFileNames.Length; i++)
 			{
 			{
-				UIWFTabButton uiwftabButton = this.CreateItemObject(this.itemGrit.gameObject, UndressWindow.IconTexFileNames[i]);
-				uiwftabButton.name = i.ToString();
-				EventDelegate.Add(uiwftabButton.onClick, delegate()
+				UndressWindow.UndressType undressType = (UndressWindow.UndressType)i;
+				if (undressType != UndressWindow.UndressType.Nude || !vba)
 				{
 				{
-					this.OnClickItem((UndressWindow.UndressType)int.Parse(UIButton.current.name));
-				});
+					UIWFTabButton uiwftabButton = this.CreateItemObject(this.itemGrit.gameObject, UndressWindow.IconTexFileNames[i]);
+					uiwftabButton.name = i.ToString();
+					EventDelegate.Add(uiwftabButton.onClick, delegate()
+					{
+						this.OnClickItem((UndressWindow.UndressType)int.Parse(UIButton.current.name));
+					});
+				}
 			}
 			}
 			this.UpdateChildren();
 			this.UpdateChildren();
 		}
 		}

+ 6 - 0
Assembly-CSharp/SceneFreeModeSelectManager.cs

@@ -123,6 +123,12 @@ public class SceneFreeModeSelectManager : WfScreenManager
 				childObject2.gameObject.SetActive(false);
 				childObject2.gameObject.SetActive(false);
 			}
 			}
 		}
 		}
+		if (Product.VBA)
+		{
+			childObject3.SetActive(false);
+			childObject4.SetActive(false);
+			childObject5.SetActive(false);
+		}
 		component.Reposition();
 		component.Reposition();
 	}
 	}
 
 

+ 11 - 0
Assembly-CSharp/SceneLogo.cs

@@ -6,6 +6,11 @@ public class SceneLogo : MonoBehaviour
 {
 {
 	private void Start()
 	private void Start()
 	{
 	{
+		if (Product.type == Product.Type.BBB)
+		{
+			this.kissLogo.SetActive(false);
+			this.scortLogo.SetActive(true);
+		}
 		GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
 		GameMain.Instance.MainCamera.FadeOut(0f, false, null, true, default(Color));
 		if (GameMain.Instance.VRMode)
 		if (GameMain.Instance.VRMode)
 		{
 		{
@@ -134,6 +139,12 @@ public class SceneLogo : MonoBehaviour
 		return NInput.GetMouseButtonUp(0) || NInput.GetMouseButtonUp(1) || NInput.GetMouseButtonUp(2) || Input.GetKeyUp(KeyCode.Return) || GameMain.Instance.IsForceSkip();
 		return NInput.GetMouseButtonUp(0) || NInput.GetMouseButtonUp(1) || NInput.GetMouseButtonUp(2) || Input.GetKeyUp(KeyCode.Return) || GameMain.Instance.IsForceSkip();
 	}
 	}
 
 
+	[SerializeField]
+	private GameObject kissLogo;
+
+	[SerializeField]
+	private GameObject scortLogo;
+
 	private SceneLogo.Mode m_eMode;
 	private SceneLogo.Mode m_eMode;
 
 
 	private GUIStyle m_guiStyle;
 	private GUIStyle m_guiStyle;

+ 1 - 1
Assembly-CSharp/SceneNPCEdit/SaveData.cs

@@ -10,7 +10,7 @@ namespace SceneNPCEdit
 		public static void Serialize(BinaryWriter binary)
 		public static void Serialize(BinaryWriter binary)
 		{
 		{
 			binary.Write("CM3D2_NPCEDIT");
 			binary.Write("CM3D2_NPCEDIT");
-			binary.Write(1260);
+			binary.Write(1270);
 			binary.Write(SaveData.presetData.Count);
 			binary.Write(SaveData.presetData.Count);
 			foreach (KeyValuePair<int, byte[]> keyValuePair in SaveData.presetData)
 			foreach (KeyValuePair<int, byte[]> keyValuePair in SaveData.presetData)
 			{
 			{

+ 6 - 1
Assembly-CSharp/SceneScenarioSelect.cs

@@ -94,6 +94,8 @@ public class SceneScenarioSelect : MonoBehaviour
 		}
 		}
 		this.m_CurrentScenario = this.m_ScenarioButtonpair[(UIWFTabButton)UIWFSelectButton.current];
 		this.m_CurrentScenario = this.m_ScenarioButtonpair[(UIWFTabButton)UIWFSelectButton.current];
 		this.m_ContentsLabel.text = this.m_CurrentScenario.EventContents;
 		this.m_ContentsLabel.text = this.m_CurrentScenario.EventContents;
+		Utility.SetLocalizeTerm(this.m_ContentsLabel, this.m_CurrentScenario.EventContentTerm);
+		string[] conditionTextTerms = this.m_CurrentScenario.ConditionTextTerms;
 		for (int i = 0; i < this.m_PlayableTextUIList.Count; i++)
 		for (int i = 0; i < this.m_PlayableTextUIList.Count; i++)
 		{
 		{
 			GameObject gameObject = this.m_PlayableTextUIList[i].transform.parent.gameObject;
 			GameObject gameObject = this.m_PlayableTextUIList[i].transform.parent.gameObject;
@@ -105,6 +107,7 @@ public class SceneScenarioSelect : MonoBehaviour
 				{
 				{
 					gameObject.SetActive(true);
 					gameObject.SetActive(true);
 					this.m_PlayableTextUIList[i].text = text;
 					this.m_PlayableTextUIList[i].text = text;
+					Utility.SetLocalizeTerm(this.m_PlayableTextUIList[i], conditionTextTerms[i]);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -171,7 +174,9 @@ public class SceneScenarioSelect : MonoBehaviour
 			if (scenarioData.IsPlayable)
 			if (scenarioData.IsPlayable)
 			{
 			{
 				GameObject gameObject = Utility.CreatePrefab(this.m_ScenarioScroll.Grid.gameObject, "SceneScenarioSelect/Prefab/ScenarioPlate", true);
 				GameObject gameObject = Utility.CreatePrefab(this.m_ScenarioScroll.Grid.gameObject, "SceneScenarioSelect/Prefab/ScenarioPlate", true);
-				UTY.GetChildObject(gameObject, "Title", false).GetComponent<UILabel>().text = scenarioData.Title;
+				UILabel component = UTY.GetChildObject(gameObject, "Title", false).GetComponent<UILabel>();
+				component.text = scenarioData.Title;
+				Utility.SetLocalizeTerm(component, scenarioData.TitleTerm);
 				gameObject.name = scenarioData.NotLineTitle;
 				gameObject.name = scenarioData.NotLineTitle;
 				UTY.GetChildObject(gameObject, "Icon", false).GetComponent<UI2DSprite>().sprite2D = Resources.Load<Sprite>("SceneScenarioSelect/Sprite/" + scenarioData.IconName);
 				UTY.GetChildObject(gameObject, "Icon", false).GetComponent<UI2DSprite>().sprite2D = Resources.Load<Sprite>("SceneScenarioSelect/Sprite/" + scenarioData.IconName);
 				UIWFTabButton componentInChildren = gameObject.GetComponentInChildren<UIWFTabButton>();
 				UIWFTabButton componentInChildren = gameObject.GetComponentInChildren<UIWFTabButton>();

+ 15 - 3
Assembly-CSharp/SceneWarning.cs

@@ -5,9 +5,10 @@ public class SceneWarning : MonoBehaviour
 {
 {
 	private void Awake()
 	private void Awake()
 	{
 	{
-		string name = "Warning";
-		GameObject gameObject = GameObject.Find("UI Root");
-		gameObject.transform.Find(name).gameObject.SetActive(true);
+		foreach (SceneWarning.WarningSet warningSet in this.wirningSet)
+		{
+			warningSet.displayObject.SetActive(warningSet.type == Product.type);
+		}
 	}
 	}
 
 
 	private void Start()
 	private void Start()
@@ -59,6 +60,17 @@ public class SceneWarning : MonoBehaviour
 
 
 	private SceneWarning.Mode m_eMode;
 	private SceneWarning.Mode m_eMode;
 
 
+	[SerializeField]
+	private SceneWarning.WarningSet[] wirningSet;
+
+	[Serializable]
+	private struct WarningSet
+	{
+		public Product.Type type;
+
+		public GameObject displayObject;
+	}
+
 	private enum Mode
 	private enum Mode
 	{
 	{
 		FadeIn,
 		FadeIn,

+ 5 - 0
Assembly-CSharp/Schedule/ResultYotogiTask.cs

@@ -60,6 +60,11 @@ namespace Schedule
 					this.successLv = ScheduleData.WorkSuccessLv.Miss;
 					this.successLv = ScheduleData.WorkSuccessLv.Miss;
 					this.commonSuccessLv = this.successLv;
 					this.commonSuccessLv = this.successLv;
 				}
 				}
+				if (Product.VBA && ScheduleCSVData.YotogiData[base.id].yotogiType == ScheduleCSVData.YotogiType.HaveSex)
+				{
+					this.successLvName = "CM3D2_work_result_mark_seikou";
+					this.commonSuccessLv = (this.successLv = ScheduleData.WorkSuccessLv.Success);
+				}
 				this.successLv_icon = base.slot.textureBank.GetTexture(this.successLvName);
 				this.successLv_icon = base.slot.textureBank.GetTexture(this.successLvName);
 				this.commonSuccessLv = this.successLv;
 				this.commonSuccessLv = this.successLv;
 			}
 			}

+ 4 - 0
Assembly-CSharp/Schedule/ScheduleCSVData.cs

@@ -1042,6 +1042,10 @@ namespace Schedule
 					if (cellAsInteger2 > 0)
 					if (cellAsInteger2 > 0)
 					{
 					{
 						dataDic[data.id][cellAsInteger] = cellAsInteger2;
 						dataDic[data.id][cellAsInteger] = cellAsInteger2;
+						if (Product.VBA)
+						{
+							dataDic[data.id][cellAsInteger] = 10003;
+						}
 					}
 					}
 					num++;
 					num++;
 				}
 				}

+ 2 - 2
Assembly-CSharp/ScheduleCtrl.cs

@@ -322,7 +322,7 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 			component4.text = null;
 			component4.text = null;
 		}
 		}
 		UILabel component5 = UTY.GetChildObject(childObject, "ContractType/Value", false).GetComponent<UILabel>();
 		UILabel component5 = UTY.GetChildObject(childObject, "ContractType/Value", false).GetComponent<UILabel>();
-		if (GameUty.supportMultiLanguage && unit != null)
+		if (Product.SPP && unit != null)
 		{
 		{
 			Vector3 localPosition = component5.transform.localPosition;
 			Vector3 localPosition = component5.transform.localPosition;
 			component5.transform.localPosition = new Vector3(180f, localPosition.y, localPosition.z);
 			component5.transform.localPosition = new Vector3(180f, localPosition.y, localPosition.z);
@@ -616,7 +616,7 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 		this.m_scheduleApi = scheduleApi;
 		this.m_scheduleApi = scheduleApi;
 		string maidName = this.GetMaidName(buttonName);
 		string maidName = this.GetMaidName(buttonName);
 		this.m_deleteSlotNo = ScheduleCtrl.GetSlotByButtonName(buttonName).slotNo;
 		this.m_deleteSlotNo = ScheduleCtrl.GetSlotByButtonName(buttonName).slotNo;
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/スケジュールから削除して宜しいですか。", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeleteMaidAndReDraw), null);
 			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/スケジュールから削除して宜しいですか。", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeleteMaidAndReDraw), null);
 		}
 		}

+ 14 - 17
Assembly-CSharp/ScheduleMaidStatusUnit.cs

@@ -2,6 +2,7 @@
 using I2.Loc;
 using I2.Loc;
 using PlayerStatus;
 using PlayerStatus;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class ScheduleMaidStatusUnit : MonoBehaviour
 public class ScheduleMaidStatusUnit : MonoBehaviour
 {
 {
@@ -113,7 +114,7 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 			if (maidAssignedFacility != null)
 			if (maidAssignedFacility != null)
 			{
 			{
 				int facilityIndex = GameMain.Instance.FacilityMgr.GetFacilityIndex(maidAssignedFacility);
 				int facilityIndex = GameMain.Instance.FacilityMgr.GetFacilityIndex(maidAssignedFacility);
-				if (GameUty.supportMultiLanguage)
+				if (Product.SPP)
 				{
 				{
 					string translation = LocalizationManager.GetTranslation("SceneFacilityManagement/施設名/" + maidAssignedFacility.facilityName, true, 0, true, false, null, null);
 					string translation = LocalizationManager.GetTranslation("SceneFacilityManagement/施設名/" + maidAssignedFacility.facilityName, true, 0, true, false, null, null);
 					text = string.Concat(new string[]
 					text = string.Concat(new string[]
@@ -379,24 +380,20 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 			UILabel component = gameObject.GetComponent<UILabel>();
 			UILabel component = gameObject.GetComponent<UILabel>();
 			UILabel component2 = UTY.GetChildObject(gameObject, "Value", false).GetComponent<UILabel>();
 			UILabel component2 = UTY.GetChildObject(gameObject, "Value", false).GetComponent<UILabel>();
 			component.text = name;
 			component.text = name;
-			Localize component3 = component.GetComponent<Localize>();
-			if (GameUty.supportMultiLanguage && component3 != null)
+			string text = name.Replace("\u3000", string.Empty);
+			if (text.IndexOf("取得資金") != -1 || text.IndexOf("ジョブメイド経験値") != -1 || text.IndexOf("取得客評価") != -1)
 			{
 			{
-				string text = name.Replace("\u3000", string.Empty);
-				if (text.IndexOf("取得資金") != -1 || text.IndexOf("ジョブメイド経験値") != -1 || text.IndexOf("取得客評価") != -1)
-				{
-					text = "SceneDaily/" + text;
-				}
-				else if (text.IndexOf("収入アップ") != -1 || text.IndexOf("評価アップ") != -1 || text.IndexOf("施設EXPアップ") != -1)
-				{
-					text = "SceneFacilityManagement/パラメータ単/" + text;
-				}
-				else
-				{
-					text = "MaidStatus/" + text;
-				}
-				component3.SetTerm(text);
+				text = "SceneDaily/" + text;
+			}
+			else if (text.IndexOf("収入アップ") != -1 || text.IndexOf("評価アップ") != -1 || text.IndexOf("施設EXPアップ") != -1)
+			{
+				text = "SceneFacilityManagement/パラメータ単/" + text;
+			}
+			else
+			{
+				text = "MaidStatus/" + text;
 			}
 			}
+			Utility.SetLocalizeTerm(component, text);
 			if (money)
 			if (money)
 			{
 			{
 				component2.text = "+ " + this.ValueToMoney(value);
 				component2.text = "+ " + this.ValueToMoney(value);

+ 3 - 1
Assembly-CSharp/ScreenTrophyMain.cs

@@ -23,7 +23,9 @@ public class ScreenTrophyMain : WfScreenChildren
 		{
 		{
 			GameObject gameObject2 = Utility.CreatePrefab(parent, "SceneShop/Prefab/CategoryButton", true);
 			GameObject gameObject2 = Utility.CreatePrefab(parent, "SceneShop/Prefab/CategoryButton", true);
 			gameObject2.name = name;
 			gameObject2.name = name;
-			UTY.GetChildObject(gameObject2, "Label", false).GetComponent<UILabel>().text = gameObject2.name;
+			UILabel component = UTY.GetChildObject(gameObject2, "Label", false).GetComponent<UILabel>();
+			component.text = gameObject2.name;
+			Utility.SetLocalizeTerm(component, "SceneTrophy/タイプ/" + name);
 			return UTY.GetChildObject(gameObject2, "Button", false).GetComponent<UIButton>();
 			return UTY.GetChildObject(gameObject2, "Button", false).GetComponent<UIButton>();
 		};
 		};
 		List<Trophy.Data> allDatas = Trophy.GetAllDatas(true);
 		List<Trophy.Data> allDatas = Trophy.GetAllDatas(true);

+ 27 - 1
Assembly-CSharp/ScriptManager.cs

@@ -358,6 +358,7 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("GetGameMode", new TJSScript.FunctionCallBack(this.TJSFuncGetGameMode));
 		this.tjs_.AddFunction("GetGameMode", new TJSScript.FunctionCallBack(this.TJSFuncGetGameMode));
 		this.tjs_.AddFunction("IsLifeMode", new TJSScript.FunctionCallBack(this.TJSFuncIsLifeMode));
 		this.tjs_.AddFunction("IsLifeMode", new TJSScript.FunctionCallBack(this.TJSFuncIsLifeMode));
 		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
 		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
+		this.tjs_.AddFunction("IsEnabeldAdditionalRelation", new TJSScript.FunctionCallBack(this.TJSFuncIsEnabeldAdditionalRelation));
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		motionKagManager.Initialize();
 		motionKagManager.Initialize();
 		motionKagManager.SetSloatNo(0);
 		motionKagManager.SetSloatNo(0);
@@ -874,6 +875,10 @@ public class ScriptManager : IDisposable
 		{
 		{
 			result.SetString(EnumConvert.GetString(status.relation));
 			result.SetString(EnumConvert.GetString(status.relation));
 		}
 		}
+		else if (a == "追加関係")
+		{
+			result.SetString(EnumConvert.GetString(status.additionalRelation));
+		}
 		else if (a == "旧関係")
 		else if (a == "旧関係")
 		{
 		{
 			if (status.OldStatus != null)
 			if (status.OldStatus != null)
@@ -2218,6 +2223,18 @@ public class ScriptManager : IDisposable
 		{
 		{
 			maid.status.relation = MaidStatus.Relation.Lover;
 			maid.status.relation = MaidStatus.Relation.Lover;
 		}
 		}
+		else if (a == "警戒")
+		{
+			maid.status.additionalRelation = AdditionalRelation.Vigilance;
+		}
+		else if (a == "恋人plus")
+		{
+			maid.status.additionalRelation = AdditionalRelation.LoverPlus;
+		}
+		else if (a == "追加関係null")
+		{
+			maid.status.additionalRelation = AdditionalRelation.Null;
+		}
 	}
 	}
 
 
 	private void TJSFuncSetSeikeikenFront(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	private void TJSFuncSetSeikeikenFront(TJSVariantRef[] tjs_param, TJSVariantRef result)
@@ -2953,6 +2970,15 @@ public class ScriptManager : IDisposable
 		GameMain.Instance.CharacterMgr.status.lockNTRPlay = tjs_param[0].AsBool();
 		GameMain.Instance.CharacterMgr.status.lockNTRPlay = tjs_param[0].AsBool();
 	}
 	}
 
 
+	public void TJSFuncIsEnabeldAdditionalRelation(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result == null)
+		{
+			return;
+		}
+		result.SetBool(Product.enabeldAdditionalRelation);
+	}
+
 	public void TJSFuncGetRemainingDanceTime(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	public void TJSFuncGetRemainingDanceTime(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 	{
 		if (result == null)
 		if (result == null)
@@ -3072,7 +3098,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	public void Serialize(BinaryWriter binary)
 	{
 	{
 		binary.Write("CM3D2_SCRIPT");
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1260);
+		binary.Write(1270);
 		this.adv_kag_.Serialize(binary);
 		this.adv_kag_.Serialize(binary);
 	}
 	}
 
 

+ 4 - 8
Assembly-CSharp/ShopItem.cs

@@ -43,11 +43,7 @@ public class ShopItem : MonoBehaviour
 		EventDelegate.Add(component.onHoverOver, new EventDelegate.Callback(this.OnHoverOver));
 		EventDelegate.Add(component.onHoverOver, new EventDelegate.Callback(this.OnHoverOver));
 		EventDelegate.Add(component.onHoverOut, new EventDelegate.Callback(this.OnHoverOut));
 		EventDelegate.Add(component.onHoverOut, new EventDelegate.Callback(this.OnHoverOut));
 		this.name_label_.text = this.item_data_.name;
 		this.name_label_.text = this.item_data_.name;
-		Localize component2 = this.name_label_.GetComponent<Localize>();
-		if (GameUty.supportMultiLanguage && component2 != null)
-		{
-			component2.SetTerm("SceneShop/" + this.item_data_.id + "/名前");
-		}
+		Utility.SetLocalizeTerm(this.name_label_, "SceneShop/" + this.item_data_.id + "/名前");
 		this.price_label_.text = Utility.ConvertMoneyText(this.item_data_.price);
 		this.price_label_.text = Utility.ConvertMoneyText(this.item_data_.price);
 		this.LoadIconImage(this.item_data_.icon_file);
 		this.LoadIconImage(this.item_data_.icon_file);
 		this.UpdateItemData();
 		this.UpdateItemData();
@@ -149,7 +145,7 @@ public class ShopItem : MonoBehaviour
 			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/資金が不足しています。", null, SystemDialog.TYPE.OK, null, null);
 			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/資金が不足しています。", null, SystemDialog.TYPE.OK, null, null);
 			return;
 			return;
 		}
 		}
-		string text = GameUty.supportMultiLanguage ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
+		string text = Product.SPP ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
 		string[] args = new string[]
 		string[] args = new string[]
 		{
 		{
 			text,
 			text,
@@ -164,7 +160,7 @@ public class ShopItem : MonoBehaviour
 		{
 		{
 			this.click_event_(this);
 			this.click_event_(this);
 		}
 		}
-		string text = GameUty.supportMultiLanguage ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
+		string text = Product.SPP ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
 		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/{0}を購入しました", new string[]
 		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/{0}を購入しました", new string[]
 		{
 		{
 			text
 			text
@@ -176,7 +172,7 @@ public class ShopItem : MonoBehaviour
 		Vector3 position = base.transform.position;
 		Vector3 position = base.transform.position;
 		string f_strTitle = this.item_data_.name;
 		string f_strTitle = this.item_data_.name;
 		string f_strInfo = this.item_data_.detail_text;
 		string f_strInfo = this.item_data_.detail_text;
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			f_strTitle = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null);
 			f_strTitle = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null);
 			f_strInfo = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/説明", true, 0, true, false, null, null);
 			f_strInfo = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/説明", true, 0, true, false, null, null);

+ 1 - 1
Assembly-CSharp/SlotUImgr.cs

@@ -51,7 +51,7 @@ public class SlotUImgr : MonoBehaviour
 
 
 	public void PushEnd()
 	public void PushEnd()
 	{
 	{
-		GameMain.Instance.SysDlg.Show("カジノ画面に戻ります", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(SceneCasinoSlot.Instance.SlotEnd), null);
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("SceneCasino/ダイアログ/カジノ画面に戻ります", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(SceneCasinoSlot.Instance.SlotEnd), null);
 	}
 	}
 
 
 	[SerializeField]
 	[SerializeField]

+ 17 - 35
Assembly-CSharp/StatusCtrl.cs

@@ -1,6 +1,5 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using wf;
 using wf;
 
 
@@ -10,6 +9,16 @@ public class StatusCtrl : MonoBehaviour
 	{
 	{
 		this.m_mgr = statusMgr;
 		this.m_mgr = statusMgr;
 		this.m_goPanel = goStatusPanel;
 		this.m_goPanel = goStatusPanel;
+		if (Product.VBA)
+		{
+			UIWFPositionStore component = base.GetComponent<UIWFPositionStore>();
+			if (component != null)
+			{
+				component.Apply();
+			}
+			UTY.GetChildObject(base.gameObject, "Parameter/Frame", false).GetComponent<UISprite>().height = 485;
+			UTY.GetChildObject(base.gameObject, "BG", false).GetComponent<UISprite>().height = 664;
+		}
 	}
 	}
 
 
 	private void InitViewer()
 	private void InitViewer()
@@ -175,40 +184,13 @@ public class StatusCtrl : MonoBehaviour
 		this.m_lAcquisitionOfClientEvaluation.text = ((status.acquisitionOfClientEvaluation >= 0L) ? status.acquisitionOfClientEvaluation.ToString() : "-");
 		this.m_lAcquisitionOfClientEvaluation.text = ((status.acquisitionOfClientEvaluation >= 0L) ? status.acquisitionOfClientEvaluation.ToString() : "-");
 		this.m_lAcquisitionOfWorkingFunds.text = ((status.acquisitionOfWorkingFunds >= 0L) ? status.acquisitionOfWorkingFunds.ToString("#,0") : "-");
 		this.m_lAcquisitionOfWorkingFunds.text = ((status.acquisitionOfWorkingFunds >= 0L) ? status.acquisitionOfWorkingFunds.ToString("#,0") : "-");
 		this.m_lDaysOfEmployment.text = status.daysOfEmployment.ToString();
 		this.m_lDaysOfEmployment.text = status.daysOfEmployment.ToString();
-		if (GameUty.supportMultiLanguage)
-		{
-			Localize component = this.m_lContractType.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.contractTypeTerm);
-			}
-			component = this.m_lPersonal.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.personalTerm);
-			}
-			component = this.m_lSexualExperience.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.sexualExperienceTerm);
-			}
-			component = this.m_lMaidClass.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.maidClassNameTerm);
-			}
-			component = this.m_lRelation.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.relationTerm);
-			}
-			component = this.m_lConditionText.GetComponent<Localize>();
-			if (component != null)
-			{
-				component.SetTerm(status.conditionTextTerm);
-			}
-		}
-		else
+		Utility.SetLocalizeTerm(this.m_lContractType, status.contractTypeTerm);
+		Utility.SetLocalizeTerm(this.m_lPersonal, status.personalTerm);
+		Utility.SetLocalizeTerm(this.m_lSexualExperience, status.sexualExperienceTerm);
+		Utility.SetLocalizeTerm(this.m_lMaidClass, status.maidClassNameTerm);
+		Utility.SetLocalizeTerm(this.m_lRelation, status.relationTerm);
+		Utility.SetLocalizeTerm(this.m_lConditionText, status.conditionTextTerm);
+		if (!Product.SPP)
 		{
 		{
 			UTY.GetChildObject(this.m_goPanel, "DaysOfEmployment/Title", false).GetComponent<UILabel>().text = "雇用日数";
 			UTY.GetChildObject(this.m_goPanel, "DaysOfEmployment/Title", false).GetComponent<UILabel>().text = "雇用日数";
 		}
 		}

+ 3 - 2
Assembly-CSharp/StatusMgr.cs

@@ -103,8 +103,8 @@ public class StatusMgr : BaseCreatePanel
 		status.mValue = this.m_maid.status.mvalue;
 		status.mValue = this.m_maid.status.mvalue;
 		status.hentai = this.m_maid.status.hentai;
 		status.hentai = this.m_maid.status.hentai;
 		status.housi = this.m_maid.status.housi;
 		status.housi = this.m_maid.status.housi;
-		status.relation = EnumConvert.GetString(this.m_maid.status.relation);
-		status.relationTerm = EnumConvert.GetTerm(this.m_maid.status.relation);
+		status.relation = EnumConvert.GetString(this.m_maid.status.relation, this.m_maid.status.additionalRelation);
+		status.relationTerm = EnumConvert.GetTerm(this.m_maid.status.relation, this.m_maid.status.additionalRelation);
 		if (this.m_maid.status.OldStatus != null)
 		if (this.m_maid.status.OldStatus != null)
 		{
 		{
 			if (this.m_maid.status.OldStatus.isMarriage)
 			if (this.m_maid.status.OldStatus.isMarriage)
@@ -115,6 +115,7 @@ public class StatusMgr : BaseCreatePanel
 			{
 			{
 				status.relation = "新妻";
 				status.relation = "新妻";
 			}
 			}
+			status.relationTerm = string.Empty;
 		}
 		}
 		status.conditionText = this.m_maid.status.conditionText;
 		status.conditionText = this.m_maid.status.conditionText;
 		status.conditionTextTerm = this.m_maid.status.conditionTermText;
 		status.conditionTextTerm = this.m_maid.status.conditionTermText;

+ 22 - 14
Assembly-CSharp/SubtitleDisplayManager.cs

@@ -24,29 +24,35 @@ public class SubtitleDisplayManager : MonoBehaviour
 		}
 		}
 	}
 	}
 
 
-	public string charaNameText
+	public KeyValuePair<string, string> charaNameText
 	{
 	{
 		get
 		get
 		{
 		{
-			return this.charaNameText_;
+			return new KeyValuePair<string, string>(this.charaNameText_, this.translatedCharaNameText_);
 		}
 		}
 		set
 		set
 		{
 		{
 			this.Awake();
 			this.Awake();
-			if (this.charaNameText_ == value)
+			this.charaNameText_ = ((!string.IsNullOrEmpty(value.Key)) ? value.Key : string.Empty);
+			this.translatedCharaNameText_ = ((!string.IsNullOrEmpty(value.Value)) ? value.Value : this.charaNameText_);
+			string text = this.charaNameText_;
+			if (!string.IsNullOrEmpty(this.translatedCharaNameText_) && this.displayType_ != SubtitleDisplayManager.DisplayType.Original && (this.displayType_ != SubtitleDisplayManager.DisplayType.None || this.hideTypeOverRide != SubtitleDisplayManager.DisplayType.Original))
 			{
 			{
-				return;
+				text = this.translatedCharaNameText_;
+				if ((this.translatedCharaNameText_ != this.charaNameText_ && this.displayType_ == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle) || (this.displayType_ == SubtitleDisplayManager.DisplayType.None && this.hideTypeOverRide == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle))
+				{
+					text = this.translatedCharaNameText_ + " / " + this.charaNameText_;
+				}
 			}
 			}
-			this.charaNameText_ = ((!string.IsNullOrEmpty(value)) ? value : string.Empty);
 			if (this.charaNameUILabel != null)
 			if (this.charaNameUILabel != null)
 			{
 			{
-				this.charaNameUILabel.text = this.charaNameText_;
-				this.charaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(this.charaNameText_));
+				this.charaNameUILabel.text = text;
+				this.charaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(text));
 			}
 			}
 			if (this.singleCharaNameUILabel != null)
 			if (this.singleCharaNameUILabel != null)
 			{
 			{
-				this.singleCharaNameUILabel.text = this.charaNameText_;
-				this.singleCharaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(this.charaNameText_));
+				this.singleCharaNameUILabel.text = text;
+				this.singleCharaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(text));
 			}
 			}
 		}
 		}
 	}
 	}
@@ -137,6 +143,7 @@ public class SubtitleDisplayManager : MonoBehaviour
 				this.singleUILabel.spacingX = uilabel2.spacingX;
 				this.singleUILabel.spacingX = uilabel2.spacingX;
 				this.singleUILabel.spacingY = uilabel2.spacingY;
 				this.singleUILabel.spacingY = uilabel2.spacingY;
 			}
 			}
+			this.charaNameText = this.charaNameText;
 		}
 		}
 	}
 	}
 
 
@@ -182,11 +189,10 @@ public class SubtitleDisplayManager : MonoBehaviour
 			return;
 			return;
 		}
 		}
 		this.callAwake = true;
 		this.callAwake = true;
-		string text = string.Empty;
-		this.charaNameText = text;
-		text = text;
-		this.subtitlesText = text;
-		this.originalText = text;
+		string empty = string.Empty;
+		this.subtitlesText = empty;
+		this.originalText = empty;
+		this.charaNameText = new KeyValuePair<string, string>(string.Empty, string.Empty);
 		this.displayType = SubtitleDisplayManager.configDisplayType;
 		this.displayType = SubtitleDisplayManager.configDisplayType;
 		this.messageBgAlpha = SubtitleDisplayManager.configMessageAlpha;
 		this.messageBgAlpha = SubtitleDisplayManager.configMessageAlpha;
 	}
 	}
@@ -260,6 +266,8 @@ public class SubtitleDisplayManager : MonoBehaviour
 
 
 	private string charaNameText_;
 	private string charaNameText_;
 
 
+	private string translatedCharaNameText_;
+
 	private string originalText_;
 	private string originalText_;
 
 
 	private string subtitlesText_;
 	private string subtitlesText_;

+ 9 - 9
Assembly-CSharp/SystemShortcut.cs

@@ -231,11 +231,11 @@ public class SystemShortcut : MonoBehaviour
 		{
 		{
 			return;
 			return;
 		}
 		}
-		string text = "カスタムオーダーメイド3D 2";
-		string text2 = "カスタムメイド3D 2";
-		string text3 = string.Concat(new string[]
+		string gameTitle = Product.gameTitle;
+		string text = "カスタムメイド3D 2";
+		string text2 = string.Concat(new string[]
 		{
 		{
-			text,
+			gameTitle,
 			"\nVersion ",
 			"\nVersion ",
 			GameUty.GetGameVersionText(),
 			GameUty.GetGameVersionText(),
 			" (BuildVersion : ",
 			" (BuildVersion : ",
@@ -244,17 +244,17 @@ public class SystemShortcut : MonoBehaviour
 		});
 		});
 		if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path))
 		if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path))
 		{
 		{
-			string text4 = text3;
-			text3 = string.Concat(new string[]
+			string text3 = text2;
+			text2 = string.Concat(new string[]
 			{
 			{
-				text4,
+				text3,
 				"\n",
 				"\n",
-				text2,
+				text,
 				"\nVersion ",
 				"\nVersion ",
 				GameUty.GetLegacyGameVersionText()
 				GameUty.GetLegacyGameVersionText()
 			});
 			});
 		}
 		}
-		GameMain.Instance.SysDlg.Show(text3, SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.OnCancel), null);
+		GameMain.Instance.SysDlg.Show(text2, SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.OnCancel), null);
 		this.BaseClose();
 		this.BaseClose();
 	}
 	}
 
 

+ 27 - 1
Assembly-CSharp/TBody.cs

@@ -359,7 +359,11 @@ public class TBody : MonoBehaviour
 		if (this.boMAN)
 		if (this.boMAN)
 		{
 		{
 			this.trManChinko = CMT.SearchObjName(this.m_trBones, "chinkoCenter", true);
 			this.trManChinko = CMT.SearchObjName(this.m_trBones, "chinkoCenter", true);
-			this.vecChinkoOffset = this.trManChinko.transform.localPosition;
+			if (this.trManChinko != null)
+			{
+				this.vecChinkoOffset = this.trManChinko.transform.localPosition;
+				this.trManChinko1 = this.trManChinko.Find("chinko1");
+			}
 		}
 		}
 		this.Uppertwist_L = CMT.SearchObjName(this.m_trBones, "Uppertwist_L", true);
 		this.Uppertwist_L = CMT.SearchObjName(this.m_trBones, "Uppertwist_L", true);
 		this.Uppertwist1_L = CMT.SearchObjName(this.m_trBones, "Uppertwist1_L", true);
 		this.Uppertwist1_L = CMT.SearchObjName(this.m_trBones, "Uppertwist1_L", true);
@@ -1493,7 +1497,15 @@ public class TBody : MonoBehaviour
 
 
 	public void SetMaskMode(TBody.MaskMode f_eMode)
 	public void SetMaskMode(TBody.MaskMode f_eMode)
 	{
 	{
+		if (Product.VBA && f_eMode == TBody.MaskMode.Nude)
+		{
+			f_eMode = TBody.MaskMode.Underwear;
+		}
 		this.m_eMaskMode = f_eMode;
 		this.m_eMaskMode = f_eMode;
+		if (Product.VBA && f_eMode == TBody.MaskMode.Nude)
+		{
+			this.m_eMaskMode = TBody.MaskMode.None;
+		}
 		for (int i = 0; i < this.goSlot.Count; i++)
 		for (int i = 0; i < this.goSlot.Count; i++)
 		{
 		{
 			this.m_hFoceHide[(TBody.SlotID)i] = true;
 			this.m_hFoceHide[(TBody.SlotID)i] = true;
@@ -1616,6 +1628,12 @@ public class TBody : MonoBehaviour
 		this.boVisible_WEAR = (this.goSlot[(int)TBody.hashSlotName["wear"]].RID != 0 & this.goSlot[(int)TBody.hashSlotName["wear"]].boVisible);
 		this.boVisible_WEAR = (this.goSlot[(int)TBody.hashSlotName["wear"]].RID != 0 & this.goSlot[(int)TBody.hashSlotName["wear"]].boVisible);
 		this.boMizugi_panz = this.goSlot[(int)TBody.hashSlotName["panz"]].boMizugi;
 		this.boMizugi_panz = this.goSlot[(int)TBody.hashSlotName["panz"]].boMizugi;
 		this.slotno_accXXX = (int)TBody.hashSlotName["accXXX"];
 		this.slotno_accXXX = (int)TBody.hashSlotName["accXXX"];
+		if (Product.VBA)
+		{
+			this.goSlot[(int)TBody.hashSlotName["chikubi"]].boVisible = false;
+			this.goSlot[(int)TBody.hashSlotName["underhair"]].boVisible = false;
+			this.goSlot[(int)TBody.hashSlotName["moza"]].boVisible = false;
+		}
 	}
 	}
 
 
 	public void FixVisibleFlag(bool f_bNonPartsLook = false)
 	public void FixVisibleFlag(bool f_bNonPartsLook = false)
@@ -1701,6 +1719,10 @@ public class TBody : MonoBehaviour
 
 
 	public void SetChinkoVisible(bool f_bVisible)
 	public void SetChinkoVisible(bool f_bVisible)
 	{
 	{
+		if (Product.VBA)
+		{
+			f_bVisible = false;
+		}
 		Vector3 localScale = (!f_bVisible) ? Vector3.zero : Vector3.one;
 		Vector3 localScale = (!f_bVisible) ? Vector3.zero : Vector3.one;
 		for (int i = 0; i < this.goSlot.Count; i++)
 		for (int i = 0; i < this.goSlot.Count; i++)
 		{
 		{
@@ -3213,6 +3235,8 @@ public class TBody : MonoBehaviour
 
 
 	public Vector3 vecChinkoOffset = default(Vector3);
 	public Vector3 vecChinkoOffset = default(Vector3);
 
 
+	public Transform trManChinko1;
+
 	public GameObject goMoza;
 	public GameObject goMoza;
 
 
 	public GameObject goMozaANL;
 	public GameObject goMozaANL;
@@ -3576,6 +3600,8 @@ public class TBody : MonoBehaviour
 
 
 	private bool m_bNoHandR;
 	private bool m_bNoHandR;
 
 
+	public GameObject m_chinkoTargetObj;
+
 	public float fDegPer = 31.1f;
 	public float fDegPer = 31.1f;
 
 
 	public float fDegPer1 = 0.2f;
 	public float fDegPer1 = 0.2f;

+ 11 - 0
Assembly-CSharp/TBodySkin.cs

@@ -37,6 +37,8 @@ public class TBodySkin
 		}
 		}
 	}
 	}
 
 
+	public KupaCtrl kupaCtrl { get; private set; }
+
 	public void DeleteObj()
 	public void DeleteObj()
 	{
 	{
 		this.m_ParentMPN = MPN.null_mpn;
 		this.m_ParentMPN = MPN.null_mpn;
@@ -90,6 +92,7 @@ public class TBodySkin
 		this.m_mp = null;
 		this.m_mp = null;
 		this.m_bHitFloorY = true;
 		this.m_bHitFloorY = true;
 		this.m_partsVersion = 0;
 		this.m_partsVersion = 0;
+		this.kupaCtrl = null;
 	}
 	}
 
 
 	public void NewParamSet(string A)
 	public void NewParamSet(string A)
@@ -499,6 +502,10 @@ public class TBodySkin
 			}
 			}
 		}
 		}
 		this.morph.InitGameObject(gameObject);
 		this.morph.InitGameObject(gameObject);
+		if (Product.SIBD && !Product.VBA && mpn == MPN.body)
+		{
+			this.kupaCtrl = new KupaCtrl(this.body, this.morph);
+		}
 		gameObject.transform.parent = CMT.SearchObjName(srcbody, bonename, true);
 		gameObject.transform.parent = CMT.SearchObjName(srcbody, bonename, true);
 		Vector3 localPosition = gameObject.transform.localPosition;
 		Vector3 localPosition = gameObject.transform.localPosition;
 		Vector3 localScale3 = gameObject.transform.localScale;
 		Vector3 localScale3 = gameObject.transform.localScale;
@@ -918,6 +925,10 @@ public class TBodySkin
 				this.AttachVisible = false;
 				this.AttachVisible = false;
 			}
 			}
 		}
 		}
+		if (this.kupaCtrl != null)
+		{
+			this.kupaCtrl.SelfUpdate();
+		}
 		Vector3 localScale = this.m_trMaid.localScale;
 		Vector3 localScale = this.m_trMaid.localScale;
 		Vector3 localScale2 = this.m_trMaidOffs.localScale;
 		Vector3 localScale2 = this.m_trMaidOffs.localScale;
 		if (localScale.x < 0.998f || 1.002f < localScale.x || localScale2.x < 0.998f || 1.002f < localScale2.x)
 		if (localScale.x < 0.998f || 1.002f < localScale.x || localScale2.x < 0.998f || 1.002f < localScale2.x)

+ 2 - 2
Assembly-CSharp/TaskUnit.cs

@@ -215,7 +215,7 @@ public class TaskUnit : MonoBehaviour
 		UTY.GetChildObject(obj, "ExpRatio", false).SetActive(active);
 		UTY.GetChildObject(obj, "ExpRatio", false).SetActive(active);
 		Transform transform = UTY.GetChildObject(obj, "Title", false).transform;
 		Transform transform = UTY.GetChildObject(obj, "Title", false).transform;
 		Vector3 localPosition = transform.localPosition;
 		Vector3 localPosition = transform.localPosition;
-		if (!GameUty.supportMultiLanguage)
+		if (!Product.SPP)
 		{
 		{
 			localPosition.y = -27f;
 			localPosition.y = -27f;
 		}
 		}
@@ -229,7 +229,7 @@ public class TaskUnit : MonoBehaviour
 		}
 		}
 		if (this.taskType == ScheduleTaskCtrl.TaskType.Work && ScheduleCSVData.faclilityPowerUpWorkId == this.schedule.id)
 		if (this.taskType == ScheduleTaskCtrl.TaskType.Work && ScheduleCSVData.faclilityPowerUpWorkId == this.schedule.id)
 		{
 		{
-			localPosition.y = (float)(GameUty.supportMultiLanguage ? -35 : -51);
+			localPosition.y = (float)(Product.SPP ? -35 : -51);
 		}
 		}
 		transform.localPosition = localPosition;
 		transform.localPosition = localPosition;
 	}
 	}

+ 10 - 2
Assembly-CSharp/TatooAlphaWindow.cs

@@ -1,5 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.IO;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 
 
 public class TatooAlphaWindow : BasePhotoWindow
 public class TatooAlphaWindow : BasePhotoWindow
@@ -100,8 +102,14 @@ public class TatooAlphaWindow : BasePhotoWindow
 									sb.fTexMulAlpha = rids.alpha;
 									sb.fTexMulAlpha = rids.alpha;
 								}
 								}
 							}
 							}
-							string strMenuName = smenuItem.m_strMenuName;
-							this.m_listSliders.Add(new TatooAlphaWindow.EditAlpha(gameObject, SceneEdit.Instance.NowMPN, j, strMenuName, sb.fTexMulAlpha, SceneEdit.Instance.maid));
+							string f_name = smenuItem.m_strMenuName;
+							if (Product.WMZI != Product.Language.INKD)
+							{
+								string str = "parts/" + smenuItem.m_strCateName + "/" + Path.GetFileNameWithoutExtension(smenuItem.m_strMenuFileName).ToLower();
+								string translation = LocalizationManager.GetTranslation(str + "|name", true, 0, true, false, null, null);
+								f_name = ((!string.IsNullOrEmpty(translation)) ? translation.Replace("《改行》", "\n") : smenuItem.m_strMenuName);
+							}
+							this.m_listSliders.Add(new TatooAlphaWindow.EditAlpha(gameObject, SceneEdit.Instance.NowMPN, j, f_name, sb.fTexMulAlpha, SceneEdit.Instance.maid));
 						}
 						}
 					}
 					}
 				}
 				}

+ 31 - 20
Assembly-CSharp/TitleCtrl.cs

@@ -33,17 +33,25 @@ public class TitleCtrl : MonoBehaviour
 					}
 					}
 					childObject.SetActive(true);
 					childObject.SetActive(true);
 				}
 				}
-				Vector3 localPosition = childObject.transform.localPosition;
-				childObject.transform.localPosition = new Vector3(localPosition.x, localPosition.y - (float)num, localPosition.z);
-				childObject.AddComponent<TitleMouseOver>();
-				UIButton component = childObject.GetComponent<UIButton>();
-				EventDelegate.Add(component.onClick, new EventDelegate.Callback(BaseMgr<TitleMgr>.Instance.ClickButton));
-				GameObject childObject2 = UTY.GetChildObject(childObject, "SelectCursor", false);
-				titleButton.selectCursor = childObject2;
-				titleButton.name = buttonType;
-				titleButton.active = false;
-				this.m_dicTitleButton.Add(titleButton.name, titleButton);
-				this.m_listButton.Add(UTY.GetChildObject(goTitlePanel, "ButtonGroup/" + text + "Group", false));
+				if (Product.VBA && buttonType == TitleMgr.ButtonType.Guest)
+				{
+					num += -61;
+					childObject.SetActive(false);
+				}
+				else
+				{
+					Vector3 localPosition = childObject.transform.localPosition;
+					childObject.transform.localPosition = new Vector3(localPosition.x, localPosition.y - (float)num, localPosition.z);
+					childObject.AddComponent<TitleMouseOver>();
+					UIButton component = childObject.GetComponent<UIButton>();
+					EventDelegate.Add(component.onClick, new EventDelegate.Callback(BaseMgr<TitleMgr>.Instance.ClickButton));
+					GameObject childObject2 = UTY.GetChildObject(childObject, "SelectCursor", false);
+					titleButton.selectCursor = childObject2;
+					titleButton.name = buttonType;
+					titleButton.active = false;
+					this.m_dicTitleButton.Add(titleButton.name, titleButton);
+					this.m_listButton.Add(UTY.GetChildObject(goTitlePanel, "ButtonGroup/" + text + "Group", false));
+				}
 			}
 			}
 		}
 		}
 		finally
 		finally
@@ -69,16 +77,19 @@ public class TitleCtrl : MonoBehaviour
 				TitleMgr.ButtonType buttonType = (TitleMgr.ButtonType)obj;
 				TitleMgr.ButtonType buttonType = (TitleMgr.ButtonType)obj;
 				if (buttonType != TitleMgr.ButtonType.Shop || GameMain.Instance.CMSystem.NetUse)
 				if (buttonType != TitleMgr.ButtonType.Shop || GameMain.Instance.CMSystem.NetUse)
 				{
 				{
-					if (activeButton == buttonType)
-					{
-						this.m_dicTitleButton[buttonType].active = true;
-						this.m_dicTitleButton[buttonType].selectCursor.SetActive(true);
-						BaseMgr<TitleMgr>.Instance.m_currentActiveButton = activeButton;
-					}
-					else
+					if (!Product.VBA || buttonType != TitleMgr.ButtonType.Guest)
 					{
 					{
-						this.m_dicTitleButton[buttonType].active = false;
-						this.m_dicTitleButton[buttonType].selectCursor.SetActive(false);
+						if (activeButton == buttonType)
+						{
+							this.m_dicTitleButton[buttonType].active = true;
+							this.m_dicTitleButton[buttonType].selectCursor.SetActive(true);
+							BaseMgr<TitleMgr>.Instance.m_currentActiveButton = activeButton;
+						}
+						else
+						{
+							this.m_dicTitleButton[buttonType].active = false;
+							this.m_dicTitleButton[buttonType].selectCursor.SetActive(false);
+						}
 					}
 					}
 				}
 				}
 			}
 			}

+ 41 - 31
Assembly-CSharp/TouchAction_Mgr.cs

@@ -48,7 +48,7 @@ public class TouchAction_Mgr : PartsMgrBase
 		for (;;)
 		for (;;)
 		{
 		{
 			yield return null;
 			yield return null;
-			if (!RhythmAction_Mgr.Instance.IsPause && RhythmAction_Mgr.Instance.DanceMaid.Count > 1)
+			if (!Product.VBA && !RhythmAction_Mgr.Instance.IsPause && RhythmAction_Mgr.Instance.DanceMaid.Count > 1)
 			{
 			{
 				Maid vibeTarget = this.m_VibeTarget;
 				Maid vibeTarget = this.m_VibeTarget;
 				if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.RightArrow))
 				if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.RightArrow))
@@ -121,22 +121,25 @@ public class TouchAction_Mgr : PartsMgrBase
 			{
 			{
 				if (!RhythmAction_Mgr.Instance.IsPause)
 				if (!RhythmAction_Mgr.Instance.IsPause)
 				{
 				{
-					if (maid == this.m_VibeTarget)
+					if (!Product.VBA)
 					{
 					{
-						bool flag3 = this.m_ControllerInput.Any((KeyValuePair<AVRController, AVRControllerButtons> e) => e.Key.HandDanceMode && e.Value.GetPressDown(AVRControllerButtons.BTN.TRIGGER));
-						if (Input.GetKeyDown(KeyCode.Space) || flag3)
+						if (maid == this.m_VibeTarget)
 						{
 						{
-							this.m_ActionParam[maid].IsVibeOn = !this.m_ActionParam[maid].IsVibeOn;
+							bool flag3 = this.m_ControllerInput.Any((KeyValuePair<AVRController, AVRControllerButtons> e) => e.Key.HandDanceMode && e.Value.GetPressDown(AVRControllerButtons.BTN.TRIGGER));
+							if (Input.GetKeyDown(KeyCode.Space) || flag3)
+							{
+								this.m_ActionParam[maid].IsVibeOn = !this.m_ActionParam[maid].IsVibeOn;
+							}
+						}
+						if (!this.m_ActionParam[maid].m_VibeObj)
+						{
+							this.m_ActionParam[maid].m_VibeObj = maid.body0.GetSlot(34).obj_tr;
+							this.m_ActionParam[maid].VibeAudio.Init(AudioSourceMgr.Type.Se, true, GameMain.Instance.SoundMgr, this.m_ActionParam[maid].m_VibeObj);
+						}
+						if (GameMain.Instance.MainCamera.IsFadeOut())
+						{
+							this.m_ActionParam[maid].VibeAudio.audiosource.Pause();
 						}
 						}
-					}
-					if (!this.m_ActionParam[maid].m_VibeObj)
-					{
-						this.m_ActionParam[maid].m_VibeObj = maid.body0.GetSlot(34).obj_tr;
-						this.m_ActionParam[maid].VibeAudio.Init(AudioSourceMgr.Type.Se, true, GameMain.Instance.SoundMgr, this.m_ActionParam[maid].m_VibeObj);
-					}
-					if (GameMain.Instance.MainCamera.IsFadeOut())
-					{
-						this.m_ActionParam[maid].VibeAudio.audiosource.Pause();
 					}
 					}
 					if (this.m_TouchMgr != null)
 					if (this.m_TouchMgr != null)
 					{
 					{
@@ -145,7 +148,7 @@ public class TouchAction_Mgr : PartsMgrBase
 					foreach (KeyValuePair<TouchActionParam.TouchType, TouchActionParam.ActionParam> keyValuePair2 in this.m_ActionParam[maid].TouchParam)
 					foreach (KeyValuePair<TouchActionParam.TouchType, TouchActionParam.ActionParam> keyValuePair2 in this.m_ActionParam[maid].TouchParam)
 					{
 					{
 						bool flag4 = false;
 						bool flag4 = false;
-						if (keyValuePair2.Key == TouchActionParam.TouchType.セクハラ)
+						if (keyValuePair2.Key == TouchActionParam.TouchType.セクハラ && !Product.VBA)
 						{
 						{
 							if (this.m_ActionParam[maid].IsVibeOn)
 							if (this.m_ActionParam[maid].IsVibeOn)
 							{
 							{
@@ -217,7 +220,7 @@ public class TouchAction_Mgr : PartsMgrBase
 						this.m_TouchMgr.FrameEnd();
 						this.m_TouchMgr.FrameEnd();
 					}
 					}
 				}
 				}
-				else
+				else if (!Product.VBA)
 				{
 				{
 					this.m_ActionParam[maid].VibeAudio.audiosource.Pause();
 					this.m_ActionParam[maid].VibeAudio.audiosource.Pause();
 				}
 				}
@@ -458,29 +461,36 @@ public class TouchAction_Mgr : PartsMgrBase
 				vibeUIInfo.Icon.height = (int)this.m_IconSetSpace;
 				vibeUIInfo.Icon.height = (int)this.m_IconSetSpace;
 			}
 			}
 			this.m_ActionParam.Add(maid, new TouchActionParam());
 			this.m_ActionParam.Add(maid, new TouchActionParam());
-			GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(GameObject.Find("AudioSe(Clone)"));
-			this.m_ActionParam[maid].VibeAudio = gameObject2.GetComponent<AudioSourceMgr>();
-			this.m_ActionParam[maid].VibeAudio.name = "VibeSE";
-			MaidColliderCollect.AddCollider(maid, MaidColliderCollect.ColliderType.Touch);
-			maid.SetProp(MPN.accvag, "accVag_VibePink_I_.menu", 0, true, false);
-			maid.AllProcPropSeqStart();
-			num++;
-			this.m_MaidUIInfoSet.Add(maid, vibeUIInfo);
-			previousUIInfo = vibeUIInfo;
+			if (!Product.VBA)
+			{
+				GameObject gameObject2 = UnityEngine.Object.Instantiate<GameObject>(GameObject.Find("AudioSe(Clone)"));
+				this.m_ActionParam[maid].VibeAudio = gameObject2.GetComponent<AudioSourceMgr>();
+				this.m_ActionParam[maid].VibeAudio.name = "VibeSE";
+				MaidColliderCollect.AddCollider(maid, MaidColliderCollect.ColliderType.Touch);
+				maid.SetProp(MPN.accvag, "accVag_VibePink_I_.menu", 0, true, false);
+				maid.AllProcPropSeqStart();
+				num++;
+				this.m_MaidUIInfoSet.Add(maid, vibeUIInfo);
+				previousUIInfo = vibeUIInfo;
+			}
 		}
 		}
+		this.m_SelectFrame.gameObject.SetActive(!Product.VBA);
 		base.StartCoroutine(this.ActionCheck());
 		base.StartCoroutine(this.ActionCheck());
 	}
 	}
 
 
 	public override void EndAction()
 	public override void EndAction()
 	{
 	{
 		base.StopAllCoroutines();
 		base.StopAllCoroutines();
-		foreach (Maid maid in RhythmAction_Mgr.Instance.DanceMaid)
+		if (!Product.VBA)
 		{
 		{
-			UnityEngine.Object.Destroy(this.m_ActionParam[maid].VibeAudio.gameObject);
-			MaidColliderCollect.RemoveColliderAll(maid);
-			maid.ResetProp(MPN.accvag, true);
-			maid.AllProcProp();
-			maid.FaceBlend("無し");
+			foreach (Maid maid in RhythmAction_Mgr.Instance.DanceMaid)
+			{
+				UnityEngine.Object.Destroy(this.m_ActionParam[maid].VibeAudio.gameObject);
+				MaidColliderCollect.RemoveColliderAll(maid);
+				maid.ResetProp(MPN.accvag, true);
+				maid.AllProcProp();
+				maid.FaceBlend("無し");
+			}
 		}
 		}
 	}
 	}
 
 

+ 107 - 0
Assembly-CSharp/TransformLocalizeSupport.cs

@@ -0,0 +1,107 @@
+using System;
+using I2.Loc;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+public class TransformLocalizeSupport : MonoBehaviour
+{
+	private void Awake()
+	{
+		if (this.callAwake)
+		{
+			return;
+		}
+		this.callAwake = true;
+		this.holdPosition = base.transform.localPosition;
+		this.holdRotation = base.transform.localRotation;
+		this.holdScale = base.transform.localScale;
+		LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+		LocalizationManager.OnLocalizeEvent += this.OnLocalize;
+		this.OnLocalize();
+	}
+
+	public void OnDestroy()
+	{
+		LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+	}
+
+	public void OnLocalize()
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		if (LocalizationManager.CurrentLanguageCode == "ja")
+		{
+			base.transform.localPosition = this.holdPosition;
+			base.transform.localRotation = this.holdRotation;
+			base.transform.localScale = this.holdScale;
+		}
+		else
+		{
+			this.Apply(this.overRidePropertys);
+			if (this.languageOverRidePropertys != null)
+			{
+				foreach (TransformLocalizeSupport.LanguageOverRideProperty languageOverRideProperty in this.languageOverRidePropertys)
+				{
+					if (languageOverRideProperty.LanguageCode == LocalizationManager.CurrentLanguageCode)
+					{
+						this.Apply(languageOverRideProperty.Property);
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	public void Apply(TransformLocalizeSupport.OverRideProperty property)
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		base.transform.localPosition = ((!property.position.enabled) ? this.holdPosition : property.position.value);
+		base.transform.localRotation = ((!property.rotation.enabled) ? this.holdRotation : Quaternion.Euler(property.rotation.value));
+		base.transform.localScale = ((!property.scale.enabled) ? this.holdScale : property.scale.value);
+	}
+
+	[SerializeField]
+	public TransformLocalizeSupport.OverRideProperty overRidePropertys = default(TransformLocalizeSupport.OverRideProperty);
+
+	[SerializeField]
+	public TransformLocalizeSupport.LanguageOverRideProperty[] languageOverRidePropertys;
+
+	private Vector3 holdPosition;
+
+	private Quaternion holdRotation;
+
+	private Vector3 holdScale;
+
+	private bool callAwake;
+
+	[Serializable]
+	public struct OverRideProperty
+	{
+		public TransformLocalizeSupport.OverRideProperty.Vector3Value position;
+
+		public TransformLocalizeSupport.OverRideProperty.Vector3Value rotation;
+
+		public TransformLocalizeSupport.OverRideProperty.Vector3Value scale;
+
+		[Serializable]
+		public struct Vector3Value
+		{
+			public bool enabled;
+
+			public Vector3 value;
+		}
+	}
+
+	[Serializable]
+	public struct LanguageOverRideProperty
+	{
+		public string LanguageCode;
+
+		public TransformLocalizeSupport.OverRideProperty Property;
+	}
+}

+ 20 - 0
Assembly-CSharp/Trophy.cs

@@ -138,6 +138,10 @@ public static class Trophy
 					this.cardTextureFileName = basicCsv.GetCellAsString(num++, i);
 					this.cardTextureFileName = basicCsv.GetCellAsString(num++, i);
 					this.infoText = basicCsv.GetCellAsString(num++, i);
 					this.infoText = basicCsv.GetCellAsString(num++, i);
 					this.bonusText = basicCsv.GetCellAsString(num++, i);
 					this.bonusText = basicCsv.GetCellAsString(num++, i);
+					if (!string.IsNullOrEmpty(this.bonusText))
+					{
+						this.infoText = this.infoText + "\n" + this.bonusText;
+					}
 					this.effectDrawItemName = basicCsv.GetCellAsString(num++, i);
 					this.effectDrawItemName = basicCsv.GetCellAsString(num++, i);
 					this.titleMask = (basicCsv.GetCellAsString(num++, i) == "〇");
 					this.titleMask = (basicCsv.GetCellAsString(num++, i) == "〇");
 					break;
 					break;
@@ -173,6 +177,22 @@ public static class Trophy
 			}
 			}
 		}
 		}
 
 
+		public string nameTerm
+		{
+			get
+			{
+				return "SceneTrophy/" + this.id.ToString() + "/トロフィー名";
+			}
+		}
+
+		public string infoTextTerm
+		{
+			get
+			{
+				return "SceneTrophy/" + this.id.ToString() + "/説明";
+			}
+		}
+
 		public readonly int id;
 		public readonly int id;
 
 
 		public readonly Trophy.Data.Type type;
 		public readonly Trophy.Data.Type type;

+ 11 - 0
Assembly-CSharp/TrophyAchieveEffect.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections;
 using System.Collections;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 
 
 public class TrophyAchieveEffect : MonoBehaviour
 public class TrophyAchieveEffect : MonoBehaviour
@@ -146,6 +147,16 @@ public class TrophyAchieveEffect : MonoBehaviour
 	{
 	{
 		this.trophy_image_.spriteName = trophy_data.trophySpriteName;
 		this.trophy_image_.spriteName = trophy_data.trophySpriteName;
 		this.title_label_.text = "『" + trophy_data.name + "』";
 		this.title_label_.text = "『" + trophy_data.name + "』";
+		if (Product.SPP)
+		{
+			Localize component = this.title_label_.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.TermPrefix = "『";
+				component.TermSuffix = "』";
+				component.SetTerm(trophy_data.nameTerm);
+			}
+		}
 		if (!string.IsNullOrEmpty(trophy_data.effectDrawItemName) && GameMain.Instance.CharacterMgr.status.isAvailableShop)
 		if (!string.IsNullOrEmpty(trophy_data.effectDrawItemName) && GameMain.Instance.CharacterMgr.status.isAvailableShop)
 		{
 		{
 			this.item_label_.text = "『" + trophy_data.effectDrawItemName + "』";
 			this.item_label_.text = "『" + trophy_data.effectDrawItemName + "』";

+ 5 - 1
Assembly-CSharp/TrophyInfo.cs

@@ -31,7 +31,7 @@ public class TrophyInfo : MonoBehaviour
 		this.trophy_data_ = trophy_data;
 		this.trophy_data_ = trophy_data;
 		this.maid_point_label_.text = string.Empty + this.trophy_data_.maidPoint;
 		this.maid_point_label_.text = string.Empty + this.trophy_data_.maidPoint;
 		this.comment_label_.text = this.trophy_data_.infoText;
 		this.comment_label_.text = this.trophy_data_.infoText;
-		this.get_item_label_.text = this.trophy_data_.bonusText;
+		Utility.SetLocalizeTerm(this.comment_label_, this.trophy_data_.infoTextTerm);
 		this.trophy_image_sprite_.spriteName = trophy_data.trophySpriteName;
 		this.trophy_image_sprite_.spriteName = trophy_data.trophySpriteName;
 		this.SetHaveVisible(GameMain.Instance.CharacterMgr.status.IsHaveTrophy(this.trophy_data_.id));
 		this.SetHaveVisible(GameMain.Instance.CharacterMgr.status.IsHaveTrophy(this.trophy_data_.id));
 		if (this.card_sprite_.sprite2D != null && this.card_sprite_.sprite2D.texture != null)
 		if (this.card_sprite_.sprite2D != null && this.card_sprite_.sprite2D.texture != null)
@@ -69,6 +69,10 @@ public class TrophyInfo : MonoBehaviour
 			this.card_button_.GetComponent<BoxCollider>().enabled = false;
 			this.card_button_.GetComponent<BoxCollider>().enabled = false;
 			this.card_sprite_.gameObject.SetActive(false);
 			this.card_sprite_.gameObject.SetActive(false);
 		}
 		}
+		if (!this.trophy_data_.titleMask)
+		{
+			Utility.SetLocalizeTerm(this.title_label_, this.trophy_data_.nameTerm);
+		}
 	}
 	}
 
 
 	private void OnClickCardButton()
 	private void OnClickCardButton()

+ 107 - 0
Assembly-CSharp/UIRectTransformlLocalizeSupport.cs

@@ -0,0 +1,107 @@
+using System;
+using I2.Loc;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(RectTransform))]
+public class UIRectTransformlLocalizeSupport : MonoBehaviour
+{
+	private void Awake()
+	{
+		if (this.callAwake)
+		{
+			return;
+		}
+		this.callAwake = true;
+		this.rectTrans = base.GetComponent<RectTransform>();
+		if (this.rectTrans != null)
+		{
+			this.holdLeft = this.rectTrans.offsetMin.x;
+			this.holdRight = this.rectTrans.offsetMax.x;
+			LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+			LocalizationManager.OnLocalizeEvent += this.OnLocalize;
+			this.OnLocalize();
+		}
+	}
+
+	public void OnDestroy()
+	{
+		LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+	}
+
+	public void OnLocalize()
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		if (LocalizationManager.CurrentLanguageCode == "ja")
+		{
+			this.rectTrans.offsetMin = new Vector2(this.holdLeft, this.rectTrans.offsetMin.y);
+			this.rectTrans.offsetMax = new Vector2(this.holdRight, this.rectTrans.offsetMax.y);
+		}
+		else
+		{
+			this.Apply(this.overRidePropertys);
+			if (this.languageOverRidePropertys != null)
+			{
+				foreach (UIRectTransformlLocalizeSupport.LanguageOverRideProperty languageOverRideProperty in this.languageOverRidePropertys)
+				{
+					if (languageOverRideProperty.LanguageCode == LocalizationManager.CurrentLanguageCode)
+					{
+						this.Apply(languageOverRideProperty.Property);
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	public void Apply(UIRectTransformlLocalizeSupport.OverRideProperty property)
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		this.rectTrans.offsetMin = ((!property.right.enabled) ? new Vector2(this.holdLeft, this.rectTrans.offsetMin.y) : new Vector2((float)property.right.value, this.rectTrans.offsetMin.y));
+		this.rectTrans.offsetMax = ((!property.left.enabled) ? new Vector2(this.holdRight, this.rectTrans.offsetMax.y) : new Vector2((float)property.left.value, this.rectTrans.offsetMin.y));
+	}
+
+	[SerializeField]
+	public UIRectTransformlLocalizeSupport.OverRideProperty overRidePropertys = default(UIRectTransformlLocalizeSupport.OverRideProperty);
+
+	[SerializeField]
+	public UIRectTransformlLocalizeSupport.LanguageOverRideProperty[] languageOverRidePropertys;
+
+	private float holdLeft;
+
+	private float holdRight;
+
+	private RectTransform rectTrans;
+
+	private bool callAwake;
+
+	[Serializable]
+	public struct OverRideProperty
+	{
+		public UIRectTransformlLocalizeSupport.OverRideProperty.IntValue right;
+
+		public UIRectTransformlLocalizeSupport.OverRideProperty.IntValue left;
+
+		[Serializable]
+		public struct IntValue
+		{
+			public bool enabled;
+
+			public int value;
+		}
+	}
+
+	[Serializable]
+	public struct LanguageOverRideProperty
+	{
+		public string LanguageCode;
+
+		public UIRectTransformlLocalizeSupport.OverRideProperty Property;
+	}
+}

+ 47 - 0
Assembly-CSharp/UIStates.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections;
 using System.Collections;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.UI;
 using wf;
 using wf;
@@ -16,6 +17,7 @@ public class UIStates : MonoBehaviour
 		this.m_NextButton = this.m_ResultUI.GetComponentInChildren<Button>();
 		this.m_NextButton = this.m_ResultUI.GetComponentInChildren<Button>();
 		this.m_ResultImage = this.m_ResultUI.transform.Find("Result");
 		this.m_ResultImage = this.m_ResultUI.transform.Find("Result");
 		this.m_GetMoneyText = this.m_ResultUI.transform.Find("GetMoneyText").GetComponent<Text>();
 		this.m_GetMoneyText = this.m_ResultUI.transform.Find("GetMoneyText").GetComponent<Text>();
+		this.m_GetMoneyText.gameObject.AddComponent<Localize>();
 		this.m_CurrentMouneyText = this.m_ResultUI.transform.Find("BG/CurrentMoney").GetComponent<Text>();
 		this.m_CurrentMouneyText = this.m_ResultUI.transform.Find("BG/CurrentMoney").GetComponent<Text>();
 		this.m_ResultCanvas = this.m_ResultUI.GetComponent<CanvasGroup>();
 		this.m_ResultCanvas = this.m_ResultUI.GetComponent<CanvasGroup>();
 	}
 	}
@@ -210,11 +212,29 @@ public class UIStates : MonoBehaviour
 			{
 			{
 				BjVoiceMgr.Instance.PlayVoice("サレンダー終了", null, 0f);
 				BjVoiceMgr.Instance.PlayVoice("サレンダー終了", null, 0f);
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.TotalWinnings.ToString() + "枚支払いました";
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.TotalWinnings.ToString() + "枚支払いました";
+				if (Product.SPP)
+				{
+					Localize component = this.m_GetMoneyText.GetComponent<Localize>();
+					component.TermArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(BjPlayer.Instance.TotalWinnings.ToString())
+					};
+					Utility.SetLocalizeTerm(component, "SceneCasino/コインを{0}枚支払いました");
+				}
 				this.SetResultImage(Translations.Instance.SURRENDER);
 				this.SetResultImage(Translations.Instance.SURRENDER);
 			}
 			}
 			else if (BjPlayer.Instance.ExistWinHand())
 			else if (BjPlayer.Instance.ExistWinHand())
 			{
 			{
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.TotalWinnings.ToString() + "枚手に入れました!!";
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.TotalWinnings.ToString() + "枚手に入れました!!";
+				if (Product.SPP)
+				{
+					Localize component2 = this.m_GetMoneyText.GetComponent<Localize>();
+					component2.TermArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(BjPlayer.Instance.TotalWinnings.ToString())
+					};
+					Utility.SetLocalizeTerm(component2, "SceneCasino/コインを{0}枚手に入れました!!");
+				}
 				if (BjPlayer.Instance.ExistBlackJack())
 				if (BjPlayer.Instance.ExistBlackJack())
 				{
 				{
 					this.SetResultImage(Translations.Instance.BLACKJACK);
 					this.SetResultImage(Translations.Instance.BLACKJACK);
@@ -247,12 +267,30 @@ public class UIStates : MonoBehaviour
 				}
 				}
 				this.SetResultImage(Translations.Instance.PUSH);
 				this.SetResultImage(Translations.Instance.PUSH);
 				this.m_GetMoneyText.text = "コイン" + BjPlayer.Instance.TotalWinnings.ToString() + "枚が手元に戻ってきます";
 				this.m_GetMoneyText.text = "コイン" + BjPlayer.Instance.TotalWinnings.ToString() + "枚が手元に戻ってきます";
+				if (Product.SPP)
+				{
+					Localize component3 = this.m_GetMoneyText.GetComponent<Localize>();
+					component3.TermArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(BjPlayer.Instance.TotalWinnings.ToString())
+					};
+					Utility.SetLocalizeTerm(component3, "SceneCasino/コイン{0}枚が手元に戻ってきます");
+				}
 			}
 			}
 			else
 			else
 			{
 			{
 				BjVoiceMgr.Instance.PlayVoice("負け", null, 0f);
 				BjVoiceMgr.Instance.PlayVoice("負け", null, 0f);
 				this.SetResultImage(Translations.Instance.YOU_LOSE);
 				this.SetResultImage(Translations.Instance.YOU_LOSE);
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.MoneyDifference.ToString() + "枚失いました...";
 				this.m_GetMoneyText.text = "コインを" + BjPlayer.Instance.MoneyDifference.ToString() + "枚失いました...";
+				if (Product.SPP)
+				{
+					Localize component4 = this.m_GetMoneyText.GetComponent<Localize>();
+					component4.TermArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(BjPlayer.Instance.MoneyDifference.ToString())
+					};
+					Utility.SetLocalizeTerm(component4, "SceneCasino/コインを{0}枚失いました…");
+				}
 			}
 			}
 		}
 		}
 		else
 		else
@@ -260,6 +298,15 @@ public class UIStates : MonoBehaviour
 			BjVoiceMgr.Instance.PlayVoice("負け", null, 0f);
 			BjVoiceMgr.Instance.PlayVoice("負け", null, 0f);
 			this.SetResultImage(Translations.Instance.YOU_LOSE);
 			this.SetResultImage(Translations.Instance.YOU_LOSE);
 			this.m_GetMoneyText.text = "コインを" + (BjPlayer.Instance.CurrentBet + BjPlayer.Instance.SplitBet).ToString() + "枚失いました...";
 			this.m_GetMoneyText.text = "コインを" + (BjPlayer.Instance.CurrentBet + BjPlayer.Instance.SplitBet).ToString() + "枚失いました...";
+			if (Product.SPP)
+			{
+				Localize component5 = this.m_GetMoneyText.GetComponent<Localize>();
+				component5.TermArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create((BjPlayer.Instance.CurrentBet + BjPlayer.Instance.SplitBet).ToString())
+				};
+				Utility.SetLocalizeTerm(component5, "SceneCasino/コインを{0}枚失いました…");
+			}
 		}
 		}
 		long orijin_coin = BjPlayer.Instance.OrijinCredit;
 		long orijin_coin = BjPlayer.Instance.OrijinCredit;
 		if (BjPlayer.Instance.ExistWinHand())
 		if (BjPlayer.Instance.ExistWinHand())

+ 2 - 2
Assembly-CSharp/UIWFConditionList.cs

@@ -72,7 +72,7 @@ public class UIWFConditionList : MonoBehaviour
 				this.condition_label_list_[i].transform.parent.gameObject.SetActive(true);
 				this.condition_label_list_[i].transform.parent.gameObject.SetActive(true);
 				if (texts[i].Key.Length == 1)
 				if (texts[i].Key.Length == 1)
 				{
 				{
-					if (!GameUty.supportMultiLanguage || this.condition_label_localize_list_[i] == null)
+					if (!Product.SPP || this.condition_label_localize_list_[i] == null)
 					{
 					{
 						this.condition_label_list_[i].text = Utility.GetTermLastWord(texts[i].Key[0]);
 						this.condition_label_list_[i].text = Utility.GetTermLastWord(texts[i].Key[0]);
 					}
 					}
@@ -83,7 +83,7 @@ public class UIWFConditionList : MonoBehaviour
 						this.condition_label_localize_list_[i].SetTerm(texts[i].Key[0]);
 						this.condition_label_localize_list_[i].SetTerm(texts[i].Key[0]);
 					}
 					}
 				}
 				}
-				else if (!GameUty.supportMultiLanguage || this.condition_label_localize_list_[i] == null)
+				else if (!Product.SPP || this.condition_label_localize_list_[i] == null)
 				{
 				{
 					string[] array = new string[texts[i].Key.Length - 1];
 					string[] array = new string[texts[i].Key.Length - 1];
 					for (int j = 1; j < texts[i].Key.Length; j++)
 					for (int j = 1; j < texts[i].Key.Length; j++)

+ 101 - 0
Assembly-CSharp/UIWFPositionStore.cs

@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class UIWFPositionStore : MonoBehaviour
+{
+	public void Apply()
+	{
+		if (this.positionData == null || this.parent == null)
+		{
+			return;
+		}
+		foreach (UIWFPositionStore.SerializData serializData in this.positionData)
+		{
+			if (!string.IsNullOrEmpty(serializData.objectPath))
+			{
+				GameObject childObject = UTY.GetChildObject(this.parent.gameObject, serializData.objectPath, true);
+				if (!(childObject == null))
+				{
+					if (this.applyPosition)
+					{
+						childObject.transform.localPosition = serializData.localPosition;
+					}
+					if (this.applyActive)
+					{
+						childObject.gameObject.SetActive(serializData.active);
+					}
+				}
+			}
+		}
+	}
+
+	private void OnValidate()
+	{
+		if (this.parent == null)
+		{
+			return;
+		}
+		if (this.addAllDataUnderTheRoot != null)
+		{
+			List<UIWFPositionStore.SerializData> list = new List<UIWFPositionStore.SerializData>(this.positionData);
+			foreach (Transform transform in this.addAllDataUnderTheRoot.GetComponentsInChildren<Transform>(true))
+			{
+				if (!(transform == this.addAllDataUnderTheRoot))
+				{
+					list.Add(new UIWFPositionStore.SerializData
+					{
+						objectPath = Utility.GetHierarchyPath(this.parent, transform),
+						localPosition = transform.localPosition,
+						active = transform.gameObject.active
+					});
+				}
+			}
+			this.addAllDataUnderTheRoot = null;
+			this.positionData = list.ToArray();
+			return;
+		}
+		if (this.positionData == null)
+		{
+			return;
+		}
+		for (int j = 0; j < this.positionData.Length; j++)
+		{
+			if (!(this.positionData[j].storeTarget == null))
+			{
+				UIWFPositionStore.SerializData serializData = default(UIWFPositionStore.SerializData);
+				serializData.objectPath = Utility.GetHierarchyPath(this.parent, this.positionData[j].storeTarget);
+				serializData.localPosition = this.positionData[j].storeTarget.localPosition;
+				serializData.active = this.positionData[j].storeTarget.gameObject.activeSelf;
+				this.positionData[j] = serializData;
+			}
+		}
+	}
+
+	public bool applyActive = true;
+
+	public bool applyPosition = true;
+
+	[SerializeField]
+	private Transform parent;
+
+	[SerializeField]
+	private UIWFPositionStore.SerializData[] positionData;
+
+	[Header("指定オブジェクト配下のデータをすべて追加")]
+	public Transform addAllDataUnderTheRoot;
+
+	[Serializable]
+	private struct SerializData
+	{
+		public string objectPath;
+
+		public Vector3 localPosition;
+
+		public bool active;
+
+		[Header("objectPath自動代入用")]
+		public Transform storeTarget;
+	}
+}

+ 10 - 1
Assembly-CSharp/UndressDance_Mgr.cs

@@ -103,6 +103,15 @@ public class UndressDance_Mgr : PartsMgrBase
 		case 3:
 		case 3:
 			this.m_MpnPartsData.Last<KeyValuePair<MPN, UndressDance_Mgr.PartsData>>().Value.SexsualPoint = csv.GetCellAsInteger(cx, cy);
 			this.m_MpnPartsData.Last<KeyValuePair<MPN, UndressDance_Mgr.PartsData>>().Value.SexsualPoint = csv.GetCellAsInteger(cx, cy);
 			break;
 			break;
+		case 4:
+		{
+			bool flag = csv.GetCellAsString(cx, cy) == "○";
+			if (Product.VBA && !flag)
+			{
+				return;
+			}
+			break;
+		}
 		}
 		}
 		if (cx == csv.max_cell_x - 1)
 		if (cx == csv.max_cell_x - 1)
 		{
 		{
@@ -297,7 +306,7 @@ public class UndressDance_Mgr : PartsMgrBase
 				bool flag = true;
 				bool flag = true;
 				foreach (MPN key in list)
 				foreach (MPN key in list)
 				{
 				{
-					flag &= this.m_ItemUIList[key].IsUndress;
+					flag &= (this.m_ItemUIList.ContainsKey(key) && this.m_ItemUIList[key].IsUndress);
 					if (!flag)
 					if (!flag)
 					{
 					{
 						break;
 						break;

+ 39 - 0
Assembly-CSharp/VRFaceShortcutConfig.cs

@@ -1,7 +1,9 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using I2.Loc;
 using Kasizuki;
 using Kasizuki;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class VRFaceShortcutConfig : MonoBehaviour
 public class VRFaceShortcutConfig : MonoBehaviour
 {
 {
@@ -56,6 +58,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 	{
 	{
 		OVRLipSync.VariableData variable = GameMain.Instance.LipSyncMgr.Variable;
 		OVRLipSync.VariableData variable = GameMain.Instance.LipSyncMgr.Variable;
 		VRFaceShortcutConfig.ItemSlider itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("リップシンク:マイク感度");
 		VRFaceShortcutConfig.ItemSlider itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("リップシンク:マイク感度");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/リップシンク:マイク感度");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 10f;
 		itemSlider.max = 10f;
 		itemSlider.Set(variable.MicSensitivity);
 		itemSlider.Set(variable.MicSensitivity);
@@ -64,6 +67,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			GameMain.Instance.LipSyncMgr.Variable.MicSensitivity = value;
 			GameMain.Instance.LipSyncMgr.Variable.MicSensitivity = value;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("リップシンク:自分の声の大きさ");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("リップシンク:自分の声の大きさ");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/リップシンク:自分の声の大きさ");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 10f;
 		itemSlider.max = 10f;
 		itemSlider.Set(variable.MicVolume);
 		itemSlider.Set(variable.MicVolume);
@@ -72,6 +76,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			GameMain.Instance.LipSyncMgr.Variable.MicVolume = value;
 			GameMain.Instance.LipSyncMgr.Variable.MicVolume = value;
 		};
 		};
 		VRFaceShortcutConfig.ItemSelectButton itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("リップシンク:ミュートにする");
 		VRFaceShortcutConfig.ItemSelectButton itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("リップシンク:ミュートにする");
+		Utility.SetLocalizeTerm(itemSelectButton.localize, "VAS/リップシンク:ミュートにする");
 		itemSelectButton.textLeft.text = "ON";
 		itemSelectButton.textLeft.text = "ON";
 		itemSelectButton.textRight.text = "OFF";
 		itemSelectButton.textRight.text = "OFF";
 		itemSelectButton.Set(variable.Mute);
 		itemSelectButton.Set(variable.Mute);
@@ -80,22 +85,29 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			variable.Mute = isLeft;
 			variable.Mute = isLeft;
 		};
 		};
 		itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("手元ショートカット:表情の変化");
 		itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("手元ショートカット:表情の変化");
+		Utility.SetLocalizeTerm(itemSelectButton.localize, "VAS/手元ショートカット:表情の変化");
 		itemSelectButton.textLeft.text = "即座に変更する";
 		itemSelectButton.textLeft.text = "即座に変更する";
+		Utility.SetLocalizeTerm(itemSelectButton.localizeLeft, "VAS/即座に変更する");
 		itemSelectButton.textRight.text = "選択して決定する";
 		itemSelectButton.textRight.text = "選択して決定する";
+		Utility.SetLocalizeTerm(itemSelectButton.localizeRight, "VAS/選択して決定する");
 		itemSelectButton.Set(ControllerShortcutSettingData.config.isDirectMode);
 		itemSelectButton.Set(ControllerShortcutSettingData.config.isDirectMode);
 		itemSelectButton.onClickIsLeft = delegate(bool isLeft)
 		itemSelectButton.onClickIsLeft = delegate(bool isLeft)
 		{
 		{
 			ControllerShortcutSettingData.config.isDirectMode = isLeft;
 			ControllerShortcutSettingData.config.isDirectMode = isLeft;
 		};
 		};
 		itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("手元ショートカット:手元のUI");
 		itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("手元ショートカット:手元のUI");
+		Utility.SetLocalizeTerm(itemSelectButton.localize, "VAS/手元ショートカット:手元のUI");
 		itemSelectButton.textLeft.text = "常に表示する";
 		itemSelectButton.textLeft.text = "常に表示する";
+		Utility.SetLocalizeTerm(itemSelectButton.localizeLeft, "VAS/常に表示する");
 		itemSelectButton.textRight.text = "決定時に隠す";
 		itemSelectButton.textRight.text = "決定時に隠す";
+		Utility.SetLocalizeTerm(itemSelectButton.localizeRight, "VAS/決定時に隠す");
 		itemSelectButton.Set(ControllerShortcutSettingData.config.isEveryShowMode);
 		itemSelectButton.Set(ControllerShortcutSettingData.config.isEveryShowMode);
 		itemSelectButton.onClickIsLeft = delegate(bool isLeft)
 		itemSelectButton.onClickIsLeft = delegate(bool isLeft)
 		{
 		{
 			ControllerShortcutSettingData.config.isEveryShowMode = isLeft;
 			ControllerShortcutSettingData.config.isEveryShowMode = isLeft;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体向きの頭への追従");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体向きの頭への追従");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/体向きの頭への追従");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 1f;
 		itemSlider.max = 1f;
 		itemSlider.Set(ControllerShortcutSettingData.config.maintainPelvisPosition);
 		itemSlider.Set(ControllerShortcutSettingData.config.maintainPelvisPosition);
@@ -104,6 +116,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			ControllerShortcutSettingData.config.maintainPelvisPosition = value;
 			ControllerShortcutSettingData.config.maintainPelvisPosition = value;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体位置の頭への追従");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体位置の頭への追従");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/体位置の頭への追従");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 1f;
 		itemSlider.max = 1f;
 		itemSlider.Set(ControllerShortcutSettingData.config.bodyPosStiffness);
 		itemSlider.Set(ControllerShortcutSettingData.config.bodyPosStiffness);
@@ -112,6 +125,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			ControllerShortcutSettingData.config.bodyPosStiffness = value;
 			ControllerShortcutSettingData.config.bodyPosStiffness = value;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体回転の頭への追従");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("体回転の頭への追従");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/体回転の頭への追従");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 1f;
 		itemSlider.max = 1f;
 		itemSlider.Set(ControllerShortcutSettingData.config.bodyRotStiffness);
 		itemSlider.Set(ControllerShortcutSettingData.config.bodyRotStiffness);
@@ -120,6 +134,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			ControllerShortcutSettingData.config.bodyRotStiffness = value;
 			ControllerShortcutSettingData.config.bodyRotStiffness = value;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("胸部回転の頭への追従");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("胸部回転の頭への追従");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/胸部回転の頭への追従");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 1f;
 		itemSlider.max = 1f;
 		itemSlider.Set(ControllerShortcutSettingData.config.chestRotationWeight);
 		itemSlider.Set(ControllerShortcutSettingData.config.chestRotationWeight);
@@ -128,6 +143,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			ControllerShortcutSettingData.config.chestRotationWeight = value;
 			ControllerShortcutSettingData.config.chestRotationWeight = value;
 		};
 		};
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("カメラの画角");
 		itemSlider = this.CreateItem<VRFaceShortcutConfig.ItemSlider>("カメラの画角");
+		Utility.SetLocalizeTerm(itemSlider.localize, "VAS/カメラの画角");
 		itemSlider.min = 0f;
 		itemSlider.min = 0f;
 		itemSlider.max = 1f;
 		itemSlider.max = 1f;
 		itemSlider.Set(ControllerShortcutSettingData.config.selfCameraFOV);
 		itemSlider.Set(ControllerShortcutSettingData.config.selfCameraFOV);
@@ -136,9 +152,12 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			ControllerShortcutSettingData.config.selfCameraFOV = value;
 			ControllerShortcutSettingData.config.selfCameraFOV = value;
 		};
 		};
 		VRFaceShortcutConfig.ParentMultiButton parentMultiButton = this.CreateItem<VRFaceShortcutConfig.ParentMultiButton>("手のスカートへの当たり判定\n※VR CONFIGより優先されます。");
 		VRFaceShortcutConfig.ParentMultiButton parentMultiButton = this.CreateItem<VRFaceShortcutConfig.ParentMultiButton>("手のスカートへの当たり判定\n※VR CONFIGより優先されます。");
+		Utility.SetLocalizeTerm(parentMultiButton.localize, "VAS/手のスカートへの当たり判定");
 		parentMultiButton.textRight.text = "OFF";
 		parentMultiButton.textRight.text = "OFF";
 		parentMultiButton.textLeft.text = "常時ON";
 		parentMultiButton.textLeft.text = "常時ON";
+		Utility.SetLocalizeTerm(parentMultiButton.localizeLeft, "VAS/常時ON");
 		parentMultiButton.textCenter.text = "握時ON";
 		parentMultiButton.textCenter.text = "握時ON";
+		Utility.SetLocalizeTerm(parentMultiButton.localizeCenter, "VAS/握時ON");
 		if (GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF)
 		if (GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF)
 		{
 		{
 			parentMultiButton.Set(0);
 			parentMultiButton.Set(0);
@@ -177,6 +196,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			return;
 			return;
 		}
 		}
 		VRFaceShortcutConfig.ItemSelectButton itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("一番上にあるトラッカーを\n頭トラッキングに利用");
 		VRFaceShortcutConfig.ItemSelectButton itemSelectButton = this.CreateItem<VRFaceShortcutConfig.ItemSelectButton>("一番上にあるトラッカーを\n頭トラッキングに利用");
+		Utility.SetLocalizeTerm(itemSelectButton.localize, "VAS/一番上にあるトラッカーを頭トラッキングに利用");
 		itemSelectButton.textLeft.text = "ON";
 		itemSelectButton.textLeft.text = "ON";
 		itemSelectButton.textRight.text = "OFF";
 		itemSelectButton.textRight.text = "OFF";
 		itemSelectButton.Set(ControllerShortcutSettingData.config.use1TrackerForHead);
 		itemSelectButton.Set(ControllerShortcutSettingData.config.use1TrackerForHead);
@@ -204,6 +224,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 		if (item.gameObject.activeSelf != isActive)
 		if (item.gameObject.activeSelf != isActive)
 		{
 		{
 			item.gameObject.SetActive(isActive);
 			item.gameObject.SetActive(isActive);
+			Utility.SetLocalizeTerm(item.localize, "VAS/" + itemKey);
 			this.m_IsUpdateReposition = true;
 			this.m_IsUpdateReposition = true;
 		}
 		}
 	}
 	}
@@ -286,9 +307,12 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			}
 			}
 		}
 		}
 
 
+		public Localize localize { get; private set; }
+
 		protected virtual void Awake()
 		protected virtual void Awake()
 		{
 		{
 			this.m_Label = VRFaceShortcutConfig.GetChildObject<UILabel>(base.gameObject, "name");
 			this.m_Label = VRFaceShortcutConfig.GetChildObject<UILabel>(base.gameObject, "name");
+			this.localize = this.m_Label.gameObject.AddComponent<Localize>();
 		}
 		}
 
 
 		public abstract void Set(object value);
 		public abstract void Set(object value);
@@ -445,6 +469,10 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			}
 			}
 		}
 		}
 
 
+		public Localize localizeRight { get; private set; }
+
+		public Localize localizeLeft { get; private set; }
+
 		public Action<bool> onClickIsLeft { get; set; }
 		public Action<bool> onClickIsLeft { get; set; }
 
 
 		protected override void Awake()
 		protected override void Awake()
@@ -454,6 +482,8 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			this.buttonLeft = VRFaceShortcutConfig.GetChildObject<UIButton>(base.gameObject, "button left");
 			this.buttonLeft = VRFaceShortcutConfig.GetChildObject<UIButton>(base.gameObject, "button left");
 			this.textRight = this.buttonRight.GetComponentInChildren<UILabel>();
 			this.textRight = this.buttonRight.GetComponentInChildren<UILabel>();
 			this.textLeft = this.buttonLeft.GetComponentInChildren<UILabel>();
 			this.textLeft = this.buttonLeft.GetComponentInChildren<UILabel>();
+			this.localizeRight = this.textRight.gameObject.AddComponent<Localize>();
+			this.localizeLeft = this.textLeft.gameObject.AddComponent<Localize>();
 			EventDelegate.Add(this.buttonRight.onClick, delegate()
 			EventDelegate.Add(this.buttonRight.onClick, delegate()
 			{
 			{
 				if (this.onClickIsLeft != null)
 				if (this.onClickIsLeft != null)
@@ -576,6 +606,12 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			}
 			}
 		}
 		}
 
 
+		public Localize localizeRight { get; private set; }
+
+		public Localize localizeLeft { get; private set; }
+
+		public Localize localizeCenter { get; private set; }
+
 		public Action<int> onClick { get; set; }
 		public Action<int> onClick { get; set; }
 
 
 		protected override void Awake()
 		protected override void Awake()
@@ -587,6 +623,9 @@ public class VRFaceShortcutConfig : MonoBehaviour
 			this.textRight = this.buttonRight.GetComponentInChildren<UILabel>();
 			this.textRight = this.buttonRight.GetComponentInChildren<UILabel>();
 			this.textLeft = this.buttonLeft.GetComponentInChildren<UILabel>();
 			this.textLeft = this.buttonLeft.GetComponentInChildren<UILabel>();
 			this.textCenter = this.buttonCenter.GetComponentInChildren<UILabel>();
 			this.textCenter = this.buttonCenter.GetComponentInChildren<UILabel>();
+			this.localizeRight = this.textRight.gameObject.AddComponent<Localize>();
+			this.localizeLeft = this.textLeft.gameObject.AddComponent<Localize>();
+			this.localizeCenter = this.textCenter.gameObject.AddComponent<Localize>();
 			EventDelegate.Add(this.buttonRight.onClick, delegate()
 			EventDelegate.Add(this.buttonRight.onClick, delegate()
 			{
 			{
 				if (this.onClick != null)
 				if (this.onClick != null)

+ 1 - 1
Assembly-CSharp/WindowPartsFingerPreset.cs

@@ -182,7 +182,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 	{
 	{
 		WindowPartsFingerBlend.Type blendType = tareget_blend.BlendType;
 		WindowPartsFingerBlend.Type blendType = tareget_blend.BlendType;
 		FingerBlend.BaseFinger baseFingerClass = tareget_blend.GetBaseFingerClass(tareget_blend.mgr.select_maid, blendType);
 		FingerBlend.BaseFinger baseFingerClass = tareget_blend.GetBaseFingerClass(tareget_blend.mgr.select_maid, blendType);
-		XElement xelement = new XElement("GameVersion", 1260);
+		XElement xelement = new XElement("GameVersion", 1270);
 		XElement xelement2 = new XElement("RightData", blendType == WindowPartsFingerBlend.Type.RightArm || blendType == WindowPartsFingerBlend.Type.RightLeg);
 		XElement xelement2 = new XElement("RightData", blendType == WindowPartsFingerBlend.Type.RightArm || blendType == WindowPartsFingerBlend.Type.RightLeg);
 		XElement xelement3 = new XElement("BinaryData", Convert.ToBase64String(baseFingerClass.GetBinary()));
 		XElement xelement3 = new XElement("BinaryData", Convert.ToBase64String(baseFingerClass.GetBinary()));
 		XNode[] contents = new XNode[]
 		XNode[] contents = new XNode[]

+ 5 - 12
Assembly-CSharp/YotogiClassListManager.cs

@@ -149,7 +149,7 @@ public class YotogiClassListManager : MonoBehaviour
 					{
 					{
 						if (maid.status.personal.id == num2)
 						if (maid.status.personal.id == num2)
 						{
 						{
-							string text = GameUty.supportMultiLanguage ? maid.status.personal.termName : maid.status.personal.drawName;
+							string text = Product.SPP ? maid.status.personal.termName : maid.status.personal.drawName;
 							list5.Add(new KeyValuePair<string[], Color>(new string[]
 							list5.Add(new KeyValuePair<string[], Color>(new string[]
 							{
 							{
 								"MaidStatus/条件文/ヒロインタイプ {0}",
 								"MaidStatus/条件文/ヒロインタイプ {0}",
@@ -195,7 +195,7 @@ public class YotogiClassListManager : MonoBehaviour
 		{
 		{
 			YotogiClassListManager.Data data = this.instansToDatas[instanceId];
 			YotogiClassListManager.Data data = this.instansToDatas[instanceId];
 			this.conditionTitleLabel.text = data.classData.drawName + " 取得条件";
 			this.conditionTitleLabel.text = data.classData.drawName + " 取得条件";
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 				if (component != null)
 				if (component != null)
@@ -253,14 +253,7 @@ public class YotogiClassListManager : MonoBehaviour
 						{
 						{
 							UILabel uilabel2 = this.specialSkillLabelList[num++];
 							UILabel uilabel2 = this.specialSkillLabelList[num++];
 							uilabel2.text = data3.name;
 							uilabel2.text = data3.name;
-							if (GameUty.supportMultiLanguage)
-							{
-								Localize component2 = uilabel2.GetComponent<Localize>();
-								if (component2 != null)
-								{
-									component2.SetTerm(data3.termName);
-								}
-							}
+							Utility.SetLocalizeTerm(uilabel2, data3.termName);
 							if (this.specialSkillLabelList.Count == num)
 							if (this.specialSkillLabelList.Count == num)
 							{
 							{
 								this.specialSkillLabelList[num - 1].text = "etc...";
 								this.specialSkillLabelList[num - 1].text = "etc...";
@@ -280,8 +273,8 @@ public class YotogiClassListManager : MonoBehaviour
 			this.specialSkillLabelsParent.SetActive(!string.IsNullOrEmpty(this.specialSkillLabelList[0].text));
 			this.specialSkillLabelsParent.SetActive(!string.IsNullOrEmpty(this.specialSkillLabelList[0].text));
 			if (this.specialSkillLabelsParent.activeSelf)
 			if (this.specialSkillLabelsParent.activeSelf)
 			{
 			{
-				UIWidget component3 = UTY.GetChildObject(this.specialSkillLabelsParent, "BG", false).GetComponent<UIWidget>();
-				component3.height = 100 + 36 * num;
+				UIWidget component2 = UTY.GetChildObject(this.specialSkillLabelsParent, "BG", false).GetComponent<UIWidget>();
+				component2.height = 100 + 36 * num;
 			}
 			}
 		}
 		}
 		else
 		else

+ 9 - 8
Assembly-CSharp/YotogiCommandFactory.cs

@@ -299,17 +299,18 @@ public class YotogiCommandFactory : MonoBehaviour
 		}
 		}
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/CommandCategoryTitle", true);
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/CommandCategoryTitle", true);
 		UILabel component = gameObject.GetComponent<UILabel>();
 		UILabel component = gameObject.GetComponent<UILabel>();
-		component.text = name;
-		if (GameUty.supportMultiLanguage)
+		component.text = string.Empty;
+		if (Utility.SetLocalizeTerm(component, name))
 		{
 		{
-			component.text = string.Empty;
-			Localize component2 = component.GetComponent<Localize>();
-			component2.SetTerm(name);
 			if (string.IsNullOrEmpty(component.text))
 			if (string.IsNullOrEmpty(component.text))
 			{
 			{
 				component.text = Utility.GetTermLastWord(name);
 				component.text = Utility.GetTermLastWord(name);
 			}
 			}
 		}
 		}
+		else
+		{
+			component.text = name;
+		}
 		gameObject.name = "-" + name;
 		gameObject.name = "-" + name;
 		Vector3 localPosition = gameObject.transform.localPosition;
 		Vector3 localPosition = gameObject.transform.localPosition;
 		localPosition.z = (float)id;
 		localPosition.z = (float)id;
@@ -326,7 +327,7 @@ public class YotogiCommandFactory : MonoBehaviour
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/Command", true);
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/Command", true);
 		UILabel component = UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>();
 		UILabel component = UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>();
 		component.text = name;
 		component.text = name;
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			component.text = string.Empty;
 			component.text = string.Empty;
 			Localize component2 = component.GetComponent<Localize>();
 			Localize component2 = component.GetComponent<Localize>();
@@ -374,12 +375,12 @@ public class YotogiCommandFactory : MonoBehaviour
 
 
 	private string GetGroupName(Skill.Data.Command.Data.Basic commandDataBasic)
 	private string GetGroupName(Skill.Data.Command.Data.Basic commandDataBasic)
 	{
 	{
-		return (!GameUty.supportMultiLanguage) ? commandDataBasic.group_name : commandDataBasic.termGroupName;
+		return (!Product.SPP) ? commandDataBasic.group_name : commandDataBasic.termGroupName;
 	}
 	}
 
 
 	private string GetCommandName(Skill.Data.Command.Data.Basic commandDataBasic)
 	private string GetCommandName(Skill.Data.Command.Data.Basic commandDataBasic)
 	{
 	{
-		return (!GameUty.supportMultiLanguage) ? commandDataBasic.name : commandDataBasic.termName;
+		return (!Product.SPP) ? commandDataBasic.name : commandDataBasic.termName;
 	}
 	}
 
 
 	public GameObject HiddenTree;
 	public GameObject HiddenTree;

+ 1 - 0
Assembly-CSharp/YotogiCommandMenuOVR.cs

@@ -71,6 +71,7 @@ public class YotogiCommandMenuOVR : MonoBehaviour
 			RectTransform rectTransform = UnityEngine.Object.Instantiate<RectTransform>(this.clone_src_);
 			RectTransform rectTransform = UnityEngine.Object.Instantiate<RectTransform>(this.clone_src_);
 			rectTransform.SetParent(this.command_panel_, false);
 			rectTransform.SetParent(this.command_panel_, false);
 			rectTransform.GetComponent<Text>().text = data.basic.name;
 			rectTransform.GetComponent<Text>().text = data.basic.name;
+			Utility.SetLocalizeTerm(rectTransform, data.basic.termName);
 			rectTransform.gameObject.SetActive(false);
 			rectTransform.gameObject.SetActive(false);
 			this.command_dic_.Add(data, rectTransform);
 			this.command_dic_.Add(data, rectTransform);
 		}
 		}

+ 1 - 1
Assembly-CSharp/YotogiParamScroll.cs

@@ -12,7 +12,7 @@ public class YotogiParamScroll : MonoBehaviour
 		this.panel_ = UTY.GetChildObject(base.gameObject, "Mask", false).GetComponent<UIPanel>();
 		this.panel_ = UTY.GetChildObject(base.gameObject, "Mask", false).GetComponent<UIPanel>();
 		this.parent_obj_ = UTY.GetChildObject(base.gameObject, "Parent", false);
 		this.parent_obj_ = UTY.GetChildObject(base.gameObject, "Parent", false);
 		UIGrid component = this.parent_obj_.GetComponent<UIGrid>();
 		UIGrid component = this.parent_obj_.GetComponent<UIGrid>();
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			component.cellWidth = 150f;
 			component.cellWidth = 150f;
 			Utility.ResetNGUI(component);
 			Utility.ResetNGUI(component);

+ 3 - 3
Assembly-CSharp/YotogiParameterViewer.cs

@@ -54,7 +54,7 @@ public class YotogiParameterViewer : MonoBehaviour
 		Action<YotogiParameterViewer.LabelType, string, string> action = delegate(YotogiParameterViewer.LabelType labelType, string rawText, string termText)
 		Action<YotogiParameterViewer.LabelType, string, string> action = delegate(YotogiParameterViewer.LabelType labelType, string rawText, string termText)
 		{
 		{
 			this.label_dictionary_[labelType].text = rawText;
 			this.label_dictionary_[labelType].text = rawText;
-			Localize component = this.label_dictionary_[YotogiParameterViewer.LabelType.Contract].GetComponent<Localize>();
+			Localize component = this.label_dictionary_[labelType].GetComponent<Localize>();
 			if (component != null)
 			if (component != null)
 			{
 			{
 				component.SetTerm(termText);
 				component.SetTerm(termText);
@@ -64,7 +64,7 @@ public class YotogiParameterViewer : MonoBehaviour
 		this.label_dictionary_[YotogiParameterViewer.LabelType.Name].text = status.lastName + "\n" + status.firstName;
 		this.label_dictionary_[YotogiParameterViewer.LabelType.Name].text = status.lastName + "\n" + status.firstName;
 		this.label_dictionary_[YotogiParameterViewer.LabelType.YotogiPlayCount].text = status.playCountYotogi.ToString();
 		this.label_dictionary_[YotogiParameterViewer.LabelType.YotogiPlayCount].text = status.playCountYotogi.ToString();
 		action(YotogiParameterViewer.LabelType.Seikeiken, EnumConvert.GetString(status.seikeiken), EnumConvert.GetTerm(status.seikeiken));
 		action(YotogiParameterViewer.LabelType.Seikeiken, EnumConvert.GetString(status.seikeiken), EnumConvert.GetTerm(status.seikeiken));
-		action(YotogiParameterViewer.LabelType.Relation, EnumConvert.GetString(status.relation), EnumConvert.GetTerm(status.relation));
+		action(YotogiParameterViewer.LabelType.Relation, EnumConvert.GetString(status.relation, status.additionalRelation), EnumConvert.GetTerm(status.relation, status.additionalRelation));
 		action(YotogiParameterViewer.LabelType.ConditionText, status.conditionText, status.conditionTermText);
 		action(YotogiParameterViewer.LabelType.ConditionText, status.conditionText, status.conditionTermText);
 	}
 	}
 
 
@@ -107,7 +107,7 @@ public class YotogiParameterViewer : MonoBehaviour
 	{
 	{
 		this.attributeViewer = obj;
 		this.attributeViewer = obj;
 		this.attributeViewer.gameObject.SetActive(false);
 		this.attributeViewer.gameObject.SetActive(false);
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			this.attributeViewer.transform.localPosition = new Vector3(184f, 0f, 0f);
 			this.attributeViewer.transform.localPosition = new Vector3(184f, 0f, 0f);
 		}
 		}

+ 112 - 15
Assembly-CSharp/YotogiPlayManager.cs

@@ -16,7 +16,7 @@ public class YotogiPlayManager : WfScreenChildren
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		UTY.GetChildObject(base.root_obj, "ParameterViewer", false).SetActive(true);
 		UTY.GetChildObject(base.root_obj, "ParameterViewer", false).SetActive(true);
 		UTY.GetChildObject(base.root_obj, "SkillSelectViewer", false).SetActive(true);
 		UTY.GetChildObject(base.root_obj, "SkillSelectViewer", false).SetActive(true);
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			UIPanel component = UTY.GetChildObject(base.root_obj, "ParameterViewer/YotogiParameterViewer", false).GetComponent<UIPanel>();
 			UIPanel component = UTY.GetChildObject(base.root_obj, "ParameterViewer/YotogiParameterViewer", false).GetComponent<UIPanel>();
 			Vector4 baseClipRegion = component.baseClipRegion;
 			Vector4 baseClipRegion = component.baseClipRegion;
@@ -162,7 +162,7 @@ public class YotogiPlayManager : WfScreenChildren
 			this.param_basic_bar_ = UTY.GetChildObject(childObject, "ParameterViewer/MaskGroup/ParameterParent", false).GetComponent<YotogiParamBasicBar>();
 			this.param_basic_bar_ = UTY.GetChildObject(childObject, "ParameterViewer/MaskGroup/ParameterParent", false).GetComponent<YotogiParamBasicBar>();
 			string path = "SceneYotogi/Common/Prefab/ParameterViewer";
 			string path = "SceneYotogi/Common/Prefab/ParameterViewer";
 			Vector3 zero = Vector3.zero;
 			Vector3 zero = Vector3.zero;
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 				path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 				zero = new Vector3(44f, 0f, 0f);
 				zero = new Vector3(44f, 0f, 0f);
@@ -271,16 +271,17 @@ public class YotogiPlayManager : WfScreenChildren
 		{
 		{
 			yield return null;
 			yield return null;
 		}
 		}
-		for (int i = 0; i < GameMain.Instance.CharacterMgr.GetMaidCount(); i++)
+		for (int j = 0; j < GameMain.Instance.CharacterMgr.GetMaidCount(); j++)
 		{
 		{
-			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(i);
+			Maid maid = GameMain.Instance.CharacterMgr.GetMaid(j);
 			if (maid != null && maid.Visible)
 			if (maid != null && maid.Visible)
 			{
 			{
 				maid.AllProcPropSeqStart();
 				maid.AllProcPropSeqStart();
 			}
 			}
 		}
 		}
 		GameMain.Instance.CharacterMgr.DeactivateManAll();
 		GameMain.Instance.CharacterMgr.DeactivateManAll();
-		foreach (KeyValuePair<int, string> keyValuePair in this.playing_skill_.skill_pair.base_data.man_setting)
+		Skill.Data skillData = this.playing_skill_.skill_pair.base_data;
+		foreach (KeyValuePair<int, string> keyValuePair in skillData.man_setting)
 		{
 		{
 			Maid maid2 = GameMain.Instance.CharacterMgr.CharaVisible(keyValuePair.Key, true, true);
 			Maid maid2 = GameMain.Instance.CharacterMgr.CharaVisible(keyValuePair.Key, true, true);
 			if (!string.IsNullOrEmpty(keyValuePair.Value))
 			if (!string.IsNullOrEmpty(keyValuePair.Value))
@@ -290,10 +291,49 @@ public class YotogiPlayManager : WfScreenChildren
 			maid2.body0.SetChinkoVisible(true);
 			maid2.body0.SetChinkoVisible(true);
 			maid2.AllProcPropSeqStart();
 			maid2.AllProcPropSeqStart();
 		}
 		}
+		bool npcLoad = false;
+		if (this.is_free_mode && skillData.npcmaid_setting.Length != 0)
+		{
+			int num = 3;
+			foreach (CharacterMgr.NpcData npcData in skillData.npcmaid_setting)
+			{
+				Maid maid3 = GameMain.Instance.CharacterMgr.ActivateNpc(num);
+				npcData.Apply(maid3, false);
+				maid3.Visible = true;
+				Maid maid4 = GameMain.Instance.CharacterMgr.GetMaid(num - 2);
+				if (maid4 != null)
+				{
+					maid4.Visible = false;
+				}
+				GameMain.Instance.CharacterMgr.SwapActiveSlot(num - 2, num, false);
+				num++;
+			}
+			npcLoad = true;
+		}
 		while (this.yotogi_mgr_.IsAllCharaBusy())
 		while (this.yotogi_mgr_.IsAllCharaBusy())
 		{
 		{
 			yield return null;
 			yield return null;
 		}
 		}
+		if (npcLoad)
+		{
+			for (int i = 0; i < 3; i++)
+			{
+				yield return null;
+			}
+			List<Maid> sub_madi_list = new List<Maid>();
+			if (this.playing_skill_.skill_pair.base_data != null && 1 < this.playing_skill_.skill_pair.base_data.player_num)
+			{
+				for (int m = 1; m < this.playing_skill_.skill_pair.base_data.player_num; m++)
+				{
+					Maid maid5 = GameMain.Instance.CharacterMgr.GetMaid(m);
+					if (maid5 != null)
+					{
+						sub_madi_list.Add(maid5);
+					}
+				}
+			}
+			this.undressing_mgr_.SetMaid(this.maid_, sub_madi_list.ToArray());
+		}
 		this.script_mgr_.is_motion_blend = true;
 		this.script_mgr_.is_motion_blend = true;
 		CharacterMgr chara_mgr = GameMain.Instance.CharacterMgr;
 		CharacterMgr chara_mgr = GameMain.Instance.CharacterMgr;
 		if (this.skill_pair_.base_data != null && this.skill_pair_.base_data.start_call_file != string.Empty)
 		if (this.skill_pair_.base_data != null && this.skill_pair_.base_data.start_call_file != string.Empty)
@@ -361,6 +401,24 @@ public class YotogiPlayManager : WfScreenChildren
 	public override void Update()
 	public override void Update()
 	{
 	{
 		base.Update();
 		base.Update();
+		if (Product.SPP)
+		{
+			if (0f < this.message_display_time_)
+			{
+				if (this.message_display_time_ <= Time.time)
+				{
+					this.message_display_time_ = 0f;
+				}
+				if (this.subtitlesManager != null)
+				{
+					this.subtitlesManager.visible = true;
+				}
+			}
+			else if (this.subtitlesManager != null)
+			{
+				this.subtitlesManager.visible = false;
+			}
+		}
 		if (GameMain.Instance.CMSystem.ManAlpha != this.setting_man_alpha_)
 		if (GameMain.Instance.CMSystem.ManAlpha != this.setting_man_alpha_)
 		{
 		{
 			this.man_alpha_slider_.value = (float)GameMain.Instance.CMSystem.ManAlpha / 100f;
 			this.man_alpha_slider_.value = (float)GameMain.Instance.CMSystem.ManAlpha / 100f;
@@ -503,13 +561,30 @@ public class YotogiPlayManager : WfScreenChildren
 			this.SetSkillTowerButtonEnabled(false);
 			this.SetSkillTowerButtonEnabled(false);
 		}
 		}
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
+		if (this.is_free_mode)
+		{
+			GameMain.Instance.CMSystem.SetTmpGenericFlag("AddAllOffset_Ignore", 0);
+			characterMgr.ResetCharaPosAll();
+			int num2 = 1;
+			for (;;)
+			{
+				Maid maid = characterMgr.GetMaid(num2);
+				if (maid == null || !maid.boNPC)
+				{
+					break;
+				}
+				characterMgr.SwapActiveSlot(num2 + 2, num2, false);
+				characterMgr.Deactivate(num2 + 2, false);
+				num2++;
+			}
+		}
 		for (int i = 1; i < characterMgr.GetMaidCount(); i++)
 		for (int i = 1; i < characterMgr.GetMaidCount(); i++)
 		{
 		{
-			Maid maid = characterMgr.GetMaid(i);
-			if (maid != null && maid.Visible)
+			Maid maid2 = characterMgr.GetMaid(i);
+			if (maid2 != null && maid2.Visible)
 			{
 			{
-				maid.OpenMouth(false);
-				maid.Visible = false;
+				maid2.OpenMouth(false);
+				maid2.Visible = false;
 			}
 			}
 		}
 		}
 		List<Maid> list = new List<Maid>();
 		List<Maid> list = new List<Maid>();
@@ -517,12 +592,12 @@ public class YotogiPlayManager : WfScreenChildren
 		{
 		{
 			for (int j = 1; j < this.playing_skill_.skill_pair.base_data.player_num; j++)
 			for (int j = 1; j < this.playing_skill_.skill_pair.base_data.player_num; j++)
 			{
 			{
-				Maid maid2 = characterMgr.GetMaid(j);
-				if (maid2 != null)
+				Maid maid3 = characterMgr.GetMaid(j);
+				if (maid3 != null)
 				{
 				{
-					maid2.OpenMouth(false);
-					maid2.Visible = true;
-					list.Add(maid2);
+					maid3.OpenMouth(false);
+					maid3.Visible = true;
+					list.Add(maid3);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -749,10 +824,25 @@ public class YotogiPlayManager : WfScreenChildren
 
 
 	public void SetMessageText(string text)
 	public void SetMessageText(string text)
 	{
 	{
+		if (Product.SPP && this.subtitlesManager != null)
+		{
+			this.subtitlesManager.SetTextFromScriptStyle(text);
+		}
 	}
 	}
 
 
 	public void SetMessageTextDisplayTime(int time)
 	public void SetMessageTextDisplayTime(int time)
 	{
 	{
+		if (Product.SPP)
+		{
+			if (0 < time)
+			{
+				this.message_display_time_ = Time.time + (float)time / 1000f;
+			}
+			else
+			{
+				this.message_display_time_ = 0f;
+			}
+		}
 	}
 	}
 
 
 	public void SetRepeatVoiceFile(string file_name, int maid_no)
 	public void SetRepeatVoiceFile(string file_name, int maid_no)
@@ -772,6 +862,11 @@ public class YotogiPlayManager : WfScreenChildren
 
 
 	public void AddRepeatVoiceText(string text)
 	public void AddRepeatVoiceText(string text)
 	{
 	{
+		if (Product.SPP && 0 < this.repeat_voice_data_list_.Count)
+		{
+			YotogiPlayManager.RepeatVoiceData repeatVoiceData = this.repeat_voice_data_list_[this.repeat_voice_data_list_.Count - 1];
+			repeatVoiceData.text = text;
+		}
 	}
 	}
 
 
 	public void RemoveRepeatVoiceData(int maidNo)
 	public void RemoveRepeatVoiceData(int maidNo)
@@ -1729,7 +1824,7 @@ public class YotogiPlayManager : WfScreenChildren
 				"MaidStatus/条件文/性癖【{0}】",
 				"MaidStatus/条件文/性癖【{0}】",
 				data.drawName
 				data.drawName
 			};
 			};
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				key = new string[]
 				key = new string[]
 				{
 				{
@@ -2149,6 +2244,8 @@ public class YotogiPlayManager : WfScreenChildren
 			GameMain.Instance.SoundMgr.VoiceStopAll();
 			GameMain.Instance.SoundMgr.VoiceStopAll();
 			this.yotogi_mgr_.UnVisibleMaidAndMan(true, true);
 			this.yotogi_mgr_.UnVisibleMaidAndMan(true, true);
 			this.maid_.Visible = true;
 			this.maid_.Visible = true;
+			GameMain.Instance.CMSystem.SetTmpGenericFlag("AddAllOffset_Ignore", 0);
+			GameMain.Instance.CharacterMgr.ResetCharaPosAll();
 		}
 		}
 	}
 	}
 
 

+ 11 - 7
Assembly-CSharp/YotogiResultManager.cs

@@ -14,7 +14,7 @@ public class YotogiResultManager : WfScreenChildren
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		this.common_buttons_.viwe_reset_btn.gameObject.SetActive(false);
 		this.common_buttons_.viwe_reset_btn.gameObject.SetActive(false);
 		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
 		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 		}
 		}
@@ -91,7 +91,7 @@ public class YotogiResultManager : WfScreenChildren
 		}
 		}
 		foreach (int id in hashSet2)
 		foreach (int id in hashSet2)
 		{
 		{
-			this.AddAcquiredAttribute(Propensity.GetData(id).drawName);
+			this.AddAcquiredAttribute(Propensity.GetData(id).drawName, Propensity.GetData(id).termName);
 		}
 		}
 		HashSet<int> hashSet3 = new HashSet<int>();
 		HashSet<int> hashSet3 = new HashSet<int>();
 		int[] keyArray2 = this.maid_.status.yotogiClass.datas.GetKeyArray();
 		int[] keyArray2 = this.maid_.status.yotogiClass.datas.GetKeyArray();
@@ -107,7 +107,7 @@ public class YotogiResultManager : WfScreenChildren
 		{
 		{
 			if (!YotogiClass.IsNTRClass(id2, false))
 			if (!YotogiClass.IsNTRClass(id2, false))
 			{
 			{
-				this.AddYotogiClass(YotogiClass.GetData(id2).drawName);
+				this.AddYotogiClass(YotogiClass.GetData(id2).drawName, YotogiClass.GetData(id2).termName);
 			}
 			}
 		}
 		}
 		HashSet<int> hashSet4 = new HashSet<int>();
 		HashSet<int> hashSet4 = new HashSet<int>();
@@ -128,7 +128,7 @@ public class YotogiResultManager : WfScreenChildren
 			{
 			{
 				if (data.IsExecSeikeiken(this.maid_.status.seikeiken))
 				if (data.IsExecSeikeiken(this.maid_.status.seikeiken))
 				{
 				{
-					this.AddAcquiredSkill(data.name);
+					this.AddAcquiredSkill(data.name, data.termName);
 				}
 				}
 			}
 			}
 		}
 		}
@@ -181,31 +181,34 @@ public class YotogiResultManager : WfScreenChildren
 		FluctuationOfParameterUnit component = gameObject.GetComponent<FluctuationOfParameterUnit>();
 		FluctuationOfParameterUnit component = gameObject.GetComponent<FluctuationOfParameterUnit>();
 		component.AnimeTime = this.AnimeTime;
 		component.AnimeTime = this.AnimeTime;
 		component.SetTextName(param_name);
 		component.SetTextName(param_name);
+		component.SetTextNameTerm("MaidStatus/" + param_name);
 		component.SetTextValue(value);
 		component.SetTextValue(value);
 		component.SetBGVisible((this.fluctuation_status_parent_.transform.childCount + 1) / 2 % 2 == 0);
 		component.SetBGVisible((this.fluctuation_status_parent_.transform.childCount + 1) / 2 % 2 == 0);
 		this.fluctuation_status_parent_.repositionNow = true;
 		this.fluctuation_status_parent_.repositionNow = true;
 	}
 	}
 
 
-	public void AddYotogiClass(string name)
+	public void AddYotogiClass(string name, string termName)
 	{
 	{
 		UIGrid uigrid = this.acquired_class_parent_;
 		UIGrid uigrid = this.acquired_class_parent_;
 		GameObject gameObject = Utility.CreatePrefab(uigrid.gameObject, "SceneYotogi/Result/Prefab/AcquiredYotogiClassUnit", true);
 		GameObject gameObject = Utility.CreatePrefab(uigrid.gameObject, "SceneYotogi/Result/Prefab/AcquiredYotogiClassUnit", true);
 		AcquiredSkillUnit component = gameObject.GetComponent<AcquiredSkillUnit>();
 		AcquiredSkillUnit component = gameObject.GetComponent<AcquiredSkillUnit>();
 		component.SetText(name);
 		component.SetText(name);
+		component.SetTerm(termName);
 		component.SetBGVisible(uigrid.transform.childCount % 2 != 0);
 		component.SetBGVisible(uigrid.transform.childCount % 2 != 0);
 		uigrid.repositionNow = true;
 		uigrid.repositionNow = true;
 	}
 	}
 
 
-	public void AddAcquiredSkill(string name)
+	public void AddAcquiredSkill(string name, string termName)
 	{
 	{
 		GameObject gameObject = Utility.CreatePrefab(this.acquired_skill_parent_.gameObject, "SceneYotogi/Result/Prefab/AcquiredSkillUnit", true);
 		GameObject gameObject = Utility.CreatePrefab(this.acquired_skill_parent_.gameObject, "SceneYotogi/Result/Prefab/AcquiredSkillUnit", true);
 		AcquiredSkillUnit component = gameObject.GetComponent<AcquiredSkillUnit>();
 		AcquiredSkillUnit component = gameObject.GetComponent<AcquiredSkillUnit>();
 		component.SetText(name);
 		component.SetText(name);
+		component.SetTerm(termName);
 		component.SetBGVisible(this.acquired_skill_parent_.transform.childCount % 2 != 0);
 		component.SetBGVisible(this.acquired_skill_parent_.transform.childCount % 2 != 0);
 		this.acquired_skill_parent_.repositionNow = true;
 		this.acquired_skill_parent_.repositionNow = true;
 	}
 	}
 
 
-	public void AddAcquiredAttribute(string name)
+	public void AddAcquiredAttribute(string name, string termName)
 	{
 	{
 		if (5 <= this.acquired_attribute_parent_.transform.childCount)
 		if (5 <= this.acquired_attribute_parent_.transform.childCount)
 		{
 		{
@@ -214,6 +217,7 @@ public class YotogiResultManager : WfScreenChildren
 		GameObject gameObject = Utility.CreatePrefab(this.acquired_attribute_parent_.gameObject, "SceneYotogi/Result/Prefab/AcquiredAttributeUnit", true);
 		GameObject gameObject = Utility.CreatePrefab(this.acquired_attribute_parent_.gameObject, "SceneYotogi/Result/Prefab/AcquiredAttributeUnit", true);
 		AcquiredAttributeUnit component = gameObject.GetComponent<AcquiredAttributeUnit>();
 		AcquiredAttributeUnit component = gameObject.GetComponent<AcquiredAttributeUnit>();
 		component.SetText(name);
 		component.SetText(name);
+		component.SetTerm(termName);
 		this.acquired_attribute_parent_.repositionNow = true;
 		this.acquired_attribute_parent_.repositionNow = true;
 	}
 	}
 
 

+ 1 - 1
Assembly-CSharp/YotogiSkillContainerViewer.cs

@@ -374,7 +374,7 @@ public class YotogiSkillContainerViewer
 				{
 				{
 					this.skill_name_label_.text = this.skill_data_.name;
 					this.skill_name_label_.text = this.skill_data_.name;
 				}
 				}
-				if (GameUty.supportMultiLanguage)
+				if (Product.SPP)
 				{
 				{
 					string translation = LocalizationManager.GetTranslation(this.skill_data_.termName, true, 0, true, false, null, null);
 					string translation = LocalizationManager.GetTranslation(this.skill_data_.termName, true, 0, true, false, null, null);
 					if (!string.IsNullOrEmpty(translation))
 					if (!string.IsNullOrEmpty(translation))

+ 2 - 2
Assembly-CSharp/YotogiSkillListManager.cs

@@ -180,7 +180,7 @@ public class YotogiSkillListManager : MonoBehaviour
 					{
 					{
 						if (maid.status.personal.id == data2.id)
 						if (maid.status.personal.id == data2.id)
 						{
 						{
-							string text = GameUty.supportMultiLanguage ? maid.status.personal.termName : maid.status.personal.drawName;
+							string text = Product.SPP ? maid.status.personal.termName : maid.status.personal.drawName;
 							list4.Add(new KeyValuePair<string[], Color>(new string[]
 							list4.Add(new KeyValuePair<string[], Color>(new string[]
 							{
 							{
 								"MaidStatus/条件文/ヒロインタイプ {0}",
 								"MaidStatus/条件文/ヒロインタイプ {0}",
@@ -226,7 +226,7 @@ public class YotogiSkillListManager : MonoBehaviour
 		{
 		{
 			KeyValuePair<Skill.Data, Skill.Old.Data> keyValuePair = this.instansToSkillDatas[instanceId];
 			KeyValuePair<Skill.Data, Skill.Old.Data> keyValuePair = this.instansToSkillDatas[instanceId];
 			this.conditionTitleLabel.text = ((keyValuePair.Key == null) ? keyValuePair.Value.name : keyValuePair.Key.name) + " 取得条件";
 			this.conditionTitleLabel.text = ((keyValuePair.Key == null) ? keyValuePair.Value.name : keyValuePair.Key.name) + " 取得条件";
-			if (GameUty.supportMultiLanguage)
+			if (Product.SPP)
 			{
 			{
 				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 				if (component != null)
 				if (component != null)

+ 1 - 1
Assembly-CSharp/YotogiSkillSelectManager.cs

@@ -15,7 +15,7 @@ public class YotogiSkillSelectManager : WfScreenChildren
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
 		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
 		}
 		}

+ 4 - 1
Assembly-CSharp/YotogiSkillSelectSpecialCondition.cs

@@ -102,7 +102,10 @@ public class YotogiSkillSelectSpecialCondition : MonoBehaviour
 			foreach (YotogiSkillSelectSpecialCondition.CheckBoxButtonData checkBoxButtonData in this.checkBoxButtonDatas)
 			foreach (YotogiSkillSelectSpecialCondition.CheckBoxButtonData checkBoxButtonData in this.checkBoxButtonDatas)
 			{
 			{
 				checkBoxButtonData.checkBox.check = (checkBoxButtonData.checkBox == clickCheckBox);
 				checkBoxButtonData.checkBox.check = (checkBoxButtonData.checkBox == clickCheckBox);
-				checkBoxButtonData.checkBox.Button.GetComponent<BoxCollider>().enabled = !checkBoxButtonData.checkBox.check;
+				if (UTY.GetChildObject(checkBoxButtonData.checkBox.CheckMarkOffObject, "Button", false).GetComponent<UISprite>().color.r == 1f)
+				{
+					checkBoxButtonData.checkBox.Button.GetComponent<BoxCollider>().enabled = !checkBoxButtonData.checkBox.check;
+				}
 			}
 			}
 		}
 		}
 		int j;
 		int j;

+ 1 - 1
Assembly-CSharp/YotogiSkillUnit.cs

@@ -211,7 +211,7 @@ public class YotogiSkillUnit : MonoBehaviour
 			return;
 			return;
 		}
 		}
 		this.conditionTitleLabel.text = this.skill_data_.name + " 習得条件";
 		this.conditionTitleLabel.text = this.skill_data_.name + " 習得条件";
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 			Localize component = this.conditionTitleLabel.GetComponent<Localize>();
 			if (component != null)
 			if (component != null)

+ 3 - 1
Assembly-CSharp/YotogiStageUnit.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine;
+using wf;
 
 
 public class YotogiStageUnit : MonoBehaviour
 public class YotogiStageUnit : MonoBehaviour
 {
 {
@@ -14,7 +15,7 @@ public class YotogiStageUnit : MonoBehaviour
 		this.star_parent_ = new GameObject[2];
 		this.star_parent_ = new GameObject[2];
 		this.star_parent_[0] = UTY.GetChildObject(childObject, "StarGroup", false);
 		this.star_parent_[0] = UTY.GetChildObject(childObject, "StarGroup", false);
 		this.star_parent_[1] = UTY.GetChildObject(childObject, "StarMarkGroup", false);
 		this.star_parent_[1] = UTY.GetChildObject(childObject, "StarMarkGroup", false);
-		if (GameUty.supportMultiLanguage)
+		if (Product.SPP)
 		{
 		{
 			foreach (GameObject gameObject in this.star_parent_)
 			foreach (GameObject gameObject in this.star_parent_)
 			{
 			{
@@ -53,6 +54,7 @@ public class YotogiStageUnit : MonoBehaviour
 		if (enabled)
 		if (enabled)
 		{
 		{
 			this.name_label_.text = this.stage_data_.drawName;
 			this.name_label_.text = this.stage_data_.drawName;
+			Utility.SetLocalizeTerm(this.name_label_, stage_data.termName);
 		}
 		}
 		else
 		else
 		{
 		{

+ 85 - 37
Assembly-CSharp/Yotogis/Skill.cs

@@ -1166,41 +1166,55 @@ namespace Yotogis
 				{
 				{
 					this.player_num = 1;
 					this.player_num = 1;
 				}
 				}
-				this.user_player_num = this.player_num;
+				CharacterMgr.CreateNpcData();
+				this.npcmaid_setting = new CharacterMgr.NpcData[0];
 				if (csv.IsCellToExistData(num, y))
 				if (csv.IsCellToExistData(num, y))
 				{
 				{
-					this.user_player_num = csv.GetCellAsInteger(num++, y);
+					cellAsString = csv.GetCellAsString(num++, y);
+					string[] array2 = cellAsString.Split(new char[]
+					{
+						','
+					});
+					List<CharacterMgr.NpcData> list = new List<CharacterMgr.NpcData>();
+					for (int j = 0; j < array2.Length; j++)
+					{
+						if (CharacterMgr.npcDatas.ContainsKey(array2[j].Trim()))
+						{
+							list.Add(CharacterMgr.npcDatas[array2[j].Trim()]);
+						}
+					}
+					this.npcmaid_setting = list.ToArray();
 				}
 				}
 				else
 				else
 				{
 				{
 					num++;
 					num++;
 				}
 				}
 				cellAsString = csv.GetCellAsString(num++, y);
 				cellAsString = csv.GetCellAsString(num++, y);
-				string[] array2 = cellAsString.Split(new char[]
+				string[] array3 = cellAsString.Split(new char[]
 				{
 				{
 					','
 					','
 				});
 				});
-				this.man_setting = new KeyValuePair<int, string>[array2.Length];
-				for (int j = 0; j < array2.Length; j++)
+				this.man_setting = new KeyValuePair<int, string>[array3.Length];
+				for (int k = 0; k < array3.Length; k++)
 				{
 				{
-					string text = array2[j];
+					string text = array3[k];
 					int key = 0;
 					int key = 0;
 					string value = string.Empty;
 					string value = string.Empty;
 					if (0 <= text.IndexOf("="))
 					if (0 <= text.IndexOf("="))
 					{
 					{
-						string[] array3 = text.Split(new char[]
+						string[] array4 = text.Split(new char[]
 						{
 						{
 							'='
 							'='
 						});
 						});
 						key = 1;
 						key = 1;
 						try
 						try
 						{
 						{
-							key = int.Parse(array3[0]);
+							key = int.Parse(array4[0]);
 						}
 						}
 						catch (Exception)
 						catch (Exception)
 						{
 						{
 						}
 						}
-						value = array3[1];
+						value = array4[1];
 					}
 					}
 					else
 					else
 					{
 					{
@@ -1212,64 +1226,88 @@ namespace Yotogis
 						{
 						{
 						}
 						}
 					}
 					}
-					this.man_setting[j] = new KeyValuePair<int, string>(key, value);
+					this.man_setting[k] = new KeyValuePair<int, string>(key, value);
+				}
+				this.recollectionHaremLockPersonalIds = new HashSet<int>();
+				if (csv.IsCellToExistData(num, y))
+				{
+					cellAsString = csv.GetCellAsString(num++, y);
+					string[] array5 = cellAsString.Split(new char[]
+					{
+						','
+					});
+					for (int l = 0; l < array5.Length; l++)
+					{
+						if (MaidStatus.Personal.Contains(array5[l].Trim()))
+						{
+							MaidStatus.Personal.Data data = MaidStatus.Personal.GetData(array5[l].Trim());
+							if (!this.recollectionHaremLockPersonalIds.Contains(data.id))
+							{
+								this.recollectionHaremLockPersonalIds.Add(data.id);
+							}
+						}
+					}
+				}
+				else
+				{
+					num++;
 				}
 				}
 				this.exec_seikeiken = new Dictionary<Seikeiken, bool>();
 				this.exec_seikeiken = new Dictionary<Seikeiken, bool>();
-				Seikeiken[] array4 = new Seikeiken[]
+				Seikeiken[] array6 = new Seikeiken[]
 				{
 				{
 					Seikeiken.No_No,
 					Seikeiken.No_No,
 					Seikeiken.Yes_No,
 					Seikeiken.Yes_No,
 					Seikeiken.No_Yes,
 					Seikeiken.No_Yes,
 					Seikeiken.Yes_Yes
 					Seikeiken.Yes_Yes
 				};
 				};
-				for (int k = 0; k < array4.Length; k++)
+				for (int m = 0; m < array6.Length; m++)
 				{
 				{
 					if (csv.GetCellAsString(num++, y) == "〇")
 					if (csv.GetCellAsString(num++, y) == "〇")
 					{
 					{
-						this.exec_seikeiken.Add(array4[k], true);
+						this.exec_seikeiken.Add(array6[m], true);
 					}
 					}
 				}
 				}
 				this.exec_relation = new Dictionary<MaidStatus.Relation, bool>();
 				this.exec_relation = new Dictionary<MaidStatus.Relation, bool>();
-				MaidStatus.Relation[] array5 = new MaidStatus.Relation[]
+				MaidStatus.Relation[] array7 = new MaidStatus.Relation[]
 				{
 				{
 					MaidStatus.Relation.Contact,
 					MaidStatus.Relation.Contact,
 					MaidStatus.Relation.Trust,
 					MaidStatus.Relation.Trust,
 					MaidStatus.Relation.Lover
 					MaidStatus.Relation.Lover
 				};
 				};
-				for (int l = 0; l < array5.Length; l++)
+				for (int n = 0; n < array7.Length; n++)
 				{
 				{
 					if (csv.GetCellAsString(num++, y) == "〇")
 					if (csv.GetCellAsString(num++, y) == "〇")
 					{
 					{
-						this.exec_relation.Add(array5[l], true);
+						this.exec_relation.Add(array7[n], true);
 					}
 					}
 				}
 				}
 				this.exec_contract = new Dictionary<Contract, bool>();
 				this.exec_contract = new Dictionary<Contract, bool>();
 				cellAsString = csv.GetCellAsString(num++, y);
 				cellAsString = csv.GetCellAsString(num++, y);
 				if (string.IsNullOrEmpty(cellAsString))
 				if (string.IsNullOrEmpty(cellAsString))
 				{
 				{
-					Contract[] array6 = new Contract[]
+					Contract[] array8 = new Contract[]
 					{
 					{
 						Contract.Trainee,
 						Contract.Trainee,
 						Contract.Free,
 						Contract.Free,
 						Contract.Exclusive
 						Contract.Exclusive
 					};
 					};
-					for (int m = 0; m < array6.Length; m++)
+					for (int num2 = 0; num2 < array8.Length; num2++)
 					{
 					{
-						this.exec_contract.Add(array6[m], true);
+						this.exec_contract.Add(array8[num2], true);
 					}
 					}
 				}
 				}
 				else
 				else
 				{
 				{
 					Contract contract = (Contract)Enum.Parse(typeof(Contract), cellAsString);
 					Contract contract = (Contract)Enum.Parse(typeof(Contract), cellAsString);
-					Contract[] array7 = new Contract[]
+					Contract[] array9 = new Contract[]
 					{
 					{
 						Contract.Trainee,
 						Contract.Trainee,
 						Contract.Free,
 						Contract.Free,
 						Contract.Exclusive
 						Contract.Exclusive
 					};
 					};
-					for (int n = 0; n < array7.Length; n++)
+					for (int num3 = 0; num3 < array9.Length; num3++)
 					{
 					{
-						this.exec_contract.Add(array7[n], array7[n] == contract);
+						this.exec_contract.Add(array9[num3], array9[num3] == contract);
 					}
 					}
 				}
 				}
 				cellAsString = csv.GetCellAsString(num++, y);
 				cellAsString = csv.GetCellAsString(num++, y);
@@ -1279,8 +1317,8 @@ namespace Yotogis
 				}
 				}
 				else
 				else
 				{
 				{
-					int num2 = 0;
-					bool condition = int.TryParse(cellAsString, out num2);
+					int num4 = 0;
+					bool condition = int.TryParse(cellAsString, out num4);
 					NDebug.Assert(condition, string.Concat(new object[]
 					NDebug.Assert(condition, string.Concat(new object[]
 					{
 					{
 						"夜伽スキルID[",
 						"夜伽スキルID[",
@@ -1289,7 +1327,7 @@ namespace Yotogis
 						this.name,
 						this.name,
 						"]の特殊状態指定が正しくありません。数字指定のみ受け付けます"
 						"]の特殊状態指定が正しくありません。数字指定のみ受け付けます"
 					}));
 					}));
-					this.specialConditionType = (Skill.Data.SpecialConditionType)num2;
+					this.specialConditionType = (Skill.Data.SpecialConditionType)num4;
 				}
 				}
 				if (csv.IsCellToExistData(num++, y))
 				if (csv.IsCellToExistData(num++, y))
 				{
 				{
@@ -1306,20 +1344,20 @@ namespace Yotogis
 					string cellAsString3 = csv.GetCellAsString(num++, y);
 					string cellAsString3 = csv.GetCellAsString(num++, y);
 					if (string.IsNullOrEmpty(cellAsString2))
 					if (string.IsNullOrEmpty(cellAsString2))
 					{
 					{
-						IL_5E0:
+						IL_6FD:
 						NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
 						NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
-						int[] array8 = command_data_cell_dic[this.id];
-						this.command_basic_cell_y = array8[0];
-						this.command_status_cell_y = array8[1];
+						int[] array10 = command_data_cell_dic[this.id];
+						this.command_basic_cell_y = array10[0];
+						this.command_status_cell_y = array10[1];
 						num = 0;
 						num = 0;
 						int cellAsInteger3 = csv_acq.GetCellAsInteger(num++, y);
 						int cellAsInteger3 = csv_acq.GetCellAsInteger(num++, y);
 						num++;
 						num++;
 						NDebug.Assert(cellAsInteger3 == this.id, "スキル取得条件とスキル詳細のIDラインが一致していません");
 						NDebug.Assert(cellAsInteger3 == this.id, "スキル取得条件とスキル詳細のIDラインが一致していません");
 						this.getcondition_data = new Skill.Data.GetConditionData();
 						this.getcondition_data = new Skill.Data.GetConditionData();
 						this.getcondition_data.seikeiken = new bool[4];
 						this.getcondition_data.seikeiken = new bool[4];
-						for (int num3 = 0; num3 < this.getcondition_data.seikeiken.Length; num3++)
+						for (int num5 = 0; num5 < this.getcondition_data.seikeiken.Length; num5++)
 						{
 						{
-							this.getcondition_data.seikeiken[num3] = (csv_acq.GetCellAsString(num++, y) == "〇");
+							this.getcondition_data.seikeiken[num5] = (csv_acq.GetCellAsString(num++, y) == "〇");
 						}
 						}
 						this.getcondition_data.inyoku = csv_acq.GetCellAsInteger(num++, y);
 						this.getcondition_data.inyoku = csv_acq.GetCellAsInteger(num++, y);
 						this.getcondition_data.m_value = csv_acq.GetCellAsInteger(num++, y);
 						this.getcondition_data.m_value = csv_acq.GetCellAsInteger(num++, y);
@@ -1332,14 +1370,14 @@ namespace Yotogis
 						string cellAsString4 = csv_acq.GetCellAsString(num++, y);
 						string cellAsString4 = csv_acq.GetCellAsString(num++, y);
 						if (!string.IsNullOrEmpty(cellAsString4))
 						if (!string.IsNullOrEmpty(cellAsString4))
 						{
 						{
-							string[] array9 = cellAsString4.Split(new char[]
+							string[] array11 = cellAsString4.Split(new char[]
 							{
 							{
 								','
 								','
 							});
 							});
-							this.getcondition_data.requestPersonals = new MaidStatus.Personal.Data[array9.Length];
-							for (int num4 = 0; num4 < array9.Length; num4++)
+							this.getcondition_data.requestPersonals = new MaidStatus.Personal.Data[array11.Length];
+							for (int num6 = 0; num6 < array11.Length; num6++)
 							{
 							{
-								this.getcondition_data.requestPersonals[num4] = MaidStatus.Personal.GetData(array9[num4].Trim());
+								this.getcondition_data.requestPersonals[num6] = MaidStatus.Personal.GetData(array11[num6].Trim());
 							}
 							}
 						}
 						}
 						if (csv_acq.IsCellToExistData(num, y) && csv_acq.IsCellToExistData(1, y))
 						if (csv_acq.IsCellToExistData(num, y) && csv_acq.IsCellToExistData(1, y))
@@ -1369,7 +1407,7 @@ namespace Yotogis
 						this.playable_stageid_list.Add(YotogiStage.uniqueNameToId(cellAsString2));
 						this.playable_stageid_list.Add(YotogiStage.uniqueNameToId(cellAsString2));
 					}
 					}
 				}
 				}
-				goto IL_5E0;
+				goto IL_6FD;
 			}
 			}
 
 
 			public void SetOldSkillData(Skill.Old.Data data)
 			public void SetOldSkillData(Skill.Old.Data data)
@@ -1537,6 +1575,14 @@ namespace Yotogis
 				}
 				}
 			}
 			}
 
 
+			public int user_player_num
+			{
+				get
+				{
+					return (this.npcmaid_setting != null && this.npcmaid_setting.Length != 0) ? (this.player_num - this.npcmaid_setting.Length) : this.player_num;
+				}
+			}
+
 			public Skill.Old.Data oldData { get; private set; }
 			public Skill.Old.Data oldData { get; private set; }
 
 
 			public bool isShareSkill
 			public bool isShareSkill
@@ -1591,7 +1637,9 @@ namespace Yotogis
 
 
 			public readonly int player_num;
 			public readonly int player_num;
 
 
-			public readonly int user_player_num;
+			public readonly CharacterMgr.NpcData[] npcmaid_setting;
+
+			public readonly HashSet<int> recollectionHaremLockPersonalIds;
 
 
 			public readonly KeyValuePair<int, string>[] man_setting;
 			public readonly KeyValuePair<int, string>[] man_setting;
 
 

+ 1 - 1
Assembly-CSharp/Yotogis/SkillAcquisitionCondition.cs

@@ -27,7 +27,7 @@ namespace Yotogis
 				{
 				{
 					value = true;
 					value = true;
 				}
 				}
-				string text = GameUty.supportMultiLanguage ? this.yotogi_class.termName : this.yotogi_class.drawName;
+				string text = Product.SPP ? this.yotogi_class.termName : this.yotogi_class.drawName;
 				list.Add(new KeyValuePair<string[], bool>(new string[]
 				list.Add(new KeyValuePair<string[], bool>(new string[]
 				{
 				{
 					text
 					text

+ 45 - 0
Assembly-CSharp/wf/Utility.cs

@@ -1,6 +1,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
+using I2.Loc;
 using Ionic.Zlib;
 using Ionic.Zlib;
 using UnityEngine;
 using UnityEngine;
 using ZXing;
 using ZXing;
@@ -31,6 +32,35 @@ namespace wf
 			return gameObject;
 			return gameObject;
 		}
 		}
 
 
+		public static string GetHierarchyPath(Transform parent, Transform target)
+		{
+			if (target == null)
+			{
+				return string.Empty;
+			}
+			if (parent == target)
+			{
+				return target.name;
+			}
+			string text = target.gameObject.name;
+			Transform parent2 = target.parent;
+			while (parent2 != null)
+			{
+				string name = parent2.name;
+				if (parent2 == null && parent != null)
+				{
+					return string.Empty;
+				}
+				if (parent2 == parent)
+				{
+					break;
+				}
+				parent2 = parent2.parent;
+				text = name + "/" + text;
+			}
+			return text;
+		}
+
 		public static Sprite CreateTextureSprite(string texturFileName)
 		public static Sprite CreateTextureSprite(string texturFileName)
 		{
 		{
 			if (!string.IsNullOrEmpty(texturFileName))
 			if (!string.IsNullOrEmpty(texturFileName))
@@ -82,6 +112,21 @@ namespace wf
 			return sprite;
 			return sprite;
 		}
 		}
 
 
+		public static bool SetLocalizeTerm(Component obj, string term)
+		{
+			return Product.SPP && !(obj == null) && !string.IsNullOrEmpty(term) && Utility.SetLocalizeTerm(obj.GetComponent<Localize>(), term);
+		}
+
+		public static bool SetLocalizeTerm(Localize localize, string term)
+		{
+			if (!Product.SPP || localize == null || string.IsNullOrEmpty(term))
+			{
+				return false;
+			}
+			localize.SetTerm(term);
+			return true;
+		}
+
 		public static void ResetNGUI(UIGrid grid)
 		public static void ResetNGUI(UIGrid grid)
 		{
 		{
 			grid.Reposition();
 			grid.Reposition();