diff --git a/src/engine/fox_radio.c b/src/engine/fox_radio.c index 2678495a..ef83004d 100644 --- a/src/engine/fox_radio.c +++ b/src/engine/fox_radio.c @@ -18,6 +18,7 @@ #include "assets/ast_area_6.h" #include "assets/ast_title.h" #include "assets/ast_zoness.h" +#include "port/hooks/Events.h" u16** gRadioMsgList; s32 gRadioMsgListIndex; @@ -174,7 +175,7 @@ void func_radio_800BAAE8(void) { sRadioUseRedBox = false; mirror = false; - bool enemyRedRadio = CVarGetInteger("gEnemyRedRadio", 0); + CALL_EVENT(PreSetupRadioMsgEvent, &sRadioUseRedBox); switch (gCurrentRadioPortrait) { case RCID_FOX_RED: sRadioUseRedBox = true; @@ -232,139 +233,105 @@ void func_radio_800BAAE8(void) { break; case RCID_WOLF: radioPortraitTex = D_STAR_WOLF_F00B580; - sRadioUseRedBox = enemyRedRadio; break; case RCID_WOLF + 1: radioPortraitTex = D_STAR_WOLF_F00C4A0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_PIGMA: radioPortraitTex = D_STAR_WOLF_F003C80; - sRadioUseRedBox = enemyRedRadio; break; case RCID_PIGMA + 1: radioPortraitTex = D_STAR_WOLF_F004BA0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_LEON: radioPortraitTex = D_STAR_WOLF_F007900; - sRadioUseRedBox = enemyRedRadio; break; case RCID_LEON + 1: radioPortraitTex = D_STAR_WOLF_F008820; - sRadioUseRedBox = enemyRedRadio; break; case RCID_ANDREW: radioPortraitTex = D_STAR_WOLF_F000000; - sRadioUseRedBox = enemyRedRadio; break; case RCID_ANDREW + 1: radioPortraitTex = D_STAR_WOLF_F000F20; - sRadioUseRedBox = enemyRedRadio; break; case RCID_WOLF_2: radioPortraitTex = D_STAR_WOLF_F00D3C0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_WOLF_2 + 1: radioPortraitTex = D_STAR_WOLF_F00E2E0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_PIGMA_2: radioPortraitTex = D_STAR_WOLF_F005AC0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_PIGMA_2 + 1: radioPortraitTex = D_STAR_WOLF_F0069E0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_LEON_2: radioPortraitTex = D_STAR_WOLF_F009740; - sRadioUseRedBox = enemyRedRadio; break; case RCID_LEON_2 + 1: radioPortraitTex = D_STAR_WOLF_F00A660; - sRadioUseRedBox = enemyRedRadio; break; case RCID_ANDREW_2: radioPortraitTex = D_STAR_WOLF_F001E40; - sRadioUseRedBox = enemyRedRadio; break; case RCID_ANDREW_2 + 1: radioPortraitTex = D_STAR_WOLF_F002D60; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_CORNERIA: radioPortraitTex = D_CO_6026420; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_CORNERIA + 1: radioPortraitTex = D_CO_6027340; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_CORNERIA2: radioPortraitTex = D_CO_60245E0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_CORNERIA2 + 1: radioPortraitTex = D_CO_6025500; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_METEO: radioPortraitTex = D_ME_601C8E0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_METEO + 1: radioPortraitTex = D_ME_601D800; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_AREA6: radioPortraitTex = D_A6_60047E0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_AREA6 + 1: radioPortraitTex = D_A6_6005700; - sRadioUseRedBox = enemyRedRadio; break; case RCID_CAIMAN_AREA6: radioPortraitTex = D_A6_60029A0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_CAIMAN_AREA6 + 1: radioPortraitTex = D_A6_60038C0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_ZONESS: radioPortraitTex = D_ZO_6014510; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_ZONESS + 1: radioPortraitTex = D_ZO_6015430; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_SECTORX: radioPortraitTex = D_SX_6020FB0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_SECTORX + 1: radioPortraitTex = D_SX_6021ED0; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_SECTORY: radioPortraitTex = D_SY_6018F30; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_SECTORY + 1: radioPortraitTex = D_SY_6019E50; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_MACBETH: radioPortraitTex = D_MA_6010C20; - sRadioUseRedBox = enemyRedRadio; break; case RCID_BOSS_MACBETH + 1: radioPortraitTex = D_MA_6011B40; - sRadioUseRedBox = enemyRedRadio; break; case RCID_ROB64_RED: sRadioUseRedBox = true; @@ -457,20 +424,6 @@ void func_radio_800BAAE8(void) { if (((s32) gRadioMsgRadioId == RCID_ANDROSS) || ((s32) gRadioMsgRadioId == RCID_ANDROSS_RED)) { sRadioUseRedBox = true; } - if (enemyRedRadio) - { //This ensures the box stays red when the message is closing and already showing static in the portrait. - if (gRadioMsgRadioId == RCID_BOSS_CORNERIA || gRadioMsgRadioId == RCID_BOSS_CORNERIA2 || - gRadioMsgRadioId == RCID_BOSS_METEO || gRadioMsgRadioId == RCID_BOSS_SECTORX || - gRadioMsgRadioId == RCID_BOSS_SECTORY || gRadioMsgRadioId == RCID_BOSS_MACBETH || - gRadioMsgRadioId == RCID_BOSS_ZONESS || gRadioMsgRadioId == RCID_BOSS_AREA6 || - gRadioMsgRadioId == RCID_CAIMAN_AREA6 || gRadioMsgRadioId == RCID_WOLF || - gRadioMsgRadioId == RCID_PIGMA || gRadioMsgRadioId == RCID_LEON || - gRadioMsgRadioId == RCID_ANDREW || gRadioMsgRadioId == RCID_WOLF_2 || - gRadioMsgRadioId == RCID_PIGMA_2 || gRadioMsgRadioId == RCID_LEON_2 || - gRadioMsgRadioId == RCID_ANDREW_2) { - sRadioUseRedBox = true; - } - } break; } if ((radioPortraitTex != NULL) && (gRadioPortraitScaleY != 0.0f)) { diff --git a/src/port/hooks/list/EngineEvent.h b/src/port/hooks/list/EngineEvent.h index e968e8a0..40339226 100644 --- a/src/port/hooks/list/EngineEvent.h +++ b/src/port/hooks/list/EngineEvent.h @@ -18,6 +18,7 @@ DEFINE_EVENT(DrawRadarHUDEvent); DEFINE_EVENT(DrawBoostGaugeHUDEvent); DEFINE_EVENT(DrawBombCounterHUDEvent); DEFINE_EVENT(DrawIncomingMsgHUDEvent); +DEFINE_EVENT(PreSetupRadioMsgEvent, s32* radioRedBox); DEFINE_EVENT(DrawGoldRingsHUDEvent); DEFINE_EVENT(DrawLivesCounterHUDEvent); DEFINE_EVENT(DrawTrainingRingPassCountHUDEvent); diff --git a/src/port/mods/PortEnhancements.c b/src/port/mods/PortEnhancements.c index 042da8e8..abc9d0f2 100644 --- a/src/port/mods/PortEnhancements.c +++ b/src/port/mods/PortEnhancements.c @@ -299,6 +299,25 @@ void OnBombCounterDraw(IEvent* ev){ HUD_BombCounter_Draw(253.0f, 18.0f); } +void OnPreSetupRadioMsgEvent(PreSetupRadioMsgEvent* ev){ + bool enemyRedRadio = CVarGetInteger("gEnemyRedRadio", 0); + if (!enemyRedRadio) + { + return; + } + if (gRadioMsgRadioId == RCID_BOSS_CORNERIA || gRadioMsgRadioId == RCID_BOSS_CORNERIA2 || + gRadioMsgRadioId == RCID_BOSS_METEO || gRadioMsgRadioId == RCID_BOSS_SECTORX || + gRadioMsgRadioId == RCID_BOSS_SECTORY || gRadioMsgRadioId == RCID_BOSS_MACBETH || + gRadioMsgRadioId == RCID_BOSS_ZONESS || gRadioMsgRadioId == RCID_BOSS_AREA6 || + gRadioMsgRadioId == RCID_CAIMAN_AREA6 || gRadioMsgRadioId == RCID_WOLF || + gRadioMsgRadioId == RCID_PIGMA || gRadioMsgRadioId == RCID_LEON || + gRadioMsgRadioId == RCID_ANDREW || gRadioMsgRadioId == RCID_WOLF_2 || + gRadioMsgRadioId == RCID_PIGMA_2 || gRadioMsgRadioId == RCID_LEON_2 || + gRadioMsgRadioId == RCID_ANDREW_2) { + *ev->radioRedBox = true; + } +} + void OnLivesCounterDraw(IEvent* ev){ bool restore = CVarGetInteger("gRestoreBetaBoostGauge", 0) == 1; if(!restore){ @@ -327,6 +346,7 @@ void PortEnhancements_Init() { REGISTER_LISTENER(DrawBoostGaugeHUDEvent, OnBoostGaugeDraw, EVENT_PRIORITY_NORMAL); REGISTER_LISTENER(DrawLivesCounterHUDEvent, OnLivesCounterDraw, EVENT_PRIORITY_NORMAL); REGISTER_LISTENER(DrawBombCounterHUDEvent, OnBombCounterDraw, EVENT_PRIORITY_NORMAL); + REGISTER_LISTENER(PreSetupRadioMsgEvent, OnPreSetupRadioMsgEvent, EVENT_PRIORITY_NORMAL); REGISTER_LISTENER(ObjectUpdateEvent, OnItemGoldRingUpdate, EVENT_PRIORITY_NORMAL); REGISTER_LISTENER(ObjectDrawPostSetupEvent, OnItemGoldRingDraw, EVENT_PRIORITY_NORMAL); @@ -358,6 +378,7 @@ void PortEnhancements_Register() { REGISTER_EVENT(DrawBoostGaugeHUDEvent); REGISTER_EVENT(DrawBombCounterHUDEvent); REGISTER_EVENT(DrawIncomingMsgHUDEvent); + REGISTER_EVENT(PreSetupRadioMsgEvent); REGISTER_EVENT(DrawGoldRingsHUDEvent); REGISTER_EVENT(DrawLivesCounterHUDEvent); REGISTER_EVENT(DrawTrainingRingPassCountHUDEvent);