diff --git a/AquaMai/AquaMai.csproj b/AquaMai/AquaMai.csproj index 4c891cf5..815e02d6 100644 --- a/AquaMai/AquaMai.csproj +++ b/AquaMai/AquaMai.csproj @@ -270,6 +270,7 @@ + diff --git a/AquaMai/Config.cs b/AquaMai/Config.cs index 0a1e0c98..a9b8fb56 100644 --- a/AquaMai/Config.cs +++ b/AquaMai/Config.cs @@ -7,16 +7,17 @@ namespace AquaMai { public UXConfig UX { get; set; } public CheatConfig Cheat { get; set; } - + public class CheatConfig { public bool TicketUnlock { get; set; } } - + public class UXConfig { public bool SkipWarningScreen { get; set; } public bool SinglePlayer { get; set; } + public bool SkipToMusicSelection { get; set; } } } -} \ No newline at end of file +} diff --git a/AquaMai/Main.cs b/AquaMai/Main.cs index c613eb4f..472533f0 100644 --- a/AquaMai/Main.cs +++ b/AquaMai/Main.cs @@ -20,41 +20,46 @@ namespace AquaMai public class AquaMai : MelonMod { public static Config AppConfig { get; private set; } - + private void Patch(Type type) { MelonLogger.Msg($"> Patching {type}"); HarmonyLib.Harmony.CreateAndPatchAll(type); } - - public override void OnInitializeMelon() + + public override void OnInitializeMelon() { MelonLogger.Msg("Loading mod settings..."); - + // Check if AquaMai.toml exists if (!System.IO.File.Exists("AquaMai.toml")) { MelonLogger.Error("AquaMai.toml not found! Please create it."); return; } - + // Read AquaMai.toml to load settings AppConfig = TomletMain.To(System.IO.File.ReadAllText("AquaMai.toml")); - + if (AppConfig.UX.SkipWarningScreen) Patch(typeof(SkipWarningScreen)); - + if (AppConfig.UX.SinglePlayer) Patch(typeof(SinglePlayer)); if (AppConfig.Cheat.TicketUnlock) Patch(typeof(TicketUnlock)); - + + if (AppConfig.UX.SkipToMusicSelection) + { + Patch(typeof(SkipToMusicSelection)); + } + // Fixes that does not have side effects // These don't need to be configurable Patch(typeof(FixCharaCrash)); - + MelonLogger.Msg("Loaded!"); } } -} \ No newline at end of file +} diff --git a/AquaMai/UX/SinglePlayer.cs b/AquaMai/UX/SinglePlayer.cs index eb9c2c1e..d9a5e026 100644 --- a/AquaMai/UX/SinglePlayer.cs +++ b/AquaMai/UX/SinglePlayer.cs @@ -6,11 +6,11 @@ namespace AquaMai.UX { // Hides the 2p (right hand side) UI. // Note: this is not my original work. I simply interpreted the code and rewrote it as a mod. - public class SinglePlayer + public class SinglePlayer { [HarmonyPrefix] [HarmonyPatch(typeof(Main.GameMain), "LateInitialize", new Type[] { typeof(MonoBehaviour), typeof(Transform), typeof(Transform) })] - public static bool LateInitialize(MonoBehaviour gameMainObject, ref Transform left, ref Transform right) + public static bool LateInitialize(MonoBehaviour gameMainObject, ref Transform left, ref Transform right) { left.transform.position = Vector3.zero; right.localScale = Vector3.zero; diff --git a/AquaMai/UX/SkipToMusicSelection.cs b/AquaMai/UX/SkipToMusicSelection.cs new file mode 100644 index 00000000..42e4de48 --- /dev/null +++ b/AquaMai/UX/SkipToMusicSelection.cs @@ -0,0 +1,26 @@ +using HarmonyLib; +using Manager; +using Process; +using Process.Information; + +namespace AquaMai.UX +{ + public class SkipToMusicSelection + { + /* + * Highly experimental, may well break some stuff + * Works by overriding the info screen (where it shows new events and stuff) + * to directly exit to the music selection screen, skipping character and + * event selection, among others + */ + [HarmonyPrefix] + [HarmonyPatch(typeof(InformationProcess), "OnUpdate")] + public static bool OnUpdate(InformationProcess __instance, ProcessDataContainer ___container) + { + GameManager.SetMaxTrack(); + ___container.processManager.AddProcess(new MusicSelectProcess(___container), 50); + ___container.processManager.ReleaseProcess(__instance); + return false; + } + } +}