diff --git a/GodSeekerPlus/GodSeekerPlus.csproj b/GodSeekerPlus/GodSeekerPlus.csproj index 91a8e16..04e858f 100644 --- a/GodSeekerPlus/GodSeekerPlus.csproj +++ b/GodSeekerPlus/GodSeekerPlus.csproj @@ -1,7 +1,7 @@ GodSeekerPlus - 0.19.1 + 0.19.2 A Hollow Knight mod to enhance your Godhome experience Clazex diff --git a/GodSeekerPlus/Modules/BossChallenge/P5Health.cs b/GodSeekerPlus/Modules/BossChallenge/P5Health.cs index 126ba6d..8182797 100644 --- a/GodSeekerPlus/Modules/BossChallenge/P5Health.cs +++ b/GodSeekerPlus/Modules/BossChallenge/P5Health.cs @@ -1,16 +1,33 @@ +using MonoMod.RuntimeDetour; + namespace GodSeekerPlus.Modules.BossChallenge; [ToggleableLevel(ToggleableLevel.ChangeScene)] internal sealed class P5Health : Module { - private protected override void Load() => - On.BossSceneController.Awake += OverrideLevel; + private Detour? detour = null; + + private protected override void Load() { + detour = new( + ReflectionHelper.GetPropertyInfo(typeof(BossSceneController), "BossLevel").GetGetMethod(), + ReflectionHelper.GetMethodInfo(typeof(P5Health), nameof(OverrideLevel)) + ); - private protected override void Unload() => - On.BossSceneController.Awake -= OverrideLevel; + ModHooks.TakeDamageHook += FixDamage; + } - private void OverrideLevel(On.BossSceneController.orig_Awake orig, BossSceneController self) { - orig(self); + private protected override void Unload() { + detour?.Dispose(); - self.BossLevel = 0; + ModHooks.TakeDamageHook -= FixDamage; } + + private int OverrideLevel() => 0; + + private int FixDamage(ref int hazardType, int damage) => BossSceneController.IsBossScene + ? ReflectionHelper.GetField(BossSceneController.Instance, "bossLevel") switch { + 1 => damage * 2, + 2 => 9999, + _ => damage, + } + : damage; }