summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authormzxrules <mzxrules@gmail.com>2022-08-03 12:58:19 -0400
committermzxrules <mzxrules@gmail.com>2022-08-03 12:58:19 -0400
commite5c6aac0067bef05f00a28fa1c2ff0334cea5d06 (patch)
treee3a5e64b187119d07153298ad9c27f56cbbe6f50 /src/code
parent723c82ce224372654e2e69d2edb071014a94298e (diff)
parent4693978015a18165f96cbe57f8c4f7058c38c451 (diff)
Merge remote-tracking branch 'upstream/master' into z_map_
Diffstat (limited to 'src/code')
-rw-r--r--src/code/PreRender.c9
-rw-r--r--src/code/code_8012EC80.c12
-rw-r--r--src/code/flg_set.c3
-rw-r--r--src/code/graph.c2
-rw-r--r--src/code/z_actor.c2
-rw-r--r--src/code/z_bgcheck.c147
-rw-r--r--src/code/z_camera.c96
-rw-r--r--src/code/z_common_data.c2
-rw-r--r--src/code/z_demo.c27
-rw-r--r--src/code/z_draw.c842
-rw-r--r--src/code/z_en_item00.c186
-rw-r--r--src/code/z_fireobj.c2
-rw-r--r--src/code/z_game_dlftbls.c2
-rw-r--r--src/code/z_kaleido_scope_call.c5
-rw-r--r--src/code/z_kaleido_setup.c23
-rw-r--r--src/code/z_lifemeter.c7
-rw-r--r--src/code/z_map_exp.c3
-rw-r--r--src/code/z_message.c5
-rw-r--r--src/code/z_message_nes.c3
-rw-r--r--src/code/z_parameter.c30
-rw-r--r--src/code/z_play.c12
-rw-r--r--src/code/z_room.c9
-rw-r--r--src/code/z_scene.c41
-rw-r--r--src/code/z_sram_NES.c79
24 files changed, 1237 insertions, 312 deletions
diff --git a/src/code/PreRender.c b/src/code/PreRender.c
index 0afb1df68..46fd8ee6b 100644
--- a/src/code/PreRender.c
+++ b/src/code/PreRender.c
@@ -191,8 +191,6 @@ void func_80170774(PreRender* this, Gfx** gfxp) {
func_8016FF70(this, gfxp, this->zbufSave, this->zbuf);
}
-#ifdef NON_MATCHING
-// just regalloc
void func_80170798(PreRender* this, Gfx** gfxp) {
Gfx* gfx;
s32 y;
@@ -235,6 +233,10 @@ void func_80170798(PreRender* this, Gfx** gfxp) {
gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height,
uls, ult, lrs, lrt, 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);
+ //! FAKE
+ if (1) {}
+ // The two if (1) {}'s above can be removed with do {} while(0) around macros
+ if (1) {}
if (1) {}
gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5,
ult << 5, 1 << 10, 1 << 10);
@@ -247,9 +249,6 @@ void func_80170798(PreRender* this, Gfx** gfxp) {
*gfxp = gfx;
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/PreRender/func_80170798.s")
-#endif
void func_80170AE0(PreRender* this, Gfx** gfxp, s32 alpha) {
func_8016FF90(this, gfxp, this->fbufSave, this->fbuf, 255, 255, 255, alpha);
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index 07cb436cf..5649ae80c 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -133,7 +133,7 @@ void* gItemIcons[] = {
0x08021000, // ITEM_ZORA_EGG
0x08022000, // ITEM_GOLD_DUST
0x08023000, // ITEM_MUSHROOM
- 0x08024000, // ITEM_SEA_HORSE
+ 0x08024000, // ITEM_SEAHORSE
0x08025000, // ITEM_CHATEAU
0x08026000, // ITEM_HYLIAN_LOACH
0x08027000, // ITEM_OBABA_DRINK
@@ -145,7 +145,7 @@ void* gItemIcons[] = {
0x0802D000, // ITEM_ROOM_KEY
0x0802E000, // ITEM_LETTER_MAMA
0x0802F000, // ITEM_LETTER_TO_KAFEI
- 0x08030000, // ITEM_PENDANT_MEMORIES
+ 0x08030000, // ITEM_PENDANT_OF_MEMORIES
0x08031000, // ITEM_TINGLE_MAP
0x08032000, // ITEM_MASK_DEKU
0x08033000, // ITEM_MASK_GORON
@@ -268,7 +268,7 @@ u8 gItemSlots[] = {
SLOT_BOTTLE_1, // ITEM_ZORA_EGG
SLOT_BOTTLE_1, // ITEM_GOLD_DUST
SLOT_BOTTLE_1, // ITEM_MUSHROOM
- SLOT_BOTTLE_1, // ITEM_SEA_HORSE
+ SLOT_BOTTLE_1, // ITEM_SEAHORSE
SLOT_BOTTLE_1, // ITEM_CHATEAU
SLOT_BOTTLE_1, // ITEM_HYLIAN_LOACH
SLOT_BOTTLE_1, // ITEM_OBABA_DRINK
@@ -280,7 +280,7 @@ u8 gItemSlots[] = {
SLOT_TRADE_KEY_MAMA, // ITEM_ROOM_KEY
SLOT_TRADE_KEY_MAMA, // ITEM_LETTER_MAMA
SLOT_TRADE_COUPLE, // ITEM_LETTER_TO_KAFEI
- SLOT_TRADE_COUPLE, // ITEM_PENDANT_MEMORIES
+ SLOT_TRADE_COUPLE, // ITEM_PENDANT_OF_MEMORIES
SLOT_TRADE_COUPLE, // ITEM_TINGLE_MAP
SLOT_MASK_DEKU, // ITEM_MASK_DEKU
SLOT_MASK_GORON, // ITEM_MASK_GORON
@@ -348,7 +348,7 @@ s16 gItemPrices[] = {
20, // ITEM_ZORA_EGG
200, // ITEM_GOLD_DUST
5, // ITEM_MUSHROOM
- 0, // ITEM_SEA_HORSE
+ 0, // ITEM_SEAHORSE
200, // ITEM_CHATEAU
20, // ITEM_HYLIAN_LOACH
0, // ITEM_OBABA_DRINK
@@ -360,7 +360,7 @@ s16 gItemPrices[] = {
0, // ITEM_ROOM_KEY
0, // ITEM_LETTER_MAMA
0, // ITEM_LETTER_KAFEI
- 0, // ITEM_PENDANT_MEMORIES
+ 0, // ITEM_PENDANT_OF_MEMORIES
0, // ITEM_TINGLE_MAP
};
diff --git a/src/code/flg_set.c b/src/code/flg_set.c
index 20818c06e..0bc978160 100644
--- a/src/code/flg_set.c
+++ b/src/code/flg_set.c
@@ -10,6 +10,7 @@
* Hold Start and press B: clear all weekEventReg and eventInf flags
*/
#include "global.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
static FlagSetEntry sFlagEntries[] = {
{ &gSaveContext.save.weekEventReg[0], "week_event_reg[0]" },
@@ -255,7 +256,7 @@ void FlagSet_Update(GameState* gameState) {
// Pressing B will exit
} else if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
- play->pauseCtx.debugState = 0;
+ play->pauseCtx.debugEditor = DEBUG_EDITOR_NONE;
}
}
diff --git a/src/code/graph.c b/src/code/graph.c
index 28327c35f..f625cb7b6 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -67,7 +67,7 @@ GameStateOverlay* Graph_GetNextGameState(GameState* gameState) {
if (gameStateInit == (GameStateFunc)TitleSetup_Init) {
return &gGameStateOverlayTable[0];
}
- if (gameStateInit == (GameStateFunc)Select_Init) {
+ if (gameStateInit == (GameStateFunc)MapSelect_Init) {
return &gGameStateOverlayTable[1];
}
if (gameStateInit == (GameStateFunc)Title_Init) {
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index ff3bb411f..d792b276a 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4514,7 +4514,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
currentMatrix = Matrix_GetCurrent();
// Apply sfx along with damage effect
- if ((actor != NULL) && (effectAlpha > 0.05f) && (play->gameOverCtx.state == 0)) {
+ if ((actor != NULL) && (effectAlpha > 0.05f) && (play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
if (type == ACTOR_DRAW_DMGEFF_FIRE) {
Actor_PlaySfxAtPos(actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
} else if (type == ACTOR_DRAW_DMGEFF_BLUE_FIRE) {
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 7aaae22bc..4b7c1d893 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,5 +1,7 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "vt.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#define DYNA_RAYCAST_FLOORS 1
#define DYNA_RAYCAST_WALLS 2
@@ -1191,7 +1193,7 @@ void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32*
/**
* Get positive bias subdivision indices
- * increments indicies if `pos` is within BGCHECK_SUBDIV_OVERLAP units of the postive subdivision boundary
+ * increments indices if `pos` is within BGCHECK_SUBDIV_OVERLAP units of the positive subdivision boundary
* `sx`, `sy`, `sz` returns the subdivision x, y, z indices
*/
void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz) {
@@ -3295,7 +3297,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
if ((result != BGCHECK_Y_MIN) && (dynaActor != NULL) && (dynaRaycast->play != NULL)) {
pauseState = dynaRaycast->play->pauseCtx.state != 0;
if (!pauseState) {
- pauseState = dynaRaycast->play->pauseCtx.debugState != 0;
+ pauseState = dynaRaycast->play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE;
}
if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & 2)) {
curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform;
@@ -3961,8 +3963,8 @@ void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader) {
if (colHeader->surfaceTypeList) {
colHeader->surfaceTypeList = Lib_SegmentedToVirtual(colHeader->surfaceTypeList);
}
- if (colHeader->cameraDataList) {
- colHeader->cameraDataList = Lib_SegmentedToVirtual(colHeader->cameraDataList);
+ if (colHeader->bgCamList) {
+ colHeader->bgCamList = Lib_SegmentedToVirtual(colHeader->bgCamList);
}
if (colHeader->waterBoxes) {
colHeader->waterBoxes = Lib_SegmentedToVirtual(colHeader->waterBoxes);
@@ -4025,128 +4027,142 @@ u32 SurfaceType_GetData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId,
}
/**
- * SurfaceType return CamData Index
+ * SurfaceType get index of bgCam
*/
-u32 SurfaceType_GetCamDataIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) & 0xFF;
}
/**
- * CamData return camera setting
+ * BgCam get setting of bgCam
*/
-u16 func_800C9728(CollisionContext* colCtx, u32 camId, s32 bgId) {
- u16 result;
+u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId) {
+ u16 camSetting;
CollisionHeader* colHeader;
- CamData* camData;
+ BgCamInfo* bgCamList;
colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
if (colHeader == NULL) {
- return 0;
+ return CAM_SET_NONE;
}
- camData = colHeader->cameraDataList;
- result = camData[camId].setting;
- return result;
+
+ bgCamList = colHeader->bgCamList;
+ camSetting = bgCamList[bgCamIndex].setting;
+
+ return camSetting;
}
/**
- * SurfaceType return camera setting
+ * BgCam Get the camera setting of bgCam
*/
-u16 SurfaceType_GetCameraSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
CollisionHeader* colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- CamData* camData;
+ BgCamInfo* bgCamList;
SurfaceType* surfaceTypes;
if (colHeader == NULL) {
- return 0;
+ return CAM_SET_NONE;
}
- camData = colHeader->cameraDataList;
- if (camData == NULL) {
- return 0;
+
+ bgCamList = colHeader->bgCamList;
+ if (bgCamList == NULL) {
+ return CAM_SET_NONE;
}
+
surfaceTypes = colHeader->surfaceTypeList;
if (surfaceTypes == NULL) {
- return 0;
+ return CAM_SET_NONE;
}
- return func_800C9728(colCtx, SurfaceType_GetCamDataIndex(colCtx, poly, bgId), bgId);
+
+ return BgCheck_GetBgCamSettingImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId);
}
/**
- * CamData get number of camera data blocks
+ * BgCam Get the total count of Vec3s data from bgCamFuncData
*/
-u16 func_800C97F8(CollisionContext* colCtx, u32 camId, s32 bgId) {
+u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId) {
CollisionHeader* colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- CamData* camData;
+ BgCamInfo* bgCamList;
if (colHeader == NULL) {
return 0;
}
- camData = colHeader->cameraDataList;
- if (camData == NULL) {
+ bgCamList = colHeader->bgCamList;
+ if (bgCamList == NULL) {
return 0;
}
- return camData[camId].numData;
+
+ return bgCamList[bgCamIndex].count;
}
/**
- * SurfaceType get number of camera data blocks
+ * BgCam Get the total count of Vec3s data from bgCamFuncData
*/
-u16 func_800C9844(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
CollisionHeader* colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- CamData* camData;
+ BgCamInfo* bgCamList;
SurfaceType* surfaceTypes;
if (colHeader == NULL) {
return 0;
}
- camData = colHeader->cameraDataList;
- if (camData == NULL) {
+
+ bgCamList = colHeader->bgCamList;
+ if (bgCamList == NULL) {
return 0;
}
+
surfaceTypes = colHeader->surfaceTypeList;
if (surfaceTypes == NULL) {
return 0;
}
- return func_800C97F8(colCtx, SurfaceType_GetCamDataIndex(colCtx, poly, bgId), bgId);
+
+ return BgCheck_GetBgCamCountImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId);
}
/**
- * CamData get data
+ * BgCam Get Vec3s data from bgCamFuncData
*/
-Vec3s* func_800C98CC(CollisionContext* colCtx, s32 camId, s32 bgId) {
+Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId) {
CollisionHeader* colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- CamData* cameraDataList;
+ BgCamInfo* bgCamList;
if (colHeader == NULL) {
return NULL;
}
- cameraDataList = colHeader->cameraDataList;
- if (cameraDataList == NULL) {
+
+ bgCamList = colHeader->bgCamList;
+ if (bgCamList == NULL) {
return NULL;
}
- return Lib_SegmentedToVirtual(cameraDataList[camId].data);
+
+ return Lib_SegmentedToVirtual(bgCamList[bgCamIndex].bgCamFuncData);
}
/**
- * SurfaceType Get data
+ * BgCam Get Vec3s data from bgCamFuncData
*/
-Vec3s* SurfaceType_GetCamPosData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
CollisionHeader* colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
- CamData* camData;
+ BgCamInfo* bgCamList;
SurfaceType* surfaceTypes;
if (colHeader == NULL) {
return NULL;
}
- camData = colHeader->cameraDataList;
- if (camData == NULL) {
+
+ bgCamList = colHeader->bgCamList;
+ if (bgCamList == NULL) {
return NULL;
}
+
surfaceTypes = colHeader->surfaceTypeList;
if (surfaceTypes == NULL) {
return NULL;
}
- return func_800C98CC(colCtx, SurfaceType_GetCamDataIndex(colCtx, poly, bgId), bgId);
+
+ return BgCheck_GetBgCamFuncDataImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId);
}
/**
@@ -4540,41 +4556,46 @@ f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId) {
}
/**
- * WaterBox get CamData index
+ * WaterBox get BgCam index
*/
-u32 WaterBox_GetCamDataIndex(CollisionContext* colCtx, WaterBox* waterBox) {
+u32 WaterBox_GetBgCamIndex(CollisionContext* colCtx, WaterBox* waterBox) {
u32 prop = waterBox->properties >> 0;
return prop & 0xFF;
}
/**
- * WaterBox get CamData camera setting
+ * WaterBox get BgCam setting
*/
-u16 WaterBox_GetCameraSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId) {
+u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId) {
s32 pad[2];
- u16 result = 0;
+ u16 camSetting = CAM_SET_NONE;
CollisionHeader* colHeader;
- CamData* camData;
- s32 camId;
+ BgCamInfo* bgCamList;
+ s32 bgCamIndex;
colHeader = BgCheck_GetCollisionHeader(colCtx, bgId);
if (colHeader == NULL) {
- return result;
+ return camSetting;
}
- camId = WaterBox_GetCamDataIndex(colCtx, waterBox);
- camData = colHeader->cameraDataList;
- if (camData == NULL) {
- return result;
+ bgCamIndex = WaterBox_GetBgCamIndex(colCtx, waterBox);
+ bgCamList = colHeader->bgCamList;
+
+ if (bgCamList == NULL) {
+ return camSetting;
}
- result = camData[camId].setting;
- return result;
+ camSetting = bgCamList[bgCamIndex].setting;
+
+ return camSetting;
}
-void func_800CA6B8(CollisionContext* colCtx, WaterBox* waterBox) {
- WaterBox_GetCameraSetting(colCtx, waterBox, BGCHECK_SCENE);
+/**
+ * WaterBox get scene BgCam setting
+ */
+void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox) {
+ WaterBox_GetBgCamSetting(colCtx, waterBox, BGCHECK_SCENE);
}
/**
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index aaf68c759..63a06b512 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -38,7 +38,22 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CB854.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CB880.s")
+s32 Camera_IsSwimming(Camera* camera) {
+ Actor* focalActor = camera->focalActor;
+
+ if (focalActor == &GET_PLAYER(camera->play)->actor) {
+ if (((Player*)focalActor)->stateFlags3 & PLAYER_STATE3_8000) {
+ // Swimming as Zora
+ return 999;
+ } else {
+ // Swimming as Human or Fierce Deity
+ return ((Player*)focalActor)->stateFlags1 & PLAYER_STATE1_8000000;
+ }
+ } else {
+ // Camera not focused on player
+ return 0;
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CB8C8.s")
@@ -84,13 +99,78 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC5C8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC740.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC7A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC804.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC874.s")
+#define CAM_DATA_IS_BG (1 << 12) // if not set, then cam data is for actor cutscenes
+
+/**
+ * Returns the CameraSettingType of the camera from either the bgCam or the actorCsCam at index `camDataId`
+ */
+s16 Camera_GetBgCamOrActorCsCamSetting(Camera* camera, u32 camDataId) {
+ if (camDataId & CAM_DATA_IS_BG) {
+ return BgCheck_GetBgCamSettingImpl(&camera->play->colCtx, camDataId & ~CAM_DATA_IS_BG, BGCHECK_SCENE);
+ } else {
+ return Play_GetActorCsCamSetting(camera->play, camDataId);
+ }
+}
+
+/**
+ * Returns either the bgCam data or the actorCsCam data at index `camDataId`
+ */
+Vec3s* Camera_GetBgCamOrActorCsCamFuncData(Camera* camera, u32 camDataId) {
+ if (camDataId & CAM_DATA_IS_BG) {
+ return BgCheck_GetBgCamFuncDataImpl(&camera->play->colCtx, camDataId & ~CAM_DATA_IS_BG, BGCHECK_SCENE);
+ } else {
+ return Play_GetActorCsCamFuncData(camera->play, camDataId);
+ }
+}
+
+/**
+ * Gets the bgCam index for the poly `poly`, returns -1 if
+ * there is no camera data for that poly.
+ */
+s32 Camera_GetBgCamIndex(Camera* camera, s32* bgId, CollisionPoly* poly) {
+ s32 bgCamIndex = SurfaceType_GetBgCamIndex(&camera->play->colCtx, poly, *bgId);
+ s32 ret;
+
+ if (BgCheck_GetBgCamSettingImpl(&camera->play->colCtx, bgCamIndex, *bgId) == CAM_SET_NONE) {
+ ret = -1;
+ } else {
+ ret = bgCamIndex;
+ }
+
+ return ret;
+}
+
+/**
+ * Gets the Camera setting for the water box the player is in.
+ * Returns -1 if the player is not in a water box, or does not have a swimming state.
+ * Returns -2 if there is no bgCam index for the water box.
+ * Returns the camera setting otherwise.
+ */
+s32 Camera_GetWaterBoxBgCamSetting(Camera* camera, f32* waterY) {
+ PosRot playerPosShape;
+ WaterBox* waterBox;
+ s32 camSetting;
+ s32 bgId;
+
+ Actor_GetWorldPosShapeRot(&playerPosShape, camera->focalActor);
+ *waterY = playerPosShape.pos.y;
+
+ if (!WaterBox_GetSurfaceImpl(camera->play, &camera->play->colCtx, playerPosShape.pos.x, playerPosShape.pos.z,
+ waterY, &waterBox, &bgId)) {
+ // player's position is not in a waterbox
+ *waterY = playerPosShape.pos.y;
+ return -1;
+ }
+
+ if (!Camera_IsSwimming(camera)) {
+ return -1;
+ }
+
+ camSetting = WaterBox_GetBgCamSetting(&camera->play->colCtx, waterBox, bgId);
+
+ // -2: no bgCam index
+ return (camSetting == CAM_SET_NONE) ? -2 : camSetting;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800CC938.s")
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 7c8b7cf99..955f54870 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -13,7 +13,7 @@ void SaveContext_Init(void) {
gSaveContext.cutsceneTrigger = 0;
gSaveContext.unk_3F4D = 0;
gSaveContext.nextDayTime = 0xFFFF;
- gSaveContext.environmentTime = 0;
+ gSaveContext.skyboxTime = 0;
gSaveContext.dogIsLost = true;
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
gSaveContext.unk_3F26 = 50;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 1827acc85..383f8928a 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -554,7 +554,7 @@ void Cutscene_Command_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdDayT
nextTime = hourAsMinutes + minutes;
gSaveContext.save.time = nextTime;
- gSaveContext.environmentTime = nextTime;
+ gSaveContext.skyboxTime = nextTime;
}
}
@@ -1494,11 +1494,9 @@ void func_800EDA84(PlayState* play, CutsceneContext* csCtx) {
}
}
-#ifdef NON_MATCHING
// HandleFlags?
-// regalloc
void func_800EDBE0(PlayState* play) {
- CutsceneEntry* temp_a3;
+ s32 pad;
s16 sp2A;
SceneTableEntry* sp24;
s32 temp_v0_3;
@@ -1508,15 +1506,16 @@ void func_800EDBE0(PlayState* play) {
if (sp2A != -1) {
temp_v0_3 = func_800F2138(sp2A);
if (temp_v0_3 != -1) {
- temp_a3 = ((void)0, play->csCtx.sceneCsList);
- if ((temp_a3[temp_v0_3].unk7 != 0xFF) && (gSaveContext.respawnFlag == 0)) {
- if (temp_a3[temp_v0_3].unk7 == 0xFE) {
+ if ((play->csCtx.sceneCsList[temp_v0_3].unk7 != 0xFF) && (gSaveContext.respawnFlag == 0)) {
+ if (play->csCtx.sceneCsList[temp_v0_3].unk7 == 0xFE) {
ActorCutscene_Start(sp2A, NULL);
gSaveContext.showTitleCard = false;
- } else if (!((1 << (temp_a3[temp_v0_3].unk7 % 8)) &
- gSaveContext.save.weekEventReg[temp_a3[temp_v0_3].unk7 / 8])) {
- gSaveContext.save.weekEventReg[(temp_a3[temp_v0_3].unk7 / 8)] |=
- 1 << (temp_a3[temp_v0_3].unk7 % 8);
+ } else if (!(((void)0,
+ gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) &
+ (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) {
+ gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] =
+ ((void)0, gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) |
+ (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8));
ActorCutscene_Start(sp2A, NULL);
gSaveContext.showTitleCard = false;
}
@@ -1530,7 +1529,8 @@ void func_800EDBE0(PlayState* play) {
if ((gSaveContext.respawnFlag == 0) || (gSaveContext.respawnFlag == -2)) {
sp24 = play->loadedScene;
if ((sp24->titleTextId != 0) && gSaveContext.showTitleCard) {
- if ((Entrance_GetTransitionFlags(gSaveContext.sceneSetupIndex + gSaveContext.save.entranceIndex) &
+ if ((Entrance_GetTransitionFlags(((void)0, gSaveContext.save.entranceIndex) +
+ ((void)0, gSaveContext.sceneSetupIndex)) &
0x4000) != 0) {
func_80151A68(play, sp24->titleTextId);
}
@@ -1539,9 +1539,6 @@ void func_800EDBE0(PlayState* play) {
gSaveContext.showTitleCard = true;
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/func_800EDBE0.s")
-#endif
void func_800EDDB0(PlayState* play) {
}
diff --git a/src/code/z_draw.c b/src/code/z_draw.c
index b31f796b7..4167b4cea 100644
--- a/src/code/z_draw.c
+++ b/src/code/z_draw.c
@@ -1,49 +1,843 @@
+/**
+ * @file z_draw.c
+ * @brief Draw get-item models
+ */
#include "global.h"
+#include "assets/objects/object_gi_arrow/object_gi_arrow.h"
+#include "assets/objects/object_gi_arrowcase/object_gi_arrowcase.h"
+#include "assets/objects/object_gi_bean/object_gi_bean.h"
+#include "assets/objects/object_gi_bigbomb/object_gi_bigbomb.h"
+#include "assets/objects/object_gi_bomb_1/object_gi_bomb_1.h"
+#include "assets/objects/object_gi_bomb_2/object_gi_bomb_2.h"
+#include "assets/objects/object_gi_bombpouch/object_gi_bombpouch.h"
+#include "assets/objects/object_gi_bosskey/object_gi_bosskey.h"
+#include "assets/objects/object_gi_bottle_04/object_gi_bottle_04.h"
+#include "assets/objects/object_gi_bottle_15/object_gi_bottle_15.h"
+#include "assets/objects/object_gi_bottle_16/object_gi_bottle_16.h"
+#include "assets/objects/object_gi_bottle_21/object_gi_bottle_21.h"
+#include "assets/objects/object_gi_bottle_22/object_gi_bottle_22.h"
+#include "assets/objects/object_gi_bottle_red/object_gi_bottle_red.h"
+#include "assets/objects/object_gi_bottle/object_gi_bottle.h"
+#include "assets/objects/object_gi_bow/object_gi_bow.h"
+#include "assets/objects/object_gi_camera/object_gi_camera.h"
+#include "assets/objects/object_gi_compass/object_gi_compass.h"
+#include "assets/objects/object_gi_fieldmap/object_gi_fieldmap.h"
+#include "assets/objects/object_gi_fish/object_gi_fish.h"
+#include "assets/objects/object_gi_ghost/object_gi_ghost.h"
+#include "assets/objects/object_gi_glasses/object_gi_glasses.h"
+#include "assets/objects/object_gi_gold_dust/object_gi_gold_dust.h"
+#include "assets/objects/object_gi_golonmask/object_gi_golonmask.h"
+#include "assets/objects/object_gi_heart/object_gi_heart.h"
+#include "assets/objects/object_gi_hearts/object_gi_hearts.h"
+#include "assets/objects/object_gi_hookshot/object_gi_hookshot.h"
+#include "assets/objects/object_gi_insect/object_gi_insect.h"
+#include "assets/objects/object_gi_key/object_gi_key.h"
+#include "assets/objects/object_gi_ki_tan_mask/object_gi_ki_tan_mask.h"
+#include "assets/objects/object_gi_liquid/object_gi_liquid.h"
+#include "assets/objects/object_gi_loach/object_gi_loach.h"
+#include "assets/objects/object_gi_longsword/object_gi_longsword.h"
+#include "assets/objects/object_gi_m_arrow/object_gi_m_arrow.h"
+#include "assets/objects/object_gi_magicmushroom/object_gi_magicmushroom.h"
+#include "assets/objects/object_gi_magicpot/object_gi_magicpot.h"
+#include "assets/objects/object_gi_map/object_gi_map.h"
+#include "assets/objects/object_gi_mask03/object_gi_mask03.h"
+#include "assets/objects/object_gi_mask05/object_gi_mask05.h"
+#include "assets/objects/object_gi_mask06/object_gi_mask06.h"
+#include "assets/objects/object_gi_mask09/object_gi_mask09.h"
+#include "assets/objects/object_gi_mask10/object_gi_mask10.h"
+#include "assets/objects/object_gi_mask11/object_gi_mask11.h"
+#include "assets/objects/object_gi_mask12/object_gi_mask12.h"
+#include "assets/objects/object_gi_mask13/object_gi_mask13.h"
+#include "assets/objects/object_gi_mask14/object_gi_mask14.h"
+#include "assets/objects/object_gi_mask15/object_gi_mask15.h"
+#include "assets/objects/object_gi_mask16/object_gi_mask16.h"
+#include "assets/objects/object_gi_mask17/object_gi_mask17.h"
+#include "assets/objects/object_gi_mask18/object_gi_mask18.h"
+#include "assets/objects/object_gi_mask20/object_gi_mask20.h"
+#include "assets/objects/object_gi_mask21/object_gi_mask21.h"
+#include "assets/objects/object_gi_mask22/object_gi_mask22.h"
+#include "assets/objects/object_gi_mask23/object_gi_mask23.h"
+#include "assets/objects/object_gi_melody/object_gi_melody.h"
+#include "assets/objects/object_gi_milk/object_gi_milk.h"
+#include "assets/objects/object_gi_mssa/object_gi_mssa.h"
+#include "assets/objects/object_gi_nuts/object_gi_nuts.h"
+#include "assets/objects/object_gi_nutsmask/object_gi_nutsmask.h"
+#include "assets/objects/object_gi_ocarina/object_gi_ocarina.h"
+#include "assets/objects/object_gi_purse/object_gi_purse.h"
+#include "assets/objects/object_gi_rabit_mask/object_gi_rabit_mask.h"
+#include "assets/objects/object_gi_reserve_b_00/object_gi_reserve_b_00.h"
+#include "assets/objects/object_gi_reserve_b_01/object_gi_reserve_b_01.h"
+#include "assets/objects/object_gi_reserve_c_00/object_gi_reserve_c_00.h"
+#include "assets/objects/object_gi_reserve_c_01/object_gi_reserve_c_01.h"
+#include "assets/objects/object_gi_reserve00/object_gi_reserve00.h"
+#include "assets/objects/object_gi_reserve01/object_gi_reserve01.h"
+#include "assets/objects/object_gi_rupy/object_gi_rupy.h"
+#include "assets/objects/object_gi_schedule/object_gi_schedule.h"
+#include "assets/objects/object_gi_seahorse/object_gi_seahorse.h"
+#include "assets/objects/object_gi_shield_2/object_gi_shield_2.h"
+#include "assets/objects/object_gi_shield_3/object_gi_shield_3.h"
+#include "assets/objects/object_gi_soldout/object_gi_soldout.h"
+#include "assets/objects/object_gi_soul/object_gi_soul.h"
+#include "assets/objects/object_gi_stick/object_gi_stick.h"
+#include "assets/objects/object_gi_stonemask/object_gi_stonemask.h"
+#include "assets/objects/object_gi_sutaru/object_gi_sutaru.h"
+#include "assets/objects/object_gi_sword_1/object_gi_sword_1.h"
+#include "assets/objects/object_gi_sword_2/object_gi_sword_2.h"
+#include "assets/objects/object_gi_sword_3/object_gi_sword_3.h"
+#include "assets/objects/object_gi_sword_4/object_gi_sword_4.h"
+#include "assets/objects/object_gi_truth_mask/object_gi_truth_mask.h"
+#include "assets/objects/object_gi_zoramask/object_gi_zoramask.h"
+#include "assets/objects/object_bsmask/object_bsmask.h"
+#include "assets/objects/object_st/object_st.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/GetItem_Draw.s")
+void GetItem_DrawBombchu(PlayState* play, s16 drawId);
+void GetItem_DrawPoes(PlayState* play, s16 drawId);
+void GetItem_DrawFairyBottle(PlayState* play, s16 drawId);
+void GetItem_DrawSkullToken(PlayState* play, s16 drawId);
+void GetItem_DrawCompass(PlayState* play, s16 drawId);
+void GetItem_DrawPotion(PlayState* play, s16 drawId);
+void GetItem_DrawGoronSword(PlayState* play, s16 drawId);
+void GetItem_DrawDekuNuts(PlayState* play, s16 drawId);
+void GetItem_DrawRecoveryHeart(PlayState* play, s16 drawId);
+void GetItem_DrawFish(PlayState* play, s16 drawId);
+void GetItem_DrawOpa0(PlayState* play, s16 drawId);
+void GetItem_DrawOpa0Xlu1(PlayState* play, s16 drawId);
+void GetItem_DrawOpa01(PlayState* play, s16 drawId);
+void GetItem_DrawXlu01(PlayState* play, s16 drawId);
+void GetItem_DrawSeahorse(PlayState* play, s16 drawId);
+void GetItem_DrawFairyContainer(PlayState* play, s16 drawId);
+void GetItem_DrawMoonsTear(PlayState* play, s16 drawId);
+void GetItem_DrawMagicArrow(PlayState* play, s16 drawId);
+void GetItem_DrawUpgrades(PlayState* play, s16 drawId);
+void GetItem_DrawRupee(PlayState* play, s16 drawId);
+void GetItem_DrawSmallRupee(PlayState* play, s16 drawId);
+void GetItem_DrawWallet(PlayState* play, s16 drawId);
+void GetItem_DrawRemains(PlayState* play, s16 drawId);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EE364.s")
+typedef struct {
+ /* 0x00 */ void (*drawFunc)(PlayState*, s16);
+ /* 0x04 */ void* drawResources[8]; // Either display lists (Gfx*) or matrices (Mtx*)
+} DrawItemTableEntry; // size = 0x24
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EE400.s")
+static DrawItemTableEntry sDrawItemTable[] = {
+ // GID_BOTTLE, OBJECT_GI_BOTTLE
+ { GetItem_DrawOpa0Xlu1, { gGiEmptyBottleCorkDL, gGiEmptyBottleGlassDL } },
+ // GID_KEY_SMALL, OBJECT_GI_KEY
+ { GetItem_DrawOpa0, { gGiSmallKeyDL } },
+ // GID_MASK_KAMARO, OBJECT_GI_MASK17
+ { GetItem_DrawOpa01, { gGiKamaroMaskDL, gGiKamaroMaskEmptyDL } },
+ // GID_MASK_COUPLE, OBJECT_GI_MASK13
+ { GetItem_DrawOpa0Xlu1, { gGiCouplesMaskFullDL, gGiCouplesMaskHalfDL } },
+ // GID_04, OBJECT_GI_MELODY
+ { GetItem_DrawXlu01, { gGiSerenadeColorDL, gGiSongNoteDL } },
+ // GID_05, OBJECT_GI_MELODY
+ { GetItem_DrawXlu01, { gGiRequiemColorDL, gGiSongNoteDL } },
+ // GID_06, OBJECT_GI_MELODY
+ { GetItem_DrawXlu01, { gGiNocturneColorDL, gGiSongNoteDL } },
+ // GID_07, OBJECT_GI_MELODY
+ { GetItem_DrawXlu01, { gGiPreludeColorDL, gGiSongNoteDL } },
+ // GID_RECOVERY_HEART, OBJECT_GI_HEART
+ { GetItem_DrawRecoveryHeart, { gGiRecoveryHeartDL } },
+ // GID_KEY_BOSS, OBJECT_GI_KEY_BOSS
+ { GetItem_DrawOpa0Xlu1, { gGiBossKeyDL, gGiBossKeyGemDL } },
+ // GID_COMPASS, OBJECT_GI_COMPASS
+ { GetItem_DrawCompass, { gGiCompassDL, gGiCompassGlassDL } },
+ // GID_BOMBERS_NOTEBOOK, OBJECT_GI_SCHEDULE
+ { GetItem_DrawOpa0Xlu1, { gGiBombersNotebookEmptyDL, gGiBombersNotebookDL } },
+ // GID_MASK_STONE, OBJECT_GI_STONEMASK
+ { GetItem_DrawOpa0Xlu1, { gGiStoneMaskEmptyDL, gGiStoneMaskDL } },
+ // GID_MASK_KAFEIS_MASK, OBJECT_GI_MASK05
+ { GetItem_DrawOpa01, { gGiKafeiMaskDL, gGiKafeiMaskEmptyDL } },
+ // GID_MASK_CIRCUS_LEADER, OBJECT_GI_MASK11
+ { GetItem_DrawOpa0Xlu1, { gGiCircusLeaderMaskFaceDL, gGiCircusLeaderMaskEyebrowsDL } },
+ // GID_MASK_BREMEN, OBJECT_GI_MASK20
+ { GetItem_DrawOpa01, { gGiBremenMaskDL, gGiBremenMaskEmptyDL } },
+ // GID_MASK_ALL_NIGHT, OBJECT_GI_MASK06
+ { GetItem_DrawOpa0Xlu1, { gGiAllNightMaskEyesDL, gGiAllNightMaskFaceDL } },
+ // GID_NUTS, OBJECT_GI_NUTS
+ { GetItem_DrawDekuNuts, { gGiNutDL } },
+ // GID_HEART_CONTAINER, OBJECT_GI_HEARTS
+ { GetItem_DrawXlu01, { gGiHeartBorderDL, gGiHeartContainerDL } },
+ // GID_HEART_PIECE, OBJECT_GI_HEARTS
+ { GetItem_DrawXlu01, { gGiHeartBorderDL, gGiHeartPieceDL } },
+ // GID_QUIVER_30, OBJECT_GI_ARROWCASE
+ { GetItem_DrawUpgrades, { gGiQuiverInnerDL, gGiQuiver30InnerColorDL, gGiQuiver30OuterColorDL, gGiQuiverOuterDL } },
+ // GID_QUIVER_40, OBJECT_GI_ARROWCASE
+ { GetItem_DrawUpgrades, { gGiQuiverInnerDL, gGiQuiver40InnerColorDL, gGiQuiver40OuterColorDL, gGiQuiverOuterDL } },
+ // GID_QUIVER_50, OBJECT_GI_ARROWCASE
+ { GetItem_DrawUpgrades, { gGiQuiverInnerDL, gGiQuiver50InnerColorDL, gGiQuiver50OuterColorDL, gGiQuiverOuterDL } },
+ // GID_BOMB_BAG_20, OBJECT_GI_BOMBPOUCH
+ { GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag20BagColorDL, gGiBombBag20RingColorDL, gGiBombBagRingDL } },
+ // GID_BOMB_BAG_30, OBJECT_GI_BOMBPOUCH
+ { GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag30BagColorDL, gGiBombBag30RingColorDL, gGiBombBagRingDL } },
+ // GID_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH
+ { GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag40BagColorDL, gGiBombBag40RingColorDL, gGiBombBagRingDL } },
+ // GID_STICK, OBJECT_GI_STICK
+ { GetItem_DrawOpa0, { gGiStickDL } },
+ // GID_DUNGEON_MAP, OBJECT_GI_MAP
+ { GetItem_DrawOpa0, { gGiDungeonMapDL } },
+ // GID_MAGIC_SMALL, OBJECT_GI_MAGICPOT
+ { GetItem_DrawOpa0, { gGiMagicJarSmallDL } },
+ // GID_MAGIC_LARGE, OBJECT_GI_MAGICPOT
+ { GetItem_DrawOpa0, { gGiMagicJarLargeDL } },
+ // GID_BOMB, OBJECT_GI_BOMB_1
+ { GetItem_DrawOpa0, { gGiBombDL } },
+ // GID_STONE_OF_AGONY, OBJECT_GI_MAP
+ { GetItem_DrawOpa0, { gGiStoneOfAgonyDL } },
+ // GID_WALLET_ADULT, OBJECT_GI_PURSE
+ { GetItem_DrawWallet,
+ { gGiWalletDL, gGiAdultWalletColorDL, gGiAdultWalletRupeeOuterColorDL, gGiWalletRupeeOuterDL,
+ gGiAdultWalletStringColorDL, gGiWalletStringDL, gGiAdultWalletRupeeInnerColorDL, gGiWalletRupeeInnerDL } },
+ // GID_WALLET_GIANT, OBJECT_GI_PURSE
+ { GetItem_DrawWallet,
+ { gGiWalletDL, gGiGiantsWalletColorDL, gGiGiantsWalletRupeeOuterColorDL, gGiWalletRupeeOuterDL,
+ gGiGiantsWalletStringColorDL, gGiWalletStringDL, gGiGiantsWalletRupeeInnerColorDL, gGiWalletRupeeInnerDL } },
+ // GID_MASK_DON_GERO, OBJECT_GI_MASK16
+ { GetItem_DrawOpa0Xlu1, { gGiDonGeroMaskFaceDL, gGiDonGeroMaskBodyDL } },
+ // GID_ARROWS_SMALL, OBJECT_GI_ARROW
+ { GetItem_DrawOpa0, { gGiArrowSmallDL } },
+ // GID_ARROWS_MEDIUM, OBJECT_GI_ARROW
+ { GetItem_DrawOpa0, { gGiArrowMediumDL } },
+ // GID_ARROWS_LARGE, OBJECT_GI_ARROW
+ { GetItem_DrawOpa0, { gGiArrowLargeDL } },
+ // GID_BOMBCHU, OBJECT_GI_BOMB_2
+ { GetItem_DrawBombchu, { gGiBombchuDL } },
+ // GID_SHIELD_HERO, OBJECT_GI_SHIELD_2
+ { GetItem_DrawOpa0Xlu1, { gGiHerosShieldEmblemDL, gGiHerosShieldDL } },
+ // GID_HOOKSHOT, OBJECT_GI_HOOKSHOT
+ { GetItem_DrawOpa01, { gGiHookshotEmptyDL, gGiHookshotDL } },
+ // GID_29, OBJECT_GI_HOOKSHOT
+ { GetItem_DrawOpa01, { gGiHookshotEmptyDL, gGiHookshotDL } },
+ // GID_OCARINA, OBJECT_GI_OCARINA
+ { GetItem_DrawOpa0Xlu1, { gGiOcarinaOfTimeDL, gGiOcarinaOfTimeHolesDL } },
+ // GID_MILK, OBJECT_GI_MILK
+ { GetItem_DrawOpa0Xlu1, { gGiMilkBottleContentsDL, gGiMilkBottleGlassDL } },
+ // GID_MASK_KEATON, OBJECT_GI_KI_TAN_MASK
+ { GetItem_DrawOpa0Xlu1, { gGiKeatonMaskDL, gGiKeatonMaskEyesDL } },
+ // GID_TINGLE_MAP, OBJECT_GI_FIELDMAP
+ { GetItem_DrawOpa01, { gGiTingleMapDL, gGiTingleMapEmptyDL } },
+ // GID_BOW, OBJECT_GI_BOW
+ { GetItem_DrawOpa01, { gGiBowHandleDL, gGiBowStringDL } },
+ // GID_LENS, OBJECT_GI_GLASSES
+ { GetItem_DrawOpa0Xlu1, { gGiLensDL, gGiLensGlassDL } },
+ // GID_POTION_GREEN, OBJECT_GI_LIQUID
+ { GetItem_DrawPotion,
+ { gGiPotionContainerPotDL, gGiPotionContainerGreenPotColorDL, gGiPotionContainerGreenLiquidColorDL,
+ gGiPotionContainerLiquidDL, gGiPotionContainerGreenPatternColorDL, gGiPotionContainerPatternDL } },
+ // GID_POTION_RED, OBJECT_GI_LIQUID
+ { GetItem_DrawPotion,
+ { gGiPotionContainerPotDL, gGiPotionContainerRedPotColorDL, gGiPotionContainerRedLiquidColorDL,
+ gGiPotionContainerLiquidDL, gGiPotionContainerRedPatternColorDL, gGiPotionContainerPatternDL } },
+ // GID_POTION_BLUE, OBJECT_GI_LIQUID
+ { GetItem_DrawPotion,
+ { gGiPotionContainerPotDL, gGiPotionContainerBluePotColorDL, gGiPotionContainerBlueLiquidColorDL,
+ gGiPotionContainerLiquidDL, gGiPotionContainerBluePatternColorDL, gGiPotionContainerPatternDL } },
+ // GID_SHIELD_MIRROR, OBJECT_GI_SHIELD_3
+ { GetItem_DrawOpa0Xlu1, { gGiMirrorShieldEmptyDL, gGiMirrorShieldDL } },
+ // GID_MAGIC_BEANS, OBJECT_GI_BEAN
+ { GetItem_DrawOpa0, { gGiBeanDL } },
+ // GID_FISH, OBJECT_GI_FISH
+ { GetItem_DrawFish, { gGiFishContainerDL } },
+ // GID_LETTER_MAMA, OBJECT_GI_RESERVE_B_01
+ { GetItem_DrawOpa0Xlu1, { gGiLetterToMamaEnvelopeLetterDL, gGiLetterToMamaInscriptionsDL } },
+ // GID_37
+ { GetItem_DrawOpa0, { NULL } },
+ // GID_SWORD_BGS, OBJECT_GI_LONGSWORD
+ { GetItem_DrawGoronSword, { gGiBiggoronSwordDL } },
+ // GID_MASK_SUN, OBJECT_GI_MSSA
+ { GetItem_DrawOpa0Xlu1, { gGiSunMaskFaceDL, gGiSunMaskEyesSidePatternsDL } },
+ // GID_MASK_BLAST, OBJECT_GI_MASK21
+ { GetItem_DrawOpa0Xlu1, { gGiBlastMaskEmptyDL, gGiBlastMaskDL } },
+ // GID_FAIRY, OBJECT_GI_BOTTLE_04
+ { GetItem_DrawFairyContainer,
+ { gGiFairyBottleEmptyDL, gGiFairyBottleGlassCorkDL, gGiFairyBottleContentsDL, &gGiFairyBottleBillboardRotMtx } },
+ // GID_MASK_SCENTS, OBJECT_GI_MASK22
+ { GetItem_DrawOpa01, { gGiMaskOfScentsFaceDL, gGiMaskOfScentsTeethDL } },
+ // GID_MASK_CAPTAIN, OBJECT_GI_MASK18
+ { GetItem_DrawOpa01, { gGiCaptainsHatBodyDL, gGiCaptainsHatFaceDL } },
+ // GID_MASK_BUNNY, OBJECT_GI_RABIT_MASK
+ { GetItem_DrawOpa0Xlu1, { gGiBunnyHoodDL, gGiBunnyHoodEyesDL } },
+ // GID_MASK_TRUTH, OBJECT_GI_TRUTH_MASK
+ { GetItem_DrawOpa0Xlu1, { gGiMaskOfTruthDL, gGiMaskOfTruthAccentsDL } },
+ // GID_DEED_SWAMP, OBJECT_GI_RESERVE01
+ { GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedSwampColorDL } },
+ // GID_DEED_MOUNTAIN, OBJECT_GI_RESERVE01
+ { GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedMountainColorDL } },
+ // GID_RUPEE_HUGE, OBJECT_GI_RUPY
+ { GetItem_DrawRupee, { gGiRupeeInnerDL, gGiGoldRupeeInnerColorDL, gGiRupeeOuterDL, gGiGoldRupeeOuterColorDL } },
+ // GID_DEED_OCEAN, OBJECT_GI_RESERVE01
+ { GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedOceanColorDL } },
+ // GID_MASK_GORON, OBJECT_GI_GOLONMASK
+ { GetItem_DrawOpa0Xlu1, { gGiGoronMaskEmptyDL, gGiGoronMaskDL } },
+ // GID_MASK_ZORA, OBJECT_GI_ZORAMASK
+ { GetItem_DrawOpa01, { gGiZoraMaskEmptyDL, gGiZoraMaskDL } },
+ // GID_46
+ { GetItem_DrawBombchu, { NULL } },
+ // GID_ARROW_FIRE, OBJECT_GI_M_ARROW
+ { GetItem_DrawMagicArrow, { gGiMagicArrowAmmoDL, gGiMagicArrowFireColorDL, gGiMagicArrowGlowDL } },
+ // GID_ARROW_ICE, OBJECT_GI_M_ARROW
+ { GetItem_DrawMagicArrow, { gGiMagicArrowAmmoDL, gGiMagicArrowIceColorDL, gGiMagicArrowGlowDL } },
+ // GID_ARROW_LIGHT, OBJECT_GI_M_ARROW
+ { GetItem_DrawMagicArrow, { gGiMagicArrowAmmoDL, gGiMagicArrowLightColorDL, gGiMagicArrowGlowDL } },
+ // GID_SKULL_TOKEN, OBJECT_GI_SUTARU
+ { GetItem_DrawSkullToken, { gGiSkulltulaTokenDL, gGiSkulltulaTokenFlameDL } },
+ // GID_BUG, OBJECT_GI_INSECT
+ { GetItem_DrawOpa0Xlu1, { gGiBugContainerContentsDL, gGiBugContainerGlassDL } },
+ // GID_4C
+ { GetItem_DrawOpa0Xlu1, { NULL } },
+ // GID_POE, OBJECT_GI_GHOST
+ { GetItem_DrawPoes,
+ { gGiPoeContainerLidDL, gGiPoeContainerGlassDL, gGiPoeContainerContentsDL, gGiPoeContainerPoeColorDL } },
+ // GID_FAIRY_2, OBJECT_GI_SOUL
+ { GetItem_DrawFairyBottle, { gGiFairyContainerBaseCapDL, gGiFairyContainerGlassDL, gGiFairyContainerContentsDL } },
+ // GID_RUPEE_GREEN, OBJECT_GI_RUPY
+ { GetItem_DrawSmallRupee,
+ { gGiRupeeInnerDL, gGiGreenRupeeInnerColorDL, gGiRupeeOuterDL, gGiGreenRupeeOuterColorDL } },
+ // GID_RUPEE_BLUE, OBJECT_GI_RUPY
+ { GetItem_DrawSmallRupee,
+ { gGiRupeeInnerDL, gGiBlueRupeeInnerColorDL, gGiRupeeOuterDL, gGiBlueRupeeOuterColorDL } },
+ // GID_RUPEE_RED, OBJECT_GI_RUPY
+ { GetItem_DrawSmallRupee, { gGiRupeeInnerDL, gGiRedRupeeInnerColorDL, gGiRupeeOuterDL, gGiRedRupeeOuterColorDL } },
+ // GID_BIG_POE, OBJECT_GI_GHOST
+ { GetItem_DrawPoes,
+ { gGiPoeContainerLidDL, gGiPoeContainerGlassDL, gGiPoeContainerContentsDL, gGiPoeContainerBigPoeColorDL } },
+ // GID_RUPEE_PURPLE, OBJECT_GI_RUPY
+ { GetItem_DrawRupee, { gGiRupeeInnerDL, gGiPurpleRupeeInnerColorDL, gGiRupeeOuterDL, gGiPurpleRupeeOuterColorDL } },
+ // GID_RUPEE_SILVER, OBJECT_GI_RUPY
+ { GetItem_DrawRupee, { gGiRupeeInnerDL, gGiSilverRupeeInnerColorDL, gGiRupeeOuterDL, gGiSilverRupeeOuterColorDL } },
+ // GID_SWORD_KOKIRI, OBJECT_GI_SWORD_1
+ { GetItem_DrawOpa01, { gGiKokiriSwordBladeHiltDL, gGiKokiriSwordGuardDL } },
+ // GID_SKULL_TOKEN_2, OBJECT_ST
+ { GetItem_DrawSkullToken, { gSkulltulaTokenDL, gSkulltulaTokenFlameDL } },
+ // GID_57, OBJECT_GI_BOTTLE_RED
+ { GetItem_DrawOpa0Xlu1, { gGiRedPotionBottleEmptyDL, gGiRedPotionBottleDL } },
+ // GID_ZORA_EGG, OBJECT_GI_BOTTLE_15
+ { GetItem_DrawOpa0Xlu1, { gGiZoraEggBottleContentsDL, gGiZoraEggBottleGlassAndCorkDL } },
+ // GID_MOON_TEAR, OBJECT_GI_RESERVE00
+ { GetItem_DrawMoonsTear, { gGiMoonsTearItemDL, gGiMoonsTearGlowDL } },
+ // GID_DEED_LAND, OBJECT_GI_RESERVE01
+ { GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedLandColorDL } },
+ // GID_MASK_DEKU, OBJECT_GI_NUTSMASK
+ { GetItem_DrawOpa0Xlu1, { gGiDekuMaskEmptyDL, gGiDekuMaskDL } },
+ // GID_REMAINS_ODOLWA, OBJECT_BSMASK
+ { GetItem_DrawRemains, { gRemainsOdolwaDL, gRemainsOdolwaDL } },
+ // GID_POWDER_KEG, OBJECT_GI_BIGBOMB
+ { GetItem_DrawOpa0Xlu1, { gGiPowderKegBarrelDL, gGiPowderKegGoronSkullAndFuseDL } },
+ // GID_GOLD_DUST, OBJECT_GI_GOLD_DUST
+ { GetItem_DrawOpa01, { gGiGoldDustPowderDL, gGiGoldDustPowderEmptyDL } },
+ // GID_SEAHORSE, OBJECT_GI_BOTTLE_16
+ { GetItem_DrawOpa0Xlu1, { gGiSeahorseBottleEmptyDL, gGiSeahorseBottleGlassAndCorkDL } },
+ // GID_60, OBJECT_GI_BOTTLE_22
+ { GetItem_DrawOpa0Xlu1, { gGiHylianLoachBottleContentsDL, gGiHylianLoachBottleGlassCorkWaterDL } },
+ // GID_HYLIAN_LOACH, OBJECT_GI_LOACH
+ { GetItem_DrawOpa0Xlu1, { gGiHylianLoachEmptyDL, gGiHylianLoachDL } },
+ // GID_SEAHORSE_CAUGHT, OBJECT_GI_SEAHORSE
+ { GetItem_DrawSeahorse, { gGiSeahorseEmptyDL, gGiSeahorseBodyDL, gGiSeahorseGlowDL, &gGiSeahorseBillboardRotMtx } },
+ // GID_REMAINS_GOHT, OBJECT_BSMASK
+ { GetItem_DrawRemains, { gRemainsGohtDL, gRemainsGohtDL } },
+ // GID_REMAINS_GYORG, OBJECT_BSMASK
+ { GetItem_DrawRemains, { gRemainsGyorgDL, gRemainsGyorgDL } },
+ // GID_REMAINS_TWINMOLD, OBJECT_BSMASK
+ { GetItem_DrawRemains, { gRemainsTwinmoldDL, gRemainsTwinmoldDL } },
+ // GID_SWORD_RAZOR, OBJECT_GI_SWORD_2
+ { GetItem_DrawOpa01, { gGiRazorSwordDL, gGiRazorSwordEmptyDL } },
+ // GID_SWORD_GILDED, OBJECT_GI_SWORD_3
+ { GetItem_DrawOpa01, { gGiGildedSwordDL, gGiGildedSwordEmptyDL } },
+ // GID_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4
+ { GetItem_DrawOpa0Xlu1, { gGiGreatFairySwordBladeDL, gGiGreatFairySwordHiltEmblemDL } },
+ // GID_MASK_GARO, OBJECT_GI_MASK09
+ { GetItem_DrawOpa0Xlu1, { gGiGarosMaskCloakDL, gGiGarosMaskFaceDL } },
+ // GID_MASK_GREAT_FAIRY, OBJECT_GI_MASK14
+ { GetItem_DrawOpa0Xlu1, { gGiGreatFairyMaskFaceDL, gGiGreatFairyMaskLeavesDL } },
+ // GID_MASK_GIBDO, OBJECT_GI_MASK15
+ { GetItem_DrawOpa0Xlu1, { gGiGibdoMaskEmptyDL, gGiGibdoMaskDL } },
+ // GID_ROOM_KEY, OBJECT_GI_RESERVE_B_00
+ { GetItem_DrawOpa0Xlu1, { gGiRoomKeyEmptyDL, gGiRoomKeyDL } },
+ // GID_LETTER_TO_KAFEI, OBJECT_GI_RESERVE_C_00
+ { GetItem_DrawOpa0Xlu1, { gGiLetterToKafeiEnvelopeLetterDL, gGiLetterToKafeiInscriptionsDL } },
+ // GID_PENDANT_OF_MEMORIES, OBJECT_GI_RESERVE_C_01
+ { GetItem_DrawOpa0Xlu1, { gGiPendantOfMemoriesEmptyDL, gGiPendantOfMemoriesDL } },
+ // GID_MUSHROOM, OBJECT_GI_MAGICMUSHROOM
+ { GetItem_DrawOpa0Xlu1, { gGiMagicMushroomEmptyDL, gGiMagicMushroomDL } },
+ // GID_MASK_ROMANI, OBJECT_GI_MASK10
+ { GetItem_DrawOpa0Xlu1, { gGiRomaniMaskCapDL, gGiRomaniMaskNoseEyeDL } },
+ // GID_MASK_POSTMAN, OBJECT_GI_MASK12
+ { GetItem_DrawOpa0Xlu1, { gGiPostmanHatCapDL, gGiPostmanHatBunnyLogoDL } },
+ // GID_MASK_GIANT, OBJECT_GI_MASK23
+ { GetItem_DrawOpa01, { gGiGiantMaskEmptyDL, gGiGiantMaskDL } },
+ // GID_CHATEAU, OBJECT_GI_BOTTLE_21
+ { GetItem_DrawOpa0Xlu1, { gGiChateauRomaniBottleEmptyDL, gGiChateauRomaniBottleDL } },
+ // GID_PICTO_BOX, OBJECT_GI_CAMERA
+ { GetItem_DrawOpa0Xlu1, { gGiPictoBoxFrameDL, gGiPictoBoxBodyAndLensDL } },
+ // GID_MASK_FIERCE_DEITY, OBJECT_GI_MASK03
+ { GetItem_DrawOpa01, { gGiFierceDeityMaskFaceDL, gGiFierceDeityMaskHairAndHatDL } },
+};
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EE5FC.s")
+/**
+ * Draw "Get Item" Model
+ * Calls the corresponding draw function for the given draw ID
+ */
+void GetItem_Draw(PlayState* play, s16 drawId) {
+ sDrawItemTable[drawId].drawFunc(play, drawId);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EE7D8.s")
+void GetItem_DrawBombchu(PlayState* play, s16 drawId) {
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EE940.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EEA48.s")
+ func_8012C214(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EEC18.s")
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EED20.s")
+ CLOSE_DISPS(play->state.gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EEE34.s")
+void GetItem_DrawPoes(PlayState* play, s16 drawId) {
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EEF4C.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF054.s")
+ func_8012C28C(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF0F0.s")
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF1F4.s")
+ func_8012C2DC(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF2AC.s")
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF364.s")
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 0, 16,
+ 32, 1, play->state.frames, -(play->state.frames * 6), 16, 32));
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF4D4.s")
+ Matrix_Push();
+ Matrix_ReplaceRotation(&play->billboardMtxF);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF65C.s")
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF780.s")
+ Matrix_Pop();
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF89C.s")
+ CLOSE_DISPS(play->state.gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EF984.s")
+void GetItem_DrawFairyBottle(PlayState* play, s16 drawId) {
+ s32 pad;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EFAB8.s")
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EFBFC.s")
+ func_8012C28C(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_draw/func_800EFD44.s")
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 0, 32,
+ 32, 1, play->state.frames, -(play->state.frames * 6), 32, 32));
+
+ Matrix_Push();
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawSkullToken(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 5),
+ 32, 32, 1, play->state.frames * 0, play->state.frames * 0, 32, 64));
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawCompass(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 5);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawPotion(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, -play->state.frames, play->state.frames, 32, 32, 1,
+ -play->state.frames, play->state.frames, 32, 32));
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[4]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[5]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawGoronSword(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 1, play->state.frames * 0, 32,
+ 32, 1, play->state.frames * 0, play->state.frames * 0, 32, 32));
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawDekuNuts(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 6, play->state.frames * 6, 32,
+ 32, 1, play->state.frames * 6, play->state.frames * 6, 32, 32));
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawRecoveryHeart(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, -(play->state.frames * 3),
+ 32, 32, 1, play->state.frames * 0, -(play->state.frames * 2), 32, 32));
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawFish(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, play->state.frames * 0, play->state.frames * 1, 32,
+ 32, 1, play->state.frames * 0, play->state.frames * 1, 32, 32));
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * Draw `drawResources[0]` as Opa
+ */
+void GetItem_DrawOpa0(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * Draw `drawResources[0]` as Opa and `drawResources[1]` as Xlu
+ */
+void GetItem_DrawOpa0Xlu1(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * Draw `drawResources[0]` and `drawResources[1]` as Opa
+ */
+void GetItem_DrawOpa01(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+/**
+ * Draw `drawResources[0]` and `drawResources[1]` as Xlu
+ */
+void GetItem_DrawXlu01(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[0]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawSeahorse(PlayState* play, s16 drawId) {
+ s32 pad;
+ MtxF mtx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ Matrix_MtxToMtxF(Lib_SegmentedToVirtual(sDrawItemTable[drawId].drawResources[3]), &mtx);
+ Matrix_Mult(&mtx, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawFairyContainer(PlayState* play, s16 drawId) {
+ s32 pad;
+ MtxF mtx;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+ func_8012C2DC(play->state.gfxCtx);
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiFairyBottleTexAnim));
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ Matrix_MtxToMtxF(Lib_SegmentedToVirtual(sDrawItemTable[drawId].drawResources[3]), &mtx);
+ Matrix_Mult(&mtx, MTXMODE_APPLY);
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawMoonsTear(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+ func_8012C2DC(play->state.gfxCtx);
+ AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGiMoonsTearTexAnim));
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ Matrix_ReplaceRotation(&play->billboardMtxF);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawMagicArrow(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawUpgrades(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawRupee(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawSmallRupee(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY);
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ func_8012C2DC(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[3]);
+ gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].drawResources[2]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawWallet(PlayState* play, s16 drawId) {
+ s32 pad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ func_8012C28C(play->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[1]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[2]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[3]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[4]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[5]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[6]);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[7]);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void GetItem_DrawRemains(PlayState* play, s16 drawId) {
+ s32 pad;
+ s8 objectIndex;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_BSMASK);
+
+ gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.status[objectIndex].segment);
+
+ func_8012C28C(play->state.gfxCtx);
+ Matrix_Scale(0.02f, 0.02f, 0.02f, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, sDrawItemTable[drawId].drawResources[0]);
+
+ POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 10c33090c..0637f6392 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gi_hearts/object_gi_hearts.h"
+#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h"
#define FLAGS 0x00000000
@@ -78,14 +79,14 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
if (this->actor.params == ITEM00_HEART_PIECE) {
sp30 = 0;
this->collectibleFlag = 0;
- this->actor.params = ITEM00_HEART;
+ this->actor.params = ITEM00_RECOVERY_HEART;
} else {
Actor_MarkForDeath(&this->actor);
return;
}
}
if (this->actor.params == ITEM00_3_HEARTS) {
- this->actor.params = ITEM00_HEART;
+ this->actor.params = ITEM00_RECOVERY_HEART;
}
Actor_ProcessInitChain(&this->actor, sInitChain);
@@ -117,7 +118,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
sp30 = -1;
}
break;
- case ITEM00_HEART:
+ case ITEM00_RECOVERY_HEART:
this->actor.home.rot.z = randPlusMinusPoint5Scaled(65535.0f);
shadowOffset = 430.0f;
Actor_SetScale(&this->actor, 0.02f);
@@ -183,7 +184,7 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
ActorShape_Init(&this->actor.shape, shadowOffset, ActorShadow_DrawCircle, shadowScale);
this->actor.shape.shadowAlpha = 180;
this->actor.focus.pos = this->actor.world.pos;
- this->unk14A = GI_NONE;
+ this->getItemId = GI_NONE;
if (sp30 < 0) {
this->actionFunc = EnItem00_WaitForHeartObject;
@@ -219,8 +220,8 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
case ITEM00_RUPEE_HUGE:
Item_Give(play, ITEM_RUPEE_HUGE);
break;
- case ITEM00_HEART:
- Item_Give(play, ITEM_HEART);
+ case ITEM00_RECOVERY_HEART:
+ Item_Give(play, ITEM_RECOVERY_HEART);
break;
case ITEM00_FLEXIBLE:
case ITEM00_BIG_FAIRY:
@@ -286,7 +287,8 @@ void EnItem00_WaitForHeartObject(EnItem00* this, PlayState* play) {
}
void func_800A640C(EnItem00* this, PlayState* play) {
- if ((this->actor.params <= ITEM00_RUPEE_RED) || ((this->actor.params == ITEM00_HEART) && (this->unk152 < 0)) ||
+ if ((this->actor.params <= ITEM00_RUPEE_RED) ||
+ ((this->actor.params == ITEM00_RECOVERY_HEART) && (this->unk152 < 0)) ||
(this->actor.params == ITEM00_HEART_PIECE) || (this->actor.params == ITEM00_HEART_CONTAINER)) {
this->actor.shape.rot.y = this->actor.shape.rot.y + 960;
} else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_NUTS_10) &&
@@ -366,7 +368,7 @@ void func_800A6780(EnItem00* this, PlayState* play) {
this->unk152++;
- if (this->actor.params == ITEM00_HEART) {
+ if (this->actor.params == ITEM00_RECOVERY_HEART) {
if (this->actor.velocity.y < 0.0f) {
this->actor.speedXZ = 0.0f;
this->actor.gravity = -0.4f;
@@ -416,12 +418,12 @@ void func_800A6780(EnItem00* this, PlayState* play) {
void func_800A6A40(EnItem00* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->unk14A != GI_NONE) {
+ if (this->getItemId != GI_NONE) {
if (Actor_HasParent(&this->actor, play) == 0) {
- Actor_PickUp(&this->actor, play, this->unk14A, 50.0f, 80.0f);
+ Actor_PickUp(&this->actor, play, this->getItemId, 50.0f, 80.0f);
this->unk152++;
} else {
- this->unk14A = GI_NONE;
+ this->getItemId = GI_NONE;
}
}
@@ -434,7 +436,7 @@ void func_800A6A40(EnItem00* this, PlayState* play) {
if (this->actor.params <= ITEM00_RUPEE_RED) {
this->actor.shape.rot.y = this->actor.shape.rot.y + 960;
- } else if (this->actor.params == ITEM00_HEART) {
+ } else if (this->actor.params == ITEM00_RECOVERY_HEART) {
this->actor.shape.rot.y = 0;
}
@@ -532,8 +534,8 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
case ITEM00_NUTS_10:
getItemId = GI_NUTS_10;
break;
- case ITEM00_HEART:
- Item_Give(play, ITEM_HEART);
+ case ITEM00_RECOVERY_HEART:
+ Item_Give(play, ITEM_RECOVERY_HEART);
break;
case ITEM00_FLEXIBLE:
case ITEM00_BIG_FAIRY:
@@ -628,7 +630,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, this->unk154);
- this->unk14A = GI_NONE;
+ this->getItemId = GI_NONE;
this->actionFunc = func_800A6A40;
}
@@ -656,7 +658,7 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) {
case ITEM00_HEART_CONTAINER:
EnItem00_DrawHeartContainer(this, play);
break;
- case ITEM00_HEART:
+ case ITEM00_RECOVERY_HEART:
if (this->unk152 < 0) {
if (this->unk152 == -1) {
s8 bankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_HEART);
@@ -667,7 +669,7 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) {
}
} else {
Matrix_Scale(16.0f, 16.0f, 16.0f, MTXMODE_APPLY);
- GetItem_Draw(play, 8);
+ GetItem_Draw(play, GID_RECOVERY_HEART);
}
break;
}
@@ -792,8 +794,8 @@ void EnItem00_DrawHeartContainer(EnItem00* actor, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD);
- gSPDisplayList(POLY_XLU_DISP++, object_gi_hearts_DL_001290);
- gSPDisplayList(POLY_XLU_DISP++, object_gi_hearts_DL_001470);
+ gSPDisplayList(POLY_XLU_DISP++, gGiHeartBorderDL);
+ gSPDisplayList(POLY_XLU_DISP++, gGiHeartContainerDL);
CLOSE_DISPS(play->state.gfxCtx);
}
@@ -825,7 +827,7 @@ s16 func_800A7650(s16 dropId) {
return ITEM00_NO_DROP;
}
- if (dropId == ITEM00_HEART) {
+ if (dropId == ITEM00_RECOVERY_HEART) {
if (((void)0, gSaveContext.save.playerData.healthCapacity) == ((void)0, gSaveContext.save.playerData.health)) {
return ITEM00_RUPEE_GREEN;
}
@@ -850,7 +852,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
if (paramFF == ITEM00_3_HEARTS) {
for (i = 0; i < 3; i++) {
- spawnedActor = Item_DropCollectible(play, spawnPos, param7F00 | ITEM00_HEART | param8000);
+ spawnedActor = Item_DropCollectible(play, spawnPos, param7F00 | ITEM00_RECOVERY_HEART | param8000);
}
} else if (paramFF == ITEM00_MUSHROOM_CLOUD) {
param7F00 >>= 8;
@@ -867,8 +869,9 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
}
} else {
- spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f,
- spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) & 0x7F) << 9) | 7);
+ spawnedActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0,
+ 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE));
if (param20000 == 0) {
if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
@@ -924,8 +927,9 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102);
} else {
- spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f,
- spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) & 0x7F) << 9) | 7);
+ spawnedActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0,
+ 0, STRAY_FAIRY_PARAMS(((param7F00 >> 8) & 0x7F), 0, STRAY_FAIRY_TYPE_COLLECTIBLE));
}
if (Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F) == 0) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
@@ -955,61 +959,61 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
}
u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A,
- ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_HEART,
- ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
- ITEM00_HEART, ITEM00_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_HEART, ITEM00_HEART, ITEM00_FLEXIBLE, ITEM00_MASK,
- ITEM00_MASK, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_FLEXIBLE, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_HEART,
- ITEM00_HEART, ITEM00_HEART, ITEM00_HEART, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN,
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
- ITEM00_ARROWS_30, ITEM00_ARROWS_30, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_LARGE, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
- ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
- ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NUTS_1, ITEM00_NUTS_1,
- ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_STICK,
- ITEM00_STICK, ITEM00_NO_DROP, ITEM00_HEART, ITEM00_HEART, ITEM00_FLEXIBLE,
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_30, ITEM00_BOMBS_A, ITEM00_NO_DROP,
- ITEM00_STICK, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_HEART, ITEM00_HEART,
- ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_HEART, ITEM00_HEART, ITEM00_MAGIC_SMALL,
- ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A,
+ ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
+ ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_MASK,
+ ITEM00_MASK, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
+ ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
+ ITEM00_ARROWS_30, ITEM00_ARROWS_30, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_LARGE, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
+ ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NUTS_1, ITEM00_NUTS_1,
+ ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_STICK,
+ ITEM00_STICK, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP,
+ ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_30, ITEM00_BOMBS_A, ITEM00_NO_DROP,
+ ITEM00_STICK, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_MAGIC_SMALL,
+ ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_NO_DROP, ITEM00_NO_DROP,
};
u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
@@ -1050,7 +1054,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
dropId = ITEM00_ARROWS_10;
break;
case PLAYER_FORM_ZORA:
- dropId = ITEM00_HEART;
+ dropId = ITEM00_RECOVERY_HEART;
break;
case PLAYER_FORM_GORON:
dropId = ITEM00_MAGIC_SMALL;
@@ -1071,7 +1075,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
dropQuantity = 1;
} else if (fromActor->dropFlag & 2) {
params = 0x10;
- dropId = ITEM00_HEART;
+ dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 1;
} else if (fromActor->dropFlag & 0x20) {
dropId = ITEM00_RUPEE_PURPLE;
@@ -1090,11 +1094,11 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
if (gSaveContext.save.playerData.health <= 0x30) {
params = 0x10;
- dropId = ITEM00_HEART;
+ dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 3;
} else if (gSaveContext.save.playerData.health <= 0x50) {
params = 0x10;
- dropId = ITEM00_HEART;
+ dropId = ITEM00_RECOVERY_HEART;
dropQuantity = 1;
} else if ((gSaveContext.save.playerData.magicLevel != 0) && (gSaveContext.save.playerData.magic == 0)) {
params = 0xD0;
@@ -1156,13 +1160,13 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
}
s32 D_801AE194[32] = {
- ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_RUPEE_RED,
- ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE, ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD,
- ITEM00_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_LARGE, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10,
- ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_ARROWS_10, ITEM00_ARROWS_30,
+ ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE, ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD,
+ ITEM00_RECOVERY_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL,
+ ITEM00_MAGIC_LARGE, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10,
+ ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_ARROWS_10, ITEM00_ARROWS_30,
};
s32 func_800A8150(s32 index) {
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index e1fb63fa1..f77fc5158 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -187,7 +187,7 @@ void FireObj_UpdateLight(PlayState* play, FireObjLight* light, FireObj* fire) {
if (fire->state == FIRE_STATE_3) {
Lights_PointSetColorAndRadius(&light->lightInfo, 0, 0, 0, -1);
} else {
- radius = ((fire->yScale * 140.0f * fire->sizeInv) + 60.0f);
+ radius = (fire->yScale * 140.0f * fire->sizeInv) + 60.0f;
Lights_PointGlowSetInfo(&light->lightInfo, fire->position.x, (fire->position.y + (fire->yScale * 6500.0f)),
fire->position.z,
diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c
index 26a17a84a..2df62a054 100644
--- a/src/code/z_game_dlftbls.c
+++ b/src/code/z_game_dlftbls.c
@@ -15,7 +15,7 @@
GameStateOverlay gGameStateOverlayTable[] = {
GAMESTATE_OVERLAY_INTERNAL(TitleSetup_Init, TitleSetup_Destroy, sizeof(GameState)),
- GAMESTATE_OVERLAY(select, Select_Init, Select_Destroy, sizeof(SelectContext)),
+ GAMESTATE_OVERLAY(select, MapSelect_Init, MapSelect_Destroy, sizeof(MapSelectState)),
GAMESTATE_OVERLAY(title, Title_Init, Title_Destroy, sizeof(TitleContext)),
GAMESTATE_OVERLAY_INTERNAL(Play_Init, Play_Fini, sizeof(PlayState)),
GAMESTATE_OVERLAY(opening, Opening_Init, Opening_Destroy, sizeof(OpeningContext)),
diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c
index c40154bc7..d7905e4dd 100644
--- a/src/code/z_kaleido_scope_call.c
+++ b/src/code/z_kaleido_scope_call.c
@@ -1,5 +1,6 @@
#include "prevent_bss_reordering.h"
#include "global.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
void (*sKaleidoScopeUpdateFunc)(PlayState* play);
void (*sKaleidoScopeDrawFunc)(PlayState* play);
@@ -33,7 +34,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
PauseContext* pauseCtx = &play->pauseCtx;
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
- if ((play->pauseCtx.state != 0) || (play->pauseCtx.debugState != 0)) {
+ if ((play->pauseCtx.state != 0) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
if (pauseCtx->state == 1 || pauseCtx->state == 19) {
if (ShrinkWindow_GetLetterboxMagnitude() == 0) {
R_PAUSE_MENU_MODE = 1;
@@ -62,7 +63,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
sKaleidoScopeUpdateFunc(play);
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0)) {
+ if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
KaleidoManager_ClearOvl(kaleidoScopeOvl);
KaleidoScopeCall_LoadPlayer();
}
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 342fd1bb0..625adf20f 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -1,8 +1,8 @@
#include "global.h"
#include "z64rumble.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
-s16 D_801BDB00[] = { PAUSE_1, PAUSE_2, PAUSE_3, PAUSE_0 };
+s16 D_801BDB00[] = { PAUSE_MAP, PAUSE_QUEST, PAUSE_MASK, PAUSE_ITEM };
f32 sKaleidoSetupEyeX[] = { -64.0f, 0.0f, 64.0f, 0.0f };
f32 sKaleidoSetupEyeZ[] = { 0.0f, -64.0f, 0.0f, 64.0f };
@@ -70,7 +70,8 @@ void KaleidoSetup_Update(PlayState* play) {
if (msgCtx && msgCtx) {}
}
- if ((pauseCtx->state == 0) && (pauseCtx->debugState == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
+ if ((pauseCtx->state == 0) && (pauseCtx->debugEditor == DEBUG_EDITOR_NONE) &&
+ (play->gameOverCtx.state == GAMEOVER_INACTIVE)) {
if ((play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
if ((gSaveContext.save.cutscene < 0xFFF0) && (gSaveContext.nextCutsceneIndex < 0xFFF0)) {
if (!Play_InCsMode(play) || ((msgCtx->msgMode != 0) && (msgCtx->currentTextId == 0xFF))) {
@@ -108,7 +109,7 @@ void KaleidoSetup_Init(PlayState* play) {
bzero(pauseCtx, sizeof(PauseContext));
- pauseCtx->pageIndex = PAUSE_0;
+ pauseCtx->pageIndex = PAUSE_ITEM;
pauseCtx->unk_21C = 160.0f;
pauseCtx->unk_218 = 160.0f;
@@ -119,18 +120,18 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->unk_20C = 936.0f;
pauseCtx->unk_220 = -314.0f;
- pauseCtx->unk_238[PAUSE_1] = XREG(94) + 3;
+ pauseCtx->unk_238[PAUSE_MAP] = XREG(94) + 3;
pauseCtx->unk_258 = 11;
pauseCtx->unk_25A = 0;
- pauseCtx->cursorItem[PAUSE_0] = 999;
- pauseCtx->cursorItem[PAUSE_1] = XREG(94) + 3;
- pauseCtx->cursorItem[PAUSE_2] = 999;
- pauseCtx->cursorItem[PAUSE_3] = 999;
+ pauseCtx->cursorItem[PAUSE_ITEM] = 999;
+ pauseCtx->cursorItem[PAUSE_MAP] = XREG(94) + 3;
+ pauseCtx->cursorItem[PAUSE_QUEST] = 999;
+ pauseCtx->cursorItem[PAUSE_MASK] = 999;
- pauseCtx->unk_268[PAUSE_0] = 0;
- pauseCtx->unk_268[PAUSE_1] = XREG(94) + 3;
+ pauseCtx->unk_268[PAUSE_ITEM] = 0;
+ pauseCtx->unk_268[PAUSE_MAP] = XREG(94) + 3;
pauseCtx->unk_284 = 2;
pauseCtx->unk_2A0 = -1;
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index f33a949d8..d2a3a254c 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -1,5 +1,6 @@
#include "prevent_bss_reordering.h"
#include "global.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "interface/parameter_static/parameter_static.h"
s16 sHeartsPrimColors[3][3] = { { 255, 70, 50 }, { 255, 190, 0 }, { 100, 100, 255 } };
@@ -222,7 +223,7 @@ void LifeMeter_Draw(PlayState* play) {
f32 lifesize = interfaceCtx->lifeSizeChange * 0.1f;
u32 curCombineModeSet = 0;
TexturePtr temp = NULL;
- s32 ddCount = gSaveContext.save.inventory.dungeonKeys[9] - 1;
+ s32 ddCount = gSaveContext.save.inventory.defenseHearts - 1;
OPEN_DISPS(gfxCtx);
@@ -398,8 +399,8 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) {
if (interfaceCtx->lifeSizeChange <= 0) {
interfaceCtx->lifeSizeChange = 0;
interfaceCtx->lifeSizeChangeDirection = 0;
- if (!Player_InCsMode(play) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
- LifeMeter_IsCritical() && !Play_InCsMode(play)) {
+ if (!Player_InCsMode(play) && (play->pauseCtx.state == 0) &&
+ (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && LifeMeter_IsCritical() && !Play_InCsMode(play)) {
play_sound(NA_SE_SY_HITPOINT_ALARM);
}
}
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index 9baff91f1..5135a3c41 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
s16 sMinimapInitPosX = 0;
s16 sMinimapInitPosZ = 0;
@@ -238,7 +239,7 @@ void Map_Update(PlayState* play) {
func_80105B34(play);
- if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0)) {
+ if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE)) {
if (Map_IsInDungeonArea(play)) {
floor = func_80109124(player->actor.world.pos.y);
if (floor != -1) {
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 1e76578bb..14fe241c4 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "message_data_static.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#if 0
@@ -229,7 +230,7 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
s32 k = *offset;
f32 f = *arg3;
- Font_LoadChar(play, 0x838B, k); // 0x838b = ル in JISX0213
+ Font_LoadChar(play, 0x838B, k); // 0x838B = ル in JISX0213
k += FONT_CHAR_TEX_SIZE;
msgCtx->decodedBuffer.wchar[t] = 0x838B;
t += 1;
@@ -279,7 +280,7 @@ void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) {
if ((func_8010A0A4(play) != 0) || (play->sceneNum == 0x4F)) {
phi_v0 = 0xA;
} else {
- phi_v0 = play->pauseCtx.unk_238[4];
+ phi_v0 = play->pauseCtx.unk_238[PAUSE_WORLD_MAP];
}
temp_s6 = *(&D_801D0250 + (phi_v0 * 2));
phi_s0 = 0;
diff --git a/src/code/z_message_nes.c b/src/code/z_message_nes.c
index 491427cef..9231ca9b9 100644
--- a/src/code/z_message_nes.c
+++ b/src/code/z_message_nes.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "message_data_static.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#if 0
@@ -256,7 +257,7 @@ void Message_LoadAreaTextNES(PlayState* play, s32* offset, f32* arg2, s16* decod
if ((func_8010A0A4(play) != 0) || (play->sceneNum == SCENE_SECOM)) {
currentArea = 10;
} else {
- currentArea = play->pauseCtx.unk_238[4];
+ currentArea = play->pauseCtx.unk_238[PAUSE_WORLD_MAP];
}
stringLimit = D_801D07C4[currentArea];
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index a76cb36e0..b63af9038 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -2,7 +2,7 @@
#include "interface/parameter_static/parameter_static.h"
#include "interface/do_action_static/do_action_static.h"
#include "misc/story_static/story_static.h"
-#include "overlays/gamestates/ovl_file_choose/z_file_choose.h"
+#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
typedef struct {
/* 0x00 */ u8 scene;
@@ -330,9 +330,9 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item == ITEM_HEART_PIECE_2) || (item == ITEM_HEART_PIECE)) {
- gSaveContext.save.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT);
- if ((gSaveContext.save.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
- gSaveContext.save.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
+ INCREMENT_QUEST_HEART_PIECE_COUNT;
+ if (EQ_MAX_QUEST_HEART_PIECE_COUNT) {
+ RESET_HEART_PIECE_COUNT;
gSaveContext.save.playerData.healthCapacity += 0x10;
gSaveContext.save.playerData.health += 0x10;
}
@@ -595,7 +595,7 @@ u8 Item_Give(PlayState* play, u8 item) {
SET_QUEST_ITEM(item - ITEM_REMAINS_ODOLWA + QUEST_REMAINS_ODOWLA);
return ITEM_NONE;
- } else if (item == ITEM_HEART) {
+ } else if (item == ITEM_RECOVERY_HEART) {
Health_ChangeBy(play, 0x10);
return item;
@@ -655,7 +655,7 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if (((item >= ITEM_POTION_RED) && (item <= ITEM_OBABA_DRINK)) || (item == ITEM_CHATEAU_2) ||
(item == ITEM_MILK) || (item == ITEM_GOLD_DUST_2) || (item == ITEM_HYLIAN_LOACH_2) ||
- (item == ITEM_SEA_HORSE_CAUGHT)) {
+ (item == ITEM_SEAHORSE_CAUGHT)) {
slot = SLOT(item);
if ((item != ITEM_MILK_BOTTLE) && (item != ITEM_MILK_HALF)) {
@@ -671,8 +671,8 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if (item == ITEM_HYLIAN_LOACH_2) {
item = ITEM_HYLIAN_LOACH;
- } else if (item == ITEM_SEA_HORSE_CAUGHT) {
- item = ITEM_SEA_HORSE;
+ } else if (item == ITEM_SEAHORSE_CAUGHT) {
+ item = ITEM_SEAHORSE;
}
slot = SLOT(item);
@@ -712,7 +712,7 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_MASK_GIANT)) {
temp = INV_CONTENT(item);
INV_CONTENT(item) = item;
- if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_PENDANT_MEMORIES) && (temp != ITEM_NONE)) {
+ if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_PENDANT_OF_MEMORIES) && (temp != ITEM_NONE)) {
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (temp == GET_CUR_FORM_BTN_ITEM(i)) {
SET_CUR_FORM_BTN_ITEM(i, item);
@@ -816,8 +816,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
} else if (item == ITEM_HEART_CONTAINER) {
return ITEM_NONE;
- } else if (item == ITEM_HEART) {
- return ITEM_HEART;
+ } else if (item == ITEM_RECOVERY_HEART) {
+ return ITEM_RECOVERY_HEART;
} else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) {
if (!(gSaveContext.save.weekEventReg[12] & 0x80)) {
@@ -843,7 +843,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
} else if (((item >= ITEM_POTION_RED) && (item <= ITEM_OBABA_DRINK)) || (item == ITEM_CHATEAU_2) ||
(item == ITEM_MILK) || (item == ITEM_GOLD_DUST_2) || (item == ITEM_HYLIAN_LOACH_2) ||
- (item == ITEM_SEA_HORSE_CAUGHT)) {
+ (item == ITEM_SEAHORSE_CAUGHT)) {
bottleSlot = SLOT(item);
if ((item != ITEM_MILK_BOTTLE) && (item != ITEM_MILK_HALF)) {
@@ -859,8 +859,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
} else if (item == ITEM_HYLIAN_LOACH_2) {
item = ITEM_HYLIAN_LOACH;
- } else if (item == ITEM_SEA_HORSE_CAUGHT) {
- item = ITEM_SEA_HORSE;
+ } else if (item == ITEM_SEAHORSE_CAUGHT) {
+ item = ITEM_SEAHORSE;
}
bottleSlot = SLOT(item);
@@ -989,7 +989,7 @@ void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn) {
Interface_LoadItemIconImpl(play, btn);
- play->pauseCtx.cursorItem[PAUSE_0] = item;
+ play->pauseCtx.cursorItem[PAUSE_ITEM] = item;
gSaveContext.buttonStatus[btn] = BTN_ENABLED;
if (item == ITEM_HOT_SPRING_WATER) {
diff --git a/src/code/z_play.c b/src/code/z_play.c
index 49ed31bf4..6d90048f5 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -108,9 +108,17 @@ s32 Play_InCsMode(PlayState* this) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80169BF8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_GetCsCamDataSetting.s")
+u16 Play_GetActorCsCamSetting(PlayState* this, s32 csCamDataIndex) {
+ ActorCsCamInfo* actorCsCamList = &this->actorCsCamList[csCamDataIndex];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_GetCsCamDataVec3s.s")
+ return actorCsCamList->setting;
+}
+
+Vec3s* Play_GetActorCsCamFuncData(PlayState* this, s32 csCamDataIndex) {
+ ActorCsCamInfo* actorCsCamList = &this->actorCsCamList[csCamDataIndex];
+
+ return Lib_SegmentedToVirtual(actorCsCamList->actorCsCamFuncData);
+}
/**
* Converts the number of a scene to its "original" equivalent, the default version of the area which the player first
diff --git a/src/code/z_room.c b/src/code/z_room.c
index 3507765a5..169d6d5b5 100644
--- a/src/code/z_room.c
+++ b/src/code/z_room.c
@@ -58,7 +58,7 @@ void Room_DrawType1Mesh(PlayState* play, Room* room, u32 flags) {
} else if (mesh->format == 2) {
func_8012E32C(play, room, flags);
} else {
- __assert("../z_room.c", 0x3c5);
+ __assert("../z_room.c", 965);
}
}
@@ -85,9 +85,8 @@ s32 Room_StartRoomTransition(PlayState* play, RoomContext* roomCtx, s32 index) {
roomCtx->unk31 = 1;
size = play->roomList[index].vromEnd - play->roomList[index].vromStart;
- roomCtx->activeRoomVram =
- (void*)(((s32)roomCtx->roomMemPages[roomCtx->activeMemPage] - (size + 8) * roomCtx->activeMemPage + 8) &
- 0xfffffff0);
+ roomCtx->activeRoomVram = (void*)(ALIGN16((u32)roomCtx->roomMemPages[roomCtx->activeMemPage] -
+ (size + 8) * roomCtx->activeMemPage - 7));
osCreateMesgQueue(&roomCtx->loadQueue, roomCtx->loadMsg, 1);
DmaMgr_SendRequestImpl(&roomCtx->dmaRequest, roomCtx->activeRoomVram, play->roomList[index].vromStart, size, 0,
@@ -114,7 +113,7 @@ s32 Room_HandleLoadCallbacks(PlayState* play, RoomContext* roomCtx) {
if (((play->sceneNum != SCENE_IKANA) || (roomCtx->currRoom.num != 1)) &&
(play->sceneNum != SCENE_IKNINSIDE)) {
- play->envCtx.lightSettingOverride = 0xff;
+ play->envCtx.lightSettingOverride = 0xFF;
play->envCtx.unk_E0 = 0;
}
func_800FEAB0();
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index b4ba212d5..cf40d6049 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -173,9 +173,9 @@ void Scene_HeaderCmdActorList(PlayState* play, SceneCmd* cmd) {
play->actorCtx.unkC = 0;
}
-// SceneTableEntry Header Command 0x02: List of cameras for actor cutscenes
+// SceneTableEntry Header Command 0x02: List of camera data for actor cutscenes
void Scene_HeaderCmdActorCutsceneCamList(PlayState* play, SceneCmd* cmd) {
- play->csCamData = Lib_SegmentedToVirtual(cmd->csCameraList.segment);
+ play->actorCsCamList = Lib_SegmentedToVirtual(cmd->actorCsCamList.segment);
}
// SceneTableEntry Header Command 0x03: Collision Header
@@ -192,8 +192,8 @@ void Scene_HeaderCmdColHeader(PlayState* play, SceneCmd* cmd) {
colHeader->surfaceTypeList = Lib_SegmentedToVirtual(colHeader->surfaceTypeList);
}
- if (colHeader->cameraDataList != NULL) {
- colHeader->cameraDataList = Lib_SegmentedToVirtual(colHeader->cameraDataList);
+ if (colHeader->bgCamList != NULL) {
+ colHeader->bgCamList = Lib_SegmentedToVirtual(colHeader->bgCamList);
}
if (colHeader->waterBoxes != NULL) {
@@ -237,9 +237,9 @@ void Scene_HeaderCmdRoomBehavior(PlayState* play, SceneCmd* cmd) {
play->roomCtx.currRoom.unk3 = cmd->roomBehavior.gpFlag1;
play->roomCtx.currRoom.unk2 = cmd->roomBehavior.gpFlag2 & 0xFF;
play->roomCtx.currRoom.unk5 = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
- play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xa) & 1;
- play->roomCtx.currRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xb) & 1;
- play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xc) & 1;
+ play->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xA) & 1;
+ play->roomCtx.currRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xB) & 1;
+ play->envCtx.unk_E2 = (cmd->roomBehavior.gpFlag2 >> 0xC) & 1;
}
// SceneTableEntry Header Command 0x0A: Mesh Header
@@ -376,7 +376,7 @@ void Scene_HeaderCmdSkyboxDisables(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x10: Time Settings
void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) {
- gSaveContext.environmentTime = gSaveContext.save.time =
+ gSaveContext.skyboxTime = gSaveContext.save.time =
(u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f);
}
@@ -398,20 +398,17 @@ void Scene_HeaderCmdTimeSettings(PlayState* play, SceneCmd* cmd) {
play->envCtx.unk_8 = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 120.0f) * 25.0f;
play->envCtx.unk_C = (Math_CosS(((void)0, gSaveContext.save.time) - 0x8000) * 20.0f) * 25.0f;
- if (play->envCtx.timeIncrement == 0 && gSaveContext.save.cutscene < 0xFFF0) {
- gSaveContext.environmentTime = gSaveContext.save.time;
-
- if (gSaveContext.environmentTime >= CLOCK_TIME(4, 0) && gSaveContext.environmentTime < CLOCK_TIME(6, 30)) {
- gSaveContext.environmentTime = CLOCK_TIME(5, 0);
- } else if (gSaveContext.environmentTime >= CLOCK_TIME(6, 30) &&
- gSaveContext.environmentTime < CLOCK_TIME(8, 0)) {
- gSaveContext.environmentTime = CLOCK_TIME(8, 0);
- } else if (gSaveContext.environmentTime >= CLOCK_TIME(16, 0) &&
- gSaveContext.environmentTime < CLOCK_TIME(17, 0)) {
- gSaveContext.environmentTime = CLOCK_TIME(17, 0);
- } else if (gSaveContext.environmentTime >= CLOCK_TIME(18, 0) &&
- gSaveContext.environmentTime < CLOCK_TIME(19, 0)) {
- gSaveContext.environmentTime = CLOCK_TIME(19, 0);
+ if ((play->envCtx.timeIncrement == 0) && (gSaveContext.save.cutscene < 0xFFF0)) {
+ gSaveContext.skyboxTime = gSaveContext.save.time;
+
+ if ((gSaveContext.skyboxTime >= CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(5, 0);
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(6, 30)) && (gSaveContext.skyboxTime < CLOCK_TIME(8, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(8, 0);
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(16, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(17, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(17, 0);
+ } else if ((gSaveContext.skyboxTime >= CLOCK_TIME(18, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(19, 0))) {
+ gSaveContext.skyboxTime = CLOCK_TIME(19, 0);
}
}
}
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 69a0a4491..bb6308fb6 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -148,10 +148,31 @@ s32 D_801C6798[] = {
0x00000020, 0x00001470, 0x000028C0, 0x00003D10, 0x00005160, 0x000065B0,
};
-u8 D_801C67B0[24] = {
- ITEM_NONE, ITEM_BOW, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_BOMB, ITEM_BOMBCHU,
- ITEM_STICK, ITEM_NUT, ITEM_MAGIC_BEANS, ITEM_NONE, ITEM_POWDER_KEG, ITEM_PICTO_BOX, ITEM_NONE, ITEM_NONE,
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
+u8 gAmmoItems[] = {
+ ITEM_NONE, // SLOT_OCARINA
+ ITEM_BOW, // SLOT_BOW
+ ITEM_NONE, // SLOT_ARROW_FIRE
+ ITEM_NONE, // SLOT_ARROW_ICE
+ ITEM_NONE, // SLOT_ARROW_LIGHT
+ ITEM_NONE, // SLOT_TRADE_DEED
+ ITEM_BOMB, // SLOT_BOMB
+ ITEM_BOMBCHU, // SLOT_BOMBCHU
+ ITEM_STICK, // SLOT_STICK
+ ITEM_NUT, // SLOT_NUT
+ ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS
+ ITEM_NONE, // SLOT_TRADE_KEY_MAMA
+ ITEM_POWDER_KEG, // SLOT_POWDER_KEG
+ ITEM_PICTO_BOX, // SLOT_PICTO_BOX
+ ITEM_NONE, // SLOT_LENS
+ ITEM_NONE, // SLOT_HOOKSHOT
+ ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY
+ ITEM_NONE, // SLOT_TRADE_COUPLE
+ ITEM_NONE, // SLOT_BOTTLE_1
+ ITEM_NONE, // SLOT_BOTTLE_2
+ ITEM_NONE, // SLOT_BOTTLE_3
+ ITEM_NONE, // SLOT_BOTTLE_4
+ ITEM_NONE, // SLOT_BOTTLE_5
+ ITEM_NONE, // SLOT_BOTTLE_6
};
s32 D_801C67C8[] = { 0, 0x40, 0x80, 0xC0, 0x100, 0x180, 0x200, 0x280 };
@@ -199,8 +220,8 @@ void Sram_ClearHighscores(void) {
gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF) | 0x130000;
gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF0000) | 0xA;
gSaveContext.save.horseBackBalloonHighScore = 6000; // 60 seconds
- gSaveContext.save.unk_EF4 = (gSaveContext.save.unk_EF4 & 0xFFFF0000) | 0x27;
- gSaveContext.save.unk_EF4 = (gSaveContext.save.unk_EF4 & 0xFFFF) | 0xA0000;
+ SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39);
+ SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10);
gSaveContext.save.dekuPlaygroundHighScores[0] = 7500; // 75 seconds
gSaveContext.save.dekuPlaygroundHighScores[1] = 7500; // 75 seconds
@@ -330,8 +351,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
}
}
- for (i = 0; i < ARRAY_COUNT(D_801C67B0); i++) {
- if (D_801C67B0[i] != ITEM_NONE) {
+ for (i = 0; i < ARRAY_COUNT(gAmmoItems); i++) {
+ if (gAmmoItems[i] != ITEM_NONE) {
if ((gSaveContext.save.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) {
item = gSaveContext.save.inventory.items[i];
AMMO(item) = 0;
@@ -412,7 +433,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Inventory_DeleteItem(ITEM_LONGSHOT, SLOT_TRADE_COUPLE);
for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) {
- if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOON_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_MEMORIES) {
+ if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOON_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES) {
SET_CUR_FORM_BTN_ITEM(j, ITEM_NONE);
Interface_LoadItemIconImpl(play, j);
}
@@ -433,8 +454,8 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Sram_ClearHighscores();
for (i = 0; i < 8; i++) {
- gSaveContext.save.inventory.dungeonItems[i] &= (u8)~1;
- gSaveContext.save.inventory.dungeonKeys[i] = 0;
+ gSaveContext.save.inventory.dungeonItems[i] &= (u8)~1; // remove boss key
+ DUNGEON_KEY_COUNT(i) = 0;
gSaveContext.save.inventory.strayFairies[i] = 0;
}
@@ -624,7 +645,9 @@ Inventory sSaveDefaultInventory = {
// dungeonItems
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
// dungeonKeys
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 },
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ // defenceHearts
+ 0,
// strayFairies
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
// dekuPlaygroundPlayerName
@@ -768,7 +791,9 @@ Inventory sSaveDebugInventory = {
// dungeonItems
{ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 },
// dungeonKeys
- { 8, 8, 8, 8, 8, 8, 8, 8, 8, 0 },
+ { 8, 8, 8, 8, 8, 8, 8, 8, 8 },
+ // defenceHearts
+ 0,
// strayFairies
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
// dekuPlaygroundPlayerName
@@ -808,8 +833,8 @@ void Sram_InitDebugSave(void) {
Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.checksum));
if (gSaveContext.save.playerForm != PLAYER_FORM_HUMAN) {
- BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[((void)0, gSaveContext.save.playerForm & 0xFF)];
- C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[((void)0, gSaveContext.save.playerForm & 0xFF)];
+ BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[((void)0, gSaveContext.save.playerForm)];
+ C_SLOT_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A50[((void)0, gSaveContext.save.playerForm)];
}
gSaveContext.save.hasTatl = true;
@@ -887,13 +912,11 @@ void func_80144A94(SramContext* sramCtx) {
u16 D_801C6A58[] = { 0x68B0, 0x6A60, 0xB230, 0x9A80, 0xD890, 0x3E40, 0x8640, 0x84A0, 0x2040, 0xAA30 };
-#ifdef NON_MATCHING
-// Small regalloc between v0/t6/t7
void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
s32 i;
s32 pad;
s32 phi_t1;
- s32 pad1[2];
+ s32 pad1;
s32 fileNum;
if (gSaveContext.unk_3F3F) {
@@ -959,12 +982,11 @@ void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
}
} else {
- gSaveContext.save.entranceIndex = D_801C6A58[gSaveContext.save.owlSaveLocation];
- if (D_801C6A58[gSaveContext.save.owlSaveLocation] == 0x84A0 && (gSaveContext.save.weekEventReg[20] & 2)) {
+ gSaveContext.save.entranceIndex = D_801C6A58[(void)0, gSaveContext.save.owlSaveLocation];
+ if ((gSaveContext.save.entranceIndex == 0x84A0) && (gSaveContext.save.weekEventReg[20] & 2)) {
// Unconfirmed weekEventReg: "Woodfall Temple Prison Entrance raised / Water cleansed"
gSaveContext.save.entranceIndex = 0xCA0;
- } else if (D_801C6A58[gSaveContext.save.owlSaveLocation] == 0x9A80 &&
- (gSaveContext.save.weekEventReg[33] & 0x80)) {
+ } else if ((gSaveContext.save.entranceIndex == 0x9A80) && (gSaveContext.save.weekEventReg[33] & 0x80)) {
// Unconfirmed weekEventReg: "Mountain Village Unfrozen"
gSaveContext.save.entranceIndex = 0xAE80;
}
@@ -988,9 +1010,6 @@ void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
func_80147314(sramCtx, fileNum);
}
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/Sram_OpenSave.s")
-#endif
// Similar to func_80145698, but accounts for owl saves?
void func_8014546C(SramContext* sramCtx) {
@@ -1142,7 +1161,7 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
fileChooseCtx->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
fileChooseCtx->health[sp76] = gSaveContext.save.playerData.health;
- fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.dungeonKeys[9];
+ fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
fileChooseCtx->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
fileChooseCtx->unk_24458[sp76] = gSaveContext.save.time;
fileChooseCtx->unk_24460[sp76] = gSaveContext.save.day;
@@ -1237,7 +1256,7 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
fileChooseCtx->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
fileChooseCtx->health[sp76] = gSaveContext.save.playerData.health;
- fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.dungeonKeys[9];
+ fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
fileChooseCtx->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
fileChooseCtx->unk_24458[sp76] = gSaveContext.save.time;
fileChooseCtx->unk_24460[sp76] = gSaveContext.save.day;
@@ -1350,7 +1369,7 @@ void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
fileChooseCtx->unk_24438[fileChooseCtx->fileNum] = gSaveContext.save.playerData.healthCapacity;
fileChooseCtx->unk_24440[fileChooseCtx->fileNum] = gSaveContext.save.playerData.health;
- fileChooseCtx->unk_24456[fileChooseCtx->fileNum] = gSaveContext.save.inventory.dungeonKeys[9];
+ fileChooseCtx->unk_24456[fileChooseCtx->fileNum] = gSaveContext.save.inventory.defenseHearts;
fileChooseCtx->unk_2444C[fileChooseCtx->fileNum] = gSaveContext.save.inventory.questItems;
fileChooseCtx->unk_2445C[fileChooseCtx->fileNum] = gSaveContext.save.time;
fileChooseCtx->unk_24464[fileChooseCtx->fileNum] = gSaveContext.save.day;
@@ -1393,7 +1412,7 @@ void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
fileChooseCtx->healthCapacity[fileChooseCtx->fileNum] = gSaveContext.save.playerData.healthCapacity;
fileChooseCtx->health[fileChooseCtx->fileNum] = gSaveContext.save.playerData.health;
- fileChooseCtx->unk_24454[fileChooseCtx->fileNum] = gSaveContext.save.inventory.dungeonKeys[9];
+ fileChooseCtx->unk_24454[fileChooseCtx->fileNum] = gSaveContext.save.inventory.defenseHearts;
fileChooseCtx->unk_24444[fileChooseCtx->fileNum] = gSaveContext.save.inventory.questItems;
fileChooseCtx->unk_24458[fileChooseCtx->fileNum] = gSaveContext.save.time;
fileChooseCtx->unk_24460[fileChooseCtx->fileNum] = gSaveContext.save.day;
@@ -1462,7 +1481,7 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
fileChooseCtx->healthCapacity[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.healthCapacity;
fileChooseCtx->health[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.health;
- fileChooseCtx->unk_24454[fileChooseCtx->unk_24480] = gSaveContext.save.inventory.dungeonKeys[9];
+ fileChooseCtx->unk_24454[fileChooseCtx->unk_24480] = gSaveContext.save.inventory.defenseHearts;
fileChooseCtx->unk_24444[fileChooseCtx->unk_24480] = gSaveContext.save.inventory.questItems;
fileChooseCtx->unk_24458[fileChooseCtx->unk_24480] = gSaveContext.save.time;
fileChooseCtx->unk_24460[fileChooseCtx->unk_24480] = gSaveContext.save.day;