|  | @@ -214,7 +214,7 @@ public class Meido
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  Body.boEyeToCam = true;
 | 
	
		
			
				|  |  |                  Body.boHeadToCam = true;
 | 
	
		
			
				|  |  | -                SetPose(CachedPose.Pose);
 | 
	
		
			
				|  |  | +                SetPose(CachedPose);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              OnUpdateMeido();
 | 
	
	
		
			
				|  | @@ -337,16 +337,13 @@ public class Meido
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void SetPose(PoseInfo poseInfo)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        CachedPose = poseInfo;
 | 
	
		
			
				|  |  | -        SetPose(poseInfo.Pose);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    public void SetPose(string pose)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  |          if (!Body.isLoadedBody)
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (pose.StartsWith(Constants.CustomPosePath))
 | 
	
		
			
				|  |  | +        var pose = poseInfo.Pose;
 | 
	
		
			
				|  |  | +        var custom = poseInfo.CustomPose;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (custom)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var poseFilename = Path.GetFileNameWithoutExtension(pose);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -359,17 +356,17 @@ public class Meido
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              catch (Exception e) when (e is DirectoryNotFoundException or FileNotFoundException)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                Utility.LogWarning($"{poseFilename}: Could not open because {e.Message}");
 | 
	
		
			
				|  |  | +                Utility.LogWarning($"Could not open '{poseFilename}' because {e.Message}");
 | 
	
		
			
				|  |  |                  Constants.InitializeCustomPoses();
 | 
	
		
			
				|  |  | -                SetPose(PoseInfo.DefaultPose);
 | 
	
		
			
				|  |  | +                SetDefaultPose();
 | 
	
		
			
				|  |  |                  OnUpdateMeido();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              catch (Exception e)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                Utility.LogWarning($"{poseFilename}: Could not apply pose because {e.Message}");
 | 
	
		
			
				|  |  | -                SetPose(PoseInfo.DefaultPose);
 | 
	
		
			
				|  |  | +                Utility.LogWarning($"Could not apply pose '{poseFilename}' because {e.Message}");
 | 
	
		
			
				|  |  | +                SetDefaultPose();
 | 
	
		
			
				|  |  |                  OnUpdateMeido();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  return;
 | 
	
	
		
			
				|  | @@ -381,22 +378,46 @@ public class Meido
 | 
	
		
			
				|  |  |          else
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              var poseComponents = pose.Split(',');
 | 
	
		
			
				|  |  | +            var poseFilename = poseComponents[0] + ".anm";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            pose = poseComponents[0] + ".anm";
 | 
	
		
			
				|  |  | +            var tag = Maid.CrossFade(poseFilename, loop: true, val: 0f);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (string.IsNullOrEmpty(tag))
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                Utility.LogWarning($"Pose could not be loaded: {poseFilename}");
 | 
	
		
			
				|  |  | +                SetDefaultPose();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            Maid.CrossFade(pose, loop: true, val: 0f);
 | 
	
		
			
				|  |  |              Maid.GetAnimation().Play();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (poseComponents.Length > 1)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                Maid.GetAnimation()[pose].time = float.Parse(poseComponents[1]);
 | 
	
		
			
				|  |  | -                Maid.GetAnimation()[pose].speed = 0f;
 | 
	
		
			
				|  |  | +                var animation = Maid.GetAnimation()[poseFilename];
 | 
	
		
			
				|  |  | +                var time = float.Parse(poseComponents[1]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                animation.time = time;
 | 
	
		
			
				|  |  | +                animation.speed = 0f;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            SetPoseMune();
 | 
	
		
			
				|  |  | +            SetPoseMune(poseFilename);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Maid.SetAutoTwistAll(true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        CachedPose = poseInfo;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        void SetDefaultPose() =>
 | 
	
		
			
				|  |  | +            SetPose(PoseInfo.DefaultPose);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        void SetPoseMune(string pose)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var momiOrPaizuri = pose.Contains("_momi") || pose.Contains("paizuri_");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            SetMune(!momiOrPaizuri, left: true);
 | 
	
		
			
				|  |  | +            SetMune(!momiOrPaizuri, left: false);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public KeyValuePair<bool, bool> SetFrameBinary(byte[] poseBuffer) =>
 | 
	
	
		
			
				|  | @@ -861,14 +882,6 @@ public class Meido
 | 
	
		
			
				|  |  |              OnUpdateMeido();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private void SetPoseMune()
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        var momiOrPaizuri = CachedPose.Pose.Contains("_momi") || CachedPose.Pose.Contains("paizuri_");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        SetMune(!momiOrPaizuri, left: true);
 | 
	
		
			
				|  |  | -        SetMune(!momiOrPaizuri, left: false);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |      private void BackupBlendSetValues()
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          var values = Body.Face.morph.dicBlendSet[CurrentFaceBlendSet];
 |