denikson 5 years ago
parent
commit
43b413e934
54 changed files with 1014 additions and 459 deletions
  1. 5 5
      Assembly-CSharp.sln
  2. 16 16
      Assembly-CSharp/Assembly-CSharp.csproj
  3. 22 77
      Assembly-CSharp/BaseKagManager.cs
  4. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  5. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  6. 74 38
      Assembly-CSharp/BipedIKCtrlData.cs
  7. 7 4
      Assembly-CSharp/BodyCtrlData.cs
  8. 4 4
      Assembly-CSharp/CMSystem.cs
  9. 8 8
      Assembly-CSharp/CacheBoneDataArray.cs
  10. 3 3
      Assembly-CSharp/CharacterMgr.cs
  11. 102 54
      Assembly-CSharp/CharacterSelectMain.cs
  12. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  13. 2 0
      Assembly-CSharp/DanceData.cs
  14. 1 0
      Assembly-CSharp/DanceMain.cs
  15. 72 23
      Assembly-CSharp/DanceSelect.cs
  16. 1 1
      Assembly-CSharp/DeskManager.cs
  17. 3 3
      Assembly-CSharp/DynamicBone.cs
  18. 1 1
      Assembly-CSharp/DynamicSkirtBone.cs
  19. 1 1
      Assembly-CSharp/EditMod.cs
  20. 1 1
      Assembly-CSharp/FacilityManager.cs
  21. 6 3
      Assembly-CSharp/FullBodyIKCtrl.cs
  22. 2 2
      Assembly-CSharp/GameMain.cs
  23. 2 2
      Assembly-CSharp/GameUty.cs
  24. 2 2
      Assembly-CSharp/HandSignShortcut.cs
  25. 96 50
      Assembly-CSharp/IKCtrlData.cs
  26. 1 1
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  27. 20 19
      Assembly-CSharp/Maid.cs
  28. 1 1
      Assembly-CSharp/MaidParts.cs
  29. 1 1
      Assembly-CSharp/MaidProp.cs
  30. 1 1
      Assembly-CSharp/MaidStatus/Status.cs
  31. 1 1
      Assembly-CSharp/Menu.cs
  32. 1 1
      Assembly-CSharp/Misc.cs
  33. 1 1
      Assembly-CSharp/ModCompile.cs
  34. 2 2
      Assembly-CSharp/OnaholeMotion.cs
  35. 2 2
      Assembly-CSharp/OvrIK.cs
  36. 1 1
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  37. 4 4
      Assembly-CSharp/PhotoMotionData.cs
  38. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  39. 28 18
      Assembly-CSharp/PoseEditWindow.cs
  40. 10 0
      Assembly-CSharp/RhythmAction_Mgr.cs
  41. 48 1
      Assembly-CSharp/SceneCharacterSelect.cs
  42. 2 2
      Assembly-CSharp/SceneEdit.cs
  43. 4 4
      Assembly-CSharp/SceneVRCommunication.cs
  44. 1 1
      Assembly-CSharp/Schedule/ResultYotogiTask.cs
  45. 69 3
      Assembly-CSharp/Schedule/ScheduleAPI.cs
  46. 22 3
      Assembly-CSharp/Schedule/ScheduleCSVData.cs
  47. 34 1
      Assembly-CSharp/ScriptManager.cs
  48. 2 0
      Assembly-CSharp/WindowPartsBoneCheckBox.cs
  49. 1 1
      Assembly-CSharp/WindowPartsFingerPreset.cs
  50. 95 16
      Assembly-CSharp/YotogiManager.cs
  51. 4 4
      Assembly-CSharp/YotogiOldManager.cs
  52. 6 0
      Assembly-CSharp/YotogiPlay.cs
  53. 195 58
      Assembly-CSharp/YotogiPlayManager.cs
  54. 21 9
      Assembly-CSharp/Yotogis/Skill.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", "{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{2E951C58-68B7-4C9F-84F8-749F699C848B}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2E951C58-68B7-4C9F-84F8-749F699C848B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E951C58-68B7-4C9F-84F8-749F699C848B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E951C58-68B7-4C9F-84F8-749F699C848B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2E951C58-68B7-4C9F-84F8-749F699C848B}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 16 - 16
Assembly-CSharp/Assembly-CSharp.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{D78A7C96-EC04-4B3B-B805-AD2029A12DB0}</ProjectGuid>
+    <ProjectGuid>{2E951C58-68B7-4C9F-84F8-749F699C848B}</ProjectGuid>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -34,49 +34,49 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Assembly-CSharp-firstpass">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
     </Reference>
     <Reference Include="Assembly-UnityScript-firstpass">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
     </Reference>
     <Reference Include="FoveUnityPlugin">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
     </Reference>
     <Reference Include="Ionic.Zlib">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
     </Reference>
     <Reference Include="JsonFx.Json">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
     </Reference>
     <Reference Include="LeapCSharp.NET3.5">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
     </Reference>
     <Reference Include="System">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.dll</HintPath>
     </Reference>
     <Reference Include="System.Core">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
     </Reference>
     <Reference Include="System.Drawing">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
     </Reference>
     <Reference Include="System.Windows.Forms">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
     </Reference>
     <Reference Include="System.Xml">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
     </Reference>
     <Reference Include="System.Xml.Linq">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine.UI">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
     </Reference>
     <Reference Include="zxing.unity">
-      <HintPath>..\..\..\Programs\Gams\COM3D2\COM3D2\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up120\data\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>

+ 22 - 77
Assembly-CSharp/BaseKagManager.cs

@@ -53,9 +53,9 @@ public class BaseKagManager : IDisposable
 		this.kag_.AddTagCallBack("allikdetach", new KagScript.KagTagCallBack(this.TagAllIKDetach));
 		this.kag_.AddTagCallBack("ikattachodogu", new KagScript.KagTagCallBack(this.TagIKAttachOdogu));
 		this.kag_.AddTagCallBack("ikattachikbone", new KagScript.KagTagCallBack(this.TagIKAttachIKBone));
-		this.kag_.AddTagCallBack("setbodypos", new KagScript.KagTagCallBack(this.TagSetBodyPos));
+		this.kag_.AddTagCallBack("iksetbodypos", new KagScript.KagTagCallBack(this.TagIKSetBodyPos));
 		this.kag_.AddTagCallBack("ikcheckthrough", new KagScript.KagTagCallBack(this.TagIKCheckThrough));
-		this.kag_.AddTagCallBack("bendbonectrl", new KagScript.KagTagCallBack(this.TagBendBoneCtrl));
+		this.kag_.AddTagCallBack("ikbendbonectrl", new KagScript.KagTagCallBack(this.TagIKBendBoneCtrl));
 		this.kag_.AddTagCallBack("nextikflag", new KagScript.KagTagCallBack(this.TagNextIKFlag));
 		this.kag_.AddTagCallBack("ikattachpointnext", new KagScript.KagTagCallBack(this.TagIKAttachPointNext));
 		this.kag_.AddTagCallBack("ikattachbonenext", new KagScript.KagTagCallBack(this.TagIKAttachBoneNext));
@@ -1029,17 +1029,12 @@ public class BaseKagManager : IDisposable
 		{
 			axisbone = tag_data.GetTagProperty("axisbone").AsString();
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToAttachPoint(text, maidAndMan2, tgt_name, attachpoint_name, zero, ikattachType, axisbone, blend_time, do_animation, false);
+		maidAndMan.IKTargetToAttachPoint(text, maidAndMan2, tgt_name, attachpoint_name, zero, ikattachType, axisbone, do_animation, false);
 		return false;
 	}
 
@@ -1128,17 +1123,12 @@ public class BaseKagManager : IDisposable
 				goto IL_27F;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToBone(text, maidAndMan2, tgtbone_name, zero, ikattachType, search_sm, blend_time, do_animation, false);
+		maidAndMan.IKTargetToBone(text, maidAndMan2, tgtbone_name, zero, ikattachType, search_sm, do_animation, false);
 		return false;
 	}
 
@@ -1160,12 +1150,7 @@ public class BaseKagManager : IDisposable
 		{
 			return false;
 		}
-		float blendtime = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blendtime = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
-		maidAndMan.IKDetach(text, blendtime);
+		maidAndMan.IKDetach(text);
 		return false;
 	}
 
@@ -1185,7 +1170,7 @@ public class BaseKagManager : IDisposable
 		{
 			blendtime = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
 		}
-		maidAndMan.IKDetach(blendtime);
+		maidAndMan.AllIKDetach(blendtime);
 		return false;
 	}
 
@@ -1276,17 +1261,12 @@ public class BaseKagManager : IDisposable
 				goto IL_267;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToOdogu(text, odogu_name, tgt_name, zero, ikattachType, blend_time, do_animation, false);
+		maidAndMan.IKTargetToOdogu(text, odogu_name, tgt_name, zero, ikattachType, do_animation, false);
 		return false;
 	}
 
@@ -1374,19 +1354,14 @@ public class BaseKagManager : IDisposable
 				goto IL_272;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = tag_data.IsValid("do_animation");
-		maidAndMan.IKTargetToIKBone(text, maidAndMan2, bone_name, zero, ikattachType, blend_time, do_animation, false);
+		maidAndMan.IKTargetToIKBone(text, maidAndMan2, bone_name, zero, ikattachType, do_animation, false);
 		return false;
 	}
 
-	public bool TagSetBodyPos(KagTagSupport tag_data)
+	public bool TagIKSetBodyPos(KagTagSupport tag_data)
 	{
-		this.CheckAbsolutelyNecessaryTag(tag_data, "setbodypos", new string[]
+		this.CheckAbsolutelyNecessaryTag(tag_data, "iksetbodypos", new string[]
 		{
 			"src",
 			"srcbone",
@@ -1414,11 +1389,6 @@ public class BaseKagManager : IDisposable
 			zero.z = tag_data.GetTagProperty("offsetz").AsReal();
 		}
 		IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.NewPoint;
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool search_sm = tag_data.IsValid("Search_SM_Body");
 		maidAndMan.IKCtrl.BodyCtrlData.OffsetEnable.Recet();
 		if (tag_data.IsValid("disable"))
@@ -1453,10 +1423,10 @@ public class BaseKagManager : IDisposable
 						maidAndMan.IKCtrl.BodyCtrlData.OffsetEnable.EnableX = false;
 					}
 				}
-				IL_238:
+				IL_20A:
 				i++;
 				continue;
-				goto IL_238;
+				goto IL_20A;
 			}
 		}
 		if (tag_data.IsValid("heighttype"))
@@ -1467,7 +1437,7 @@ public class BaseKagManager : IDisposable
 		maidAndMan.IKCtrl.BodyCtrlData.PosBaseBone = maidAndMan.body0.GetBone(tag_data.GetTagProperty("srcbone").AsString());
 		maidAndMan.IKCtrl.BodyCtrlData.OffsetWorld = tag_data.IsValid("offset_world");
 		maidAndMan.IKCtrl.BodyCtrlData.OffsetBone = tag_data.IsValid("offset_bone");
-		maidAndMan.IKTargetToBone("体全体", maidAndMan2, tgtbone_name, zero, attach_type, search_sm, blend_time, false, false);
+		maidAndMan.IKTargetToBone("体全体", maidAndMan2, tgtbone_name, zero, attach_type, search_sm, false, false);
 		return false;
 	}
 
@@ -1521,14 +1491,7 @@ public class BaseKagManager : IDisposable
 				ikdata.RootEffector.positionWeight = 1f;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
-		ikdata.ForceIK = true;
 		ikdata.Chain.bendConstraint.weight = weight;
-		ikdata.SetIKSetting(IKCtrlData.IKAttachType.NewPoint, false, null, null, Vector3.zero, false, blend_time);
 		borderCorrectData.Enable = true;
 		borderCorrectData.Border = float.Parse(text.Split(new char[]
 		{
@@ -1537,9 +1500,9 @@ public class BaseKagManager : IDisposable
 		return false;
 	}
 
-	public bool TagBendBoneCtrl(KagTagSupport tag_data)
+	public bool TagIKBendBoneCtrl(KagTagSupport tag_data)
 	{
-		this.CheckAbsolutelyNecessaryTag(tag_data, "bendbonectrl", new string[]
+		this.CheckAbsolutelyNecessaryTag(tag_data, "ikbendbonectrl", new string[]
 		{
 			"src",
 			"srcbone",
@@ -1698,17 +1661,12 @@ public class BaseKagManager : IDisposable
 		{
 			axisbone = tag_data.GetTagProperty("axisbone").AsString();
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToAttachPoint(text, maidAndMan2, tgt_name, attachpoint_name, zero, ikattachType, axisbone, blend_time, do_animation, true);
+		maidAndMan.IKTargetToAttachPoint(text, maidAndMan2, tgt_name, attachpoint_name, zero, ikattachType, axisbone, do_animation, true);
 		return false;
 	}
 
@@ -1797,17 +1755,12 @@ public class BaseKagManager : IDisposable
 				goto IL_27F;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToBone(text, maidAndMan2, tgtbone_name, zero, ikattachType, search_sm, blend_time, do_animation, true);
+		maidAndMan.IKTargetToBone(text, maidAndMan2, tgtbone_name, zero, ikattachType, search_sm, do_animation, true);
 		return false;
 	}
 
@@ -1898,17 +1851,12 @@ public class BaseKagManager : IDisposable
 				goto IL_267;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = false;
 		if (tag_data.IsValid("do_animation"))
 		{
 			do_animation = true;
 		}
-		maidAndMan.IKTargetToOdogu(text, odogu_name, tgt_name, zero, ikattachType, blend_time, do_animation, true);
+		maidAndMan.IKTargetToOdogu(text, odogu_name, tgt_name, zero, ikattachType, do_animation, true);
 		return false;
 	}
 
@@ -1996,13 +1944,8 @@ public class BaseKagManager : IDisposable
 				goto IL_272;
 			}
 		}
-		float blend_time = 0f;
-		if (tag_data.IsValid("blendtime"))
-		{
-			blend_time = GameUty.MillisecondToSecond(tag_data.GetTagProperty("blendtime").AsInteger());
-		}
 		bool do_animation = tag_data.IsValid("do_animation");
-		maidAndMan.IKTargetToIKBone(text, maidAndMan2, bone_name, zero, ikattachType, blend_time, do_animation, true);
+		maidAndMan.IKTargetToIKBone(text, maidAndMan2, bone_name, zero, ikattachType, do_animation, true);
 		return false;
 	}
 
@@ -4825,6 +4768,7 @@ public class BaseKagManager : IDisposable
 		{
 			val = 0f;
 		}
+		maid.IKCtrl.BlendTime = val;
 		maid.CrossFade(fn, this.script_mgr_.file_system, additive, loop, boAddQue, val, 1f);
 	}
 
@@ -4834,6 +4778,7 @@ public class BaseKagManager : IDisposable
 		{
 			val = 0f;
 		}
+		maid.IKCtrl.BlendTime = val;
 		maid.CrossFadeAbsolute(fn, this.script_mgr_.file_system, additive, loop, boAddQue, val, 1f);
 	}
 
@@ -5074,7 +5019,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_KAG");
-		binary.Write(1190);
+		binary.Write(1200);
 		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(1190);
+				binaryWriter.Write(1200);
 				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(1190);
+				binaryWriter.Write(1200);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{

+ 74 - 38
Assembly-CSharp/BipedIKCtrlData.cs

@@ -123,11 +123,21 @@ public class BipedIKCtrlData : IKCtrlData
 			case BipedIKCtrlData.BorderCorrectType.Bone:
 				base.IKTarget.position += correctData.Axis * num;
 				this.m_BoneBendGoal.Target.position += correctData.Axis * num;
+				if (this.PositionWeight == 0f)
+				{
+					this.PositionWeight = 1f;
+					base.PointIK.IsIKExec = true;
+				}
 				break;
 			case BipedIKCtrlData.BorderCorrectType.HalfBody:
 				base.IKTarget.position += correctData.Axis * num;
 				this.m_BoneBendGoal.Target.position += correctData.Axis * num;
 				this.m_RootBoneTgtPair.Target.position += correctData.Axis * num;
+				if (this.PositionWeight == 0f)
+				{
+					this.PositionWeight = 1f;
+					base.PointIK.IsIKExec = true;
+				}
 				break;
 			case BipedIKCtrlData.BorderCorrectType.Chara:
 				if (correctData.GetValue(this.MyIKCtrl.BodyCtrlData.AddOffset) < num)
@@ -150,41 +160,59 @@ public class BipedIKCtrlData : IKCtrlData
 		base.SetTargetTransform(data, pos, rot);
 		Transform target = this.m_BoneBendGoal.Target;
 		Transform target2 = this.m_RootBoneTgtPair.Target;
-		Vector3 position = target2.InverseTransformPoint(target.position);
-		Vector3 position2 = this.m_BoneBendGoal.Bone.InverseTransformPoint(base.TargetBone.position);
-		if (this.IsRootIK)
+		if (this.IsRootIK || this.IsBendIK)
 		{
-			if (data.IsPointAttach)
+			Vector3 position = target2.InverseTransformPoint(target.position);
+			Vector3 position2 = this.m_BoneBendGoal.Bone.InverseTransformPoint(base.TargetBone.position);
+			if (this.IsRootIK)
 			{
-				this.RootEffector.positionWeight = this.PositionWeight;
-				target2.position = base.IKTarget.position;
+				if (data.IsPointAttach)
+				{
+					this.RootEffector.positionWeight = this.PositionWeight;
+					target2.position = base.IKTarget.position;
+				}
+				else
+				{
+					this.RootEffector.rotationWeight = this.RotationWeight;
+					target2.rotation = base.IKTarget.rotation;
+					target.rotation = target2.rotation * this.m_BoneBendGoal.Bone.localRotation;
+					base.IKTarget.rotation = target.rotation * base.TargetBone.localRotation;
+				}
+				target.position = target2.TransformPoint(position);
+				base.IKTarget.position = target.TransformPoint(position2);
 			}
 			else
 			{
-				this.RootEffector.rotationWeight = this.RotationWeight;
-				target2.rotation = base.IKTarget.rotation;
-				base.IKTarget.rotation = base.TargetBone.rotation;
+				if (data.IsPointAttach)
+				{
+					this.Chain.bendConstraint.weight = this.PositionWeight;
+					this.RootEffector.positionWeight = (this.RootEffector.rotationWeight = this.PositionWeight);
+					target2.rotation = Quaternion.FromToRotation(target.position - target2.position, base.IKTarget.position - target2.position) * target2.rotation;
+					Vector3 b = base.IKTarget.position - target2.TransformPoint(position);
+					target2.position += b;
+					target.position = base.IKTarget.position;
+				}
+				else
+				{
+					target.rotation = base.IKTarget.rotation;
+					base.IKTarget.rotation = target.rotation * base.TargetBone.localRotation;
+				}
+				base.IKTarget.position = this.m_BoneBendGoal.Target.TransformPoint(position2);
 			}
-			target.position = target2.TransformPoint(position);
-			base.IKTarget.position = target.TransformPoint(position2);
 		}
-		else if (this.IsBendIK)
+		else if (data.IsPointAttach)
 		{
-			if (data.IsPointAttach)
-			{
-				this.Chain.bendConstraint.weight = this.PositionWeight;
-				this.RootEffector.positionWeight = (this.RootEffector.rotationWeight = this.PositionWeight);
-				target2.rotation = Quaternion.FromToRotation(target.position - target2.position, base.IKTarget.position - target2.position) * target2.rotation;
-				Vector3 b = base.IKTarget.position - target2.TransformPoint(position);
-				target2.position += b;
-				target.position = base.IKTarget.position;
-			}
-			else
-			{
-				this.m_BoneBendGoal.Target.rotation = base.IKTarget.rotation;
-				base.IKTarget.rotation = base.TargetBone.rotation;
-			}
-			base.IKTarget.position = this.m_BoneBendGoal.Target.TransformPoint(position2);
+			Vector3 vector = this.m_BoneBendGoal.Bone.position - this.TargetBone.position;
+			Vector3 vector2 = this.m_RootBoneTgtPair.Bone.position - this.m_BoneBendGoal.Bone.position;
+			float f = Vector3.Dot(vector.normalized, vector2.normalized);
+			float num = Mathf.Acos(f) * 57.29578f;
+			float num2 = Mathf.Clamp01(num / this.m_BendFadeBorder);
+			this.Chain.bendConstraint.weight = num2 * this.PositionWeight;
+			Vector3 position3 = this.TargetBone.InverseTransformPoint(this.m_RootBoneTgtPair.Bone.position);
+			target2.position = base.IKTarget.TransformPoint(position3);
+			Vector3 position4 = this.TargetBone.InverseTransformPoint(this.m_BoneBendGoal.Bone.position);
+			Vector3 position5 = base.IKTarget.TransformPoint(position4);
+			target.position = position5;
 		}
 	}
 
@@ -204,21 +232,25 @@ public class BipedIKCtrlData : IKCtrlData
 	{
 		this.m_BoneBendGoal.Cppy();
 		this.m_RootBoneTgtPair.Cppy();
-		if (!this.IsBendIK && !this.IsRootIK && this.m_BendweitCtrl.IsEnable)
+		this.Chain.bendConstraint.weight = 0f;
+		this.RootEffector.positionWeight = 0f;
+		this.RootEffector.rotationWeight = 0f;
+		if (!base.PointIK.IsIKExec && !base.PointFlagData.IsEnable && (this.FloorCorrect.Enable || this.WallCorrect.Enable))
 		{
-			this.Chain.bendConstraint.weight = 1f - this.m_BendweitCtrl.Value01();
+			base.ForceIK = true;
 		}
 		base.ApplyIKSetting();
-		if (base.ForceIK)
+		this.CheckBorder(this.WallCorrect);
+		this.CheckBorder(this.FloorCorrect);
+		if (!this.IsBendIK && !this.IsRootIK && this.m_BendweitCtrl.IsEnable)
 		{
-			this.CheckBorder(this.WallCorrect);
-			this.CheckBorder(this.FloorCorrect);
+			this.Chain.bendConstraint.weight = 1f - this.m_BendweitCtrl.Value01();
 		}
 	}
 
-	public override void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_next, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public override void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_next, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation = false)
 	{
-		base.SetIKSetting(attachType, is_next, tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation, blend_time);
+		base.SetIKSetting(attachType, is_next, tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation);
 		if (this.IsRootIK)
 		{
 			base.BlendPosRot.Copy(this.m_lastRootPosRot);
@@ -229,11 +261,10 @@ public class BipedIKCtrlData : IKCtrlData
 		}
 	}
 
-	public override void Detach(IKCtrlData.IKAttachType attachType, float blend_time = 0f)
+	public override void Detach(IKCtrlData.IKAttachType attachType)
 	{
-		base.Detach(attachType, blend_time);
+		base.Detach(attachType);
 		this.IsRootIK = (this.IsBendIK = false);
-		this.Chain.bendConstraint.weight = 1f;
 		this.RootEffector.positionWeight = 0f;
 		this.RootEffector.rotationWeight = 0f;
 		this.m_BoneBendGoal.PosOffset = Vector3.zero;
@@ -285,9 +316,14 @@ public class BipedIKCtrlData : IKCtrlData
 	[Header("肘・膝をターゲットに合わせるフラグ")]
 	public bool IsBendIK;
 
-	[Header("肘・膝をターゲットに合わせるフラグ")]
+	[Header("肩・太ももをターゲットに合わせるフラグ")]
 	public bool IsRootIK;
 
+	[SerializeField]
+	[Space]
+	[Range(1f, 90f)]
+	private float m_BendFadeBorder = 30f;
+
 	public readonly IKEffector Effector;
 
 	public readonly FBIKChain Chain;

+ 7 - 4
Assembly-CSharp/BodyCtrlData.cs

@@ -116,6 +116,7 @@ public class BodyCtrlData : IKCtrlData
 		{
 			this.m_PosOffset += Vector3.Lerp(Vector3.zero, enable, data.BlendWeight);
 		}
+		this.PositionWeight = data.BlendWeight;
 	}
 
 	public void SetAllOffset(Vector3 offset)
@@ -123,6 +124,7 @@ public class BodyCtrlData : IKCtrlData
 		if (!base.IsIKExec)
 		{
 			base.PointIK.IsIKExec = true;
+			this.PositionWeight = 1f;
 		}
 		this.DoAllOffset = true;
 		this.m_AllOffset = offset;
@@ -133,6 +135,7 @@ public class BodyCtrlData : IKCtrlData
 		if (!base.IsIKExec)
 		{
 			base.PointIK.IsIKExec = true;
+			this.PositionWeight = 1f;
 		}
 		this.m_AddOffset = offset;
 	}
@@ -146,11 +149,11 @@ public class BodyCtrlData : IKCtrlData
 		base.ApplyIKSetting();
 	}
 
-	public override void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation, float blend_time)
+	public override void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation)
 	{
 		this.OrijinMaidPos = this.MyIKCtrl.TgtMaid.GetPos();
 		this.OrijinAllPos = GameMain.Instance.CharacterMgr.GetCharaAllPos();
-		base.SetIKSetting(attachType, is_another, tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation, blend_time);
+		base.SetIKSetting(attachType, is_another, tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation);
 	}
 
 	public override void Update()
@@ -166,10 +169,10 @@ public class BodyCtrlData : IKCtrlData
 		this.MyIKCtrl.TgtMaid.SetPos(this.BodyOffset);
 	}
 
-	public override void Detach(IKCtrlData.IKAttachType attachType, float blend_time = 0f)
+	public override void Detach(IKCtrlData.IKAttachType attachType)
 	{
 		this.m_lastPosOffset = this.m_PosOffset - this.OrijinMaidPos;
-		base.Detach(attachType, blend_time);
+		base.Detach(attachType);
 		base.BlendPosRot.Copy(this.PosBaseBone);
 		this.m_AddOffset = Vector3.zero;
 		this.HeightFit = BodyCtrlData.HeightFitType.None;

+ 4 - 4
Assembly-CSharp/CMSystem.cs

@@ -808,7 +808,7 @@ public class CMSystem
 	{
 		XElement xelement = new XElement("Config", new object[]
 		{
-			new XAttribute("Version", 1190),
+			new XAttribute("Version", 1200),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			{
@@ -1125,7 +1125,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1190);
+		binaryWriter.Write(1200);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
@@ -1697,7 +1697,7 @@ public class CMSystem
 
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1190;
+			this.m_nVersion = 1200;
 		}
 
 		public void OnAfterDeserialize()
@@ -1705,7 +1705,7 @@ public class CMSystem
 		}
 
 		[SerializeField]
-		private int m_nVersion = 1190;
+		private int m_nVersion = 1200;
 
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";

+ 8 - 8
Assembly-CSharp/CacheBoneDataArray.cs

@@ -268,34 +268,34 @@ public class CacheBoneDataArray : MonoBehaviour
 			}
 		}
 		bool flag2 = false;
-		bool value2 = false;
+		bool flag3 = false;
 		if (flag)
 		{
 			flag2 = (binaryReader.ReadByte() != 0);
-			value2 = (binaryReader.ReadByte() != 0);
+			flag3 = (binaryReader.ReadByte() != 0);
 			List<KeyValuePair<Transform, float[]>> list = new List<KeyValuePair<Transform, float[]>>();
 			if (flag2)
 			{
 				list.Add(dictionary[0]);
 			}
-			else if (flag2)
+			if (flag3)
 			{
 				list.Add(dictionary[1]);
 			}
 			foreach (KeyValuePair<Transform, float[]> keyValuePair in list)
 			{
-				float[] value3 = keyValuePair.Value;
-				keyValuePair.Key.localRotation = new Quaternion(value3[0], value3[1], value3[2], value3[3]);
-				if (4 < value3.Length)
+				float[] value2 = keyValuePair.Value;
+				keyValuePair.Key.localRotation = new Quaternion(value2[0], value2[1], value2[2], value2[3]);
+				if (4 < value2.Length)
 				{
-					keyValuePair.Key.transform.localPosition = new Vector3(value3[4], value3[5], value3[6]);
+					keyValuePair.Key.transform.localPosition = new Vector3(value2[4], value2[5], value2[6]);
 				}
 			}
 		}
 		binaryReader.Close();
 		memoryStream.Close();
 		memoryStream.Dispose();
-		return new KeyValuePair<bool, bool>(flag2, value2);
+		return new KeyValuePair<bool, bool>(flag2, flag3);
 	}
 
 	public CacheBoneDataArray.BoneData bone_data { get; private set; }

+ 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(1190);
+		binaryWriter.Write(1200);
 		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(1190);
+		binaryWriter.Write(1200);
 		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(1190);
+		bwWrite.Write(1200);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)

File diff suppressed because it is too large
+ 102 - 54
Assembly-CSharp/CharacterSelectMain.cs


+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

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

+ 2 - 0
Assembly-CSharp/DanceData.cs

@@ -48,6 +48,8 @@ public class DanceData
 
 	public bool IsPlayable;
 
+	public bool RhythmGameCorrespond = true;
+
 	public enum BgType
 	{
 		LiveStage,

+ 1 - 0
Assembly-CSharp/DanceMain.cs

@@ -401,6 +401,7 @@ public class DanceMain : MonoBehaviour
 				this.m_listMaid[i].transform.localScale = Vector3.one;
 				this.m_listMaid[i].StopKuchipakuPattern();
 				this.m_listMaid[i].EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
+				this.m_listMaid[i].AllIKDetach(0f);
 			}
 		}
 		for (int j = 0; j < this.m_listItemObject.Count; j++)

+ 72 - 23
Assembly-CSharp/DanceSelect.cs

@@ -130,6 +130,7 @@ public class DanceSelect : WfScreenChildren
 							danceData.bgType = ((!(csvParser.GetCellAsString(num++, j) == "ライブステージ")) ? DanceData.BgType.Theater : DanceData.BgType.LiveStage);
 							danceData.InitialPlayable = csvParser.IsCellToExistData(num++, j);
 							danceData.IsPlayable = danceData.InitialPlayable;
+							danceData.RhythmGameCorrespond = (csvParser.GetCellAsString(num++, j) == "◯");
 							DanceSelect.dance_data_list_.Add(danceData);
 						}
 					}
@@ -232,6 +233,11 @@ public class DanceSelect : WfScreenChildren
 		Localize component3 = this.m_CharaSelectLabel.GetComponent<Localize>();
 		if (component3 != null)
 		{
+			NGUILabelSpacingHold component4 = component3.gameObject.GetComponent<NGUILabelSpacingHold>();
+			if (component4 != null)
+			{
+				UnityEngine.Object.DestroyImmediate(component4);
+			}
 			UnityEngine.Object.DestroyImmediate(component3);
 		}
 		this.m_CharaSelectLabel.text = "ダンスを行うメイドを選択してください。";
@@ -245,12 +251,13 @@ public class DanceSelect : WfScreenChildren
 		{
 			DanceSelect.m_SelectedDance.Clear();
 		}
-		UIWFTabPanel uiwftabPanel = this.m_MusicUnitPanel.GetComponent<UIWFTabPanel>();
+		this.MusicSelectPanel.ContentsGrid.hideInactive = true;
+		UIWFTabPanel uiwftabPanel = this.MusicSelectPanel.ContentsGrid.GetComponent<UIWFTabPanel>();
 		if (!uiwftabPanel)
 		{
-			uiwftabPanel = this.m_MusicUnitPanel.AddComponent<UIWFTabPanel>();
+			uiwftabPanel = this.MusicSelectPanel.ContentsGrid.gameObject.AddComponent<UIWFTabPanel>();
 		}
-		GameObject gameObject = this.MusicSelectPanel.ContentsPanel.GetComponentInChildren<UIGrid>().gameObject;
+		GameObject gameObject = this.MusicSelectPanel.ContentsGrid.gameObject;
 		for (int i = 0; i < gameObject.transform.childCount; i++)
 		{
 			Transform child = gameObject.transform.GetChild(i);
@@ -279,19 +286,19 @@ public class DanceSelect : WfScreenChildren
 					{
 						if (this.m_ExistOnlyRelease || DanceSelect.dance_data_list_[j].IsPlayable)
 						{
-							goto IL_1EF;
+							goto IL_20A;
 						}
 					}
 				}
 			}
 			else if (this.m_AllRelease || DanceSelect.dance_data_list_[j].IsPlayable)
 			{
-				goto IL_1EF;
+				goto IL_20A;
 			}
-			IL_339:
+			IL_347:
 			j++;
 			continue;
-			IL_1EF:
+			IL_20A:
 			GameObject gameObject2 = Utility.CreatePrefab(gameObject, "SceneDanceSelect/Prefab/SongPlate", true);
 			UTY.GetChildObject(gameObject2, "title", false).GetComponent<UILabel>().fontSize = DanceSelect.dance_data_list_[j].title_font_size;
 			UTY.GetChildObject(gameObject2, "title", false).transform.localPosition = new Vector3(0f, (float)DanceSelect.dance_data_list_[j].title_offset_y, 0f);
@@ -302,25 +309,21 @@ public class DanceSelect : WfScreenChildren
 			{
 				uiwftabButton = componentInChildren;
 			}
-			if (RhythmAction_Mgr.IsVSDance)
+			if (RhythmAction_Mgr.IsVSDance && DanceSelect.dance_data_list_[j].select_chara_num > GameMain.Instance.CharacterMgr.GetStockMaidCount())
 			{
-				if (DanceSelect.dance_data_list_[j].select_chara_num > GameMain.Instance.CharacterMgr.GetStockMaidCount())
-				{
-					componentInChildren.isEnabled = false;
-					this.m_NotSelectDance.Add(componentInChildren);
-				}
-				this.m_SongPlatelUI.Add(componentInChildren);
-				EventDelegate.Add(componentInChildren.onSelect, new EventDelegate.Callback(this.OnSelectSong));
+				componentInChildren.isEnabled = false;
+				this.m_NotSelectDance.Add(componentInChildren);
 			}
+			this.m_SongPlatelUIPair.Add(DanceSelect.dance_data_list_[j], componentInChildren);
 			EventDelegate.Add(componentInChildren.onSelect, new EventDelegate.Callback(this.OnSelectSong));
-			goto IL_339;
+			goto IL_347;
 		}
 		gameObject.GetComponent<UIGrid>().repositionNow = true;
 		this.MusicSelectPanel.ContentsPanel.GetComponent<UIScrollView>().ResetPosition();
 		uiwftabPanel.UpdateChildren();
 		if (RhythmAction_Mgr.IsVSDance && this.m_NotSelectDance.Count > 0)
 		{
-			foreach (UIWFTabButton uiwftabButton2 in this.m_SongPlatelUI)
+			foreach (UIWFTabButton uiwftabButton2 in this.m_SongPlatelUIPair.Values)
 			{
 				EventDelegate.Add(uiwftabButton2.onClick, new EventDelegate.Callback(this.PlateDisable));
 			}
@@ -447,7 +450,7 @@ public class DanceSelect : WfScreenChildren
 		if (RhythmAction_Mgr.IsVSDance && DanceSelect.m_SelectedDance.Count == 0)
 		{
 			UIWFTabPanel componentInChildren = this.MusicSelectPanel.ContentsPanel.GetComponentInChildren<UIWFTabPanel>();
-			componentInChildren.Select(this.MusicSelectPanel.ContentsPanel.GetComponentInChildren<UIGrid>().GetChild(0).GetComponentInChildren<UIWFTabButton>());
+			componentInChildren.Select(this.MusicSelectPanel.ContentsGrid.GetChild(0).GetComponentInChildren<UIWFTabButton>());
 		}
 		if (GameMain.Instance.VRMode)
 		{
@@ -537,6 +540,42 @@ public class DanceSelect : WfScreenChildren
 		{
 			this.m_SubOkButton.normalSprite = normalSprite;
 		}
+		bool flag = false;
+		bool flag2 = false;
+		UIWFTabButton uiwftabButton = null;
+		foreach (KeyValuePair<DanceData, UIWFTabButton> keyValuePair in this.m_SongPlatelUIPair)
+		{
+			if (RhythmAction_Mgr.IsRhythmGameMode)
+			{
+				keyValuePair.Value.transform.parent.gameObject.SetActive(keyValuePair.Key.RhythmGameCorrespond);
+				if (!keyValuePair.Key.RhythmGameCorrespond)
+				{
+					if (DanceSelect.m_SelectedDance.Count<DanceData>() > 0 && DanceSelect.m_SelectedDance.First<DanceData>() == keyValuePair.Key)
+					{
+						keyValuePair.Value.SetSelect(false);
+						flag = true;
+					}
+				}
+				else if (flag && !flag2)
+				{
+					flag2 = true;
+					keyValuePair.Value.SetSelect(true);
+				}
+			}
+			else
+			{
+				keyValuePair.Value.transform.parent.gameObject.SetActive(true);
+			}
+			if (keyValuePair.Value.transform.parent.gameObject.activeSelf)
+			{
+				uiwftabButton = keyValuePair.Value;
+			}
+		}
+		if (flag && !flag2)
+		{
+			uiwftabButton.SetSelect(true);
+		}
+		this.MusicSelectPanel.ContentsGrid.repositionNow = true;
 		this.status_ = DanceSelect.Status.MusicSelect;
 		if (this.MusicSelectPanel.ParentPanel.alpha != 1f)
 		{
@@ -1121,10 +1160,6 @@ public class DanceSelect : WfScreenChildren
 	private GameObject m_DanceShowPanel;
 
 	[SerializeField]
-	[Header("楽曲選択グリッド")]
-	private GameObject m_MusicUnitPanel;
-
-	[SerializeField]
 	[Header("ダンス設定UI")]
 	private DanceSetting m_SettingObj;
 
@@ -1151,7 +1186,7 @@ public class DanceSelect : WfScreenChildren
 
 	private List<UIWFSelectButton> m_NotSelectDance = new List<UIWFSelectButton>();
 
-	private List<UIWFTabButton> m_SongPlatelUI = new List<UIWFTabButton>();
+	private Dictionary<DanceData, UIWFTabButton> m_SongPlatelUIPair = new Dictionary<DanceData, UIWFTabButton>();
 
 	private static List<DanceData> m_SelectedDance = new List<DanceData>();
 
@@ -1184,9 +1219,23 @@ public class DanceSelect : WfScreenChildren
 	[Serializable]
 	public class SelectPanelSet
 	{
+		public UIGrid ContentsGrid
+		{
+			get
+			{
+				if (!this.m_ContentsGrid)
+				{
+					this.m_ContentsGrid = this.ContentsPanel.GetComponentInChildren<UIGrid>();
+				}
+				return this.m_ContentsGrid;
+			}
+		}
+
 		public UIPanel ParentPanel;
 
 		public UIPanel ContentsPanel;
+
+		private UIGrid m_ContentsGrid;
 	}
 
 	private enum Status

+ 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(1190);
+		binary.Write(1200);
 		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(1190);
+		f_bw.Write(1200);
 		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(1190);
+		f_bw.Write(1200);
 		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, 1190);
+				this.m_Colliders[i].Serialize(f_bw, 1200);
 			}
 		}
 		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(1190);
+		f_bw.Write(1200);
 		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(1190);
+		binaryWriter.Write(1200);
 		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(1190);
+		brWrite.Write(1200);
 		brWrite.Write("5");
 		int num = 0;
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)

+ 6 - 3
Assembly-CSharp/FullBodyIKCtrl.cs

@@ -271,6 +271,8 @@ public class FullBodyIKCtrl : MonoBehaviour
 		this.SafeAddFullbodyIKData("右手", "右肘", "右肩", this.m_FullbodyIK.solver.rightHandEffector, this.m_FullbodyIK.solver.rightArmChain, this.m_FullbodyIK.solver.rightArmMapping, this.m_FullbodyIK.solver.rightShoulderEffector, true);
 		this.SafeAddFullbodyIKData("左足", "左膝", "左腿", this.m_FullbodyIK.solver.leftFootEffector, this.m_FullbodyIK.solver.leftLegChain, this.m_FullbodyIK.solver.leftLegMapping, this.m_FullbodyIK.solver.leftThighEffector, false);
 		this.SafeAddFullbodyIKData("右足", "右膝", "右腿", this.m_FullbodyIK.solver.rightFootEffector, this.m_FullbodyIK.solver.rightLegChain, this.m_FullbodyIK.solver.rightLegMapping, this.m_FullbodyIK.solver.rightThighEffector, false);
+		this.GetIKData<BipedIKCtrlData>("左足", false).Chain.pull = 0f;
+		this.GetIKData<BipedIKCtrlData>("右足", false).Chain.pull = 0f;
 		this.SafeAddCCDIKData("口", ref this.m_MouthIK, true, true, IKManager.BoneType.Mouth, true);
 		if (!this.BodyTarget)
 		{
@@ -281,6 +283,7 @@ public class FullBodyIKCtrl : MonoBehaviour
 			this.BodyTarget.SetParent(transform, false);
 		}
 		this.BodyEffector.target = this.BodyTarget;
+		this.BodyEffector.effectChildNodes = false;
 		this.m_FullbodyIK.enabled = false;
 	}
 
@@ -304,13 +307,11 @@ public class FullBodyIKCtrl : MonoBehaviour
 		{
 			return;
 		}
-		bool flag = false;
 		foreach (IKCtrlData ikctrlData in this.m_strIKDataPair.Values)
 		{
 			ikctrlData.ApplyIKSetting();
-			flag |= ikctrlData.IsIKExec;
 		}
-		if (!this.IsUpdateLate && (flag || this.AllForceIK))
+		if (!this.IsUpdateLate && (this.IsIKExec || this.AllForceIK))
 		{
 			this.SolverUpdate();
 		}
@@ -690,4 +691,6 @@ public class FullBodyIKCtrl : MonoBehaviour
 	public Action PostSolverUpdate;
 
 	public bool AllForceIK;
+
+	public float BlendTime = 0.5f;
 }

+ 2 - 2
Assembly-CSharp/GameMain.cs

@@ -668,7 +668,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.nMaidNum = this.m_CharacterMgr.GetStockMaidCount();
 		serializeHeader.strComment = f_strComment;
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1190);
+		binaryWriter.Write(1200);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -782,7 +782,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1190);
+		binaryWriter.Write(1200);
 		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

@@ -918,14 +918,14 @@ public class GameUty
 
 	public static string GetBuildVersionText()
 	{
-		int num = 1190;
+		int num = 1200;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 
 	public static string GetGameVersionText()
 	{
 		string text = "COM3D2x64.exe";
-		int num = 1190;
+		int num = 1200;
 		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 = 1190;
+			this.m_nVersion = 1200;
 		}
 
 		public void OnAfterDeserialize()
@@ -803,7 +803,7 @@ public class HandSignShortcut : MonoBehaviour
 		private const string CONF_NAME = "MaidFingerDataList.json";
 
 		[SerializeField]
-		private int m_nVersion = 1190;
+		private int m_nVersion = 1200;
 
 		[SerializeField]
 		private List<HandSignShortcut.MaidFingerData> MaidFingerDataList = new List<HandSignShortcut.MaidFingerData>();

+ 96 - 50
Assembly-CSharp/IKCtrlData.cs

@@ -26,6 +26,10 @@ public abstract class IKCtrlData
 		}
 		this.m_BoneTgtPair = new IKCtrlData.BoneTgtPair(this.TargetBone, this.m_IKTarget);
 		this.IkCmoInit();
+		this.m_PointIK.IKCtrl = ik_ctrl;
+		this.m_NextPointIK.IKCtrl = ik_ctrl;
+		this.m_RotateIK.IKCtrl = ik_ctrl;
+		this.m_NextRotateIK.IKCtrl = ik_ctrl;
 	}
 
 	public bool ForceIK
@@ -96,6 +100,14 @@ public abstract class IKCtrlData
 		}
 	}
 
+	public bool IsIKExecTruth
+	{
+		get
+		{
+			return this.IsIKExec && (this.PositionWeight > 0f || this.RotationWeight > 0f);
+		}
+	}
+
 	public bool OldIkExec
 	{
 		get
@@ -315,13 +327,29 @@ public abstract class IKCtrlData
 				Quaternion b2 = quaternion;
 				this.SetIKPosRot(ikparam3, ref b, ref b2, true);
 				float num = this.GetFlagData(data.MyType).Value01();
-				data.IsIKExec = (num != 0f);
+				data.IsIKExec = true;
 				if (data.IsPointAttach)
 				{
+					if (!ikparam2.ExistTgt)
+					{
+						this.m_PosWeightBase = num;
+					}
+					else
+					{
+						this.m_PosWeightBase = 1f;
+					}
 					vector = Vector3.Lerp(a, b, num);
 				}
 				else
 				{
+					if (!ikparam2.ExistTgt)
+					{
+						this.m_RotWeightBase = num;
+					}
+					else
+					{
+						this.m_RotWeightBase = 1f;
+					}
 					quaternion = Quaternion.Lerp(a2, b2, num);
 				}
 			}
@@ -332,8 +360,8 @@ public abstract class IKCtrlData
 				IKCtrlData.IKParam ikparam5 = this.GetIKParam(data.MyType, true, isFlagOn);
 				ikparam4.BlendRecet(true);
 				ikparam5.BlendRecet(true);
-				ikparam5.SetLastTarget(ikparam4.Tgt_AttachName, ikparam4.TgtMaid, ikparam4.Target);
-				ikparam5.CheckBlendType(false);
+				ikparam5.SetLastTarget(ikparam4.Tgt_AttachName, ikparam4.TgtMaid, ikparam4.Target, ikparam4.TgtOffset);
+				ikparam5.CheckBlendType(true);
 				if (ikparam5.MyType == IKCtrlData.IKAttachType.Rotate)
 				{
 					this.BlendPosRot.rot = this.m_lastIKPosRot.rot;
@@ -342,10 +370,6 @@ public abstract class IKCtrlData
 				{
 					this.BlendPosRot.pos = this.m_lastIKPosRot.pos;
 				}
-				if (ikparam5.BlendType == IKCtrlData.IKBlendType.IK_To_Detach && ikparam5.BlendTime <= 0f)
-				{
-					ikparam5.BlendTime = ikparam4.BlendTime;
-				}
 				this.SetIKPosRot(data, ref vector, ref quaternion, false);
 			}
 			else
@@ -420,7 +444,7 @@ public abstract class IKCtrlData
 			{
 				KasaiUtility.DrawAxis(vector, quaternion, 0.125f);
 			}
-			if (data.BlendNow && !data.DoSetPosRot)
+			if (!data.DoSetPosRot)
 			{
 				data.ElapsedTime += Time.deltaTime;
 			}
@@ -459,15 +483,15 @@ public abstract class IKCtrlData
 			if (data.BlendType == IKCtrlData.IKBlendType.IK_To_IK)
 			{
 				this.m_IKTarget.rotation = Quaternion.Lerp(this.BlendPosRot.rot, this.m_IKTarget.rotation, data.BlendWeight);
-				this.RotationWeight = this.m_IKWeight;
+				this.RotationWeight = this.m_RotWeightBase;
 			}
 			else if (data.BlendType == IKCtrlData.IKBlendType.IK_To_Detach)
 			{
-				this.RotationWeight = this.m_IKWeight * (1f - data.BlendWeight);
+				this.RotationWeight = this.m_RotWeightBase * (1f - data.BlendWeight);
 			}
 			else
 			{
-				this.RotationWeight = this.m_IKWeight * data.BlendWeight;
+				this.RotationWeight = this.m_RotWeightBase * data.BlendWeight;
 			}
 			break;
 		case IKCtrlData.IKAttachType.NewPoint:
@@ -493,15 +517,15 @@ public abstract class IKCtrlData
 			if (data.BlendType == IKCtrlData.IKBlendType.IK_To_IK)
 			{
 				this.m_IKTarget.position = Vector3.Lerp(this.BlendPosRot.pos, this.m_IKTarget.position, data.BlendWeight);
-				this.PositionWeight = this.m_IKWeight;
+				this.PositionWeight = this.m_PosWeightBase;
 			}
 			else if (data.BlendType == IKCtrlData.IKBlendType.IK_To_Detach)
 			{
-				this.PositionWeight = this.m_IKWeight * (1f - data.BlendWeight);
+				this.PositionWeight = this.m_PosWeightBase * (1f - data.BlendWeight);
 			}
 			else
 			{
-				this.PositionWeight = this.m_IKWeight * data.BlendWeight;
+				this.PositionWeight = this.m_PosWeightBase * data.BlendWeight;
 			}
 			break;
 		}
@@ -563,24 +587,24 @@ public abstract class IKCtrlData
 		}
 	}
 
-	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Vector3 f_vecOffset, bool do_animation = false)
 	{
-		this.SetIKSetting(attachType, is_another, tgt_maid, slot_no, attach_name, axis_bone, null, f_vecOffset, do_animation, blend_time);
+		this.SetIKSetting(attachType, is_another, tgt_maid, slot_no, attach_name, axis_bone, null, f_vecOffset, do_animation);
 	}
 
-	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, Transform target, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, Transform target, Vector3 f_vecOffset, bool do_animation = false)
 	{
-		this.SetIKSetting(attachType, is_another, tgt_maid, -1, string.Empty, null, target, f_vecOffset, do_animation, blend_time);
+		this.SetIKSetting(attachType, is_another, tgt_maid, -1, string.Empty, null, target, f_vecOffset, do_animation);
 	}
 
-	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Transform target, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Transform target, Vector3 f_vecOffset, bool do_animation = false)
 	{
-		this.SetIKSetting(attachType, is_another, null, -1, string.Empty, null, target, f_vecOffset, do_animation, blend_time);
+		this.SetIKSetting(attachType, is_another, null, -1, string.Empty, null, target, f_vecOffset, do_animation);
 	}
 
-	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, string bone_name, Transform target, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_another, Maid tgt_maid, string bone_name, Transform target, Vector3 f_vecOffset, bool do_animation = false)
 	{
-		this.SetIKSetting(attachType, is_another, tgt_maid, -1, bone_name, null, target, f_vecOffset, do_animation, blend_time);
+		this.SetIKSetting(attachType, is_another, tgt_maid, -1, bone_name, null, target, f_vecOffset, do_animation);
 	}
 
 	public virtual void Update()
@@ -606,7 +630,7 @@ public abstract class IKCtrlData
 		this.ApplyIKSetting(this.RotateIK);
 	}
 
-	public virtual void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_next, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation = false, float blend_time = 0f)
+	public virtual void SetIKSetting(IKCtrlData.IKAttachType attachType, bool is_next, Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation = false)
 	{
 		this.GetIKParam(attachType, true, is_next).ChangePointType(attachType);
 		if (this.GetIKParam(attachType, true, is_next).MyType != attachType)
@@ -618,11 +642,11 @@ public abstract class IKCtrlData
 		this.m_PosRotOffset.Recet();
 		this.m_FirstPosRotOffset.Recet();
 		this.m_FirstTgtPosRot.Recet();
-		this.GetIKParam(attachType, true, is_next).SetIKSetting(tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation, blend_time);
+		this.GetIKParam(attachType, true, is_next).SetIKSetting(tgt_maid, slot_no, attach_name, axis_bone, target, f_vecOffset, do_animation);
 		this.GetFlagData(attachType).IsFlagChange();
 	}
 
-	public virtual void Detach(IKCtrlData.IKAttachType attachType, float blend_time = 0f)
+	public virtual void Detach(IKCtrlData.IKAttachType attachType)
 	{
 		this.OffsetBone = false;
 		this.OffsetWorld = false;
@@ -630,18 +654,22 @@ public abstract class IKCtrlData
 		this.m_BoneTgtPair.PosOffset = Vector3.zero;
 		this.BlendPosRot.Copy(this.m_lastIKPosRot);
 		this.GetFlagData(attachType).Reset();
-		this.GetIKParam(attachType, true, false).Detach(blend_time);
-		this.GetIKParam(attachType, true, true).Detach(blend_time);
+		this.GetIKParam(attachType, true, false).Detach();
+		this.GetIKParam(attachType, true, true).Detach();
 	}
 
 	public virtual void LateUpdate()
 	{
 		if (this.IsIKExec && this.m_DrawLine && !this.MyIKCtrl.IsUpdateLate)
 		{
-			KasaiUtility.DrawObjAxis(this.TargetBone, 0.0625f);
-			if (!this.OldIkExec)
+			if (this.PositionWeight > 0f || this.RotationWeight > 0f)
+			{
+				KasaiUtility.DrawObjAxis(this.TargetBone, 0.0625f);
+			}
+			if (!this.OldIkExec && (this.PositionWeight > 0f || this.RotationWeight > 0f))
 			{
 				Color color = (!this.PointIK.IsIKExec) ? Color.cyan : Color.yellow;
+				color.a = ((!this.PointIK.IsIKExec) ? this.RotationWeight : this.PositionWeight);
 				for (int i = 0; i < this.ChainBones.Length - 1; i++)
 				{
 					Debug.DrawLine(this.ChainBones[i].position, this.ChainBones[i + 1].position, color);
@@ -711,7 +739,11 @@ public abstract class IKCtrlData
 
 	[SerializeField]
 	[Range(0f, 1f)]
-	protected float m_IKWeight = 1f;
+	protected float m_PosWeightBase = 1f;
+
+	[SerializeField]
+	[Range(0f, 1f)]
+	protected float m_RotWeightBase = 1f;
 
 	[SerializeField]
 	protected bool m_ForceIK;
@@ -943,11 +975,25 @@ public abstract class IKCtrlData
 			this.BlendType = IKCtrlData.IKBlendType.Not_Blend;
 		}
 
+		public float BlendTime
+		{
+			get
+			{
+				return (!this.IKCtrl) ? -1f : this.IKCtrl.BlendTime;
+			}
+		}
+
 		public IKCtrlData.IKAttachType MyType { get; private set; }
 
 		public IKCtrlData.IKBlendType BlendType { get; private set; }
 
-		public bool DoIKBlend { get; private set; }
+		public bool DoIKBlend
+		{
+			get
+			{
+				return this.m_DoIKBlend && this.BlendTime > 0f;
+			}
+		}
 
 		public bool IsPointAttach
 		{
@@ -1014,7 +1060,8 @@ public abstract class IKCtrlData
 		public void CheckBlendType(bool check_time = true)
 		{
 			this.BlendType = IKCtrlData.IKBlendType.IK_To_IK;
-			this.DoIKBlend = true;
+			this.m_DoIKBlend = true;
+			float num = Vector3.Distance(this.m_lastOffset, this.TgtOffset);
 			if (this.m_lastTarget)
 			{
 				if (!this.Target && string.IsNullOrEmpty(this.Tgt_AttachName))
@@ -1023,7 +1070,7 @@ public abstract class IKCtrlData
 				}
 				else if (this.Target)
 				{
-					this.DoIKBlend = (this.m_lastTarget != this.Target);
+					this.m_DoIKBlend = (this.m_lastTarget != this.Target || num > 0.01f);
 				}
 			}
 			else if (!string.IsNullOrEmpty(this.m_lastAttachName))
@@ -1034,7 +1081,7 @@ public abstract class IKCtrlData
 				}
 				else if (!this.Target)
 				{
-					this.DoIKBlend = (this.m_lastAttachName != this.Tgt_AttachName || this.m_lastTgtMaid != this.TgtMaid);
+					this.m_DoIKBlend = (this.m_lastAttachName != this.Tgt_AttachName || this.m_lastTgtMaid != this.TgtMaid || num > 0.01f);
 				}
 			}
 			else
@@ -1043,20 +1090,17 @@ public abstract class IKCtrlData
 				if (!this.Target && string.IsNullOrEmpty(this.Tgt_AttachName))
 				{
 					this.BlendType = IKCtrlData.IKBlendType.Not_Blend;
-					this.DoIKBlend = false;
+					this.m_DoIKBlend = false;
 				}
 			}
-			if (check_time)
-			{
-				this.DoIKBlend &= (this.BlendTime > 0f);
-			}
 		}
 
-		public void SetLastTarget(string attach_name, Maid maid, Transform target)
+		public void SetLastTarget(string attach_name, Maid maid, Transform target, Vector3 offset)
 		{
 			this.m_lastAttachName = attach_name;
 			this.m_lastTgtMaid = maid;
 			this.m_lastTarget = target;
+			this.m_lastOffset = offset;
 		}
 
 		public void BlendRecet(bool elpsed_only = false)
@@ -1064,15 +1108,14 @@ public abstract class IKCtrlData
 			this.ElapsedTime = 0f;
 			if (!elpsed_only)
 			{
-				this.DoIKBlend = false;
-				this.BlendTime = -1f;
+				this.m_DoIKBlend = false;
 				this.BlendType = IKCtrlData.IKBlendType.Not_Blend;
 			}
 		}
 
-		public void SetIKSetting(Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation, float blend_time)
+		public void SetIKSetting(Maid tgt_maid, int slot_no, string attach_name, Transform axis_bone, Transform target, Vector3 f_vecOffset, bool do_animation)
 		{
-			this.SetLastTarget(this.Tgt_AttachName, this.TgtMaid, this.Target);
+			this.SetLastTarget(this.Tgt_AttachName, this.TgtMaid, this.Target, this.TgtOffset);
 			this.TgtMaid = tgt_maid;
 			this.Tgt_AttachSlot = slot_no;
 			this.Tgt_AttachName = attach_name;
@@ -1087,18 +1130,16 @@ public abstract class IKCtrlData
 				this.TgtOffset = KasaiUtility.AngleRimmit360(f_vecOffset);
 			}
 			this.BlendRecet(false);
-			this.BlendTime = blend_time;
 			this.CheckBlendType(true);
 			this.DoAnimation = do_animation;
 			this.IsIKExec = true;
 			this.FirstFrame = true;
 		}
 
-		public void Detach(float blend_time = 0f)
+		public void Detach()
 		{
 			this.BlendRecet(false);
-			this.BlendTime = blend_time;
-			this.SetLastTarget(this.Tgt_AttachName, this.TgtMaid, this.Target);
+			this.SetLastTarget(this.Tgt_AttachName, this.TgtMaid, this.Target, this.TgtOffset);
 			this.TgtMaid = null;
 			this.Tgt_AttachSlot = -1;
 			this.Tgt_AttachName = string.Empty;
@@ -1119,6 +1160,10 @@ public abstract class IKCtrlData
 
 		private Maid m_lastTgtMaid;
 
+		private Vector3 m_lastOffset = Vector3.zero;
+
+		private bool m_DoIKBlend;
+
 		public Transform Target;
 
 		public Vector3 TgtOffset;
@@ -1135,8 +1180,6 @@ public abstract class IKCtrlData
 
 		public Transform AxisTgt;
 
-		public float BlendTime = -1f;
-
 		public float ElapsedTime;
 
 		[HideInInspector]
@@ -1150,6 +1193,9 @@ public abstract class IKCtrlData
 		[HideInInspector]
 		public bool DoSetOffset;
 
+		[HideInInspector]
+		public FullBodyIKCtrl IKCtrl;
+
 		public readonly bool IsNext;
 	}
 }

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

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

+ 20 - 19
Assembly-CSharp/Maid.cs

@@ -1214,7 +1214,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1190);
+		f_bwWrite.Write(1200);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
 		{
@@ -1246,7 +1246,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1190);
+		f_bwWrite.Write(1200);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		{
@@ -1271,7 +1271,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1190);
+		f_bwWrite.Write(1200);
 		return true;
 	}
 
@@ -1886,8 +1886,8 @@ public class Maid : MonoBehaviour
 			{
 				this.body0.MuneYureL(1f);
 				this.body0.MuneYureR(1f);
-				this.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-				this.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+				this.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+				this.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			}
 		}
 	}
@@ -1965,7 +1965,7 @@ public class Maid : MonoBehaviour
 		this.m_bFoceKuchipakuSelfUpdateTime = false;
 	}
 
-	public void IKTargetToAttachPoint(string tag, Maid tgt_maid, string tgt_name, string attachpoint_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, string axisbone = "", float blend_time = 0f, bool do_animation = false, bool is_next = false)
+	public void IKTargetToAttachPoint(string tag, Maid tgt_maid, string tgt_name, string attachpoint_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, string axisbone = "", bool do_animation = false, bool is_next = false)
 	{
 		IKCtrlData ikdata = this.body0.IKCtrl.GetIKData(tag, true);
 		Transform axis_bone = null;
@@ -1973,10 +1973,10 @@ public class Maid : MonoBehaviour
 		{
 			axis_bone = CMT.SearchObjName(tgt_maid.body0.m_trBones, axisbone, true);
 		}
-		ikdata.SetIKSetting(attach_type, is_next, tgt_maid, this.body0.GetSlotNo(tgt_name), attachpoint_name, axis_bone, f_vecOffset, do_animation, blend_time);
+		ikdata.SetIKSetting(attach_type, is_next, tgt_maid, this.body0.GetSlotNo(tgt_name), attachpoint_name, axis_bone, f_vecOffset, do_animation);
 	}
 
-	public void IKTargetToBone(string tag, Maid tgt_maid, string tgtbone_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, bool search_sm = false, float blend_time = 0f, bool do_animation = false, bool is_next = false)
+	public void IKTargetToBone(string tag, Maid tgt_maid, string tgtbone_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, bool search_sm = false, bool do_animation = false, bool is_next = false)
 	{
 		IKCtrlData ikdata = this.IKCtrl.GetIKData(tag, true);
 		if (tgtbone_name != "無し")
@@ -1990,16 +1990,16 @@ public class Maid : MonoBehaviour
 			{
 				target = CMT.SearchObjName(tgt_maid.body0.SmBody, tgtbone_name, false);
 			}
-			ikdata.SetIKSetting(attach_type, is_next, tgt_maid, target, f_vecOffset, do_animation, blend_time);
+			ikdata.SetIKSetting(attach_type, is_next, tgt_maid, target, f_vecOffset, do_animation);
 		}
 		else
 		{
-			ikdata.Detach(IKCtrlData.IKAttachType.NewPoint, blend_time);
-			ikdata.Detach(IKCtrlData.IKAttachType.Rotate, blend_time);
+			ikdata.Detach(IKCtrlData.IKAttachType.NewPoint);
+			ikdata.Detach(IKCtrlData.IKAttachType.Rotate);
 		}
 	}
 
-	public void IKTargetToOdogu(string tag, string odogu_name, string tgt_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, float blend_time = 0f, bool do_animation = false, bool is_next = false)
+	public void IKTargetToOdogu(string tag, string odogu_name, string tgt_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, bool do_animation = false, bool is_next = false)
 	{
 		Transform transform = null;
 		GameObject prefabFromBg = GameMain.Instance.BgMgr.GetPrefabFromBg(odogu_name);
@@ -2035,10 +2035,10 @@ public class Maid : MonoBehaviour
 			}
 		}
 		IKCtrlData ikdata = this.IKCtrl.GetIKData(tag, true);
-		ikdata.SetIKSetting(attach_type, is_next, transform, f_vecOffset, do_animation, blend_time);
+		ikdata.SetIKSetting(attach_type, is_next, transform, f_vecOffset, do_animation);
 	}
 
-	public void IKTargetToIKBone(string my_tag, Maid f_maidTarget, string bone_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, float blend_time = 0f, bool do_animation = false, bool is_next = false)
+	public void IKTargetToIKBone(string my_tag, Maid f_maidTarget, string bone_name, Vector3 f_vecOffset, IKCtrlData.IKAttachType attach_type = IKCtrlData.IKAttachType.Point, bool do_animation = false, bool is_next = false)
 	{
 		IKCtrlData ikdata = f_maidTarget.IKCtrl.GetIKData(bone_name, true);
 		if (!ikdata)
@@ -2047,21 +2047,22 @@ public class Maid : MonoBehaviour
 		}
 		Transform targetBone = ikdata.TargetBone;
 		IKCtrlData ikdata2 = this.IKCtrl.GetIKData(my_tag, true);
-		ikdata2.SetIKSetting(attach_type, is_next, f_maidTarget, bone_name, targetBone, f_vecOffset, do_animation, blend_time);
+		ikdata2.SetIKSetting(attach_type, is_next, f_maidTarget, bone_name, targetBone, f_vecOffset, do_animation);
 	}
 
-	public void IKDetach(string name, float blendtime = 0f)
+	public void IKDetach(string name)
 	{
-		this.IKTargetToBone(name, null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, blendtime, false, false);
+		this.IKTargetToBone(name, null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 	}
 
-	public void IKDetach(float blendtime = 0f)
+	public void AllIKDetach(float blendtime = 0f)
 	{
+		this.IKCtrl.BlendTime = blendtime;
 		this.IKCtrl.IKActive = (blendtime > 0f);
 		this.IKCtrl.AllForceIK = false;
 		foreach (string tag in this.IKCtrl.strIKDataPair.Keys)
 		{
-			this.IKTargetToBone(tag, null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, blendtime, false, false);
+			this.IKTargetToBone(tag, null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 		}
 	}
 

+ 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(1190);
+		f_bwWrite.Write(1200);
 		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(1190);
+		f_bwWrite.Write(1200);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.type);

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

@@ -1215,7 +1215,7 @@ namespace MaidStatus
 		public void Serialize(BinaryWriter binary)
 		{
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1190);
+			binary.Write(1200);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);

+ 1 - 1
Assembly-CSharp/Menu.cs

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

+ 1 - 1
Assembly-CSharp/Misc.cs

@@ -2,7 +2,7 @@
 
 public class Misc
 {
-	public const int GAME_VERSION = 1190;
+	public const int GAME_VERSION = 1200;
 
 	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(1190);
+		binaryWriter.Write(1200);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(exObjIn2.strName);

+ 2 - 2
Assembly-CSharp/OnaholeMotion.cs

@@ -186,10 +186,10 @@ public class OnaholeMotion : MonoBehaviour
 
 	private class BlendAnimeData
 	{
-		[Obsolete]
+		[Obsolete("初期化時に代入されているが、利用している箇所がない")]
 		public string key = string.Empty;
 
-		[Obsolete]
+		[Obsolete("そもそも参照している場所がひとつもない")]
 		public MaidTouch.POINT point;
 
 		public AnimationState start;

+ 2 - 2
Assembly-CSharp/OvrIK.cs

@@ -1438,7 +1438,7 @@ public class OvrIK : MonoBehaviour
 	{
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1190;
+			this.m_nVersion = 1200;
 		}
 
 		public void OnAfterDeserialize()
@@ -1498,7 +1498,7 @@ public class OvrIK : MonoBehaviour
 		private const string CONF_NAME = "OvrIK.json";
 
 		[SerializeField]
-		private int m_nVersion = 1190;
+		private int m_nVersion = 1200;
 
 		[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", 1190);
+		XElement xelement = new XElement("GameVersion", 1200);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);

+ 4 - 4
Assembly-CSharp/PhotoMotionData.cs

@@ -248,13 +248,13 @@ public class PhotoMotionData
 		{
 			maid.body0.MuneYureL((float)((!this.use_animekey_mune_l) ? 1 : 0));
 			maid.body0.MuneYureR((float)((!this.use_animekey_mune_r) ? 1 : 0));
-			maid.body0.jbMuneL.enabled = (maid.body0.GetMuneYureL() != 0f);
-			maid.body0.jbMuneR.enabled = (maid.body0.GetMuneYureR() != 0f);
+			maid.body0.jbMuneL.enabled = !this.use_animekey_mune_l;
+			maid.body0.jbMuneR.enabled = !this.use_animekey_mune_l;
 		}
 		if (!string.IsNullOrEmpty(this.direct_file))
 		{
-			maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-			maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+			maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+			maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			if (!this.is_mod && !this.is_mypose)
 			{
 				maid.CrossFade(this.direct_file, false, this.is_loop, false, 0f, 1f);

+ 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(1190);
+			binary.Write(1200);
 			binary.Write(this.playerName_);
 			binary.Write(this.days_);
 			binary.Write(this.totalPurchasePrice_);

+ 28 - 18
Assembly-CSharp/PoseEditWindow.cs

@@ -265,8 +265,12 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 		{
 			IKManager maidIKManager = PoseEditWindow.GetMaidIKManager(maid);
 			KeyValuePair<bool, bool> keyValuePair2 = maidIKManager.cache_bone_data.SetFrameBinary(Convert.FromBase64String(maidStoreData["pose_binary"]));
-			maid.body0.jbMuneL.enabled = !keyValuePair2.Key;
-			maid.body0.jbMuneR.enabled = !keyValuePair2.Value;
+			bool key2 = keyValuePair2.Key;
+			bool value2 = keyValuePair2.Value;
+			maid.body0.MuneYureL((float)((!key2) ? 1 : 0));
+			maid.body0.MuneYureR((float)((!value2) ? 1 : 0));
+			maid.body0.jbMuneL.enabled = !key2;
+			maid.body0.jbMuneR.enabled = !value2;
 		}
 	}
 
@@ -281,10 +285,12 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 		{
 			return;
 		}
-		maidStoreData["use_mune_key_l"] = (maid.body0.GetMuneYureL() == 0f).ToString();
-		maidStoreData["use_mune_key_r"] = (maid.body0.GetMuneYureR() == 0f).ToString();
-		maid.body0.jbMuneL.enabled = (maid.body0.GetMuneYureL() != 0f);
-		maid.body0.jbMuneR.enabled = (maid.body0.GetMuneYureR() != 0f);
+		bool flag = maid.body0.GetMuneYureL() == 0f;
+		bool flag2 = maid.body0.GetMuneYureR() == 0f;
+		maidStoreData["use_mune_key_l"] = flag.ToString();
+		maidStoreData["use_mune_key_r"] = flag2.ToString();
+		maid.body0.jbMuneL.enabled = !flag;
+		maid.body0.jbMuneR.enabled = !flag2;
 		for (int i = 0; i < this.RotateCheckBoxArray.Length; i++)
 		{
 			this.RotateCheckBoxArray[i].OnMotionUpdate();
@@ -501,8 +507,8 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 				motionWindow.CheckbtnStop.check = true;
 				motionWindow.OnClickStopCheck(motionWindow.CheckbtnStop);
 			}
-			base.mgr.select_maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-			base.mgr.select_maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+			base.mgr.select_maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+			base.mgr.select_maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			this.ControlSelectBtnTab.ResetSelect();
 			Dictionary<PoseEditWindow.ControlType, UIWFTabButton> dictionary = new Dictionary<PoseEditWindow.ControlType, UIWFTabButton>();
 			foreach (UIWFTabButton uiwftabButton in this.ControlSelectBtnTab.button_list)
@@ -511,8 +517,6 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 				uiwftabButton.isEnabled = true;
 				dictionary.Add((PoseEditWindow.ControlType)Enum.Parse(typeof(PoseEditWindow.ControlType), uiwftabButton.transform.parent.name), uiwftabButton);
 			}
-			base.mgr.select_maid.body0.jbMuneL.enabled = (base.mgr.select_maid.body0.GetMuneYureL() != 0f);
-			base.mgr.select_maid.body0.jbMuneR.enabled = (base.mgr.select_maid.body0.GetMuneYureR() != 0f);
 			for (int i = 0; i < this.RotateCheckBoxArray.Length; i++)
 			{
 				this.RotateCheckBoxArray[i].ChangeEnabeled(use);
@@ -560,8 +564,10 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 			}
 			if (base.mgr.select_maid != null && base.mgr.select_maid.body0 != null && !base.mgr.select_maid.boMAN)
 			{
-				base.mgr.select_maid.body0.jbMuneL.enabled = (base.mgr.select_maid.body0.GetMuneYureL() != 0f);
-				base.mgr.select_maid.body0.jbMuneR.enabled = (base.mgr.select_maid.body0.GetMuneYureR() != 0f);
+				base.mgr.select_maid.body0.MuneYureL(1f);
+				base.mgr.select_maid.body0.MuneYureR(1f);
+				base.mgr.select_maid.body0.jbMuneL.enabled = true;
+				base.mgr.select_maid.body0.jbMuneR.enabled = true;
 			}
 			if (this.ik_mgr != null)
 			{
@@ -676,15 +682,19 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 			this.ctrl_type_ = PoseEditWindow.ControlType.Null;
 		}
 		this.CheckbtnUse.enabled = flag;
+		if (this.ik_mgr_ != null && this.CheckbtnUse.check && dictionary["pose_binary"] != string.Empty)
+		{
+			KeyValuePair<bool, bool> keyValuePair = this.ik_mgr_.cache_bone_data.SetFrameBinary(Convert.FromBase64String(dictionary["pose_binary"]));
+			bool key = keyValuePair.Key;
+			bool value = keyValuePair.Value;
+			maid.body0.MuneYureL((float)((!key) ? 1 : 0));
+			maid.body0.MuneYureR((float)((!value) ? 1 : 0));
+			maid.body0.jbMuneL.enabled = !key;
+			maid.body0.jbMuneR.enabled = !value;
+		}
 		this.ChangeEnabeled(this.CheckbtnUse.check);
 		if (this.ik_mgr_ != null && this.CheckbtnUse.check)
 		{
-			if (dictionary["pose_binary"] != string.Empty)
-			{
-				KeyValuePair<bool, bool> keyValuePair = this.ik_mgr_.cache_bone_data.SetFrameBinary(Convert.FromBase64String(dictionary["pose_binary"]));
-				maid.body0.MuneYureL((float)((!keyValuePair.Key) ? 1 : 0));
-				maid.body0.MuneYureR((float)((!keyValuePair.Value) ? 1 : 0));
-			}
 			this.Apply();
 			this.ik_mgr.HistoryNew();
 		}

+ 10 - 0
Assembly-CSharp/RhythmAction_Mgr.cs

@@ -166,6 +166,16 @@ public class RhythmAction_Mgr : MonoBehaviour
 		}
 	}
 
+	public static bool IsRhythmGameMode
+	{
+		get
+		{
+			bool flag = true;
+			flag &= (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.View && RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.Touch && RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.Encore);
+			return flag & (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.VS_Skip && RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.BenchMark);
+		}
+	}
+
 	private void Awake()
 	{
 		RhythmAction_Mgr.m_Instance = this;

+ 48 - 1
Assembly-CSharp/SceneCharacterSelect.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using Schedule;
+using UnityEngine;
 
 public class SceneCharacterSelect : WfScreenManager
 {
@@ -14,6 +15,50 @@ public class SceneCharacterSelect : WfScreenManager
 		}
 	}
 
+	public static void CreateNewYotogiCharaList()
+	{
+		SceneCharacterSelect.chara_guid_stock_list.Clear();
+		List<Maid> newYotogiMaids = ScheduleAPI.GetNewYotogiMaids(GameMain.Instance.CharacterMgr.status.isDaytime);
+		for (int i = 0; i < newYotogiMaids.Count; i++)
+		{
+			SceneCharacterSelect.chara_guid_stock_list.Add(newYotogiMaids[i].status.guid);
+		}
+	}
+
+	public static void CreateNewYotogiHaremPairCharaList()
+	{
+		SceneCharacterSelect.chara_guid_stock_list.Clear();
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+		if (maid == null)
+		{
+			return;
+		}
+		for (int i = 0; i < 40; i++)
+		{
+			if (!(maid != GameMain.Instance.CharacterMgr.status.GetScheduleSlot(i)))
+			{
+				int num = (!GameMain.Instance.CharacterMgr.status.isDaytime) ? maid.status.nightWorkId : maid.status.noonWorkId;
+				if (!ScheduleCSVData.AllData.ContainsKey(num))
+				{
+					Debug.LogError("ScheduleAPI:タスクID[" + num + "]のデータが見つかりませんでした");
+				}
+				ScheduleCSVData.ScheduleBase scheduleBase = ScheduleCSVData.AllData[num];
+				if (scheduleBase.type == ScheduleTaskCtrl.TaskType.Yotogi)
+				{
+					ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)scheduleBase;
+					if (yotogi.yotogiType == ScheduleCSVData.YotogiType.NewSex && yotogi.pairCondPersonal.Count > 0)
+					{
+						foreach (Maid maid2 in ScheduleAPI.GetNewYotogiHaremPairCandidateList(yotogi.pairCondPersonal, maid))
+						{
+							SceneCharacterSelect.chara_guid_stock_list.Add(maid2.status.guid);
+						}
+					}
+				}
+				break;
+			}
+		}
+	}
+
 	public static void CreateVipCharaList()
 	{
 		SceneCharacterSelect.chara_guid_stock_list.Clear();
@@ -166,6 +211,8 @@ public class SceneCharacterSelect : WfScreenManager
 		Facility,
 		Recollection,
 		VRKaraokeSelect,
-		Additional
+		Additional,
+		NewYotogi,
+		NewYotogiAdditional
 	}
 }

+ 2 - 2
Assembly-CSharp/SceneEdit.cs

@@ -2918,8 +2918,8 @@ public class SceneEdit : MonoBehaviour
 			MaidColliderCollect.RemoveColliderAll(maid);
 			maid.body0.SetMaskMode(TBody.MaskMode.None);
 			maid.OpenMouthLookTooth(false);
-			maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-			maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+			maid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+			maid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			maid.Visible = false;
 		}
 		this.SetCameraOffset(SceneEdit.CAM_OFFS.CENTER);

+ 4 - 4
Assembly-CSharp/SceneVRCommunication.cs

@@ -256,8 +256,8 @@ public class SceneVRCommunication : MonoBehaviour
 						{
 							stockMaid.body0.MuneYureL(1f);
 							stockMaid.body0.MuneYureR(1f);
-							stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-							stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+							stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+							stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 							stockMaid.transform.localScale = Vector3.one;
 							stockMaid.StopKuchipakuPattern();
 							stockMaid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
@@ -269,8 +269,8 @@ public class SceneVRCommunication : MonoBehaviour
 						Maid stockMan = characterMgr.GetStockMan(j);
 						if (stockMan != null && stockMan.body0 != null && stockMan.body0.isLoadedBody)
 						{
-							stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-							stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+							stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+							stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 							stockMan.DelPrefabAll();
 						}
 					}

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

@@ -54,7 +54,7 @@ namespace Schedule
 					this.successLvName = "CM3D2_work_result_mark_daiseikou";
 					break;
 				}
-				if (ScheduleCSVData.YotogiData[base.id].yotogiType == ScheduleCSVData.YotogiType.HaveSex && this.uppedParams.yotogi_play_count == 0)
+				if ((ScheduleCSVData.YotogiData[base.id].yotogiType == ScheduleCSVData.YotogiType.HaveSex || ScheduleCSVData.YotogiData[base.id].yotogiType == ScheduleCSVData.YotogiType.NewSex) && this.uppedParams.yotogi_play_count == 0)
 				{
 					this.successLvName = "CM3D2_work_result_mark_sippai";
 					this.successLv = ScheduleData.WorkSuccessLv.Miss;

+ 69 - 3
Assembly-CSharp/Schedule/ScheduleAPI.cs

@@ -151,7 +151,7 @@ namespace Schedule
 				return false;
 			}
 			ScheduleCSVData.YotogiType yotogiType = ((ScheduleCSVData.Yotogi)scheduleBase).yotogiType;
-			return yotogiType != ScheduleCSVData.YotogiType.HaveSex && yotogiType != ScheduleCSVData.YotogiType.Vip && yotogiType != ScheduleCSVData.YotogiType.VipCall;
+			return yotogiType != ScheduleCSVData.YotogiType.HaveSex && yotogiType != ScheduleCSVData.YotogiType.NewSex && yotogiType != ScheduleCSVData.YotogiType.Vip && yotogiType != ScheduleCSVData.YotogiType.VipCall;
 		}
 
 		public static void BackupParam(SCENE_ID scene_id)
@@ -537,8 +537,7 @@ namespace Schedule
 					if (scheduleBase.type == ScheduleTaskCtrl.TaskType.Yotogi)
 					{
 						ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)scheduleBase;
-						ScheduleCSVData.YotogiType yotogiType = yotogi.yotogiType;
-						if (yotogiType == ScheduleCSVData.YotogiType.HaveSex)
+						if (yotogi.yotogiType == ScheduleCSVData.YotogiType.HaveSex)
 						{
 							list.Add(scheduleSlot);
 						}
@@ -548,6 +547,68 @@ namespace Schedule
 			return list;
 		}
 
+		public static List<Maid> GetNewYotogiMaids(bool isDaytime)
+		{
+			List<Maid> list = new List<Maid>();
+			for (int i = 0; i < 40; i++)
+			{
+				Maid scheduleSlot = GameMain.Instance.CharacterMgr.status.GetScheduleSlot(i);
+				if (scheduleSlot != null)
+				{
+					int num;
+					if (isDaytime)
+					{
+						num = scheduleSlot.status.noonWorkId;
+					}
+					else
+					{
+						num = scheduleSlot.status.nightWorkId;
+					}
+					if (!ScheduleCSVData.AllData.ContainsKey(num))
+					{
+						Debug.LogError("ScheduleAPI:タスクID[" + num + "]のデータが見つかりませんでした");
+					}
+					ScheduleCSVData.ScheduleBase scheduleBase = ScheduleCSVData.AllData[num];
+					if (scheduleBase.type == ScheduleTaskCtrl.TaskType.Yotogi)
+					{
+						ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)scheduleBase;
+						if (yotogi.yotogiType == ScheduleCSVData.YotogiType.NewSex)
+						{
+							if (yotogi.pairCondPersonal.Count <= 0 || ScheduleAPI.GetNewYotogiHaremPairCandidateList(yotogi.pairCondPersonal, scheduleSlot).Count > 0)
+							{
+								list.Add(scheduleSlot);
+							}
+						}
+					}
+				}
+			}
+			return list;
+		}
+
+		public static List<Maid> GetNewYotogiHaremPairCandidateList(List<int> condPersonalIds, Maid excludeMaid = null)
+		{
+			List<Maid> list = new List<Maid>();
+			if (condPersonalIds == null || condPersonalIds.Count <= 0)
+			{
+				return list;
+			}
+			for (int i = 0; i < GameMain.Instance.CharacterMgr.GetStockMaidCount(); i++)
+			{
+				Maid stockMaid = GameMain.Instance.CharacterMgr.GetStockMaid(i);
+				if (stockMaid != null && stockMaid.status.heroineType != HeroineType.Sub)
+				{
+					if (!(excludeMaid != null) || !(excludeMaid.status.guid == stockMaid.status.guid))
+					{
+						if (stockMaid.status.seikeiken == Seikeiken.Yes_Yes && stockMaid.status.relation >= Relation.Lover && condPersonalIds.Contains(stockMaid.status.personal.id))
+						{
+							list.Add(stockMaid);
+						}
+					}
+				}
+			}
+			return list;
+		}
+
 		public static void DecideSuccess(WorkResultSceneMode sceneMode, int index, bool commu)
 		{
 			Maid scheduleSlot = GameMain.Instance.CharacterMgr.status.GetScheduleSlot(index);
@@ -885,6 +946,7 @@ namespace Schedule
 				break;
 			}
 			case ScheduleCSVData.YotogiType.HaveSex:
+			case ScheduleCSVData.YotogiType.NewSex:
 				if (maid.status.GetFlag("_YotogiPlayed") > 0)
 				{
 				}
@@ -1414,6 +1476,10 @@ namespace Schedule
 						return false;
 					}
 				}
+				if (yotogi.pairCondPersonal.Count > 0 && ScheduleAPI.GetNewYotogiHaremPairCandidateList(yotogi.pairCondPersonal, maid).Count <= 0)
+				{
+					return false;
+				}
 				if (yotogi.subMaidUnipueName != string.Empty)
 				{
 					if (maid.status.heroineType != HeroineType.Sub)

+ 22 - 3
Assembly-CSharp/Schedule/ScheduleCSVData.cs

@@ -881,6 +881,21 @@ namespace Schedule
 							}
 						}
 						num++;
+						yotogi.pairCondPersonal = new List<int>();
+						if (csv.IsCellToExistData(num, 0) && csv.IsCellToExistData(num, i))
+						{
+							string cellAsString18 = csv.GetCellAsString(num, i);
+							string[] array17 = cellAsString18.Split(new char[]
+							{
+								'|'
+							}, StringSplitOptions.RemoveEmptyEntries);
+							for (int num15 = 0; num15 < array17.Length; num15++)
+							{
+								int id5 = MaidStatus.Personal.GetData(array17[num15]).id;
+								yotogi.pairCondPersonal.Add(id5);
+							}
+						}
+						num++;
 						if (mode == ScheduleCSVData.ScheduleBase.Mode.COM3D)
 						{
 							if (yotogi.yotogiType == ScheduleCSVData.YotogiType.HaveSex)
@@ -894,7 +909,7 @@ namespace Schedule
 						}
 						else if (mode == ScheduleCSVData.ScheduleBase.Mode.CM3D2 && yotogi.yotogiType != ScheduleCSVData.YotogiType.Vip && yotogi.yotogiType != ScheduleCSVData.YotogiType.VipCall)
 						{
-							goto IL_9E4;
+							goto IL_A63;
 						}
 						if (yotogi.id > 0)
 						{
@@ -902,7 +917,7 @@ namespace Schedule
 						}
 					}
 				}
-				IL_9E4:;
+				IL_A63:;
 			}
 		}
 
@@ -948,6 +963,7 @@ namespace Schedule
 					yotogi.condContract = new List<Contract>();
 					yotogi.condSkill = new Dictionary<int, int>();
 					yotogi.condPersonal = new List<int>();
+					yotogi.pairCondPersonal = new List<int>();
 					yotogi.condSeikeiken = new List<Seikeiken>();
 					yotogi.condYotogiClass = new List<int>();
 					yotogi.condRelation = new List<MaidStatus.Relation>();
@@ -1256,7 +1272,8 @@ namespace Schedule
 			Vip,
 			VipCall,
 			Travel,
-			EasyYotogi
+			EasyYotogi,
+			NewSex
 		}
 
 		public enum WorkType
@@ -1429,6 +1446,8 @@ namespace Schedule
 
 			public List<List<int>> condFacilityID;
 
+			public List<int> pairCondPersonal;
+
 			public bool netorareFlag;
 
 			public ScheduleCSVData.Yotogi.EasyYotogi easyYotogi;

+ 34 - 1
Assembly-CSharp/ScriptManager.cs

@@ -273,6 +273,8 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("SetCommunicationChara", new TJSScript.FunctionCallBack(this.TJSFuncSetCommunicationChara));
 		this.tjs_.AddFunction("SetRandomCommuChara", new TJSScript.FunctionCallBack(this.TJSFuncSetRandomCommuChara));
 		this.tjs_.AddFunction("CreateYotogiCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateYotogiCharaList));
+		this.tjs_.AddFunction("CreateNewYotogiCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateNewYotogiCharaList));
+		this.tjs_.AddFunction("CreateNewYotogiHaremPairCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateNewYotogiHaremPairCharaList));
 		this.tjs_.AddFunction("CreateVipCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateVipCharaList));
 		this.tjs_.AddFunction("CreateFacilityCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateFacilityCharaList));
 		this.tjs_.AddFunction("IsReceptionChara", new TJSScript.FunctionCallBack(this.TJSFuncIsReceptionChara));
@@ -339,6 +341,7 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("IsKasizukiCorrectSenarioFlag", new TJSScript.FunctionCallBack(this.TJSFuncIsKasizukiCorrectSenarioFlag));
 		this.tjs_.AddFunction("IsVRKaraokeMode", new TJSScript.FunctionCallBack(this.TJSFuncIsVRKaraokeMode));
 		this.tjs_.AddFunction("GetRemainingDanceTime", new TJSScript.FunctionCallBack(this.TJSFuncGetRemainingDanceTime));
+		this.tjs.AddFunction("GetYotogiCommandClickCount", new TJSScript.FunctionCallBack(this.TJSFuncGetYotogiCommandClickCount));
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		motionKagManager.Initialize();
 		motionKagManager.SetSloatNo(0);
@@ -1772,6 +1775,16 @@ public class ScriptManager : IDisposable
 		SceneCharacterSelect.CreateYotogiCharaList();
 	}
 
+	private void TJSFuncCreateNewYotogiCharaList(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		SceneCharacterSelect.CreateNewYotogiCharaList();
+	}
+
+	private void TJSFuncCreateNewYotogiHaremPairCharaList(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		SceneCharacterSelect.CreateNewYotogiHaremPairCharaList();
+	}
+
 	private void TJSFuncCreateVipCharaList(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 		SceneCharacterSelect.CreateVipCharaList();
@@ -2895,6 +2908,26 @@ public class ScriptManager : IDisposable
 		result.SetInteger(Mathf.RoundToInt(num * 1000f));
 	}
 
+	public void TJSFuncGetYotogiCommandClickCount(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result == null)
+		{
+			NDebug.Assert("error GetYotogiCommandClickCount", false);
+		}
+		NDebug.Assert(tjs_param.Length == 2, "GetYotogiCommandClickCount:引数が2つ必要です");
+		string text = tjs_param[0].AsString();
+		bool flag = tjs_param[1].AsBool();
+		result.SetInteger(0);
+		if (YotogiManager.instans == null || YotogiManager.instans.play_mgr == null || string.IsNullOrEmpty(text))
+		{
+			return;
+		}
+		Dictionary<string, int> dictionary = (!flag) ? YotogiManager.instans.play_mgr.commandClickCountSingle : YotogiManager.instans.play_mgr.commandClickCountTotal;
+		int integer = 0;
+		dictionary.TryGetValue(text, out integer);
+		result.SetInteger(integer);
+	}
+
 	public void OnReturnEvent(string fileName, int line)
 	{
 		if (this.compatibilityMode)
@@ -2962,7 +2995,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1190);
+		binary.Write(1200);
 		this.adv_kag_.Serialize(binary);
 	}
 

+ 2 - 0
Assembly-CSharp/WindowPartsBoneCheckBox.cs

@@ -65,11 +65,13 @@ public class WindowPartsBoneCheckBox : MonoBehaviour
 		if (check_box == this.CheckBoxMuneLPhysics)
 		{
 			this.mgr.select_maid.body0.jbMuneL.enabled = !check_box.check;
+			this.mgr.select_maid.body0.MuneYureL((float)((!this.mgr.select_maid.body0.jbMuneL.enabled) ? 0 : 1));
 			maidStoreData["use_mune_key_l"] = check_box.check.ToString();
 		}
 		else
 		{
 			this.mgr.select_maid.body0.jbMuneR.enabled = !check_box.check;
+			this.mgr.select_maid.body0.MuneYureR((float)((!this.mgr.select_maid.body0.jbMuneR.enabled) ? 0 : 1));
 			maidStoreData["use_mune_key_r"] = check_box.check.ToString();
 		}
 		this.OnMotionUpdate();

+ 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", 1190);
+		XElement xelement = new XElement("GameVersion", 1200);
 		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[]

+ 95 - 16
Assembly-CSharp/YotogiManager.cs

@@ -9,6 +9,41 @@ using Yotogis;
 
 public class YotogiManager : WfScreenManager
 {
+	public bool uiVisible
+	{
+		get
+		{
+			return base.gameObject.transform.parent.GetComponent<UIPanel>().alpha != 0f;
+		}
+		set
+		{
+			base.gameObject.transform.parent.GetComponent<UIPanel>().alpha = (float)((!value) ? 0 : 1);
+		}
+	}
+
+	public bool messageWindowVisible
+	{
+		set
+		{
+			GameObject gameObject = GameObject.Find("SystemUI Root/Manager_SystemUI/MessageWindowMgr");
+			if (gameObject != null)
+			{
+				MessageWindowMgr component = gameObject.GetComponent<MessageWindowMgr>();
+				if (component != null)
+				{
+					if (value)
+					{
+						component.OpenMessageWindowPanel();
+					}
+					else
+					{
+						component.CloseMessageWindowPanel();
+					}
+				}
+			}
+		}
+	}
+
 	public void Awake()
 	{
 		YotogiStage.CreateData();
@@ -24,9 +59,17 @@ public class YotogiManager : WfScreenManager
 		{
 			this.play_skill_array_[i] = new YotogiManager.PlayingSkillData();
 		}
+		this.addTagNames.Clear();
 		this.adv_kag_ = GameMain.Instance.ScriptMgr.adv_kag;
 		this.yotogi_kag_ = GameMain.Instance.ScriptMgr.yotogi_kag;
-		this.adv_kag_.kag.AddTagCallBack("yotogicall", new KagScript.KagTagCallBack(this.TagYotogiCall));
+		Action<string, KagScript.KagTagCallBack> action = delegate(string tagName, KagScript.KagTagCallBack callback)
+		{
+			this.addTagNames.Add(tagName);
+			this.adv_kag_.kag.AddTagCallBack(tagName, callback);
+		};
+		action("yotogicall", new KagScript.KagTagCallBack(this.TagYotogiCall));
+		action("returnsuspend", new KagScript.KagTagCallBack(this.TagReturnSuspend));
+		action("restart", new KagScript.KagTagCallBack(this.TagReStart));
 		this.yotogi_kag_.kag.AddTagCallBack("playbgmroom", new KagScript.KagTagCallBack(this.TagPlayBGMRoom));
 		this.yotogi_kag_.kag.AddTagCallBack("controlmask", new KagScript.KagTagCallBack(this.TagControlMask));
 		this.yotogi_kag_.enabled = false;
@@ -115,7 +158,10 @@ public class YotogiManager : WfScreenManager
 		{
 			if (this.adv_kag_.kag != null)
 			{
-				this.adv_kag_.kag.RemoveTagCallBack("yotogicall");
+				foreach (string tag_name in this.addTagNames)
+				{
+					this.adv_kag_.kag.RemoveTagCallBack(tag_name);
+				}
 			}
 			this.adv_kag_ = null;
 			if (this.yotogi_kag_.kag != null)
@@ -160,6 +206,44 @@ public class YotogiManager : WfScreenManager
 		return false;
 	}
 
+	public bool TagReturnSuspend(KagTagSupport tag_data)
+	{
+		if (this.play_mgr != null)
+		{
+			this.play_mgr.ReturnSuspend();
+		}
+		return false;
+	}
+
+	public bool TagReStart(KagTagSupport tag_data)
+	{
+		this.adv_kag_.CheckAbsolutelyNecessaryTag(tag_data, "restart", new string[]
+		{
+			"skillid"
+		});
+		int num = tag_data.GetTagProperty("skillid").AsInteger();
+		Skill.Data data = Skill.Get(num);
+		if (data == null)
+		{
+			Debug.LogError("TagReStart Error\nnot find yotogiSkill " + num);
+			return false;
+		}
+		for (int i = 0; i < this.play_skill_array.Length; i++)
+		{
+			if (this.play_skill_array[i].skill_pair.base_data == null)
+			{
+				YotogiManager.PlayingSkillData playingSkillData = new YotogiManager.PlayingSkillData();
+				playingSkillData.skill_pair = Yotogi.SkillDataPair.Create(this.maid_, data);
+				playingSkillData.skill_pair.lock_skill_exp = true;
+				playingSkillData.backup_total_exp = playingSkillData.skill_pair.skill_data.expSystem.GetTotalExp();
+				this.play_skill_array[i] = playingSkillData;
+				break;
+			}
+		}
+		this.play_mgr_.OnClickNext();
+		return false;
+	}
+
 	public bool TagPlayBGMRoom(KagTagSupport tag_data)
 	{
 		List<YotogiStage.Data> allDatas = YotogiStage.GetAllDatas(false);
@@ -281,31 +365,24 @@ public class YotogiManager : WfScreenManager
 
 	public bool IsAllCharaBusy()
 	{
-		bool flag = false;
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 		for (int i = 0; i < characterMgr.GetMaidCount(); i++)
 		{
 			Maid maid = characterMgr.GetMaid(i);
 			if (maid != null && maid.Visible && maid.IsBusy)
 			{
-				flag = true;
-				break;
+				return true;
 			}
 		}
-		if (flag)
-		{
-			return flag;
-		}
 		for (int j = 0; j < characterMgr.GetManCount(); j++)
 		{
 			Maid man = characterMgr.GetMan(j);
 			if (man != null && man.Visible && man.IsBusy)
 			{
-				flag = true;
-				break;
+				return true;
 			}
 		}
-		return flag;
+		return false;
 	}
 
 	public void ResetWorld()
@@ -319,8 +396,8 @@ public class YotogiManager : WfScreenManager
 			{
 				stockMaid.body0.MuneYureL(1f);
 				stockMaid.body0.MuneYureR(1f);
-				stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-				stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+				stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+				stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			}
 		}
 		for (int j = 0; j < characterMgr.GetStockManCount(); j++)
@@ -328,8 +405,8 @@ public class YotogiManager : WfScreenManager
 			Maid stockMan = characterMgr.GetStockMan(j);
 			if (stockMan != null && stockMan.body0 != null && stockMan.body0.isLoadedBody)
 			{
-				stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-				stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+				stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+				stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			}
 		}
 		string[] array = new string[]
@@ -804,6 +881,8 @@ public class YotogiManager : WfScreenManager
 
 	private YotogiManager.BackUpStatus backup_status_ = default(YotogiManager.BackUpStatus);
 
+	public HashSet<string> addTagNames = new HashSet<string>();
+
 	public enum CallScreenType
 	{
 		Null,

+ 4 - 4
Assembly-CSharp/YotogiOldManager.cs

@@ -302,8 +302,8 @@ public class YotogiOldManager : WfScreenManager
 			{
 				stockMaid.body0.MuneYureL(1f);
 				stockMaid.body0.MuneYureR(1f);
-				stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-				stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+				stockMaid.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+				stockMaid.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			}
 		}
 		for (int j = 0; j < characterMgr.GetStockManCount(); j++)
@@ -311,8 +311,8 @@ public class YotogiOldManager : WfScreenManager
 			Maid stockMan = characterMgr.GetStockMan(j);
 			if (stockMan != null && stockMan.body0 != null && stockMan.body0.isLoadedBody)
 			{
-				stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
-				stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, 0f, false, false);
+				stockMan.IKTargetToBone("左手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
+				stockMan.IKTargetToBone("右手", null, "無し", Vector3.zero, IKCtrlData.IKAttachType.Point, false, false, false);
 			}
 		}
 		string[] array = new string[]

+ 6 - 0
Assembly-CSharp/YotogiPlay.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using MaidStatus;
+using Yotogis;
 
 public static class YotogiPlay
 {
@@ -195,4 +196,9 @@ public static class YotogiPlay
 
 		public int yotogi_type_total_exp;
 	}
+
+	public class SuspendStore
+	{
+		public Skill.Data.Command.Data comand;
+	}
 }

+ 195 - 58
Assembly-CSharp/YotogiPlayManager.cs

@@ -169,6 +169,8 @@ public class YotogiPlayManager : WfScreenChildren
 
 	private void Initialize()
 	{
+		this.suspendStoreData = null;
+		this.calledAdvFiles.Clear();
 		this.estrusMode = false;
 		this.yotogi_mgr_.acquired_propensityid_list.Clear();
 		this.ClearVoice();
@@ -287,6 +289,8 @@ public class YotogiPlayManager : WfScreenChildren
 			yield return null;
 		}
 		this.doneFtFileCall = true;
+		this.yotogi_mgr_.uiVisible = true;
+		this.yotogi_mgr_.messageWindowVisible = false;
 		yield break;
 	}
 
@@ -422,6 +426,7 @@ public class YotogiPlayManager : WfScreenChildren
 			this.paramenter_viewer_.UpdateTextParam();
 		}
 		this.param_scroll_.Init();
+		this.commandClickCountSingle.Clear();
 		if (this.yotogi_mgr_.play_skill_array[this.playing_skill_no_].skill_pair.base_data == null)
 		{
 			return false;
@@ -501,6 +506,64 @@ public class YotogiPlayManager : WfScreenChildren
 		return true;
 	}
 
+	public void Suspend(Skill.Data.Command.Data suspendCommandData)
+	{
+		if (GameMain.Instance.MainCamera.IsFadeProc())
+		{
+			Debug.LogError("failed to Yotogi Suspend.");
+			return;
+		}
+		this.yotogi_mgr_.yotogi_kag.enabled = false;
+		this.SetControlMask(true, true);
+		this.lockRepeatVoiceUpdate = true;
+		this.suspendStoreData = new YotogiPlay.SuspendStore();
+		this.suspendStoreData.comand = suspendCommandData;
+		GameMain.Instance.MainCamera.FadeOut(0.5f, false, delegate
+		{
+			this.yotogi_mgr_.uiVisible = false;
+			GameMain.Instance.ScriptMgr.adv_kag.JumpLabel("*サスペンド");
+			GameMain.Instance.ScriptMgr.adv_kag.Exec();
+		}, true, default(Color));
+	}
+
+	public void ReturnSuspend()
+	{
+		if (GameMain.Instance.MainCamera.IsFadeProc() || this.suspendStoreData == null)
+		{
+			Debug.LogError("failed to Yotogi ReturnSuspend.");
+			return;
+		}
+		this.yotogi_mgr_.yotogi_kag.enabled = true;
+		this.yotogi_mgr_.uiVisible = true;
+		this.yotogi_mgr_.messageWindowVisible = false;
+		if (this.suspendStoreData.comand != null)
+		{
+			if (!string.IsNullOrEmpty(this.suspendStoreData.comand.basic.attribute_type))
+			{
+				string attribute_type = this.suspendStoreData.comand.basic.attribute_type;
+				if (!this.commandClickCountSingle.ContainsKey(attribute_type))
+				{
+					this.commandClickCountSingle.Add(attribute_type, 0);
+				}
+				if (!this.commandClickCountTotal.ContainsKey(attribute_type))
+				{
+					this.commandClickCountTotal.Add(attribute_type, 0);
+				}
+				Dictionary<string, int> dictionary;
+				string key;
+				(dictionary = this.commandClickCountSingle)[key = attribute_type] = dictionary[key] - 1;
+				string key2;
+				(dictionary = this.commandClickCountTotal)[key2 = attribute_type] = dictionary[key2] - 1;
+			}
+			this.OnClickCommand(this.suspendStoreData.comand);
+		}
+		this.suspendStoreData = null;
+		GameMain.Instance.MainCamera.FadeIn(0.5f, false, delegate
+		{
+			this.SetControlMask(false, true);
+		}, true, true, default(Color));
+	}
+
 	public string CallNormalFile(string file, string label)
 	{
 		string text = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
@@ -630,6 +693,72 @@ public class YotogiPlayManager : WfScreenChildren
 		}
 		this.yotogi_mgr_.AddDebugLog("============================================");
 		this.yotogi_mgr_.AddDebugLog("■コマンド[" + command_data.basic.name + "]が押されました");
+		if (!string.IsNullOrEmpty(command_data.basic.attribute_type))
+		{
+			string attribute_type = command_data.basic.attribute_type;
+			if (!this.commandClickCountSingle.ContainsKey(attribute_type))
+			{
+				this.commandClickCountSingle.Add(attribute_type, 0);
+			}
+			if (!this.commandClickCountTotal.ContainsKey(attribute_type))
+			{
+				this.commandClickCountTotal.Add(attribute_type, 0);
+			}
+			Dictionary<string, int> dictionary;
+			string key;
+			(dictionary = this.commandClickCountSingle)[key = attribute_type] = dictionary[key] + 1;
+			string key2;
+			(dictionary = this.commandClickCountTotal)[key2 = attribute_type] = dictionary[key2] + 1;
+		}
+		if (!string.IsNullOrEmpty(command_data.basic.call_file.adv_hook_file))
+		{
+			bool flag = false;
+			string key3 = string.Empty;
+			string text = string.Empty;
+			GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_file = '';");
+			GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_label = '';");
+			this.CallNormalFile(command_data.basic.call_file.adv_hook_file, "*top");
+			using (TJSVariant tjsvariant = new TJSVariant())
+			{
+				GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_file != ''", tjsvariant);
+				flag = tjsvariant.AsBool();
+				if (flag)
+				{
+					GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_file", tjsvariant);
+					key3 = tjsvariant.AsString();
+					GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_label != ''", tjsvariant);
+					if (tjsvariant.AsBool())
+					{
+						GameMain.Instance.ScriptMgr.EvalScript("global.__yotogi_advhook_label", tjsvariant);
+						text = tjsvariant.AsString();
+					}
+					if (string.IsNullOrEmpty(text))
+					{
+						flag = !this.calledAdvFiles.ContainsKey(key3);
+					}
+					else
+					{
+						flag = (!this.calledAdvFiles.ContainsKey(key3) || !this.calledAdvFiles[key3].Contains(text));
+					}
+					if (flag)
+					{
+						if (!this.calledAdvFiles.ContainsKey(key3))
+						{
+							this.calledAdvFiles.Add(key3, new HashSet<string>());
+						}
+						if (!string.IsNullOrEmpty(text) && !this.calledAdvFiles[key3].Contains(text))
+						{
+							this.calledAdvFiles[key3].Add(text);
+						}
+					}
+				}
+			}
+			if (flag)
+			{
+				this.Suspend(command_data);
+				return;
+			}
+		}
 		this.play_command_id_.Add(command_data.basic.id);
 		this.backup_maid_param_ = YotogiPlay.Param.Create(this.maid_);
 		this.ApplyExecCommandStatus(this.maid_, command_data);
@@ -747,16 +876,16 @@ public class YotogiPlayManager : WfScreenChildren
 		}
 		else if (command_type == Yotogi.SkillCommandType.単発 || command_type == Yotogi.SkillCommandType.単発_挿入)
 		{
-			bool flag = false;
+			bool flag2 = false;
 			if (command_data.basic.isPropensityCommand)
 			{
-				flag = this.maid_.status.propensitys.ContainsKey(command_data.basic.learning_propensity.id);
+				flag2 = this.maid_.status.propensitys.ContainsKey(command_data.basic.learning_propensity.id);
 			}
 			if (this.skill_pair_.base_data.specialConditionType == Skill.Data.SpecialConditionType.Drunk)
 			{
 				this.PlayDrunkSingle(command_data, maid, true);
 			}
-			else if (flag)
+			else if (flag2)
 			{
 				this.PlayProclivitySingle(command_data, true);
 			}
@@ -1342,6 +1471,61 @@ public class YotogiPlayManager : WfScreenChildren
 		this.CallCommandFile(normal, label, lockRRUpdate);
 	}
 
+	private void CallCommandFile(string file, string label, bool lockRRUpdate)
+	{
+		if (string.IsNullOrEmpty(file) || file == ".ks")
+		{
+			return;
+		}
+		file = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
+		file = Path.ChangeExtension(file, ".ks");
+		bool flag = false;
+		using (TJSVariant tjsvariant = new TJSVariant())
+		{
+			this.script_mgr_.EvalScript("global.__skill_command_file.count;", tjsvariant);
+			if (0 < tjsvariant.AsInteger())
+			{
+				flag = true;
+			}
+		}
+		if (!flag)
+		{
+			this.ClearCommandFile();
+			this.script_mgr_.EvalScript(string.Concat(new string[]
+			{
+				"global.__skill_command_file.add(%['file'=>'",
+				file,
+				"','label'=>'",
+				label,
+				"','rrlock'=>'",
+				lockRRUpdate.ToString().ToLower(),
+				"']);"
+			}));
+			this.script_mgr_.LoadYotogiScript("yotogi_skill_command_call_main.ks", string.Empty);
+			this.yotogi_mgr_.AddDebugLog(string.Concat(new string[]
+			{
+				"コマンドファイル[",
+				file,
+				"][",
+				label,
+				"]を呼び出しました"
+			}));
+		}
+		else
+		{
+			this.script_mgr_.EvalScript(string.Concat(new string[]
+			{
+				"global.__skill_command_file.add(%['file'=>'",
+				file,
+				"','label'=>'",
+				label,
+				"','rrlock'=>'",
+				lockRRUpdate.ToString().ToLower(),
+				"']);"
+			}));
+		}
+	}
+
 	private bool OnCreateCommand(Skill.Data.Command.Data command_data)
 	{
 		return command_data.basic.ng_propensity == null || !this.maid_status_.propensitys.ContainsKey(command_data.basic.ng_propensity.id);
@@ -1633,61 +1817,6 @@ public class YotogiPlayManager : WfScreenChildren
 		this.script_mgr_.EvalScript("global.__skill_command_file.clear();");
 	}
 
-	private void CallCommandFile(string file, string label, bool lockRRUpdate)
-	{
-		if (string.IsNullOrEmpty(file) || file == ".ks")
-		{
-			return;
-		}
-		file = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
-		file = Path.ChangeExtension(file, ".ks");
-		bool flag = false;
-		using (TJSVariant tjsvariant = new TJSVariant())
-		{
-			this.script_mgr_.EvalScript("global.__skill_command_file.count;", tjsvariant);
-			if (0 < tjsvariant.AsInteger())
-			{
-				flag = true;
-			}
-		}
-		if (!flag)
-		{
-			this.ClearCommandFile();
-			this.script_mgr_.EvalScript(string.Concat(new string[]
-			{
-				"global.__skill_command_file.add(%['file'=>'",
-				file,
-				"','label'=>'",
-				label,
-				"','rrlock'=>'",
-				lockRRUpdate.ToString().ToLower(),
-				"']);"
-			}));
-			this.script_mgr_.LoadYotogiScript("yotogi_skill_command_call_main.ks", string.Empty);
-			this.yotogi_mgr_.AddDebugLog(string.Concat(new string[]
-			{
-				"コマンドファイル[",
-				file,
-				"][",
-				label,
-				"]を呼び出しました"
-			}));
-		}
-		else
-		{
-			this.script_mgr_.EvalScript(string.Concat(new string[]
-			{
-				"global.__skill_command_file.add(%['file'=>'",
-				file,
-				"','label'=>'",
-				label,
-				"','rrlock'=>'",
-				lockRRUpdate.ToString().ToLower(),
-				"']);"
-			}));
-		}
-	}
-
 	public void OnClickReleaseSeieki()
 	{
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
@@ -1999,6 +2128,10 @@ public class YotogiPlayManager : WfScreenChildren
 
 	public SubtitleDisplayManager subtitlesManager;
 
+	public Dictionary<string, int> commandClickCountTotal = new Dictionary<string, int>();
+
+	public Dictionary<string, int> commandClickCountSingle = new Dictionary<string, int>();
+
 	public bool lockRepeatVoiceUpdate;
 
 	private Maid maid_;
@@ -2083,6 +2216,10 @@ public class YotogiPlayManager : WfScreenChildren
 
 	private float message_display_time_;
 
+	private YotogiPlay.SuspendStore suspendStoreData;
+
+	private Dictionary<string, HashSet<string>> calledAdvFiles = new Dictionary<string, HashSet<string>>();
+
 	private struct FreeModeBackUpData
 	{
 		public Seikeiken seikeiken;

+ 21 - 9
Assembly-CSharp/Yotogis/Skill.cs

@@ -1683,7 +1683,7 @@ namespace Yotogis
 
 					public class CallFile
 					{
-						public CallFile(string normal, string insert, string rc, string rrc, string rr, string propensity_arousal_file)
+						public CallFile(string normal, string insert, string rc, string rrc, string rr, string propensity_arousal_file, string adv_hook_file)
 						{
 							this.normal = normal;
 							this.insert = insert;
@@ -1691,6 +1691,7 @@ namespace Yotogis
 							this.rrc = rrc;
 							this.rr = rr;
 							this.propensity_arousal_file = propensity_arousal_file;
+							this.adv_hook_file = adv_hook_file;
 						}
 
 						public readonly string normal;
@@ -1704,6 +1705,8 @@ namespace Yotogis
 						public readonly string rr;
 
 						public readonly string propensity_arousal_file;
+
+						public readonly string adv_hook_file;
 					}
 
 					public class Basic
@@ -1755,6 +1758,7 @@ namespace Yotogis
 							this.name = setting_csv.GetCellAsString(cell_x++, cell_y);
 							string text = setting_csv.GetCellAsString(cell_x++, cell_y);
 							this.command_type = (Yotogi.SkillCommandType)Enum.Parse(typeof(Yotogi.SkillCommandType), text);
+							this.attribute_type = setting_csv.GetCellAsString(cell_x++, cell_y);
 							text = setting_csv.GetCellAsString(cell_x++, cell_y).ToLower();
 							if (string.IsNullOrEmpty(text))
 							{
@@ -1833,12 +1837,18 @@ namespace Yotogis
 							{
 								cell_x++;
 							}
+							string text8 = setting_csv.GetCellAsString(cell_x++, cell_y);
+							text = setting_csv.GetCellAsString(cell_x++, cell_y);
+							if (!string.IsNullOrEmpty(text8))
+							{
+								text8 += ".ks";
+							}
 							this.request_insert = (setting_csv.GetCellAsString(cell_x++, cell_y) == "〇");
 							if (this.command_type != Yotogi.SkillCommandType.単発 && this.command_type != Yotogi.SkillCommandType.単発_挿入)
 							{
 								this.request_insert = true;
 							}
-							this.call_file = new Skill.Data.Command.Data.CallFile(text2, text3, text4, text5, text6, text7);
+							this.call_file = new Skill.Data.Command.Data.CallFile(text2, text3, text4, text5, text6, text7, text8);
 							this.ecxecConditionTexts = new string[0];
 							cell_x++;
 							this.request_propensity = new HashSet<int>();
@@ -1851,28 +1861,28 @@ namespace Yotogis
 								{
 									','
 								});
-								foreach (string text8 in array)
+								foreach (string text9 in array)
 								{
-									if (text8.Trim().Split(new char[]
+									if (text9.Trim().Split(new char[]
 									{
 										'|'
 									}).Length == 1)
 									{
-										bool flag = Propensity.Contains(text8);
-										if (flag && !this.request_propensity.Contains(Propensity.GetData(text8).id))
+										bool flag = Propensity.Contains(text9);
+										if (flag && !this.request_propensity.Contains(Propensity.GetData(text9).id))
 										{
-											this.request_propensity.Add(Propensity.GetData(text8).id);
+											this.request_propensity.Add(Propensity.GetData(text9).id);
 										}
 									}
 									else
 									{
-										bool flag2 = text8.Trim().Split(new char[]
+										bool flag2 = text9.Trim().Split(new char[]
 										{
 											'|'
 										}).Length == 2;
 										if (flag2)
 										{
-											this.executionConditionParameters.Parse(text8.Trim().Replace("|", "="), ',');
+											this.executionConditionParameters.Parse(text9.Trim().Replace("|", "="), ',');
 										}
 									}
 								}
@@ -1926,6 +1936,8 @@ namespace Yotogis
 
 						public readonly Yotogi.SkillCommandType command_type;
 
+						public readonly string attribute_type;
+
 						public readonly Color color;
 
 						public readonly int request_skill_lv;