summaryrefslogtreecommitdiff
path: root/mm/src/code
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2024-06-04 07:42:49 -0500
committerGitHub <noreply@github.com>2024-06-04 07:42:49 -0500
commit6fd7fc3a9dec1b35a1f128dab07742b2afa97ecd (patch)
tree30a845a90a501262a4f0192e5451a14376df37e0 /mm/src/code
parent51a6d9d92673f2ce2197550e8991c4d83210ac9a (diff)
parent4b36181ee23d3b978be543bdec02630bd6df5ad8 (diff)
Merge pull request #659 from HarbourMasters/develop-rika
`develop-rika` -> `develop`
Diffstat (limited to 'mm/src/code')
-rw-r--r--mm/src/code/z_map_disp.c48
-rw-r--r--mm/src/code/z_scene.c2
2 files changed, 46 insertions, 4 deletions
diff --git a/mm/src/code/z_map_disp.c b/mm/src/code/z_map_disp.c
index e601e00a2..e7a0197ae 100644
--- a/mm/src/code/z_map_disp.c
+++ b/mm/src/code/z_map_disp.c
@@ -1509,6 +1509,9 @@ s32 MapDisp_ConvertBossSceneToDungeonScene(s32 sceneId) {
}
}
+// 2S2H [Port] Split u16 values into two u8 values for the custom palette below
+#define SPLIT(val) (val >> 8) & 0xFF, val & 0xFF
+
/**
* @brief Draws the dungeon room sprites for the pause menu dungeon map
*
@@ -1534,6 +1537,25 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32
0x0000, 0x0623, 0xFFC1, 0x07C1, 0x07FF, 0x003F, 0xFB3F, 0xF305,
0x0453, 0x0577, 0x0095, 0x82E5, 0xFD27, 0x7A49, 0x94A5, 0x0001,
}; // palette 2
+
+ // 2S2H [Port] Merge the 3 map palettes into 1 memory address so that we can load it once
+ // at index 0, but when the map textures below use index 1 or 2, Fast3D will correctly
+ // offset in this address to get the expected values.
+ // Palette stored as u8 to avoid endianeness issues in Fast3D
+ // clang-format off
+ static u8 sMergedPal[0x10 * 2 * 3] = {
+ // sUnvisitedRoomPal - palette 0
+ SPLIT(0x0000), SPLIT(0x0000), SPLIT(0xFFC1), SPLIT(0x07C1), SPLIT(0x07FF), SPLIT(0x003F), SPLIT(0xFB3F), SPLIT(0xF305),
+ SPLIT(0x0453), SPLIT(0x0577), SPLIT(0x0095), SPLIT(0x82E5), SPLIT(0xFD27), SPLIT(0x7A49), SPLIT(0x94A5), SPLIT(0x0001),
+ // sVisitedRoomPal - palette 1
+ SPLIT(0x0000), SPLIT(0x027F), SPLIT(0xFFC1), SPLIT(0x07C1), SPLIT(0x07FF), SPLIT(0x003F), SPLIT(0xFB3F), SPLIT(0xF305),
+ SPLIT(0x0453), SPLIT(0x0577), SPLIT(0x0095), SPLIT(0x82E5), SPLIT(0xFD27), SPLIT(0x7A49), SPLIT(0x94A5), SPLIT(0x0001),
+ // sCurrentRoomPal - palette 2
+ SPLIT(0x0000), SPLIT(0x0623), SPLIT(0xFFC1), SPLIT(0x07C1), SPLIT(0x07FF), SPLIT(0x003F), SPLIT(0xFB3F), SPLIT(0xF305),
+ SPLIT(0x0453), SPLIT(0x0577), SPLIT(0x0095), SPLIT(0x82E5), SPLIT(0xFD27), SPLIT(0x7A49), SPLIT(0x94A5), SPLIT(0x0001),
+ };
+ // clang-format on
+
PauseContext* pauseCtx = &play->pauseCtx;
s32 pad[4];
s32 i;
@@ -1542,23 +1564,40 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32
sCurrentRoomPal[1] = (green << 6) | (blue << 1) | 1;
+ // 2S2H [Port] Apply runtime palette updates by splitting the color across the low and high index
+ u16 pulseColor = (green << 6) | (blue << 1) | 1;
+ sMergedPal[(0x10 * 2 * 2) + (1 * 2) + 0] = (pulseColor >> 8) & 0xFF;
+ sMergedPal[(0x10 * 2 * 2) + (1 * 2) + 1] = pulseColor & 0xFF;
+
if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, dungeonIndex)) {
s32 requiredScopeTemp;
sUnvisitedRoomPal[0xF] = 0xAD5F;
sVisitedRoomPal[0xF] = 0xAD5F;
sCurrentRoomPal[0xF] = 0xAD5F;
+
+ for (i = 0; i <= 2; i++) {
+ sMergedPal[(0x10 * 2 * i) + (0xF * 2) + 0] = (0xAD5F >> 8) & 0xFF;
+ sMergedPal[(0x10 * 2 * i) + (0xF * 2) + 1] = 0xAD5F & 0xFF;
+ }
} else {
sCurrentRoomPal[0xF] = sVisitedRoomPal[0xF] = sUnvisitedRoomPal[0xF] = 0;
+
+ for (i = 0; i <= 2; i++) {
+ sMergedPal[(0x10 * 2 * i) + (0xF * 2) + 0] = sMergedPal[(0x10 * 2 * i) + (0xF * 2) + 1] = 0;
+ }
}
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
- gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, sUnvisitedRoomPal);
- gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, sVisitedRoomPal);
- gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, sCurrentRoomPal);
+ // #region 2S2H [Port] Load our merged palette at index 0, the other indexes do not need to be loaded
+ gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, sMergedPal);
+ // gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, sUnvisitedRoomPal);
+ // gDPLoadTLUT_pal16(POLY_OPA_DISP++, 1, sVisitedRoomPal);
+ // gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, sCurrentRoomPal);
+ // #endregion
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
for (i = 0; i < sSceneNumRooms; i++) {
@@ -1648,6 +1687,9 @@ void MapDisp_DrawRooms(PlayState* play, s32 viewX, s32 viewY, s32 viewWidth, s32
} else {
continue;
}
+
+ // 2S2H [Port] Invalidate the map textures so that the palette updates apply
+ gSPInvalidateTexCache(POLY_OPA_DISP++, roomTexture);
gSPTextureRectangle(POLY_OPA_DISP++, (texPosX << 2), (texPosY << 2), (texPosX + texWidth) << 2,
(texPosY + texHeight) << 2, 0, s, t, dsdx, dtdy);
gDPPipeSync(POLY_OPA_DISP++);
diff --git a/mm/src/code/z_scene.c b/mm/src/code/z_scene.c
index e74852dc2..da086e074 100644
--- a/mm/src/code/z_scene.c
+++ b/mm/src/code/z_scene.c
@@ -110,7 +110,7 @@ s32 Object_GetSlot(ObjectContext* objectCtx, s16 objectId) {
}
}
- return CVarGetInteger("gObjDep", 0) ? 0 : -1;
+ return CVarGetInteger("gDeveloperTools.DisableObjectDependency", 0) ? 0 : -1;
}
s32 Object_IsLoaded(ObjectContext* objectCtx, s32 slot) {