using MonoMod; using MU3.Battle; using MU3.Game; using MU3.Util; namespace MU3.Sequence; class patch_PlayMusic: PlayMusic { private GameEngine _gameEngine; private SessionInfo _sessionInfo; private bool _nuclearSkip = false; private bool _quickStart = false; [MonoModIgnore] private extern bool isPartyPlay(); [MonoModIgnore] private extern void Enter_ShowBonusStart(); private void Leave_LoadScene() { using IniFile iniFile = new("mu3.ini"); _quickStart = iniFile.getValue("Sequence", "QuickStart", false); } private extern void orig_Execute_StartCutscene(); private void Execute_StartCutscene() { orig_Execute_StartCutscene(); Singleton.instance.SkipEntry = false; if(_quickStart || Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { Singleton.instance.SkipEntry = true; _gameEngine.skipStartCutscene(); if(isPartyPlay()) { setNextState(EState.PartyWaitReady); } else { setNextState(EState.Countdown); } } } public extern bool orig_updateState(float deltaTime); public override bool updateState(float deltaTime = -1f) { var state = getCurrentState(); if(state >= EState.PlayEnd && Singleton.instance.getTriggerOn(UIInput.Key.MenuLeft)) { if(!isPartyPlay() || state > EState.CalcResult) { _nuclearSkip = true; } } if(_nuclearSkip) { bool isTutorial = SingletonMonoBehaviour.instance.sessionInfo.isTutorial; if(!isTutorial) { Singleton.instance.SkipItemFrame = true; if(state < EState.CalcResult) { setNextState(EState.CalcResult); } if(state > EState.CalcResult) { Enter_ShowBonusStart(); SingletonMonoBehaviour.instance.destroySkipButton(true); setNextState(EState.End); } } } return orig_updateState(deltaTime); } }