diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index a6aa85a617..3b26391118 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 409fa45d19..28f7e8040e 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 52742bc627..5f09e6b3f8 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;