diff --git a/AquaMai/AquaMai.csproj b/AquaMai/AquaMai.csproj index 815e02d6..452e1630 100644 --- a/AquaMai/AquaMai.csproj +++ b/AquaMai/AquaMai.csproj @@ -266,8 +266,10 @@ + + diff --git a/AquaMai/AquaMai.toml b/AquaMai/AquaMai.toml index bdbe445e..4e3816fe 100644 --- a/AquaMai/AquaMai.toml +++ b/AquaMai/AquaMai.toml @@ -13,4 +13,11 @@ SkipWarningScreen=true # Single player: Show 1P only, at the center of the screen SinglePlayer=true # !!EXPERIMENTAL!! Skip from the card-scanning screen directly to music selection screen -SkipToMusicSelection=false \ No newline at end of file +SkipToMusicSelection=false +# Set the version string displayed at the top-right corner of the screen +CustomVersionString="" + +[Performance] +# Disable some useless checks and delays to speed up the game boot process +# !! Known issue: The game may crash if DX Pass scanning is enabled +ImproveLoadSpeed=false \ No newline at end of file diff --git a/AquaMai/Config.cs b/AquaMai/Config.cs index a9b8fb56..3a4d39fc 100644 --- a/AquaMai/Config.cs +++ b/AquaMai/Config.cs @@ -7,6 +7,7 @@ namespace AquaMai { public UXConfig UX { get; set; } public CheatConfig Cheat { get; set; } + public PerformanceConfig Performance { get; set; } public class CheatConfig { @@ -18,6 +19,12 @@ namespace AquaMai public bool SkipWarningScreen { get; set; } public bool SinglePlayer { get; set; } public bool SkipToMusicSelection { get; set; } + public string CustomVersionString { get; set; } + } + + public class PerformanceConfig + { + public bool ImproveLoadSpeed { get; set; } } } } diff --git a/AquaMai/Main.cs b/AquaMai/Main.cs index a69e69aa..6a35b971 100644 --- a/AquaMai/Main.cs +++ b/AquaMai/Main.cs @@ -1,5 +1,6 @@ using System; using AquaMai.Fix; +using AquaMai.UX; using MelonLoader; using Tomlet; @@ -77,6 +78,7 @@ namespace AquaMai // Fixes that does not have side effects // These don't need to be configurable Patch(typeof(FixCharaCrash)); + Patch(typeof(CustomVersionString)); MelonLogger.Msg("Loaded!"); } diff --git a/AquaMai/Performance/ImproveLoadSpeed.cs b/AquaMai/Performance/ImproveLoadSpeed.cs new file mode 100644 index 00000000..006ac44a --- /dev/null +++ b/AquaMai/Performance/ImproveLoadSpeed.cs @@ -0,0 +1,63 @@ +using System.Diagnostics; +using HarmonyLib; +using MAI2.Util; +using Manager; +using Process; + +namespace AquaMai.Performance +{ + public class ImproveLoadSpeed + { + [HarmonyPrefix] + [HarmonyPatch(typeof(PowerOnProcess), "OnUpdate")] + public static bool PrePowerOnUpdate(PowerOnProcess __instance) + { + var traverse = Traverse.Create(__instance); + var state = traverse.Field("_state").GetValue(); + switch (state) + { + case 3: + traverse.Field("_state").SetValue((byte)4); + break; + case 5: + case 6: + case 7: + traverse.Field("_state").SetValue((byte)8); + break; + case 9: + traverse.Field("_state").SetValue((byte)10); + break; + } + + return true; + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(StartupProcess), "OnUpdate")] + public static bool PreStartupUpdate(StartupProcess __instance) + { + var traverse = Traverse.Create(__instance); + var state = traverse.Field("_state").GetValue(); + switch (state) + { + case 0: + traverse.Field("_state").SetValue((byte)1); + break; + case 2: + // AimeReader maybe typeof AimeReaderManager or ChimeReaderManager, must build with correct Assembly-CSharp.dll in Libs folder + if(SingletonStateMachine.Instance.AimeReader.GetType().FullName == "Manager.AimeReaderManager") + traverse.Field("_state").SetValue((byte)3); + break; + case 4: + traverse.Field("_state").SetValue((byte)5); + break; + case 8: + var timer = traverse.Field("timer").GetValue(); + Traverse.Create(timer).Field("elapsed").SetValue(2 * 10000000L); + break; + } + + return true; + } + } +} \ No newline at end of file diff --git a/AquaMai/UX/CustomVersionString.cs b/AquaMai/UX/CustomVersionString.cs new file mode 100644 index 00000000..78282ea9 --- /dev/null +++ b/AquaMai/UX/CustomVersionString.cs @@ -0,0 +1,24 @@ +using HarmonyLib; + +namespace AquaMai.UX +{ + public class CustomVersionString + { + /* + * Patch displayVersionString Property Getter + */ + [HarmonyPrefix] + [HarmonyPatch(typeof(MAI2System.Config), "displayVersionString", MethodType.Getter)] + public static bool GetDisplayVersionString(ref string __result) + { + if (string.IsNullOrEmpty(AquaMai.AppConfig.UX.CustomVersionString)) + { + return true; + } + + __result = AquaMai.AppConfig.UX.CustomVersionString; + // Return false to block the original method + return false; + } + } +} \ No newline at end of file