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) {