Exemple #1
0
        public static void InitializeCheats()
        {
            CheatToolsWindow.OnShown = window =>
            {
                _studioInstance = Studio.Studio.IsInstance() ? Studio.Studio.Instance : null;
                _soundInstance  = Manager.Sound.instance;
                _sceneInstance  = Scene.instance;
                _gameMgr        = Game.IsInstance() ? Game.Instance : null;
                _baseMap        = BaseMap.instance;
                _hScene         = HSceneFlagCtrl.IsInstance() ? HSceneFlagCtrl.Instance : null;

                _openInInspectorButtons = new[]
                {
                    new KeyValuePair <object, string>(_gameMgr != null && _gameMgr.heroineList.Count > 0 ? (Func <object>)(() => _gameMgr.heroineList.Select(x => new ReadonlyCacheEntry(GetHeroineName(x), x))) : null, "Heroine list"),
                    new KeyValuePair <object, string>(ADVManager.IsInstance() ? ADVManager.Instance : null, "Manager.ADVManager.Instance"),
                    new KeyValuePair <object, string>(_baseMap, "Manager.BaseMap.instance"),
                    new KeyValuePair <object, string>(Character.IsInstance() ? Character.Instance : null, "Manager.Character.Instance"),
                    new KeyValuePair <object, string>(typeof(Manager.Config), "Manager.Config"),
                    new KeyValuePair <object, string>(_gameMgr, "Manager.Game.Instance"),
                    new KeyValuePair <object, string>(GameSystem.IsInstance() ? GameSystem.Instance : null, "Manager.GameSystem.Instance"),
                    new KeyValuePair <object, string>(_sceneInstance, "Manager.Scene.instance"),
                    new KeyValuePair <object, string>(_soundInstance, "Manager.Sound.instance"),
                    new KeyValuePair <object, string>(_studioInstance, "Studio.Instance"),
                    new KeyValuePair <object, string>((Func <object>)EditorUtilities.GetRootGoScanner, "Root Objects")
                };
            };

            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _hScene != null, DrawHSceneCheats, null));
            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _baseMap != null && (_hScene != null || Singleton <LobbySceneManager> .IsInstance()), DrawGirlCheatMenu, "Unable to edit character stats on this screen. Start an H scene or enter the lobby."));
            CheatToolsWindow.Cheats.Add(CheatEntry.CreateOpenInInspectorButtons(() => _openInInspectorButtons));
            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _studioInstance == null && _gameMgr != null && _gameMgr.saveData != null, DrawGlobalUnlocks, null));

            HarmonyLib.Harmony.CreateAndPatchAll(typeof(Hooks));
        }
Exemple #2
0
    public int Init(ChaControl _chaFemale, HSceneFlagCtrl _ctrlFlag)
    {
        this.ctrlFlag = _ctrlFlag;
        if (this.MapHchaFemales == null)
        {
            this.MapHchaFemales = new Dictionary <int, ChaControl[]>();
        }
        int index = this.MapHchaFemales.Count;

        if (this.MapHchaFemales.ContainsKey(index))
        {
            int key = 0;
            while (this.MapHchaFemales.ContainsKey(key))
            {
                ++key;
            }
            index = key;
        }
        this.MapHchaFemales.Add(index, new ChaControl[2]
        {
            _chaFemale,
            null
        });
        if (this.MapHLayerInfos == null)
        {
            this.MapHLayerInfos = new Dictionary <int, Dictionary <int, Dictionary <string, HLayerCtrl.HLayerInfo>[]> >();
        }
        this.MapHLayerInfos.Add(index, new Dictionary <int, Dictionary <string, HLayerCtrl.HLayerInfo>[]>());
        this.MapHLayerInfos[index].Add(1, new Dictionary <string, HLayerCtrl.HLayerInfo> [2]);
        this.MapHLayerInfos[index][1][0] = new Dictionary <string, HLayerCtrl.HLayerInfo>();
        this.ctrlFlag.AddMapSyncAnimLayer(index);
        return(index);
    }
        public static void HScene_EndProc_Patch()
        {
            activeDraggerUI   = false;
            activeAnimationUI = false;

            if (characters != null)
            {
                characters.Clear();
                characters = null;
            }
            hScene    = null;
            hSprite   = null;
            hFlagCtrl = null;
        }
Exemple #4
0
 public void Init(ChaControl[] _chaFemales, ChaControl[] _chaMales)
 {
     this.ctrlFlag   = Singleton <HSceneFlagCtrl> .Instance;
     this.chaFemales = _chaFemales;
     this.chaMales   = _chaMales;
     this.LayerInfos = new Dictionary <int, Dictionary <string, HLayerCtrl.HLayerInfo>[]>();
     this.LayerInfos.Add(0, new Dictionary <string, HLayerCtrl.HLayerInfo> [2]);
     this.LayerInfos.Add(1, new Dictionary <string, HLayerCtrl.HLayerInfo> [2]);
     foreach (KeyValuePair <int, Dictionary <string, HLayerCtrl.HLayerInfo>[]> layerInfo in this.LayerInfos)
     {
         layerInfo.Value[0] = new Dictionary <string, HLayerCtrl.HLayerInfo>();
         layerInfo.Value[1] = new Dictionary <string, HLayerCtrl.HLayerInfo>();
     }
 }
Exemple #5
0
 public ProcBase(DeliveryMember _delivery)
 {
     this.ctrlFlag        = _delivery.ctrlFlag;
     this.chaMales        = _delivery.chaMales;
     this.chaFemales      = _delivery.chaFemales;
     this.fade            = _delivery.fade;
     this.ctrlMeta        = _delivery.ctrlMeta;
     this.sprite          = _delivery.sprite;
     this.item            = _delivery.item;
     this.feelHit         = _delivery.feelHit;
     this.auto            = _delivery.auto;
     this.voice           = _delivery.voice;
     this.particle        = _delivery.particle;
     this.se              = _delivery.se;
     this.lstMotionIK     = _delivery.lstMotionIK;
     this.AtariEffect     = _delivery.AtariEffect;
     this.FeelHitEffect3D = _delivery.FeelHitEffect3D;
     this.Hitem           = (HSceneSpriteHitem)this.sprite.objHItem.GetComponent <HSceneSpriteHitem>();
     if (Object.op_Equality((Object)ProcBase.hSceneManager, (Object)null))
     {
         ProcBase.hSceneManager = Singleton <HSceneManager> .Instance;
     }
     for (int index = 0; index < 2; ++index)
     {
         this.randVoicePlays[index] = new ShuffleRand(-1);
         this.randVoicePlays[index].Init(index != 0 ? 2 : 3);
     }
     ObservableExtensions.Subscribe <bool>(Observable.Where <bool>((IObservable <M0>) this.isAtariHit, (Func <M0, bool>)(x => this.isAtariHitOld != x && this.CatID != 1)), (Action <M0>)(x =>
     {
         if (this.CatID == 7 && Singleton <HSceneFlagCtrl> .Instance.nowAnimationInfo.ActionCtrl.Item2 == 1 || Singleton <HSceneFlagCtrl> .Instance.nowAnimationInfo.ActionCtrl.Item2 == 2)
         {
             return;
         }
         this.isAtariHitOld = x;
         if (x)
         {
             this.AtariEffect.Play();
             if (!Singleton <HSceneManager> .Instance.isParticle)
             {
                 return;
             }
             this.FeelHitEffect3D.Play();
         }
         else
         {
             this.AtariEffect.Stop();
             this.FeelHitEffect3D.Stop();
         }
     }));
 }
Exemple #6
0
 //When user clicks finish button, set the inflation based on the button clicked
 private static void DetermineInflationState(HSceneFlagCtrl ctrlFlag)
 {
     //swallow clicked
     if (ctrlFlag.click == HSceneFlagCtrl.ClickKind.FinishInSide ||
         ctrlFlag.click == HSceneFlagCtrl.ClickKind.FinishSame ||
         ctrlFlag.click == HSceneFlagCtrl.ClickKind.FinishDrink)
     {
         // PregnancyPlugin.Logger.LogDebug($"Preg - Proc {ctrlFlag.click}");
         var heroine    = GetLeadHeroine();
         var controller = GetEffectController(heroine);
         controller.AddInflation(1);
     }
     //spit clicked
     else if (ctrlFlag.click == HSceneFlagCtrl.ClickKind.FinishOutSide ||
              ctrlFlag.click == HSceneFlagCtrl.ClickKind.FinishVomit)
     {
         // PregnancyPlugin.Logger.LogDebug($"Preg - Proc {ctrlFlag.click}");
         var heroine    = GetLeadHeroine();
         var controller = GetEffectController(heroine);
         controller.DrainInflation(Mathf.Max(3, Mathf.CeilToInt(InflationMaxCount.Value / 2.2f)));
     }
 }
Exemple #7
0
        public static void Initialize()
        {
            CheatToolsWindow.OnShown = window =>
            {
                _studioInstance = Studio.Studio.IsInstance() ? Studio.Studio.Instance : null;
                _soundInstance  = Manager.Sound.Instance;
                _sceneInstance  = Scene.Instance;
                _gameMgr        = Game.IsInstance() ? Game.Instance : null;
                _resources      = Resources.Instance;
                _map            = Map.IsInstance() ? Map.Instance : null;
                _hScene         = HSceneFlagCtrl.IsInstance() ? HSceneFlagCtrl.Instance : null;

                _gameTimeText = null;

                _openInInspectorButtons = new[]
                {
                    new KeyValuePair <object, string>(_map != null && _map.AgentTable.Count > 0 ? (Func <object>)(() => _map.AgentTable.Values.Select(x => new ReadonlyCacheEntry(x.CharaName, x))) : null, "Heroine list"),
                    new KeyValuePair <object, string>(Manager.ADV.IsInstance() ? Manager.ADV.Instance : null, "Manager.ADV.Instance"),
                    new KeyValuePair <object, string>(AnimalManager.IsInstance() ? AnimalManager.Instance : null, "Manager.AnimalManager.Instance"),
                    new KeyValuePair <object, string>(_map, "Manager.Map.Instance"),
                    new KeyValuePair <object, string>(Character.IsInstance() ? Character.Instance : null, "Manager.Character.Instance"),
                    new KeyValuePair <object, string>(Config.IsInstance() ? Config.Instance : null, "Manager.Config.Instance"),
                    new KeyValuePair <object, string>(_gameMgr, "Manager.Game.Instance"),
                    new KeyValuePair <object, string>(Manager.Housing.IsInstance() ? Manager.Housing.Instance : null, "Manager.Housing.Instance"),
                    new KeyValuePair <object, string>(_sceneInstance, "Manager.Scene.Instance"),
                    new KeyValuePair <object, string>(_soundInstance, "Manager.Sound.Instance"),
                    new KeyValuePair <object, string>(_studioInstance, "Studio.Instance"),
                    new KeyValuePair <object, string>((Func <object>)EditorUtilities.GetRootGoScanner, "Root Objects")
                };
            };


            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _map != null && _map.Player != null && _map.Player.PlayerData != null, DrawPlayerCheats, "Start the game to see player cheats"));
            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _map != null && _map.Simulator != null, DrawEnviroControls, null));
            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _hScene != null, DrawHSceneCheats, null));
            CheatToolsWindow.Cheats.Add(new CheatEntry(w => _map != null, DrawGirlCheatMenu, null));

            CheatToolsWindow.Cheats.Add(CheatEntry.CreateOpenInInspectorButtons(() => _openInInspectorButtons));
        }
        public static void HScene_SetStartAnimationInfo_Patch(HScene __instance, HSceneSprite ___sprite)
        {
            hScene  = __instance;
            hSprite = ___sprite;

            if (hScene == null || hSprite == null)
            {
                return;
            }

            hFlagCtrl = hScene.ctrlFlag;
            if (hFlagCtrl == null)
            {
                return;
            }

            cameraCtrl = hFlagCtrl.cameraCtrl;
            if (cameraCtrl == null)
            {
                return;
            }

            hSceneTrav          = Traverse.Create(hScene);
            Tools.hFlagCtrlTrav = Traverse.Create(hFlagCtrl);

            listTrav       = Traverse.Create(hScene.ctrlEyeNeckMale[0]);
            maleMotionList = listTrav?.Field("lstEyeNeck").GetValue <List <HMotionEyeNeckMale.EyeNeck> >();

            if (unlockCamera.Value)
            {
                cameraCtrl.isLimitDir = false;
                cameraCtrl.isLimitPos = false;
            }

            cameraShouldLock = true;

            characters     = new List <ChaControl>();
            maleCharacters = new List <ChaControl>();
            ChaControl[] males = __instance.GetMales();
            foreach (var male in males.Where(male => male != null))
            {
                maleCharacters.Add(male);
                characters.Add(male);
            }

            femaleCharacters = new List <ChaControl>();
            ChaControl[] females = __instance.GetFemales();
            foreach (var female in females.Where(female => female != null))
            {
                femaleCharacters.Add(female);
                characters.Add(female);
            }

            if (characters == null)
            {
                return;
            }

            obiSolver = GameObject.Find("SiruObiMgr").GetComponentInChildren <Obi.ObiSolver>(true);

            if (obiSolver != null)
            {
                obiSolver.UpdateOrder = obiUpdateMode.Value;
            }

            Tools.SetGotoWeaknessCount(countToWeakness.Value);
            SliderUI.InitDraggersUI();
        }
        public static void Postfix_HScene_Update(HScene __instance, ref HSceneManager ___hSceneManager, ref int ___mode, ref int ___modeCtrl)
        {
            if (__instance.NowStateIsEnd)
            {
                return;
            }

            HSceneFlagCtrl flagCtrl = __instance.ctrlFlag;

            if (flagCtrl.selectAnimationListInfo != null)
            {
                return;
            }


            // Sleep Sex

            bool isSleepSex = ___hSceneManager.EventKind == HSceneManager.HEvent.Yobai;

            if (isSleepSex)
            {
                if (ChangeSleepSex.Value)
                {
                    bool flagM = flagCtrl.feel_m > feelM;
                    bool flagF = flagCtrl.feel_f > feelF;

                    if (flagM)
                    {
                        wakeChance += (flagCtrl.feel_m - feelM) * wakeRate * 100f;
                    }

                    if (flagF)
                    {
                        wakeChance += (flagCtrl.feel_f - feelF) * wakeRate * 100f;
                    }

                    if (!flagM && !flagF)
                    {
                        wakeChance -= WakeDecay.Value * Time.deltaTime;
                    }

                    wakeChance = Mathf.Clamp(wakeChance, 0f, WakeChance.Value);

                    feelM = flagCtrl.feel_m;
                    feelF = flagCtrl.feel_f;
                }
                else
                {
                    wakeChance = WakeChance.Value;
                }

                flagCtrl.YobaiBareRate = (int)wakeChance;
            }
            else
            {
                wakeChance = flagCtrl.YobaiBareRate;
            }


            // Partner Check

            bool partnerCan = flagCtrl.feel_f >= partnerMeter;

            partnerAt = GetMeterAt(partnerCan, partnerMeter, partnerAt);

            if (partnerCan && flagCtrl.feel_f >= partnerAt)
            {
                switch (___mode)
                {
                case 0:
                case 4:
                case 6:
                    flagCtrl.feel_f = 1f;

                    return;

                case 2:
                case 7:
                    if (BothCan(flagCtrl))
                    {
                        flagCtrl.feel_f = flagCtrl.feel_m = 0.9f;
                        flagCtrl.click  = HSceneFlagCtrl.ClickKind.FinishSame;
                    }
                    else
                    {
                        flagCtrl.feel_f = 1f;
                    }

                    return;
                }
            }


            // Player Check

            bool playerCan = flagCtrl.feel_m >= playerMeter;

            playerAt = GetMeterAt(playerCan, playerMeter, playerAt);

            if (playerCan && flagCtrl.feel_m >= playerAt)
            {
                switch (___mode)
                {
                case 1:
                    flagCtrl.feel_m = 0.9f;

                    switch (___modeCtrl)
                    {
                    case 0:
                        flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishOutSide;

                        return;

                    case 1:
                        if (mouthChance >= Random.value)
                        {
                            if (drinkChance >= Random.value)
                            {
                                flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishDrink;
                            }
                            else
                            {
                                flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishVomit;
                            }
                        }
                        else
                        {
                            flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishOutSide;
                        }

                        return;
                    }

                    break;

                case 2:
                case 7:
                    flagCtrl.feel_m = 0.9f;

                    if (BothCan(flagCtrl))
                    {
                        flagCtrl.feel_f = 0.9f;
                        flagCtrl.click  = HSceneFlagCtrl.ClickKind.FinishSame;
                    }
                    else if (flagCtrl.isInsert && insideChance >= Random.value)
                    {
                        flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishInSide;
                    }
                    else
                    {
                        flagCtrl.click = HSceneFlagCtrl.ClickKind.FinishOutSide;
                    }

                    return;
                }
            }
        }
 static bool BothCan(HSceneFlagCtrl flagCtrl)
 {
     return(flagCtrl.feel_m >= bothMeter & flagCtrl.feel_f >= bothMeter);
 }
Exemple #11
0
 public HSeCtrl()
 {
     this.hFlag = (HSceneFlagCtrl)Singleton <Resources> .Instance.HSceneTable.HSceneSet.GetComponentInChildren <HSceneFlagCtrl>(true);
 }
Exemple #12
0
        static bool SpankingAutoProc(int _state, Spnking __instance)
        {
            HSceneFlagCtrl ctrlFlag = Singleton <HSceneFlagCtrl> .Instance;

            if (ctrlFlag.initiative == 0)
            {
                return(true);
            }
            HVoiceCtrl   voice  = (HVoiceCtrl)voiceFieldInfo.GetValue(__instance);
            HSceneSprite sprite = (HSceneSprite)spriteFieldInfo.GetValue(__instance);

            ChaControl[]  chaFemales     = (ChaControl[])chaFemalesFieldInfo.GetValue(__instance);
            ShuffleRand[] randVoicePlays = (ShuffleRand[])randVoicePlaysFieldInfo.GetValue(__instance);

            if (!ctrlFlag.stopFeelFemale)
            {
                ctrlFlag.feel_f = Mathf.Clamp01(ctrlFlag.feel_f - ctrlFlag.guageDecreaseRate * Time.deltaTime);
            }
            if (_state == 1 && ctrlFlag.feel_f < 0.5f)
            {
                playMethodInfo.Invoke(__instance, new object[] { "WIdle", false });
                voice.HouchiTime = 0f;
                return(true);
            }
            if (!GeneralHooks.SpankTimer.IsTime())
            {
                return(false);
            }
            else
            {
                GeneralHooks.SpankTimer.Reset();
            }
            if (voice.nowVoices[0].state == HVoiceCtrl.VoiceKind.voice || voice.nowVoices[0].state == HVoiceCtrl.VoiceKind.startVoice)
            {
                Voice.Stop(ctrlFlag.voice.voiceTrs[0]);
                voice.ResetVoice();
            }

            string scene = "D_Action";

            switch (_state)
            {
            case 1:
                scene = "SAction";
                break;

            case 0:
                scene = "WAction";
                break;
            }

            playMethodInfo.Invoke(__instance, new object[] { scene, false });

            upFeelFieldInfo.SetValue(__instance, true);
            float value = Mathf.Clamp01(chaFemales[0].siriAkaRate + ctrlFlag.siriakaAddRate);

            chaFemales[0].ChangeSiriAkaRate(value);
            timeFeelUpFieldInfo.SetValue(__instance, 0f);
            backupFieldInfo.SetValue(__instance, ctrlFlag.feel_f);
            backupFeelFieldInfo.SetValue(__instance, ctrlFlag.feelPain);
            ctrlFlag.isNotCtrl = false;
            if (randVoicePlays[0].Get() == 0)
            {
                ctrlFlag.voice.playVoices[0] = true;
            }
            ctrlFlag.voice.playShorts[0] = 0;

            bool isAddFeel = (bool)isAddFieldInfo.GetValue(__instance);

            if (!isAddFeel && ctrlFlag.feel_f >= 0.70f)
            {
                SpankingAfterWaitingAnimationAutoSelector();
            }

            return(false);
        }