From 651623a84579321af9c842484c43610e941ef32f Mon Sep 17 00:00:00 2001 From: Fredrik Andreasson Date: Wed, 15 Jan 2025 13:15:08 +0100 Subject: [PATCH] [Rando] Prevent alarm when at full HP (#4831) * * Prevent low HP alarm when at full HP for 1 heart start * * updated name --- soh/soh/Enhancements/game-interactor/GameInteractor.h | 2 ++ soh/soh/Enhancements/randomizer/hook_handlers.cpp | 6 ++++++ soh/src/code/z_lifemeter.c | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 459d50628..32ac43db9 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -302,6 +302,8 @@ typedef enum { // Opt: *EnFr // Vanilla condition: this->reward == GI_NONE VB_FROGS_GO_TO_IDLE, + // Vanilla condition: var >= gSaveContext.health) && (gSaveContext.health > 0 + VB_HEALTH_METER_BE_CRITICAL, /*** Play Cutscenes ***/ diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 14d4195d0..035f6d029 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -1631,6 +1631,12 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } break; } + case VB_HEALTH_METER_BE_CRITICAL: { + if (gSaveContext.health == gSaveContext.healthCapacity) { + *should = false; + } + break; + } case VB_FREEZE_ON_SKULL_TOKEN: case VB_TRADE_TIMER_ODD_MUSHROOM: case VB_TRADE_TIMER_FROG: diff --git a/soh/src/code/z_lifemeter.c b/soh/src/code/z_lifemeter.c index 52742bc62..5f09e6b3f 100644 --- a/soh/src/code/z_lifemeter.c +++ b/soh/src/code/z_lifemeter.c @@ -2,6 +2,7 @@ #include "textures/parameter_static/parameter_static.h" #include "soh/frame_interpolation.h" #include "soh/OTRGlobals.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" s16 Top_LM_Margin = 0; s16 Left_LM_Margin = 0; @@ -674,7 +675,7 @@ u32 HealthMeter_IsCritical(void) { var = 0x2C; } - if ((var >= gSaveContext.health) && (gSaveContext.health > 0)) { + if (GameInteractor_Should(VB_HEALTH_METER_BE_CRITICAL, var >= gSaveContext.health && gSaveContext.health > 0)) { return true; } else { return false;