summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authormzxrules <mzxrules@gmail.com>2023-10-16 05:07:21 -0400
committermzxrules <mzxrules@gmail.com>2023-10-16 05:07:21 -0400
commit0e374ca1a066ca57e5a862a79cf8ef604d28f32c (patch)
tree3c44fcd3231617d683ffbec54424e6593a368fb3 /src/code
parentf605759ae506144bea0544eeee17f2764c4cf685 (diff)
z_map_disp OK, implement more suggestions
Diffstat (limited to 'src/code')
-rw-r--r--src/code/z_map_disp.c966
1 files changed, 418 insertions, 548 deletions
diff --git a/src/code/z_map_disp.c b/src/code/z_map_disp.c
index cb960d912..1bfffe3b0 100644
--- a/src/code/z_map_disp.c
+++ b/src/code/z_map_disp.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "gfx.h"
+#include "assets/interface/parameter_static/parameter_static.h"
#include "overlays/actors/ovl_En_Door/z_en_door.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
@@ -132,76 +133,71 @@ void MapDisp_GetMapPos(MinimapEntry* minimapEntry, s32* offsetX, s32* offsetY) {
}
}
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/XPZfI
-void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) {
- MinimapEntry* spCC;
- s32 spC8;
- s32 spC4;
- s16 var_a0_4;
- s16 var_a3;
- s32 var_t0;
- s32 var_t1;
- s32 var_v1_4;
- s32 var_v1_5;
+void func_801031D0(PlayState* play, TexturePtr texture, s32 arg2, s32 arg3, s32 arg4, f32 arg5) {
+ MinimapEntry* entry = &D_801BEBB8.minimapList->entry[arg4];
+ s32 texWidth;
+ s32 texHeight;
+ s32 dtdy;
+ s32 dsdx;
+ s32 t;
+ s32 s;
+ s16 var_v1_4;
+ s16 var_v1_5;
Color_RGBA8 spAC_color;
s32 spA8_drawType;
- spCC = &D_801BEBB8.minimapList->entry[arg4];
- if ((spCC->mapId != 0xFFFF) && (arg1 != 0)) {
- MapDisp_GetMapTexDim(spCC, &spC8, &spC4);
- OPEN_DISPS(play->state.gfxCtx);
+ if ((entry->mapId == 0xFFFF) || (texture == NULL)) {
+ return;
+ }
- Gfx_SetupDL39_Overlay(play->state.gfxCtx);
- MapData_GetMapColor(MapData_GetMapColorIndex(spCC->mapId), &spAC_color);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b,
- (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f));
- MapData_GetDrawType(spCC->mapId, &spA8_drawType);
- switch (spA8_drawType) {
- case MAPDATA_DRAW_1:
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_IA, spC8, spC4, 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);
- break;
- case MAPDATA_DRAW_3:
- gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0,
- TEXEL0);
- gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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);
- break;
- default:
- case MAPDATA_DRAW_0:
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- gDPLoadTextureBlock_4b(OVERLAY_DISP++, arg1, G_IM_FMT_I, spC8, spC4, 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);
- break;
- }
+ MapDisp_GetMapTexDim(entry, &texWidth, &texHeight);
- var_t1 = (spCC->unk8 & 1) ? (spC8 - 1) << 5 : 0;
- var_t0 = (spCC->unk8 & 2) ? 0 : (spC4 - 1) << 5;
+ OPEN_DISPS(play->state.gfxCtx);
- var_v1_4 = (spCC->unk8 & 1) ? -1 : 1;
- var_a3 = var_v1_4 << 0xA;
- var_v1_5 = (spCC->unk8 & 2) ? 1 : -1;
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
+ MapData_GetMapColor(MapData_GetMapColorIndex(entry->mapId), &spAC_color);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, spAC_color.r, spAC_color.g, spAC_color.b,
+ (s32)(play->interfaceCtx.minimapAlpha * arg5 * spAC_color.a / 255.0f));
+ MapData_GetDrawType(entry->mapId, &spA8_drawType);
- if ((spCC->unk8 & 1) != 0) {
- var_a3 = var_a3 & 0xFFFF;
- }
- if ((spCC->unk8 & 2) != 0) {
- var_a0_4 = var_v1_5 << 0xA;
- } else {
- var_a0_4 = (var_v1_5 << 0xA) & 0xFFFF;
- }
- gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (spC8 + arg2) << 2, (arg3 + spC4) << 2,
- G_TX_RENDERTILE, var_t1, var_t0, var_a3, var_a0_4);
+ switch (spA8_drawType) {
+ case MAPDATA_DRAW_1:
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_IA, texWidth, texHeight, 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);
+ break;
- CLOSE_DISPS(play->state.gfxCtx);
+ case MAPDATA_DRAW_3:
+ gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_I, texWidth, texHeight, 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);
+ break;
+
+ default:
+ case MAPDATA_DRAW_0:
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ gDPLoadTextureBlock_4b(OVERLAY_DISP++, texture, G_IM_FMT_I, texWidth, texHeight, 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);
+ break;
}
+
+ s = (entry->unk8 & 1) ? (texWidth - 1) << 5 : 0;
+ t = (entry->unk8 & 2) ? 0 : (texHeight - 1) << 5;
+
+ var_v1_4 = ((entry->unk8 & 1) ? -1 : 1) * (1 << 10);
+ var_v1_5 = ((entry->unk8 & 2) ? 1 : -1) * (1 << 10);
+
+ dsdx = (entry->unk8 & 1) ? var_v1_4 & 0xFFFF : var_v1_4;
+ dtdy = (entry->unk8 & 2) ? var_v1_5 : var_v1_5 & 0xFFFF;
+
+ gSPTextureRectangle(OVERLAY_DISP++, arg2 << 2, arg3 << 2, (texWidth + arg2) << 2, (arg3 + texHeight) << 2,
+ G_TX_RENDERTILE, s, t, dsdx, dtdy);
+
+ CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-void func_801031D0(PlayState* play, TexturePtr arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801031D0.s")
-#endif
// Tests if the map data should be rotated 180 degrees
// SCENE_35TAKI is the only scene with data flipped in this manner.
@@ -234,8 +230,6 @@ s32 func_80103A10(PlayState* play) {
((height)-1) << G_TEXTURE_IMAGE_FRAC); \
})
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/TR5Jq
void func_80103A58(PlayState* play, Actor* actor) {
MinimapEntry* spDC;
s32 spD8;
@@ -245,125 +239,104 @@ void func_80103A58(PlayState* play, Actor* actor) {
s32 spC8;
s32 spC4;
f32 spC0;
- u32 pad;
+ f32 unused1;
+ f32 unused2;
+ Player* player = GET_PLAYER(play);
s32 scale;
- Player* spB4;
- u32 pad2;
- s32 spAC_scaleTemp;
- // GraphicsContext *spA8;
+
+ // inferred from `func_801045AC`
+ unused1 = fabsf(player->actor.world.pos.y - actor->world.pos.y);
+ unused2 = 1.0f - (1 / 350.0f) * unused1;
+
+ if (unused2 < 0.0f) {
+ unused2 = 0.0f;
+ }
spDC = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom];
- spB4 = GET_PLAYER(play);
- if (spDC->mapId != 0xFFFF) {
- MapDisp_GetMapPos(spDC, &spD0, &spCC);
- MapDisp_GetMapTexDim(spDC, &spC8, &spC4);
- scale = D_801BEBB8.minimapList->scale;
- if (D_801BEBB8.minimapList->scale == 0) {
- scale = 20;
- } else if (D_801BEBB8.minimapList->scale == -1) {
- MapDisp_GetMapScale(spDC, &spAC_scaleTemp);
- scale = spAC_scaleTemp;
- }
- spC0 = 1.0f / (f32)scale;
- if (!MapDisp_IsDataRotated(play)) {
- spD8 = (s32)((actor->world.pos.x - (f32)spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC -
- D_801BEBB8.unk8 + spD0;
- spD4 = (s32)((actor->world.pos.z - (f32)spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE -
- D_801BEBB8.unkA + spCC;
- } else {
- spD8 = -(s32)((actor->world.pos.x - (f32)spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC -
- D_801BEBB8.unk8 + spD0;
- spD4 = -(s32)((actor->world.pos.z - (f32)spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE -
- D_801BEBB8.unkA + spCC;
- }
- if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) {
- OPEN_DISPS(play->state.gfxCtx);
+ if (spDC->mapId == 0xFFFF) {
+ return;
+ }
- if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & 0x80000000)) {
- s16 spA2;
- Gfx_SetupDL42_Overlay(play->state.gfxCtx);
- gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
- PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
- gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha);
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2);
-
- Matrix_Translate((f32)spD8 - 160.0f, 120.0f - (f32)spD4, 0.0f, MTXMODE_NEW);
- Matrix_RotateXFApply(-1.6f);
- spA2 = (s32)(0x7FFF - actor->focus.rot.y) / 1024;
- if (MapDisp_IsDataRotated(play)) {
- spA2 += 0x7FFF;
- }
- Matrix_RotateYF((f32)spA2 / 10.0f, MTXMODE_APPLY);
- Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx),
- G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha);
- gSPDisplayList(OVERLAY_DISP++, &D_0401ED00);
- return;
- }
- if (actor->id == ACTOR_EN_BOX) {
- if (!Flags_GetTreasure(play, actor->params & 0x1F)) {
- if (func_80102F9C(spB4->actor.world.pos.y) == func_80102F9C(actor->world.pos.y)) {
- Gfx_SetupDL39_Overlay(play->state.gfxCtx);
- gDPPipeSync(OVERLAY_DISP++);
- gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha);
- gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha);
- gDPPipeSync(OVERLAY_DISP++);
-
- gDPLoadTextureBlock_TEST(
- OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2], D_801BEB00[2],
- D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 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);
-
- // gDPSetTextureImage(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 1, &D_02003F20);
- // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAE0.unk8, 0, 0x0000, G_TX_LOADTILE, 0,
- // G_TX_NOMIRROR | G_TX_WRAP, // cmt
- // G_TX_NOMASK, //maskt
- // G_TX_NOLOD, //shiftt
- // G_TX_NOMIRROR | G_TX_WRAP, //cms
- // G_TX_NOMASK, //masks
- // G_TX_NOLOD); //shifts
- // gDPLoadSync(OVERLAY_DISP++);
- // gDPLoadBlock(OVERLAY_DISP++, G_TX_LOADTILE, 0, 0,
- // ((D_801BEAF8 + 0x40) >> D_801BEB08) - 1,
- // (((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18) + 0x7FF)
- // / ((D_801BEB18 * 8 >> 3 == 0)? 1 : D_801BEB18));
- // gDPPipeSync(OVERLAY_DISP++);
- // gDPSetTile(OVERLAY_DISP++, G_IM_FMT_RGBA, D_801BEAD8,
- // ((D_801BEB28 * 8) + 7) >> 3, 0x0000, G_TX_RENDERTILE, 0,
- // G_TX_NOMIRROR | G_TX_WRAP, // cmt
- // G_TX_NOMASK,
- // G_TX_NOLOD,
- // G_TX_NOMIRROR | G_TX_WRAP,
- // G_TX_NOMASK,
- // G_TX_NOLOD);
- // gDPSetTileSize(OVERLAY_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C);
- gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2,
- (spD4 + 4) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
- return;
- }
- }
+ MapDisp_GetMapPos(spDC, &spD0, &spCC);
+ MapDisp_GetMapTexDim(spDC, &spC8, &spC4);
+
+ scale = D_801BEBB8.minimapList->scale;
+ if (D_801BEBB8.minimapList->scale == 0) {
+ scale = 20;
+ } else if (D_801BEBB8.minimapList->scale == -1) {
+ s32 scaleTemp;
+
+ MapDisp_GetMapScale(spDC, &scaleTemp);
+ scale = scaleTemp;
+ }
+
+ spC0 = 1.0f / scale;
+ if (!MapDisp_IsDataRotated(play)) {
+ spD8 = (s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 +
+ spD0;
+ spD4 = (s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA +
+ spCC;
+ } else {
+ spD8 = -(s32)((actor->world.pos.x - spDC->unk2) * spC0) + D_801BEBB8.unk8 + D_801BEBB8.unkC - D_801BEBB8.unk8 +
+ spD0;
+ spD4 = -(s32)((actor->world.pos.z - spDC->unk6) * spC0) + D_801BEBB8.unkA + D_801BEBB8.unkE - D_801BEBB8.unkA +
+ spCC;
+ }
+
+ if ((spD8 > 0) && (spD8 < 0x3FF) && (spD4 > 0) && (spD4 < 0x3FF)) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ if ((actor->category == ACTORCAT_PLAYER) && (actor->flags & ACTOR_FLAG_80000000)) {
+ s16 spA2;
+
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
+ gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2);
+
+ Matrix_Translate(spD8 - 160.0f, 120.0f - spD4, 0.0f, MTXMODE_NEW);
+ Matrix_RotateXFApply(-1.6f);
+ spA2 = (s32)(0x7FFF - actor->focus.rot.y) / 1024;
+ if (MapDisp_IsDataRotated(play)) {
+ spA2 += 0x7FFF;
}
+ Matrix_RotateYF(spA2 / 10.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 255, 0, play->interfaceCtx.minimapAlpha);
+ gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00);
+ } else if ((actor->id == ACTOR_EN_BOX) && !Flags_GetTreasure(play, actor->params & 0x1F) &&
+ (func_80102F9C(player->actor.world.pos.y) == func_80102F9C(actor->world.pos.y))) {
+ Gfx_SetupDL39_Overlay(play->state.gfxCtx);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetTextureLUT(OVERLAY_DISP++, G_TT_NONE);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, play->interfaceCtx.minimapAlpha);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, play->interfaceCtx.minimapAlpha);
+ gDPPipeSync(OVERLAY_DISP++);
+
+ gDPLoadTextureBlock_TEST(OVERLAY_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2],
+ D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 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(OVERLAY_DISP++, (spD8 - 4) << 2, (spD4 - 4) << 2, (spD8 + 4) << 2, (spD4 + 4) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ } else {
Gfx_SetupDL39_Overlay(play->state.gfxCtx);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
- if (actor->flags & 0x80000000) {
+ if (actor->flags & ACTOR_FLAG_80000000) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, D_801BEC2C[actor->category].r, D_801BEC2C[actor->category].g,
D_801BEC2C[actor->category].b, play->interfaceCtx.minimapAlpha);
gSPTextureRectangle(OVERLAY_DISP++, (spD8 - 1) << 2, (spD4 - 1) << 2, (spD8 + 1) << 2, (spD4 + 1) << 2,
G_TX_RENDERTILE, 0, 0, 0x0001, 0x0001);
}
-
- CLOSE_DISPS(play->state.gfxCtx);
}
+ CLOSE_DISPS(play->state.gfxCtx);
}
}
-#else
-void func_80103A58(PlayState* play, Actor* actor);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80103A58.s")
-#endif
void func_8010439C(PlayState* play) {
ActorContext* actorCtx;
@@ -916,8 +889,6 @@ void MapDisp_SwapRooms(s16 nextRoom) {
}
}
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/WiRnZ
void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) {
MinimapEntry* sp6C;
s32 sp68;
@@ -926,59 +897,60 @@ void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot) {
s32 sp5C;
s32 sp58;
s32 sp54;
- s32 var_v0;
+ s32 scale;
+ f32 sp4C;
sp6C = &D_801BEBB8.minimapList->entry[D_801BEBB8.curRoom];
- if (sp6C->mapId != 0xFFFF) {
- f32 sp4C;
- MapDisp_GetMapPos(sp6C, &sp60, &sp5C);
- MapDisp_GetMapTexDim(sp6C, &sp58, &sp54);
- var_v0 = D_801BEBB8.minimapList->scale;
- if (D_801BEBB8.minimapList->scale == 0) {
- var_v0 = 20;
- } else if (D_801BEBB8.minimapList->scale == -1) {
- s32 sp48;
+ if (sp6C->mapId == 0xFFFF) {
+ return;
+ }
- MapDisp_GetMapScale(sp6C, &sp48);
- var_v0 = sp48;
- }
- sp4C = (1.0f / var_v0);
- if (!MapDisp_IsDataRotated(play)) {
- sp68 = (s32)((x - (f32)sp6C->unk2) * sp4C) + D_801BEBB8.unk8 + (D_801BEBB8.unkC - D_801BEBB8.unk8) + sp60;
- sp64 = (s32)((z - (f32)sp6C->unk6) * sp4C) + D_801BEBB8.unkA + (D_801BEBB8.unkE - D_801BEBB8.unkA) + sp5C;
- } else {
- sp68 = -(s32)((x - (f32)sp6C->unk2) * sp4C) + D_801BEBB8.unk8 + (D_801BEBB8.unkC - D_801BEBB8.unk8) + sp60;
- sp64 = -(s32)((z - (f32)sp6C->unk6) * sp4C) + D_801BEBB8.unkA + (D_801BEBB8.unkE - D_801BEBB8.unkA) + sp5C;
- }
- if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) {
- OPEN_DISPS(play->state.gfxCtx);
+ MapDisp_GetMapPos(sp6C, &sp60, &sp5C);
+ MapDisp_GetMapTexDim(sp6C, &sp58, &sp54);
+ scale = D_801BEBB8.minimapList->scale;
- Gfx_SetupDL42_Overlay(play->state.gfxCtx);
- gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
- PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
- gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
- gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
- gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2);
- Matrix_Translate((f32)sp68 - 160.0f, 120.0f - (f32)sp64, 0.0f, MTXMODE_NEW);
- Matrix_RotateXFApply(-1.6f);
- if (MapDisp_IsDataRotated(play)) {
- rot += 0x7FFF;
- }
- Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY);
- Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
- gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha);
- gSPDisplayList(OVERLAY_DISP++, D_0401ED00);
+ if (D_801BEBB8.minimapList->scale == 0) {
+ scale = 20;
+ } else if (D_801BEBB8.minimapList->scale == -1) {
+ s32 scaleTemp;
- CLOSE_DISPS(play->state.gfxCtx);
+ MapDisp_GetMapScale(sp6C, &scaleTemp);
+ scale = scaleTemp;
+ }
+
+ sp4C = 1.0f / scale;
+ if (!MapDisp_IsDataRotated(play)) {
+ sp68 = (s32)((x - (f32)sp6C->unk2) * sp4C) + D_801BEBB8.unk8 + (D_801BEBB8.unkC - D_801BEBB8.unk8) + sp60;
+ sp64 = (s32)((z - (f32)sp6C->unk6) * sp4C) + D_801BEBB8.unkA + (D_801BEBB8.unkE - D_801BEBB8.unkA) + sp5C;
+ } else {
+ sp68 = -(s32)((x - (f32)sp6C->unk2) * sp4C) + D_801BEBB8.unk8 + (D_801BEBB8.unkC - D_801BEBB8.unk8) + sp60;
+ sp64 = -(s32)((z - (f32)sp6C->unk6) * sp4C) + D_801BEBB8.unkA + (D_801BEBB8.unkE - D_801BEBB8.unkA) + sp5C;
+ }
+
+ if ((sp68 > 0) && (sp68 < 0x3FF) && (sp64 > 0) && (sp64 < 0x3FF)) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Gfx_SetupDL42_Overlay(play->state.gfxCtx);
+ gSPMatrix(OVERLAY_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
+ gDPSetRenderMode(OVERLAY_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2);
+ Matrix_Translate(sp68 - 160.0f, 120.0f - sp64, 0.0f, MTXMODE_NEW);
+ Matrix_RotateXFApply(-1.6f);
+ if (MapDisp_IsDataRotated(play)) {
+ rot += 0x7FFF;
}
+ Matrix_RotateYF(rot / 10.0f, MTXMODE_APPLY);
+ Matrix_Scale(0.4f, 0.4f, 0.4f, MTXMODE_APPLY);
+ gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0xFF, 200, 0, 0, play->interfaceCtx.minimapAlpha);
+ gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_01ED00);
+
+ CLOSE_DISPS(play->state.gfxCtx);
}
}
-#else
-void func_80105FE0(PlayState* play, s32 x, s32 z, s32 rot);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80105FE0.s")
-#endif
s32 func_80106408(PlayState* play) {
if ((gSaveContext.save.entrance == 0x6400) && (Cutscene_GetSceneLayer(play) != 0)) {
@@ -1193,38 +1165,30 @@ s32 func_80106D08(s32 sceneId) {
(s16)(((s32)(((r)*31.0f) / 255.0f) << 11) | ((s32)(((g)*31.0f) / 255.0f) << 6) | \
((s32)(((b)*31.0f) / 255.0f) << 1) | (a))
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/3cGkW
void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) {
PauseContext* pauseCtx = &play->pauseCtx;
- // s32 var_a0;
s32 var_a1_2;
s32 var_a1_4;
s32 var_a1_5;
s32 var_v1;
- s32 var_s2;
- TexturePtr temp_s1;
- s32 temp1;
- s32 temp2;
-
- temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f;
- temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f;
+ s32 i;
+ s32 temp1 = ((D_801F56B0.unk184 * -120.0f / 40.0f) + 200.0f) * 31.0f / 255.0f;
+ s32 temp2 = ((D_801F56B0.unk184 * 115.0f / 40.0f) + 140.0f) * 31.0f / 255.0f;
D_801BECC4[1] = (temp1 << 6) | (temp2 << 1) | 1;
+
if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) {
+ s32 requiredScopeTemp;
+
D_801BEC84[0xF] = 0xAD5F;
D_801BECA4[0xF] = 0xAD5F;
D_801BECC4[0xF] = 0xAD5F;
} else {
- D_801BEC84[0xF] = 0;
- D_801BECA4[0xF] = 0;
- D_801BECC4[0xF] = 0;
+ D_801BECC4[0xF] = D_801BECA4[0xF] = D_801BEC84[0xF] = 0;
}
OPEN_DISPS(play->state.gfxCtx);
- // temp_a0 = play->state.gfxCtx;
- // sp48 = arg6 + &gSaveContext;
Gfx_SetupDL39_Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, D_801BEC84);
@@ -1232,273 +1196,175 @@ void func_80106D5C(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
gDPLoadTLUT_pal16(POLY_OPA_DISP++, 2, D_801BECC4);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
- for (var_s2 = 0; var_s2 < D_801BEC1C; var_s2++) {
- s32 sp118_texWidth;
- s32 sp114_texHeight;
- s32 sp110_offsetX;
- s32 sp10C_offsetY;
- MinimapEntry* sp108;
- s32 pad104;
+ for (i = 0; i < D_801BEC1C; i++) {
+ s32 texWidth;
+ s32 texHeight;
+ s32 offsetX;
+ s32 offsetY;
+ MinimapEntry* entry;
+ TexturePtr texture;
s32 sp100;
s32 spFC;
s32 spF8;
s32 spF4;
- s32 spF0;
- s32 spEC;
+ s32 texPosX;
+ s32 texPosY;
s32 spE8;
- s32 padE4;
- s32 padE0;
-
- sp108 = &D_801BEBB8.minimapList->entry[var_s2];
- if ((sp108->mapId != 0xFFFF) && (sp108->mapId < 0x162)) {
- if ((D_801BEBB8.unk42 >= D_801BEBB8.unk3C[var_s2]) &&
- ((D_801BEBB8.unk3C[var_s2] + ((sp108->unk8 >> 2) & 7)) >= D_801BEBB8.unk42)) {
- temp_s1 = D_801F56B0.unk104[var_s2];
- if (temp_s1 != NULL) {
- spE8 = MapData_GetMapCompactId(sp108->mapId);
- if (spE8 == -1) {
- continue;
- } else {
- // sp3C = play + 0x18000;
- MapData_CPID_GetTexDim(spE8, &sp118_texWidth, &sp114_texHeight);
- MapData_CPID_GetTexOffset(spE8, &sp110_offsetX, &sp10C_offsetY);
- if (sp108->unk8 & 1) {
- sp110_offsetX = (sp118_texWidth / 2 - sp110_offsetX) + sp118_texWidth / 2;
- sp100 = (sp118_texWidth - 1) << 5;
- spF8 = 0xFC00;
- } else {
- sp100 = 0;
- spF8 = 0x400;
- }
- if (sp108->unk8 & 2) {
- sp10C_offsetY = (sp114_texHeight / 2 - sp10C_offsetY) + sp114_texHeight / 2;
- spFC = (sp114_texHeight - 1) << 5;
- spF4 = 0xFC00;
- } else {
- spFC = 0;
- spF4 = 0x400;
- }
- spF0 = ((sp108->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - sp110_offsetX) + ((arg3 / 2) + arg1);
- spEC = ((sp108->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - sp10C_offsetY) + ((arg4 / 2) + arg2);
-
- if (var_s2 == play->roomCtx.curRoom.num) {
- if (Map_IsInBossArea(play)) {
- gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth,
- sp114_texHeight, 1, 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_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth,
- sp114_texHeight, 2, 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 if (gSaveContext.save.saveInfo
- .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
- .rooms &
- (1 << var_s2)) {
- gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth,
- sp114_texHeight, 1, 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 if (CHECK_DUNGEON_ITEM(
- DUNGEON_MAP,
- arg6)) { //*(gBitFlags + 8) & gSaveContext.save.inventory.dungeonItems[arg6]) {
- gDPLoadTextureBlock_4b(POLY_OPA_DISP++, temp_s1, G_IM_FMT_CI, sp118_texWidth,
- sp114_texHeight, 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 {
- continue;
- }
- gSPTextureRectangle(POLY_OPA_DISP++, (spF0 << 2), (spEC << 2), (spF0 + sp118_texWidth) << 2,
- (spEC + sp114_texHeight) << 2, 0, sp100, spFC, spF8, spF4);
- gDPPipeSync(POLY_OPA_DISP++);
- }
- }
+ s32 two = 2;
+
+ entry = &D_801BEBB8.minimapList->entry[i];
+ if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) {
+ continue;
+ }
+
+ if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[i]) ||
+ ((D_801BEBB8.unk3C[i] + ((entry->unk8 >> 2) & 7)) < D_801BEBB8.unk42)) {
+ continue;
+ }
+
+ texture = D_801F56B0.unk104[i];
+ if (texture == NULL) {
+ continue;
+ }
+
+ spE8 = MapData_GetMapCompactId(entry->mapId);
+ if (spE8 == -1) {
+ continue;
+ }
+
+ MapData_CPID_GetTexDim(spE8, &texWidth, &texHeight);
+ MapData_CPID_GetTexOffset(spE8, &offsetX, &offsetY);
+
+ if (entry->unk8 & 1) {
+ offsetX = (texWidth / 2 - offsetX) + texWidth / 2;
+ sp100 = (texWidth - 1) << 5;
+ spF8 = 0xFC00;
+ } else {
+ sp100 = 0;
+ spF8 = 0x400;
+ }
+
+ if (entry->unk8 & 2) {
+ s32 requiredScopeTemp;
+
+ offsetY = (texHeight / 2 - offsetY) + texHeight / 2;
+ spFC = (texHeight - 1) << 5;
+ spF4 = 0xFC00;
+ } else {
+ spFC = 0;
+ spF4 = 0x400;
+ }
+
+ texPosX = ((entry->unk2 - (f32)D_801BEBB8.sceneMidX) * arg5 - offsetX) + ((arg3 / two) + arg1);
+ texPosY = ((entry->unk6 - (f32)D_801BEBB8.sceneMidZ) * arg5 - offsetY) + ((arg4 / two) + arg2);
+
+ if (i == play->roomCtx.curRoom.num) {
+ if (Map_IsInBossArea(play)) {
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1,
+ 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_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 2,
+ 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 if (((void)0, gSaveContext.save.saveInfo
+ .permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))])
+ .rooms &
+ (1 << i)) {
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 1,
+ 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 if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, arg6)) {
+ gDPLoadTextureBlock_4b(POLY_OPA_DISP++, texture, G_IM_FMT_CI, texWidth, texHeight, 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 {
+ continue;
}
+ gSPTextureRectangle(POLY_OPA_DISP++, (texPosX << 2), (texPosY << 2), (texPosX + texWidth) << 2,
+ (texPosY + texHeight) << 2, 0, sp100, spFC, spF8, spF4);
+ gDPPipeSync(POLY_OPA_DISP++);
}
+
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-void func_80106D5C(PlayState*, s32, s32, s32, s32, f32, s32);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80106D5C.s")
-#endif
-
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/dKnQx
-void func_80107B78(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) {
+
+void func_80107B78(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5) {
+ s32 pad[23];
+ MinimapChest* var_s0 = D_801BEBB8.unk54;
s32 sp3C;
MinimapEntry* sp38;
- GraphicsContext* temp_s1;
- MinimapChest* var_s0;
- s32 temp_ft0;
- s32 temp_ft0_2;
- s32 var_s3;
- s32 var_v1;
+ s32 posX;
+ s32 posZ;
+ s32 i;
s32 var_v1_2;
+ s32 offsetX = 4;
+ s32 offsetZ = 4;
- // temp_t0 = ;
- if (D_801BEBB8.unk54 != NULL) {
- // temp_s1 = arg0->state.gfxCtx;
- OPEN_DISPS(arg0->state.gfxCtx);
-
- // temp_v1 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1 + 8;
- // temp_v1->words.w1 = 0x00000000;
- // temp_v1->words.w0 = 0xE7000000;
+ if (var_s0 == NULL) {
+ return;
+ }
- // temp_v1_2 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_2 + 8;
- // temp_v1_2->words.w1 = 0x00000000;
- // temp_v1_2->words.w0 = 0xE3001001;
+ OPEN_DISPS(play->state.gfxCtx);
- // temp_v1_3 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_3 + 8;
- // temp_v1_3->words.w0 = 0xFA000000;
- // temp_v1_3->words.w1 = (arg0->pauseCtx.alpha & 0xFF) | ~0xFF;
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, play->pauseCtx.alpha);
+ gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
+ gDPPipeSync(POLY_OPA_DISP++);
- // temp_v1_4 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_4 + 8;
- // temp_v1_4->words.w1 = 0x000000FF;
- // temp_v1_4->words.w0 = 0xFB000000;
+ gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapChestIconTex, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2],
+ D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 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);
- // temp_v1_5 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_5 + 8;
- // temp_v1_5->words.w1 = 0x00000000;
- // temp_v1_5->words.w0 = 0xE7000000;
+ for (i = 0; i < D_801BEBB8.numChests; i++) {
+ sp3C = var_s0[i].unk0;
+ sp38 = &D_801BEBB8.minimapList->entry[sp3C];
- gDPPipeSync(POLY_OPA_DISP++);
- gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
- gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha);
- gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
- gDPPipeSync(POLY_OPA_DISP++);
+ switch (play->sceneId) {
+ case SCENE_MITURIN_BS:
+ var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest) & (1 << var_s0[i].unk2);
+ break;
- // temp_v1_6 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_6 + 8;
- // temp_v1_6->words.w1 = (u32) &D_02003F20;
- // temp_v1_6->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xFD000000;
-
- // temp_v1_7 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_7 + 8;
- // var_a0 = 0x7FF;
- // temp_v1_7->words.w1 = 0x07000000;
- // temp_v1_7->words.w0 = ((D_801BEAE0.unk8 & 3) << 0x13) | 0xF5000000;
-
- // temp_v1_8 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_8 + 8;
- // temp_v1_8->words.w1 = 0x00000000;
- // temp_v1_8->words.w0 = 0xE6000000;
-
- // temp_a1 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_a1 + 8;
- // temp_a1->words.w0 = 0xF3000000;
- // temp_v0 = ((u32) (D_801BEAF8 + 0x40) >> D_801BEB08) - 1;
- // if (temp_v0 < 0x7FFU) {
- // var_a0 = temp_v0;
- // }
- // temp_v1_9 = (u32) (D_801BEB18 * 8) >> 3;
- // var_a2 = temp_v1_9;
- // if (temp_v1_9 == 0) {
- // var_a2 = 1;
- // }
- // if (temp_v1_9 == 0) {
- // var_v0 = 1;
- // } else {
- // var_v0 = temp_v1_9;
- // }
- // temp_a1->words.w1 = (((u32) (var_a2 + 0x7FF) / var_v0) & 0xFFF) | 0x07000000U | ((var_a0 & 0xFFF) << 0xC);
-
- // temp_v1_10 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_10 + 8;
- // temp_v1_10->words.w1 = 0x00000000;
- // temp_v1_10->words.w0 = 0xE7000000;
-
- // temp_v1_11 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_11 + 8;
- // temp_v1_11->words.w0 = ((((u32) ((D_801BEB28 * 8) + 7) >> 3) & 0x1FF) << 9) | 0xF5000000 | ((D_801BEAD8 & 3)
- // << 0x13); temp_v1_11->words.w1 = 0x00000000;
-
- // temp_v1_12 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_12 + 8;
- // temp_v1_12->words.w0 = 0xF2000000;
- // temp_v1_12->words.w1 = 0x0001C01C;
-
- // gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, 0x02003F20);
- // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR |
- // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
- // gDPLoadSync(POLY_OPA_DISP++);
- // gDPLoadBlock(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, 0, 0);
- // gDPPipeSync(POLY_OPA_DISP++);
- // gDPSetTile(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR |
- // G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
- // gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, 0x001C, 0x001C);
-
- gDPLoadTextureBlock_TEST(OVERLAY_DISP++, &D_02003F20, G_IM_FMT_RGBA, D_801BEAE0[2], D_801BEAF0[2],
- D_801BEB00[2], D_801BEB10[2], D_801BEB20[2], D_801BEAD0[2], 8, 8, 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);
+ case SCENE_HAKUGIN_BS:
+ var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest) & (1 << var_s0[i].unk2);
+ break;
- var_s3 = 0;
- var_s0 = D_801BEBB8.unk54;
- // if (D_801BEBB8.numChests > 0) {
- for (var_s3 = 0; var_s3 < D_801BEBB8.numChests; var_s3++) {
- sp3C = var_s0[var_s3].unk0;
- sp38 = &D_801BEBB8.minimapList->entry[sp3C];
- switch (arg0->sceneId) {
- case SCENE_MITURIN_BS:
- var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_MITURIN].chest & (1 << var_s0[var_s3].unk2);
- break;
+ case SCENE_SEA_BS:
+ var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_SEA].chest) & (1 << var_s0[i].unk2);
+ break;
- case SCENE_HAKUGIN_BS:
- var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_HAKUGIN].chest & (1 << var_s0[var_s3].unk2);
- break;
+ case SCENE_INISIE_BS:
+ var_v1_2 = ((void)0, gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest) & (1 << var_s0[i].unk2);
+ break;
- case SCENE_SEA_BS:
- var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_SEA].chest & (1 << var_s0[var_s3].unk2);
- break;
+ default:
+ var_v1_2 = Flags_GetTreasure(play, var_s0[i].unk2);
+ break;
+ }
- case SCENE_INISIE_BS:
- var_v1_2 = gSaveContext.cycleSceneFlags[SCENE_INISIE_N].chest & (1 << var_s0[var_s3].unk2);
- break;
+ if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) ||
+ ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < D_801BEBB8.unk42) || (var_v1_2 != 0)) {
+ continue;
+ }
- default:
- var_v1_2 = Flags_GetTreasure(arg0, (s32)var_s0[var_s3].unk2);
- break;
- }
- if ((D_801BEBB8.unk42 < D_801BEBB8.unk3C[sp3C]) ||
- ((D_801BEBB8.unk3C[sp3C] + ((sp38->unk8 >> 2) & 7)) < (s32)D_801BEBB8.unk42) || (var_v1_2 != 0)) {
- continue;
- } else if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[var_s3].unk6)) {
- continue;
- } else {
- temp_ft0 = (s32)(((((f32)var_s0[var_s3].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - (f32)4) +
- (f32)((arg3 / 2) + arg1));
- temp_ft0_2 = (s32)(((((f32)var_s0[var_s3].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - (f32)4) +
- (f32)((arg4 / 2) + arg2));
- // temp_v1_13 = temp_s1->polyOpa.p;
- // temp_s1->polyOpa.p = temp_v1_13 + 8;
- // temp_v1_13->words.w1 = (((temp_ft0 * 4) & 0xFFF) << 0xC) | ((temp_ft0_2 * 4) & 0xFFF);
- // temp_v1_13->words.w0 = ((((temp_ft0 + 8) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_ft0_2 + 8) * 4)
- // & 0xFFF); temp_v1_14 = temp_s1->polyOpa.p; temp_s1->polyOpa.p = temp_v1_14 + 8; temp_v1_14->words.w1
- // = 0; temp_v1_14->words.w0 = 0xE1000000; temp_v1_15 = temp_s1->polyOpa.p; temp_s1->polyOpa.p =
- // temp_v1_15 + 8; temp_v1_15->words.w1 = 0x04000400; temp_v1_15->words.w0 = 0xF1000000;
-
- gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2,
- (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
- }
+ if (!func_80106BEC((s32)D_801BEBB8.unk42, (f32)var_s0[i].unk6)) {
+ continue;
}
- CLOSE_DISPS(arg0->state.gfxCtx);
+ posX = (s32)((((var_s0[i].unk4 - (f32)D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1));
+ posZ = (s32)((((var_s0[i].unk8 - (f32)D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2));
+
+ gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2, G_TX_RENDERTILE, 0,
+ 0, 1 << 10, 1 << 10);
}
+
+ CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-void func_80107B78(PlayState*, s32, s32, s32, s32, f32);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80107B78.s")
-#endif
void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) {
PauseContext* pauseCtx = &play->pauseCtx;
@@ -1546,49 +1412,49 @@ void func_80108124(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32
}
}
-#ifdef NON_MATCHING
-// https://decomp.me/scratch/nHYgx
-void func_80108558(PlayState* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) {
- TransitionActorList* sp30;
- // TransitionActorEntry* var_s0;
- s32 temp_ft0;
- s32 temp_ft0_2;
- s32 var_s2;
+void func_80108558(PlayState* play, s32 arg1, s32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6) {
+ s32 i;
+ TransitionActorList* sp30 = &D_801BEC24;
+ s32 offsetX = 4;
+ s32 offsetZ = 4;
+ s32 posX;
+ s32 posZ;
- sp30 = &D_801BEC24;
- OPEN_DISPS(arg0->state.gfxCtx);
+ OPEN_DISPS(play->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_AA_DEC_LINE, G_RM_NOOP2);
- gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, arg0->pauseCtx.alpha);
+ gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, play->pauseCtx.alpha);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gDPPipeSync(POLY_OPA_DISP++);
+
if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, arg6)) {
- gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, &D_02002460, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1], D_801BEB00[1],
- D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 8, 8, 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);
- for (var_s2 = 0; var_s2 < sp30->count; var_s2++) {
- if ((func_80105328((s32)D_801F53B0[var_s2].params) != 0) &&
- func_80106BEC((s32)D_801BEBB8.unk42, (f32)D_801F53B0[var_s2].pos.y)) {
- if (ABS_ALT(D_801F53B0[var_s2].id) != ACTOR_EN_HOLL) {
- temp_ft0 =
- ((((f32)D_801F53B0[var_s2].pos.x - D_801BEBB8.sceneMidX) * arg5) - 4) + ((arg3 / 2) + arg1);
- temp_ft0_2 =
- ((((f32)D_801F53B0[var_s2].pos.z - D_801BEBB8.sceneMidZ) * arg5) - 4) + ((arg4 / 2) + arg2);
- gSPTextureRectangle(POLY_OPA_DISP++, temp_ft0 << 2, temp_ft0_2 << 2, (temp_ft0 + 8) << 2,
- (temp_ft0_2 + 8) << 2, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
- }
+ gDPLoadTextureBlock_TEST(POLY_OPA_DISP++, gMapBossIconTex, G_IM_FMT_IA, D_801BEAE0[1], D_801BEAF0[1],
+ D_801BEB00[1], D_801BEB10[1], D_801BEB20[1], D_801BEAD0[1], 8, 8, 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);
+
+ for (i = 0; i < sp30->count; i++) {
+ if (!func_80105328(D_801F53B0[i].params)) {
+ continue;
+ }
+ if (!func_80106BEC(D_801BEBB8.unk42, D_801F53B0[i].pos.y)) {
+ continue;
+ }
+ if (ABS_ALT(D_801F53B0[i].id) == ACTOR_EN_HOLL) {
+ continue;
}
+
+ posX = ((((f32)D_801F53B0[i].pos.x - D_801BEBB8.sceneMidX) * arg5) - offsetX) + ((arg3 / 2) + arg1);
+ posZ = ((((f32)D_801F53B0[i].pos.z - D_801BEBB8.sceneMidZ) * arg5) - offsetZ) + ((arg4 / 2) + arg2);
+ gSPTextureRectangle(POLY_OPA_DISP++, posX << 2, posZ << 2, (posX + 8) << 2, (posZ + 8) << 2,
+ G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
- CLOSE_DISPS(arg0->state.gfxCtx);
+ CLOSE_DISPS(play->state.gfxCtx);
}
-#else
-void func_80108558(PlayState*, s32, s32, s32, s32, f32, s32);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_80108558.s")
-#endif
TexturePtr func_80108A10(s32 arg0) {
if ((arg0 >= 0) && (arg0 < 8)) {
@@ -1663,7 +1529,7 @@ void func_80108AF8(PlayState* play) {
if ((gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(func_80106D08(play->sceneId))]
.unk_14 &
gBitFlags[4 - var_s1]) ||
- CHECK_DUNGEON_ITEM2(DUNGEON_MAP, spB4)) {
+ CHECK_DUNGEON_ITEM_ALT(DUNGEON_MAP, spB4)) {
gDPLoadTextureBlock(POLY_OPA_DISP++, func_80108A10(D_801BEBB8.unk44 + var_s1), G_IM_FMT_IA, G_IM_SIZ_8b,
24, 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);
@@ -1731,72 +1597,76 @@ s32 func_80109124(s16 arg0) {
return D_801BEBB8.unk40 - 1;
}
-#ifdef NON_MATCHING
void func_801091F0(PlayState* play) {
+ MinimapEntry* entry;
+ f32 temp;
s32 var_t2;
- u16 temp_a0;
- s16 sp44;
- s32 sp40;
- s32 sp3C;
s32 var_v0;
- s32 temp_v0_2;
+ s32 sp44 = 0;
+ s32 sp40 = 0;
+ s32 sp3C = 0;
- sp44 = 0;
- sp40 = 0;
- sp3C = 0;
- if (!func_80108A64(play)) {
- if (Map_IsInBossArea(play)) {
- switch (play->sceneId) {
- case SCENE_MITURIN_BS:
- sp44 = 0;
- break;
+ if (func_80108A64(play)) {
+ return;
+ }
- case SCENE_HAKUGIN_BS:
- sp44 = 1;
- break;
+ if (Map_IsInBossArea(play)) {
+ switch (play->sceneId) {
+ case SCENE_MITURIN_BS:
+ sp44 = 0;
+ break;
- case SCENE_SEA_BS:
- sp44 = 2;
- break;
+ case SCENE_HAKUGIN_BS:
+ sp44 = 1;
+ break;
- case SCENE_INISIE_BS:
- sp44 = 3;
- break;
+ case SCENE_SEA_BS:
+ sp44 = 2;
+ break;
- default:
- break;
- }
- } else {
- sp44 = gSaveContext.mapIndex;
+ case SCENE_INISIE_BS:
+ sp44 = 3;
+ break;
+
+ default:
+ break;
}
- temp_a0 = D_801BEBB8.minimapList->entry->mapId;
- if ((temp_a0 != 0xFFFF) && (temp_a0 < 0x162)) {
- temp_v0_2 = MapData_GetMapCompactId(temp_a0);
- if (temp_v0_2 != -1) {
- var_t2 = MapData_CPID_GetMapScale(temp_v0_2);
- if (var_t2 == 0) {
- var_t2 = 0x50;
- }
- for (var_v0 = 0; var_v0 < 2; var_v0++) {
- if (play->sceneId == D_801BED24[var_v0].unk0) {
- sp40 = D_801BED24[var_v0].unk4;
- sp3C = D_801BED24[var_v0].unk8;
- }
- }
+ } else {
+ sp44 = gSaveContext.mapIndex;
+ }
- func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44);
- func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44);
- func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2, sp44);
- if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) {
- func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, 1.0f / var_t2);
- }
- }
+ entry = D_801BEBB8.minimapList->entry;
+ if ((entry->mapId == 0xFFFF) || (entry->mapId >= 0x162)) {
+ return;
+ }
+
+ var_v0 = MapData_GetMapCompactId(entry->mapId);
+ if (var_v0 == -1) {
+ return;
+ }
+
+ var_t2 = MapData_CPID_GetMapScale(var_v0);
+ if (var_t2 == 0) {
+ var_t2 = 0x50;
+ }
+
+ for (var_v0 = 0; var_v0 < 2; var_v0++) {
+ if (play->sceneId == D_801BED24[var_v0].unk0) {
+ sp40 = D_801BED24[var_v0].unk4;
+ sp3C = D_801BED24[var_v0].unk8;
}
}
+
+ temp = 1.0f / var_t2;
+
+ func_80106D5C(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44);
+ func_80108124(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44);
+ func_80108558(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp, sp44);
+
+ if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, sp44)) {
+ func_80107B78(play, sp40 + 0x90, sp3C + 0x55, 0x78, 0x64, temp);
+ }
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_disp/func_801091F0.s")
-#endif
void func_80109428(PlayState* play) {
D_801BEBB8.unk4C++;