denikson 5 years ago
parent
commit
212eee97d8
46 changed files with 853 additions and 319 deletions
  1. 5 5
      Assembly-CSharp.sln
  2. 3 2
      Assembly-CSharp/Assembly-CSharp.csproj
  3. 11 3
      Assembly-CSharp/BaseKagManager.cs
  4. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  5. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  6. 28 4
      Assembly-CSharp/CMSystem.cs
  7. 3 3
      Assembly-CSharp/CharacterMgr.cs
  8. 7 7
      Assembly-CSharp/CharacterSelectMain.cs
  9. 24 0
      Assembly-CSharp/ConfigCtrl.cs
  10. 37 0
      Assembly-CSharp/ConfigMgr.cs
  11. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  12. 2 3
      Assembly-CSharp/DailyCtrl.cs
  13. 1 1
      Assembly-CSharp/DeskManager.cs
  14. 3 3
      Assembly-CSharp/DynamicBone.cs
  15. 1 1
      Assembly-CSharp/DynamicSkirtBone.cs
  16. 1 1
      Assembly-CSharp/EditMod.cs
  17. 1 1
      Assembly-CSharp/FacilityManager.cs
  18. 11 3
      Assembly-CSharp/FreeModeInit.cs
  19. 3 3
      Assembly-CSharp/GameMain.cs
  20. 2 2
      Assembly-CSharp/GameUty.cs
  21. 2 2
      Assembly-CSharp/HandSignShortcut.cs
  22. 1 1
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  23. 3 3
      Assembly-CSharp/Maid.cs
  24. 1 1
      Assembly-CSharp/MaidManagementMain.cs
  25. 1 1
      Assembly-CSharp/MaidParts.cs
  26. 1 1
      Assembly-CSharp/MaidProp.cs
  27. 58 34
      Assembly-CSharp/MaidStatus/Personal.cs
  28. 9 1
      Assembly-CSharp/MaidStatus/Status.cs
  29. 1 2
      Assembly-CSharp/MaidStatusListCtrl.cs
  30. 7 7
      Assembly-CSharp/MaidTransferMain.cs
  31. 1 1
      Assembly-CSharp/Menu.cs
  32. 121 42
      Assembly-CSharp/MessageClass.cs
  33. 1 1
      Assembly-CSharp/Misc.cs
  34. 1 1
      Assembly-CSharp/ModCompile.cs
  35. 2 2
      Assembly-CSharp/OvrIK.cs
  36. 1 1
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  37. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  38. 19 13
      Assembly-CSharp/ProfileCtrl.cs
  39. 1 1
      Assembly-CSharp/Schedule/ScheduleAPI.cs
  40. 1 1
      Assembly-CSharp/ScriptManager.cs
  41. 279 0
      Assembly-CSharp/SubtitleDisplayManager.cs
  42. 188 0
      Assembly-CSharp/SubtitleMovieManager.cs
  43. 0 149
      Assembly-CSharp/SubtitlesDisplayManager.cs
  44. 1 1
      Assembly-CSharp/WindowPartsFingerPreset.cs
  45. 4 5
      Assembly-CSharp/YotogiOldManager.cs
  46. 1 1
      Assembly-CSharp/YotogiPlayManager.cs

+ 5 - 5
Assembly-CSharp.sln

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
 VisualStudioVersion = 15.0.26228.4
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{265EC8A8-1F99-4A69-B097-66490F1971D5}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{B6C45622-5B63-417E-81F1-36F0C3010B2C}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{265EC8A8-1F99-4A69-B097-66490F1971D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{265EC8A8-1F99-4A69-B097-66490F1971D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{265EC8A8-1F99-4A69-B097-66490F1971D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{265EC8A8-1F99-4A69-B097-66490F1971D5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B6C45622-5B63-417E-81F1-36F0C3010B2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B6C45622-5B63-417E-81F1-36F0C3010B2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B6C45622-5B63-417E-81F1-36F0C3010B2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B6C45622-5B63-417E-81F1-36F0C3010B2C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 3 - 2
Assembly-CSharp/Assembly-CSharp.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{265EC8A8-1F99-4A69-B097-66490F1971D5}</ProjectGuid>
+    <ProjectGuid>{B6C45622-5B63-417E-81F1-36F0C3010B2C}</ProjectGuid>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -1064,7 +1064,8 @@
     <Compile Include="SubProp.cs" />
     <Compile Include="SubSlotEditItem.cs" />
     <Compile Include="SubSlotEditManager.cs" />
-    <Compile Include="SubtitlesDisplayManager.cs" />
+    <Compile Include="SubtitleDisplayManager.cs" />
+    <Compile Include="SubtitleMovieManager.cs" />
     <Compile Include="SystemDialog.cs" />
     <Compile Include="SystemInfoHUD.cs" />
     <Compile Include="SystemShortcut.cs" />

+ 11 - 3
Assembly-CSharp/BaseKagManager.cs

@@ -1526,9 +1526,17 @@ public class BaseKagManager : IDisposable
 		{
 			millisecond = tag_data.GetTagProperty("fade").AsInteger();
 		}
-		if (tag_data.IsValid("old") && GameUty.IsEnabledCompatibilityMode)
+		if (tag_data.IsValid("old"))
 		{
-			GameMain.Instance.SoundMgr.PlayBGMLegacy(text, GameUty.MillisecondToSecond(millisecond), true);
+			string f_strFileName = Path.GetFileNameWithoutExtension(text) + "_OLD.ogg";
+			if (GameUty.FileSystem.IsExistentFile(f_strFileName))
+			{
+				GameMain.Instance.SoundMgr.PlayBGM(f_strFileName, GameUty.MillisecondToSecond(millisecond), true);
+			}
+			else
+			{
+				GameMain.Instance.SoundMgr.PlayBGMLegacy(text, GameUty.MillisecondToSecond(millisecond), true);
+			}
 		}
 		else
 		{
@@ -4093,7 +4101,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_KAG");
-		binary.Write(1140);
+		binary.Write(1150);
 		byte[] array = this.kag_.Serialize();
 		int value = array.Length;
 		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))
 			{
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
-				binaryWriter.Write(1140);
+				binaryWriter.Write(1150);
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.scale_);
 				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))
 			{
 				binaryWriter.Write(this.save_header_uidata);
-				binaryWriter.Write(1140);
+				binaryWriter.Write(1150);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{

+ 28 - 4
Assembly-CSharp/CMSystem.cs

@@ -28,6 +28,7 @@ public class CMSystem
 		this.BloomValue = 50;
 		this.MsgAlreadySkip = true;
 		this.MsgVoiceNoStop = true;
+		this.SubtitleType = SubtitleDisplayManager.DisplayType.OriginalAndSubtitle;
 		this.EjaculationSeEnabled = true;
 		this.NetUse = false;
 		this.CM3D2Path = string.Empty;
@@ -175,6 +176,18 @@ public class CMSystem
 
 	public bool MsgVoiceNoStop { get; set; }
 
+	public SubtitleDisplayManager.DisplayType SubtitleType
+	{
+		get
+		{
+			return this.m_SubtitleType;
+		}
+		set
+		{
+			this.m_SubtitleType = SubtitleDisplayManager.DisplayType.None;
+		}
+	}
+
 	public bool EjaculationSeEnabled { get; set; }
 
 	public int FadeSpeed
@@ -795,7 +808,7 @@ public class CMSystem
 	{
 		XElement xelement = new XElement("Config", new object[]
 		{
-			new XAttribute("Version", 1140),
+			new XAttribute("Version", 1150),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			{
@@ -820,6 +833,7 @@ public class CMSystem
 				new XElement("MsgAutoSpeed", this.MsgAutoSpeed),
 				new XElement("MsgAlreadySkip", this.MsgAlreadySkip),
 				new XElement("MsgVoiceNoStop", this.MsgVoiceNoStop),
+				new XElement("SubtitleType", this.SubtitleType.ToString()),
 				new XElement("EjaculationSeEnabled", this.EjaculationSeEnabled)
 			}),
 			new XElement("Other", new object[]
@@ -929,6 +943,14 @@ public class CMSystem
 				this.MsgAutoSpeed = int.Parse(this.getElemetn(xelm3, "MsgAutoSpeed", "50").Value);
 				this.MsgAlreadySkip = bool.Parse(this.getElemetn(xelm3, "MsgAlreadySkip", "true").Value);
 				this.MsgVoiceNoStop = bool.Parse(this.getElemetn(xelm3, "MsgVoiceNoStop", "true").Value);
+				try
+				{
+					this.SubtitleType = (SubtitleDisplayManager.DisplayType)Enum.Parse(typeof(SubtitleDisplayManager.DisplayType), this.getElemetn(xelm3, "SubtitleType", SubtitleDisplayManager.DisplayType.OriginalAndSubtitle.ToString()).Value);
+				}
+				catch (Exception)
+				{
+					this.SubtitleType = SubtitleDisplayManager.DisplayType.None;
+				}
 				this.EjaculationSeEnabled = bool.Parse(this.getElemetn(xelm3, "EjaculationSeEnabled", "true").Value);
 				XElement xelement2 = xelement.Element("Other");
 				if (xelement2 != null)
@@ -1103,7 +1125,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
@@ -1269,6 +1291,8 @@ public class CMSystem
 
 	private int m_nFadeSpeed = 100;
 
+	private SubtitleDisplayManager.DisplayType m_SubtitleType;
+
 	private int m_nDesktopCaptureMonitorNo = 1;
 
 	private bool m_bEditItemGroup = true;
@@ -1673,7 +1697,7 @@ public class CMSystem
 
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1140;
+			this.m_nVersion = 1150;
 		}
 
 		public void OnAfterDeserialize()
@@ -1681,7 +1705,7 @@ public class CMSystem
 		}
 
 		[SerializeField]
-		private int m_nVersion = 1140;
+		private int m_nVersion = 1150;
 
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";

+ 3 - 3
Assembly-CSharp/CharacterMgr.cs

@@ -949,7 +949,7 @@ public class CharacterMgr : MonoBehaviour
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		string result = string.Empty;
 		binaryWriter.Write("CM3D2_PRESET_S");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		binaryWriter.Write((char)presset_type);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
@@ -966,7 +966,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		{
@@ -1246,7 +1246,7 @@ public class CharacterMgr : MonoBehaviour
 	public bool Serialize(BinaryWriter bwWrite)
 	{
 		bwWrite.Write("CM3D2_CHR_MGR");
-		bwWrite.Write(1140);
+		bwWrite.Write(1150);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)

+ 7 - 7
Assembly-CSharp/CharacterSelectMain.cs

@@ -116,7 +116,7 @@ public class CharacterSelectMain : WfScreenChildren
 						{
 							draw_maid_list.Add(stockMaid2);
 						}
-						else if (stockMaid2.status.heroineType == HeroineType.Transfer)
+						else if (stockMaid2.status.isCompatiblePersonality)
 						{
 							draw_maid_list.Add(stockMaid2);
 						}
@@ -175,7 +175,7 @@ public class CharacterSelectMain : WfScreenChildren
 					{
 						draw_maid_list.Add(list3[m]);
 					}
-					else if (CharacterSelectMain.compatibilityMode && list3[m].status.heroineType == HeroineType.Transfer)
+					else if (CharacterSelectMain.compatibilityMode && list3[m].status.isCompatiblePersonality)
 					{
 						draw_maid_list.Add(list3[m]);
 					}
@@ -196,7 +196,7 @@ public class CharacterSelectMain : WfScreenChildren
 					{
 						list.Add(list2[j]);
 					}
-					else if (CharacterSelectMain.compatibilityMode && list2[j].status.heroineType == HeroineType.Transfer)
+					else if (CharacterSelectMain.compatibilityMode && list2[j].status.isCompatiblePersonality)
 					{
 						list.Add(list2[j]);
 					}
@@ -249,7 +249,7 @@ public class CharacterSelectMain : WfScreenChildren
 					{
 						draw_maid_list.Add(list3[m]);
 					}
-					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					else if (list3[m].status.isCompatiblePersonality)
 					{
 						draw_maid_list.Add(list3[m]);
 					}
@@ -284,7 +284,7 @@ public class CharacterSelectMain : WfScreenChildren
 					{
 						draw_maid_list.Add(list3[m]);
 					}
-					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					else if (list3[m].status.isCompatiblePersonality)
 					{
 						draw_maid_list.Add(list3[m]);
 					}
@@ -314,7 +314,7 @@ public class CharacterSelectMain : WfScreenChildren
 					{
 						draw_maid_list.Add(list3[m]);
 					}
-					else if (list3[m].status.heroineType == HeroineType.Transfer)
+					else if (list3[m].status.isCompatiblePersonality)
 					{
 						draw_maid_list.Add(list3[m]);
 					}
@@ -383,7 +383,7 @@ public class CharacterSelectMain : WfScreenChildren
 					Maid maid = list3[m];
 					if (maid.status.subCharaData == null || subMaidList.Contains(maid.status.subCharaData.id))
 					{
-						if (!CharacterSelectMain.compatibilityMode || maid.status.heroineType == HeroineType.Transfer)
+						if (!CharacterSelectMain.compatibilityMode || maid.status.isCompatiblePersonality)
 						{
 							draw_maid_list.Add(list3[m]);
 						}

+ 24 - 0
Assembly-CSharp/ConfigCtrl.cs

@@ -120,6 +120,26 @@ public class ConfigCtrl : MonoBehaviour
 		this.m_sequentialVoiceOff = UTY.GetChildObject(childObject2, "SequentialVoice/Off", false).GetComponent<UIButton>();
 		EventDelegate.Add(this.m_sequentialVoiceOn.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSequentialVoiceEnabled));
 		EventDelegate.Add(this.m_sequentialVoiceOff.onClick, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSequentialVoiceDisabled));
+		this.m_plSubtitleType = UTY.GetChildObject(childObject2, "Subtitle/PopupList", false).GetComponent<UIPopupList>();
+		IEnumerator enumerator6 = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
+		try
+		{
+			while (enumerator6.MoveNext())
+			{
+				object obj5 = enumerator6.Current;
+				this.MakePopupListOption(this.m_plSubtitleType, SubtitleDisplayManager.EnumConvert.GetString((SubtitleDisplayManager.DisplayType)obj5));
+			}
+		}
+		finally
+		{
+			IDisposable disposable5;
+			if ((disposable5 = (enumerator6 as IDisposable)) != null)
+			{
+				disposable5.Dispose();
+			}
+		}
+		EventDelegate.Add(this.m_plSubtitleType.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnSubtitleDisplayTypeChange));
+		this.m_plSubtitleType.transform.parent.gameObject.SetActive(false);
 		GameObject childObject3 = UTY.GetChildObject(configPanel, "Sound", false);
 		this.m_slMasterVolume = UTY.GetChildObject(childObject3, "MasterVolume/Slider", false).GetComponent<UISlider>();
 		EventDelegate.Add(this.m_slMasterVolume.onChange, new EventDelegate.Callback(BaseMgr<ConfigMgr>.Instance.OnMasterVolumeChange));
@@ -250,6 +270,8 @@ public class ConfigCtrl : MonoBehaviour
 			" sliderValue=",
 			num
 		}));
+		SubtitleDisplayManager.DisplayType subtitleType = GameMain.Instance.CMSystem.SubtitleType;
+		this.m_plSubtitleType.value = SubtitleDisplayManager.EnumConvert.GetString(subtitleType);
 		bool msgVoiceNoStop = GameMain.Instance.CMSystem.MsgVoiceNoStop;
 		Debug.Log("Load alreadyReadSkipEnabled:" + msgVoiceNoStop);
 		this.SetButtonActive(this.m_sequentialVoiceOn, this.m_sequentialVoiceOff, msgVoiceNoStop);
@@ -609,6 +631,8 @@ public class ConfigCtrl : MonoBehaviour
 		return Regex.Replace(str, "[\\r\\n]+$", string.Empty);
 	}
 
+	public UIPopupList m_plSubtitleType;
+
 	private UIPopupList m_resolution;
 
 	private UIPopupList m_plResolution;

+ 37 - 0
Assembly-CSharp/ConfigMgr.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections;
 using UnityEngine;
 
 public class ConfigMgr : BaseMgr<ConfigMgr>
@@ -108,6 +109,42 @@ public class ConfigMgr : BaseMgr<ConfigMgr>
 		this.m_configCtrl.ChangePopupListValue<CMSystem.SSSuperSizeType>(value);
 	}
 
+	public void OnSubtitleDisplayTypeChange()
+	{
+		if (!this.m_bInited)
+		{
+			return;
+		}
+		string value = UIPopupList.current.value;
+		this.SubtitleDisplayTypeChange(value);
+	}
+
+	public void SubtitleDisplayTypeChange(string typeName)
+	{
+		IEnumerator enumerator = Enum.GetValues(typeof(SubtitleDisplayManager.DisplayType)).GetEnumerator();
+		try
+		{
+			while (enumerator.MoveNext())
+			{
+				object obj = enumerator.Current;
+				string @string = SubtitleDisplayManager.EnumConvert.GetString((SubtitleDisplayManager.DisplayType)obj);
+				if (typeName == @string)
+				{
+					GameMain.Instance.CMSystem.SubtitleType = (SubtitleDisplayManager.DisplayType)obj;
+					break;
+				}
+			}
+		}
+		finally
+		{
+			IDisposable disposable;
+			if ((disposable = (enumerator as IDisposable)) != null)
+			{
+				disposable.Dispose();
+			}
+		}
+	}
+
 	public void OnBloomChange()
 	{
 		if (!this.m_bInited)

+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

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

+ 2 - 3
Assembly-CSharp/DailyCtrl.cs

@@ -1,7 +1,6 @@
 using System;
 using System.Collections.Generic;
 using com.workman.cm3d2.button;
-using MaidStatus;
 using PlayerStatus;
 using Schedule;
 using UnityEngine;
@@ -97,7 +96,7 @@ public class DailyCtrl : MonoBehaviour
 		{
 			this.GetMenuButton(type).active = false;
 		}
-		PlayerStatus.Status status = GameMain.Instance.CharacterMgr.status;
+		Status status = GameMain.Instance.CharacterMgr.status;
 		if (!status.isAvailableDance)
 		{
 			this.GetMenuButton(DailyCtrl.ButtonType.Dance).active = false;
@@ -204,7 +203,7 @@ public class DailyCtrl : MonoBehaviour
 		bool result = false;
 		foreach (Maid maid in stockMaidList)
 		{
-			if (maid != null && maid.status.heroineType == HeroineType.Transfer)
+			if (maid != null && maid.status.isCompatiblePersonality)
 			{
 				result = true;
 			}

+ 1 - 1
Assembly-CSharp/DeskManager.cs

@@ -143,7 +143,7 @@ internal class DeskManager
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_DeskCustomize");
-		binary.Write(1140);
+		binary.Write(1150);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		{

+ 3 - 3
Assembly-CSharp/DynamicBone.cs

@@ -30,7 +30,7 @@ public class DynamicBone : MonoBehaviour
 			return false;
 		};
 		f_bw.Write("CM3D21_PHY");
-		f_bw.Write(1140);
+		f_bw.Write(1150);
 		if (this.m_Root == null)
 		{
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
@@ -94,7 +94,7 @@ public class DynamicBone : MonoBehaviour
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	{
 		f_bw.Write("CM3D21_COL");
-		f_bw.Write(1140);
+		f_bw.Write(1150);
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		{
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
@@ -110,7 +110,7 @@ public class DynamicBone : MonoBehaviour
 			else
 			{
 				f_bw.Write(this.m_Colliders[i].TypeName);
-				this.m_Colliders[i].Serialize(f_bw, 1140);
+				this.m_Colliders[i].Serialize(f_bw, 1150);
 			}
 		}
 		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)
 	{
 		f_bw.Write("CM3D21_PSK");
-		f_bw.Write(1140);
+		f_bw.Write(1150);
 		f_bw.Write(this.m_fPanierRadius);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;

+ 1 - 1
Assembly-CSharp/EditMod.cs

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

+ 1 - 1
Assembly-CSharp/FacilityManager.cs

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

+ 11 - 3
Assembly-CSharp/FreeModeInit.cs

@@ -1,5 +1,5 @@
 using System;
-using MaidStatus;
+using System.IO;
 using UnityEngine;
 
 public class FreeModeInit : WfScreenChildren
@@ -78,13 +78,21 @@ public class FreeModeInit : WfScreenChildren
 			string bgmFileName = maid.status.personal.bgmFileName;
 			if (!string.IsNullOrEmpty(bgmFileName))
 			{
-				if (maid.status.heroineType == HeroineType.Transfer)
+				if (maid.status.isCompatiblePersonality)
 				{
 					GameMain.Instance.SoundMgr.PlayBGMLegacy(bgmFileName, 0.5f, true);
 				}
 				else
 				{
-					GameMain.Instance.SoundMgr.PlayBGM(bgmFileName, 0.5f, true);
+					string text = (!maid.status.personal.oldPersonal) ? string.Empty : (Path.GetFileNameWithoutExtension(bgmFileName) + "_OLD.ogg");
+					if (!string.IsNullOrEmpty(text) && GameUty.FileSystem.IsExistentFile(text))
+					{
+						GameMain.Instance.SoundMgr.PlayBGM(text, 0.5f, true);
+					}
+					else
+					{
+						GameMain.Instance.SoundMgr.PlayBGM(bgmFileName, 0.5f, true);
+					}
 				}
 			}
 			maid.Visible = false;

+ 3 - 3
Assembly-CSharp/GameMain.cs

@@ -666,7 +666,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.nMaidNum = this.m_CharacterMgr.GetStockMaidCount();
 		serializeHeader.strComment = f_strComment;
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -675,7 +675,7 @@ public class GameMain : MonoSingleton<GameMain>
 		bool value = false;
 		foreach (Maid maid in this.m_CharacterMgr.GetStockMaidList())
 		{
-			if (maid.status.heroineType == HeroineType.Transfer)
+			if (maid.status.isCompatiblePersonality)
 			{
 				value = true;
 				break;
@@ -780,7 +780,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		File.WriteAllBytes(path, memoryStream.ToArray());

+ 2 - 2
Assembly-CSharp/GameUty.cs

@@ -912,14 +912,14 @@ public class GameUty
 
 	public static string GetBuildVersionText()
 	{
-		int num = 1140;
+		int num = 1150;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 
 	public static string GetGameVersionText()
 	{
 		string text = "COM3D2x64.exe";
-		int num = 1140;
+		int num = 1150;
 		string path = Path.GetFullPath(".\\") + "update.lst";
 		string[] array = new string[0];
 		if (File.Exists(path))

+ 2 - 2
Assembly-CSharp/HandSignShortcut.cs

@@ -494,7 +494,7 @@ public class HandSignShortcut : MonoBehaviour
 	{
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1140;
+			this.m_nVersion = 1150;
 		}
 
 		public void OnAfterDeserialize()
@@ -803,7 +803,7 @@ public class HandSignShortcut : MonoBehaviour
 		private const string CONF_NAME = "MaidFingerDataList.json";
 
 		[SerializeField]
-		private int m_nVersion = 1140;
+		private int m_nVersion = 1150;
 
 		[SerializeField]
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();

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

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

+ 3 - 3
Assembly-CSharp/Maid.cs

@@ -1205,7 +1205,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1140);
+		f_bwWrite.Write(1150);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
 		{
@@ -1237,7 +1237,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1140);
+		f_bwWrite.Write(1150);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		{
@@ -1262,7 +1262,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1140);
+		f_bwWrite.Write(1150);
 		return true;
 	}
 

+ 1 - 1
Assembly-CSharp/MaidManagementMain.cs

@@ -112,7 +112,7 @@ public class MaidManagementMain : WfScreenChildren
 			CharacterSelectManager.DefaultMaidList(list);
 			for (int k = 0; k < list.Count; k++)
 			{
-				if (list[k].status.heroineType == HeroineType.Transfer)
+				if (list[k].status.isCompatiblePersonality)
 				{
 					draw_maid_list.Add(list[k]);
 				}

+ 1 - 1
Assembly-CSharp/MaidParts.cs

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

+ 1 - 1
Assembly-CSharp/MaidProp.cs

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

+ 58 - 34
Assembly-CSharp/MaidStatus/Personal.cs

@@ -86,40 +86,20 @@ namespace MaidStatus
 			}
 			Personal.commonIdManager = new CsvCommonIdManager("maid_status_personal", "性格", CsvCommonIdManager.Type.IdAndUniqueName, null);
 			Personal.basicDatas = new Dictionary<int, Personal.Data>();
-			using (AFileBase afileBase = GameUty.FileSystem.FileOpen("maid_status_personal_request_plugin.nei"))
-			{
-				using (CsvParser csvParser = new CsvParser())
-				{
-					csvParser.Open(afileBase);
-					NDebug.Assert(csvParser.IsValid(), "maid_status_personal_request_plugin\nopen failed.");
-					for (int i = 1; i < csvParser.max_cell_y; i++)
-					{
-						int cellAsInteger = csvParser.GetCellAsInteger(0, i);
-						string cellAsString = csvParser.GetCellAsString(3, i);
-						if (!string.IsNullOrEmpty(cellAsString))
-						{
-							if (Personal.commonIdManager.enabledIdList.Contains(cellAsInteger) && !PluginData.IsEnabled(cellAsString))
-							{
-								Personal.commonIdManager.enabledIdList.Remove(cellAsInteger);
-							}
-						}
-					}
-				}
-			}
 			string[] array = new string[]
 			{
 				"list",
 				"feature_condition"
 			};
 			KeyValuePair<AFileBase, CsvParser>[] array2 = new KeyValuePair<AFileBase, CsvParser>[array.Length];
-			for (int j = 0; j < array2.Length; j++)
+			for (int i = 0; i < array2.Length; i++)
 			{
-				string text = "maid_status_personal_" + array[j] + ".nei";
-				AFileBase afileBase2 = GameUty.FileSystem.FileOpen(text);
-				CsvParser csvParser2 = new CsvParser();
-				bool condition = csvParser2.Open(afileBase2);
+				string text = "maid_status_personal_" + array[i] + ".nei";
+				AFileBase afileBase = GameUty.FileSystem.FileOpen(text);
+				CsvParser csvParser = new CsvParser();
+				bool condition = csvParser.Open(afileBase);
 				NDebug.Assert(condition, text + "\nopen failed.");
-				array2[j] = new KeyValuePair<AFileBase, CsvParser>(afileBase2, csvParser2);
+				array2[i] = new KeyValuePair<AFileBase, CsvParser>(afileBase, csvParser);
 			}
 			foreach (KeyValuePair<int, KeyValuePair<string, string>> keyValuePair in Personal.commonIdManager.idMap)
 			{
@@ -157,28 +137,68 @@ namespace MaidStatus
 						this.bgmFileName = Path.ChangeExtension(basicCsv.GetCellAsString(num++, i), ".ogg");
 						string cellAsString = basicCsv.GetCellAsString(num++, i);
 						this.oldPersonal = (cellAsString == "〇");
-						string[] array = basicCsv.GetCellAsString(num++, i).Split(new char[]
+						cellAsString = basicCsv.GetCellAsString(num++, i);
+						if (this.oldPersonal)
+						{
+							this.compatible = true;
+							foreach (string text in cellAsString.Split(new char[]
+							{
+								','
+							}))
+							{
+								if (!string.IsNullOrEmpty(text) && !PluginData.IsEnabled(text))
+								{
+									this.compatible = false;
+									break;
+								}
+							}
+						}
+						else
+						{
+							this.compatible = false;
+						}
+						cellAsString = basicCsv.GetCellAsString(num++, i);
+						if (this.oldPersonal)
+						{
+							this.single = true;
+							foreach (string text2 in cellAsString.Split(new char[]
+							{
+								','
+							}))
+							{
+								if (!string.IsNullOrEmpty(text2) && !PluginData.IsEnabled(text2))
+								{
+									this.single = false;
+									break;
+								}
+							}
+						}
+						else
+						{
+							this.single = true;
+						}
+						string[] array3 = basicCsv.GetCellAsString(num++, i).Split(new char[]
 						{
 							'/'
 						});
-						this.competitiveMotionFileVictory = new KeyValuePair<string, string>(Path.ChangeExtension(array[0], ".ks"), array[1]);
-						array = basicCsv.GetCellAsString(num++, i).Split(new char[]
+						this.competitiveMotionFileVictory = new KeyValuePair<string, string>(Path.ChangeExtension(array3[0], ".ks"), array3[1]);
+						array3 = basicCsv.GetCellAsString(num++, i).Split(new char[]
 						{
 							'/'
 						});
-						this.competitiveMotionFileDefeat = new KeyValuePair<string, string>(Path.ChangeExtension(array[0], ".ks"), array[1]);
+						this.competitiveMotionFileDefeat = new KeyValuePair<string, string>(Path.ChangeExtension(array3[0], ".ks"), array3[1]);
 						break;
 					}
 				}
 				this.acquisitionFeatureList = new List<Personal.Data.LearnFeature>();
-				for (int j = 0; j < featureConditionsCsv.max_cell_y; j++)
+				for (int l = 0; l < featureConditionsCsv.max_cell_y; l++)
 				{
-					if (featureConditionsCsv.IsCellToExistData(0, j) && featureConditionsCsv.GetCellAsString(0, j) == this.uniqueName)
+					if (featureConditionsCsv.IsCellToExistData(0, l) && featureConditionsCsv.GetCellAsString(0, l) == this.uniqueName)
 					{
 						int num2 = 0;
-						while (featureConditionsCsv.IsCellToExistData(1, j + num2))
+						while (featureConditionsCsv.IsCellToExistData(1, l + num2))
 						{
-							this.acquisitionFeatureList.Add(new Personal.Data.LearnFeature(featureConditionsCsv, j + num2));
+							this.acquisitionFeatureList.Add(new Personal.Data.LearnFeature(featureConditionsCsv, l + num2));
 							num2++;
 						}
 						break;
@@ -198,6 +218,10 @@ namespace MaidStatus
 
 			public readonly bool oldPersonal;
 
+			public readonly bool compatible;
+
+			public readonly bool single;
+
 			public readonly KeyValuePair<string, string> competitiveMotionFileVictory;
 
 			public readonly KeyValuePair<string, string> competitiveMotionFileDefeat;

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

@@ -768,6 +768,14 @@ namespace MaidStatus
 
 		public Status OldStatus { get; private set; }
 
+		public bool isCompatiblePersonality
+		{
+			get
+			{
+				return this.heroineType == HeroineType.Transfer && this.personal.compatible;
+			}
+		}
+
 		public static string ConvertString(string str, int maxStrSize = 8)
 		{
 			str = Regex.Replace(str, "[\\r\\n\\t\\\\]", string.Empty);
@@ -1199,7 +1207,7 @@ namespace MaidStatus
 		public void Serialize(BinaryWriter binary)
 		{
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1140);
+			binary.Write(1150);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);

+ 1 - 2
Assembly-CSharp/MaidStatusListCtrl.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using MaidStatus;
 using Schedule;
 using UnityEngine;
 
@@ -28,7 +27,7 @@ public class MaidStatusListCtrl : MonoBehaviour
 			for (int i = 0; i < list.Count; i++)
 			{
 				Maid maid = list[i];
-				if (!DailyMgr.IsLegacy || maid.status.heroineType == HeroineType.Transfer)
+				if (!DailyMgr.IsLegacy || maid.status.isCompatiblePersonality)
 				{
 					draw_maid_list.Add(list[i]);
 				}

+ 7 - 7
Assembly-CSharp/MaidTransferMain.cs

@@ -173,13 +173,13 @@ public class MaidTransferMain : WfFadeBehaviour
 	{
 		List<Maid> list = new List<Maid>();
 		Dictionary<MaidStatus.Old.Personal, bool> dictionary = new Dictionary<MaidStatus.Old.Personal, bool>();
-		dictionary.Add(MaidStatus.Old.Personal.Pure, MaidStatus.Personal.IsEnabled("Pure"));
-		dictionary.Add(MaidStatus.Old.Personal.Pride, MaidStatus.Personal.IsEnabled("Pride"));
-		dictionary.Add(MaidStatus.Old.Personal.Cool, MaidStatus.Personal.IsEnabled("Cool"));
-		dictionary.Add(MaidStatus.Old.Personal.Yandere, MaidStatus.Personal.IsEnabled("Yandere"));
-		dictionary.Add(MaidStatus.Old.Personal.Anesan, MaidStatus.Personal.IsEnabled("Anesan"));
-		dictionary.Add(MaidStatus.Old.Personal.Genki, MaidStatus.Personal.IsEnabled("Genki"));
-		dictionary.Add(MaidStatus.Old.Personal.Sadist, MaidStatus.Personal.IsEnabled("Sadist"));
+		dictionary.Add(MaidStatus.Old.Personal.Pure, MaidStatus.Personal.IsEnabled("Pure") && MaidStatus.Personal.GetData("Pure").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Pride, MaidStatus.Personal.IsEnabled("Pride") && MaidStatus.Personal.GetData("Pride").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Cool, MaidStatus.Personal.IsEnabled("Cool") && MaidStatus.Personal.GetData("Cool").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Yandere, MaidStatus.Personal.IsEnabled("Yandere") && MaidStatus.Personal.GetData("Yandere").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Anesan, MaidStatus.Personal.IsEnabled("Anesan") && MaidStatus.Personal.GetData("Anesan").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Genki, MaidStatus.Personal.IsEnabled("Genki") && MaidStatus.Personal.GetData("Genki").compatible);
+		dictionary.Add(MaidStatus.Old.Personal.Sadist, MaidStatus.Personal.IsEnabled("Sadist") && MaidStatus.Personal.GetData("Sadist").compatible);
 		HashSet<string> hashSet = new HashSet<string>();
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 		for (int i = 0; i < characterMgr.GetStockMaidCount(); i++)

+ 1 - 1
Assembly-CSharp/Menu.cs

@@ -747,7 +747,7 @@ public class Menu : MonoBehaviour
 			Directory.CreateDirectory(text);
 		}
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
-		streamWriter.WriteLine("出力バージョン\t" + 1140);
+		streamWriter.WriteLine("出力バージョン\t" + 1150);
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		try
 		{

+ 121 - 42
Assembly-CSharp/MessageClass.cs

@@ -13,10 +13,13 @@ public class MessageClass
 		this.message_window_panel_ = message_window_panel;
 		this.message_label_ = UTY.GetChildObject(this.message_window_panel_, "MessageViewer/MsgParent/Message", false).GetComponent<UILabel>();
 		this.name_label_ = UTY.GetChildObject(this.message_window_panel_, "MessageViewer/MsgParent/SpeakerName/Name", false).GetComponent<UILabel>();
+		this.subtitles_manager_ = UTY.GetChildObject(this.message_window_panel_, "MessageViewer/MsgParent/SubtitlesDisplayPanel", false).GetComponent<SubtitleDisplayManager>();
 		this.hitret_sprite_ = UTY.GetChildObject(this.message_window_panel_, "MessageViewer/MsgParent/Hitret", false).GetComponent<UISprite>();
-		NDebug.AssertNull(this.message_label_ != null && this.name_label_ != null && this.hitret_sprite_ != null);
-		this.message_label_.ProcessText();
 		this.hitret_sprite_.alpha = 0f;
+		this.mainTextAnimation = new MessageClass.TextAnimation();
+		this.subTextAnimation = new MessageClass.TextAnimation();
+		this.subtitles_manager_.visible = false;
+		this.subtitles_manager_ = null;
 	}
 
 	public static KeyValuePair<string, string> GetTranslationText(string baseText)
@@ -111,59 +114,54 @@ public class MessageClass
 	public void SetText(string name, string text, string voice_file, int voice_pitch)
 	{
 		this.exit_wait_count_ = -1;
-		this.name_label_.text = name;
-		this.ch_anime_data_.Clear();
-		this.ch_anime_data_.text_info = new StringInfo(MessageClass.GetWrapString(this.message_label_, text));
-		this.ch_anime_data_.type = MessageClass.ChAnimeData.Type.Execution;
-		this.ch_anime_data_.start_time = GameMain.tick_count;
-		this.ch_anime_data_.start_time = this.ch_anime_data_.start_time - this.ch_wait;
 		this.hitret_sprite_.alpha = 0f;
-		this.message_mgr_.AddBackLog(name, this.ch_anime_data_.text_info.String, voice_file, voice_pitch);
+		this.charaNameText = name;
+		this.mainTextAnimation.StartAnimation(MessageClass.GetWrapString(this.message_label_, text));
+		this.message_mgr_.AddBackLog(name, this.mainTextAnimation.text, voice_file, voice_pitch);
 		this.Update();
 	}
 
 	public void Clear()
 	{
 		this.exit_wait_count_ = -1;
-		UILabel uilabel = this.message_label_;
 		string empty = string.Empty;
-		this.name_label_.text = empty;
-		uilabel.text = empty;
-		this.ch_anime_data_.Clear();
+		this.charaNameText = empty;
+		this.messageText = empty;
+		this.mainTextAnimation.Clear();
+		this.subTextAnimation.Clear();
 		this.hitret_sprite_.alpha = 0f;
 	}
 
 	public void FinishChAnime()
 	{
-		if (this.ch_anime_data_.type == MessageClass.ChAnimeData.Type.Null)
+		if (!this.ch_anime_enabled)
 		{
 			return;
 		}
-		this.message_label_.text = this.ch_anime_data_.text_info.String;
-		this.ch_anime_data_.Clear();
+		this.messageText = this.mainTextAnimation.text;
+		this.mainTextAnimation.Clear();
+		this.subtitlesText = this.subTextAnimation.text;
+		this.subTextAnimation.Clear();
 		this.hitret_sprite_.alpha = 255f;
 		this.exit_wait_count_ = GameMain.tick_count;
 	}
 
 	public void Update()
 	{
-		if (this.ch_anime_data_.type == MessageClass.ChAnimeData.Type.Null)
+		if (!this.ch_anime_enabled)
 		{
 			return;
 		}
-		if (this.skip_mode || this.ch_wait <= 0)
-		{
-			this.FinishChAnime();
-			return;
-		}
-		int num = Mathf.Max(0, Mathf.Min((GameMain.tick_count - this.ch_anime_data_.start_time) / this.ch_wait, this.ch_anime_data_.text_info.LengthInTextElements));
-		if (num == this.ch_anime_data_.text_info.LengthInTextElements)
+		KeyValuePair<bool, string> keyValuePair = this.mainTextAnimation.UodateAnimation();
+		KeyValuePair<bool, string> keyValuePair2 = this.subTextAnimation.UodateAnimation();
+		if (this.skip_mode || keyValuePair.Key)
 		{
 			this.FinishChAnime();
 		}
 		else
 		{
-			this.message_label_.text = this.ch_anime_data_.text_info.SubstringByTextElements(0, num);
+			this.messageText = keyValuePair.Value;
+			this.subtitlesText = (keyValuePair2.Key ? this.subTextAnimation.text : keyValuePair2.Value);
 		}
 	}
 
@@ -176,15 +174,48 @@ public class MessageClass
 	{
 		get
 		{
-			return this.ch_anime_data_.type == MessageClass.ChAnimeData.Type.Execution;
+			return this.mainTextAnimation.isPlay;
 		}
 	}
 
-	private int ch_wait
+	private string messageText
 	{
-		get
+		set
+		{
+			if (this.message_label_ != null)
+			{
+				this.message_label_.text = value;
+			}
+			if (this.subtitles_manager_ != null)
+			{
+				this.subtitles_manager_.originalText = value;
+			}
+		}
+	}
+
+	private string subtitlesText
+	{
+		set
+		{
+			if (this.subtitles_manager_ != null)
+			{
+				this.subtitles_manager_.subtitlesText = value;
+			}
+		}
+	}
+
+	private string charaNameText
+	{
+		set
 		{
-			return (int)((100f - (float)GameMain.Instance.CMSystem.MsgTextSpeed) * 1.5f);
+			if (this.name_label_ != null)
+			{
+				this.name_label_.text = value;
+			}
+			if (this.subtitles_manager_ != null)
+			{
+				this.subtitles_manager_.charaNameText = value;
+			}
 		}
 	}
 
@@ -204,34 +235,82 @@ public class MessageClass
 
 	private readonly ScriptManager script_mgr_;
 
+	private UISprite hitret_sprite_;
+
+	private int exit_wait_count_;
+
+	private MessageClass.TextAnimation mainTextAnimation;
+
+	private MessageClass.TextAnimation subTextAnimation;
+
 	private UILabel message_label_;
 
 	private UILabel name_label_;
 
-	private UISprite hitret_sprite_;
+	public SubtitleDisplayManager subtitles_manager_;
 
-	private MessageClass.ChAnimeData ch_anime_data_;
+	private class TextAnimation
+	{
+		private int ch_wait
+		{
+			get
+			{
+				return (int)((100f - (float)GameMain.Instance.CMSystem.MsgTextSpeed) * 1.5f);
+			}
+		}
 
-	private int exit_wait_count_;
+		public bool isPlay
+		{
+			get
+			{
+				return this.type != MessageClass.TextAnimation.Type.Null;
+			}
+		}
+
+		public string text
+		{
+			get
+			{
+				return (this.text_info == null) ? string.Empty : this.text_info.String;
+			}
+		}
+
+		public void StartAnimation(string text)
+		{
+			this.Clear();
+			this.text_info = new StringInfo(text);
+			this.type = MessageClass.TextAnimation.Type.Execution;
+			this.start_time = GameMain.tick_count - this.ch_wait;
+		}
+
+		public KeyValuePair<bool, string> UodateAnimation()
+		{
+			if (this.type == MessageClass.TextAnimation.Type.Null || this.ch_wait <= 0)
+			{
+				return new KeyValuePair<bool, string>(true, null);
+			}
+			int num = Mathf.Max(0, Mathf.Min((GameMain.tick_count - this.start_time) / this.ch_wait, this.text_info.LengthInTextElements));
+			if (num == this.text_info.LengthInTextElements)
+			{
+				return new KeyValuePair<bool, string>(true, null);
+			}
+			return new KeyValuePair<bool, string>(false, this.text_info.SubstringByTextElements(0, num));
+		}
 
-	private struct ChAnimeData
-	{
 		public void Clear()
 		{
-			this.type = MessageClass.ChAnimeData.Type.Null;
-			this.start_time = (this.cur_pos = 0);
+			this.type = MessageClass.TextAnimation.Type.Null;
+			this.start_time = 0;
 			this.text_info = null;
 		}
 
-		public MessageClass.ChAnimeData.Type type;
-
-		public int start_time;
+		private MessageClass.TextAnimation.Type type;
 
-		public StringInfo text_info;
+		private int start_time;
 
-		public int cur_pos;
+		private StringInfo text_info;
 
-		public enum Type
+		private enum Type
 		{
 			Null,
 			Execution

+ 1 - 1
Assembly-CSharp/Misc.cs

@@ -2,7 +2,7 @@
 
 public class Misc
 {
-	public const int GAME_VERSION = 1140;
+	public const int GAME_VERSION = 1150;
 
 	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();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MESH");
-		binaryWriter.Write(1140);
+		binaryWriter.Write(1150);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(exObjIn2.strName);

+ 2 - 2
Assembly-CSharp/OvrIK.cs

@@ -1403,7 +1403,7 @@ public class OvrIK : MonoBehaviour
 	{
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1140;
+			this.m_nVersion = 1150;
 		}
 
 		public void OnAfterDeserialize()
@@ -1463,7 +1463,7 @@ public class OvrIK : MonoBehaviour
 		private const string CONF_NAME = "OvrIK.json";
 
 		[SerializeField]
-		private int m_nVersion = 1140;
+		private int m_nVersion = 1150;
 
 		[SerializeField]
 		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)
 	{
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
-		XElement xelement = new XElement("GameVersion", 1140);
+		XElement xelement = new XElement("GameVersion", 1150);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);

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

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

+ 19 - 13
Assembly-CSharp/ProfileCtrl.cs

@@ -72,15 +72,31 @@ public class ProfileCtrl : MonoBehaviour
 		GameObject childObject3 = UTY.GetChildObject(this.m_goProfilePanel, "CharacterInfo/Personal/PopupList", false);
 		this.m_pPersonal = childObject3.GetComponent<UIPopupList>();
 		this.m_lPersonal = UTY.GetChildObject(childObject3, "LabelParent/Label", false).GetComponent<UILabel>();
+		bool flag = GameMain.Instance.CharacterMgr.status.GetFlag("オープニング終了") == 1;
 		List<Personal.Data> allDatas = Personal.GetAllDatas(true);
 		List<Personal.Data> list = new List<Personal.Data>();
 		foreach (Personal.Data data in allDatas)
 		{
+			string a = data.uniqueName.ToLower();
 			if (data.oldPersonal)
 			{
-				if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
+				if (a == "pure" || a == "cool" || a == "pride")
 				{
-					list.Add(data);
+					if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
+					{
+						list.Add(data);
+					}
+				}
+				else if (flag)
+				{
+					if (data.single)
+					{
+						list.Add(data);
+					}
+					else if (!string.IsNullOrEmpty(GameMain.Instance.CMSystem.CM3D2Path) && data.compatible)
+					{
+						list.Add(data);
+					}
 				}
 			}
 			else
@@ -91,17 +107,7 @@ public class ProfileCtrl : MonoBehaviour
 		this.m_pPersonal.items.Clear();
 		foreach (Personal.Data data2 in list)
 		{
-			if (data2.oldPersonal)
-			{
-				if (GameMain.Instance.CharacterMgr.status.isAvailableTransfer)
-				{
-					this.m_pPersonal.items.Add(data2.drawName);
-				}
-			}
-			else
-			{
-				this.m_pPersonal.items.Add(data2.drawName);
-			}
+			this.m_pPersonal.items.Add(data2.drawName);
 		}
 		EventDelegate.Add(this.m_pPersonal.onChange, delegate
 		{

+ 1 - 1
Assembly-CSharp/Schedule/ScheduleAPI.cs

@@ -1502,7 +1502,7 @@ namespace Schedule
 					for (int j = 0; j < GameMain.Instance.CharacterMgr.GetStockMaidCount(); j++)
 					{
 						Maid stockMaid = GameMain.Instance.CharacterMgr.GetStockMaid(j);
-						if (stockMaid != null && stockMaid.status.heroineType == HeroineType.Transfer)
+						if (stockMaid != null && stockMaid.status.isCompatiblePersonality)
 						{
 							GameMain.Instance.CharacterMgr.status.scheduleSlot[0].maid_guid = stockMaid.status.guid;
 							break;

+ 1 - 1
Assembly-CSharp/ScriptManager.cs

@@ -2920,7 +2920,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1140);
+		binary.Write(1150);
 		this.adv_kag_.Serialize(binary);
 	}
 

+ 279 - 0
Assembly-CSharp/SubtitleDisplayManager.cs

@@ -0,0 +1,279 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SubtitleDisplayManager : MonoBehaviour
+{
+	public string charaNameText
+	{
+		get
+		{
+			return this.charaNameText_;
+		}
+		set
+		{
+			this.Awake();
+			if (this.charaNameText_ == value)
+			{
+				return;
+			}
+			this.charaNameText_ = ((!string.IsNullOrEmpty(value)) ? value : string.Empty);
+			if (this.charaNameUILabel != null)
+			{
+				this.charaNameUILabel.text = this.charaNameText_;
+				this.charaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(this.charaNameText_));
+			}
+			if (this.singleCharaNameUILabel != null)
+			{
+				this.singleCharaNameUILabel.text = this.charaNameText_;
+				this.singleCharaNameUILabel.gameObject.SetActive(!string.IsNullOrEmpty(this.charaNameText_));
+			}
+		}
+	}
+
+	public string originalText
+	{
+		get
+		{
+			return this.originalUILabel.text;
+		}
+		set
+		{
+			this.Awake();
+			if (this.originalText_ == value)
+			{
+				return;
+			}
+			this.originalUILabel.text = (this.originalText_ = ((!string.IsNullOrEmpty(value)) ? MessageClass.GetWrapString(this.originalUILabel, value) : string.Empty));
+			if (this.displayType_ == SubtitleDisplayManager.DisplayType.Original)
+			{
+				this.singleUILabel.text = this.originalText_;
+			}
+		}
+	}
+
+	public string subtitlesText
+	{
+		get
+		{
+			return this.subtitlesUILabel.text;
+		}
+		set
+		{
+			this.Awake();
+			if (this.subtitlesText_ == value)
+			{
+				return;
+			}
+			this.subtitlesUILabel.text = (this.subtitlesText_ = ((!string.IsNullOrEmpty(value)) ? value : string.Empty));
+			if (this.displayType_ == SubtitleDisplayManager.DisplayType.Subtitle)
+			{
+				this.singleUILabel.text = this.subtitlesText_;
+			}
+		}
+	}
+
+	public SubtitleDisplayManager.DisplayType displayType
+	{
+		get
+		{
+			return this.displayType_;
+		}
+		set
+		{
+			this.Awake();
+			this.displayType_ = value;
+			this.twoTextAreaObject.SetActive(false);
+			this.singleTextAreaObject.SetActive(false);
+			if (this.displayType_ == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle)
+			{
+				this.twoTextAreaObject.SetActive(true);
+			}
+			else if (this.displayType_ == SubtitleDisplayManager.DisplayType.None)
+			{
+				if (this.hideTypeOverRide != SubtitleDisplayManager.DisplayType.None)
+				{
+					if (this.hideTypeOverRide == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle)
+					{
+						this.twoTextAreaObject.SetActive(true);
+					}
+					else if (this.hideTypeOverRide == SubtitleDisplayManager.DisplayType.Original || this.hideTypeOverRide == SubtitleDisplayManager.DisplayType.Subtitle)
+					{
+						this.singleTextAreaObject.SetActive(true);
+						this.singleUILabel.text = ((this.hideTypeOverRide != SubtitleDisplayManager.DisplayType.Subtitle) ? this.originalText_ : this.subtitlesText_);
+					}
+				}
+			}
+			else if (this.displayType_ == SubtitleDisplayManager.DisplayType.Original || this.displayType_ == SubtitleDisplayManager.DisplayType.Subtitle)
+			{
+				this.singleTextAreaObject.SetActive(true);
+				this.singleUILabel.text = ((this.displayType_ != SubtitleDisplayManager.DisplayType.Subtitle) ? this.originalText_ : this.subtitlesText_);
+			}
+		}
+	}
+
+	public bool visible
+	{
+		get
+		{
+			return base.gameObject.activeInHierarchy;
+		}
+		set
+		{
+			base.gameObject.SetActive(value);
+		}
+	}
+
+	public float messageBgAlpha
+	{
+		get
+		{
+			return (this.messageBgAlphaLinkWidgets == null || 0 >= this.messageBgAlphaLinkWidgets.Length) ? 0f : this.messageBgAlphaLinkWidgets[0].alpha;
+		}
+		set
+		{
+			if (this.messageBgAlphaLinkWidgets != null)
+			{
+				foreach (UIWidget uiwidget in this.messageBgAlphaLinkWidgets)
+				{
+					if (uiwidget != null && !Mathf.Approximately(uiwidget.alpha, value))
+					{
+						uiwidget.alpha = value;
+					}
+				}
+			}
+		}
+	}
+
+	private float configMessageAlpha
+	{
+		get
+		{
+			return (float)(100 - GameMain.Instance.CMSystem.MsgWndAlpha) / 100f;
+		}
+	}
+
+	private SubtitleDisplayManager.DisplayType configDisplayType
+	{
+		get
+		{
+			return GameMain.Instance.CMSystem.SubtitleType;
+		}
+		set
+		{
+			GameMain.Instance.CMSystem.SubtitleType = value;
+		}
+	}
+
+	private void Awake()
+	{
+		if (this.callAwake)
+		{
+			return;
+		}
+		this.callAwake = true;
+		string text = string.Empty;
+		this.charaNameText = text;
+		text = text;
+		this.subtitlesText = text;
+		this.originalText = text;
+		this.displayType = this.configDisplayType;
+		this.messageBgAlpha = this.configMessageAlpha;
+	}
+
+	public void SetTextFromScriptStyle(string text)
+	{
+		if (string.IsNullOrEmpty(text))
+		{
+			string empty = string.Empty;
+			this.subtitlesText = empty;
+			this.originalText = empty;
+			return;
+		}
+		KeyValuePair<string, string> translationText = MessageClass.GetTranslationText(text);
+		this.originalText = translationText.Key;
+		this.subtitlesText = translationText.Value;
+	}
+
+	public void Update()
+	{
+		if (this.messageBgAlpha != this.configMessageAlpha)
+		{
+			this.messageBgAlpha = this.configMessageAlpha;
+		}
+		if (this.displayType != this.configDisplayType)
+		{
+			this.displayType = this.configDisplayType;
+		}
+	}
+
+	[Header("日本語と翻訳,2テキスト表示する時の設定")]
+	[SerializeField]
+	private GameObject twoTextAreaObject;
+
+	[SerializeField]
+	private UILabel charaNameUILabel;
+
+	[SerializeField]
+	private UILabel originalUILabel;
+
+	[SerializeField]
+	private UILabel subtitlesUILabel;
+
+	[Header("日本語 or 翻訳の1テキストのみ表示する時の設定")]
+	[SerializeField]
+	private GameObject singleTextAreaObject;
+
+	[SerializeField]
+	private UILabel singleCharaNameUILabel;
+
+	[SerializeField]
+	private UILabel singleUILabel;
+
+	[Header("メッセージ背景不透明度とリンクされるWidget")]
+	[SerializeField]
+	private UIWidget[] messageBgAlphaLinkWidgets;
+
+	[Header("None指定の時、特定のタイプに動作をオーバーライドする設定")]
+	[SerializeField]
+	private SubtitleDisplayManager.DisplayType hideTypeOverRide;
+
+	private bool callAwake;
+
+	private string charaNameText_;
+
+	private string originalText_;
+
+	private string subtitlesText_;
+
+	private SubtitleDisplayManager.DisplayType displayType_;
+
+	public enum DisplayType
+	{
+		None,
+		OriginalAndSubtitle,
+		Subtitle,
+		Original
+	}
+
+	public static class EnumConvert
+	{
+		public static string GetString(SubtitleDisplayManager.DisplayType displayType)
+		{
+			string result = "表示しない";
+			if (displayType == SubtitleDisplayManager.DisplayType.OriginalAndSubtitle)
+			{
+				result = "両方表示";
+			}
+			else if (displayType == SubtitleDisplayManager.DisplayType.Original)
+			{
+				result = "日本語のみ";
+			}
+			else if (displayType == SubtitleDisplayManager.DisplayType.Subtitle)
+			{
+				result = "英語のみ";
+			}
+			return result;
+		}
+	}
+}

+ 188 - 0
Assembly-CSharp/SubtitleMovieManager.cs

@@ -0,0 +1,188 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using wf;
+
+public class SubtitleMovieManager : MonoBehaviour
+{
+	public bool isPlaying { get; private set; }
+
+	public static SubtitleMovieManager GetGlobalInstance()
+	{
+		GameObject childObject = UTY.GetChildObject(GameObject.Find("__GameMain__"), "SystemUI Root", false);
+		GameObject gameObject = UTY.GetChildObject(childObject, "SubtitleMovieManager", true);
+		if (gameObject != null)
+		{
+			gameObject = Utility.CreatePrefab(childObject, "SubtitleMovieManager", true);
+		}
+		return gameObject.GetComponent<SubtitleMovieManager>();
+	}
+
+	public static void DestroyGlobalInstance()
+	{
+		GameObject childObject = UTY.GetChildObject(GameObject.Find("__GameMain__"), "SystemUI Root", false);
+		GameObject childObject2 = UTY.GetChildObject(childObject, "SubtitleMovieManager", true);
+		if (childObject2 != null)
+		{
+			UnityEngine.Object.DestroyImmediate(childObject2);
+		}
+	}
+
+	public void Clear()
+	{
+		this.displayDatas.Clear();
+		this.isPlaying = false;
+	}
+
+	public bool AddData(int displayStartTime, int displayTime, string text)
+	{
+		if (this.isPlaying)
+		{
+			return false;
+		}
+		SubtitleMovieManager.DisplayData displayData = new SubtitleMovieManager.DisplayData();
+		displayData.displayStartTime = displayStartTime;
+		displayData.displayEndTime = displayStartTime + displayTime;
+		displayData.text = text;
+		this.displayDatas.Add(displayData);
+		return true;
+	}
+
+	public void LoadSubtitleScriptFile(string fileName)
+	{
+		if (!GameUty.FileSystem.IsExistentFile(fileName))
+		{
+			return;
+		}
+		byte[] array = null;
+		try
+		{
+			using (AFileBase afileBase = GameUty.FileOpen(fileName, null))
+			{
+				if (!afileBase.IsValid())
+				{
+					return;
+				}
+				array = new byte[afileBase.GetSize()];
+				afileBase.Read(ref array, afileBase.GetSize());
+			}
+		}
+		catch (Exception)
+		{
+			return;
+		}
+		if (array == null)
+		{
+			return;
+		}
+		string[] array2 = NUty.SjisToUnicode(array).Split(new string[]
+		{
+			"\r\n",
+			"\r",
+			"\n"
+		}, StringSplitOptions.RemoveEmptyEntries);
+		int num = 0;
+		int num2 = 0;
+		bool flag = false;
+		string text = string.Empty;
+		foreach (string text2 in array2)
+		{
+			if (text2.IndexOf("@talk") == 0)
+			{
+				int num3 = text2.IndexOf("[") + 1;
+				string[] array4 = text2.Substring(num3, text2.Length - num3 - 1).Split(new string[]
+				{
+					"-"
+				}, StringSplitOptions.RemoveEmptyEntries);
+				num = int.Parse(array4[0]);
+				num2 = int.Parse(array4[1]);
+				flag = true;
+				text = string.Empty;
+			}
+			else if (text2.IndexOf("@hitret") == 0)
+			{
+				this.AddData(num, num2 - num, text);
+				flag = false;
+			}
+			else if (flag)
+			{
+				text += text2;
+			}
+		}
+	}
+
+	public void Play(int displayTime, string text)
+	{
+		this.Clear();
+		this.AddData(0, displayTime, text);
+		this.Play();
+	}
+
+	public void Play()
+	{
+		this.timeElapsed = 0;
+		this.isPlaying = true;
+	}
+
+	public void Stop()
+	{
+		if (this.subtitleMgr != null)
+		{
+			this.subtitleMgr.visible = false;
+		}
+		this.isPlaying = false;
+	}
+
+	public void Update()
+	{
+		if (!this.isPlaying || this.displayDatas.Count == 0 || this.subtitleMgr == null)
+		{
+			this.Stop();
+			return;
+		}
+		this.timeElapsed += (int)(Time.deltaTime * 1000f);
+		bool visible = false;
+		List<SubtitleMovieManager.DisplayData> list = new List<SubtitleMovieManager.DisplayData>();
+		for (int i = 0; i < this.displayDatas.Count; i++)
+		{
+			SubtitleMovieManager.DisplayData displayData = this.displayDatas[i];
+			if (displayData.displayStartTime <= this.timeElapsed && this.timeElapsed <= displayData.displayEndTime)
+			{
+				visible = true;
+				this.subtitleMgr.SetTextFromScriptStyle(displayData.text);
+			}
+			else if (displayData.displayEndTime < this.timeElapsed)
+			{
+				list.Add(displayData);
+			}
+		}
+		this.subtitleMgr.visible = visible;
+		for (int j = 0; j < list.Count; j++)
+		{
+			for (int k = 0; k < this.displayDatas.Count; k++)
+			{
+				if (list[j] == this.displayDatas[k])
+				{
+					this.displayDatas.RemoveAt(k);
+					break;
+				}
+			}
+		}
+	}
+
+	[SerializeField]
+	private SubtitleDisplayManager subtitleMgr;
+
+	private int timeElapsed;
+
+	private List<SubtitleMovieManager.DisplayData> displayDatas = new List<SubtitleMovieManager.DisplayData>();
+
+	private class DisplayData
+	{
+		public int displayStartTime;
+
+		public int displayEndTime;
+
+		public string text;
+	}
+}

+ 0 - 149
Assembly-CSharp/SubtitlesDisplayManager.cs

@@ -1,149 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class SubtitlesDisplayManager : MonoBehaviour
-{
-	public string originalText
-	{
-		get
-		{
-			return this.originalUILabel.text;
-		}
-		set
-		{
-			this.Awake();
-			if (this.originalText_ == value)
-			{
-				return;
-			}
-			this.originalUILabel.text = (this.originalText_ = ((!string.IsNullOrEmpty(value)) ? MessageClass.GetWrapString(this.originalUILabel, value) : string.Empty));
-			if (this.displayType_ == SubtitlesDisplayManager.DisplayType.ON_OFF)
-			{
-				this.singleUILabel.text = this.originalText_;
-			}
-		}
-	}
-
-	public string subtitlesText
-	{
-		get
-		{
-			return this.subtitlesUILabel.text;
-		}
-		set
-		{
-			this.Awake();
-			if (this.subtitlesText_ == value)
-			{
-				return;
-			}
-			this.subtitlesUILabel.text = (this.subtitlesText_ = ((!string.IsNullOrEmpty(value)) ? value : string.Empty));
-			if (this.displayType_ == SubtitlesDisplayManager.DisplayType.OFF_ON)
-			{
-				this.singleUILabel.text = this.subtitlesText_;
-			}
-		}
-	}
-
-	public SubtitlesDisplayManager.DisplayType displayType
-	{
-		get
-		{
-			return this.displayType_;
-		}
-		set
-		{
-			this.Awake();
-			this.displayType_ = value;
-			if (this.displayType_ == SubtitlesDisplayManager.DisplayType.ON_ON)
-			{
-				this.twoTextAreaObject.SetActive(true);
-				this.singleTextAreaObject.SetActive(false);
-			}
-			else if (this.displayType_ == SubtitlesDisplayManager.DisplayType.OFF_OFF)
-			{
-				this.twoTextAreaObject.SetActive(false);
-				this.singleTextAreaObject.SetActive(false);
-			}
-			else if (this.displayType_ == SubtitlesDisplayManager.DisplayType.OFF_ON || this.displayType_ == SubtitlesDisplayManager.DisplayType.ON_OFF)
-			{
-				this.twoTextAreaObject.SetActive(false);
-				this.singleTextAreaObject.SetActive(true);
-				this.singleUILabel.text = ((this.displayType_ != SubtitlesDisplayManager.DisplayType.OFF_ON) ? this.originalText_ : this.subtitlesText_);
-			}
-		}
-	}
-
-	public bool visible
-	{
-		get
-		{
-			return base.gameObject.activeInHierarchy;
-		}
-		set
-		{
-			base.gameObject.SetActive(value);
-		}
-	}
-
-	private void Awake()
-	{
-		if (this.callAwake)
-		{
-			return;
-		}
-		this.callAwake = true;
-		string empty = string.Empty;
-		this.subtitlesText = empty;
-		this.originalText = empty;
-		this.displayType = SubtitlesDisplayManager.DisplayType.ON_ON;
-	}
-
-	public void SetTextFromScriptStyle(string text)
-	{
-		if (string.IsNullOrEmpty(text))
-		{
-			string empty = string.Empty;
-			this.subtitlesText = empty;
-			this.originalText = empty;
-			return;
-		}
-		KeyValuePair<string, string> translationText = MessageClass.GetTranslationText(text);
-		this.originalText = translationText.Key;
-		this.subtitlesText = translationText.Value;
-	}
-
-	[Header("日本語と翻訳,2テキスト表示する時の設定")]
-	[SerializeField]
-	private GameObject twoTextAreaObject;
-
-	[SerializeField]
-	private UILabel originalUILabel;
-
-	[SerializeField]
-	private UILabel subtitlesUILabel;
-
-	[Header("日本語 or 翻訳の1テキストのみ表示する時の設定")]
-	[SerializeField]
-	private GameObject singleTextAreaObject;
-
-	[SerializeField]
-	private UILabel singleUILabel;
-
-	private bool callAwake;
-
-	private string originalText_;
-
-	private string subtitlesText_;
-
-	private SubtitlesDisplayManager.DisplayType displayType_;
-
-	public enum DisplayType
-	{
-		ON_ON,
-		OFF_OFF,
-		OFF_ON,
-		ON_OFF
-	}
-}

+ 1 - 1
Assembly-CSharp/WindowPartsFingerPreset.cs

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

+ 4 - 5
Assembly-CSharp/YotogiOldManager.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using MaidStatus;
 using Schedule;
 using UnityEngine;
 using wf;
@@ -36,7 +35,7 @@ public class YotogiOldManager : WfScreenManager
 		base.Start();
 		GameMain.Instance.ScriptMgr.compatibilityMode = true;
 		this.maid_ = GameMain.Instance.CharacterMgr.GetMaid(0);
-		if (this.maid_.status.heroineType != HeroineType.Transfer)
+		if (!this.maid_.status.isCompatiblePersonality)
 		{
 			NDebug.Assert("旧夜伽は性格[" + this.maid_.status.personal.drawName + "]で実行する事はできません", false);
 		}
@@ -529,7 +528,7 @@ public class YotogiOldManager : WfScreenManager
 			for (int i = 0; i < characterMgr.GetStockMaidCount(); i++)
 			{
 				Maid stockMaid = characterMgr.GetStockMaid(i);
-				if (stockMaid != null && stockMaid.status.heroineType == HeroineType.Transfer && !stockMaid.status.OldStatus.isRentalMaid)
+				if (stockMaid != null && stockMaid.status.isCompatiblePersonality && !stockMaid.status.OldStatus.isRentalMaid)
 				{
 					num++;
 				}
@@ -551,7 +550,7 @@ public class YotogiOldManager : WfScreenManager
 			List<Maid> yotogiMaids = ScheduleAPI.GetYotogiMaids(GameMain.Instance.CharacterMgr.status.isDaytime);
 			for (int i = 0; i < yotogiMaids.Count; i++)
 			{
-				if (yotogiMaids[i] != this.maid_ && this.maid.status.heroineType == HeroineType.Transfer && !this.maid.status.OldStatus.isRentalMaid)
+				if (yotogiMaids[i] != this.maid_ && this.maid.status.isCompatiblePersonality && !this.maid.status.OldStatus.isRentalMaid)
 				{
 					list.Add(yotogiMaids[i]);
 				}
@@ -562,7 +561,7 @@ public class YotogiOldManager : WfScreenManager
 			for (int j = 0; j < characterMgr.GetStockMaidCount(); j++)
 			{
 				Maid stockMaid = characterMgr.GetStockMaid(j);
-				if (stockMaid != null && this.maid_ != stockMaid && stockMaid.status.heroineType == HeroineType.Transfer && !stockMaid.status.OldStatus.isRentalMaid)
+				if (stockMaid != null && this.maid_ != stockMaid && stockMaid.status.isCompatiblePersonality && !stockMaid.status.OldStatus.isRentalMaid)
 				{
 					list.Add(stockMaid);
 				}

+ 1 - 1
Assembly-CSharp/YotogiPlayManager.cs

@@ -1991,7 +1991,7 @@ public class YotogiPlayManager : WfScreenChildren
 
 	public int kRepeatWaitTime = 200;
 
-	public SubtitlesDisplayManager subtitlesManager;
+	public SubtitleDisplayManager subtitlesManager;
 
 	public bool lockRepeatVoiceUpdate;