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 patch_SoundPlayer[] _soundPlayers;
|
||||
public void pause(HandleInfo handle, bool 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 {
|
||||
private Mode<Scene_30_NoticeReward, State> _mode;
|
||||
public static bool Skipped { get; private set; }
|
||||
private enum State {
|
||||
RankingReward = 2,
|
||||
FadeOut = 8,
|
||||
}
|
||||
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);
|
||||
if(quickLogin) {
|
||||
_mode.set(State.FadeOut);
|
||||
} else {
|
||||
_mode.set(State.RankingReward);
|
||||
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);
|
||||
} else {
|
||||
_mode.update();
|
||||
}
|
||||
}
|
||||
|
||||
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.Data;
|
||||
using MU3.Game;
|
||||
using MU3.Util;
|
||||
|
||||
namespace MU3.Sequence;
|
||||
|
||||
class patch_PlayMusic: PlayMusic {
|
||||
private GameEngine _gameEngine;
|
||||
private extern void orig_Execute_StartCutscene();
|
||||
private SessionInfo _sessionInfo;
|
||||
private bool _nuclearSkip = false;
|
||||
public static bool ForceSkipped { get; private set; }
|
||||
|
||||
private extern void orig_Execute_StartCutscene();
|
||||
private void Execute_StartCutscene() {
|
||||
orig_Execute_StartCutscene();
|
||||
ForceSkipped = false;
|
||||
@ -17,4 +20,22 @@ class patch_PlayMusic: PlayMusic {
|
||||
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