forked from akanyan/mu3-mods
feat: implement postgame skip, fix crashes
This commit is contained in:
@ -5,6 +5,8 @@ class patch_SoundManager: SoundManager {
|
|||||||
private HandleInfo getHandle(Priority priority) => orig_getHandle(priority);
|
private HandleInfo getHandle(Priority priority) => orig_getHandle(priority);
|
||||||
private patch_SoundPlayer[] _soundPlayers;
|
private patch_SoundPlayer[] _soundPlayers;
|
||||||
public void pause(HandleInfo handle, bool val) {
|
public void pause(HandleInfo handle, bool val) {
|
||||||
_soundPlayers[handle.Index].pause(val);
|
if(handle.Index < _soundPlayers.Length) {
|
||||||
|
_soundPlayers[handle.Index].pause(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
27
SkipNotice/MU3/patch_DailyBonus.cs
Normal file
27
SkipNotice/MU3/patch_DailyBonus.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using MonoMod;
|
||||||
|
using MU3.Util;
|
||||||
|
|
||||||
|
namespace MU3;
|
||||||
|
class patch_DailyBonus: DailyBonus {
|
||||||
|
[MonoModIgnore]
|
||||||
|
private enum State {
|
||||||
|
ItemWindow = 3,
|
||||||
|
ExitWait = 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
private float waitCount;
|
||||||
|
private State _state;
|
||||||
|
private extern void orig_Update();
|
||||||
|
private void Update() {
|
||||||
|
if(_state < State.ItemWindow) {
|
||||||
|
if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.Decision)) {
|
||||||
|
waitCount = 100.0f;
|
||||||
|
}
|
||||||
|
if(Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.MenuLeft)) {
|
||||||
|
waitCount = 100.0f;
|
||||||
|
_state = State.ExitWait;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
orig_Update();
|
||||||
|
}
|
||||||
|
}
|
@ -4,27 +4,21 @@ namespace MU3;
|
|||||||
|
|
||||||
class patch_Scene_30_NoticeReward: Scene_30_NoticeReward {
|
class patch_Scene_30_NoticeReward: Scene_30_NoticeReward {
|
||||||
private Mode<Scene_30_NoticeReward, State> _mode;
|
private Mode<Scene_30_NoticeReward, State> _mode;
|
||||||
public static bool Skipped { get; private set; }
|
|
||||||
private enum State {
|
private enum State {
|
||||||
RankingReward = 2,
|
RankingReward = 2,
|
||||||
FadeOut = 8,
|
FadeOut = 8,
|
||||||
}
|
}
|
||||||
private void Start() {
|
private void Start() {
|
||||||
Skipped = false;
|
using IniFile iniFile = new("mu3.ini");
|
||||||
|
|
||||||
|
var quickLogin = iniFile.getValue("Sequence", "QuickLogin", false);
|
||||||
|
|
||||||
_mode = new Mode<Scene_30_NoticeReward, State>(this);
|
_mode = new Mode<Scene_30_NoticeReward, State>(this);
|
||||||
_mode.set(State.RankingReward);
|
if(quickLogin) {
|
||||||
SingletonMonoBehaviour<SystemUI>.instance.Panel.pushState(0, show: true);
|
|
||||||
}
|
|
||||||
private void Update() {
|
|
||||||
if(_mode.get() < (int)State.FadeOut && Singleton<UIInput>.instance.getTriggerOn(UIInput.Key.MenuLeft)) {
|
|
||||||
Skipped = true;
|
|
||||||
_mode.set(State.FadeOut);
|
_mode.set(State.FadeOut);
|
||||||
} else {
|
} else {
|
||||||
_mode.update();
|
_mode.set(State.RankingReward);
|
||||||
|
SingletonMonoBehaviour<SystemUI>.instance.Panel.pushState(0, show: true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void End_Init() {
|
|
||||||
Skipped = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,18 +0,0 @@
|
|||||||
namespace MU3;
|
|
||||||
class patch_UIGetRewards: UIGetRewards {
|
|
||||||
private extern void orig_invokeOnFinish();
|
|
||||||
private extern void orig_startNextItem();
|
|
||||||
private void invokeOnFinish() => orig_invokeOnFinish();
|
|
||||||
private void startNextItem() {
|
|
||||||
if(!patch_Scene_30_NoticeReward.Skipped) {
|
|
||||||
orig_startNextItem();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void Update() {
|
|
||||||
// The panel state will still be screwed up for some reason but it won't crash
|
|
||||||
// This could be improved
|
|
||||||
if(patch_Scene_30_NoticeReward.Skipped) {
|
|
||||||
invokeOnFinish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +1,16 @@
|
|||||||
using MU3.Battle;
|
using MU3.Battle;
|
||||||
|
using MU3.Data;
|
||||||
|
using MU3.Game;
|
||||||
using MU3.Util;
|
using MU3.Util;
|
||||||
|
|
||||||
namespace MU3.Sequence;
|
namespace MU3.Sequence;
|
||||||
|
|
||||||
class patch_PlayMusic: PlayMusic {
|
class patch_PlayMusic: PlayMusic {
|
||||||
private GameEngine _gameEngine;
|
private GameEngine _gameEngine;
|
||||||
private extern void orig_Execute_StartCutscene();
|
private SessionInfo _sessionInfo;
|
||||||
|
private bool _nuclearSkip = false;
|
||||||
public static bool ForceSkipped { get; private set; }
|
public static bool ForceSkipped { get; private set; }
|
||||||
|
private extern void orig_Execute_StartCutscene();
|
||||||
private void Execute_StartCutscene() {
|
private void Execute_StartCutscene() {
|
||||||
orig_Execute_StartCutscene();
|
orig_Execute_StartCutscene();
|
||||||
ForceSkipped = false;
|
ForceSkipped = false;
|
||||||
@ -17,4 +20,22 @@ class patch_PlayMusic: PlayMusic {
|
|||||||
setNextState(EState.Countdown);
|
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<UIInput>.instance.getTriggerOn(UIInput.Key.MenuLeft)) {
|
||||||
|
_nuclearSkip = true;
|
||||||
|
}
|
||||||
|
if(_nuclearSkip) {
|
||||||
|
if(state < EState.CalcResult) {
|
||||||
|
setNextState(EState.CalcResult);
|
||||||
|
}
|
||||||
|
if(state > EState.CalcResult) {
|
||||||
|
int selectorID = SingletonStateMachine<DataManager, DataManager.EState>.instance.getMemoryChapterData(_sessionInfo.chapterSelection.memoryChapterId)?.getMemoryChapterSelectorID() ?? 4;
|
||||||
|
Singleton<GameSound>.instance.gameBGM.playBGM(236, selectorID);
|
||||||
|
setNextState(EState.End);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return orig_updateState(deltaTime);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user