diff --git a/Gnoll Mods/HigherZoom/HigherZoom/ModMain.cs b/Gnoll Mods/HigherZoom/HigherZoom/ModMain.cs index 20073cf..ff985d1 100644 --- a/Gnoll Mods/HigherZoom/HigherZoom/ModMain.cs +++ b/Gnoll Mods/HigherZoom/HigherZoom/ModMain.cs @@ -20,8 +20,30 @@ public class ModMain : IGnollMod public void OnLoad(HookManager hookManager) { hookManager.AfterGameLoaded += HookManager_AfterGameLoaded; + hookManager.BeforeInGameHudInit += HookManager_BeforeInGameHudInit; + hookManager.BeforeGameSaved += HookManager_BeforeGameSaved; } + + private void HookManager_BeforeGameSaved() + { + // We need to defuse the zoome level + // Just in case someone loads the game without the given mod + + // Set it to a safe level + GnomanEmpire.Instance.Camera.int_0 = 1; + } + + private void HookManager_BeforeInGameHudInit() + { + EnhanceZoomLevel(); + } + private void HookManager_AfterGameLoaded() + { + EnhanceZoomLevel(); + } + + private void EnhanceZoomLevel() { // Reset the camera GnomanEmpire.Instance.Camera.float_1 = new float[] diff --git a/GnollModLoader/GnollModLoader/GlobalPatcher.cs b/GnollModLoader/GnollModLoader/GlobalPatcher.cs index c0a560d..92f07b0 100644 --- a/GnollModLoader/GnollModLoader/GlobalPatcher.cs +++ b/GnollModLoader/GnollModLoader/GlobalPatcher.cs @@ -23,6 +23,7 @@ public void PerformPatching() Logger.Log("-- Applying patches ..."); this.ApplyPatch_GnomanEmpire_PlayGame(); this.ApplyPatch_GnomanEmpire_LoadGame(); + this.ApplyPatch_GnomanEmpire_SaveGame(); this.ApplyPatch_GameSettings_ApplyDisplayChanges(); Logger.Log("-- Applying patches ... DONE"); } @@ -41,6 +42,13 @@ private void ApplyPatch_GnomanEmpire_LoadGame() this.ApplyPatchImpl(loadGame, postfixPatch: postfixPatch); } + private void ApplyPatch_GnomanEmpire_SaveGame() + { + var saveGame = typeof(GnomanEmpire).GetMethod(nameof(GnomanEmpire.SaveGame)); + var prefixPatch = typeof(Patch_GnomanEmpire_SaveGame).GetMethod(nameof(Patch_GnomanEmpire_SaveGame.Prefix)); + this.ApplyPatchImpl(saveGame, prefixPatch: prefixPatch); + } + private void ApplyPatch_GameSettings_ApplyDisplayChanges() { var playGame = typeof(GameSettings).GetMethod(nameof(GameSettings.ApplyDisplayChanges)); @@ -91,8 +99,15 @@ internal class Patch_GnomanEmpire_LoadGame { public static void Postfix() { - HookManager.HookLoadSaveGame_after(); + HookManager.HookLoadGame_after(); } } + internal class Patch_GnomanEmpire_SaveGame + { + public static void Prefix() + { + HookManager.HookSaveGame_before(); + } + } } diff --git a/GnollModLoader/GnollModLoader/HookManager.cs b/GnollModLoader/GnollModLoader/HookManager.cs index 874eba6..6048f01 100644 --- a/GnollModLoader/GnollModLoader/HookManager.cs +++ b/GnollModLoader/GnollModLoader/HookManager.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Game; using GnollModLoader.GUI; @@ -32,6 +33,8 @@ public class HookManager public delegate void BeforeStartNewGameAfterReadDefsHandler(CreateWorldOptions worldOptions); // Called after a savegame has been loaded public delegate void AfterGameLoadedHandler(); + // Called before a game is being saved + public delegate void BeforeGameSavedHandler(); private List _listOfMods; @@ -159,7 +162,7 @@ public static void HookInGameHUDInit_before() } } - public static void HookLoadSaveGame_after() + public static void HookLoadGame_after() { if (instance.AfterGameLoaded != null) { @@ -167,6 +170,14 @@ public static void HookLoadSaveGame_after() } } + internal static void HookSaveGame_before() + { + if (instance.BeforeGameSaved != null) + { + instance.BeforeGameSaved(); + } + } + public event ExportMenuListInitHandler ExportMenuListInit; public event InGameHUDInitHandler InGameHUDInit; public event BeforeInGameHUDInitHandler BeforeInGameHudInit; @@ -179,6 +190,7 @@ public static void HookLoadSaveGame_after() public event BeforeStartNewGameHandler BeforeStartNewGame; public event BeforeStartNewGameAfterReadDefsHandler BeforeStartNewGameAfterReadDefs; public event AfterGameLoadedHandler AfterGameLoaded; + public event BeforeGameSavedHandler BeforeGameSaved; private static HookManager instance; }