From d97271c95a8e9c7d8a3f81f9a2f00cdcdc361ebf Mon Sep 17 00:00:00 2001 From: Stardust Sauce Date: Sat, 2 Apr 2022 21:12:02 -0400 Subject: [PATCH] Initial Commit --- soh/build.c | 4 +- soh/include/z64interface.h | 3 + soh/soh.vcxproj | 1 + soh/soh.vcxproj.filters | 3 + soh/src/code/z_construct.c | 58 +- soh/src/code/z_lifemeter.c | 362 ++++++----- soh/src/code/z_message_PAL.c | 603 ++++++++---------- soh/src/code/z_parameter.c | 412 ++++++------ soh/src/code/z_player_lib.c | 40 +- .../overlays/actors/ovl_En_Ossan/z_en_ossan.c | 70 +- .../overlays/actors/ovl_En_Ossan/z_en_ossan.h | 8 +- .../ovl_kaleido_scope/z_kaleido_collect.c | 72 ++- .../ovl_kaleido_scope/z_kaleido_equipment.c | 4 +- 13 files changed, 815 insertions(+), 825 deletions(-) diff --git a/soh/build.c b/soh/build.c index acb8d151d..f3f9bdae6 100644 --- a/soh/build.c +++ b/soh/build.c @@ -1,8 +1,8 @@ -const char gBuildVersion[] = "DECKARD"; +const char gBuildVersion[] = "DECKARD ALFA (1.0.0)"; const char gBuildTeam[] = "github.com/harbourmasters"; #ifdef __TIMESTAMP__ const char gBuildDate[] = __TIMESTAMP__; #else const char gBuildDate[] = __DATE__ " " __TIME__; #endif -const char gBuildMakeOption[] = ""; \ No newline at end of file +const char gBuildMakeOption[] = ""; diff --git a/soh/include/z64interface.h b/soh/include/z64interface.h index de3913aba..28002b04d 100644 --- a/soh/include/z64interface.h +++ b/soh/include/z64interface.h @@ -27,6 +27,9 @@ * for the base hearts, while the prim color for the double defense hearts is the white outline. The * env color for the base hearts is the purple-ish outline, while the env color for the double defense * hearts is the red color of the hearts. + * + * These are deprecated and no references to them exist in source anymore. + * The Resource Manager now handles these colors. */ #define HEARTS_PRIM_R 255 diff --git a/soh/soh.vcxproj b/soh/soh.vcxproj index 9d5b509f2..33dafa5f2 100644 --- a/soh/soh.vcxproj +++ b/soh/soh.vcxproj @@ -875,6 +875,7 @@ + diff --git a/soh/soh.vcxproj.filters b/soh/soh.vcxproj.filters index 30ca9d4ed..7b81aec23 100644 --- a/soh/soh.vcxproj.filters +++ b/soh/soh.vcxproj.filters @@ -3710,6 +3710,9 @@ Header Files + + Header Files + diff --git a/soh/src/code/z_construct.c b/soh/src/code/z_construct.c index 2fd6d43ad..1bc81b172 100644 --- a/soh/src/code/z_construct.c +++ b/soh/src/code/z_construct.c @@ -1,5 +1,6 @@ #include "global.h" #include +#include void func_80110990(GlobalContext* globalCtx) { Map_Destroy(globalCtx); @@ -57,8 +58,9 @@ void func_801109B0(GlobalContext* globalCtx) { } memcpy(interfaceCtx->doActionSegment, ResourceMgr_LoadTexByName(gAttackDoActionENGTex), 0x300); - //DmaMgr_SendRequest1(interfaceCtx->doActionSegment, (uintptr_t)_do_action_staticSegmentRomStart + doActionOffset, 0x300, - //"../z_construct.c", 174); + // DmaMgr_SendRequest1(interfaceCtx->doActionSegment, (uintptr_t)_do_action_staticSegmentRomStart + doActionOffset, + // 0x300, + //"../z_construct.c", 174); if (gSaveContext.language == LANGUAGE_ENG) { doActionOffset = 0x480; @@ -69,8 +71,8 @@ void func_801109B0(GlobalContext* globalCtx) { } memcpy(interfaceCtx->doActionSegment + 0x300, ResourceMgr_LoadTexByName(gReturnDoActionENGTex), 0x180); - //DmaMgr_SendRequest1(interfaceCtx->doActionSegment + 0x300, (uintptr_t)_do_action_staticSegmentRomStart + doActionOffset, - //0x180, "../z_construct.c", 178); + // DmaMgr_SendRequest1(interfaceCtx->doActionSegment + 0x300, (uintptr_t)_do_action_staticSegmentRomStart + + // doActionOffset, 0x180, "../z_construct.c", 178); interfaceCtx->iconItemSegment = GameState_Alloc(&globalCtx->state, 0x4000, "../z_construct.c", 190); @@ -154,17 +156,20 @@ void func_801109B0(GlobalContext* globalCtx) { interfaceCtx->unk_23C = interfaceCtx->unk_242 = 0; + Color_RGB8 buttonColor; R_ITEM_BTN_X(0) = B_BUTTON_X; - R_B_BTN_COLOR(0) = 255; - R_B_BTN_COLOR(1) = 30; - R_B_BTN_COLOR(2) = 30; + buttonColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnB); + R_B_BTN_COLOR(0) = buttonColor.r; + R_B_BTN_COLOR(1) = buttonColor.g; + R_B_BTN_COLOR(2) = buttonColor.b; R_ITEM_ICON_X(0) = B_BUTTON_X; R_ITEM_AMMO_X(0) = B_BUTTON_X + 2; R_A_BTN_X = A_BUTTON_X; R_A_ICON_X = A_BUTTON_X; - R_A_BTN_COLOR(0) = 0; - R_A_BTN_COLOR(1) = 200; - R_A_BTN_COLOR(2) = 50; + buttonColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnA); + R_A_BTN_COLOR(0) = buttonColor.r; + R_A_BTN_COLOR(1) = buttonColor.g; + R_A_BTN_COLOR(2) = buttonColor.b; } void Message_Init(GlobalContext* globalCtx) { @@ -195,6 +200,7 @@ void Message_Init(GlobalContext* globalCtx) { } void func_80111070(void) { + Color_RGB8 color; YREG(8) = 10; YREG(14) = 0; YREG(15) = 0; @@ -266,9 +272,10 @@ void func_80111070(void) { YREG(93) = 6; YREG(94) = 3; YREG(95) = 1; - R_MAGIC_FILL_COLOR(0) = 0; - R_MAGIC_FILL_COLOR(1) = 200; - R_MAGIC_FILL_COLOR(2) = 0; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorMagicFillNormal); + R_MAGIC_FILL_COLOR(0) = color.r; + R_MAGIC_FILL_COLOR(1) = color.g; + R_MAGIC_FILL_COLOR(2) = color.b; ZREG(9) = 140; ZREG(10) = 200; ZREG(11) = 0; @@ -298,9 +305,10 @@ void func_80111070(void) { ZREG(36) = 0; ZREG(37) = 0; ZREG(38) = 0; - R_C_BTN_COLOR(0) = 255; - R_C_BTN_COLOR(1) = 160; - R_C_BTN_COLOR(2) = 0; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCLeft); + R_C_BTN_COLOR(0) = color.r; // Deprecated. + R_C_BTN_COLOR(1) = color.g; // All references to this reg are now removed. + R_C_BTN_COLOR(2) = color.b; // Use the colorBtnC directional assets to change colors. ZREG(46) = 1; ZREG(47) = 1; R_START_LABEL_DD(0) = 100; @@ -524,9 +532,10 @@ void func_80111070(void) { R_COMPASS_SCALE_Y = 32; R_COMPASS_OFFSET_X = 110; R_COMPASS_OFFSET_Y = -740; - R_MINIMAP_COLOR(0) = 0; - R_MINIMAP_COLOR(1) = 255; - R_MINIMAP_COLOR(2) = 255; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorMinimap); + R_MINIMAP_COLOR(0) = color.r; + R_MINIMAP_COLOR(1) = color.g; + R_MINIMAP_COLOR(2) = color.b; } VREG(21) = 0; @@ -542,13 +551,10 @@ void func_80111070(void) { VREG(31) = 0; VREG(32) = 0; - R_TEXT_ADJUST_COLOR_1_R = 70; - R_TEXT_ADJUST_COLOR_1_G = 255; - R_TEXT_ADJUST_COLOR_1_B = 80; - - R_TEXT_ADJUST_COLOR_2_R = 70; - R_TEXT_ADJUST_COLOR_2_G = 255; - R_TEXT_ADJUST_COLOR_2_B = 80; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTextAdjustableDefault); + R_TEXT_ADJUST_COLOR_1_R = R_TEXT_ADJUST_COLOR_2_R = color.r; + R_TEXT_ADJUST_COLOR_1_G = R_TEXT_ADJUST_COLOR_2_G = color.g; + R_TEXT_ADJUST_COLOR_1_B = R_TEXT_ADJUST_COLOR_2_B = color.b; VREG(40) = 9; VREG(42) = 250; diff --git a/soh/src/code/z_lifemeter.c b/soh/src/code/z_lifemeter.c index 344022505..b4cded413 100644 --- a/soh/src/code/z_lifemeter.c +++ b/soh/src/code/z_lifemeter.c @@ -1,117 +1,113 @@ #include "global.h" #include "textures/parameter_static/parameter_static.h" +#include -static s16 sHeartsPrimColors[3][3] = { - { HEARTS_PRIM_R, HEARTS_PRIM_G, HEARTS_PRIM_B }, - { HEARTS_BURN_PRIM_R, HEARTS_BURN_PRIM_G, HEARTS_BURN_PRIM_B }, // unused - { HEARTS_DROWN_PRIM_R, HEARTS_DROWN_PRIM_G, HEARTS_DROWN_PRIM_B }, // unused -}; - -static s16 sHeartsEnvColors[3][3] = { - { HEARTS_ENV_R, HEARTS_ENV_G, HEARTS_ENV_B }, - { HEARTS_BURN_ENV_R, HEARTS_BURN_ENV_G }, // unused - { HEARTS_DROWN_ENV_R, HEARTS_DROWN_ENV_G, HEARTS_DROWN_ENV_B }, // unused -}; - -static s16 sHeartsPrimFactors[3][3] = { - { - HEARTS_PRIM_R - HEARTS_PRIM_R, - HEARTS_PRIM_G - HEARTS_PRIM_G, - HEARTS_PRIM_B - HEARTS_PRIM_B, - }, - // unused - { - HEARTS_BURN_PRIM_R - HEARTS_PRIM_R, - HEARTS_BURN_PRIM_G - HEARTS_PRIM_G, - HEARTS_BURN_PRIM_B - HEARTS_PRIM_B, - }, - // unused - { - HEARTS_DROWN_PRIM_R - HEARTS_PRIM_R, - HEARTS_DROWN_PRIM_G - HEARTS_PRIM_G, - HEARTS_DROWN_PRIM_B - HEARTS_PRIM_B, - }, -}; - -static s16 sHeartsEnvFactors[3][3] = { - { - HEARTS_ENV_R - HEARTS_ENV_R, - HEARTS_ENV_G - HEARTS_ENV_G, - HEARTS_ENV_B - HEARTS_ENV_B, - }, - // unused - { - HEARTS_BURN_ENV_R - HEARTS_ENV_R, - HEARTS_BURN_ENV_G - HEARTS_ENV_G, - HEARTS_BURN_ENV_B - HEARTS_ENV_B, - }, - // unused - { - HEARTS_DROWN_ENV_R - HEARTS_ENV_R, - HEARTS_DROWN_ENV_G - HEARTS_ENV_G, - HEARTS_DROWN_ENV_B - HEARTS_ENV_B, - }, -}; - -static s16 sHeartsDDPrimColors[3][3] = { - { HEARTS_DD_PRIM_R, HEARTS_DD_PRIM_G, HEARTS_DD_PRIM_B }, - { HEARTS_BURN_PRIM_R, HEARTS_BURN_PRIM_G, HEARTS_BURN_PRIM_B }, // unused - { HEARTS_DROWN_PRIM_R, HEARTS_DROWN_PRIM_G, HEARTS_DROWN_PRIM_B }, // unused -}; - -static s16 sHeartsDDEnvColors[3][3] = { - { HEARTS_DD_ENV_R, HEARTS_DD_ENV_G, HEARTS_DD_ENV_B }, - { HEARTS_BURN_ENV_R, HEARTS_BURN_ENV_G, HEARTS_BURN_ENV_B }, // unused - { HEARTS_DROWN_ENV_R, HEARTS_DROWN_ENV_G, HEARTS_DROWN_ENV_B }, // unused -}; - -static s16 sHeartsDDPrimFactors[3][3] = { - { - HEARTS_DD_PRIM_R - HEARTS_DD_PRIM_R, - HEARTS_DD_PRIM_G - HEARTS_DD_PRIM_G, - HEARTS_DD_PRIM_B - HEARTS_DD_PRIM_B, - }, - // unused - { - HEARTS_BURN_PRIM_R - HEARTS_DD_PRIM_R, - HEARTS_BURN_PRIM_G - HEARTS_DD_PRIM_G, - HEARTS_BURN_PRIM_B - HEARTS_DD_PRIM_B, - }, - // unused - { - HEARTS_DROWN_PRIM_R - HEARTS_DD_PRIM_R, - HEARTS_DROWN_PRIM_G - HEARTS_DD_PRIM_G, - HEARTS_DROWN_PRIM_B - HEARTS_DD_PRIM_B, - }, -}; - -static s16 sHeartsDDEnvFactors[3][3] = { - { - HEARTS_DD_ENV_R - HEARTS_DD_ENV_R, - HEARTS_DD_ENV_G - HEARTS_DD_ENV_G, - HEARTS_DD_ENV_B - HEARTS_DD_ENV_B, - }, - // unused - { - HEARTS_BURN_ENV_R - HEARTS_DD_ENV_R, - HEARTS_BURN_ENV_G - HEARTS_DD_ENV_G, - HEARTS_BURN_ENV_B - HEARTS_DD_ENV_B, - }, - // unused - { - HEARTS_DROWN_ENV_R - HEARTS_DD_ENV_R, - HEARTS_DROWN_ENV_G - HEARTS_DD_ENV_G, - HEARTS_DROWN_ENV_B - HEARTS_DD_ENV_B, - }, -}; +static Color_RGB8 sHeartsPrimColors[3]; +static Color_RGB8 sHeartsEnvColors[3]; +static Color_RGB8 sHeartsPrimFactors[3]; +static Color_RGB8 sHeartsEnvFactors[3]; +static Color_RGB8 sHeartsDDPrimColors[3]; +static Color_RGB8 sHeartsDDEnvColors[3]; +static Color_RGB8 sHeartsDDPrimFactors[3]; +static Color_RGB8 sHeartsDDEnvFactors[3]; // Current colors for the double defense hearts -s16 sBeatingHeartsDDPrim[3]; -s16 sBeatingHeartsDDEnv[3]; -s16 sHeartsDDPrim[2][3]; -s16 sHeartsDDEnv[2][3]; +Color_RGB8 sBeatingHeartsDDPrim; +Color_RGB8 sBeatingHeartsDDEnv; +Color_RGB8 sHeartsDDPrim[2]; +Color_RGB8 sHeartsDDEnv[2]; void HealthMeter_Init(GlobalContext* globalCtx) { + Color_RGB8 heartPrimColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorHeartFill); + Color_RGB8 heartEnvColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorHeartOutline); + Color_RGB8 heartDDPrimColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorHeartDDOutline); + Color_RGB8 heartDDEnvColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorHeartDDFill); + + Color_RGB8 heartBurnPrimColor = { HEARTS_BURN_PRIM_R, HEARTS_BURN_PRIM_G, HEARTS_BURN_PRIM_B }; + Color_RGB8 heartDrownPrimColor = { HEARTS_BURN_ENV_R, HEARTS_BURN_ENV_G, HEARTS_BURN_ENV_B }; + Color_RGB8 heartBurnEnvColor = { HEARTS_DROWN_PRIM_R, HEARTS_DROWN_PRIM_G, HEARTS_DROWN_PRIM_B }; + Color_RGB8 heartDrownEnvColor = { HEARTS_DROWN_ENV_R, HEARTS_DROWN_ENV_G, HEARTS_DROWN_ENV_B }; + + sHeartsPrimColors[0].r = heartPrimColor.r; + sHeartsPrimColors[0].g = heartPrimColor.g; + sHeartsPrimColors[0].b = heartPrimColor.b; + sHeartsPrimColors[1].r = heartBurnPrimColor.r; + sHeartsPrimColors[1].g = heartBurnPrimColor.g; + sHeartsPrimColors[1].b = heartBurnPrimColor.b; + sHeartsPrimColors[2].r = heartDrownPrimColor.r; + sHeartsPrimColors[2].g = heartDrownPrimColor.g; + sHeartsPrimColors[2].b = heartDrownPrimColor.b; + + sHeartsEnvColors[0].r = heartEnvColor.r; + sHeartsEnvColors[0].g = heartEnvColor.g; + sHeartsEnvColors[0].b = heartEnvColor.b; + sHeartsEnvColors[1].r = heartBurnEnvColor.r; + sHeartsEnvColors[1].g = heartBurnEnvColor.g; + sHeartsEnvColors[1].b = heartBurnEnvColor.b; + sHeartsEnvColors[2].r = heartDrownEnvColor.r; + sHeartsEnvColors[2].g = heartDrownEnvColor.g; + sHeartsEnvColors[2].b = heartDrownEnvColor.b; + + sHeartsPrimFactors[0].r = heartPrimColor.r - heartPrimColor.r; + sHeartsPrimFactors[0].g = heartPrimColor.g - heartPrimColor.g; + sHeartsPrimFactors[0].b = heartPrimColor.b - heartPrimColor.b; + sHeartsPrimFactors[1].r = heartBurnPrimColor.r - heartPrimColor.r; + sHeartsPrimFactors[1].g = heartBurnPrimColor.g - heartPrimColor.g; + sHeartsPrimFactors[1].b = heartBurnPrimColor.b - heartPrimColor.b; + sHeartsPrimFactors[2].r = heartDrownPrimColor.r - heartPrimColor.r; + sHeartsPrimFactors[2].g = heartDrownPrimColor.g - heartPrimColor.g; + sHeartsPrimFactors[2].b = heartDrownPrimColor.b - heartPrimColor.b; + + sHeartsEnvFactors[0].r = heartEnvColor.r - heartEnvColor.r; + sHeartsEnvFactors[0].g = heartEnvColor.g - heartEnvColor.g; + sHeartsEnvFactors[0].b = heartEnvColor.b - heartEnvColor.b; + sHeartsEnvFactors[1].r = heartBurnEnvColor.r - heartEnvColor.r; + sHeartsEnvFactors[1].g = heartBurnEnvColor.g - heartEnvColor.g; + sHeartsEnvFactors[1].b = heartBurnEnvColor.b - heartEnvColor.b; + sHeartsEnvFactors[2].r = heartDrownEnvColor.r - heartEnvColor.r; + sHeartsEnvFactors[2].g = heartDrownEnvColor.g - heartEnvColor.g; + sHeartsEnvFactors[2].b = heartDrownEnvColor.b - heartEnvColor.b; + + sHeartsDDPrimColors[0].r = heartDDPrimColor.r; + sHeartsDDPrimColors[0].g = heartDDPrimColor.g; + sHeartsDDPrimColors[0].b = heartDDPrimColor.b; + sHeartsDDPrimColors[1].r = heartBurnPrimColor.r; + sHeartsDDPrimColors[1].g = heartBurnPrimColor.g; + sHeartsDDPrimColors[1].b = heartBurnPrimColor.b; + sHeartsDDPrimColors[2].r = heartDrownPrimColor.r; + sHeartsDDPrimColors[2].g = heartDrownPrimColor.g; + sHeartsDDPrimColors[2].b = heartDrownPrimColor.b; + + sHeartsDDEnvColors[0].r = heartDDEnvColor.r; + sHeartsDDEnvColors[0].g = heartDDEnvColor.g; + sHeartsDDEnvColors[0].b = heartDDEnvColor.b; + sHeartsDDEnvColors[1].r = heartBurnEnvColor.r; + sHeartsDDEnvColors[1].g = heartBurnEnvColor.g; + sHeartsDDEnvColors[1].b = heartBurnEnvColor.b; + sHeartsDDEnvColors[2].r = heartDrownEnvColor.r; + sHeartsDDEnvColors[2].g = heartDrownEnvColor.g; + sHeartsDDEnvColors[2].b = heartDrownEnvColor.b; + + sHeartsDDPrimFactors[0].r = heartDDPrimColor.r - heartDDPrimColor.r; + sHeartsDDPrimFactors[0].g = heartDDPrimColor.g - heartDDPrimColor.g; + sHeartsDDPrimFactors[0].b = heartDDPrimColor.b - heartDDPrimColor.b; + sHeartsDDPrimFactors[1].r = heartBurnPrimColor.r - heartDDPrimColor.r; + sHeartsDDPrimFactors[1].g = heartBurnPrimColor.g - heartDDPrimColor.g; + sHeartsDDPrimFactors[1].b = heartBurnPrimColor.b - heartDDPrimColor.b; + sHeartsDDPrimFactors[2].r = heartDrownPrimColor.r - heartDDPrimColor.r; + sHeartsDDPrimFactors[2].g = heartDrownPrimColor.g - heartDDPrimColor.g; + sHeartsDDPrimFactors[2].b = heartDrownPrimColor.b - heartDDPrimColor.b; + + sHeartsDDEnvFactors[0].r = heartDDEnvColor.r - heartDDEnvColor.r; + sHeartsDDEnvFactors[0].g = heartDDEnvColor.g - heartDDEnvColor.g; + sHeartsDDEnvFactors[0].b = heartDDEnvColor.b - heartDDEnvColor.b; + sHeartsDDEnvFactors[1].r = heartBurnEnvColor.r - heartDDEnvColor.r; + sHeartsDDEnvFactors[1].g = heartBurnEnvColor.g - heartDDEnvColor.g; + sHeartsDDEnvFactors[1].b = heartBurnEnvColor.b - heartDDEnvColor.b; + sHeartsDDEnvFactors[2].r = heartDrownEnvColor.r - heartDDEnvColor.r; + sHeartsDDEnvFactors[2].g = heartDrownEnvColor.g - heartDDEnvColor.g; + sHeartsDDEnvFactors[2].b = heartDrownEnvColor.b - heartDDEnvColor.b; + InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; interfaceCtx->unk_228 = 0x140; @@ -119,29 +115,29 @@ void HealthMeter_Init(GlobalContext* globalCtx) { interfaceCtx->unk_22A = interfaceCtx->unk_1FE = 0; interfaceCtx->unk_22C = interfaceCtx->unk_200 = 0; - interfaceCtx->heartsPrimR[0] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[0] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[0] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[0] = heartPrimColor.r; + interfaceCtx->heartsPrimG[0] = heartPrimColor.g; + interfaceCtx->heartsPrimB[0] = heartPrimColor.b; - interfaceCtx->heartsEnvR[0] = HEARTS_ENV_R; - interfaceCtx->heartsEnvG[0] = HEARTS_ENV_G; - interfaceCtx->heartsEnvB[0] = HEARTS_ENV_B; + interfaceCtx->heartsEnvR[0] = heartEnvColor.r; + interfaceCtx->heartsEnvG[0] = heartEnvColor.g; + interfaceCtx->heartsEnvB[0] = heartEnvColor.b; - interfaceCtx->heartsPrimR[1] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[1] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[1] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[1] = heartPrimColor.r; + interfaceCtx->heartsPrimG[1] = heartPrimColor.g; + interfaceCtx->heartsPrimB[1] = heartPrimColor.b; - interfaceCtx->heartsEnvR[1] = HEARTS_ENV_R; - interfaceCtx->heartsEnvG[1] = HEARTS_ENV_G; - interfaceCtx->heartsEnvB[1] = HEARTS_ENV_B; + interfaceCtx->heartsEnvR[1] = heartEnvColor.r; + interfaceCtx->heartsEnvG[1] = heartEnvColor.g; + interfaceCtx->heartsEnvB[1] = heartEnvColor.b; - sHeartsDDPrim[0][0] = sHeartsDDPrim[1][0] = HEARTS_DD_PRIM_R; - sHeartsDDPrim[0][1] = sHeartsDDPrim[1][1] = HEARTS_DD_PRIM_G; - sHeartsDDPrim[0][2] = sHeartsDDPrim[1][2] = HEARTS_DD_PRIM_B; + sHeartsDDPrim[0].r = sHeartsDDPrim[1].r = heartDDPrimColor.r; + sHeartsDDPrim[0].g = sHeartsDDPrim[1].g = heartDDPrimColor.g; + sHeartsDDPrim[0].b = sHeartsDDPrim[1].b = heartDDPrimColor.b; - sHeartsDDEnv[0][0] = sHeartsDDEnv[1][0] = HEARTS_DD_ENV_R; - sHeartsDDEnv[0][1] = sHeartsDDEnv[1][1] = HEARTS_DD_ENV_G; - sHeartsDDEnv[0][2] = sHeartsDDEnv[1][2] = HEARTS_DD_ENV_B; + sHeartsDDEnv[0].r = sHeartsDDEnv[1].r = heartDDEnvColor.r; + sHeartsDDEnv[0].g = sHeartsDDEnv[1].g = heartDDEnvColor.g; + sHeartsDDEnv[0].b = sHeartsDDEnv[1].b = heartDDEnvColor.b; } void HealthMeter_Update(GlobalContext* globalCtx) { @@ -172,72 +168,72 @@ void HealthMeter_Update(GlobalContext* globalCtx) { ddFactor = factor; - interfaceCtx->heartsPrimR[0] = HEARTS_PRIM_R; - interfaceCtx->heartsPrimG[0] = HEARTS_PRIM_G; - interfaceCtx->heartsPrimB[0] = HEARTS_PRIM_B; + interfaceCtx->heartsPrimR[0] = sHeartsPrimColors[0].r; + interfaceCtx->heartsPrimG[0] = sHeartsPrimColors[0].g; + interfaceCtx->heartsPrimB[0] = sHeartsPrimColors[0].b; - interfaceCtx->heartsEnvR[0] = HEARTS_ENV_R; - interfaceCtx->heartsEnvG[0] = HEARTS_ENV_G; - interfaceCtx->heartsEnvB[0] = HEARTS_ENV_B; + interfaceCtx->heartsEnvR[0] = sHeartsEnvColors[0].r; + interfaceCtx->heartsEnvG[0] = sHeartsEnvColors[0].g; + interfaceCtx->heartsEnvB[0] = sHeartsEnvColors[0].b; - interfaceCtx->heartsPrimR[1] = sHeartsPrimColors[type][0]; - interfaceCtx->heartsPrimG[1] = sHeartsPrimColors[type][1]; - interfaceCtx->heartsPrimB[1] = sHeartsPrimColors[type][2]; + interfaceCtx->heartsPrimR[1] = sHeartsPrimColors[type].r; + interfaceCtx->heartsPrimG[1] = sHeartsPrimColors[type].g; + interfaceCtx->heartsPrimB[1] = sHeartsPrimColors[type].b; - interfaceCtx->heartsEnvR[1] = sHeartsEnvColors[type][0]; - interfaceCtx->heartsEnvG[1] = sHeartsEnvColors[type][1]; - interfaceCtx->heartsEnvB[1] = sHeartsEnvColors[type][2]; + interfaceCtx->heartsEnvR[1] = sHeartsEnvColors[type].r; + interfaceCtx->heartsEnvG[1] = sHeartsEnvColors[type].g; + interfaceCtx->heartsEnvB[1] = sHeartsEnvColors[type].b; - rFactor = sHeartsPrimFactors[0][0] * factor; - gFactor = sHeartsPrimFactors[0][1] * factor; - bFactor = sHeartsPrimFactors[0][2] * factor; + rFactor = sHeartsPrimFactors[0].r * factor; + gFactor = sHeartsPrimFactors[0].g * factor; + bFactor = sHeartsPrimFactors[0].b * factor; - interfaceCtx->beatingHeartPrim[0] = (u8)(rFactor + HEARTS_PRIM_R) & 0xFF; - interfaceCtx->beatingHeartPrim[1] = (u8)(gFactor + HEARTS_PRIM_G) & 0xFF; - interfaceCtx->beatingHeartPrim[2] = (u8)(bFactor + HEARTS_PRIM_B) & 0xFF; + interfaceCtx->beatingHeartPrim[0] = (u8)(rFactor + sHeartsPrimColors[0].r) & 0xFF; + interfaceCtx->beatingHeartPrim[1] = (u8)(gFactor + sHeartsPrimColors[0].g) & 0xFF; + interfaceCtx->beatingHeartPrim[2] = (u8)(bFactor + sHeartsPrimColors[0].b) & 0xFF; - rFactor = sHeartsEnvFactors[0][0] * factor; - gFactor = sHeartsEnvFactors[0][1] * factor; - bFactor = sHeartsEnvFactors[0][2] * factor; + rFactor = sHeartsEnvFactors[0].r * factor; + gFactor = sHeartsEnvFactors[0].g * factor; + bFactor = sHeartsEnvFactors[0].b * factor; if (1) {} ddType = type; - interfaceCtx->beatingHeartEnv[0] = (u8)(rFactor + HEARTS_ENV_R) & 0xFF; - interfaceCtx->beatingHeartEnv[1] = (u8)(gFactor + HEARTS_ENV_G) & 0xFF; - interfaceCtx->beatingHeartEnv[2] = (u8)(bFactor + HEARTS_ENV_B) & 0xFF; + interfaceCtx->beatingHeartEnv[0] = (u8)(rFactor + sHeartsEnvColors[0].r) & 0xFF; + interfaceCtx->beatingHeartEnv[1] = (u8)(gFactor + sHeartsEnvColors[0].g) & 0xFF; + interfaceCtx->beatingHeartEnv[2] = (u8)(bFactor + sHeartsEnvColors[0].b) & 0xFF; - sHeartsDDPrim[0][0] = HEARTS_DD_PRIM_R; - sHeartsDDPrim[0][1] = HEARTS_DD_PRIM_G; - sHeartsDDPrim[0][2] = HEARTS_DD_PRIM_B; + sHeartsDDPrim[0].r = sHeartsDDPrimColors[0].r; + sHeartsDDPrim[0].g = sHeartsDDPrimColors[0].g; + sHeartsDDPrim[0].b = sHeartsDDPrimColors[0].b; - sHeartsDDEnv[0][0] = HEARTS_DD_ENV_R; - sHeartsDDEnv[0][1] = HEARTS_DD_ENV_G; - sHeartsDDEnv[0][2] = HEARTS_DD_ENV_B; + sHeartsDDEnv[0].r = sHeartsDDEnvColors[0].r; + sHeartsDDEnv[0].g = sHeartsDDEnvColors[0].g; + sHeartsDDEnv[0].b = sHeartsDDEnvColors[0].b; - sHeartsDDPrim[1][0] = sHeartsDDPrimColors[ddType][0]; - sHeartsDDPrim[1][1] = sHeartsDDPrimColors[ddType][1]; - sHeartsDDPrim[1][2] = sHeartsDDPrimColors[ddType][2]; + sHeartsDDPrim[1].r = sHeartsDDPrimColors[ddType].r; + sHeartsDDPrim[1].g = sHeartsDDPrimColors[ddType].g; + sHeartsDDPrim[1].b = sHeartsDDPrimColors[ddType].b; - sHeartsDDEnv[1][0] = sHeartsDDEnvColors[ddType][0]; - sHeartsDDEnv[1][1] = sHeartsDDEnvColors[ddType][1]; - sHeartsDDEnv[1][2] = sHeartsDDEnvColors[ddType][2]; + sHeartsDDEnv[1].r = sHeartsDDEnvColors[ddType].r; + sHeartsDDEnv[1].g = sHeartsDDEnvColors[ddType].g; + sHeartsDDEnv[1].b = sHeartsDDEnvColors[ddType].b; - rFactor = sHeartsDDPrimFactors[ddType][0] * ddFactor; - gFactor = sHeartsDDPrimFactors[ddType][1] * ddFactor; - bFactor = sHeartsDDPrimFactors[ddType][2] * ddFactor; + rFactor = sHeartsDDPrimFactors[ddType].r * ddFactor; + gFactor = sHeartsDDPrimFactors[ddType].g * ddFactor; + bFactor = sHeartsDDPrimFactors[ddType].b * ddFactor; - sBeatingHeartsDDPrim[0] = (u8)(rFactor + HEARTS_DD_PRIM_R) & 0xFF; - sBeatingHeartsDDPrim[1] = (u8)(gFactor + HEARTS_DD_PRIM_G) & 0xFF; - sBeatingHeartsDDPrim[2] = (u8)(bFactor + HEARTS_DD_PRIM_B) & 0xFF; + sBeatingHeartsDDPrim.r = (u8)(rFactor + sHeartsDDPrimColors[0].r) & 0xFF; + sBeatingHeartsDDPrim.g = (u8)(gFactor + sHeartsDDPrimColors[0].g) & 0xFF; + sBeatingHeartsDDPrim.b = (u8)(bFactor + sHeartsDDPrimColors[0].b) & 0xFF; - rFactor = sHeartsDDEnvFactors[ddType][0] * ddFactor; - gFactor = sHeartsDDEnvFactors[ddType][1] * ddFactor; - bFactor = sHeartsDDEnvFactors[ddType][2] * ddFactor; + rFactor = sHeartsDDEnvFactors[ddType].r * ddFactor; + gFactor = sHeartsDDEnvFactors[ddType].g * ddFactor; + bFactor = sHeartsDDEnvFactors[ddType].b * ddFactor; - sBeatingHeartsDDEnv[0] = (u8)(rFactor + HEARTS_DD_ENV_R) & 0xFF; - sBeatingHeartsDDEnv[1] = (u8)(gFactor + HEARTS_DD_ENV_G) & 0xFF; - sBeatingHeartsDDEnv[2] = (u8)(bFactor + HEARTS_DD_ENV_B) & 0xFF; + sBeatingHeartsDDEnv.r = (u8)(rFactor + sHeartsDDEnvColors[0].r) & 0xFF; + sBeatingHeartsDDEnv.g = (u8)(gFactor + sHeartsDDEnvColors[0].g) & 0xFF; + sBeatingHeartsDDEnv.b = (u8)(bFactor + sHeartsDDEnvColors[0].b) & 0xFF; } s32 func_80078E18(GlobalContext* globalCtx) { @@ -378,34 +374,34 @@ void HealthMeter_Draw(GlobalContext* globalCtx) { if (curColorSet != 4) { curColorSet = 4; gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[0][0], sHeartsDDPrim[0][1], sHeartsDDPrim[0][2], + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[0].r, sHeartsDDPrim[0].g, sHeartsDDPrim[0].b, interfaceCtx->healthAlpha); - gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[0][0], sHeartsDDEnv[0][1], sHeartsDDEnv[0][2], 255); + gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[0].r, sHeartsDDEnv[0].g, sHeartsDDEnv[0].b, 255); } } else if (i == fullHeartCount) { if (curColorSet != 5) { curColorSet = 5; gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sBeatingHeartsDDPrim[0], sBeatingHeartsDDPrim[1], - sBeatingHeartsDDPrim[2], interfaceCtx->healthAlpha); - gDPSetEnvColor(OVERLAY_DISP++, sBeatingHeartsDDEnv[0], sBeatingHeartsDDEnv[1], - sBeatingHeartsDDEnv[2], 255); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sBeatingHeartsDDPrim.r, sBeatingHeartsDDPrim.g, + sBeatingHeartsDDPrim.b, interfaceCtx->healthAlpha); + gDPSetEnvColor(OVERLAY_DISP++, sBeatingHeartsDDEnv.r, sBeatingHeartsDDEnv.g, + sBeatingHeartsDDEnv.b, 255); } } else if (i > fullHeartCount) { if (curColorSet != 6) { curColorSet = 6; gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[0][0], sHeartsDDPrim[0][1], sHeartsDDPrim[0][2], + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[0].r, sHeartsDDPrim[0].g, sHeartsDDPrim[0].b, interfaceCtx->healthAlpha); - gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[0][0], sHeartsDDEnv[0][1], sHeartsDDEnv[0][2], 255); + gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[0].r, sHeartsDDEnv[0].g, sHeartsDDEnv[0].b, 255); } } else { if (curColorSet != 7) { curColorSet = 7; gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[1][0], sHeartsDDPrim[1][1], sHeartsDDPrim[1][2], + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sHeartsDDPrim[1].r, sHeartsDDPrim[1].g, sHeartsDDPrim[1].b, interfaceCtx->healthAlpha); - gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[1][0], sHeartsDDEnv[1][1], sHeartsDDEnv[1][2], 255); + gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[1].r, sHeartsDDEnv[1].g, sHeartsDDEnv[1].b, 255); } } diff --git a/soh/src/code/z_message_PAL.c b/soh/src/code/z_message_PAL.c index 4979f047c..83d7e8c4d 100644 --- a/soh/src/code/z_message_PAL.c +++ b/soh/src/code/z_message_PAL.c @@ -8,6 +8,20 @@ #include "textures/message_static/message_static.h" #include "textures/message_texture_static/message_texture_static.h" +#include + +// Appears frequently in z_message flashing animations. +// "temp" variable is included because it is generally reused between instances of this block. +// This is mathematically equivalent but does not match.Macro was introduced because it +// originally represented a 20 line block and was going to be used an additional 3 times. +#define advanceFlashAnimation(currentColor, targetColor, flashIndex, flashTimer) \ + currentColor.r += (currentColor.r >= targetColor[flashIndex].r ? -1 : 1) * \ + ABS(currentColor.r - targetColor[flashIndex].r) / flashTimer; \ + currentColor.g += (currentColor.g >= targetColor[flashIndex].g ? -1 : 1) * \ + ABS(currentColor.g - targetColor[flashIndex].g) / flashTimer; \ + currentColor.b += (currentColor.b >= targetColor[flashIndex].b ? -1 : 1) * \ + ABS(currentColor.b - targetColor[flashIndex].b) / flashTimer; + s16 sTextFade = false; // original name: key_off_flag ? u8 D_8014B2F4 = 0; @@ -37,42 +51,42 @@ MessageTableEntry* sStaffMessageEntryTablePtr; char* _message_0xFFFC_nes; -//MessageTableEntry sNesMessageEntryTable[] = { -//#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) \ +// MessageTableEntry sNesMessageEntryTable[] = { +//#def ine DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) \ // { textId, (_SHIFTL(type, 4, 8) | _SHIFTL(yPos, 0, 8)), _message_##textId##_nes }, //#define DEFINE_MESSAGE_FFFC //#include "text/message_data.h" //#undef DEFINE_MESSAGE_FFFC //#undef DEFINE_MESSAGE -// { 0xFFFF, 0, NULL }, -//}; +// { 0xFFFF, 0, NULL }, +// }; // -//const char* sGerMessageEntryTable[] = { +// const char* sGerMessageEntryTable[] = { //#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) _message_##textId##_ger, //#include "text/message_data.h" //#undef DEFINE_MESSAGE -// NULL, -//}; +// NULL, +// }; // -//const char* sFraMessageEntryTable[] = { +// const char* sFraMessageEntryTable[] = { //#define DEFINE_MESSAGE(textId, type, yPos, nesMessage, gerMessage, fraMessage) _message_##textId##_fra, //#include "text/message_data.h" //#undef DEFINE_MESSAGE -// NULL, -//}; +// NULL, +// }; // -//MessageTableEntry sStaffMessageEntryTable[] = { -//#define DEFINE_MESSAGE(textId, type, yPos, staffMessage) \ +// MessageTableEntry sStaffMessageEntryTable[] = { +//#def ine DEFINE_MESSAGE(textId, type, yPos, staffMessage) \ // { textId, (_SHIFTL(type, 4, 8) | _SHIFTL(yPos, 0, 8)), _message_##textId##_staff }, //#include "text/message_data_staff.h" //#undef DEFINE_MESSAGE -// { 0xFFFF, 0, NULL }, -//}; +// { 0xFFFF, 0, NULL }, +// }; -//MessageTableEntry* sNesMessageEntryTablePtr = sNesMessageEntryTable; -//const char** sGerMessageEntryTablePtr = sGerMessageEntryTable; -//const char** sFraMessageEntryTablePtr = sFraMessageEntryTable; -//MessageTableEntry* sStaffMessageEntryTablePtr = sStaffMessageEntryTable; +// MessageTableEntry* sNesMessageEntryTablePtr = sNesMessageEntryTable; +// const char** sGerMessageEntryTablePtr = sGerMessageEntryTable; +// const char** sFraMessageEntryTablePtr = sFraMessageEntryTable; +// MessageTableEntry* sStaffMessageEntryTablePtr = sStaffMessageEntryTable; s16 sTextboxBackgroundForePrimColors[][3] = { { 255, 255, 255 }, { 50, 20, 0 }, { 255, 60, 0 }, { 255, 255, 255 }, @@ -105,18 +119,18 @@ s16 gOcarinaSongItemMap[] = { s32 sCharTexSize; s32 sCharTexScale; -s16 sOcarinaNoteAPrimR; -s16 sOcarinaNoteAPrimB; -s16 sOcarinaNoteAPrimG; -s16 sOcarinaNoteAEnvR; -s16 sOcarinaNoteAEnvB; -s16 sOcarinaNoteAEnvG; -s16 sOcarinaNoteCPrimR; -s16 sOcarinaNoteCPrimB; -s16 sOcarinaNoteCPrimG; -s16 sOcarinaNoteCEnvR; -s16 sOcarinaNoteCEnvB; -s16 sOcarinaNoteCEnvG; +Color_RGB8 sOcarinaNoteAPrim; +Color_RGB8 sOcarinaNoteAEnv; +Color_RGB8 sOcarinaNoteCUpPrim; +Color_RGB8 sOcarinaNoteCUpEnv; +Color_RGB8 sOcarinaNoteCRightPrim; +Color_RGB8 sOcarinaNoteCRightEnv; +Color_RGB8 sOcarinaNoteCDownPrim; +Color_RGB8 sOcarinaNoteCDownEnv; +Color_RGB8 sOcarinaNoteCLeftPrim; +Color_RGB8 sOcarinaNoteCLeftEnv; + + void Message_ResetOcarinaNoteState(void) { R_OCARINA_NOTES_YPOS(0) = 189; @@ -128,18 +142,17 @@ void Message_ResetOcarinaNoteState(void) { sOcarinaNotesAlphaValues[0] = sOcarinaNotesAlphaValues[1] = sOcarinaNotesAlphaValues[2] = sOcarinaNotesAlphaValues[3] = sOcarinaNotesAlphaValues[4] = sOcarinaNotesAlphaValues[5] = sOcarinaNotesAlphaValues[6] = sOcarinaNotesAlphaValues[7] = sOcarinaNotesAlphaValues[8] = 0; - sOcarinaNoteAPrimR = 80; - sOcarinaNoteAPrimG = 255; - sOcarinaNoteAPrimB = 150; - sOcarinaNoteAEnvR = 10; - sOcarinaNoteAEnvG = 10; - sOcarinaNoteAEnvB = 10; - sOcarinaNoteCPrimR = 255; - sOcarinaNoteCPrimG = 255; - sOcarinaNoteCPrimB = 50; - sOcarinaNoteCEnvR = 10; - sOcarinaNoteCEnvG = 10; - sOcarinaNoteCEnvB = 10; + Color_RGB8 envColor = { 10, 10, 10 }; + sOcarinaNoteAPrim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteA); + sOcarinaNoteAEnv = envColor; + sOcarinaNoteCUpPrim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCUp); + sOcarinaNoteCUpEnv = envColor; + sOcarinaNoteCRightPrim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCRight); + sOcarinaNoteCRightEnv = envColor; + sOcarinaNoteCDownPrim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCDown); + sOcarinaNoteCDownEnv = envColor; + sOcarinaNoteCLeftPrim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCLeft); + sOcarinaNoteCLeftEnv = envColor; } void Message_UpdateOcarinaGame(GlobalContext* globalCtx) { @@ -234,8 +247,8 @@ void Message_DrawTextChar(GlobalContext* globalCtx, void* textureImage, Gfx** p) s16 x = msgCtx->textPosX; s16 y = msgCtx->textPosY; - //gSPInvalidateTexCache(gfx++, 0); - //gSPInvalidateTexCache(gfx++, msgCtx->textboxSegment); + // gSPInvalidateTexCache(gfx++, 0); + // gSPInvalidateTexCache(gfx++, msgCtx->textboxSegment); gSPInvalidateTexCache(gfx++, textureImage); gDPPipeSync(gfx++); @@ -309,7 +322,6 @@ void Message_FindMessage(GlobalContext* globalCtx, u16 textId) { Font* font; const char* seg; - if (gSaveContext.language == LANGUAGE_ENG) { seg = messageTableEntry->segment; @@ -319,7 +331,7 @@ void Message_FindMessage(GlobalContext* globalCtx, u16 textId) { if (messageTableEntry->textId == textId) { foundSeg = messageTableEntry->segment; font->charTexBuf[0] = messageTableEntry->typePos; - //messageTableEntry++; + // messageTableEntry++; nextSeg = messageTableEntry->segment; font->msgOffset = messageTableEntry->segment; font->msgLength = messageTableEntry->msgSize; @@ -332,7 +344,8 @@ void Message_FindMessage(GlobalContext* globalCtx, u16 textId) { messageTableEntry++; } } else { - //languageSegmentTable = (gSaveContext.language == LANGUAGE_GER) ? sGerMessageEntryTablePtr : sFraMessageEntryTablePtr; // OTRTODO + // languageSegmentTable = (gSaveContext.language == LANGUAGE_GER) ? sGerMessageEntryTablePtr : + // sFraMessageEntryTablePtr; // OTRTODO seg = messageTableEntry->segment; while (messageTableEntry->textId != 0xFFFF) { @@ -366,7 +379,8 @@ void Message_FindMessage(GlobalContext* globalCtx, u16 textId) { messageTableEntry++; nextSeg = messageTableEntry->segment; } else { - //languageSegmentTable = (gSaveContext.language == LANGUAGE_GER) ? sGerMessageEntryTablePtr : sFraMessageEntryTablePtr; // OTRTODO + // languageSegmentTable = (gSaveContext.language == LANGUAGE_GER) ? sGerMessageEntryTablePtr : + // sFraMessageEntryTablePtr; // OTRTODO foundSeg = *languageSegmentTable; font->charTexBuf[0] = messageTableEntry->typePos; languageSegmentTable++; @@ -404,176 +418,94 @@ void Message_FindCreditsMessage(GlobalContext* globalCtx, u16 textId) { } void Message_SetTextColor(MessageContext* msgCtx, u16 colorParameter) { + Color_RGB8 color; + bool isWooden = msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN; + bool isNoShadow = msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW; switch (colorParameter) { case MSGCOL_RED: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = 255; - msgCtx->textColorG = 120; - msgCtx->textColorB = 0; - } else { - msgCtx->textColorR = 255; - msgCtx->textColorG = 60; - msgCtx->textColorB = 60; - } + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(isWooden ? colorTextWoodenRed : colorTextDefaultRed); break; case MSGCOL_ADJUSTABLE: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = R_TEXT_ADJUST_COLOR_1_R; - msgCtx->textColorG = R_TEXT_ADJUST_COLOR_1_G; - msgCtx->textColorB = R_TEXT_ADJUST_COLOR_1_B; + if (isWooden) { + color.r = R_TEXT_ADJUST_COLOR_1_R; + color.g = R_TEXT_ADJUST_COLOR_1_G; + color.b = R_TEXT_ADJUST_COLOR_1_B; } else { - msgCtx->textColorR = R_TEXT_ADJUST_COLOR_2_R; - msgCtx->textColorG = R_TEXT_ADJUST_COLOR_2_G; - msgCtx->textColorB = R_TEXT_ADJUST_COLOR_2_B; + color.r = R_TEXT_ADJUST_COLOR_2_R; + color.g = R_TEXT_ADJUST_COLOR_2_G; + color.b = R_TEXT_ADJUST_COLOR_2_B; } break; case MSGCOL_BLUE: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = 80; - msgCtx->textColorG = 110; - msgCtx->textColorB = 255; - } else { - msgCtx->textColorR = 80; - msgCtx->textColorG = 90; - msgCtx->textColorB = 255; - } + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(isWooden ? colorTextWoodenBlue : colorTextDefaultBlue); break; case MSGCOL_LIGHTBLUE: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = 90; - msgCtx->textColorG = 180; - msgCtx->textColorB = 255; - } else if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) { - msgCtx->textColorR = 80; - msgCtx->textColorG = 150; - msgCtx->textColorB = 180; + if (isWooden) { + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTextWoodenLightBlue); + } else if (isNoShadow) { + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTextNoShadowLightBlue); } else { - msgCtx->textColorR = 100; - msgCtx->textColorG = 180; - msgCtx->textColorB = 255; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTextDefaultLightBlue); } break; case MSGCOL_PURPLE: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = 210; - msgCtx->textColorG = 100; - msgCtx->textColorB = 255; - } else { - msgCtx->textColorR = 255; - msgCtx->textColorG = 150; - msgCtx->textColorB = 180; - } + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(isWooden ? colorTextWoodenPurple : colorTextDefaultPurple); break; case MSGCOL_YELLOW: - if (msgCtx->textBoxType == TEXTBOX_TYPE_WOODEN) { - msgCtx->textColorR = 255; - msgCtx->textColorG = 255; - msgCtx->textColorB = 30; - } else { - msgCtx->textColorR = 225; - msgCtx->textColorG = 255; - msgCtx->textColorB = 50; - } + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(isWooden ? colorTextWoodenYellow : colorTextDefaultYellow); break; case MSGCOL_BLACK: - msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTextDefaultBlack); break; case MSGCOL_DEFAULT: default: - if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) { - msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; - } else { - msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; - } + color = + *(Color_RGB8*)ResourceMgr_LoadBlobByName(isNoShadow ? colorTextDefaultBlack : colorTextDefaultWhite); break; } + msgCtx->textColorR = color.r; + msgCtx->textColorG = color.g; + msgCtx->textColorB = color.b; } void Message_DrawTextboxIcon(GlobalContext* globalCtx, Gfx** p, s16 x, s16 y) { - static s16 sIconPrimColors[][3] = { - { 0, 200, 80 }, - { 50, 255, 130 }, + Color_RGB8 sIconPrimColors[2] = { + *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorTextStopIconDim), + *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorTextStopIconGlow) }; - static s16 sIconEnvColors[][3] = { - { 0, 0, 0 }, - { 0, 255, 130 }, + Color_RGB8 sIconEnvColors[2] = { + { 0, 0, 0 }, + sIconPrimColors[1] }; - static s16 sIconPrimR = 0; - static s16 sIconPrimG = 200; - static s16 sIconPrimB = 80; + static s16 sIconFlashTimer = 12; static s16 sIconFlashColorIdx = 0; - static s16 sIconEnvR = 0; - static s16 sIconEnvG = 0; - static s16 sIconEnvB = 0; + static Color_RGB8 sIconPrim; + static Color_RGB8 sIconEnv; + if (sIconEnv.r == NULL || sIconEnv.g == NULL || sIconEnv.b == NULL) { + sIconEnv = sIconEnvColors[0]; + } + if (sIconPrim.r == NULL || sIconPrim.g == NULL || sIconPrim.b == NULL) { + sIconPrim = sIconPrimColors[0]; + } MessageContext* msgCtx = &globalCtx->msgCtx; Font* font = &msgCtx->font; Gfx* gfx = *p; - s16 primR; - s16 primG; - s16 primB; - s16 envR; - s16 envG; - s16 envB; u8* iconTexture = font->iconBuf; if (sTextIsCredits) { return; } - primR = (ABS(sIconPrimR - sIconPrimColors[sIconFlashColorIdx][0])) / sIconFlashTimer; - primG = (ABS(sIconPrimG - sIconPrimColors[sIconFlashColorIdx][1])) / sIconFlashTimer; - primB = (ABS(sIconPrimB - sIconPrimColors[sIconFlashColorIdx][2])) / sIconFlashTimer; - if (sIconPrimR >= sIconPrimColors[sIconFlashColorIdx][0]) { - sIconPrimR -= primR; - } else { - sIconPrimR += primR; - } - - if (sIconPrimG >= sIconPrimColors[sIconFlashColorIdx][1]) { - sIconPrimG -= primG; - } else { - sIconPrimG += primG; - } - - if (sIconPrimB >= sIconPrimColors[sIconFlashColorIdx][2]) { - sIconPrimB -= primB; - } else { - sIconPrimB += primB; - } - - envR = (ABS(sIconEnvR - sIconEnvColors[sIconFlashColorIdx][0])) / sIconFlashTimer; - envG = (ABS(sIconEnvG - sIconEnvColors[sIconFlashColorIdx][1])) / sIconFlashTimer; - envB = (ABS(sIconEnvB - sIconEnvColors[sIconFlashColorIdx][2])) / sIconFlashTimer; - - if (sIconEnvR >= sIconEnvColors[sIconFlashColorIdx][0]) { - sIconEnvR -= envR; - } else { - sIconEnvR += envR; - } - - if (sIconEnvG >= sIconEnvColors[sIconFlashColorIdx][1]) { - sIconEnvG -= envG; - } else { - sIconEnvG += envG; - } - - if (sIconEnvB >= sIconEnvColors[sIconFlashColorIdx][2]) { - sIconEnvB -= envB; - } else { - sIconEnvB += envB; - } + advanceFlashAnimation(sIconPrim, sIconPrimColors, sIconFlashColorIdx, sIconFlashTimer); + advanceFlashAnimation(sIconEnv, sIconEnvColors, sIconFlashColorIdx, sIconFlashTimer); sIconFlashTimer--; if (sIconFlashTimer == 0) { - sIconPrimR = sIconPrimColors[sIconFlashColorIdx][0]; - sIconPrimG = sIconPrimColors[sIconFlashColorIdx][1]; - sIconPrimB = sIconPrimColors[sIconFlashColorIdx][2]; - sIconEnvR = sIconEnvColors[sIconFlashColorIdx][0]; - sIconEnvG = sIconEnvColors[sIconFlashColorIdx][1]; - sIconEnvB = sIconEnvColors[sIconFlashColorIdx][2]; + sIconPrim = sIconPrimColors[sIconFlashColorIdx]; + sIconEnv = sIconEnvColors[sIconFlashColorIdx]; sIconFlashTimer = 12; sIconFlashColorIdx ^= 1; } @@ -583,8 +515,8 @@ void Message_DrawTextboxIcon(GlobalContext* globalCtx, Gfx** p, s16 x, s16 y) { gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(gfx++, 0, 0, sIconPrimR, sIconPrimG, sIconPrimB, 255); - gDPSetEnvColor(gfx++, sIconEnvR, sIconEnvG, sIconEnvB, 255); + gDPSetPrimColor(gfx++, 0, 0, sIconPrim.r, sIconPrim.g, sIconPrim.b, 255); + gDPSetEnvColor(gfx++, sIconEnv.r, sIconEnv.g, sIconEnv.b, 255); gDPLoadTextureBlock_4b(gfx++, iconTexture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, FONT_CHAR_TEX_HEIGHT, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, @@ -763,13 +695,13 @@ u16 Message_DrawItemIcon(GlobalContext* globalCtx, u16 itemId, Gfx** p, u16 i) { gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, msgCtx->textColorAlpha); if (itemId >= ITEM_MEDALLION_FOREST) { - gDPLoadTextureBlock(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_RGBA, G_IM_SIZ_32b, - 24, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, - G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_RGBA, + G_IM_SIZ_32b, 24, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } else { - gDPLoadTextureBlock(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_RGBA, G_IM_SIZ_32b, - 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, - G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_RGBA, + G_IM_SIZ_32b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } gSPTextureRectangle(gfx++, (msgCtx->textPosX + R_TEXTBOX_ICON_XPOS) << 2, R_TEXTBOX_ICON_YPOS << 2, (msgCtx->textPosX + R_TEXTBOX_ICON_XPOS + R_TEXTBOX_ICON_SIZE) << 2, @@ -874,11 +806,11 @@ void Message_DrawText(GlobalContext* globalCtx, Gfx** gfxP) { msgCtx->textPosY = YREG(1); } - if (msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW) { - msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 0; - } else { - msgCtx->textColorR = msgCtx->textColorG = msgCtx->textColorB = 255; - } + Color_RGB8 textColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName( + msgCtx->textBoxType == TEXTBOX_TYPE_NONE_NO_SHADOW ? colorTextDefaultBlack : colorTextDefaultWhite); + msgCtx->textColorR = textColor.r; + msgCtx->textColorG = textColor.g; + msgCtx->textColorB = textColor.b; msgCtx->unk_E3D0 = 0; charTexIdx = 0; @@ -1011,8 +943,8 @@ void Message_DrawText(GlobalContext* globalCtx, Gfx** gfxP) { sTextboxBackgroundBackPrimColors[msgCtx->textboxBackgroundBackColorIdx][2], msgCtx->textColorAlpha); - gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_I, 96, 48, - 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, G_IM_FMT_I, + 96, 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle( gfx++, (msgCtx->textPosX + 1) << 2, @@ -1021,9 +953,9 @@ void Message_DrawText(GlobalContext* globalCtx, Gfx** gfxP) { (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx] + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900, G_IM_FMT_I, - 96, 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTextureBlock_4b(gfx++, (uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE + 0x900, + G_IM_FMT_I, 96, 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle( gfx++, (msgCtx->textPosX + 96 + 1) << 2, (R_TEXTBOX_BG_YPOS + sTextboxBackgroundYOffsets[msgCtx->textboxBackgroundYOffsetIdx]) << 2, @@ -1037,8 +969,8 @@ void Message_DrawText(GlobalContext* globalCtx, Gfx** gfxP) { sTextboxBackgroundForePrimColors[msgCtx->textboxBackgroundForeColorIdx][2], msgCtx->textColorAlpha); - gDPLoadTextureBlock_4b(gfx++, ((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE), G_IM_FMT_I, 96, - 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + gDPLoadTextureBlock_4b(gfx++, ((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE), G_IM_FMT_I, + 96, 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle(gfx++, msgCtx->textPosX << 2, R_TEXTBOX_BG_YPOS << 2, (msgCtx->textPosX + 96) << 2, (R_TEXTBOX_BG_YPOS + 48) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); @@ -1172,7 +1104,7 @@ void Message_LoadItemIcon(GlobalContext* globalCtx, u16 itemId, s16 y) { R_TEXTBOX_ICON_XPOS = R_TEXT_INIT_XPOS - sIconItem24XOffsets[gSaveContext.language]; R_TEXTBOX_ICON_YPOS = y + 10; R_TEXTBOX_ICON_SIZE = 24; - memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gItemIcons[itemId], 0x900); + memcpy((uintptr_t)msgCtx->textboxSegment + MESSAGE_STATIC_TEX_SIZE, gItemIcons[itemId], 0x900); // "Item 24" osSyncPrintf("アイテム24=%d (%d) {%d}\n", itemId, itemId - ITEM_KOKIRI_EMERALD, 84); } @@ -1635,28 +1567,26 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) { memcpy(font->msgBuf, src, font->msgLength); // OTRTODO - //DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_staff_message_data_staticSegmentRomStart + 4 + font->msgOffset), - //font->msgLength, "../z_message_PAL.c", 1954); + // DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_staff_message_data_staticSegmentRomStart + 4 + + // font->msgOffset), font->msgLength, "../z_message_PAL.c", 1954); } else { - if (gSaveContext.language == LANGUAGE_ENG) - { + if (gSaveContext.language == LANGUAGE_ENG) { Message_FindMessage(globalCtx, textId); msgCtx->msgLength = font->msgLength; char* src = (uintptr_t)font->msgOffset; memcpy(font->msgBuf, src, font->msgLength); } else if (gSaveContext.language == LANGUAGE_GER) { // OTRTODO - //Message_FindMessage(globalCtx, textId); - //msgCtx->msgLength = font->msgLength; - //DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_ger_message_data_staticSegmentRomStart + font->msgOffset), - //font->msgLength, "../z_message_PAL.c", 1978); - } else - { + // Message_FindMessage(globalCtx, textId); + // msgCtx->msgLength = font->msgLength; + // DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_ger_message_data_staticSegmentRomStart + font->msgOffset), + // font->msgLength, "../z_message_PAL.c", 1978); + } else { // OTRTODO - //Message_FindMessage(globalCtx, textId); - //msgCtx->msgLength = font->msgLength; - //DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_fra_message_data_staticSegmentRomStart + font->msgOffset), - //font->msgLength, "../z_message_PAL.c", 1990); + // Message_FindMessage(globalCtx, textId); + // msgCtx->msgLength = font->msgLength; + // DmaMgr_SendRequest1(font->msgBuf, (uintptr_t)(_fra_message_data_staticSegmentRomStart + font->msgOffset), + // font->msgLength, "../z_message_PAL.c", 1990); } } @@ -1667,7 +1597,8 @@ void Message_OpenText(GlobalContext* globalCtx, u16 textId) { // "Text Box Type" osSyncPrintf("吹き出し種類=%d\n", msgCtx->textBoxType); if (textBoxType < TEXTBOX_TYPE_NONE_BOTTOM) { - memcpy(msgCtx->textboxSegment, ResourceMgr_LoadTexByName(msgStaticTbl[messageStaticIndices[textBoxType]]), MESSAGE_STATIC_TEX_SIZE); + memcpy(msgCtx->textboxSegment, ResourceMgr_LoadTexByName(msgStaticTbl[messageStaticIndices[textBoxType]]), + MESSAGE_STATIC_TEX_SIZE); if (textBoxType == TEXTBOX_TYPE_BLACK) { msgCtx->textboxColorRed = 0; msgCtx->textboxColorGreen = 0; @@ -1970,22 +1901,49 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { static void* sOcarinaNoteTextures[] = { gOcarinaATex, gOcarinaCDownTex, gOcarinaCRightTex, gOcarinaCLeftTex, gOcarinaCUpTex, }; - static s16 sOcarinaNoteAPrimColors[][3] = { - { 80, 255, 150 }, - { 100, 255, 200 }, - }; - static s16 sOcarinaNoteAEnvColors[][3] = { - { 10, 10, 10 }, - { 50, 255, 50 }, - }; - static s16 sOcarinaNoteCPrimColors[][3] = { - { 255, 255, 50 }, - { 255, 255, 180 }, - }; - static s16 sOcarinaNoteCEnvColors[][3] = { - { 10, 10, 10 }, - { 110, 110, 50 }, - }; + + //static s16 sOcarinaNoteAPrimColors[2][3]; // Base Flash Colors + //static s16 sOcarinaNoteCPrimColors[2][3]; + //static s16 sOcarinaNoteAEnvColors[2][3]; // Highlight Flash Colors + //static s16 sOcarinaNoteCEnvColors[2][3]; + + static Color_RGB8 sOcarinaNoteAPrimColors[2]; + static Color_RGB8 sOcarinaNoteAEnvColors[2]; + static Color_RGB8 sOcarinaNoteCUpPrimColors[2]; + static Color_RGB8 sOcarinaNoteCUpEnvColors[2]; + static Color_RGB8 sOcarinaNoteCRightPrimColors[2]; + static Color_RGB8 sOcarinaNoteCRightEnvColors[2]; + static Color_RGB8 sOcarinaNoteCDownPrimColors[2]; + static Color_RGB8 sOcarinaNoteCDownEnvColors[2]; + static Color_RGB8 sOcarinaNoteCLeftPrimColors[2]; + static Color_RGB8 sOcarinaNoteCLeftEnvColors[2]; + + // Initialize static variables + if (sOcarinaNoteAPrimColors[0].r == NULL) { + Color_RGB8 dim = { 10, 10, 10 }; + sOcarinaNoteAPrimColors[0] = sOcarinaNoteAPrim; + sOcarinaNoteCUpPrimColors[0] = sOcarinaNoteCUpPrim; + sOcarinaNoteCRightPrimColors[0] = sOcarinaNoteCRightPrim; + sOcarinaNoteCDownPrimColors[0] = sOcarinaNoteCDownPrim; + sOcarinaNoteCLeftPrimColors[0] = sOcarinaNoteCLeftPrim; + sOcarinaNoteAEnvColors[0] = dim; + sOcarinaNoteCUpEnvColors[0] = dim; + sOcarinaNoteCRightEnvColors[0] = dim; + sOcarinaNoteCDownEnvColors[0] = dim; + sOcarinaNoteCLeftEnvColors[0] = dim; + + sOcarinaNoteAPrimColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteAFlashBase); + sOcarinaNoteCUpPrimColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCUpFlashBase); + sOcarinaNoteCRightPrimColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCRightFlashBase); + sOcarinaNoteCDownPrimColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCDownFlashBase); + sOcarinaNoteCLeftPrimColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCLeftFlashBase); + sOcarinaNoteAEnvColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteAFlashLight); + sOcarinaNoteCUpEnvColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCUpFlashLight); + sOcarinaNoteCRightEnvColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCRightFlashLight); + sOcarinaNoteCDownEnvColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCDownFlashLight); + sOcarinaNoteCLeftEnvColors[1] = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCLeftFlashLight); + } + static s16 sOcarinaNoteFlashTimer = 12; static s16 sOcarinaNoteFlashColorIdx = 1; static s16 sOcarinaSongFanfares[] = { @@ -1999,9 +1957,6 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { Player* player = GET_PLAYER(globalCtx); s32 pad; Gfx* gfx = *p; - s16 r; - s16 g; - s16 b; u16 i; u16 notePosX; u16 pad1; @@ -2025,7 +1980,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); - bool isB_Held = CVar_GetS32("gFastText", 0) != 0 ? CHECK_BTN_ALL(globalCtx->state.input[0].cur.button, BTN_B) + bool isB_Held = CVar_GetS32("gFastText", 0) != 0 ? CHECK_BTN_ALL(globalCtx->state.input[0].cur.button, BTN_B) : CHECK_BTN_ALL(globalCtx->state.input[0].press.button, BTN_B); switch (msgCtx->msgMode) { @@ -2190,112 +2145,32 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { case MSGMODE_OCARINA_CORRECT_PLAYBACK: case MSGMODE_SONG_PLAYBACK_SUCCESS: case MSGMODE_SCARECROW_RECORDING_DONE: - r = ABS(sOcarinaNoteAPrimR - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0]) / - sOcarinaNoteFlashTimer; - g = ABS(sOcarinaNoteAPrimG - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1]) / - sOcarinaNoteFlashTimer; - b = ABS(sOcarinaNoteAPrimB - sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2]) / - sOcarinaNoteFlashTimer; - if (sOcarinaNoteAPrimR >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0]) { - sOcarinaNoteAPrimR -= r; - } else { - sOcarinaNoteAPrimR += r; - } - if (sOcarinaNoteAPrimG >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1]) { - sOcarinaNoteAPrimG -= g; - } else { - sOcarinaNoteAPrimG += g; - } - if (sOcarinaNoteAPrimB >= sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2]) { - sOcarinaNoteAPrimB -= b; - } else { - sOcarinaNoteAPrimB += b; - } - - r = ABS(sOcarinaNoteAEnvR - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0]) / - sOcarinaNoteFlashTimer; - g = ABS(sOcarinaNoteAEnvG - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1]) / - sOcarinaNoteFlashTimer; - b = ABS(sOcarinaNoteAEnvB - sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2]) / - sOcarinaNoteFlashTimer; - - if (sOcarinaNoteCEnvR >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0]) { - sOcarinaNoteAEnvR -= r; - } else { - sOcarinaNoteAEnvR += r; - } - if (sOcarinaNoteCEnvG >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1]) { - sOcarinaNoteAEnvG -= g; - } else { - sOcarinaNoteAEnvG += g; - } - if (sOcarinaNoteCEnvB >= sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2]) { - sOcarinaNoteAEnvB -= b; - } else { - sOcarinaNoteAEnvB += b; - } - - r = ABS(sOcarinaNoteCPrimR - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0]) / - sOcarinaNoteFlashTimer; - g = ABS(sOcarinaNoteCPrimG - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1]) / - sOcarinaNoteFlashTimer; - b = ABS(sOcarinaNoteCPrimB - sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2]) / - sOcarinaNoteFlashTimer; - - if (sOcarinaNoteCPrimR >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0]) { - sOcarinaNoteCPrimR -= r; - } else { - sOcarinaNoteCPrimR += r; - } - if (sOcarinaNoteCPrimG >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1]) { - sOcarinaNoteCPrimG -= g; - } else { - sOcarinaNoteCPrimG += g; - } - if (sOcarinaNoteCPrimB >= sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2]) { - sOcarinaNoteCPrimB -= b; - } else { - sOcarinaNoteCPrimB += b; - } - - r = ABS(sOcarinaNoteCEnvR - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0]) / - sOcarinaNoteFlashTimer; - g = ABS(sOcarinaNoteCEnvG - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1]) / - sOcarinaNoteFlashTimer; - b = ABS(sOcarinaNoteCEnvB - sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2]) / - sOcarinaNoteFlashTimer; - - if (sOcarinaNoteCEnvR >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0]) { - sOcarinaNoteCEnvR -= r; - } else { - sOcarinaNoteCEnvR += r; - } - if (sOcarinaNoteCEnvG >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1]) { - sOcarinaNoteCEnvG -= g; - } else { - sOcarinaNoteCEnvG += g; - } - if (sOcarinaNoteCEnvB >= sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2]) { - sOcarinaNoteCEnvB -= b; - } else { - sOcarinaNoteCEnvB += b; - } + advanceFlashAnimation(sOcarinaNoteAPrim, sOcarinaNoteAPrimColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + // expanded block used to contain minor logical error that produced nearly no visual difference + // for consistency and for the sake of a functional macro it has been patched + advanceFlashAnimation(sOcarinaNoteAEnv, sOcarinaNoteAEnvColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCUpPrim, sOcarinaNoteCUpPrimColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCUpEnv, sOcarinaNoteCUpEnvColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCRightPrim, sOcarinaNoteCRightPrimColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCRightEnv, sOcarinaNoteCRightEnvColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCDownPrim, sOcarinaNoteCDownPrimColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCDownEnv, sOcarinaNoteCDownEnvColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCLeftPrim, sOcarinaNoteCLeftPrimColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); + advanceFlashAnimation(sOcarinaNoteCLeftEnv, sOcarinaNoteCLeftEnvColors, sOcarinaNoteFlashColorIdx, sOcarinaNoteFlashTimer); sOcarinaNoteFlashTimer--; if (sOcarinaNoteFlashTimer == 0) { - sOcarinaNoteAPrimR = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][0]; - sOcarinaNoteAPrimG = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][1]; - sOcarinaNoteAPrimB = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx][2]; - sOcarinaNoteAEnvR = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][0]; - sOcarinaNoteAEnvG = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][1]; - sOcarinaNoteAEnvB = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx][2]; - sOcarinaNoteCPrimR = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][0]; - sOcarinaNoteCPrimG = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][1]; - sOcarinaNoteCPrimB = sOcarinaNoteCPrimColors[sOcarinaNoteFlashColorIdx][2]; - sOcarinaNoteCEnvR = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][0]; - sOcarinaNoteCEnvG = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][1]; - sOcarinaNoteCEnvB = sOcarinaNoteCEnvColors[sOcarinaNoteFlashColorIdx][2]; + sOcarinaNoteAPrim = sOcarinaNoteAPrimColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteAEnv = sOcarinaNoteAEnvColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCUpPrim = sOcarinaNoteCUpPrimColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCUpEnv = sOcarinaNoteCUpEnvColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCRightPrim = sOcarinaNoteCRightPrimColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCRightEnv = sOcarinaNoteCRightEnvColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCDownPrim = sOcarinaNoteCDownPrimColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCDownEnv = sOcarinaNoteCDownEnvColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCLeftPrim = sOcarinaNoteCLeftPrimColors[sOcarinaNoteFlashColorIdx]; + sOcarinaNoteCLeftEnv = sOcarinaNoteCLeftEnvColors[sOcarinaNoteFlashColorIdx]; sOcarinaNoteFlashTimer = 3; sOcarinaNoteFlashColorIdx ^= 1; } @@ -2615,7 +2490,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("\n====================================================================\n"); memcpy(gSaveContext.scarecrowCustomSong, gScarecrowCustomSongPtr, - sizeof(gSaveContext.scarecrowCustomSong)); + sizeof(gSaveContext.scarecrowCustomSong)); for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowCustomSong); i++) { osSyncPrintf("%d, ", gSaveContext.scarecrowCustomSong[i]); } @@ -2678,7 +2553,7 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("\n====================================================================\n"); memcpy(gSaveContext.scarecrowSpawnSong, gScarecrowSpawnSongPtr, - sizeof(gSaveContext.scarecrowSpawnSong)); + sizeof(gSaveContext.scarecrowSpawnSong)); for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) { osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]); } @@ -2866,20 +2741,20 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); if (msgCtx->msgMode == MSGMODE_SONG_PLAYBACK) { - g = msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET; - r = gOcarinaSongNotes[g].len; - for (notePosX = R_OCARINA_NOTES_XPOS, i = 0; i < r; i++, notePosX += R_OCARINA_NOTES_XPOS_OFFSET) { + s16 songIdx = msgCtx->ocarinaAction - OCARINA_ACTION_PLAYBACK_MINUET; + s16 songLength = gOcarinaSongNotes[songIdx].len; + for (notePosX = R_OCARINA_NOTES_XPOS, i = 0; i < songLength; i++, notePosX += R_OCARINA_NOTES_XPOS_OFFSET) { gDPPipeSync(gfx++); gDPSetPrimColor(gfx++, 0, 0, 150, 150, 150, 150); gDPSetEnvColor(gfx++, 10, 10, 10, 0); - gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[gOcarinaSongNotes[g].notesIdx[i]], G_IM_FMT_IA, + gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[gOcarinaSongNotes[songIdx].notesIdx[i]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle( - gfx++, notePosX << 2, R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[g].notesIdx[i]) << 2, - (notePosX + 16) << 2, (R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[g].notesIdx[i]) + 16) << 2, + gfx++, notePosX << 2, R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[songIdx].notesIdx[i]) << 2, + (notePosX + 16) << 2, (R_OCARINA_NOTES_YPOS(gOcarinaSongNotes[songIdx].notesIdx[i]) + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } @@ -2900,14 +2775,36 @@ void Message_DrawMain(GlobalContext* globalCtx, Gfx** p) { } gDPPipeSync(gfx++); - if (sOcarinaNoteBuf[i] == OCARINA_NOTE_A) { - gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteAPrimR, sOcarinaNoteAPrimG, sOcarinaNoteAPrimB, - sOcarinaNotesAlphaValues[i]); - gDPSetEnvColor(gfx++, sOcarinaNoteAEnvR, sOcarinaNoteAEnvG, sOcarinaNoteAEnvB, 0); - } else { - gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCPrimR, sOcarinaNoteCPrimG, sOcarinaNoteCPrimB, - sOcarinaNotesAlphaValues[i]); - gDPSetEnvColor(gfx++, sOcarinaNoteCEnvR, sOcarinaNoteCEnvG, sOcarinaNoteCEnvB, 0); + switch (sOcarinaNoteBuf[i]) { + case OCARINA_NOTE_A: + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteAPrim.r, sOcarinaNoteAPrim.g, sOcarinaNoteAPrim.b, + sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaNoteAEnv.r, sOcarinaNoteAEnv.g, sOcarinaNoteAEnv.b, 0); + break; + case OCARINA_NOTE_C_UP: + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCUpPrim.r, sOcarinaNoteCUpPrim.g, + sOcarinaNoteCUpPrim.b, sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaNoteCUpEnv.r, sOcarinaNoteCUpEnv.g, sOcarinaNoteCUpEnv.b, 0); + break; + case OCARINA_NOTE_C_RIGHT: + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCRightPrim.r, sOcarinaNoteCRightPrim.g, + sOcarinaNoteCRightPrim.b, sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaNoteCRightEnv.r, sOcarinaNoteCRightEnv.g, sOcarinaNoteCRightEnv.b, 0); + break; + case OCARINA_NOTE_C_DOWN: + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCDownPrim.r, sOcarinaNoteCDownPrim.g, + sOcarinaNoteCDownPrim.b, sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaNoteCDownEnv.r, sOcarinaNoteCDownEnv.g, sOcarinaNoteCDownEnv.b, 0); + break; + case OCARINA_NOTE_C_LEFT: + gDPSetPrimColor(gfx++, 0, 0, sOcarinaNoteCLeftPrim.r, sOcarinaNoteCLeftPrim.g, + sOcarinaNoteCLeftPrim.b, sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, sOcarinaNoteCLeftEnv.r, sOcarinaNoteCLeftEnv.g, sOcarinaNoteCLeftEnv.b, 0); + break; + default: + gDPSetPrimColor(gfx++, 0, 0, 255, 255, 255, sOcarinaNotesAlphaValues[i]); + gDPSetEnvColor(gfx++, 255, 255, 255, 0); + break; } gDPLoadTextureBlock(gfx++, sOcarinaNoteTextures[sOcarinaNoteBuf[i]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, @@ -3319,12 +3216,12 @@ void Message_Update(GlobalContext* globalCtx) { void Message_SetTables(void) { OTRMessage_Init(); - + // OTRTODO - //sNesMessageEntryTablePtr = sNesMessageEntryTable; - //sGerMessageEntryTablePtr = sGerMessageEntryTable; - //sFraMessageEntryTablePtr = sFraMessageEntryTable; - //sStaffMessageEntryTablePtr = sStaffMessageEntryTable; + // sNesMessageEntryTablePtr = sNesMessageEntryTable; + // sGerMessageEntryTablePtr = sGerMessageEntryTable; + // sFraMessageEntryTablePtr = sFraMessageEntryTable; + // sStaffMessageEntryTablePtr = sStaffMessageEntryTable; } // Appears to be file padding diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 8bce65a7b..d10acb194 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -3,6 +3,7 @@ #include "textures/parameter_static/parameter_static.h" #include "textures/do_action_static/do_action_static.h" #include "textures/icon_item_static/icon_item_static.h" +#include #ifdef _MSC_VER #include @@ -135,9 +136,7 @@ static u16 sCUpTimer = 0; s16 gSpoilingItems[] = { ITEM_ODD_MUSHROOM, ITEM_FROG, ITEM_EYEDROPS }; s16 gSpoilingItemReverts[] = { ITEM_COJIRO, ITEM_PRESCRIPTION, ITEM_PRESCRIPTION }; -static s16 sMagicBorderR = 255; -static s16 sMagicBorderG = 255; -static s16 sMagicBorderB = 255; +static Color_RGB8 sMagicBorder; static s16 sExtraItemBases[] = { ITEM_STICK, ITEM_STICK, ITEM_NUT, ITEM_NUT, ITEM_BOMB, ITEM_BOMB, ITEM_BOMB, ITEM_BOMB, ITEM_BOW, @@ -158,36 +157,14 @@ static Gfx sSetupDL_80125A60[] = { gsSPEndDisplayList(), }; -static const char* actionsTbl[] = -{ - gAttackDoActionENGTex, - gCheckDoActionENGTex, - gEnterDoActionENGTex, - gReturnDoActionENGTex, - gOpenDoActionENGTex, - gJumpDoActionENGTex, - gDecideDoActionENGTex, - gDiveDoActionENGTex, - gFasterDoActionENGTex, - gThrowDoActionENGTex, - gUnusedNaviDoActionENGTex, - gClimbDoActionENGTex, - gDropDoActionENGTex, - gDownDoActionENGTex, - gSaveDoActionENGTex, - gSpeakDoActionENGTex, - gNextDoActionENGTex, - gGrabDoActionENGTex, - gStopDoActionENGTex, - gPutAwayDoActionENGTex, - gReelDoActionENGTex, - gNum1DoActionENGTex, - gNum2DoActionENGTex, - gNum3DoActionENGTex, - gNum4DoActionENGTex, - gNum5DoActionENGTex, - gNum6DoActionENGTex, - gNum7DoActionENGTex, +static const char* actionsTbl[] = { + gAttackDoActionENGTex, gCheckDoActionENGTex, gEnterDoActionENGTex, gReturnDoActionENGTex, + gOpenDoActionENGTex, gJumpDoActionENGTex, gDecideDoActionENGTex, gDiveDoActionENGTex, + gFasterDoActionENGTex, gThrowDoActionENGTex, gUnusedNaviDoActionENGTex, gClimbDoActionENGTex, + gDropDoActionENGTex, gDownDoActionENGTex, gSaveDoActionENGTex, gSpeakDoActionENGTex, + gNextDoActionENGTex, gGrabDoActionENGTex, gStopDoActionENGTex, gPutAwayDoActionENGTex, + gReelDoActionENGTex, gNum1DoActionENGTex, gNum2DoActionENGTex, gNum3DoActionENGTex, + gNum4DoActionENGTex, gNum5DoActionENGTex, gNum6DoActionENGTex, gNum7DoActionENGTex, gNum8DoActionENGTex, }; @@ -1157,7 +1134,7 @@ Gfx* Gfx_TextureIA8(Gfx* displayListHead, void* texture, s16 textureWidth, s16 t G_TX_NOLOD); gSPWideTextureRectangle(displayListHead++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, - (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); return displayListHead; } @@ -1169,7 +1146,7 @@ Gfx* Gfx_TextureI8(Gfx* displayListHead, void* texture, s16 textureWidth, s16 te G_TX_NOLOD); gSPWideTextureRectangle(displayListHead++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, - (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); return displayListHead; } @@ -1299,7 +1276,8 @@ void Interface_LoadItemIcon1(GlobalContext* globalCtx, u16 button) { osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK); DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->iconItemSegment + button * 0x1000, - (uintptr_t)_icon_item_staticSegmentRomStart + (gSaveContext.equips.buttonItems[button] * 0x1000), + (uintptr_t)_icon_item_staticSegmentRomStart + + (gSaveContext.equips.buttonItems[button] * 0x1000), 0x1000, 0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1171); osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); } @@ -1309,7 +1287,8 @@ void Interface_LoadItemIcon2(GlobalContext* globalCtx, u16 button) { osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK); DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_180, interfaceCtx->iconItemSegment + button * 0x1000, - (uintptr_t)_icon_item_staticSegmentRomStart + (gSaveContext.equips.buttonItems[button] * 0x1000), + (uintptr_t)_icon_item_staticSegmentRomStart + + (gSaveContext.equips.buttonItems[button] * 0x1000), 0x1000, 0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1193); osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); } @@ -2070,7 +2049,7 @@ s32 Inventory_ConsumeFairy(GlobalContext* globalCtx) { void func_80086D5C(s32* buf, u16 size) { u16 i; - //buf = ResourceMgr_LoadTexByName(buf); + // buf = ResourceMgr_LoadTexByName(buf); for (i = 0; i < size; i++) { buf[i] = 0; @@ -2110,19 +2089,18 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l action += DO_ACTION_MAX; }*/ - if (action != DO_ACTION_NONE) { - //osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK); + // osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK); memcpy(interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE), ResourceMgr_LoadTexByName(doAction), DO_ACTION_TEX_SIZE); - //DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, - //interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE), - //(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, - //0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2145); - //osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); + // DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, + // interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE), + //(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, + // 0, &interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2145); + // osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); } else { gSegments[7] = VIRTUAL_TO_PHYSICAL(interfaceCtx->doActionSegment); - //func_80086D5C(SEGMENTED_TO_VIRTUAL(sDoActionTextures[loadOffset]), DO_ACTION_TEX_SIZE / 4); + // func_80086D5C(SEGMENTED_TO_VIRTUAL(sDoActionTextures[loadOffset]), DO_ACTION_TEX_SIZE / 4); func_80086D5C(interfaceCtx->doActionSegment + (loadOffset * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE / 4); } } @@ -2195,14 +2173,12 @@ void Interface_LoadActionLabelB(GlobalContext* globalCtx, u16 action) { interfaceCtx->unk_1FC = action; - - // OTRTODO osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, OS_MESG_BLOCK); memcpy(interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE, ResourceMgr_LoadTexByName(doAction), DO_ACTION_TEX_SIZE); - //DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE, - //(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, 0, - //&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2228); + // DmaMgr_SendRequest2(&interfaceCtx->dmaRequest_160, interfaceCtx->doActionSegment + DO_ACTION_TEX_SIZE, + //(uintptr_t)_do_action_staticSegmentRomStart + (action * DO_ACTION_TEX_SIZE), DO_ACTION_TEX_SIZE, 0, + //&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 2228); osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); interfaceCtx->unk_1FA = 1; @@ -2423,20 +2399,18 @@ s32 func_80087708(GlobalContext* globalCtx, s16 arg1, s16 arg2) { } void Interface_UpdateMagicBar(GlobalContext* globalCtx) { - static s16 sMagicBorderColors[][3] = { - { 255, 255, 255 }, - { 150, 150, 150 }, - { 255, 255, 150 }, - { 255, 255, 50 }, - }; + Color_RGB8 magicBorderDefault = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorMagicBorder); + + static Color_RGB8 sMagicBorderColors[4]; + sMagicBorderColors[0] = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorMagicBorder); + sMagicBorderColors[1] = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorMagicBorderDim); + static s16 sMagicBorderIndexes[] = { 0, 1, 1, 0 }; static s16 sMagicBorderRatio = 2; static s16 sMagicBorderStep = 1; MessageContext* msgCtx = &globalCtx->msgCtx; InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; - s16 borderChangeR; - s16 borderChangeG; - s16 borderChangeB; + Color_RGB8 borderChange; s16 temp; switch (gSaveContext.unk_13F0) { @@ -2486,42 +2460,42 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { if (gSaveContext.magic <= 0) { gSaveContext.magic = 0; gSaveContext.unk_13F0 = 3; - sMagicBorderR = sMagicBorderG = sMagicBorderB = 255; + sMagicBorder = magicBorderDefault; } else if (gSaveContext.magic == gSaveContext.unk_13F8) { gSaveContext.unk_13F0 = 3; - sMagicBorderR = sMagicBorderG = sMagicBorderB = 255; + sMagicBorder = magicBorderDefault; } case 3: case 4: case 6: temp = sMagicBorderIndexes[sMagicBorderStep]; - borderChangeR = ABS(sMagicBorderR - sMagicBorderColors[temp][0]) / sMagicBorderRatio; - borderChangeG = ABS(sMagicBorderG - sMagicBorderColors[temp][1]) / sMagicBorderRatio; - borderChangeB = ABS(sMagicBorderB - sMagicBorderColors[temp][2]) / sMagicBorderRatio; + borderChange.r = ABS(sMagicBorder.r - sMagicBorderColors[temp].r) / sMagicBorderRatio; + borderChange.g = ABS(sMagicBorder.g - sMagicBorderColors[temp].g) / sMagicBorderRatio; + borderChange.b = ABS(sMagicBorder.b - sMagicBorderColors[temp].b) / sMagicBorderRatio; - if (sMagicBorderR >= sMagicBorderColors[temp][0]) { - sMagicBorderR -= borderChangeR; + if (sMagicBorder.r >= sMagicBorderColors[temp].r) { + sMagicBorder.r -= borderChange.r; } else { - sMagicBorderR += borderChangeR; + sMagicBorder.r += borderChange.r; } - if (sMagicBorderG >= sMagicBorderColors[temp][1]) { - sMagicBorderG -= borderChangeG; + if (sMagicBorder.g >= sMagicBorderColors[temp].g) { + sMagicBorder.g -= borderChange.g; } else { - sMagicBorderG += borderChangeG; + sMagicBorder.g += borderChange.g; } - if (sMagicBorderB >= sMagicBorderColors[temp][2]) { - sMagicBorderB -= borderChangeB; + if (sMagicBorder.b >= sMagicBorderColors[temp].b) { + sMagicBorder.b -= borderChange.b; } else { - sMagicBorderB += borderChangeB; + sMagicBorder.b += borderChange.b; } sMagicBorderRatio--; if (sMagicBorderRatio == 0) { - sMagicBorderR = sMagicBorderColors[temp][0]; - sMagicBorderG = sMagicBorderColors[temp][1]; - sMagicBorderB = sMagicBorderColors[temp][2]; + sMagicBorder.r = sMagicBorderColors[temp].r; + sMagicBorder.g = sMagicBorderColors[temp].g; + sMagicBorder.b = sMagicBorderColors[temp].b; sMagicBorderRatio = YREG(40 + sMagicBorderStep); sMagicBorderStep++; if (sMagicBorderStep >= 4) { @@ -2531,7 +2505,7 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { break; case 5: - sMagicBorderR = sMagicBorderG = sMagicBorderB = 255; + sMagicBorder = magicBorderDefault; gSaveContext.unk_13F0 = 0; break; @@ -2548,7 +2522,7 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { Audio_PlaySoundGeneral(NA_SE_SY_GLASSMODE_OFF, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8); gSaveContext.unk_13F0 = 0; - sMagicBorderR = sMagicBorderG = sMagicBorderB = 255; + sMagicBorder = magicBorderDefault; break; } @@ -2560,33 +2534,33 @@ void Interface_UpdateMagicBar(GlobalContext* globalCtx) { } temp = sMagicBorderIndexes[sMagicBorderStep]; - borderChangeR = ABS(sMagicBorderR - sMagicBorderColors[temp][0]) / sMagicBorderRatio; - borderChangeG = ABS(sMagicBorderG - sMagicBorderColors[temp][1]) / sMagicBorderRatio; - borderChangeB = ABS(sMagicBorderB - sMagicBorderColors[temp][2]) / sMagicBorderRatio; + borderChange.r = ABS(sMagicBorder.r - sMagicBorderColors[temp].r) / sMagicBorderRatio; + borderChange.g = ABS(sMagicBorder.g - sMagicBorderColors[temp].g) / sMagicBorderRatio; + borderChange.b = ABS(sMagicBorder.b - sMagicBorderColors[temp].b) / sMagicBorderRatio; - if (sMagicBorderR >= sMagicBorderColors[temp][0]) { - sMagicBorderR -= borderChangeR; + if (sMagicBorder.r >= sMagicBorderColors[temp].r) { + sMagicBorder.r -= borderChange.r; } else { - sMagicBorderR += borderChangeR; + sMagicBorder.r += borderChange.r; } - if (sMagicBorderG >= sMagicBorderColors[temp][1]) { - sMagicBorderG -= borderChangeG; + if (sMagicBorder.g >= sMagicBorderColors[temp].g) { + sMagicBorder.g -= borderChange.g; } else { - sMagicBorderG += borderChangeG; + sMagicBorder.g += borderChange.g; } - if (sMagicBorderB >= sMagicBorderColors[temp][2]) { - sMagicBorderB -= borderChangeB; + if (sMagicBorder.b >= sMagicBorderColors[temp].b) { + sMagicBorder.b -= borderChange.b; } else { - sMagicBorderB += borderChangeB; + sMagicBorder.b += borderChange.b; } sMagicBorderRatio--; if (sMagicBorderRatio == 0) { - sMagicBorderR = sMagicBorderColors[temp][0]; - sMagicBorderG = sMagicBorderColors[temp][1]; - sMagicBorderB = sMagicBorderColors[temp][2]; + sMagicBorder.r = sMagicBorderColors[temp].r; + sMagicBorder.g = sMagicBorderColors[temp].g; + sMagicBorder.b = sMagicBorderColors[temp].b; sMagicBorderRatio = YREG(40 + sMagicBorderStep); sMagicBorderStep++; if (sMagicBorderStep >= 4) { @@ -2626,15 +2600,19 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { func_80094520(globalCtx->state.gfxCtx); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMagicBorderR, sMagicBorderG, sMagicBorderB, interfaceCtx->magicAlpha); + if (sMagicBorder.r == NULL || sMagicBorder.g == NULL || sMagicBorder.b == NULL) { + sMagicBorder = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorMagicBorder); + } + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, sMagicBorder.r, sMagicBorder.g, sMagicBorder.b, interfaceCtx->magicAlpha); gDPSetEnvColor(OVERLAY_DISP++, 100, 50, 50, 255); OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gMagicBarEndTex, 8, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X), - magicBarY, 8, 16, 1 << 10, 1 << 10); + magicBarY, 8, 16, 1 << 10, 1 << 10); - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gMagicBarMidTex, 24, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X) + 8, magicBarY, - gSaveContext.unk_13F4, 16, 1 << 10, 1 << 10); + OVERLAY_DISP = + Gfx_TextureIA8(OVERLAY_DISP, gMagicBarMidTex, 24, 16, OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X) + 8, + magicBarY, gSaveContext.unk_13F4, 16, 1 << 10, 1 << 10); gDPLoadTextureBlock(OVERLAY_DISP++, gMagicBarEndTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 16, 0, G_TX_MIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 3, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -2642,8 +2620,8 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { const s16 rMagicBarX = OTRGetRectDimensionFromLeftEdge(R_MAGIC_BAR_X); gSPWideTextureRectangle(OVERLAY_DISP++, ((rMagicBarX + gSaveContext.unk_13F4) + 8) << 2, magicBarY << 2, - ((rMagicBarX + gSaveContext.unk_13F4) + 16) << 2, (magicBarY + 16) << 2, G_TX_RENDERTILE, - 256, 0, 1 << 10, 1 << 10); + ((rMagicBarX + gSaveContext.unk_13F4) + 16) << 2, (magicBarY + 16) << 2, + G_TX_RENDERTILE, 256, 0, 1 << 10, 1 << 10); gDPPipeSync(OVERLAY_DISP++); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE, PRIMITIVE, @@ -2654,15 +2632,16 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { if (gSaveContext.unk_13F0 == 4) { // Yellow part of the bar indicating the amount of magic to be subtracted - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 250, 250, 0, interfaceCtx->magicAlpha); + Color_RGB8 burnColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorMagicFillBurn); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, burnColor.r, burnColor.g, burnColor.b, interfaceCtx->magicAlpha); gDPLoadMultiBlock_4b(OVERLAY_DISP++, gMagicBarFillTex, 0, G_TX_RENDERTILE, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, - (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, - 0, 1 << 10, 1 << 10); + (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); // Fill the rest of the bar with the normal magic color gDPPipeSync(OVERLAY_DISP++); @@ -2670,8 +2649,8 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { interfaceCtx->magicAlpha); gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, - (rMagicFillX + gSaveContext.unk_13F8) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, - 0, 0, 1 << 10, 1 << 10); + (rMagicFillX + gSaveContext.unk_13F8) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, + 0, 0, 1 << 10, 1 << 10); } else { // Fill the whole bar with the normal magic color gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_MAGIC_FILL_COLOR(0), R_MAGIC_FILL_COLOR(1), R_MAGIC_FILL_COLOR(2), @@ -2682,8 +2661,8 @@ void Interface_DrawMagicBar(GlobalContext* globalCtx) { G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, - (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, - 0, 1 << 10, 1 << 10); + (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); } } @@ -2758,43 +2737,49 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_B_BTN_COLOR(0), R_B_BTN_COLOR(1), R_B_BTN_COLOR(2), interfaceCtx->bAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255); - OVERLAY_DISP = - Gfx_TextureIA8(OVERLAY_DISP, gButtonBackgroundTex, 32, 32, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(0)), R_ITEM_BTN_Y(0), - R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_DD(0) << 1, R_ITEM_BTN_DD(0) << 1); + OVERLAY_DISP = Gfx_TextureIA8( + OVERLAY_DISP, gButtonBackgroundTex, 32, 32, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(0)), R_ITEM_BTN_Y(0), + R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_WIDTH(0), R_ITEM_BTN_DD(0) << 1, R_ITEM_BTN_DD(0) << 1); + Color_RGB8 cColor; // C-Left Button Color & Texture gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cLeftAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) << 2, R_ITEM_BTN_Y(1) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) + R_ITEM_BTN_WIDTH(1)) << 2, - (R_ITEM_BTN_Y(1) + R_ITEM_BTN_WIDTH(1)) << 2, - G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(1) << 1, R_ITEM_BTN_DD(1) << 1); + cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCLeft); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cLeftAlpha); + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) << 2, + R_ITEM_BTN_Y(1) << 2, + (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(1)) + R_ITEM_BTN_WIDTH(1)) << 2, + (R_ITEM_BTN_Y(1) + R_ITEM_BTN_WIDTH(1)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(1) << 1, + R_ITEM_BTN_DD(1) << 1); // C-Down Button Color & Texture - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cDownAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) << 2, R_ITEM_BTN_Y(2) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) + R_ITEM_BTN_WIDTH(2)) << 2, - (R_ITEM_BTN_Y(2) + R_ITEM_BTN_WIDTH(2)) << 2, - G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(2) << 1, R_ITEM_BTN_DD(2) << 1); + cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCDown); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cDownAlpha); + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) << 2, + R_ITEM_BTN_Y(2) << 2, + (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(2)) + R_ITEM_BTN_WIDTH(2)) << 2, + (R_ITEM_BTN_Y(2) + R_ITEM_BTN_WIDTH(2)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(2) << 1, + R_ITEM_BTN_DD(2) << 1); // C-Right Button Color & Texture - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cRightAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) << 2, R_ITEM_BTN_Y(3) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) + R_ITEM_BTN_WIDTH(3)) << 2, - (R_ITEM_BTN_Y(3) + R_ITEM_BTN_WIDTH(3)) << 2, - G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(3) << 1, R_ITEM_BTN_DD(3) << 1); + cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCRight); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cRightAlpha); + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) << 2, + R_ITEM_BTN_Y(3) << 2, + (OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(3)) + R_ITEM_BTN_WIDTH(3)) << 2, + (R_ITEM_BTN_Y(3) + R_ITEM_BTN_WIDTH(3)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(3) << 1, + R_ITEM_BTN_DD(3) << 1); if ((pauseCtx->state < 8) || (pauseCtx->state >= 18)) { if ((globalCtx->pauseCtx.state != 0) || (globalCtx->pauseCtx.debugState != 0)) { // Start Button Texture, Color & Label gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 120, 120, interfaceCtx->startAlpha); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) << 2, 68, - (OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) + 22) << 2, 156, - G_TX_RENDERTILE, 0, 0, 1462, 1462); + Color_RGB8 startColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnStart); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, startColor.r, startColor.g, startColor.b, interfaceCtx->startAlpha); + gSPWideTextureRectangle( + OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) << 2, 68, + (OTRGetRectDimensionFromRightEdge(startButtonLeftPos[gSaveContext.language]) + 22) << 2, 156, + G_TX_RENDERTILE, 0, 0, 1462, 1462); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); @@ -2809,10 +2794,9 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { width = DO_ACTION_TEX_WIDTH / (R_START_LABEL_DD(gSaveContext.language) / 100.0f); height = DO_ACTION_TEX_HEIGHT / (R_START_LABEL_DD(gSaveContext.language) / 100.0f); const s16 rStartLabelX = OTRGetRectDimensionFromRightEdge(R_START_LABEL_X(gSaveContext.language)); - gSPWideTextureRectangle( - OVERLAY_DISP++, rStartLabelX << 2, - R_START_LABEL_Y(gSaveContext.language) << 2, (rStartLabelX + width) << 2, - (R_START_LABEL_Y(gSaveContext.language) + height) << 2, G_TX_RENDERTILE, 0, 0, dxdy, dxdy); + gSPWideTextureRectangle(OVERLAY_DISP++, rStartLabelX << 2, R_START_LABEL_Y(gSaveContext.language) << 2, + (rStartLabelX + width) << 2, (R_START_LABEL_Y(gSaveContext.language) + height) << 2, + G_TX_RENDERTILE, 0, 0, dxdy, dxdy); } } @@ -2831,12 +2815,13 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { temp = interfaceCtx->healthAlpha; } - const s16 rCUpBtnX = OTRGetRectDimensionFromRightEdge(R_C_UP_BTN_X); + const s16 rCUpBtnX = OTRGetRectDimensionFromRightEdge(R_C_UP_BTN_X); const s16 rCUPIconX = OTRGetRectDimensionFromRightEdge(R_C_UP_ICON_X); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), temp); + cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCUp); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, temp); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gSPWideTextureRectangle(OVERLAY_DISP++, rCUpBtnX << 2, R_C_UP_BTN_Y << 2, (rCUpBtnX + 16) << 2, - (R_C_UP_BTN_Y + 16) << 2, G_TX_RENDERTILE, 0, 0, 2 << 10, 2 << 10); + (R_C_UP_BTN_Y + 16) << 2, G_TX_RENDERTILE, 0, 0, 2 << 10, 2 << 10); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, temp); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); @@ -2848,7 +2833,7 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, rCUPIconX << 2, R_C_UP_ICON_Y << 2, (rCUPIconX + 32) << 2, - (R_C_UP_ICON_Y + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + (R_C_UP_ICON_Y + 8) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } sCUpTimer--; @@ -2864,27 +2849,28 @@ void Interface_DrawItemButtons(GlobalContext* globalCtx) { for (temp = 1; temp < 4; temp++) { if (gSaveContext.equips.buttonItems[temp] > 0xF0) { if (temp == 1) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cLeftAlpha); + Color_RGB8 cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCLeft); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cLeftAlpha); } else if (temp == 2) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cDownAlpha); + Color_RGB8 cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCDown); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cDownAlpha); } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), - interfaceCtx->cRightAlpha); + Color_RGB8 cColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorBtnCRight); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cColor.r, cColor.g, cColor.b, interfaceCtx->cRightAlpha); } - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex), 32, 32, - OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), R_ITEM_BTN_WIDTH(temp), - R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, R_ITEM_BTN_DD(temp) << 1); + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, ((u8*)gButtonBackgroundTex), 32, 32, + OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), + R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, + R_ITEM_BTN_DD(temp) << 1); const char* cButtonIcons[] = { gButtonBackgroundTex, gEquippedItemOutlineTex, gEmptyCLeftArrowTex, - gEmptyCDownArrowTex, gEmptyCRightArrowTex - }; + gEmptyCDownArrowTex, gEmptyCRightArrowTex }; OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, cButtonIcons[(temp + 1)], 32, 32, - OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), R_ITEM_BTN_WIDTH(temp), - R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, R_ITEM_BTN_DD(temp) << 1); + OTRGetRectDimensionFromRightEdge(R_ITEM_BTN_X(temp)), R_ITEM_BTN_Y(temp), + R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_WIDTH(temp), R_ITEM_BTN_DD(temp) << 1, + R_ITEM_BTN_DD(temp) << 1); } } @@ -2897,20 +2883,18 @@ void Interface_DrawItemIconTexture(GlobalContext* globalCtx, void* texture, s16 gDPLoadTextureBlock(OVERLAY_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) << 2, R_ITEM_ICON_Y(button) << 2, - (OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) + R_ITEM_ICON_WIDTH(button)) << 2, - (R_ITEM_ICON_Y(button) + R_ITEM_ICON_WIDTH(button)) << 2, G_TX_RENDERTILE, 0, 0, - R_ITEM_ICON_DD(button) << 1, R_ITEM_ICON_DD(button) << 1); + gSPWideTextureRectangle(OVERLAY_DISP++, OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) << 2, + R_ITEM_ICON_Y(button) << 2, + (OTRGetRectDimensionFromRightEdge(R_ITEM_ICON_X(button)) + R_ITEM_ICON_WIDTH(button)) << 2, + (R_ITEM_ICON_Y(button) + R_ITEM_ICON_WIDTH(button)) << 2, G_TX_RENDERTILE, 0, 0, + R_ITEM_ICON_DD(button) << 1, R_ITEM_ICON_DD(button) << 1); CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_parameter.c", 3094); } -const char* _gAmmoDigit0Tex[] = -{ - gAmmoDigit0Tex, gAmmoDigit1Tex, gAmmoDigit2Tex, gAmmoDigit3Tex, gAmmoDigit4Tex, - gAmmoDigit5Tex, gAmmoDigit6Tex, gAmmoDigit7Tex, gAmmoDigit8Tex, gAmmoDigit9Tex, - gUnusedAmmoDigitHalfTex -}; +const char* _gAmmoDigit0Tex[] = { gAmmoDigit0Tex, gAmmoDigit1Tex, gAmmoDigit2Tex, gAmmoDigit3Tex, + gAmmoDigit4Tex, gAmmoDigit5Tex, gAmmoDigit6Tex, gAmmoDigit7Tex, + gAmmoDigit8Tex, gAmmoDigit9Tex, gUnusedAmmoDigitHalfTex }; void Interface_DrawAmmoCount(GlobalContext* globalCtx, s16 button, s16 alpha) { s16 i; @@ -2947,11 +2931,14 @@ void Interface_DrawAmmoCount(GlobalContext* globalCtx, s16 button, s16 alpha) { ((i == ITEM_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_STICKS))) || ((i == ITEM_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_NUTS))) || ((i == ITEM_BOMBCHU) && (ammo == 50)) || ((i == ITEM_BEAN) && (ammo == 15))) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha); - } - - if (ammo == 0) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, alpha); + Color_RGB8 ammoCountColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorAmmoCountFull); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, ammoCountColor.r, ammoCountColor.g, ammoCountColor.b, alpha); + } else if (ammo == 0) { + Color_RGB8 ammoCountColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorAmmoCountEmpty); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, ammoCountColor.r, ammoCountColor.g, ammoCountColor.b, alpha); + } else { + Color_RGB8 ammoCountColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorAmmoCountDefault); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, ammoCountColor.r, ammoCountColor.g, ammoCountColor.b, alpha); } for (i = 0; ammo >= 10; i++) { @@ -2959,12 +2946,14 @@ void Interface_DrawAmmoCount(GlobalContext* globalCtx, s16 button, s16 alpha) { } if (i != 0) { - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[i], 8, 8, - OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)), R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[i], 8, 8, + OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)), + R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); } OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, (u8*)_gAmmoDigit0Tex[ammo], 8, 8, - OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)) + 6, R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); + OTRGetRectDimensionFromRightEdge(R_ITEM_AMMO_X(button)) + 6, + R_ITEM_AMMO_Y(button), 8, 8, 1 << 10, 1 << 10); } CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_parameter.c", 3158); @@ -3105,13 +3094,11 @@ void func_8008A994(InterfaceContext* interfaceCtx) { func_800AB2C4(&interfaceCtx->view); } -const char* digitTextures[] = -{ - gCounterDigit0Tex, gCounterDigit1Tex, gCounterDigit2Tex, gCounterDigit3Tex, - gCounterDigit4Tex, gCounterDigit5Tex, gCounterDigit6Tex, gCounterDigit7Tex, gCounterDigit8Tex, - gCounterDigit9Tex, gCounterColonTex, gCounterDigit1Tex, gCounterDigit2Tex, gCounterDigit3Tex, - gCounterDigit4Tex, gCounterDigit5Tex, gCounterDigit6Tex, gCounterDigit7Tex, gCounterDigit8Tex -}; +const char* digitTextures[] = { gCounterDigit0Tex, gCounterDigit1Tex, gCounterDigit2Tex, gCounterDigit3Tex, + gCounterDigit4Tex, gCounterDigit5Tex, gCounterDigit6Tex, gCounterDigit7Tex, + gCounterDigit8Tex, gCounterDigit9Tex, gCounterColonTex, gCounterDigit1Tex, + gCounterDigit2Tex, gCounterDigit3Tex, gCounterDigit4Tex, gCounterDigit5Tex, + gCounterDigit6Tex, gCounterDigit7Tex, gCounterDigit8Tex }; void Interface_Draw(GlobalContext* globalCtx) { static s16 magicArrowEffectsR[] = { 255, 100, 255 }; @@ -3163,8 +3150,9 @@ void Interface_Draw(GlobalContext* globalCtx) { func_80094520(globalCtx->state.gfxCtx); // Rupee Icon - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 100, interfaceCtx->magicAlpha); - gDPSetEnvColor(OVERLAY_DISP++, 0, 80, 0, 255); + Color_RGB8 rupeeColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorRupeeIcon); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, rupeeColor.r, rupeeColor.g, rupeeColor.b, interfaceCtx->magicAlpha); + gDPSetEnvColor(OVERLAY_DISP++, 80, 0, 0, 255); OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gRupeeCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26), 206, 16, 16, 1 << 10, 1 << 10); @@ -3186,14 +3174,16 @@ void Interface_Draw(GlobalContext* globalCtx) { if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] >= 0) { // Small Key Icon gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha); + Color_RGB8 keyColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorSmallKeyIcon); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, keyColor.r, keyColor.g, keyColor.b, interfaceCtx->magicAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 20, 255); - OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, OTRGetRectDimensionFromLeftEdge(26), 190, 16, 16, - 1 << 10, 1 << 10); + OVERLAY_DISP = Gfx_TextureIA8(OVERLAY_DISP, gSmallKeyCounterIconTex, 16, 16, + OTRGetRectDimensionFromLeftEdge(26), 190, 16, 16, 1 << 10, 1 << 10); // Small Key Counter gDPPipeSync(OVERLAY_DISP++); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + Color_RGB8 keyCounterColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorSmallKeyCountNormal); + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, keyCounterColor.r, keyCounterColor.g, keyCounterColor.b, interfaceCtx->magicAlpha); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); @@ -3208,14 +3198,14 @@ void Interface_Draw(GlobalContext* globalCtx) { svar3 = OTRGetRectDimensionFromLeftEdge(42); if (interfaceCtx->counterDigits[2] != 0) { - OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)((u8*)digitTextures[interfaceCtx->counterDigits[2]])), 8, + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, ((u8*)((u8*)digitTextures[interfaceCtx->counterDigits[2]])), 8, 16, svar3, 190, 8, 16, 1 << 10, 1 << 10); svar3 += 8; } - OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, - ((u8*)digitTextures[interfaceCtx->counterDigits[3]]), 8, 16, - svar3, 190, 8, 16, 1 << 10, 1 << 10); + OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)digitTextures[interfaceCtx->counterDigits[3]]), 8, + 16, svar3, 190, 8, 16, 1 << 10, 1 << 10); } break; default: @@ -3225,13 +3215,15 @@ void Interface_Draw(GlobalContext* globalCtx) { // Rupee Counter gDPPipeSync(OVERLAY_DISP++); + Color_RGB8 rupeeCountColor; if (gSaveContext.rupees == CUR_CAPACITY(UPG_WALLET)) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha); + rupeeCountColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorRupeeCountFull); } else if (gSaveContext.rupees != 0) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); + rupeeCountColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorRupeeCountNormal); } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, interfaceCtx->magicAlpha); + rupeeCountColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorRupeeCountEmpty); } + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, rupeeCountColor.r, rupeeCountColor.g, rupeeCountColor.b, interfaceCtx->magicAlpha); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); @@ -3257,9 +3249,8 @@ void Interface_Draw(GlobalContext* globalCtx) { svar5 = rupeeDigitsCount[CUR_UPG_VALUE(UPG_WALLET)]; for (svar1 = 0, svar3 = 42; svar1 < svar5; svar1++, svar2++, svar3 += 8) { - OVERLAY_DISP = - Gfx_TextureI8(OVERLAY_DISP, ((u8*)digitTextures[interfaceCtx->counterDigits[svar2]]), 8, 16, - OTRGetRectDimensionFromLeftEdge(svar3), 206, 8, 16, 1 << 10, 1 << 10); + OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, ((u8*)digitTextures[interfaceCtx->counterDigits[svar2]]), 8, 16, + OTRGetRectDimensionFromLeftEdge(svar3), 206, 8, 16, 1 << 10, 1 << 10); } Interface_DrawMagicBar(globalCtx); @@ -3279,8 +3270,7 @@ void Interface_Draw(GlobalContext* globalCtx) { if (!(interfaceCtx->unk_1FA)) { // B Button Icon & Ammo Count - if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) - { + if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) { Interface_DrawItemIconTexture(globalCtx, gItemIcons[gSaveContext.equips.buttonItems[0]], 0); if ((player->stateFlags1 & 0x00800000) || (globalCtx->shootingGalleryStatus > 1) || @@ -3305,9 +3295,9 @@ void Interface_Draw(GlobalContext* globalCtx) { R_B_LABEL_DD = (1 << 10) / (WREG(37 + gSaveContext.language) / 100.0f); const s16 rBLabelX = OTRGetRectDimensionFromRightEdge(R_B_LABEL_X(gSaveContext.language)); gSPWideTextureRectangle(OVERLAY_DISP++, rBLabelX << 2, R_B_LABEL_Y(gSaveContext.language) << 2, - (rBLabelX + DO_ACTION_TEX_WIDTH) << 2, - (R_B_LABEL_Y(gSaveContext.language) + DO_ACTION_TEX_HEIGHT) << 2, G_TX_RENDERTILE, 0, 0, - R_B_LABEL_DD, R_B_LABEL_DD); + (rBLabelX + DO_ACTION_TEX_WIDTH) << 2, + (R_B_LABEL_Y(gSaveContext.language) + DO_ACTION_TEX_HEIGHT) << 2, G_TX_RENDERTILE, + 0, 0, R_B_LABEL_DD, R_B_LABEL_DD); } gDPPipeSync(OVERLAY_DISP++); @@ -3352,7 +3342,7 @@ void Interface_Draw(GlobalContext* globalCtx) { // A Button func_80094A14(globalCtx->state.gfxCtx); const f32 rABtnX = OTRGetDimensionFromRightEdge(R_A_BTN_X); - //func_8008A8B8(globalCtx, R_A_BTN_Y, R_A_BTN_Y + 45, rABtnX, rABtnX + 45); + // func_8008A8B8(globalCtx, R_A_BTN_Y, R_A_BTN_Y + 45, rABtnX, rABtnX + 45); gSPClearGeometryMode(OVERLAY_DISP++, G_CULL_BOTH); gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_A_BTN_COLOR(0), R_A_BTN_COLOR(1), R_A_BTN_COLOR(2), @@ -3360,7 +3350,7 @@ void Interface_Draw(GlobalContext* globalCtx) { Interface_DrawActionButton(globalCtx, rABtnX, R_A_BTN_Y); gDPPipeSync(OVERLAY_DISP++); const f32 rAIconX = OTRGetDimensionFromRightEdge(R_A_ICON_X); - //func_8008A8B8(globalCtx, R_A_ICON_Y, R_A_ICON_Y + 45, rAIconX, rAIconX + 45); + // func_8008A8B8(globalCtx, R_A_ICON_Y, R_A_ICON_Y + 45, rAIconX, rAIconX + 45); gSPSetGeometryMode(OVERLAY_DISP++, G_CULL_BACK); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); @@ -3479,9 +3469,9 @@ void Interface_Draw(GlobalContext* globalCtx) { for (svar1 = svar2 = 0; svar1 < 4; svar1++) { if (sHBAScoreDigits[svar1] != 0 || (svar2 != 0) || (svar1 >= 3)) { - OVERLAY_DISP = Gfx_TextureI8( - OVERLAY_DISP, digitTextures[sHBAScoreDigits[svar1]], 8, 16, svar5, - (ZREG(15) - 2), digitWidth[0], VREG(42), VREG(43) << 1, VREG(43) << 1); + OVERLAY_DISP = + Gfx_TextureI8(OVERLAY_DISP, digitTextures[sHBAScoreDigits[svar1]], 8, 16, svar5, + (ZREG(15) - 2), digitWidth[0], VREG(42), VREG(43) << 1, VREG(43) << 1); svar5 += 9; svar2++; } @@ -3882,24 +3872,26 @@ void Interface_Draw(GlobalContext* globalCtx) { gDPPipeSync(OVERLAY_DISP++); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); - + + Color_RGB8 timerColor; if (gSaveContext.timer1State != 0) { if ((gSaveContext.timer1Value < 10) && (gSaveContext.timer1State < 11)) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + timerColor = *(Color_RGB8*) ResourceMgr_LoadBlobByName(colorTimerCountPanic); } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, 255); + timerColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTimerCountNormal); } } else { if ((gSaveContext.timer2Value < 10) && (gSaveContext.timer2State < 6)) { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); + timerColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTimerCountPanic); } else { - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255); + timerColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTimerCountWarning); } } + gDPSetPrimColor(OVERLAY_DISP++, 0, 0, timerColor.r, timerColor.g, timerColor.b, 255); for (svar1 = 0; svar1 < 5; svar1++) { // clang-format off - svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]); + svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]); OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, digitTextures[timerDigits[svar1]], 8, 16, svar5 + timerDigitLeftPos[svar1], svar2 = gSaveContext.timerY[svar6], digitWidth[svar1], VREG(42), VREG(43) << 1, diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index d7344d7c3..dbd7f2f31 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -4,6 +4,7 @@ #include "objects/object_link_child/object_link_child.h" #include "objects/object_triforce_spot/object_triforce_spot.h" #include "overlays/actors/ovl_Demo_Effect/z_demo_effect.h" +#include typedef struct { /* 0x00 */ u8 flag; @@ -713,7 +714,7 @@ Gfx* sBootDListGroups[][2] = { void func_8008F470(GlobalContext* globalCtx, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic, s32 boots, s32 face, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* data) { - Color_RGB8* color; + Color_RGB8 color; s32 eyeIndex = (jointTable[22].x & 0xF) - 1; s32 mouthIndex = (jointTable[22].x >> 4) - 1; @@ -744,8 +745,23 @@ void func_8008F470(GlobalContext* globalCtx, void** skeleton, Vec3s* jointTable, gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[eyeIndex])); #endif - color = &sTunicColors[tunic]; - gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0); + switch (tunic) { + case 0: + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTunicKokiri); + break; + case 1: + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTunicGoron); + break; + case 2: + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorTunicZora); + break; + default: + color.r = 255; + color.g = 255; + color.b = 255; + break; + } + gDPSetEnvColor(POLY_OPA_DISP++, color.r, color.g, color.b, 0); sDListsLodOffset = lod * 2; @@ -758,8 +774,22 @@ void func_8008F470(GlobalContext* globalCtx, void** skeleton, Vec3s* jointTable, if (strengthUpgrade >= 2) { // silver or gold gauntlets gDPPipeSync(POLY_OPA_DISP++); - color = &sGauntletColors[strengthUpgrade - 2]; - gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0); + switch (strengthUpgrade) { + case 2: + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorGauntletSilver); + break; + case 3: + color = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorGauntletGold); + break; + default: + // Always accesses an out of bounds value + // The Colored Gauntlets come from here. In the future, those values should be assetized + // And added here so that we don't go out of bounds on this anymore + color = sGauntletColors[strengthUpgrade - 2]; + break; // RBA Lives On + } + + gDPSetEnvColor(POLY_OPA_DISP++, color.r, color.g, color.b, 0); gSPDisplayList(POLY_OPA_DISP++, gLinkAdultLeftGauntletPlate1DL); gSPDisplayList(POLY_OPA_DISP++, gLinkAdultRightGauntletPlate1DL); diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 04975d910..5108faa6d 100644 --- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -13,6 +13,7 @@ #include "objects/object_mastergolon/object_mastergolon.h" #include "objects/object_masterzoora/object_masterzoora.h" #include "objects/object_masterkokirihead/object_masterkokirihead.h" +#include #define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_3 | ACTOR_FLAG_4) @@ -1879,17 +1880,19 @@ void EnOssan_UpdateCursorAnim(EnOssan* this) { this->cursorAnimState = 0; } } - this->cursorColorR = ColChanMix(0, 0.0f, t); - this->cursorColorG = ColChanMix(255, 80.0f, t); - this->cursorColorB = ColChanMix(80, 0.0f, t); - this->cursorColorA = ColChanMix(255, 0.0f, t); + + Color_RGB8 normalColor = this->cursorColorNormal; + Color_RGB8 dimColor = this->cursorColorDim; + + this->cursorColorR = Lerp(normalColor.r, dimColor.r, t); + this->cursorColorG = Lerp(normalColor.g, dimColor.g, t); + this->cursorColorB = Lerp(normalColor.b, dimColor.b, t); + this->cursorColorA = 255; this->cursorAnimTween = t; } void EnOssan_UpdateStickDirectionPromptAnim(EnOssan* this) { f32 arrowAnimTween; - f32 new_var3; // likely fake temp - s32 new_var2 = 255; // likely fake temp f32 stickAnimTween; arrowAnimTween = this->arrowAnimTween; @@ -1922,16 +1925,17 @@ void EnOssan_UpdateStickDirectionPromptAnim(EnOssan* this) { this->stickAnimState = 0; } + Color_RGB8 arrowNormal = this->arrowColorNormal; + Color_RGB8 arrowDim = this->arrowColorDim; this->stickAnimTween = stickAnimTween; - this->stickLeftPrompt.arrowColorR = (u8)(255 - ((s32)(155.0f * arrowAnimTween))); - this->stickLeftPrompt.arrowColorG = (u8)(new_var2 - (s32)(155.0f * arrowAnimTween)); - new_var3 = (155.0f * arrowAnimTween); - this->stickLeftPrompt.arrowColorB = (u8)(0 - ((s32)((-100.0f) * arrowAnimTween))); - this->stickLeftPrompt.arrowColorA = (u8)(200 - ((s32)(50.0f * arrowAnimTween))); - this->stickRightPrompt.arrowColorR = (u8)(new_var2 - (s32)new_var3); - this->stickRightPrompt.arrowColorG = (u8)(255 - (s32)new_var3); - this->stickRightPrompt.arrowColorB = (u8)(0 - ((s32)((-100.0f) * arrowAnimTween))); - this->stickRightPrompt.arrowColorA = (u8)(200 - ((s32)(50.0f * arrowAnimTween))); + this->stickLeftPrompt.arrowColorR = Lerp(arrowNormal.r, arrowDim.r, arrowAnimTween); + this->stickLeftPrompt.arrowColorG = Lerp(arrowNormal.g, arrowDim.g, arrowAnimTween); + this->stickLeftPrompt.arrowColorB = Lerp(arrowNormal.b, arrowDim.b, arrowAnimTween); + this->stickLeftPrompt.arrowColorA = Lerp(200, 150, arrowAnimTween); + this->stickRightPrompt.arrowColorR = Lerp(arrowNormal.r, arrowDim.r, arrowAnimTween); + this->stickRightPrompt.arrowColorG = Lerp(arrowNormal.g, arrowDim.g, arrowAnimTween); + this->stickRightPrompt.arrowColorB = Lerp(arrowNormal.b, arrowDim.b, arrowAnimTween); + this->stickRightPrompt.arrowColorA = Lerp(200, 150, arrowAnimTween); this->stickRightPrompt.arrowTexX = 290.0f; this->stickLeftPrompt.arrowTexX = 33.0f; this->stickRightPrompt.stickTexX = 274.0f; @@ -2137,11 +2141,17 @@ void EnOssan_InitActionFunc(EnOssan* this, GlobalContext* globalCtx) { this->stateFlag = OSSAN_STATE_IDLE; this->stickAccumX = this->stickAccumY = 0; + this->cursorColorNormal = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorShopCursorNormal); + this->cursorColorDim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorShopCursorDim); + this->arrowColorNormal = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorShopArrowNormal); + this->arrowColorDim = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorShopArrowDim); + Color_RGB8 stickColor = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorShopStick); + this->cursorIndex = 0; this->cursorZ = 1.5f; - this->cursorColorR = 0; - this->cursorColorG = 255; - this->cursorColorB = 80; + this->cursorColorR = this->cursorColorNormal.r; + this->cursorColorG = this->cursorColorNormal.g; + this->cursorColorB = this->cursorColorNormal.b; this->cursorColorA = 255; this->cursorAnimTween = 0; @@ -2149,30 +2159,30 @@ void EnOssan_InitActionFunc(EnOssan* this, GlobalContext* globalCtx) { this->drawCursor = 0; this->happyMaskShopkeeperEyeIdx = 0; - this->stickLeftPrompt.stickColorR = 200; - this->stickLeftPrompt.stickColorG = 200; - this->stickLeftPrompt.stickColorB = 200; + this->stickLeftPrompt.stickColorR = stickColor.r; + this->stickLeftPrompt.stickColorG = stickColor.g; + this->stickLeftPrompt.stickColorB = stickColor.b; this->stickLeftPrompt.stickColorA = 180; this->stickLeftPrompt.stickTexX = 49; this->stickLeftPrompt.stickTexY = 95; - this->stickLeftPrompt.arrowColorR = 255; - this->stickLeftPrompt.arrowColorG = 255; - this->stickLeftPrompt.arrowColorB = 0; + this->stickLeftPrompt.arrowColorR = this->arrowColorNormal.r; + this->stickLeftPrompt.arrowColorG = this->arrowColorNormal.g; + this->stickLeftPrompt.arrowColorB = this->arrowColorNormal.b; this->stickLeftPrompt.arrowColorA = 200; this->stickLeftPrompt.arrowTexX = 33; this->stickLeftPrompt.arrowTexY = 91; this->stickLeftPrompt.z = 1; this->stickLeftPrompt.isEnabled = false; - this->stickRightPrompt.stickColorR = 200; - this->stickRightPrompt.stickColorG = 200; - this->stickRightPrompt.stickColorB = 200; + this->stickRightPrompt.stickColorR = stickColor.r; + this->stickRightPrompt.stickColorG = stickColor.g; + this->stickRightPrompt.stickColorB = stickColor.b; this->stickRightPrompt.stickColorA = 180; this->stickRightPrompt.stickTexX = 274; this->stickRightPrompt.stickTexY = 95; - this->stickRightPrompt.arrowColorR = 255; - this->stickRightPrompt.arrowColorG = 255; - this->stickRightPrompt.arrowColorB = 0; + this->stickRightPrompt.arrowColorR = this->arrowColorNormal.r; + this->stickRightPrompt.arrowColorG = this->arrowColorNormal.g; + this->stickRightPrompt.arrowColorB = this->arrowColorNormal.b; this->stickRightPrompt.arrowColorA = 200; this->stickRightPrompt.arrowTexX = 290; this->stickRightPrompt.arrowTexY = 91; diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h index 1dddce504..534f3bf43 100644 --- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h +++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.h @@ -31,7 +31,7 @@ typedef struct { /* 0x34 */ s32 isEnabled; } StickDirectionPrompt; // size = 0x38 -#define ColChanMix(c1, c2, m) (c1 - (s32)(c2 * m)) & 0xFF +#define Lerp(c1, c2, m) (c1 - (s8)((c1 - c2) * m)) typedef struct EnOssan { /* 0x0000 */ Actor actor; @@ -81,7 +81,11 @@ typedef struct EnOssan { /* 0x02CD */ u8 stickAnimState; /* 0x02D0 */ f32 shopItemSelectedTween; /* 0x02D4 */ f32 cameraFaceAngle; // stored in degrees -} EnOssan; // size = 0x02D8 + /* 0x02D8 */ Color_RGB8 arrowColorNormal; + /* 0x02F0 */ Color_RGB8 arrowColorDim; + /* 0x0308 */ Color_RGB8 cursorColorNormal; + /* 0x0320 */ Color_RGB8 cursorColorDim; +} EnOssan; // size = 0x0338 typedef enum { /* 00 */ OSSAN_TYPE_KOKIRI, diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index 46be1154f..b3b23cc37 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -1,6 +1,7 @@ #include "z_kaleido_scope.h" #include "textures/parameter_static/parameter_static.h" #include "textures/icon_item_static/icon_item_static.h" +#include extern const char* digitTextures[]; @@ -467,6 +468,11 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx } } + Color_RGB8 colorA = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteA); + Color_RGB8 colorCUp = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCUp); + Color_RGB8 colorCRight = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCRight); + Color_RGB8 colorCDown = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCDown); + Color_RGB8 colorCLeft = *(Color_RGB8*)ResourceMgr_LoadBlobByName(colorOcarinaNoteCLeft); if (pauseCtx->unk_1E4 == 2) { pauseCtx->ocarinaStaff = Audio_OcaGetDisplayingStaff(); @@ -496,10 +502,24 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx gDPPipeSync(POLY_KAL_DISP++); - if (D_8082A124[sp218] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[sp218]); - } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[sp218]); + switch (D_8082A124[sp218]) { + case OCARINA_NOTE_A: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorA.r, colorA.g, colorA.b, 200); + break; + case OCARINA_NOTE_C_UP: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCUp.r, colorCUp.g, colorCUp.b, 200); + break; + case OCARINA_NOTE_C_RIGHT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCRight.r, colorCRight.g, colorCRight.b, 200); + break; + case OCARINA_NOTE_C_DOWN: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCDown.r, colorCDown.g, colorCDown.b, 200); + break; + case OCARINA_NOTE_C_LEFT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCLeft.r, colorCLeft.g, colorCLeft.b, 200); + break; + default: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); } gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); @@ -526,10 +546,24 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx gDPPipeSync(POLY_KAL_DISP++); if (pauseCtx->unk_1E4 == 8) { - if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, 200); - } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); + switch (gOcarinaSongNotes[sp224].notesIdx[phi_s3]) { + case OCARINA_NOTE_A: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorA.r, colorA.g, colorA.b, 200); + break; + case OCARINA_NOTE_C_UP: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCUp.r, colorCUp.g, colorCUp.b, 200); + break; + case OCARINA_NOTE_C_RIGHT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCRight.r, colorCRight.g, colorCRight.b, 200); + break; + case OCARINA_NOTE_C_DOWN: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCDown.r, colorCDown.g, colorCDown.b, 200); + break; + case OCARINA_NOTE_C_LEFT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCLeft.r, colorCLeft.g, colorCLeft.b, 200); + break; + default: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); } } else { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 150, 150, 150, 150); @@ -581,10 +615,24 @@ void KaleidoScope_DrawQuestStatus(GlobalContext* globalCtx, GraphicsContext* gfx gDPPipeSync(POLY_KAL_DISP++); - if (D_8082A124[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 80, 255, 150, D_8082A150[phi_s3]); - } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, D_8082A150[phi_s3]); + switch (D_8082A124[phi_s3]) { + case OCARINA_NOTE_A: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorA.r, colorA.g, colorA.b, 200); + break; + case OCARINA_NOTE_C_UP: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCUp.r, colorCUp.g, colorCUp.b, 200); + break; + case OCARINA_NOTE_C_RIGHT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCRight.r, colorCRight.g, colorCRight.b, 200); + break; + case OCARINA_NOTE_C_DOWN: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCDown.r, colorCDown.g, colorCDown.b, 200); + break; + case OCARINA_NOTE_C_LEFT: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, colorCLeft.r, colorCLeft.g, colorCLeft.b, 200); + break; + default: + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 50, 200); } gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index 3c236637b..c93c66e2a 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -144,8 +144,8 @@ void KaleidoScope_DrawEquipment(GlobalContext* globalCtx) { OPEN_DISPS(globalCtx->state.gfxCtx, "../z_kaleido_equipment.c", 219); gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, ZREG(39), ZREG(40), ZREG(41), pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, ZREG(43), ZREG(44), ZREG(45), 0); + gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2), pauseCtx->alpha); + gDPSetEnvColor(POLY_KAL_DISP++, R_B_BTN_COLOR(0), R_B_BTN_COLOR(1), R_B_BTN_COLOR(2), 0); for (i = 0, j = 64; i < 4; i++, j += 4) { if (CUR_EQUIP_VALUE(i) != 0) {