using MonoMod; using MU3.Battle; using MU3.Data; using MU3.Game; using MU3.Util; namespace MU3.Sequence; class patch_PlayMusic: PlayMusic { private GameEngine _gameEngine; private SessionInfo _sessionInfo; private bool _nuclearSkip = false; [MonoModIgnore] private extern bool isPartyPlay(); private extern void orig_Execute_StartCutscene(); private void Execute_StartCutscene() { orig_Execute_StartCutscene(); Singleton.instance.SkipEntry = false; if(Singleton.instance.config.isQuickStart || 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) { int selectorID = SingletonStateMachine.instance.getMemoryChapterData(_sessionInfo.chapterSelection.memoryChapterId)?.getMemoryChapterSelectorID() ?? 4; Singleton.instance.gameBGM.playBGM(236, selectorID); setNextState(EState.End); } } } return orig_updateState(deltaTime); } }