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)); }
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; }
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>(); } }
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(); } })); }
//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))); } }
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); }
public HSeCtrl() { this.hFlag = (HSceneFlagCtrl)Singleton <Resources> .Instance.HSceneTable.HSceneSet.GetComponentInChildren <HSceneFlagCtrl>(true); }
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); }