diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml
index 2fe3906fb6..1aa57c0107 100644
--- a/assets/xml/objects/object_link_goron.xml
+++ b/assets/xml/objects/object_link_goron.xml
@@ -35,7 +35,7 @@
-
+
@@ -62,7 +62,7 @@
-
+
@@ -72,7 +72,7 @@
-
+
diff --git a/assets/xml/objects/object_link_zora.xml b/assets/xml/objects/object_link_zora.xml
index d36aaa420f..fe5c50ea67 100644
--- a/assets/xml/objects/object_link_zora.xml
+++ b/assets/xml/objects/object_link_zora.xml
@@ -56,7 +56,14 @@
-
+
+
+
+
+
+
+
+
diff --git a/include/functions.h b/include/functions.h
index 61e452f38b..9128e963fb 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -542,7 +542,7 @@ void EffectSsDFire_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* ac
void EffectSsBubble_Spawn(PlayState* play, Vec3f* pos, f32 yPosOffset, f32 yPosRandScale, f32 xzPosRandScale, f32 scale);
void EffectSsGRipple_Spawn(PlayState* play, Vec3f* pos, s16 radius, s16 radiusMax, s16 life);
void EffectSsGSplash_Spawn(PlayState* play, Vec3f* pos, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 type, s16 scale);
-// void EffectSsGFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2);
+void EffectSsGFire_Spawn(PlayState* play, Vec3f* pos);
// void EffectSsLightning_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Color_RGBA8* pzParm3, Color_RGBA8* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8);
void EffectSsDtBubble_SpawnColorProfile(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 life, s16 colorProfile, s16 randXZ);
void EffectSsDtBubble_SpawnCustomColor(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 life, s16 randXZ);
@@ -1123,7 +1123,7 @@ void func_800DFC90(Vec3s* arg0, Camera* camera);
s16 Camera_GetCamDirPitch(Camera* camera);
s16 Camera_GetCamDirYaw(Camera* camera);
void func_800DFD04(Camera* camera, s32 arg1, s32 arg2, s32 arg3);
-// void func_800DFD78(void);
+void func_800DFD78(Camera* camera, s32 paramFlag, void* value);
// UNK_TYPE4 func_800DFEF0(s32 param_1, u16 param_2);
// UNK_TYPE4 func_800DFF18(Camera* iParm1, UNK_TYPE2 uParm2);
// UNK_TYPE4 func_800DFF34(s32 param_1);
@@ -1893,7 +1893,7 @@ void func_801149A0(s32 itemId, s16 slotId);
// void func_80114CA0(void);
s32 Interface_HasEmptyBottle(void);
s32 Interface_HasItemInBottle(u8 itemId);
-// void func_80114FD0(void);
+void func_80114FD0(PlayState* play, u8 itemId, u8 heldItemButton);
// void func_80115130(void);
// void func_801152B8(void);
// void func_801153C8(void);
@@ -1943,108 +1943,86 @@ void func_80121FC4(PlayState* play);
Path* Path_GetByIndex(PlayState* play, s16 index, s16 max);
f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw);
void Path_CopyLastPoint(Path* path, Vec3f* dest);
+
void FrameAdvance_Init(FrameAdvanceContext* frameAdvCtx);
s32 FrameAdvance_Update(FrameAdvanceContext* frameAdvCtx, Input* input);
-void func_801226E0(PlayState* play, s8 arg1);
-void func_80122744(PlayState* play, UNK_PTR arg1, u32 arg2, Vec3s* arg3);
-s32 func_80122760(PlayState* play, UNK_PTR arg1, f32 arg2);
+
+s32 func_801226E0(PlayState* play, s32 arg1);
+s32 func_80122744(PlayState* play, struct_80122744_arg1* arg1, u32 arg2, Vec3s* arg3);
+s32 func_80122760(PlayState* play, struct_80122744_arg1* arg1, f32 arg2);
void func_80122868(PlayState* play, Player* player);
void func_801229A0(PlayState* play, Player* player);
-// void func_801229EC(void);
-// void func_801229FC(void);
-// void func_80122BA4(void);
-// void func_80122C20(void);
-// void func_80122D44(void);
-// void func_80122ED8(void);
-// void func_80122EEC(void);
+void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1);
+void func_801229FC(Player* player);
+void func_80122BA4(PlayState* play, struct_80122D44_arg1* arg1, s32 arg2, s32 alpha);
+void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1);
+void func_80122D44(PlayState* play, struct_80122D44_arg1* arg1);
+u8 Player_MaskIdToItemId(s32 maskIdMinusOne);
+u8 Player_GetCurMaskItemId(PlayState* play);
void func_80122F28(Player* player);
s32 func_80122F9C(PlayState* play);
s32 func_80122FCC(PlayState* play);
void func_8012300C(PlayState* play, s32 arg1);
-void func_8012301C(s32 iParm1, PlayState* play);
+void func_8012301C(Player* player, PlayState* play);
void func_80123140(PlayState* play, Player* player);
-u32 func_80123358(PlayState* play, Player* player);
-s32 Player_InCsMode(GameState* gameState);
-// void func_80123420(void);
-// void func_80123434(void);
-// void func_80123448(void);
-// void func_801234B0(void);
-// void func_801234D4(void);
+s32 Player_InBlockingCsMode(PlayState* play, Player* player);
+s32 Player_InCsMode(PlayState* play);
+s32 func_80123420(Player* player);
+s32 func_80123434(Player* player);
+s32 func_80123448(PlayState* play);
+s32 Player_IsGoronOrDeku(Player* player);
+s32 func_801234D4(PlayState* play);
s32 func_80123590(PlayState* play, Actor* actor);
-// void func_8012364C(void);
+s32 func_8012364C(PlayState* play, Player* player, s32 arg2);
s32 func_80123810(PlayState* play);
-// void func_80123960(void);
-// void func_801239AC(void);
-void func_80123AA4(Player* player, s32 arg1);
-// void func_80123BD4(void);
-// void func_80123C58(void);
-void Player_SetEquipmentData(PlayState* play, Player* this);
-void func_80123D50(PlayState* play, Player* player, UNK_TYPE arg2, UNK_TYPE arg3);
+s32 Player_ActionToModelGroup(Player* player, s32 actionParam);
+void func_801239AC(Player* player);
+void Player_SetModels(Player* player, s32 arg1);
+void Player_SetModelGroup(Player* player, s32 modelGroup);
+void func_80123C58(Player* player);
+void Player_SetEquipmentData(PlayState* play, Player* this);
+void func_80123D50(PlayState* play, Player* player, s32 itemId, s32 actionParam);
void func_80123DA4(Player* player);
-// void func_80123DC0(void);
+void func_80123DC0(Player* player);
void func_80123E90(PlayState* play, Actor* actor);
-void func_80123F2C(PlayState* play, s32 arg1);
-s32 func_80123F48(PlayState* play, Vec3f* arg1, f32 arg2, f32 arg3);
-s32 func_80124020(void);
+s32 func_80123F2C(PlayState* play, s32 ammo);
+s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 yRange);
+u8 Player_GetStrength(void);
u8 Player_GetMask(PlayState* play);
void Player_RemoveMask(PlayState* play);
-s32 func_8012405C(PlayState* play);
-s32 func_80124088(PlayState* play);
-s32 func_801240C8(Player* player);
-// void func_801240DC(void);
-// void func_80124110(void);
-// void func_80124148(void);
-// void func_80124168(void);
-s32 func_80124190(Player* player);
-// void func_801241B4(void);
-// void func_801241E0(void);
-// void func_8012420C(void);
-// void func_8012422C(void);
+s32 Player_HasMirrorShieldEquipped(PlayState* play);
+s32 Player_IsHoldingMirrorShield(PlayState* play);
+s32 Player_IsHoldingHookshot(Player* player);
+s32 func_801240DC(Player* player);
+s32 func_80124110(Player* player, s32 actionParam);
+s32 func_80124148(Player* player);
+s32 Player_ActionToMeleeWeapon(s32 actionParam);
+s32 Player_GetMeleeWeaponHeld(Player* player);
+s32 Player_IsHoldingTwoHandedWeapon(Player* player);
+s32 Player_ActionToBottle(Player* player, s32 actionParam);
+s32 Player_GetBottleHeld(Player* Player);
+s32 Player_ActionToExplosive(Player* player, s32 actionParam);
s32 Player_GetExplosiveHeld(Player* player);
-// void func_80124278(void);
+s32 func_80124278(Actor* actor, s32 arg1);
s32 func_801242B4(Player* player);
-// void func_801242DC(void);
-// void func_80124420(void);
-// void func_80124618(void);
-// void func_801246F4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE1 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11);
-// void func_80124870(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8);
-// void func_80124CC4(void);
-// void func_80124F18(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_80124FF0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE2 param_10);
-// void func_801251C4(void);
-// void func_80125318(void);
-// void func_80125340(void);
-// void func_8012536C(void);
-// void func_801253A4(void);
-// void func_80125500(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
-// void func_80125580(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
-// void func_80125CE0(void);
-// void func_80125D4C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
-// void func_801262C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
-// void func_801263FC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
+s32 func_801242DC(PlayState* play);
+void func_80124420(Player* player);
+void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2);
+void func_801246F4(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor);
+void func_80125318(Vec3f* arg0, Vec3s* arg1);
+void Player_DrawZoraShield(PlayState* play, Player* player);
+void func_80125500(PlayState* play, Player* player, s32 limbIndex, Vec3f* pos, Vec3s* rot);
+s32 func_80125D4C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
+s32 func_801262C8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
+s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* arg3, Vec3f* arg4);
-// void func_801265C8(void);
-// void func_8012669C(void);
-// void func_80126808(void);
-void func_8012697C(PlayState* play, Player* player);
-// void func_80126AB4(void);
-// void func_80126B8C(void);
-// void func_80126BD0(void);
-// void func_801271B0(void);
-// void func_80127438(void);
-// void func_80127488(void);
-// void func_8012754C(void);
-// void func_80127594(void);
-// void func_801278F8(void);
-// void func_80127A60(void);
-// void func_80127B64(void);
-// void func_80127BE8(void);
-// void func_80127DA4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
-// void func_80128388(void);
-// void func_801284A0(void);
-// void func_80128640(void);
-// void func_80128B74(void);
-// void func_80128BD0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE4 param_6);
+void Player_DrawGetItem(PlayState* play, Player* player);
+void func_80126B8C(PlayState* play, Player* player);
+s32 func_80127438(PlayState* play, Player* player, s32 maskId);
+s32 func_80128640(PlayState* play, Player* player, Gfx* dlist);
+void func_80128B74(PlayState* play, Player* player, s32 limbIndex);
+void func_80128BD0(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor);
+
void PreNMI_Stop(PreNMIContext* prenmiCtx);
void PreNMI_Update(PreNMIContext* prenmiCtx);
void PreNMI_Draw(PreNMIContext* prenmiCtx);
diff --git a/include/variables.h b/include/variables.h
index 85f85108c5..9f4ba2353c 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -1160,31 +1160,18 @@ extern UNK_PTR D_801BF5C0;
// extern UNK_TYPE1 D_801BFD8C;
// extern UNK_TYPE1 D_801BFD94;
// extern UNK_TYPE2 D_801BFD98;
-// extern UNK_TYPE1 D_801BFD9E;
+
// extern UNK_TYPE1 D_801BFDD0;
-// extern UNK_TYPE1 D_801BFDE8;
// extern UNK_TYPE1 D_801BFE00;
// extern UNK_TYPE1 D_801BFE14;
// extern UNK_TYPE2 D_801BFF34;
-// extern UNK_TYPE1 D_801BFF3C;
// extern UNK_TYPE1 D_801BFF90;
-// extern UNK_TYPE1 D_801BFF98;
-// extern UNK_TYPE1 D_801BFFA0;
-// extern UNK_TYPE1 D_801BFFB0;
+extern u8 gPlayerModelTypes[][5];
// extern UNK_TYPE1 D_801BFFFC;
-// extern UNK_TYPE1 D_801C0000;
-// extern UNK_TYPE1 D_801C0001;
-// extern UNK_TYPE1 D_801C0002;
-// extern UNK_TYPE1 D_801C0008;
-// extern UNK_TYPE1 D_801C0010;
// extern UNK_TYPE1 D_801C0024;
// extern UNK_TYPE1 D_801C0034;
-// extern UNK_TYPE1 D_801C0040;
// extern UNK_TYPE1 D_801C005C;
-// extern UNK_TYPE1 D_801C0060;
-// extern UNK_TYPE1 D_801C0070;
// extern UNK_TYPE1 D_801C0084;
-// extern UNK_TYPE1 D_801C00A0;
// extern UNK_TYPE1 D_801C00AC;
// extern UNK_TYPE1 D_801C00BC;
// extern UNK_TYPE1 D_801C00D4;
@@ -1204,7 +1191,6 @@ extern UNK_PTR D_801BF5C0;
// extern UNK_TYPE1 D_801C02BC;
// extern UNK_TYPE1 D_801C02D0;
// extern UNK_TYPE1 D_801C02E4;
-extern UNK_PTR D_801C02F8;
// extern UNK_TYPE1 D_801C0340;
// extern UNK_TYPE1 D_801C0368;
// extern UNK_TYPE1 D_801C03A0;
@@ -1222,8 +1208,6 @@ extern UNK_PTR D_801C02F8;
// extern UNK_TYPE1 D_801C05C8;
// extern UNK_TYPE1 D_801C05D8;
// extern UNK_TYPE1 D_801C05F0;
-// extern UNK_TYPE2 D_801C05F2;
-// extern UNK_TYPE1 D_801C05FA;
// extern UNK_TYPE1 D_801C0608;
// extern UNK_TYPE1 D_801C0628;
// extern UNK_TYPE1 D_801C0678;
@@ -1247,14 +1231,12 @@ extern Gfx D_801C0850[];
extern UNK_PTR D_801C0870;
// extern UNK_TYPE1 D_801C0890;
// extern UNK_TYPE1 D_801C08A0;
-// extern UNK_TYPE1 D_801C08A1;
// extern UNK_TYPE1 D_801C08C0;
// extern UNK_TYPE1 D_801C08FC;
// extern UNK_TYPE1 D_801C0910;
// extern UNK_TYPE1 D_801C0924;
// extern UNK_TYPE1 D_801C0938;
// extern UNK_TYPE1 D_801C094C;
-// extern UNK_TYPE4 D_801C0954;
// extern UNK_TYPE4 D_801C0958;
extern UNK_PTR D_801C095C;
// extern UNK_TYPE1 D_801C0964;
@@ -1281,26 +1263,17 @@ extern UNK_PTR D_801C0B0C;
// extern UNK_TYPE1 D_801C0B20;
// extern UNK_TYPE1 D_801C0B90;
// extern UNK_TYPE4 D_801C0BA8;
-// extern UNK_TYPE4 D_801C0BAC;
-// extern UNK_TYPE4 D_801C0BB0;
// extern UNK_TYPE1 D_801C0BB4;
-// extern UNK_TYPE4 D_801C0BB8;
// extern UNK_TYPE1 D_801C0BC0;
// extern UNK_TYPE1 D_801C0BD0;
// extern UNK_TYPE4 D_801C0BE0;
-// extern UNK_TYPE4 D_801C0BE4;
-// extern UNK_TYPE4 D_801C0BE8;
// extern UNK_TYPE4 D_801C0BEC;
-// extern UNK_TYPE4 D_801C0BF0;
-// extern UNK_TYPE4 D_801C0BF4;
// extern UNK_TYPE1 D_801C0BF8;
// extern UNK_TYPE1 D_801C0BFC;
// extern UNK_TYPE1 D_801C0C00;
// extern UNK_TYPE4 D_801C0C0C;
// extern UNK_TYPE1 D_801C0C30;
// extern UNK_TYPE1 D_801C0C54;
-// extern UNK_TYPE1 D_801C0C78;
-// extern UNK_TYPE1 D_801C0C94;
// extern UNK_TYPE1 D_801C0CA8;
// extern UNK_TYPE4 D_801C0CE8;
// extern UNK_TYPE1 D_801C0D24;
@@ -1323,6 +1296,7 @@ extern UNK_PTR D_801C0B0C;
// extern UNK_TYPE1 D_801C0EA0;
// extern UNK_TYPE1 D_801C0EAC;
// extern UNK_TYPE1 D_801C0EB8;
+
extern Gfx sSetupDL[438];
extern Gfx sFillSetupDL[12];
extern Gfx gEmptyDL[1];
@@ -1343,8 +1317,8 @@ extern u8 gItemSlots[];
extern s16 gItemPrices[];
extern u16 gScenesPerRegion[11][27];
extern u32 D_801C2410[];
-extern s16 gLinkFormObjectIndexes[8];
-extern RomFile objectFileTable[643];
+extern s16 gPlayerFormObjectIndices[8];
+extern RomFile gObjectTable[643];
extern SceneTableEntry gSceneTable[];
extern UNK_PTR D_801C5C50;
// extern UNK_TYPE1 D_801C5C9C;
@@ -3212,8 +3186,6 @@ extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F59E0;
// extern UNK_TYPE1 D_801F59E4;
// extern UNK_TYPE1 D_801F59E8;
-// extern UNK_TYPE1 D_801F59EC;
-// extern UNK_TYPE1 D_801F59F0;
// extern UNK_TYPE1 D_801F59F4;
// extern UNK_TYPE1 D_801F59F8;
// extern UNK_TYPE1 sSkyboxDrawMatrix;
diff --git a/include/z64.h b/include/z64.h
index 2c3cd74170..31837e561d 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -552,7 +552,7 @@ typedef struct {
/* 0x214 */ u16 unk_214;
/* 0x218 */ f32 unk_218;
/* 0x21C */ s16 unk_21C;
- /* 0x21E */ s16 unk_21E;
+ /* 0x21E */ s16 bButtonDoAction;
/* 0x220 */ s16 unk_220;
/* 0x222 */ s16 unk_222;
/* 0x224 */ s16 unk_224;
@@ -1300,7 +1300,7 @@ struct PlayState {
/* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor);
/* 0x1878C */ void (*unk_1878C)(struct PlayState* play);
/* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1, Actor* actor);
- /* 0x18794 */ void* unk_18794; //! @TODO: Determine function prototype
+ /* 0x18794 */ s32 (*unk_18794)(struct PlayState* play, Player* player, s32 arg2, s32 arg3);
/* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, void* talkAnim, s32 arg2);
/* 0x1879C */ s16 playerActorCsIds[10];
/* 0x187B0 */ MtxF viewProjectionMtxF;
@@ -1327,7 +1327,7 @@ struct PlayState {
/* 0x18876 */ s16 unk_18876;
/* 0x18878 */ s16 bgCoverAlpha;
/* 0x1887A */ u16 nextEntranceIndex;
- /* 0x1887C */ s8 unk_1887C;
+ /* 0x1887C */ s8 unk_1887C; // shootingGalleryStatus?
/* 0x1887D */ s8 unk_1887D;
/* 0x1887E */ s8 unk_1887E;
/* 0x1887F */ u8 unk_1887F; // fadeTransition
diff --git a/include/z64actor.h b/include/z64actor.h
index 8412e735d4..92d656c9f7 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -80,6 +80,11 @@ typedef struct {
/* 0x3A */ s16 unk3A;
} ActorEnTest20C; // size = 0x3C
+typedef struct {
+ /* 0x0 */ s16 unk_0; // frame?
+ /* 0x2 */ Vec3s unk_2; // pos?
+} struct_80124618; // size = 0x8
+
typedef struct {
/* 0x00 */ s16 id;
/* 0x02 */ u8 type;
diff --git a/include/z64item.h b/include/z64item.h
index a8c401f63b..972b729cc8 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -261,7 +261,10 @@ typedef enum {
/* 0xA1 */ ITEM_GOLD_DUST_2,
/* 0xA2 */ ITEM_HYLIAN_LOACH_2,
/* 0xA3 */ ITEM_SEA_HORSE_CAUGHT,
- /* 0xFD */ ITEM_UNK_FD = 0xFD,
+ /* 0xF0 */ ITEM_F0 = 0xF0,
+ /* 0xF1 */ ITEM_F1,
+ /* 0xF2 */ ITEM_F2,
+ /* 0xFD */ ITEM_FD = 0xFD,
/* 0xFF */ ITEM_NONE = 0xFF
} ItemID;
diff --git a/include/z64player.h b/include/z64player.h
index b37a5335fd..86adaea1e0 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -24,6 +24,14 @@ typedef enum {
/* 0x07 */ PLAYER_BOOTS_MAX
} PlayerBoots;
+typedef enum {
+ /* 0x00 */ PLAYER_STRENGTH_DEKU,
+ /* 0x01 */ PLAYER_STRENGTH_HUMAN,
+ /* 0x02 */ PLAYER_STRENGTH_ZORA,
+ /* 0x03 */ PLAYER_STRENGTH_GORON,
+ /* 0x04 */ PLAYER_STRENGTH_MAX
+} PlayerStrength;
+
typedef enum {
/* 0x00 */ PLAYER_FORM_FIERCE_DEITY,
/* 0x01 */ PLAYER_FORM_GORON,
@@ -64,14 +72,14 @@ typedef enum {
typedef enum {
/* 0x00 */ PLAYER_AP_NONE,
- /* 0x01 */ PLAYER_AP_UNK_1,
- /* 0x02 */ PLAYER_AP_UNK_2,
+ /* 0x01 */ PLAYER_AP_LAST_USED,
+ /* 0x02 */ PLAYER_AP_FISHING_POLE,
/* 0x03 */ PLAYER_AP_SWORD_KOKIRI,
/* 0x04 */ PLAYER_AP_SWORD_RAZOR,
/* 0x05 */ PLAYER_AP_SWORD_GILDED,
/* 0x06 */ PLAYER_AP_SWORD_GREAT_FAIRY,
/* 0x07 */ PLAYER_AP_STICK,
- /* 0x08 */ PLAYER_AP_UNK_8,
+ /* 0x08 */ PLAYER_AP_ZORA_FINS,
/* 0x09 */ PLAYER_AP_BOW,
/* 0x0A */ PLAYER_AP_BOW_FIRE,
/* 0x0B */ PLAYER_AP_BOW_ICE,
@@ -141,6 +149,44 @@ typedef enum {
/* 0xFD */ PLAYER_AP_MAX = 0xFD
} PlayerActionParam;
+typedef enum {
+ /* 0 */ PLAYER_MWA_FORWARD_SLASH_1H, // Vertical one-handed slash
+ /* 1 */ PLAYER_MWA_FORWARD_SLASH_2H, // Vertical two-handed slash
+ /* 2 */ PLAYER_MWA_FORWARD_COMBO_1H, // Third vertical one-handed slash
+ /* 3 */ PLAYER_MWA_FORWARD_COMBO_2H, // Third vertical two-handed slash
+ /* 4 */ PLAYER_MWA_RIGHT_SLASH_1H, // Horizontal one-handed slash
+ /* 5 */ PLAYER_MWA_RIGHT_SLASH_2H, // Horizontal two-handed slash
+ /* 6 */ PLAYER_MWA_RIGHT_COMBO_1H, // Third horizontal one-handed slash
+ /* 7 */ PLAYER_MWA_RIGHT_COMBO_2H, // Third horizontal two-handed slash
+ /* 8 */ PLAYER_MWA_LEFT_SLASH_1H, // Targeted one-handed rightwalk slash
+ /* 9 */ PLAYER_MWA_LEFT_SLASH_2H, // Targeted two-handed rightwalk slash
+ /* 10 */ PLAYER_MWA_LEFT_COMBO_1H, // Third targeted one-handed rightwalk slash
+ /* 11 */ PLAYER_MWA_LEFT_COMBO_2H, // Third targeted two-handed rightwalk slash
+ /* 12 */ PLAYER_MWA_STAB_1H, // Crouch stab/targeted one-handed stab
+ /* 13 */ PLAYER_MWA_STAB_2H, // Targeted two-handed stab
+ /* 14 */ PLAYER_MWA_STAB_COMBO_1H, // Third targeted one-handed stab
+ /* 15 */ PLAYER_MWA_STAB_COMBO_2H, // Third targeted two-handed stab
+ /* 16 */ PLAYER_MWA_FLIPSLASH_START, // unused
+ /* 17 */ PLAYER_MWA_JUMPSLASH_START, // Start of jumpslash
+ /* 18 */ PLAYER_MWA_ZORA_JUMPKICK_START, // Start of Zora jump attack
+ /* 19 */ PLAYER_MWA_FLIPSLASH_FINISH, // unused
+ /* 20 */ PLAYER_MWA_JUMPSLASH_FINISH, // End of jumpslash
+ /* 21 */ PLAYER_MWA_ZORA_JUMPKICK_FINISH, // End of Zora jump attack
+ /* 22 */ PLAYER_MWA_BACKSLASH_RIGHT, // unused
+ /* 23 */ PLAYER_MWA_BACKSLASH_LEFT, // unused
+ /* 24 */ PLAYER_MWA_GORON_PUNCH_LEFT, // Goron punch
+ /* 25 */ PLAYER_MWA_GORON_PUNCH_RIGHT, // Second Goron punch
+ /* 26 */ PLAYER_MWA_GORON_PUNCH_BUTT, // Goron butt punch
+ /* 27 */ PLAYER_MWA_ZORA_PUNCH_LEFT, // Zora punch
+ /* 28 */ PLAYER_MWA_ZORA_PUNCH_COMBO, // Second Zora punch
+ /* 29 */ PLAYER_MWA_ZORA_PUNCH_KICK, // Zora kick
+ /* 30 */ PLAYER_MWA_SPIN_ATTACK_1H, // Half-charged one-handed spin
+ /* 31 */ PLAYER_MWA_SPIN_ATTACK_2H, // Half-charged two-handed spin
+ /* 32 */ PLAYER_MWA_BIG_SPIN_1H, // Fully-charged one-handed spin
+ /* 33 */ PLAYER_MWA_BIG_SPIN_2H, // Fully-charged two-handed spin
+ /* 34 */ PLAYER_MWA_MAX
+} PlayerMeleeWeaponAnimation;
+
typedef struct {
/* 0x00 */ f32 unk_00;
/* 0x04 */ f32 unk_04;
@@ -178,7 +224,6 @@ typedef struct {
/* 0xD4 */ LinkAnimationHeader* unk_D4[2];
} PlayerAgeProperties; // size = 0xDC
-
typedef struct {
/* 0x00 */ s32 active;
/* 0x04 */ Vec3f tip;
@@ -188,6 +233,226 @@ typedef struct {
typedef void (*PlayerFuncD58)(struct PlayState*, struct Player*);
+typedef struct {
+ /* 0x00 */ u8 unk_00;
+ /* 0x01 */ u8 alpha;
+ /* 0x02 */ char unk_02[2]; // probably alignment padding
+ /* 0x04 */ MtxF mf;
+} struct_80122D44_arg1_unk_04; // size = 0x44
+
+typedef struct {
+ /* 0x00 */ u8 unk_00;
+ /* 0x01 */ s8 unk_01;
+ /* 0x02 */ char unk_02[2]; // probably alignment padding
+ /* 0x04 */ struct_80122D44_arg1_unk_04 unk_04[4];
+} struct_80122D44_arg1; // size >= 0x114
+
+typedef struct struct_80122744_arg1 {
+ /* 0x00 */ s8 unk_00;
+ /* 0x01 */ s8 unk_01;
+ /* 0x02 */ s8 unk_02;
+ /* 0x03 */ s8 unk_03;
+ /* 0x04 */ Vec3s* unk_04;
+} struct_80122744_arg1; // size = 0x08
+
+//
+#define PLAYER_STATE1_1 (1 << 0)
+//
+#define PLAYER_STATE1_2 (1 << 1)
+//
+#define PLAYER_STATE1_4 (1 << 2)
+//
+#define PLAYER_STATE1_8 (1 << 3)
+//
+#define PLAYER_STATE1_10 (1 << 4)
+//
+#define PLAYER_STATE1_20 (1 << 5)
+//
+#define PLAYER_STATE1_40 (1 << 6)
+//
+#define PLAYER_STATE1_80 (1 << 7)
+//
+#define PLAYER_STATE1_100 (1 << 8)
+//
+#define PLAYER_STATE1_200 (1 << 9)
+//
+#define PLAYER_STATE1_400 (1 << 10)
+//
+#define PLAYER_STATE1_800 (1 << 11)
+//
+#define PLAYER_STATE1_1000 (1 << 12)
+//
+#define PLAYER_STATE1_2000 (1 << 13)
+//
+#define PLAYER_STATE1_4000 (1 << 14)
+//
+#define PLAYER_STATE1_8000 (1 << 15)
+//
+#define PLAYER_STATE1_10000 (1 << 16)
+//
+#define PLAYER_STATE1_20000 (1 << 17)
+//
+#define PLAYER_STATE1_40000 (1 << 18)
+//
+#define PLAYER_STATE1_80000 (1 << 19)
+//
+#define PLAYER_STATE1_100000 (1 << 20)
+//
+#define PLAYER_STATE1_200000 (1 << 21)
+//
+#define PLAYER_STATE1_400000 (1 << 22)
+//
+#define PLAYER_STATE1_800000 (1 << 23)
+//
+#define PLAYER_STATE1_1000000 (1 << 24)
+//
+#define PLAYER_STATE1_2000000 (1 << 25)
+//
+#define PLAYER_STATE1_4000000 (1 << 26)
+// Swimming?
+#define PLAYER_STATE1_8000000 (1 << 27)
+//
+#define PLAYER_STATE1_10000000 (1 << 28)
+//
+#define PLAYER_STATE1_20000000 (1 << 29)
+//
+#define PLAYER_STATE1_40000000 (1 << 30)
+//
+#define PLAYER_STATE1_80000000 (1 << 31)
+
+
+//
+#define PLAYER_STATE2_1 (1 << 0)
+//
+#define PLAYER_STATE2_2 (1 << 1)
+//
+#define PLAYER_STATE2_4 (1 << 2)
+//
+#define PLAYER_STATE2_8 (1 << 3)
+//
+#define PLAYER_STATE2_10 (1 << 4)
+//
+#define PLAYER_STATE2_20 (1 << 5)
+//
+#define PLAYER_STATE2_40 (1 << 6)
+//
+#define PLAYER_STATE2_80 (1 << 7)
+//
+#define PLAYER_STATE2_100 (1 << 8)
+//
+#define PLAYER_STATE2_200 (1 << 9)
+//
+#define PLAYER_STATE2_400 (1 << 10)
+//
+#define PLAYER_STATE2_800 (1 << 11)
+//
+#define PLAYER_STATE2_1000 (1 << 12)
+//
+#define PLAYER_STATE2_2000 (1 << 13)
+//
+#define PLAYER_STATE2_4000 (1 << 14)
+//
+#define PLAYER_STATE2_8000 (1 << 15)
+//
+#define PLAYER_STATE2_10000 (1 << 16)
+//
+#define PLAYER_STATE2_20000 (1 << 17)
+//
+#define PLAYER_STATE2_40000 (1 << 18)
+//
+#define PLAYER_STATE2_80000 (1 << 19)
+//
+#define PLAYER_STATE2_100000 (1 << 20)
+//
+#define PLAYER_STATE2_200000 (1 << 21)
+//
+#define PLAYER_STATE2_400000 (1 << 22)
+//
+#define PLAYER_STATE2_800000 (1 << 23)
+//
+#define PLAYER_STATE2_1000000 (1 << 24)
+//
+#define PLAYER_STATE2_2000000 (1 << 25)
+//
+#define PLAYER_STATE2_4000000 (1 << 26)
+//
+#define PLAYER_STATE2_8000000 (1 << 27)
+//
+#define PLAYER_STATE2_10000000 (1 << 28)
+//
+#define PLAYER_STATE2_20000000 (1 << 29)
+//
+#define PLAYER_STATE2_40000000 (1 << 30)
+//
+#define PLAYER_STATE2_80000000 (1 << 31)
+
+
+//
+#define PLAYER_STATE3_1 (1 << 0)
+//
+#define PLAYER_STATE3_2 (1 << 1)
+//
+#define PLAYER_STATE3_4 (1 << 2)
+//
+#define PLAYER_STATE3_8 (1 << 3)
+//
+#define PLAYER_STATE3_10 (1 << 4)
+//
+#define PLAYER_STATE3_20 (1 << 5)
+//
+#define PLAYER_STATE3_40 (1 << 6)
+//
+#define PLAYER_STATE3_80 (1 << 7)
+//
+#define PLAYER_STATE3_100 (1 << 8)
+//
+#define PLAYER_STATE3_200 (1 << 9)
+//
+#define PLAYER_STATE3_400 (1 << 10)
+//
+#define PLAYER_STATE3_800 (1 << 11)
+//
+#define PLAYER_STATE3_1000 (1 << 12)
+//
+#define PLAYER_STATE3_2000 (1 << 13)
+//
+#define PLAYER_STATE3_4000 (1 << 14)
+//
+#define PLAYER_STATE3_8000 (1 << 15)
+//
+#define PLAYER_STATE3_10000 (1 << 16)
+//
+#define PLAYER_STATE3_20000 (1 << 17)
+//
+#define PLAYER_STATE3_40000 (1 << 18)
+//
+#define PLAYER_STATE3_80000 (1 << 19)
+//
+#define PLAYER_STATE3_100000 (1 << 20)
+//
+#define PLAYER_STATE3_200000 (1 << 21)
+//
+#define PLAYER_STATE3_400000 (1 << 22)
+//
+#define PLAYER_STATE3_800000 (1 << 23)
+//
+#define PLAYER_STATE3_1000000 (1 << 24)
+//
+#define PLAYER_STATE3_2000000 (1 << 25)
+//
+#define PLAYER_STATE3_4000000 (1 << 26)
+//
+#define PLAYER_STATE3_8000000 (1 << 27)
+//
+#define PLAYER_STATE3_10000000 (1 << 28)
+// breman mask march?
+#define PLAYER_STATE3_20000000 (1 << 29)
+//
+#define PLAYER_STATE3_40000000 (1 << 30)
+//
+#define PLAYER_STATE3_80000000 (1 << 31)
+
+
typedef struct Player {
/* 0x000 */ Actor actor;
/* 0x144 */ s8 currentShield;
@@ -238,7 +503,7 @@ typedef struct Player {
/* 0x1DC */ OSMesgQueue giObjectLoadQueue;
/* 0x1F4 */ OSMesg giObjectLoadMsg;
/* 0x1F8 */ void* giObjectSegment;
- /* 0x1FC */ u8 maskObjectLoading;
+ /* 0x1FC */ u8 maskObjectLoadState;
/* 0x1FD */ s8 maskId;
/* 0x200 */ DmaRequest maskDmaRequest;
/* 0x220 */ OSMesgQueue maskObjectLoadQueue;
@@ -266,7 +531,7 @@ typedef struct Player {
/* 0x38C */ s8 mountSide;
/* 0x390 */ Actor* rideActor;
/* 0x394 */ u8 csMode;
- /* 0x395 */ u8 unk_395;
+ /* 0x395 */ u8 unk_395; // prevCsMode?
/* 0x396 */ u8 unk_396;
/* 0x397 */ u8 unk_397;
/* 0x398 */ Actor* unk_398;
@@ -282,15 +547,16 @@ typedef struct Player {
/* 0x3CC */ s16 unk_3CC;
/* 0x3CE */ s8 unk_3CE;
/* 0x3CF */ u8 unk_3CF;
- /* 0x3D0 */ char unk_3D0[0x148];
+ /* 0x3D0 */ struct_80122D44_arg1 unk_3D0;
+ /* 0x404 */ UNK_TYPE1 unk_404[0x34];
/* 0x518 */ ColliderCylinder cylinder;
- /* 0x564 */ ColliderQuad swordQuads[2];
+ /* 0x564 */ ColliderQuad meleeWeaponQuads[2];
/* 0x664 */ ColliderQuad shieldQuad;
/* 0x6E4 */ ColliderCylinder shieldCylinder;
/* 0x730 */ Actor* unk_730;
/* 0x734 */ char unk_734[4];
/* 0x738 */ s32 unk_738;
- /* 0x73C */ s32 blureEffectIndex[3];
+ /* 0x73C */ s32 meleeWeaponEffectIndex[3];
/* 0x748 */ char unk_748[0x320];
/* 0xA68 */ PlayerAgeProperties* ageProperties; // repurposed as "transformation properties"?
/* 0xA6C */ u32 stateFlags1;
@@ -328,8 +594,8 @@ typedef struct Player {
/* 0xAD4 */ s16 currentYaw;
/* 0xAD6 */ s16 targetYaw;
/* 0xAD8 */ u16 unk_AD8;
- /* 0xADA */ s8 swordAnimation;
- /* 0xADB */ s8 swordState;
+ /* 0xADA */ s8 meleeWeaponAnimation;
+ /* 0xADB */ s8 meleeWeaponState;
/* 0xADC */ s8 unk_ADC;
/* 0xADD */ s8 unk_ADD;
/* 0xADE */ u8 unk_ADE;
@@ -389,7 +655,7 @@ typedef struct Player {
/* 0xB92 */ s16 unk_B92;
/* 0xB94 */ s16 unk_B94;
/* 0xB96 */ s16 unk_B96;
- /* 0xB98 */ WeaponInfo swordInfo[3];
+ /* 0xB98 */ WeaponInfo meleeWeaponInfo[3];
/* 0xBEC */ Vec3f bodyPartsPos[18];
/* 0xCC4 */ MtxF mf_CC4;
/* 0xD04 */ MtxF shieldMf;
diff --git a/include/z64save.h b/include/z64save.h
index 86bfe491d0..96db416ad3 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -11,10 +11,10 @@ struct FileChooseContext;
// TODO: properly name DOWN, RETURN and TOP
typedef enum RespawnMode {
- /* 0 */ RESTART_MODE_DOWN, // "RESTART_MODE_DOWN"
- /* 1 */ RESTART_MODE_RETURN, // "RESTART_MODE_RETURN"
- /* 2 */ RESTART_MODE_TOP, // "RESTART_MODE_TOP"
- /* 3 */ RESPAWN_MODE_UNK_3, // Maybe related to grottos
+ /* 0 */ RESPAWN_MODE_DOWN, // "RESTART_MODE_DOWN"
+ /* 1 */ RESPAWN_MODE_RETURN, // "RESTART_MODE_RETURN"
+ /* 2 */ RESPAWN_MODE_TOP, // "RESTART_MODE_TOP"
+ /* 3 */ RESPAWN_MODE_UNK_3, // Related to grottos
/* 4 */ RESPAWN_MODE_GORON, // "RESTART_MODE_GORON"
/* 5 */ RESPAWN_MODE_ZORA, // "RESTART_MODE_ZORA"
/* 6 */ RESPAWN_MODE_DEKU, // "RESTART_MODE_NUTS"
diff --git a/include/z64scene.h b/include/z64scene.h
index e4a03aa166..55a530db30 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -260,7 +260,7 @@ typedef union {
typedef struct {
/* 0x00 */ s8 num;
/* 0x01 */ u8 unk1;
- /* 0x02 */ u8 unk2;
+ /* 0x02 */ u8 unk2; // 3: Room is hot
/* 0x03 */ u8 unk3;
/* 0x04 */ s8 echo;
/* 0x05 */ u8 unk5;
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index ea3c30aa6f..e7ff5b7bfa 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -481,8 +481,8 @@ s32 Inventory_GetBtnBItem(PlayState* play) {
return ITEM_NONE;
} else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) {
if (play->interfaceCtx.unk_21C != 0) {
- if (play->interfaceCtx.unk_21E != 0) {
- return play->interfaceCtx.unk_21E;
+ if (play->interfaceCtx.bButtonDoAction != 0) {
+ return play->interfaceCtx.bButtonDoAction;
}
}
return ITEM_NONE;
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 7609f163a3..34d32736fd 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -1856,8 +1856,7 @@ s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) {
s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemId) {
Player* player = GET_PLAYER(play);
- if ((player->actor.flags & ACTOR_FLAG_100) ||
- ((exchangeItemId > EXCH_ITEM_NONE) && Player_InCsMode(&play->state)) ||
+ if ((player->actor.flags & ACTOR_FLAG_100) || ((exchangeItemId > EXCH_ITEM_NONE) && Player_InCsMode(play)) ||
(!actor->isTargeted &&
((fabsf(actor->playerHeightRel) > fabsf(yRange)) || ((actor->xzDistToPlayer > player->targetActorDistance)) ||
(xzRange < actor->xzDistToPlayer)))) {
@@ -1933,7 +1932,7 @@ s32 func_800B8718(Actor* actor, GameState* gameState) {
s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange) {
Player* player = GET_PLAYER(play);
- if ((player->actor.flags & ACTOR_FLAG_20000000) || Player_InCsMode(&play->state) ||
+ if ((player->actor.flags & ACTOR_FLAG_20000000) || Player_InCsMode(play) ||
(yRange < fabsf(actor->playerHeightRel)) || ((player->unk_A94 < actor->xzDistToPlayer)) ||
(xzRange < actor->xzDistToPlayer)) {
return false;
@@ -2205,8 +2204,8 @@ void func_800B9098(Actor* actor) {
actor->audioFlags |= 0x40;
}
-s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 index, s32 arg4) {
- if (func_800C99D4(&play->colCtx, polygon, index) == 8) {
+s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, s32 arg4) {
+ if (func_800C99D4(&play->colCtx, polygon, bgId) == 8) {
return true;
}
@@ -4352,7 +4351,7 @@ s32 func_800BE184(PlayState* play, Actor* actor, f32 xzDist, s16 arg3, s16 arg4,
s16 phi_v0 = BINANG_SUB(BINANG_ROT180(actor->yawTowardsPlayer), player->actor.shape.rot.y);
s16 temp_t0 = actor->yawTowardsPlayer - arg5;
- if ((actor->xzDistToPlayer <= xzDist) && (player->swordState != 0)) {
+ if ((actor->xzDistToPlayer <= xzDist) && (player->meleeWeaponState != 0)) {
if ((arg4 >= ABS_ALT(phi_v0)) && (arg3 >= ABS_ALT(temp_t0))) {
return true;
}
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 1367198c11..60f9e13d1c 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1454,7 +1454,7 @@ void func_800EDA04(PlayState* play, CutsceneContext* csCtx) {
}
void func_800EDA84(PlayState* play, CutsceneContext* csCtx) {
- if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0) && !Player_InCsMode(&play->state)) {
+ if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_0) && !Player_InCsMode(play)) {
gSaveContext.save.cutscene = 0xFFFD;
}
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index 97d5d8373b..e1fb63fa10 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -119,7 +119,7 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) {
FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_3);
}
if ((fire->flags & 2) && (player->itemActionParam == PLAYER_AP_STICK)) {
- Math_Vec3f_Diff(&player->swordInfo[0].tip, &fire->position, &dist);
+ Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist);
if (Math3D_LengthSquared(&dist) < 400.0f) {
sp40 = true;
}
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index c31cf00164..900f46e8f4 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -398,7 +398,7 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) {
if (interfaceCtx->lifeSizeChange <= 0) {
interfaceCtx->lifeSizeChange = 0;
interfaceCtx->lifeSizeChangeDirection = 0;
- if (!Player_InCsMode(&play->state) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
+ if (!Player_InCsMode(play) && (play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
LifeMeter_IsCritical() && !Play_InCsMode(play)) {
play_sound(NA_SE_SY_HITPOINT_ALARM);
}
diff --git a/src/code/z_play.c b/src/code/z_play.c
index e9f5803d21..c7764c1ef7 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -59,7 +59,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Update.s")
s32 Play_InCsMode(PlayState* this) {
- return (this->csCtx.state != 0) || Player_InCsMode(&this->state);
+ return (this->csCtx.state != 0) || Player_InCsMode(this);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80169100.s")
@@ -209,10 +209,10 @@ void func_80169ECC(PlayState* this) {
void func_80169EFC(GameState* thisx) {
PlayState* this = (PlayState*)thisx;
- gSaveContext.respawn[RESTART_MODE_DOWN].tempSwitchFlags = this->actorCtx.flags.switches[2];
- gSaveContext.respawn[RESTART_MODE_DOWN].unk_18 = this->actorCtx.flags.collectible[1];
- gSaveContext.respawn[RESTART_MODE_DOWN].tempCollectFlags = this->actorCtx.flags.collectible[2];
- this->nextEntranceIndex = gSaveContext.respawn[RESTART_MODE_DOWN].entranceIndex;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwitchFlags = this->actorCtx.flags.switches[2];
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].unk_18 = this->actorCtx.flags.collectible[1];
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags = this->actorCtx.flags.collectible[2];
+ this->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex;
gSaveContext.respawnFlag = 1;
func_80169ECC(this);
this->sceneLoadFlag = 0x14;
@@ -224,7 +224,7 @@ void func_80169EFC(GameState* thisx) {
void func_80169F78(GameState* thisx) {
PlayState* this = (PlayState*)thisx;
- this->nextEntranceIndex = gSaveContext.respawn[RESTART_MODE_TOP].entranceIndex;
+ this->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex;
gSaveContext.respawnFlag = -1;
func_80169ECC(this);
this->sceneLoadFlag = 0x14;
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index cb3d14e8b2..f373b03379 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -1,130 +1,924 @@
#include "global.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801226E0.s")
+#include "objects/object_link_goron/object_link_goron.h"
+#include "objects/object_link_zora/object_link_zora.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122744.s")
+#include "objects/object_mask_meoto/object_mask_meoto.h"
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122760.s")
+void PlayerCall_Init(Actor* thisx, PlayState* play);
+void PlayerCall_Destroy(Actor* thisx, PlayState* play);
+void PlayerCall_Update(Actor* thisx, PlayState* play);
+void PlayerCall_Draw(Actor* thisx, PlayState* play);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122868.s")
+typedef struct {
+ /* 0x00 */ Vec3f unk_00;
+ /* 0x0C */ Vec3f unk_0C;
+ /* 0x18 */ s16 unk_18;
+ /* 0x1A */ s16 unk_1A;
+} struct_801F58B0; // size = 0x1C
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801229A0.s")
+extern struct_801F58B0 D_801F58B0[3][3];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801229EC.s")
+extern s32 D_801F59C8[2];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801229FC.s")
+extern s32 D_801F59E0;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122BA4.s")
+extern Vec3f D_801F59E8;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122C20.s")
+void func_80127B64(struct_801F58B0 arg0[], UNK_TYPE arg1, Vec3f* arg2);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122D44.s")
+s32 func_801226E0(PlayState* play, s32 arg1) {
+ if (arg1 == 0) {
+ Play_SetupRespawnPoint(&play->state, RESPAWN_MODE_DOWN, 0xBFF);
+ if (play->sceneNum == SCENE_KAKUSIANA) {
+ return 1;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122ED8.s")
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 0;
+ return arg1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122EEC.s")
+s32 func_80122744(PlayState* play, struct_80122744_arg1* arg1, u32 arg2, Vec3s* arg3) {
+ arg1->unk_00 = arg2;
+ arg1->unk_01 = 0;
+ arg1->unk_04 = arg3;
+ return 1;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122F28.s")
+s32 func_80122760(PlayState* play, struct_80122744_arg1* arg1, f32 arg2) {
+ if (arg1->unk_01 < arg1->unk_00) {
+ Player* player = GET_PLAYER(play);
+ Vec3f sp30;
+ s32 pad;
+ s16 yaw;
+ f32 distXZ;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122F9C.s")
+ Math_Vec3s_ToVec3f(&sp30, &arg1->unk_04[arg1->unk_01]);
+ yaw = Math_Vec3f_Yaw(&player->actor.world.pos, &sp30);
+ func_800B6F20(play, &play->actorCtx.unk_26C, arg2, yaw);
+ play->actorCtx.unk268 = 1;
+ distXZ = Math_Vec3f_DistXZ(&player->actor.world.pos, &sp30);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80122FCC.s")
+ if ((fabsf(player->actor.world.pos.y - sp30.y) < 50.0f) && (distXZ < arg2)) {
+ arg1->unk_01++;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012300C.s")
+ return false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012301C.s")
+ return true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123140.s")
+void func_80122868(PlayState* play, Player* player) {
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123358.s")
+ if (player->invincibilityTimer > 0) {
+ s32 phi_v0 = 50 - player->invincibilityTimer;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_InCsMode.s")
+ phi_v0 = CLAMP(phi_v0, 8, 40);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123420.s")
+ player->unk_B5F += phi_v0;
+ POLY_OPA_DISP =
+ Gfx_SetFog(POLY_OPA_DISP, 255, 0, 0, 0, 0, 4000 - (s32)(Math_CosS(player->unk_B5F << 8) * 2000.0f));
+ } else if (gSaveContext.jinxTimer != 0) {
+ player->unk_B5F += 10;
+ POLY_OPA_DISP =
+ Gfx_SetFog(POLY_OPA_DISP, 0, 0, 255, 0, 0, 4000 - (s32)(Math_CosS(player->unk_B5F << 8) * 2000.0f));
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123434.s")
+ CLOSE_DISPS(play->state.gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123448.s")
+void func_801229A0(PlayState* play, Player* player) {
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801234B0.s")
+ if ((gSaveContext.jinxTimer != 0) || (player->invincibilityTimer > 0)) {
+ POLY_OPA_DISP = func_801660B8(play, POLY_OPA_DISP);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801234D4.s")
+ CLOSE_DISPS(play->state.gfxCtx);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123590.s")
+void func_801229EC(UNK_TYPE arg0, UNK_TYPE arg1) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801235DC.s")
+extern s16 sMaskObjectIds[PLAYER_MASK_MAX - 1];
+#if 0
+s16 sMaskObjectIds[PLAYER_MASK_MAX - 1] = {
+ OBJECT_MASK_TRUTH, OBJECT_MASK_KERFAY, OBJECT_MASK_YOFUKASI, OBJECT_MASK_RABIT, OBJECT_MASK_KI_TAN,
+ OBJECT_MASK_JSON, OBJECT_MASK_ROMERNY, OBJECT_MASK_ZACHO, OBJECT_MASK_POSTHAT, OBJECT_MASK_MEOTO,
+ OBJECT_MASK_BIGELF, OBJECT_MASK_GIBUDO, OBJECT_MASK_GERO, OBJECT_MASK_DANCER, OBJECT_MASK_SKJ,
+ OBJECT_MASK_STONE, OBJECT_MASK_BREE, OBJECT_MASK_BAKURETU, OBJECT_MASK_BU_SAN, OBJECT_MASK_KYOJIN,
+ OBJECT_MASK_BOY, OBJECT_MASK_GORON, OBJECT_MASK_ZORA, OBJECT_MASK_NUTS,
+};
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012364C.s")
+// Load mask object?
+/**
+ * Notes:
+ *
+ * player->maskObjectLoadState seems to be able to take 3 possible values
+ * 0: The mask object is loaded.
+ * 1: The mask object must be changed (and the DMA request has not been sent yet)
+ * 2: Waiting for the DMA request to complete.
+ */
+void func_801229FC(Player* player) {
+ if (player->maskObjectLoadState == 1) {
+ s16 objectId = sMaskObjectIds[(u8)player->maskId - 1];
+
+ osCreateMesgQueue(&player->maskObjectLoadQueue, &player->maskObjectLoadMsg, 1);
+ DmaMgr_SendRequestImpl(&player->maskDmaRequest, player->maskObjectSegment, gObjectTable[objectId].vromStart,
+ gObjectTable[objectId].vromEnd - gObjectTable[objectId].vromStart, 0,
+ &player->maskObjectLoadQueue, NULL);
+ player->maskObjectLoadState++;
+ } else if (player->maskObjectLoadState == 2) {
+ if (osRecvMesg(&player->maskObjectLoadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
+ player->maskObjectLoadState = 0;
+
+ if (player->currentMask == PLAYER_MASK_GREAT_FAIRY) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(D_801F58B0); i++) {
+ func_80127B64(D_801F58B0[i], ARRAY_COUNT(D_801F58B0[i]), &player->bodyPartsPos[7]);
+ }
+ }
+ }
+ } else if ((player->currentMask != PLAYER_MASK_NONE) && (player->currentMask != (u8)player->maskId)) {
+ player->maskObjectLoadState = 1;
+ player->maskId = player->currentMask;
+ } else if (player->currentMask == PLAYER_MASK_CIRCUS_LEADER) {
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(D_801F59C8); i++) {
+ D_801F59C8[i] += Rand_S16Offset(4, 23) + (s32)(fabsf(player->linearVelocity) * 50.0f);
+ }
+ }
+}
+
+void func_80122BA4(PlayState* play, struct_80122D44_arg1* arg1, s32 arg2, s32 alpha) {
+ if (arg2 == arg1->unk_00) {
+ s32 index;
+
+ arg1->unk_01--;
+ if (arg1->unk_01 < 0) {
+ arg1->unk_01 = 3;
+ }
+
+ index = arg1->unk_01;
+ arg1->unk_04[index].unk_00 = arg1->unk_00;
+ arg1->unk_04[index].alpha = alpha;
+ Matrix_Get(&arg1->unk_04[index].mf);
+
+ arg1->unk_00 = 0;
+ }
+}
+
+void func_80122C20(PlayState* play, struct_80122D44_arg1* arg1) {
+ struct_80122D44_arg1_unk_04* temp_v1 = &arg1->unk_04[0];
+ s32 phi_a1;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(arg1->unk_04); i++, temp_v1++) {
+ // Can't be `temp_v1->alpha != 0`
+ if (temp_v1->alpha) {
+ phi_a1 = temp_v1->unk_00 == 3 ? (255 / 3) : (255 / 5);
+ if (phi_a1 >= temp_v1->alpha) {
+ temp_v1->alpha = 0;
+ } else {
+ temp_v1->alpha -= phi_a1;
+ }
+ }
+ }
+}
+
+typedef struct {
+ /* 0x0 */ Color_RGB8 color;
+ /* 0x4 */ Gfx* dList;
+} struct_801BFDD0; // size = 0x08
+
+extern struct_801BFDD0 D_801BFDD0[];
+#if 0
+struct_801BFDD0 D_801BFDD0[] = {
+ { { 180, 200, 255 }, gLinkGoronCurledDL },
+ { { 155, 0, 0 }, gLinkGoronRollingSpikesAndEffectDL },
+ { { 255, 0, 0 }, gLinkGoronGoronPunchEffectDL },
+};
+#endif
+
+void func_80122D44(PlayState* play, struct_80122D44_arg1* arg1) {
+ struct_801BFDD0* temp_s3;
+ struct_80122D44_arg1_unk_04* phi_s2 = arg1->unk_04;
+ s32 phi_s6 = false;
+ s32 i;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ for (i = 0; i != ARRAY_COUNT(arg1->unk_04); i++) {
+ if ((phi_s2->alpha != 0) && (phi_s2->alpha != 255)) {
+ temp_s3 = &D_801BFDD0[phi_s2->unk_00 - 1];
+ Matrix_Put(&phi_s2->mf);
+
+ gDPPipeSync(POLY_XLU_DISP++);
+
+ if (!phi_s6 && phi_s2->unk_00 == 2) {
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_goron_Matanimheader_013138));
+ phi_s6 = true;
+ }
+
+ Scene_SetRenderModeXlu(play, 1, 2);
+ gDPSetEnvColor(POLY_XLU_DISP++, temp_s3->color.r, temp_s3->color.g, temp_s3->color.b, phi_s2->alpha);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPDisplayList(POLY_XLU_DISP++, temp_s3->dList);
+ }
+
+ phi_s2++;
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+extern u8 sMaskItemIds[PLAYER_MASK_MAX - 1];
+#if 0
+u8 sMaskItemIds[PLAYER_MASK_MAX - 1] = {
+ ITEM_MASK_TRUTH, // PLAYER_MASK_TRUTH
+ ITEM_MASK_KAFEIS_MASK, // PLAYER_MASK_KAFEIS_MASK
+ ITEM_MASK_ALL_NIGHT, // PLAYER_MASK_ALL_NIGHT
+ ITEM_MASK_BUNNY, // PLAYER_MASK_BUNNY
+ ITEM_MASK_KEATON, // PLAYER_MASK_KEATON
+ ITEM_MASK_GARO, // PLAYER_MASK_GARO
+ ITEM_MASK_ROMANI, // PLAYER_MASK_ROMANI
+ ITEM_MASK_CIRCUS_LEADER, // PLAYER_MASK_CIRCUS_LEADER
+ ITEM_MASK_POSTMAN, // PLAYER_MASK_POSTMAN
+ ITEM_MASK_COUPLE, // PLAYER_MASK_COUPLE
+ ITEM_MASK_GREAT_FAIRY, // PLAYER_MASK_GREAT_FAIRY
+ ITEM_MASK_GIBDO, // PLAYER_MASK_GIBDO
+ ITEM_MASK_DON_GERO, // PLAYER_MASK_DON_GERO
+ ITEM_MASK_KAMARO, // PLAYER_MASK_KAMARO
+ ITEM_MASK_CAPTAIN, // PLAYER_MASK_CAPTAIN
+ ITEM_MASK_STONE, // PLAYER_MASK_STONE
+ ITEM_MASK_BREMEN, // PLAYER_MASK_BREMEN
+ ITEM_MASK_BLAST, // PLAYER_MASK_BLAST
+ ITEM_MASK_SCENTS, // PLAYER_MASK_SCENTS
+ ITEM_MASK_GIANT, // PLAYER_MASK_GIANT
+ ITEM_MASK_FIERCE_DEITY, // PLAYER_MASK_FIERCE_DEITY
+ ITEM_MASK_GORON, // PLAYER_MASK_GORON
+ ITEM_MASK_ZORA, // PLAYER_MASK_ZORA
+ ITEM_MASK_DEKU, // PLAYER_MASK_DEKU
+};
+#endif
+
+u8 Player_MaskIdToItemId(s32 maskIdMinusOne) {
+ return sMaskItemIds[maskIdMinusOne];
+}
+
+u8 Player_GetCurMaskItemId(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ if (player->currentMask != PLAYER_MASK_NONE) {
+ return Player_MaskIdToItemId(player->currentMask - 1);
+ }
+
+ return ITEM_NONE;
+}
+
+void func_80122F28(Player* player) {
+ if ((player->actor.category == ACTORCAT_PLAYER) &&
+ (!(player->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_800000 | PLAYER_STATE1_200000 |
+ PLAYER_STATE1_800 | PLAYER_STATE1_400))) &&
+ (!(player->stateFlags2 & PLAYER_STATE2_1))) {
+ if (player->doorType < 0) {
+ ActorCutscene_SetIntentToPlay(0x7C);
+ } else {
+ ActorCutscene_SetIntentToPlay(0x7D);
+ }
+ }
+}
+
+s32 func_80122F9C(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && player->unk_AE7 == 2;
+}
+
+s32 func_80122FCC(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->unk_AE7 == 1 || player->unk_AE7 == 3);
+}
+
+void func_8012300C(PlayState* play, s32 arg1) {
+ Player* player = GET_PLAYER(play);
+
+ player->unk_B2B = arg1;
+}
+
+void func_8012301C(Player* player, PlayState* play2) {
+ PlayState* play = play2;
+ s32 pad;
+
+ player->unk_AE7++;
+
+ if (player->unk_AE7 == 2) {
+ s16 objectId = gPlayerFormObjectIndices[((void)0, gSaveContext.save.playerForm)];
+
+ gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId = objectId;
+ func_8012F73C(&play->objectCtx, player->actor.objBankIndex, objectId);
+ player->actor.objBankIndex = Object_GetIndex(&play->objectCtx, GAMEPLAY_KEEP);
+ } else if (player->unk_AE7 >= 3) {
+ s32 objBankIndex = Object_GetIndex(&play->objectCtx, gActorOverlayTable[ACTOR_PLAYER].initInfo->objectId);
+
+ if (Object_IsLoaded(&play->objectCtx, objBankIndex)) {
+ player->actor.objBankIndex = objBankIndex;
+ player->actor.shape.rot.z = gSaveContext.save.playerForm + 1;
+ player->actor.init = PlayerCall_Init;
+ player->actor.update = PlayerCall_Update;
+ player->actor.draw = PlayerCall_Draw;
+ gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
+ }
+ }
+}
+
+extern s16 D_801BFE14[][18];
+
+// OoT's Player_SetBootData
+void func_80123140(PlayState* play, Player* player) {
+ s16* bootRegs;
+ s32 currentBoots;
+ f32 scale;
+
+ if ((player->actor.id == ACTOR_PLAYER) && (player->transformation == PLAYER_FORM_FIERCE_DEITY)) {
+ REG(27) = 1200;
+ } else {
+ REG(27) = 2000;
+ }
+
+ REG(48) = 370;
+
+ currentBoots = player->currentBoots;
+ if (currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) {
+ if (player->stateFlags1 & PLAYER_STATE1_8000000) {
+ currentBoots++;
+ }
+ if (player->transformation == PLAYER_FORM_GORON) {
+ REG(48) = 200;
+ }
+ } else if (currentBoots == PLAYER_BOOTS_GIANT) {
+ REG(48) = 170;
+ }
+
+ bootRegs = D_801BFE14[currentBoots];
+ REG(19) = bootRegs[0];
+ REG(30) = bootRegs[1];
+ REG(32) = bootRegs[2];
+ REG(34) = bootRegs[3];
+ REG(35) = bootRegs[4];
+ REG(36) = bootRegs[5];
+ REG(37) = bootRegs[6];
+ REG(38) = bootRegs[7];
+ REG(39) = bootRegs[8];
+ REG(43) = bootRegs[9];
+ R_RUN_SPEED_LIMIT = bootRegs[10];
+ REG(68) = bootRegs[11];
+ REG(69) = bootRegs[12];
+ IREG(66) = bootRegs[13];
+ IREG(67) = bootRegs[14];
+ IREG(68) = bootRegs[15];
+ IREG(69) = bootRegs[16];
+ MREG(95) = bootRegs[17];
+
+ if (play->roomCtx.currRoom.unk3 == 2) {
+ R_RUN_SPEED_LIMIT = 500;
+ }
+
+ if ((player->actor.id == ACTOR_PLAYER) && (player->transformation == PLAYER_FORM_FIERCE_DEITY)) {
+ scale = 0.015f;
+ } else {
+ scale = 0.01f;
+ }
+
+ Actor_SetScale(&player->actor, scale);
+}
+
+s32 Player_InBlockingCsMode(PlayState* play, Player* player) {
+ return (player->stateFlags1 & (PLAYER_STATE1_20000000 | PLAYER_STATE1_200 | PLAYER_STATE1_80)) ||
+ player->csMode != 0 || play->sceneLoadFlag == 0x14 || play->unk_18B4A != 0 ||
+ (player->stateFlags1 & PLAYER_STATE1_1) || (player->stateFlags3 & PLAYER_STATE3_80) ||
+ play->actorCtx.unk268 != 0;
+}
+
+s32 Player_InCsMode(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return Player_InBlockingCsMode(play, player) || player->unk_AA5 == 5;
+}
+
+s32 func_80123420(Player* player) {
+ return player->stateFlags3 & PLAYER_STATE3_80000000;
+}
+
+s32 func_80123434(Player* player) {
+ return player->stateFlags1 & (PLAYER_STATE1_40000000 | PLAYER_STATE1_20000 | PLAYER_STATE1_10000);
+}
+
+// Unused
+s32 func_80123448(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->stateFlags1 & PLAYER_STATE1_400000) &&
+ (player->transformation != PLAYER_FORM_HUMAN || (!func_80123434(player) && player->unk_730 == NULL));
+}
+
+// TODO: Player_IsGoronOrDeku is a temporary name until we have more info on this function.
+// Hypothesis: this function checks if the current form would crouch when he tries to use the shield
+s32 Player_IsGoronOrDeku(Player* player) {
+ return player->transformation == PLAYER_FORM_GORON || player->transformation == PLAYER_FORM_DEKU;
+}
+
+s32 func_801234D4(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->stateFlags2 & PLAYER_STATE2_8) || player->actor.speedXZ != 0.0f ||
+ ((player->transformation != PLAYER_FORM_ZORA) && (player->stateFlags1 & PLAYER_STATE1_8000000)) ||
+ ((player->transformation == PLAYER_FORM_ZORA) && (player->stateFlags1 & PLAYER_STATE1_8000000) &&
+ (!(player->actor.bgCheckFlags & 1) || (player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER)));
+}
+
+s32 func_80123590(PlayState* play, Actor* actor) {
+ Player* player = GET_PLAYER(play);
+
+ if ((player->stateFlags1 & PLAYER_STATE1_800) && (player->heldActor == actor)) {
+ player->interactRangeActor = NULL;
+ player->heldActor = NULL;
+ player->actor.child = NULL;
+ player->stateFlags1 &= ~PLAYER_STATE1_800;
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) {
+ Player* player = GET_PLAYER(play);
+
+ if (player->stateFlags3 & PLAYER_STATE3_1000) {
+ player->unk_B08[0] = arg1;
+ player->unk_B08[1] += arg1 * 0.05f;
+ player->currentYaw = arg2;
+ player->actor.home.rot.y = arg2;
+ player->actor.shape.rot.y = arg2;
+ player->unk_B8C = 4;
+ player->invincibilityTimer = 20;
+
+ return true;
+ }
+
+ return false;
+}
+
+s32 func_8012364C(PlayState* play, Player* player, s32 arg2) {
+ if (arg2 >= 4) {
+ return ITEM_NONE;
+ }
+
+ if (arg2 == 0) {
+ s32 item = Inventory_GetBtnBItem(play);
+
+ if (item >= ITEM_FD) {
+ return item;
+ }
+
+ if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == 0x18)) {
+ return ITEM_F0;
+ }
+
+ if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == 0x1A)) {
+ return ITEM_F1;
+ }
+
+ if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == 0x19)) {
+ return ITEM_F2;
+ }
+
+ return item;
+ }
+
+ if (arg2 == 1) {
+ return (gSaveContext.buttonStatus[1] != BTN_DISABLED)
+ ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_LEFT]
+ : (gSaveContext.unk_3F22 == 0x10) ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_LEFT]
+ : ITEM_NONE;
+ }
+
+ if (arg2 == 2) {
+ return (gSaveContext.buttonStatus[2] != BTN_DISABLED)
+ ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_DOWN]
+ : (gSaveContext.unk_3F22 == 0x10) ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_DOWN]
+ : ITEM_NONE;
+ }
+
+ return (gSaveContext.buttonStatus[3] != BTN_DISABLED) ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_RIGHT]
+ : (gSaveContext.unk_3F22 == 0x10) ? gSaveContext.save.equips.buttonItems[0][EQUIP_SLOT_C_RIGHT]
+ : ITEM_NONE;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123810.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123960.s")
+extern u8 sActionModelGroups[];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801239AC.s")
+s32 Player_ActionToModelGroup(Player* player, s32 actionParam) {
+ s32 modelGroup = sActionModelGroups[actionParam];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123AA4.s")
+ if ((modelGroup == 2) && Player_IsGoronOrDeku(player)) {
+ return 1;
+ }
+ return modelGroup;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123BD4.s")
+extern u8 D_801BFF90[PLAYER_FORM_MAX];
+#if 0
+u8 D_801BFF90[PLAYER_FORM_MAX] = {
+ PLAYER_BOOTS_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY
+ PLAYER_BOOTS_GORON, // PLAYER_FORM_GORON
+ PLAYER_BOOTS_ZORA_LAND, // PLAYER_FORM_ZORA
+ PLAYER_BOOTS_DEKU, // PLAYER_FORM_DEKU
+ PLAYER_BOOTS_HYLIAN, // PLAYER_FORM_HUMAN
+};
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123C58.s")
+extern u8 sPlayerStrengths[PLAYER_FORM_MAX];
+#if 0
+u8 sPlayerStrengths[PLAYER_FORM_MAX] = {
+ PLAYER_STRENGTH_HUMAN, // PLAYER_FORM_FIERCE_DEITY
+ PLAYER_STRENGTH_GORON, // PLAYER_FORM_GORON
+ PLAYER_STRENGTH_ZORA, // PLAYER_FORM_ZORA
+ PLAYER_STRENGTH_DEKU, // PLAYER_FORM_DEKU
+ PLAYER_STRENGTH_HUMAN, // PLAYER_FORM_HUMAN
+};
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s")
+typedef struct {
+ /* 0x00 */ u8 flag;
+ /* 0x02 */ u16 textId;
+} TextTriggerEntry; // size = 0x04
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123D50.s")
+extern TextTriggerEntry sEnvironmentTextTriggers[];
+// These textIds are OoT remnants. The corresponding text entries are not present in this game, and so these don't point
+// to anything relevant.
+#if 0
+TextTriggerEntry sEnvironmentTextTriggers[] = {
+ { 1, 0x26FC },
+ { 2, 0x26FD },
+ { 0, 0 },
+ { 2, 0x26FD },
+};
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123DA4.s")
+extern Gfx** sPlayerDListGroups[];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123DC0.s")
+void func_801239AC(Player* player) {
+ if (player->stateFlags1 & PLAYER_STATE1_400000) {
+ if ((player->heldItemActionParam < 0) || (player->heldItemActionParam == player->itemActionParam)) {
+ if (!Player_IsHoldingTwoHandedWeapon(player)) {
+ if (!Player_IsGoronOrDeku(player)) {
+ D_801F59E0 = player->transformation * 2;
+ player->rightHandType = 8;
+ player->rightHandDLists = &sPlayerDListGroups[8][D_801F59E0];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123E90.s")
+ if (player->sheathType == 14) {
+ player->sheathType = 12;
+ } else if (player->sheathType == 15) {
+ player->sheathType = 13;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123F14.s")
+ player->sheathDLists = &sPlayerDListGroups[player->sheathType][D_801F59E0];
+ player->modelAnimType = 2;
+ player->heldItemActionParam = -1;
+ }
+ }
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123F2C.s")
+void Player_SetModels(Player* player, s32 modelGroup) {
+ u8* playerModelTypes;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123F48.s")
+ D_801F59E0 = player->transformation * 2;
+ player->leftHandType = gPlayerModelTypes[modelGroup][1];
+ player->rightHandType = gPlayerModelTypes[modelGroup][2];
+ player->sheathType = gPlayerModelTypes[modelGroup][3];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124020.s")
+ if (player->sheathType == 14) {
+ if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_NONE) {
+ player->sheathType = 15;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_GetMask.s")
+ playerModelTypes = gPlayerModelTypes[modelGroup];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_RemoveMask.s")
+ player->leftHandDLists = &sPlayerDListGroups[playerModelTypes[1]][D_801F59E0];
+ player->rightHandDLists = &sPlayerDListGroups[playerModelTypes[2]][D_801F59E0];
+ player->sheathDLists = &sPlayerDListGroups[playerModelTypes[3]][D_801F59E0];
+ player->waistDLists = &sPlayerDListGroups[playerModelTypes[4]][D_801F59E0];
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012405C.s")
+ func_801239AC(player);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124088.s")
+void Player_SetModelGroup(Player* player, s32 modelGroup) {
+ player->modelGroup = modelGroup;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801240C8.s")
+ if (modelGroup == 1) {
+ player->modelAnimType = 0;
+ } else {
+ player->modelAnimType = gPlayerModelTypes[modelGroup][0];
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801240DC.s")
+ if (player->modelAnimType < 3) {
+ if (((player->transformation != PLAYER_FORM_FIERCE_DEITY) && (player->transformation != PLAYER_FORM_HUMAN)) ||
+ (player->currentShield == PLAYER_SHIELD_NONE)) {
+ player->modelAnimType = 0;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124110.s")
+ Player_SetModels(player, modelGroup);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124148.s")
+void func_80123C58(Player* player) {
+ player->heldItemActionParam = player->itemActionParam;
+ Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam));
+ player->unk_AA5 = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124168.s")
+void Player_SetEquipmentData(PlayState* play, Player* player) {
+ if (player->csMode != 0x86) {
+ player->currentShield = GET_CUR_EQUIP_VALUE(EQUIP_SHIELD);
+ if ((player->transformation != PLAYER_FORM_ZORA) || (((player->currentBoots != PLAYER_BOOTS_ZORA_LAND)) &&
+ (player->currentBoots != PLAYER_BOOTS_ZORA_UNDERWATER))) {
+ player->currentBoots = D_801BFF90[player->transformation];
+ }
+ Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->itemActionParam));
+ func_80123140(play, player);
+ if (player->unk_B62 != 0) {
+ player->unk_B62 = 1;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124190.s")
+void func_80123D50(PlayState* play, Player* player, s32 itemId, s32 actionParam) {
+ func_80114FD0(play, itemId, player->heldItemButton);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801241B4.s")
+ if (itemId != ITEM_BOTTLE) {
+ player->heldItemId = itemId;
+ player->itemActionParam = actionParam;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801241E0.s")
+ player->heldItemActionParam = actionParam;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012420C.s")
+void func_80123DA4(Player* player) {
+ player->unk_730 = NULL;
+ player->stateFlags2 &= ~PLAYER_STATE2_2000;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012422C.s")
+void func_80123DC0(Player* player) {
+ if ((player->actor.bgCheckFlags & 1) ||
+ (player->stateFlags1 & (PLAYER_STATE1_8000000 | PLAYER_STATE1_800000 | PLAYER_STATE1_200000)) ||
+ (!(player->stateFlags1 & (PLAYER_STATE1_80000 | PLAYER_STATE1_40000)) &&
+ ((player->actor.world.pos.y - player->actor.floorHeight) < 100.0f))) {
+ player->stateFlags1 &= ~(PLAYER_STATE1_40000000 | PLAYER_STATE1_80000 | PLAYER_STATE1_40000 |
+ PLAYER_STATE1_20000 | PLAYER_STATE1_10000 | PLAYER_STATE1_8000);
+ } else if (!(player->stateFlags1 & (PLAYER_STATE1_200000 | PLAYER_STATE1_80000 | PLAYER_STATE1_40000))) {
+ player->stateFlags1 |= PLAYER_STATE1_80000;
+ } else if ((player->stateFlags1 & PLAYER_STATE1_40000) && (player->transformation == PLAYER_FORM_DEKU)) {
+ player->stateFlags1 &=
+ ~(PLAYER_STATE1_40000000 | PLAYER_STATE1_20000 | PLAYER_STATE1_10000 | PLAYER_STATE1_8000);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_GetExplosiveHeld.s")
+ func_80123DA4(player);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124278.s")
+void func_80123E90(PlayState* play, Actor* actor) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801242B4.s")
+ func_80123DC0(player);
+ player->unk_730 = actor;
+ player->unk_A78 = actor;
+ player->stateFlags1 |= PLAYER_STATE1_10000;
+ func_800DFD78(Play_GetCamera(play, CAM_ID_MAIN), 8, actor);
+ Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), 9);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801242DC.s")
+s32 func_80123F14(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return player->stateFlags1 & PLAYER_STATE1_800000;
+}
+
+s32 func_80123F2C(PlayState* play, s32 ammo) {
+ play->unk_1887C = ammo + 1;
+
+ return 1;
+}
+
+s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 yRange) {
+ Player* this = GET_PLAYER(play);
+ Vec3f diff;
+ s32 pad;
+
+ if ((this->itemActionParam == PLAYER_AP_STICK) && (this->unk_B28 != 0)) {
+ Math_Vec3f_Diff(&this->meleeWeaponInfo[0].tip, pos, &diff);
+ return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
+ }
+
+ return false;
+}
+
+u8 Player_GetStrength(void) {
+ return sPlayerStrengths[(void)0, gSaveContext.save.playerForm];
+}
+
+u8 Player_GetMask(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return player->currentMask;
+}
+
+// Unused
+void Player_RemoveMask(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ player->currentMask = PLAYER_MASK_NONE;
+}
+
+s32 Player_HasMirrorShieldEquipped(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->transformation == PLAYER_FORM_HUMAN) && (player->currentShield == PLAYER_SHIELD_MIRROR_SHIELD);
+}
+
+s32 Player_IsHoldingMirrorShield(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+
+ return (player->transformation == PLAYER_FORM_HUMAN) && (player->rightHandType == 8) &&
+ (player->currentShield == PLAYER_SHIELD_MIRROR_SHIELD);
+}
+
+s32 Player_IsHoldingHookshot(Player* player) {
+ return player->itemActionParam == PLAYER_AP_HOOKSHOT;
+}
+
+s32 func_801240DC(Player* player) {
+ return Player_IsHoldingHookshot(player) && (player->heldActor == NULL);
+}
+
+s32 func_80124110(Player* player, s32 actionParam) {
+ s32 temp_v0 = actionParam - PLAYER_AP_FISHING_POLE;
+
+ if (player->transformation != PLAYER_FORM_GORON) {
+ if (((actionParam - PLAYER_AP_FISHING_POLE) > (PLAYER_AP_FISHING_POLE - PLAYER_AP_FISHING_POLE)) &&
+ ((actionParam - PLAYER_AP_FISHING_POLE) < (PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_FISHING_POLE))) {
+ return temp_v0;
+ }
+ }
+
+ return 0;
+}
+
+s32 func_80124148(Player* player) {
+ return func_80124110(player, player->itemActionParam);
+}
+
+s32 Player_ActionToMeleeWeapon(s32 actionParam) {
+ s32 weapon = actionParam - (PLAYER_AP_SWORD_KOKIRI - 1);
+
+ if ((weapon > 0) && (weapon <= (PLAYER_AP_ZORA_FINS - (PLAYER_AP_SWORD_KOKIRI - 1)))) {
+ return weapon;
+ }
+ return 0;
+}
+
+s32 Player_GetMeleeWeaponHeld(Player* player) {
+ return Player_ActionToMeleeWeapon(player->itemActionParam);
+}
+
+s32 Player_IsHoldingTwoHandedWeapon(Player* player) {
+ // Relies on the actionParams for two-handed weapons being contiguous.
+ if ((player->itemActionParam >= PLAYER_AP_SWORD_GREAT_FAIRY) && (player->itemActionParam <= PLAYER_AP_STICK)) {
+ return true;
+ }
+
+ return false;
+}
+
+s32 Player_ActionToBottle(Player* player, s32 actionParam) {
+ s32 bottle = actionParam - PLAYER_AP_BOTTLE;
+
+ // Relies on bottle-related action params to be contiguous
+ if ((bottle >= (PLAYER_AP_BOTTLE - PLAYER_AP_BOTTLE)) && (bottle <= (PLAYER_AP_BOTTLE_FAIRY - PLAYER_AP_BOTTLE))) {
+ return bottle;
+ }
+
+ return -1;
+}
+
+s32 Player_GetBottleHeld(Player* Player) {
+ return Player_ActionToBottle(Player, Player->itemActionParam);
+}
+
+s32 Player_ActionToExplosive(Player* player, s32 actionParam) {
+ s32 explosive = actionParam - PLAYER_AP_BOMB;
+
+ // Relies on explosive-related action params to be contiguous
+ if ((explosive >= (PLAYER_AP_BOMB - PLAYER_AP_BOMB)) && (explosive <= (PLAYER_AP_BOMBCHU - PLAYER_AP_BOMB))) {
+ return explosive;
+ }
+
+ return -1;
+}
+
+s32 Player_GetExplosiveHeld(Player* player) {
+ return Player_ActionToExplosive(player, player->itemActionParam);
+}
+
+// Convert actionParam to sword
+s32 func_80124278(Actor* actor, s32 actionParam) {
+ s32 sword = 0;
+
+ //! FAKE:
+ if ((actionParam == PLAYER_AP_LAST_USED) ||
+ ((sword = actionParam - PLAYER_AP_SWORD_KOKIRI, (sword >= PLAYER_AP_SWORD_KOKIRI - PLAYER_AP_SWORD_KOKIRI)) &&
+ (sword <= PLAYER_AP_SWORD_GREAT_FAIRY - PLAYER_AP_SWORD_KOKIRI))) {
+ return sword;
+ }
+
+ return -1;
+}
+
+s32 func_801242B4(Player* player) {
+ return (player->stateFlags1 & PLAYER_STATE1_8000000) && player->currentBoots < PLAYER_BOOTS_ZORA_UNDERWATER;
+}
+
+s32 func_801242DC(PlayState* play) {
+ Player* player = GET_PLAYER(play);
+ TextTriggerEntry* triggerEntry;
+ s32 envIndex;
+
+ if (play->roomCtx.currRoom.unk2 == 3) { // Room is hot
+ envIndex = 0;
+ } else if ((player->transformation != PLAYER_FORM_ZORA) && (player->unk_AD8 > 80)) {
+ envIndex = 3;
+ } else if (player->stateFlags1 & PLAYER_STATE1_8000000) {
+ if ((player->transformation == PLAYER_FORM_ZORA) && (player->currentBoots >= PLAYER_BOOTS_ZORA_UNDERWATER) &&
+ (player->actor.bgCheckFlags & 1)) {
+ envIndex = 1;
+ } else {
+ envIndex = 2;
+ }
+ } else {
+ return 0;
+ }
+
+ // Trigger general textboxes under certain conditions, like "It's so hot in here!". Unused in MM
+ triggerEntry = &sEnvironmentTextTriggers[envIndex];
+ if (!Player_InCsMode(play)) {
+ if ((triggerEntry->flag) && !(gSaveContext.textTriggerFlags & triggerEntry->flag) && (envIndex == 0)) {
+ Message_StartTextbox(play, triggerEntry->textId, NULL);
+ gSaveContext.textTriggerFlags |= triggerEntry->flag;
+ }
+ }
+
+ return envIndex + 1;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124420.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124618.s")
+void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) {
+ s32 currentFrame = curFrame;
+ f32 temp_f0;
+ f32 temp_f14;
+ f32 progress;
+ s16 temp_v1;
+
+ do {
+ temp_v1 = arg0[1].unk_0;
+ arg0++;
+ } while (temp_v1 < currentFrame);
+
+ temp_f0 = arg0[-1].unk_0;
+
+ progress = (curFrame - temp_f0) / (temp_v1 - temp_f0);
+
+ temp_f14 = arg0[-1].unk_2.x;
+ arg2->x = LERPIMP(temp_f14, arg0->unk_2.x, progress) * 0.01f;
+
+ temp_f14 = arg0[-1].unk_2.y;
+ arg2->y = LERPIMP(temp_f14, arg0->unk_2.y, progress) * 0.01f;
+
+ temp_f14 = arg0[-1].unk_2.z;
+ arg2->z = LERPIMP(temp_f14, arg0->unk_2.z, progress) * 0.01f;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801246F4.s")
@@ -132,22 +926,122 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124CC4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124F18.s")
+extern s32 D_801C0958;
+#if 0
+s32 D_801C0958 = false;
+#endif
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124FF0.s")
+void func_80124F18(s16* arg0, f32* arg1, s16 arg2, f32 arg3, f32 arg4) {
+ f32 phi_f12;
+
+ if (*arg0 < arg2) {
+ *arg1 += arg3;
+ } else {
+ *arg1 -= arg3;
+ }
+
+ *arg1 = CLAMP(*arg1, -arg4, arg4);
+ *arg0 += (s16)*arg1;
+ if (((arg2 - *arg0) * (s16)*arg1) < 0) {
+ *arg0 = arg2;
+ }
+}
+
+void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f* arg5, s16* arg6, f32* arg7, f32 arg8,
+ s16 arg9, s16* arg10, f32* arg11, s32 arg12) {
+ Vec3f sp44;
+ f32 sp40;
+ s16 temp_v0;
+ s16 sp3C;
+ f32 temp_f14;
+ f32 sp34 = Math_CosS(arg1) * arg0;
+ f32 sp30 = Math_SinS(arg1) * -arg0;
+
+ arg5->x = (Math_SinS(arg3) * sp30) + arg2->x;
+ arg5->y = arg2->y + sp34;
+ arg5->z = (Math_CosS(arg3) * sp30) + arg2->z;
+
+ Math_Vec3f_Diff(arg5, arg4, &sp44);
+ sp40 = sqrtf(SQXZ(sp44));
+
+ sp3C = (sp40 <= 1.0f) ? arg3 : Math_FAtan2F(sp44.z, sp44.x);
+ sp40 = (Math_CosS(sp3C - arg3) * sp40) + arg8;
+
+ if (ABS_ALT(BINANG_SUB(sp3C, arg3)) > 0x4000) {
+ sp3C = BINANG_ROT180(sp3C);
+ }
+ sp3C -= arg3;
+
+ temp_v0 = Math_FAtan2F(sp44.y, sp40);
+ temp_v0 = CLAMP(temp_v0, (s16)-arg9, arg9);
+ //! FAKE:
+ if (sp3C) {}
+
+ func_80124F18(arg6, arg7, temp_v0, 20.0f, 2000.0f);
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801251C4.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125318.s")
+void func_80125318(Vec3f* arg0, Vec3s* arg1) {
+ arg0->x = 0.0f;
+ arg0->y = 0.0f;
+ arg0->z = 0.0f;
+ arg1->x = 0;
+ arg1->y = 0;
+ arg1->z = 0;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125340.s")
+void func_80125340(void) {
+ Matrix_Push();
+ D_801C0958 = true;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012536C.s")
+void func_8012536C(void) {
+ if (D_801C0958) {
+ Matrix_Pop();
+ D_801C0958 = false;
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801253A4.s")
+void Player_DrawZoraShield(PlayState* play, Player* player) {
+ u8* phi_a0;
+ Vtx* vtx;
+ Gfx* dList;
+ f32 scale;
+ s32 i;
+
+ scale = player->unk_B62 * (10.0f / 51.0f);
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_zora_Matanimheader_012A80));
+ Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
+
+ // clang-format off
+ vtx = Lib_SegmentedToVirtual(&object_link_zora_Vtx_011210); phi_a0 = Lib_SegmentedToVirtual(&object_link_zora_U8_011710);
+ // clang-format on
+
+ // ARRAY_COUNT(object_link_zora_Vtx_011210)
+ for (i = 0; i < 80; i++) {
+ // Editing the Vtxs in object itself
+ vtx->v.cn[3] = (*phi_a0 * player->unk_B62) >> 8;
+ vtx++;
+ phi_a0++;
+ }
+
+ dList = POLY_XLU_DISP;
+
+ gSPMatrix(&dList[0], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(&dList[1], object_link_zora_DL_011760);
+
+ POLY_XLU_DISP = &dList[2];
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125500.s")
+s32 func_80125580(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125580.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125CE0.s")
@@ -156,17 +1050,102 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801262C8.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801263FC.s")
+// unused
+s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
+ Player* player = (Player*)thisx;
+
+ if (!func_80125580(play, limbIndex, dList, pos, rot, thisx)) {
+ *dList = NULL;
+ }
+
+ return false;
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126440.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801265C8.s")
+extern u8 D_801C096C[PLAYER_SHIELD_MAX];
+#if 0
+u8 D_801C096C[PLAYER_SHIELD_MAX] = {
+ COLTYPE_METAL,
+ COLTYPE_METAL,
+ COLTYPE_METAL,
+};
+#endif
+
+void func_801265C8(PlayState* play, Player* player, ColliderQuad* collider, Vec3f arg3[4]) {
+ if (player->stateFlags1 & PLAYER_STATE1_400000) {
+ Vec3f sp4C;
+ Vec3f sp40;
+ Vec3f sp34;
+ Vec3f sp28;
+
+ player->shieldQuad.base.colType = D_801C096C[player->currentShield];
+ Matrix_MultVec3f(&arg3[0], &sp28);
+ Matrix_MultVec3f(&arg3[1], &sp34);
+ Matrix_MultVec3f(&arg3[2], &sp40);
+ Matrix_MultVec3f(&arg3[3], &sp4C);
+ Collider_SetQuadVertices(collider, &sp28, &sp34, &sp40, &sp4C);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &collider->base);
+ CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base);
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012669C.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126808.s")
+void Player_DrawGetItemImpl(PlayState* play, Player* player, Vec3f* refPos, s32 drawIdPlusOne) {
+ f32 sp34;
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012697C.s")
+ if (player->stateFlags3 & PLAYER_STATE3_4000000) {
+ sp34 = 6.0f;
+ } else {
+ sp34 = 14.0f;
+ }
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSegments[6] = PHYSICAL_TO_VIRTUAL(player->giObjectSegment);
+
+ gSPSegment(POLY_OPA_DISP++, 0x06, player->giObjectSegment);
+ gSPSegment(POLY_XLU_DISP++, 0x06, player->giObjectSegment);
+
+ Matrix_Translate((Math_SinS(player->actor.shape.rot.y) * 3.3f) + refPos->x, refPos->y + sp34,
+ (Math_CosS(player->actor.shape.rot.y) * 3.3f) + refPos->z, MTXMODE_NEW);
+ Matrix_RotateZYX(0, (play->gameplayFrames * 1000), 0, MTXMODE_APPLY);
+ Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
+ GetItem_Draw(play, drawIdPlusOne - 1);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Player_DrawGetItem(PlayState* play, Player* player) {
+ if (!player->giObjectLoading || (osRecvMesg(&player->giObjectLoadQueue, NULL, OS_MESG_NOBLOCK) == 0)) {
+ Vec3f refPos;
+ s32 drawIdPlusOne;
+
+ player->giObjectLoading = false;
+ if ((player->actor.id == ACTOR_EN_TEST3) ||
+ ((player->transformation == PLAYER_FORM_DEKU) && (player->stateFlags1 & PLAYER_STATE1_400))) {
+ refPos.x = player->actor.world.pos.x;
+ refPos.z = player->actor.world.pos.z;
+ if (player->actor.id == ACTOR_EN_TEST3) {
+ if (player->stateFlags1 & PLAYER_STATE1_400) {
+ refPos.y = player->actor.world.pos.y + 30.0f;
+ } else {
+ refPos.x = player->bodyPartsPos[0xC].x;
+ refPos.y = player->bodyPartsPos[0xC].y - 6.0f;
+ refPos.z = player->bodyPartsPos[0xC].z;
+ }
+ } else {
+ refPos.y = player->actor.world.pos.y + 28.0f;
+ }
+ } else {
+ Math_Vec3f_Copy(&refPos, &D_801F59E8);
+ }
+
+ drawIdPlusOne = ABS_ALT(player->unk_B2A);
+ Player_DrawGetItemImpl(play, player, &refPos, drawIdPlusOne);
+ }
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126AB4.s")
@@ -176,11 +1155,37 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801271B0.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127438.s")
+// Player_SetMaskSegment?
+s32 func_80127438(PlayState* play, Player* player, s32 currentMask) {
+ if ((player->maskObjectLoadState == 0) && (currentMask == (u8)player->maskId)) {
+ OPEN_DISPS(play->state.gfxCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127488.s")
+ gSPSegment(POLY_OPA_DISP++, 0x0A, player->maskObjectSegment);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012754C.s")
+ CLOSE_DISPS(play->state.gfxCtx);
+
+ return true;
+ }
+
+ return false;
+}
+
+void func_80127488(PlayState* play, Player* player, u8 alpha) {
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, alpha);
+ gSPDisplayList(POLY_XLU_DISP++, gLinkGoronGoronPunchEffectDL);
+
+ func_80122BA4(play, &player->unk_3D0, 3, alpha);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+void Player_DrawCouplesMask(PlayState* play, Player* player) {
+ gSegments[0xA] = PHYSICAL_TO_VIRTUAL(player->maskObjectSegment);
+ AnimatedMat_DrawOpa(play, Lib_SegmentedToVirtual(&object_mask_meoto_Matanimheader_001CD8));
+}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127594.s")
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 7d2c4301bb..1a2773a057 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -4,12 +4,12 @@ s32 Object_Spawn(ObjectContext* objectCtx, s16 id) {
size_t size;
objectCtx->status[objectCtx->num].id = id;
- size = objectFileTable[id].vromEnd - objectFileTable[id].vromStart;
+ size = gObjectTable[id].vromEnd - gObjectTable[id].vromStart;
if (1) {}
if (size != 0) {
- DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, objectFileTable[id].vromStart, size);
+ DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, gObjectTable[id].vromStart, size);
}
if (objectCtx->num < OBJECT_EXCHANGE_BANK_MAX - 1) {
@@ -66,7 +66,7 @@ void Object_UpdateBank(ObjectContext* objectCtx) {
s32 id = -status->id;
if (status->dmaReq.vromAddr == 0) {
- objectFile = &objectFileTable[id];
+ objectFile = &gObjectTable[id];
size = objectFile->vromEnd - objectFile->vromStart;
if (size == 0) {
@@ -112,13 +112,13 @@ void Object_LoadAll(ObjectContext* objectCtx) {
for (i = 0; i < objectCtx->num; i++) {
id = objectCtx->status[i].id;
- vromSize = objectFileTable[id].vromEnd - objectFileTable[id].vromStart;
+ vromSize = gObjectTable[id].vromEnd - gObjectTable[id].vromStart;
if (vromSize == 0) {
continue;
}
- DmaMgr_SendRequest0(objectCtx->status[i].segment, objectFileTable[id].vromStart, vromSize);
+ DmaMgr_SendRequest0(objectCtx->status[i].segment, gObjectTable[id].vromStart, vromSize);
}
}
@@ -130,7 +130,7 @@ void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
objectCtx->status[iParm2].id = -id;
objectCtx->status[iParm2].dmaReq.vromAddr = 0;
- fileTableEntry = &objectFileTable[id];
+ fileTableEntry = &gObjectTable[id];
vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart;
// TODO: UB to cast void to u32
@@ -149,7 +149,7 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
play->linkActorEntry =
(ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) + play->setupEntranceList[play->curSpawn].spawn;
if ((play->linkActorEntry->params & 0x0F00) >> 8 == 0x0C ||
- (gSaveContext.respawnFlag == 0x02 && gSaveContext.respawn[RESTART_MODE_RETURN].playerParams == 0x0CFF)) {
+ (gSaveContext.respawnFlag == 0x02 && gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0x0CFF)) {
// Skull Kid Object
Object_Spawn(&play->objectCtx, OBJECT_STK);
return;
@@ -159,7 +159,7 @@ void Scene_HeaderCmdSpawnList(PlayState* play, SceneCmd* cmd) {
nextObject = play->objectCtx.status[play->objectCtx.num].segment;
play->objectCtx.num = loadedCount;
play->objectCtx.spawnedObjectCount = loadedCount;
- playerObjectId = gLinkFormObjectIndexes[(void)0, gSaveContext.save.playerForm];
+ playerObjectId = gPlayerFormObjectIndices[(void)0, gSaveContext.save.playerForm];
gActorOverlayTable[0].initInfo->objectId = playerObjectId;
Object_Spawn(&play->objectCtx, playerObjectId);
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index 972d508e42..255f7e389f 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -596,7 +596,7 @@ ItemEquips sSaveDefaultItemEquips = {
{ ITEM_SWORD_KOKIRI, ITEM_NONE, ITEM_NONE, ITEM_NONE },
{ ITEM_SWORD_KOKIRI, ITEM_NONE, ITEM_NONE, ITEM_NONE },
{ ITEM_SWORD_KOKIRI, ITEM_NONE, ITEM_NONE, ITEM_NONE },
- { ITEM_UNK_FD, ITEM_NONE, ITEM_NONE, ITEM_NONE },
+ { ITEM_FD, ITEM_NONE, ITEM_NONE, ITEM_NONE },
},
{
{ SLOT_OCARINA, SLOT_NONE, SLOT_NONE, SLOT_NONE },
diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
index 45d4ff68a3..5f32870a76 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c
@@ -107,7 +107,7 @@ void ArmsHook_DetachHookFromActor(ArmsHook* this) {
s32 ArmsHook_CheckForCancel(ArmsHook* this) {
Player* player = (Player*)this->actor.parent;
- if (func_801240C8(player)) {
+ if (Player_IsHoldingHookshot(player)) {
if ((player->heldItemActionParam != player->itemActionParam) || ((player->actor.flags & ACTOR_FLAG_100)) ||
((player->stateFlags1 & 0x4000080))) {
this->timer = 0;
@@ -128,7 +128,7 @@ void ArmsHook_AttachHookToActor(ArmsHook* this, Actor* actor) {
void ArmsHook_Shoot(ArmsHook* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if ((this->actor.parent == NULL) || (!func_801240C8(player))) {
+ if ((this->actor.parent == NULL) || (!Player_IsHoldingHookshot(player))) {
ArmsHook_DetachHookFromActor(this);
Actor_MarkForDeath(&this->actor);
return;
@@ -311,13 +311,13 @@ void ArmsHook_Draw(Actor* thisx, PlayState* play) {
Matrix_MultVec3f(&D_808C1C10, &this->unk1E0);
Matrix_MultVec3f(&D_808C1C28, &sp5C);
Matrix_MultVec3f(&D_808C1C34, &sp50);
- this->unk1C4.active = false;
+ this->unk_1C4.active = false;
} else {
Matrix_MultVec3f(&D_808C1C1C, &this->unk1E0);
Matrix_MultVec3f(&D_808C1C40, &sp5C);
Matrix_MultVec3f(&D_808C1C4C, &sp50);
}
- func_80126440(play, &this->collider, &this->unk1C4, &sp5C, &sp50);
+ func_80126440(play, &this->collider, &this->unk_1C4, &sp5C, &sp50);
func_8012C28C(play->state.gfxCtx);
func_80122868(play, player);
diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
index 5a79392ff7..cee615da1e 100644
--- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
+++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.h
@@ -10,7 +10,7 @@ typedef void (*ArmsHookActionFunc)(struct ArmsHook*, PlayState*);
typedef struct ArmsHook {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderQuad collider;
- /* 0x1C4 */ WeaponInfo unk1C4;
+ /* 0x1C4 */ WeaponInfo unk_1C4;
/* 0x1E0 */ Vec3f unk1E0;
/* 0x1EC */ Vec3f unk1EC;
/* 0x1F8 */ Actor* grabbed;
diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
index eac1f00e31..7838dadb75 100644
--- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
+++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c
@@ -50,7 +50,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) {
s32 isPressed;
Actor* actor;
BgF40Switch* actorAsSwitch;
- u32 inCsMode = Player_InCsMode(&play->state);
+ u32 inCsMode = Player_InCsMode(play);
for (actor = play->actorCtx.actorLists[ACTORCAT_SWITCH].first; actor != NULL; actor = actor->next) {
if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != NULL) {
diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
index f69282987e..ebcfc1f830 100644
--- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c
@@ -67,7 +67,7 @@ s8 func_80ACABA8(BgOpenShutter* this, PlayState* play) {
f32 temp_fv0;
s16 temp_v0;
- if (!Player_InCsMode(&play->state) && (this->dyna.actor.xzDistToPlayer < 100.0f)) {
+ if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer < 100.0f)) {
temp_fv0 = func_80ACAB10(play, &this->dyna.actor, 0.0f, 65.0f, 15.0f);
if (fabsf(temp_fv0) < 50.0f) {
temp_v0 = player->actor.shape.rot.y - this->dyna.actor.shape.rot.y;
diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
index 379a3ce81a..4325bc2595 100644
--- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
+++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c
@@ -280,9 +280,9 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) {
sp40.z = this->dyna.actor.world.pos.z;
sp3A = player->unk_B6A;
- if (func_80123F48(play, &sp40, 70.0f, 50.0f)) {
- this->dyna.actor.home.pos.x = player->swordInfo[0].tip.x;
- this->dyna.actor.home.pos.z = player->swordInfo[0].tip.z;
+ if (Player_IsBurningStickInRange(play, &sp40, 70.0f, 50.0f)) {
+ this->dyna.actor.home.pos.x = player->meleeWeaponInfo[0].tip.x;
+ this->dyna.actor.home.pos.z = player->meleeWeaponInfo[0].tip.z;
func_809CEE74(this);
return;
}
@@ -461,7 +461,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) {
}
func_809CEE74(this);
} else if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) {
- Math_Vec3f_Diff(&player->swordInfo[0].tip, &this->dyna.actor.world.pos, &sp3C);
+ Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &this->dyna.actor.world.pos, &sp3C);
sp38 = Math_SinS(-this->dyna.actor.shape.rot.x);
sp34 = Math_CosS(-this->dyna.actor.shape.rot.x);
sp30 = Math_SinS(-this->dyna.actor.shape.rot.y);
@@ -472,7 +472,7 @@ void func_809CEBC0(BgSpdweb* this, PlayState* play) {
temp_f10 = (sp3C.x * sp2C) + (sp3C.z * sp30);
if ((fabsf(temp_f10) < 70.0f) && (fabsf(sp58) < 10.0f) && (temp_f18 < 160.0f) && (temp_f18 > 20.0f)) {
- Math_Vec3f_Copy(&this->dyna.actor.home.pos, &player->swordInfo[0].tip);
+ Math_Vec3f_Copy(&this->dyna.actor.home.pos, &player->meleeWeaponInfo[0].tip);
func_809CEE74(this);
}
}
diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
index 61eb057a99..c64205aa27 100644
--- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
+++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c
@@ -288,7 +288,7 @@ f32 func_808A0D90(PlayState* play, DoorShutter* this, f32 arg2, f32 arg3, f32 ar
s32 func_808A0E28(DoorShutter* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!Player_InCsMode(&play->state)) {
+ if (!Player_InCsMode(play)) {
ShutterInfo* shutterInfo = &D_808A21B0[this->unk_164];
f32 temp_f0 = func_808A0D90(play, this, 0.0f, shutterInfo->unk_0A, shutterInfo->unk_0B);
@@ -569,7 +569,7 @@ void func_808A1884(DoorShutter* this, PlayState* play) {
if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & 0x800)) {
DoorShutter_SetupAction(this, func_808A1C50);
if (ActorCutscene_GetCurrentIndex() == 0x7D) {
- func_801226E0(play, ((void)0, gSaveContext.respawn[RESTART_MODE_DOWN].data));
+ func_801226E0(play, ((void)0, gSaveContext.respawn[RESPAWN_MODE_DOWN].data));
player->unk_A86 = -1;
func_800B7298(play, NULL, 0x73);
}
@@ -643,7 +643,7 @@ s32 func_808A1D68(DoorShutter* this, PlayState* play) {
s32 temp_a0;
s32 temp_a1;
- if (Player_InCsMode(&play->state)) {
+ if (Player_InCsMode(play)) {
return true;
}
diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
index 1d9c72ccbe..43c7143c30 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
@@ -246,7 +246,7 @@ f32 DoorSpiral_GetDistFromPlayer(PlayState* play, DoorSpiral* this, f32 yOffset,
s32 DoorSpiral_PlayerShouldClimb(DoorSpiral* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (!Player_InCsMode(&play->state)) {
+ if (!Player_InCsMode(play)) {
SpiralInfo* spiralInfo = &sSpiralInfo[this->spiralType];
f32 dist = DoorSpiral_GetDistFromPlayer(play, this, 0.0f, spiralInfo->spiralWidth, spiralInfo->spiralHeight);
diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
index 60600a5914..1f0cb9a2b8 100644
--- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
+++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c
@@ -548,7 +548,7 @@ void EnArrow_Update(Actor* thisx, PlayState* play) {
if ((this->unk_263 != 0) ||
((this->actor.params >= ENARROW_0) && ((this->actor.params == ENARROW_7) || (player->unk_D57 != 0))) ||
- !func_80123358(play, player)) {
+ !Player_InBlockingCsMode(play, player)) {
this->actionFunc(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
index 59e19710b7..c3d0691e7c 100644
--- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
+++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
@@ -297,7 +297,7 @@ void func_809CD634(EnBji01* this, PlayState* play) {
func_801A5BD0(0x6F);
Audio_QueueSeqCmd(0xE0000101);
play->nextEntranceIndex = 0x54A0; /* Termina Field from telescope */
- gSaveContext.respawn[RESTART_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
func_80169EFC(&play->state); /* Load new entrance? */
gSaveContext.respawnFlag = -2;
this->actionFunc = EnBji01_DoNothing;
diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
index 1e43b824b8..1083b25689 100644
--- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c
+++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c
@@ -502,7 +502,7 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
(this->collider1.base.oc->category == ACTORCAT_BOSS)))) {
this->timer = 0;
thisx->shape.rot.z = 0;
- } else if ((this->timer > 100) && (func_80123F48(play, &thisx->world.pos, 30.0f, 50.0f))) {
+ } else if ((this->timer > 100) && (Player_IsBurningStickInRange(play, &thisx->world.pos, 30.0f, 50.0f))) {
this->timer = 100;
}
diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
index 4fbe400340..103ce0824f 100644
--- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
+++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c
@@ -182,7 +182,7 @@ void func_808AEAE0(EnBombf* this, PlayState* play) {
}
}
} else {
- if (func_80123F48(play, &this->actor.world.pos, 30.0f, 50.0f)) {
+ if (Player_IsBurningStickInRange(play, &this->actor.world.pos, 30.0f, 50.0f)) {
bombf = (EnBombf*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBF, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, ENBOMBF_0);
if (bombf != NULL) {
@@ -365,7 +365,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
((this->colliderCylinder.base.ocFlags1 & OC1_HIT) && (this->colliderCylinder.base.oc->category == 5))) {
this->unk_1F8 = 1;
this->timer = 0;
- } else if ((this->timer > 100) && func_80123F48(play, &this->actor.world.pos, 30.0f, 50.0f)) {
+ } else if ((this->timer > 100) && Player_IsBurningStickInRange(play, &this->actor.world.pos, 30.0f, 50.0f)) {
this->timer = 100;
}
diff --git a/src/overlays/actors/ovl_En_Butte/z_en_butte.c b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
index 5a1744da46..c9a09bf339 100644
--- a/src/overlays/actors/ovl_En_Butte/z_en_butte.c
+++ b/src/overlays/actors/ovl_En_Butte/z_en_butte.c
@@ -321,9 +321,9 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
sp40 = 0.0f;
if ((this->unk_24E != 0) && (this->unk_24C < 12)) {
- sp48.x = player->swordInfo[0].tip.x + (Math_SinS(player->actor.shape.rot.y) * 10.0f);
- sp48.y = player->swordInfo[0].tip.y;
- sp48.z = player->swordInfo[0].tip.z + (Math_CosS(player->actor.shape.rot.y) * 10.0f);
+ sp48.x = player->meleeWeaponInfo[0].tip.x + (Math_SinS(player->actor.shape.rot.y) * 10.0f);
+ sp48.y = player->meleeWeaponInfo[0].tip.y;
+ sp48.z = player->meleeWeaponInfo[0].tip.z + (Math_CosS(player->actor.shape.rot.y) * 10.0f);
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &sp48);
if (Math_ScaledStepToS(&this->actor.world.rot.y, yaw + (s32)(Rand_ZeroOne() * D_8091D3F0), 0x7D0)) {
@@ -335,10 +335,10 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
}
}
- if (player->swordInfo[0].tip.y < player->actor.world.pos.y + 30.0f) {
+ if (player->meleeWeaponInfo[0].tip.y < player->actor.world.pos.y + 30.0f) {
this->unk_25C = player->actor.world.pos.y + 30.0f;
} else {
- this->unk_25C = player->swordInfo[0].tip.y;
+ this->unk_25C = player->meleeWeaponInfo[0].tip.y;
}
func_8091C6B4(this);
@@ -359,7 +359,7 @@ void func_8091CBB4(EnButte* this, PlayState* play) {
!(distSq < SQ(320.0f))) {
func_8091C748(this);
} else if ((distSq > SQ(240.0f)) &&
- (Math3D_XZDistanceSquared(player->swordInfo[0].tip.x, player->swordInfo[0].tip.z,
+ (Math3D_XZDistanceSquared(player->meleeWeaponInfo[0].tip.x, player->meleeWeaponInfo[0].tip.z,
this->actor.world.pos.x, this->actor.world.pos.z) < SQ(60.0f))) {
func_8091CF64(this);
}
@@ -416,7 +416,7 @@ void EnButte_Update(Actor* thisx, PlayState* play) {
this->unk_258 += 0x600;
if (ENBUTTE_GET_1(&this->actor) == ENBUTTE_1) {
- if (GET_PLAYER(play)->swordState == 0) {
+ if (GET_PLAYER(play)->meleeWeaponState == 0) {
if (this->unk_252 > 0) {
this->unk_252--;
}
diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
index 92056c2ae6..31ede6a6d4 100644
--- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
+++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c
@@ -438,7 +438,7 @@ s32 func_8089AE00(EnDinofos* this, PlayState* play) {
return true;
}
- if ((this->actor.xzDistToPlayer < 100.0f) && (player->swordState != 0) && this->actor.isTargeted &&
+ if ((this->actor.xzDistToPlayer < 100.0f) && (player->meleeWeaponState != 0) && this->actor.isTargeted &&
(Rand_ZeroOne() < 0.5f) && func_8089A968(this) && Player_IsFacingActor(&this->actor, 0x2000, play)) {
if (Rand_ZeroOne() < 0.5f) {
func_8089C024(this, 2);
diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c
index e938706f00..8a2fff41a9 100644
--- a/src/overlays/actors/ovl_En_Door/z_en_door.c
+++ b/src/overlays/actors/ovl_En_Door/z_en_door.c
@@ -489,7 +489,7 @@ void func_80866B20(EnDoor* this, PlayState* play) {
} else if (this->unk_1A7 != 0) {
this->actionFunc = func_80866F94;
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_DOOR_OPEN);
- } else if (!Player_InCsMode(&play->state)) {
+ } else if (!Player_InCsMode(play)) {
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &playerPosRelToDoor, &player->actor.world.pos);
if ((D_80867BC0[0] != 0) || ((fabsf(playerPosRelToDoor.y) < 20.0f) && (fabsf(playerPosRelToDoor.x) < 20.0f) &&
(fabsf(playerPosRelToDoor.z) < 50.0f))) {
diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
index 7d53c4fc28..adc56431e9 100644
--- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c
+++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c
@@ -662,7 +662,7 @@ void func_8088DD34(EnElf* this, PlayState* play) {
return;
}
- if (Player_InCsMode(&play->state)) {
+ if (Player_InCsMode(play)) {
if ((this->fairyFlags & 0x4000) && (this->fairyFlags & 0x100) && func_8088DCA4(this)) {
return;
}
diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
index 0afd9eed7d..48b3a75eda 100644
--- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
+++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c
@@ -437,7 +437,7 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) {
}
scaledYDistance = this->actor.playerHeightRel - (this->actor.shape.yOffset * this->actor.scale.y);
- if (!Player_InCsMode(&play->state)) {
+ if (!Player_InCsMode(play)) {
if ((this->actor.xzDistToPlayer < 30.0f) && (scaledYDistance < 12.0f) && (scaledYDistance > -68.0f)) {
EnElforg_SetupFairyCollected(this, play);
func_80115908(play, 48);
diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
index 962bc6e491..f5b34cc7a5 100644
--- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
+++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
@@ -709,8 +709,10 @@ void func_80C20E90(EnHintSkb* this, PlayState* play) {
this->unk_3E8 |= 1;
case 15:
- if ((player->swordAnimation == 4) || (player->swordAnimation == 11) || (player->swordAnimation == 22) ||
- (player->swordAnimation == 23)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_RIGHT) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) {
this->unk_3E8 |= 1;
}
diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
index d324c4b2a0..78b74a2f11 100644
--- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
+++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c
@@ -931,7 +931,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) {
if (this->unk204 == 0) {
player = GET_PLAYER(play);
- Play_SetRespawnData(&play->state, RESTART_MODE_DOWN, Entrance_CreateIndexFromSpawn(0), player->unk_3CE,
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateIndexFromSpawn(0), player->unk_3CE,
0xBFF, &player->unk_3C0, player->unk_3CC);
func_80169EFC(&play->state);
diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
index 103039f56b..709f6c7da8 100644
--- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
+++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c
@@ -254,7 +254,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) {
u8 i;
if (hitItem->toucher.dmgFlags & 0x200) {
- this->cutType = sCutTypes[player->swordAnimation];
+ this->cutType = sCutTypes[player->meleeWeaponAnimation];
} else if (hitItem->toucher.dmgFlags & 0x10) {
this->invincibilityTimer = 0;
this->cutType = this->unk_19A + 3;
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
index f9c6ae91cb..63e7c05c22 100644
--- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
+++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
@@ -356,7 +356,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->swordState != 0) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags3 & 0x8000000) ||
+ (player->stateFlags2 & 0x80000)) {
return 1;
}
break;
@@ -366,7 +367,7 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->swordState != 0) || (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags2 & 0x80000)) {
return 1;
}
break;
@@ -376,14 +377,16 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
return 0;
}
- if ((player->swordState != 0) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
+ if ((player->meleeWeaponState != 0) || (player->stateFlags3 & 0x8000000) ||
+ (player->stateFlags2 & 0x80000)) {
return 1;
}
this->unk_28E = 0;
break;
case 3:
- if ((this->unk_28E == 1) && ((player->swordAnimation == 4) || (player->swordAnimation == 6))) {
+ if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H))) {
this->unk_28E = 0;
return 0;
}
@@ -395,7 +398,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
break;
case 4:
- if ((this->unk_28E == 1) && ((player->swordAnimation == 0) || (player->swordAnimation == 2))) {
+ if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_COMBO_1H))) {
this->unk_28E = 0;
return 0;
}
@@ -407,7 +411,7 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
break;
case 5:
- if ((this->unk_28E == 1) && (player->swordAnimation == 12)) {
+ if ((this->unk_28E == 1) && (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H)) {
this->unk_28E = 0;
return 0;
}
@@ -419,7 +423,8 @@ s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
break;
case 6:
- if ((this->unk_28E == 1) && ((player->swordAnimation == 17) || (player->swordAnimation == 20))) {
+ if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH))) {
this->unk_28E = 0;
return 0;
}
@@ -449,7 +454,7 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) {
switch (this->unk_288) {
case 0x271D:
- if (func_80124190(player)) {
+ if (Player_GetMeleeWeaponHeld(player) != 0) {
Message_StartTextbox(play, 0x272A, &this->actor);
this->unk_288 = 0x272A;
return true;
@@ -612,12 +617,13 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) {
}
if (this->unk_28E == 1) {
- if ((player->swordAnimation == 17) || (player->swordAnimation == 20)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH)) {
play->interfaceCtx.unk_25C = 3;
if (gSaveContext.minigameScore >= 27) {
player->stateFlags1 |= 0x20;
}
- } else if (player->swordAnimation == 12) {
+ } else if (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H) {
play->interfaceCtx.unk_25C = 2;
} else {
play->interfaceCtx.unk_25C = 1;
diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
index c6d6780e43..4c7a1ddf85 100644
--- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
+++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
@@ -58,7 +58,40 @@ u8 D_80B386C0[] = {
};
s32 D_80B386CC[] = {
- 5, 5, 3, 3, 7, 7, 7, 7, 3, 3, 3, 3, 7, 7, 3, 3, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7,
+ 5, // PLAYER_MWA_FORWARD_SLASH_1H
+ 5, // PLAYER_MWA_FORWARD_SLASH_2H
+ 3, // PLAYER_MWA_FORWARD_COMBO_1H
+ 3, // PLAYER_MWA_FORWARD_COMBO_2H
+ 7, // PLAYER_MWA_RIGHT_SLASH_1H
+ 7, // PLAYER_MWA_RIGHT_SLASH_2H
+ 7, // PLAYER_MWA_RIGHT_COMBO_1H
+ 7, // PLAYER_MWA_RIGHT_COMBO_2H
+ 3, // PLAYER_MWA_LEFT_SLASH_1H
+ 3, // PLAYER_MWA_LEFT_SLASH_2H
+ 3, // PLAYER_MWA_LEFT_COMBO_1H
+ 3, // PLAYER_MWA_LEFT_COMBO_2H
+ 7, // PLAYER_MWA_STAB_1H
+ 7, // PLAYER_MWA_STAB_2H
+ 3, // PLAYER_MWA_STAB_COMBO_1H
+ 3, // PLAYER_MWA_STAB_COMBO_2H
+ 0, // PLAYER_MWA_FLIPSLASH_START
+ 0, // PLAYER_MWA_JUMPSLASH_START
+ 0, // PLAYER_MWA_ZORA_JUMPKICK_START
+ 0, // PLAYER_MWA_FLIPSLASH_FINISH
+ 5, // PLAYER_MWA_JUMPSLASH_FINISH
+ 0, // PLAYER_MWA_ZORA_JUMPKICK_FINISH
+ 0, // PLAYER_MWA_BACKSLASH_RIGHT
+ 0, // PLAYER_MWA_BACKSLASH_LEFT
+ 0, // PLAYER_MWA_GORON_PUNCH_LEFT
+ 0, // PLAYER_MWA_GORON_PUNCH_RIGHT
+ 0, // PLAYER_MWA_GORON_PUNCH_BUTT
+ 0, // PLAYER_MWA_ZORA_PUNCH_LEFT
+ 0, // PLAYER_MWA_ZORA_PUNCH_COMBO
+ 0, // PLAYER_MWA_ZORA_PUNCH_KICK
+ 7, // PLAYER_MWA_SPIN_ATTACK_1H
+ 7, // PLAYER_MWA_SPIN_ATTACK_2H
+ 7, // PLAYER_MWA_BIG_SPIN_1H
+ 7 // PLAYER_MWA_BIG_SPIN_2H
};
Vec3f D_80B38754 = { -2.0f, 3.0f, 0.0f };
@@ -328,7 +361,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) {
break;
case 4:
- if (player->swordAnimation == 8) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_SLASH_1H) {
sp48 = D_80B3876C;
} else {
sp48 = D_80B38778;
@@ -337,7 +370,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) {
break;
case 5:
- if (player->swordAnimation == 0) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) {
sp48 = D_80B38784;
} else {
sp48 = D_80B38790;
@@ -346,7 +379,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) {
break;
case 6:
- if (player->swordAnimation == 0) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) {
sp48 = D_80B3879C;
} else {
sp48 = D_80B387A8;
@@ -355,7 +388,7 @@ void func_80B37590(EnMaruta* this, PlayState* play) {
break;
case 8:
- if (player->swordAnimation == 4) {
+ if (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) {
sp48 = D_80B387B4;
} else {
sp48 = D_80B387C0;
@@ -459,8 +492,10 @@ s32 func_80B37B78(EnMaruta* this, PlayState* play) {
temp_v1 = BINANG_SUB(temp_v1, player->actor.shape.rot.y);
if ((ABS_ALT(temp_v1) < 0x1555) ||
- ((player->swordState != 0) && ((player->swordAnimation == 4) || (player->swordAnimation == 6) ||
- (player->swordAnimation == 0x1E) || (player->swordAnimation == 0x20)))) {
+ ((player->meleeWeaponState != 0) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BIG_SPIN_1H)))) {
return true;
}
return false;
@@ -492,16 +527,17 @@ void func_80B37CA0(EnMaruta* this, PlayState* play) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SWORD_STRIKE);
- if (D_80B386CC[player->swordAnimation] != 0) {
- s32 temp = D_80B386CC[player->swordAnimation] + 1;
+ if (D_80B386CC[player->meleeWeaponAnimation] != 0) {
+ s32 temp = D_80B386CC[player->meleeWeaponAnimation] + 1;
temp = (temp << 8) & 0xFF00;
- this->unk_210 = D_80B386CC[player->swordAnimation];
+ this->unk_210 = D_80B386CC[player->meleeWeaponAnimation];
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MARUTA, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
temp);
this->actor.world.rot.y = this->actor.shape.rot.y;
- if ((this->unk_210 == 5) || ((this->unk_210 == 7) && (player->swordAnimation == 0xC))) {
+ if ((this->unk_210 == 5) ||
+ ((this->unk_210 == 7) && (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H))) {
func_80B37590(this, play);
} else {
func_80B374B8(this);
diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
index afea56cd0f..9a70ce02c1 100644
--- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
+++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c
@@ -212,7 +212,7 @@ void func_80B1A768(EnPoSisters* this, PlayState* play) {
f32 sp20;
if ((this->unk_18D == 0) || (this->actionFunc != func_80B1B444)) {
- if (((player->swordState == 0) || (player->swordAnimation >= 30)) &&
+ if (((player->meleeWeaponState == 0) || (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H)) &&
((player->actor.world.pos.y - player->actor.floorHeight) < 1.0f)) {
Math_StepToF(&this->unk_2EC, 110.0f, 3.0f);
} else {
diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
index d6427d900e..8044a6c98f 100644
--- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
+++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c
@@ -1035,8 +1035,10 @@ void func_80B72970(EnRailSkb* this, PlayState* play) {
this->unk_402 |= 1;
case 15:
- if ((player->swordAnimation == 4) || (player->swordAnimation == 11) || (player->swordAnimation == 22) ||
- (player->swordAnimation == 23)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_RIGHT) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) {
this->unk_402 |= 1;
}
diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
index f92fa32d17..9a55b388d5 100644
--- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c
+++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c
@@ -962,8 +962,10 @@ void func_8099672C(EnSkb* this, PlayState* play) {
this->unk_3D8 |= 1;
case 15:
- if ((player->swordAnimation == 4) || (player->swordAnimation == 11) ||
- (player->swordAnimation == 22) || (player->swordAnimation == 23)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_COMBO_2H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_RIGHT) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_BACKSLASH_LEFT)) {
this->unk_3D8 |= 1;
}
diff --git a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
index cbc4670978..d45cc854c0 100644
--- a/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
+++ b/src/overlays/actors/ovl_En_Tanron1/z_en_tanron1.c
@@ -150,9 +150,9 @@ void EnTanron1_Update(Actor* thisx, PlayState* play) {
}
if ((player->itemActionParam == 7) && (player->unk_B28 != 0)) {
- this->unk_14C.x = player->swordInfo[0].tip.x;
- this->unk_14C.y = player->swordInfo[0].tip.y;
- this->unk_14C.z = player->swordInfo[0].tip.z;
+ this->unk_14C.x = player->meleeWeaponInfo[0].tip.x;
+ this->unk_14C.y = player->meleeWeaponInfo[0].tip.y;
+ this->unk_14C.z = player->meleeWeaponInfo[0].tip.z;
this->unk_158 = 0x5000;
this->unk_15C = 50.0f;
@@ -207,8 +207,8 @@ void func_80BB5318(EnTanron1* this, PlayState* play) {
f32 temp_f30 = this->unk_15C;
if (player->unk_ADC != 0) {
- phi_s2 = &player->swordInfo[0].tip;
- if (player->swordAnimation >= 30) {
+ phi_s2 = &player->meleeWeaponInfo[0].tip;
+ if (player->meleeWeaponAnimation >= PLAYER_MWA_SPIN_ATTACK_1H) {
phi_f28 = 2500.0f;
} else {
phi_f28 = 400.0f;
diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
index 6895ee1123..75098bfd43 100644
--- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c
+++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c
@@ -398,7 +398,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
func_80A41FA4(this, play);
} else {
gSaveContext.screenScale = 0.0f;
- Play_SetRespawnData(&play->state, RESTART_MODE_DOWN, Entrance_CreateIndexFromSpawn(0),
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, Entrance_CreateIndexFromSpawn(0),
player->unk_3CE, 0xBFF, &player->unk_3C0, player->unk_3CC);
func_80169EFC(&play->state);
if (player->stateFlags1 & 0x800000) {
@@ -447,7 +447,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) {
} else {
playerParams = 0xBFF;
}
- Play_SetRespawnData(&play->state, RESTART_MODE_RETURN, entranceIndex, player->unk_3CE, playerParams,
+ Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, entranceIndex, player->unk_3CE, playerParams,
&player->unk_3C0, player->unk_3CC);
if ((play->sceneNum == SCENE_TENMON_DAI) || (play->sceneNum == SCENE_00KEIKOKU)) {
diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.c b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
index 91632c6808..2cb17e23bf 100644
--- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c
+++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c
@@ -980,7 +980,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
player->unk_3CE, 0xBFF, &player->unk_3C0, player->unk_3CC);
this->unk_276 = 99;
play->sceneLoadFlag = 0x14;
- play->nextEntranceIndex = gSaveContext.respawn[RESTART_MODE_RETURN].entranceIndex;
+ play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->unk_1887F = 2;
if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) {
gSaveContext.respawnFlag = -0x63;
@@ -1061,7 +1061,7 @@ void func_80A92950(EnTest6* this, PlayState* play) {
player->unk_3CE, 0xBFF, &player->unk_3C0, player->unk_3CC);
this->unk_276 = 99;
play->sceneLoadFlag = 0x14;
- play->nextEntranceIndex = gSaveContext.respawn[RESTART_MODE_RETURN].entranceIndex;
+ play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->unk_1887F = 2;
gSaveContext.respawnFlag = 2;
play->msgCtx.ocarinaMode = 4;
diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.c b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
index dec0de7a53..9f263a1c3f 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.c
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.c
@@ -464,14 +464,14 @@ s32 func_80BA42BC(EnToto* this, PlayState* play) {
}
}
}
- func_80122744(play, this->unk2BC, phi_s0, end - phi_s0);
+ func_80122744(play, &this->unk_2BC, phi_s0, end - phi_s0);
this->spotlights = Actor_Spawn(&play->actorCtx, play, ACTOR_DM_CHAR07, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0xF02);
return 0;
}
s32 func_80BA43F4(EnToto* this, PlayState* play) {
func_80BA3C88(this);
- if (func_80122760(play, this->unk2BC, 60.0f)) {
+ if (func_80122760(play, &this->unk_2BC, 60.0f)) {
func_800B7298(play, NULL, 0x13);
return func_80BA4204(this, play);
}
diff --git a/src/overlays/actors/ovl_En_Toto/z_en_toto.h b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
index aed6af1ca1..94c80ef4a4 100644
--- a/src/overlays/actors/ovl_En_Toto/z_en_toto.h
+++ b/src/overlays/actors/ovl_En_Toto/z_en_toto.h
@@ -37,7 +37,7 @@ typedef struct EnToto {
/* 0x2B6 */ u8 unk2B6;
/* 0x2B7 */ u8 unk2B7;
/* 0x2B8 */ EnTotoText* text;
- /* 0x2BC */ char unk2BC[0x8]; // Some z_player_lib struct size 0x8 more info from func_80122744 and func_80122760
+ /* 0x2BC */ struct_80122744_arg1 unk_2BC;
/* 0x2C4 */ Actor* spotlights;
/* 0x2C8 */ s32 pad2C8;
} EnToto; // size = 0x2CC
diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c
index 03ca4215aa..83b374e40e 100644
--- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c
+++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c
@@ -876,7 +876,7 @@ s32 func_80A87880(Actor* thisx, PlayState* play) {
} else if (Animation_OnFrame(&this->skelAnime, 12.0f) && !(this->unk_34E & 0x800)) {
this->unk_34E |= 0x400;
this->unk_34E |= 0x800;
- func_80123AA4(player, 3);
+ Player_SetModels(player, 3);
}
break;
diff --git a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
index 65bca693ad..e67d8a6306 100644
--- a/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
+++ b/src/overlays/actors/ovl_En_Warp_Uzu/z_en_warp_uzu.c
@@ -112,7 +112,7 @@ void func_80A66278(EnWarpUzu* this, PlayState* play) {
void func_80A66384(EnWarpUzu* this, PlayState* play) {
play->nextEntranceIndex = 0x22A0;
- gSaveContext.respawn[RESTART_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
func_80169EFC(&play->state);
gSaveContext.respawnFlag = -2;
this->actionFunc = EnWarpUzu_DoNothing;
diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
index 77a9611346..da287ebf1f 100644
--- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
+++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c
@@ -91,7 +91,7 @@ void EnWarpTag_CheckDungeonKeepObject(EnWarptag* this, PlayState* play) {
}
void EnWarpTag_WaitForPlayer(EnWarptag* this, PlayState* play) {
- if (!Player_InCsMode(&play->state) && (this->dyna.actor.xzDistToPlayer <= 30.0f) &&
+ if (!Player_InCsMode(play) && (this->dyna.actor.xzDistToPlayer <= 30.0f) &&
(this->dyna.actor.playerHeightRel <= 10.0f)) {
if (GET_WARPTAG_INVISIBLE(&this->dyna.actor)) {
func_800B7298(play, NULL, 0x51);
diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
index 95a1a1b050..8a5da16c5f 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -411,7 +411,7 @@ s32 func_80990948(PlayState* play, EnWf* this, s16 arg2) {
}
if (func_800BE184(play, &this->actor, 100.0f, 10000, 12000, this->actor.shape.rot.y) &&
- ((player->swordAnimation == 0x11) || ((play->gameplayFrames % 2) != 0))) {
+ ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) || ((play->gameplayFrames % 2) != 0))) {
func_8099282C(this);
return true;
}
@@ -424,7 +424,7 @@ s32 func_80990948(PlayState* play, EnWf* this, s16 arg2) {
return true;
}
- if ((player->swordAnimation == 0x11) || ((play->gameplayFrames % 2) != 0)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) || ((play->gameplayFrames % 2) != 0)) {
func_8099282C(this);
return true;
}
@@ -615,7 +615,7 @@ void func_80991280(EnWf* this, PlayState* play) {
if (!func_8099408C(play, this) && !func_80990948(play, this, 0)) {
phi_v1 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y));
- if ((this->actor.xzDistToPlayer < 80.0f) && (player->swordState != 0) && (phi_v1 >= 0x1F40)) {
+ if ((this->actor.xzDistToPlayer < 80.0f) && (player->meleeWeaponState != 0) && (phi_v1 >= 0x1F40)) {
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
func_80991948(this);
@@ -665,7 +665,7 @@ void func_8099149C(EnWf* this, PlayState* play) {
sp28 = ABS_ALT(BINANG_SUB(player->actor.shape.rot.y, this->actor.shape.rot.y));
- if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && (player->swordState != 0) && (sp28 >= 0x1F40)) {
+ if ((this->actor.xzDistToPlayer < (150.0f + sp2C)) && (player->meleeWeaponState != 0) && (sp28 >= 0x1F40)) {
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
if (Rand_ZeroOne() > 0.7f) {
@@ -1066,7 +1066,7 @@ void func_809928CC(EnWf* this, PlayState* play) {
if (this->unk_2A0 != 0) {
this->unk_2A0--;
} else if (func_800BE184(play, &this->actor, 100.0f, 10000, 0x4000, this->actor.shape.rot.y)) {
- if ((player->swordAnimation != 0x11) || ((play->gameplayFrames % 2) != 0)) {
+ if ((player->meleeWeaponAnimation != PLAYER_MWA_JUMPSLASH_START) || ((play->gameplayFrames % 2) != 0)) {
this->unk_2A0 = 10;
} else {
func_8099223C(this);
diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
index 5f1a280fba..666a5156bd 100644
--- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
+++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c
@@ -72,7 +72,7 @@ void EnWizFire_Init(Actor* thisx, PlayState* play) {
this->unk_1FC = 255.0f;
this->actor.flags &= ~ACTOR_FLAG_1;
- if (!func_8012405C(play)) {
+ if (!Player_HasMirrorShieldEquipped(play)) {
this->collider.info.toucher.dmgFlags = 0x20000000;
}
@@ -266,7 +266,7 @@ void func_80A49A44(EnWizFire* this, PlayState* play) {
}
}
- if (func_8012405C(play) && (this->collider.base.atFlags & AT_BOUNCED)) {
+ if (Player_HasMirrorShieldEquipped(play) && (this->collider.base.atFlags & AT_BOUNCED)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_REFLECT_MG);
this->collider.base.atFlags &= ~(AT_TYPE_ENEMY | AT_BOUNCED | AT_HIT);
this->collider.base.atFlags |= AT_TYPE_PLAYER;
diff --git a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
index 779ddf0551..5160dc074e 100644
--- a/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
+++ b/src/overlays/actors/ovl_Mir_Ray/z_mir_ray.c
@@ -602,7 +602,7 @@ void MirRay_Draw(Actor* thisx, PlayState* play) {
this->reflectIntensity = 0.0f;
- if (!D_808E3BF0 && !this->unLit && func_80124088(play)) {
+ if (!D_808E3BF0 && !this->unLit && Player_IsHoldingMirrorShield(play)) {
Matrix_Mult(&player->shieldMf, MTXMODE_NEW);
MirRay_SetIntensity(this, play);
diff --git a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
index 1127be69ed..66a14a2a64 100644
--- a/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
+++ b/src/overlays/actors/ovl_Mir_Ray3/z_mir_ray3.c
@@ -127,7 +127,7 @@ void MirRay3_Update(Actor* thisx, PlayState* play) {
this->unk_210 &= ~2;
- if (func_8012405C(play)) {
+ if (Player_HasMirrorShieldEquipped(play)) {
if (this->colliderCylinder.base.acFlags & AC_HIT) {
this->unk_210 |= 2;
}
@@ -353,7 +353,7 @@ void MirRay3_Draw(Actor* thisx, PlayState* play) {
f32 temp;
u16 time;
- if (!(this->unk_210 & 1) && func_8012405C(play)) {
+ if (!(this->unk_210 & 1) && Player_HasMirrorShieldEquipped(play)) {
Matrix_Mult(&player->shieldMf, MTXMODE_NEW);
func_80B9E544(this, play);
diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
index 96e653bdf4..87433b9888 100644
--- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
+++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c
@@ -4,6 +4,7 @@
* Description: Breakable Pot With Grass
*/
+#include "prevent_bss_reordering.h"
#include "z_obj_flowerpot.h"
#include "objects/object_flowerpot/object_flowerpot.h"
@@ -23,13 +24,13 @@ void func_80A1CC0C(ObjFlowerpot* this, PlayState* play);
void func_80A1CD10(ObjFlowerpot* this);
void func_80A1CEF4(ObjFlowerpot* this2, PlayState* play);
-static u32 D_80A1D830;
-static MtxF D_80A1D838[8];
-static s16 D_80A1DA38;
-static s16 D_80A1DA3A;
-static s16 D_80A1DA3C;
-static s16 D_80A1DA3E;
-static s16 D_80A1DA40;
+u32 D_80A1D830;
+MtxF D_80A1D838[8];
+s16 D_80A1DA38;
+s16 D_80A1DA3A;
+s16 D_80A1DA3C;
+s16 D_80A1DA3E;
+s16 D_80A1DA40;
const ActorInit Obj_Flowerpot_InitVars = {
ACTOR_OBJ_FLOWERPOT,
@@ -81,15 +82,15 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-static s16 D_80A1D3F8 = 0;
+s16 D_80A1D3F8 = 0;
-static s16 D_80A1D3FC = 0;
+s16 D_80A1D3FC = 0;
-static s16 D_80A1D400 = 0;
+s16 D_80A1D400 = 0;
-static u8 D_80A1D404 = true;
+u8 D_80A1D404 = true;
-static Vec3f D_80A1D408 = { 0.0f, 20.0f, 0.0f };
+Vec3f D_80A1D408 = { 0.0f, 20.0f, 0.0f };
static InitChainEntry sInitChain[] = {
ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
index c5a11c8e3e..394172d72b 100644
--- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
+++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c
@@ -1204,7 +1204,7 @@ void func_80A25FD4(ObjIceblock* this, PlayState* play) {
if (sp2C == -1) {
sp30 = false;
} else if (!(this->unk_1B0 & 2) && (this->unk_26E[sp2C] >= 11) && !func_80A24118(this, play, 2.0f, &sp20) &&
- !Player_InCsMode(&play->state)) {
+ !Player_InCsMode(play)) {
func_80A23370(this, sp2C);
func_80A260E8(this);
sp30 = false;
diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
index e14214502c..bc1d353fd3 100644
--- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
+++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c
@@ -228,7 +228,9 @@ void func_80B658A4(ObjKendoKanban* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->unk_30C == OBJKENDOKANBAN_F_0) {
- if ((player->swordAnimation == 0) || (player->swordAnimation == 1) || (player->swordAnimation == 0x14)) {
+ if ((player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_2H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH)) {
this->unk_30C = (OBJKENDOKANBAN_F_4 | OBJKENDOKANBAN_F_1);
this->unk_304 = 0x71C;
this->actor.velocity = D_80B6666C;
diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
index b6c2a1d8b2..4bfb5ba968 100644
--- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
+++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c
@@ -84,7 +84,7 @@ s32 ObjOshihiki_StrongEnough(ObjOshihiki* this, PlayState* play) {
return true;
}
- if (func_80124020() >= 2) {
+ if (Player_GetStrength() >= PLAYER_STRENGTH_ZORA) {
return true;
}
return false;
diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
index 15bd818fc8..3eee8491a6 100644
--- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
+++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c
@@ -531,7 +531,7 @@ void func_80A22334(ObjSkateblock* this, PlayState* play) {
if (sp2C == -1) {
sp30 = false;
} else if (!(this->unk_1C1 & 2) && (this->unk_172[sp2C] > 10) && (D_80A22A10 == 0) &&
- !func_80A216D4(this, play, 2.0f, &sp20) && !Player_InCsMode(&play->state)) {
+ !func_80A216D4(this, play, 2.0f, &sp20) && !Player_InCsMode(play)) {
func_80A21C88(this, sp2C);
func_80A2244C(this);
sp30 = false;
diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
index f7b1ea0154..4fb83303b4 100644
--- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
+++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c
@@ -534,14 +534,14 @@ s32 func_80B30480(ObjSpidertent* this, PlayState* play, Vec3f* arg2) {
for (i = 0; i < ARRAY_COUNT(this->colliderElements); i++) {
triNorm = &this->collider.elements[i].dim;
- if (func_80B2FB94(&player->swordInfo[0].tip, 6.0f, triNorm, &sp58, &sp54) &&
+ if (func_80B2FB94(&player->meleeWeaponInfo[0].tip, 6.0f, triNorm, &sp58, &sp54) &&
func_80B2FC98(triNorm, &sp58)) {
break;
}
}
if (i < ARRAY_COUNT(this->colliderElements)) {
- Math_Vec3f_Copy(arg2, &player->swordInfo[0].tip);
+ Math_Vec3f_Copy(arg2, &player->meleeWeaponInfo[0].tip);
return true;
}
}
diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
index 6fb70dcf92..801cfc3ce4 100644
--- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
+++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c
@@ -595,7 +595,7 @@ void ObjSwitch_FloorSwitchDown(ObjSwitch* this, PlayState* play) {
case OBJSWITCH_SUBTYPE_RESET:
case OBJSWITCH_SUBTYPE_RESET_INVERTED:
if (!DynaPolyActor_IsInSwitchPressedState(&this->dyna) &&
- (!Player_InCsMode(&play->state) || play->sceneNum == SCENE_SECOM)) {
+ (!Player_InCsMode(play) || play->sceneNum == SCENE_SECOM)) {
if (this->floorSwitchReleaseTimer <= 0) {
if (subType == OBJSWITCH_SUBTYPE_RESET) {
ObjSwitch_SetSwitchFlagState(this, play, false);
@@ -885,7 +885,7 @@ void ObjSwitch_LargeFloorSwitchDown(ObjSwitch* this, PlayState* play) {
ObjSwitch_LargeFloorSwitchRiseUpInit(this);
}
} else if (subType == OBJSWITCH_SUBTYPE_RESET || subType == OBJSWITCH_SUBTYPE_RESET_INVERTED) {
- if (!DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna) && !Player_InCsMode(&play->state)) {
+ if (!DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna) && !Player_InCsMode(play)) {
if (this->floorSwitchReleaseTimer <= 0) {
if (OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor) == OBJSWITCH_SUBTYPE_RESET) {
ObjSwitch_SetSwitchFlagState(this, play, false);
@@ -945,7 +945,7 @@ void ObjSwitch_Update(Actor* thisx, PlayState* play) {
break;
case OBJSWITCH_TYPE_CRYSTAL:
case OBJSWITCH_TYPE_CRYSTAL_TARGETABLE:
- if (!Player_InCsMode(&play->state)) {
+ if (!Player_InCsMode(play)) {
if (this->disableCrystalSwitchTimer > 0) {
this->disableCrystalSwitchTimer--;
}
diff --git a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
index 2d7f2a836e..c653bd25d6 100644
--- a/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
+++ b/src/overlays/actors/ovl_Obj_Syokudai/z_obj_syokudai.c
@@ -199,7 +199,7 @@ void ObjSyokudai_Update(Actor* thisx, PlayState* play2) {
} else if (player->itemActionParam == PLAYER_AP_STICK) {
Vec3f stickTipSeparationVec;
- Math_Vec3f_Diff(&player->swordInfo[0].tip, &thisx->world.pos, &stickTipSeparationVec);
+ Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &thisx->world.pos, &stickTipSeparationVec);
stickTipSeparationVec.y -= OBJ_SYOKUDAI_STICK_IGNITION_HEIGHT;
if (SQXYZ(stickTipSeparationVec) < SQ(OBJ_SYOKUDAI_STICK_IGNITION_RADIUS)) {
interaction = OBJ_SYOKUDAI_INTERACTION_STICK;
diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
index a1c7d3fb33..2bba1b3387 100644
--- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
+++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c
@@ -457,9 +457,9 @@ void ObjTokeidai_TowerOpening_EndCutscene(ObjTokeidai* this, PlayState* play) {
gSaveContext.nextCutsceneIndex = 0;
gSaveContext.respawnFlag = 2;
play->sceneLoadFlag = 0x14;
- play->nextEntranceIndex = gSaveContext.respawn[RESTART_MODE_RETURN].entranceIndex;
+ play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->unk_1887F = 2;
- if (gSaveContext.respawn[RESTART_MODE_RETURN].playerParams == 0xCFF) {
+ if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams == 0xCFF) {
gSaveContext.nextTransition = 0x15;
} else {
gSaveContext.nextTransition = 2;
diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c
index d4247ca610..68beedeecb 100644
--- a/src/overlays/gamestates/ovl_select/z_select.c
+++ b/src/overlays/gamestates/ovl_select/z_select.c
@@ -44,7 +44,7 @@ void Select_LoadGame(SelectContext* this, u32 entranceIndex, s32 opt) {
gSaveContext.save.time = CLOCK_TIME(6, 0) - 1;
}
- gSaveContext.respawn[RESTART_MODE_DOWN].entranceIndex = 0xFFFF;
+ gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = 0xFFFF;
gSaveContext.seqIndex = (u8)NA_BGM_DISABLED;
gSaveContext.nightSeqIndex = 0xFF;
gSaveContext.showTitleCard = true;
diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt
index 0d01095b1a..f3fca8ff46 100644
--- a/tools/disasm/files.txt
+++ b/tools/disasm/files.txt
@@ -544,7 +544,7 @@
0x801BF550 : "z_map_exp",
0x801BF5C0 : "z_msgevent",
0x801BF6C0 : "z_parameter",
- 0x801BFDD0 : "z_player_lib",
+ 0x801BFDA0 : "z_player_lib",
0x801C0EC0 : "z_quake",
0x801C0EF0 : "z_rcp",
0x801C1D10 : "z_room",
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 8d27665a5b..694fb27433 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -2182,29 +2182,29 @@
0x80122BA4:("func_80122BA4",),
0x80122C20:("func_80122C20",),
0x80122D44:("func_80122D44",),
- 0x80122ED8:("func_80122ED8",),
- 0x80122EEC:("func_80122EEC",),
+ 0x80122ED8:("Player_MaskIdToItemId",),
+ 0x80122EEC:("Player_GetCurMaskItemId",),
0x80122F28:("func_80122F28",),
0x80122F9C:("func_80122F9C",),
0x80122FCC:("func_80122FCC",),
0x8012300C:("func_8012300C",),
0x8012301C:("func_8012301C",),
0x80123140:("func_80123140",),
- 0x80123358:("func_80123358",),
+ 0x80123358:("Player_InBlockingCsMode",),
0x801233E4:("Player_InCsMode",),
0x80123420:("func_80123420",),
0x80123434:("func_80123434",),
0x80123448:("func_80123448",),
- 0x801234B0:("func_801234B0",),
+ 0x801234B0:("Player_IsGoronOrDeku",),
0x801234D4:("func_801234D4",),
0x80123590:("func_80123590",),
0x801235DC:("func_801235DC",),
0x8012364C:("func_8012364C",),
0x80123810:("func_80123810",),
- 0x80123960:("func_80123960",),
+ 0x80123960:("Player_ActionToModelGroup",),
0x801239AC:("func_801239AC",),
- 0x80123AA4:("func_80123AA4",),
- 0x80123BD4:("func_80123BD4",),
+ 0x80123AA4:("Player_SetModels",),
+ 0x80123BD4:("Player_SetModelGroup",),
0x80123C58:("func_80123C58",),
0x80123C90:("Player_SetEquipmentData",),
0x80123D50:("func_80123D50",),
@@ -2213,22 +2213,22 @@
0x80123E90:("func_80123E90",),
0x80123F14:("func_80123F14",),
0x80123F2C:("func_80123F2C",),
- 0x80123F48:("func_80123F48",),
- 0x80124020:("func_80124020",),
+ 0x80123F48:("Player_IsBurningStickInRange",),
+ 0x80124020:("Player_GetStrength",),
0x8012403C:("Player_GetMask",),
0x8012404C:("Player_RemoveMask",),
- 0x8012405C:("func_8012405C",),
- 0x80124088:("func_80124088",),
- 0x801240C8:("func_801240C8",),
+ 0x8012405C:("Player_HasMirrorShieldEquipped",),
+ 0x80124088:("Player_IsHoldingMirrorShield",),
+ 0x801240C8:("Player_IsHoldingHookshot",),
0x801240DC:("func_801240DC",),
0x80124110:("func_80124110",),
0x80124148:("func_80124148",),
- 0x80124168:("func_80124168",),
- 0x80124190:("func_80124190",),
- 0x801241B4:("func_801241B4",),
- 0x801241E0:("func_801241E0",),
- 0x8012420C:("func_8012420C",),
- 0x8012422C:("func_8012422C",),
+ 0x80124168:("Player_ActionToMeleeWeapon",),
+ 0x80124190:("Player_GetMeleeWeaponHeld",),
+ 0x801241B4:("Player_IsHoldingTwoHandedWeapon",),
+ 0x801241E0:("Player_ActionToBottle",),
+ 0x8012420C:("Player_GetBottleHeld",),
+ 0x8012422C:("Player_ActionToExplosive",),
0x80124258:("Player_GetExplosiveHeld",),
0x80124278:("func_80124278",),
0x801242B4:("func_801242B4",),
@@ -2244,7 +2244,7 @@
0x80125318:("func_80125318",),
0x80125340:("func_80125340",),
0x8012536C:("func_8012536C",),
- 0x801253A4:("func_801253A4",),
+ 0x801253A4:("Player_DrawZoraShield",),
0x80125500:("func_80125500",),
0x80125580:("func_80125580",),
0x80125CE0:("func_80125CE0",),
@@ -2254,15 +2254,15 @@
0x80126440:("func_80126440",),
0x801265C8:("func_801265C8",),
0x8012669C:("func_8012669C",),
- 0x80126808:("func_80126808",),
- 0x8012697C:("func_8012697C",),
+ 0x80126808:("Player_DrawGetItemImpl",),
+ 0x8012697C:("Player_DrawGetItem",),
0x80126AB4:("func_80126AB4",),
0x80126B8C:("func_80126B8C",),
0x80126BD0:("func_80126BD0",),
0x801271B0:("func_801271B0",),
0x80127438:("func_80127438",),
0x80127488:("func_80127488",),
- 0x8012754C:("func_8012754C",),
+ 0x8012754C:("Player_DrawCouplesMask",),
0x80127594:("func_80127594",),
0x801278F8:("func_801278F8",),
0x80127A60:("func_80127A60",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index 949984c1f4..45ba75a87d 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -1200,32 +1200,23 @@
0x801BFD84:("D_801BFD84","UNK_TYPE1","",0x1),
0x801BFD8C:("D_801BFD8C","UNK_TYPE1","",0x1),
0x801BFD94:("D_801BFD94","UNK_TYPE1","",0x1),
- 0x801BFD98:("D_801BFD98","UNK_TYPE2","",0x2),
- 0x801BFD9E:("D_801BFD9E","UNK_TYPE1","",0x1),
+ 0x801BFD98:("D_801BFD98","UNK_TYPE2","",0x8),
+ 0x801BFDA0:("sMaskObjectIds","s16","[24]",0x30),
0x801BFDD0:("D_801BFDD0","UNK_TYPE1","",0x1),
- 0x801BFDE8:("D_801BFDE8","UNK_TYPE1","",0x1),
+ 0x801BFDE8:("sMaskItemIds","UNK_TYPE1","",0x1),
0x801BFE00:("D_801BFE00","UNK_TYPE1","",0x1),
0x801BFE14:("D_801BFE14","UNK_TYPE1","",0x1),
0x801BFF34:("D_801BFF34","UNK_TYPE2","",0x2),
- 0x801BFF3C:("D_801BFF3C","UNK_TYPE1","",0x1),
+ 0x801BFF3C:("sActionModelGroups","UNK_TYPE1","",0x1),
0x801BFF90:("D_801BFF90","UNK_TYPE1","",0x1),
- 0x801BFF98:("D_801BFF98","UNK_TYPE1","",0x1),
- 0x801BFFA0:("D_801BFFA0","UNK_TYPE1","",0x1),
- 0x801BFFB0:("D_801BFFB0","UNK_TYPE1","",0x1),
+ 0x801BFF98:("sPlayerStrengths","UNK_TYPE1","",0x1),
+ 0x801BFFA0:("sEnvironmentTextTriggers","UNK_TYPE1","",0x1),
+ 0x801BFFB0:("gPlayerModelTypes","UNK_TYPE1","",0x1),
0x801BFFFC:("D_801BFFFC","UNK_TYPE1","",0x1),
- 0x801C0000:("D_801C0000","UNK_TYPE1","",0x1),
- 0x801C0001:("D_801C0001","UNK_TYPE1","",0x1),
- 0x801C0002:("D_801C0002","UNK_TYPE1","",0x1),
- 0x801C0008:("D_801C0008","UNK_TYPE1","",0x1),
- 0x801C0010:("D_801C0010","UNK_TYPE1","",0x1),
0x801C0024:("D_801C0024","UNK_TYPE1","",0x1),
0x801C0034:("D_801C0034","UNK_TYPE1","",0x1),
- 0x801C0040:("D_801C0040","UNK_TYPE1","",0x1),
0x801C005C:("D_801C005C","UNK_TYPE1","",0x1),
- 0x801C0060:("D_801C0060","UNK_TYPE1","",0x1),
- 0x801C0070:("D_801C0070","UNK_TYPE1","",0x1),
0x801C0084:("D_801C0084","UNK_TYPE1","",0x1),
- 0x801C00A0:("D_801C00A0","UNK_TYPE1","",0x1),
0x801C00AC:("D_801C00AC","UNK_TYPE1","",0x1),
0x801C00BC:("D_801C00BC","UNK_TYPE1","",0x1),
0x801C00D4:("D_801C00D4","UNK_TYPE1","",0x1),
@@ -1245,7 +1236,7 @@
0x801C02BC:("D_801C02BC","UNK_TYPE1","",0x1),
0x801C02D0:("D_801C02D0","UNK_TYPE1","",0x1),
0x801C02E4:("D_801C02E4","UNK_TYPE1","",0x1),
- 0x801C02F8:("D_801C02F8","UNK_PTR","",0x4),
+ 0x801C02F8:("sPlayerDListGroups","UNK_PTR","",0x4),
0x801C0340:("D_801C0340","UNK_TYPE1","",0x1),
0x801C0368:("D_801C0368","UNK_TYPE1","",0x1),
0x801C03A0:("D_801C03A0","UNK_TYPE1","",0x1),
@@ -1262,9 +1253,7 @@
0x801C05A8:("D_801C05A8","UNK_TYPE1","",0x1),
0x801C05C8:("D_801C05C8","UNK_TYPE1","",0x1),
0x801C05D8:("D_801C05D8","UNK_TYPE1","",0x1),
- 0x801C05F0:("D_801C05F0","UNK_TYPE1","",0x1),
- 0x801C05F2:("D_801C05F2","UNK_TYPE2","",0x2),
- 0x801C05FA:("D_801C05FA","UNK_TYPE1","",0x1),
+ 0x801C05F0:("D_801C05F0","struct_80124618","[3]",0x18),
0x801C0608:("D_801C0608","UNK_TYPE1","",0x1),
0x801C0628:("D_801C0628","UNK_TYPE1","",0x1),
0x801C0678:("D_801C0678","UNK_TYPE1","",0x1),
@@ -1287,15 +1276,13 @@
0x801C0860:("D_801C0860","UNK_TYPE1","",0x1),
0x801C0870:("D_801C0870","UNK_PTR","",0x4),
0x801C0890:("D_801C0890","UNK_TYPE1","",0x1),
- 0x801C08A0:("D_801C08A0","UNK_TYPE1","",0x1),
- 0x801C08A1:("D_801C08A1","UNK_TYPE1","",0x1),
+ 0x801C08A0:("D_801C08A0","UNK_TYPE1","",0x20),
0x801C08C0:("D_801C08C0","UNK_TYPE1","",0x1),
0x801C08FC:("D_801C08FC","UNK_TYPE1","",0x1),
0x801C0910:("D_801C0910","UNK_TYPE1","",0x1),
0x801C0924:("D_801C0924","UNK_TYPE1","",0x1),
0x801C0938:("D_801C0938","UNK_TYPE1","",0x1),
- 0x801C094C:("D_801C094C","UNK_TYPE1","",0x1),
- 0x801C0954:("D_801C0954","UNK_TYPE4","",0x4),
+ 0x801C094C:("D_801C094C","Vec3f","",0xC),
0x801C0958:("D_801C0958","UNK_TYPE4","",0x4),
0x801C095C:("D_801C095C","UNK_PTR","",0x4),
0x801C0964:("D_801C0964","UNK_TYPE1","",0x1),
@@ -1321,27 +1308,18 @@
0x801C0B1C:("D_801C0B1C","UNK_TYPE1","",0x1),
0x801C0B20:("D_801C0B20","UNK_TYPE1","",0x1),
0x801C0B90:("D_801C0B90","UNK_TYPE1","",0x1),
- 0x801C0BA8:("D_801C0BA8","UNK_TYPE4","",0x4),
- 0x801C0BAC:("D_801C0BAC","UNK_TYPE4","",0x4),
- 0x801C0BB0:("D_801C0BB0","UNK_TYPE4","",0x4),
- 0x801C0BB4:("D_801C0BB4","UNK_TYPE1","",0x1),
- 0x801C0BB8:("D_801C0BB8","UNK_TYPE4","",0x4),
+ 0x801C0BA8:("D_801C0BA8","Vec3f","",0xC),
+ 0x801C0BB4:("D_801C0BB4","Vec3f","",0xC),
0x801C0BC0:("D_801C0BC0","UNK_TYPE1","",0x1),
0x801C0BD0:("D_801C0BD0","UNK_TYPE1","",0x1),
- 0x801C0BE0:("D_801C0BE0","UNK_TYPE4","",0x4),
- 0x801C0BE4:("D_801C0BE4","UNK_TYPE4","",0x4),
- 0x801C0BE8:("D_801C0BE8","UNK_TYPE4","",0x4),
- 0x801C0BEC:("D_801C0BEC","UNK_TYPE4","",0x4),
- 0x801C0BF0:("D_801C0BF0","UNK_TYPE4","",0x4),
- 0x801C0BF4:("D_801C0BF4","UNK_TYPE4","",0x4),
+ 0x801C0BE0:("D_801C0BE0","Vec3f","",0xC),
+ 0x801C0BEC:("D_801C0BEC","Vec3f","",0xC),
0x801C0BF8:("D_801C0BF8","UNK_TYPE1","",0x1),
0x801C0BFC:("D_801C0BFC","UNK_TYPE1","",0x1),
0x801C0C00:("D_801C0C00","UNK_TYPE1","",0x1),
0x801C0C0C:("D_801C0C0C","UNK_TYPE4","",0x4),
0x801C0C30:("D_801C0C30","UNK_TYPE1","",0x1),
- 0x801C0C54:("D_801C0C54","UNK_TYPE1","",0x1),
- 0x801C0C78:("D_801C0C78","UNK_TYPE1","",0x1),
- 0x801C0C94:("D_801C0C94","UNK_TYPE1","",0x1),
+ 0x801C0C54:("D_801C0C54","struct_80128388_arg1","",0x54),
0x801C0CA8:("D_801C0CA8","UNK_TYPE1","",0x1),
0x801C0CE8:("D_801C0CE8","UNK_TYPE4","",0x4),
0x801C0D24:("D_801C0D24","UNK_TYPE1","",0x1),
@@ -1394,8 +1372,8 @@
0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10),
0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
0x801C26A8:("sceneHeaderFuncTable","scene_header_func","[31]",0x7c),
- 0x801C2730:("gLinkFormObjectIndexes","s16","[8]",0x10),
- 0x801C2740:("objectFileTable","RomFile","[643]",0x1418),
+ 0x801C2730:("gPlayerFormObjectIndices","s16","[8]",0x10),
+ 0x801C2740:("gObjectTable","RomFile","[643]",0x1418),
0x801C3B60:("sSceneDrawDefaultDl","Gfx","[11]",0x58),
0x801C3BB8:("gSceneProcSceneDrawFuncs","SceneDrawConfigFunc","[8]",0x20),
0x801C3BD8:("gSceneProcDrawFuncs","scene_proc_draw_func","[6]",0x18),
@@ -4057,9 +4035,7 @@
0x801F59DC:("D_801F59DC","UNK_TYPE1","",0x1),
0x801F59E0:("D_801F59E0","UNK_TYPE1","",0x1),
0x801F59E4:("D_801F59E4","UNK_TYPE1","",0x1),
- 0x801F59E8:("D_801F59E8","UNK_TYPE1","",0x1),
- 0x801F59EC:("D_801F59EC","UNK_TYPE1","",0x1),
- 0x801F59F0:("D_801F59F0","UNK_TYPE1","",0x1),
+ 0x801F59E8:("D_801F59E8","Vec3f","",0xC),
0x801F59F4:("D_801F59F4","UNK_TYPE1","",0x1),
0x801F59F8:("D_801F59F8","UNK_TYPE1","",0x1),
0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90),
diff --git a/tools/namefixer.py b/tools/namefixer.py
index b750ee7c05..15154f5264 100755
--- a/tools/namefixer.py
+++ b/tools/namefixer.py
@@ -100,6 +100,12 @@ wordReplace = {
"func_800B78B8": "Actor_UpdateBgCheckInfo",
"func_8012403C": "Player_GetMask",
"func_8012404c": "Player_RemoveMask",
+ "func_80123AA4": "Player_SetModels",
+ "func_80123BD4": "Player_SetModelGroup",
+ "func_80123F48": "Player_IsBurningStickInRange",
+ "func_8012405C": "Player_HasMirrorShieldEquipped",
+ "func_80124088": "Player_IsHoldingMirrorShield",
+ "func_8012697C": "Player_DrawGetItem",
"Actor_SpawnWithParentAndCutscene": "Actor_SpawnAsChildAndCutscene",
"Actor_SpawnWithParent": "Actor_SpawnAsChild",
"Actor_IsLinkFacingActor": "Player_IsFacingActor",
@@ -589,7 +595,6 @@ wordReplace = {
"skelAnime.prevFrameRot": "skelAnime.prevRot",
"skelAnime.prevFramePos": "skelAnime.prevTransl",
"skelAnime.unk3E": "skelAnime.baseTransl",
-
"actor.minVelocityY": "actor.terminalVelocity",
"actor.yDistToWater": "actor.depthInWater",
"actor.yDistToPlayer": "actor.playerHeightRel",
@@ -620,6 +625,7 @@ wordReplace = {
"gSaveContext.skullTokenCount": "gSaveContext.save.skullTokenCount",
"gSaveContext.cutscene": "gSaveContext.save.cutscene",
"gSaveContext.health": "gSaveContext.save.playerData.health",
+ "gSaveContext.equips": "gSaveContext.save.equips",
"gSaveContext.unk_1016": "gSaveContext.jinxTimer",
"gSaveContext.unk_3F58": "gSaveContext.sunsSongState",
"gSaveContext.unk_48C8": "gSaveContext.dungeonIndex",
@@ -631,17 +637,23 @@ wordReplace = {
"player->unk_388": "player->interactRangeActor",
"player->unk_38C": "player->mountSide",
"player->unk_394": "player->csMode",
+ "player->swordQuads": "player->meleeWeaponQuads",
+ "player->blureEffectIndex": "player->meleeWeaponEffectIndex",
+ "player->swordAnimation": "player->meleeWeaponAnimation",
+ "player->swordState": "player->meleeWeaponState",
+ "player->swordInfo": "player->meleeWeaponInfo",
"csCtx.npcActions": "csCtx.actorActions",
"csCtx->npcActions": "csCtx->actorActions",
"csCtx.unk_12": "csCtx.currentCsIndex",
- "play->mf_187FC": "play->billboardMtxF",
- "play->projectionMatrix": "play->viewProjectionMtxF",
- "play->actorCtx.actorList[": "play->actorCtx.actorLists[",
- "play->envCtx.unk_8C": "play->envCtx.lightSettings",
- "play->envCtx.unk_E5": "play->envCtx.fillScreen",
- "play->envCtx.unk_E6": "play->envCtx.screenFillColor",
- "play->envCtx.unk_C3": "play->envCtx.lightSettingOverride",
- "play->envCtx.unk_DC": "play->envCtx.lightBlend",
+ "globalCtx->mf_187FC": "play->billboardMtxF",
+ "globalCtx->projectionMatrix": "play->viewProjectionMtxF",
+ "globalCtx->actorCtx.actorList[": "play->actorCtx.actorLists[",
+ "globalCtx->envCtx.unk_8C": "play->envCtx.lightSettings",
+ "globalCtx->envCtx.unk_E5": "play->envCtx.fillScreen",
+ "globalCtx->envCtx.unk_E6": "play->envCtx.screenFillColor",
+ "globalCtx->envCtx.unk_C3": "play->envCtx.lightSettingOverride",
+ "globalCtx->envCtx.unk_DC": "play->envCtx.lightBlend",
+ "globalCtx->interfaceCtx.unk_21E": "play->interfaceCtx.bButtonDoAction",
"play->msgCtx.unk1202A": "play->msgCtx.ocarinaMode",
"play->msgCtx.unk1202C": "play->msgCtx.ocarinaAction",
diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml
index 2676d13ee8..9b1959be9a 100644
--- a/tools/permuter_settings.toml
+++ b/tools/permuter_settings.toml
@@ -9,6 +9,7 @@ SET_FULLSCREEN_VIEWPORT = "void"
OPEN_DISPS = "void"
CLOSE_DISPS = "void"
ABS = "int"
+ABS_ALT = "int"
SQ = "int"
CLAMP = "int"
CLOCK_TIME = "int"
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index 39e9fd6049..87b35eb5d2 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -1696,29 +1696,29 @@ asm/non_matchings/code/z_player_lib/func_801229FC.s,func_801229FC,0x801229FC,0x6
asm/non_matchings/code/z_player_lib/func_80122BA4.s,func_80122BA4,0x80122BA4,0x1F
asm/non_matchings/code/z_player_lib/func_80122C20.s,func_80122C20,0x80122C20,0x49
asm/non_matchings/code/z_player_lib/func_80122D44.s,func_80122D44,0x80122D44,0x65
-asm/non_matchings/code/z_player_lib/func_80122ED8.s,func_80122ED8,0x80122ED8,0x5
-asm/non_matchings/code/z_player_lib/func_80122EEC.s,func_80122EEC,0x80122EEC,0xF
+asm/non_matchings/code/z_player_lib/Player_MaskIdToItemId.s,Player_MaskIdToItemId,0x80122ED8,0x5
+asm/non_matchings/code/z_player_lib/Player_GetCurMaskItemId.s,Player_GetCurMaskItemId,0x80122EEC,0xF
asm/non_matchings/code/z_player_lib/func_80122F28.s,func_80122F28,0x80122F28,0x1D
asm/non_matchings/code/z_player_lib/func_80122F9C.s,func_80122F9C,0x80122F9C,0xC
asm/non_matchings/code/z_player_lib/func_80122FCC.s,func_80122FCC,0x80122FCC,0x10
asm/non_matchings/code/z_player_lib/func_8012300C.s,func_8012300C,0x8012300C,0x4
asm/non_matchings/code/z_player_lib/func_8012301C.s,func_8012301C,0x8012301C,0x49
asm/non_matchings/code/z_player_lib/func_80123140.s,func_80123140,0x80123140,0x86
-asm/non_matchings/code/z_player_lib/func_80123358.s,func_80123358,0x80123358,0x23
+asm/non_matchings/code/z_player_lib/Player_InBlockingCsMode.s,Player_InBlockingCsMode,0x80123358,0x23
asm/non_matchings/code/z_player_lib/Player_InCsMode.s,Player_InCsMode,0x801233E4,0xF
asm/non_matchings/code/z_player_lib/func_80123420.s,func_80123420,0x80123420,0x5
asm/non_matchings/code/z_player_lib/func_80123434.s,func_80123434,0x80123434,0x5
asm/non_matchings/code/z_player_lib/func_80123448.s,func_80123448,0x80123448,0x1A
-asm/non_matchings/code/z_player_lib/func_801234B0.s,func_801234B0,0x801234B0,0x9
+asm/non_matchings/code/z_player_lib/Player_IsGoronOrDeku.s,Player_IsGoronOrDeku,0x801234B0,0x9
asm/non_matchings/code/z_player_lib/func_801234D4.s,func_801234D4,0x801234D4,0x2F
asm/non_matchings/code/z_player_lib/func_80123590.s,func_80123590,0x80123590,0x13
asm/non_matchings/code/z_player_lib/func_801235DC.s,func_801235DC,0x801235DC,0x1C
asm/non_matchings/code/z_player_lib/func_8012364C.s,func_8012364C,0x8012364C,0x71
asm/non_matchings/code/z_player_lib/func_80123810.s,func_80123810,0x80123810,0x54
-asm/non_matchings/code/z_player_lib/func_80123960.s,func_80123960,0x80123960,0x13
+asm/non_matchings/code/z_player_lib/Player_ActionToModelGroup.s,Player_ActionToModelGroup,0x80123960,0x13
asm/non_matchings/code/z_player_lib/func_801239AC.s,func_801239AC,0x801239AC,0x3E
-asm/non_matchings/code/z_player_lib/func_80123AA4.s,func_80123AA4,0x80123AA4,0x4C
-asm/non_matchings/code/z_player_lib/func_80123BD4.s,func_80123BD4,0x80123BD4,0x21
+asm/non_matchings/code/z_player_lib/Player_SetModels.s,Player_SetModels,0x80123AA4,0x4C
+asm/non_matchings/code/z_player_lib/Player_SetModelGroup.s,Player_SetModelGroup,0x80123BD4,0x21
asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE
asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30
asm/non_matchings/code/z_player_lib/func_80123D50.s,func_80123D50,0x80123D50,0x15
@@ -1727,22 +1727,22 @@ asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x3
asm/non_matchings/code/z_player_lib/func_80123E90.s,func_80123E90,0x80123E90,0x21
asm/non_matchings/code/z_player_lib/func_80123F14.s,func_80123F14,0x80123F14,0x6
asm/non_matchings/code/z_player_lib/func_80123F2C.s,func_80123F2C,0x80123F2C,0x7
-asm/non_matchings/code/z_player_lib/func_80123F48.s,func_80123F48,0x80123F48,0x36
-asm/non_matchings/code/z_player_lib/func_80124020.s,func_80124020,0x80124020,0x7
+asm/non_matchings/code/z_player_lib/Player_IsBurningStickInRange.s,Player_IsBurningStickInRange,0x80123F48,0x36
+asm/non_matchings/code/z_player_lib/Player_GetStrength.s,Player_GetStrength,0x80124020,0x7
asm/non_matchings/code/z_player_lib/Player_GetMask.s,Player_GetMask,0x8012403C,0x4
asm/non_matchings/code/z_player_lib/Player_RemoveMask.s,Player_RemoveMask,0x8012404C,0x4
-asm/non_matchings/code/z_player_lib/func_8012405C.s,func_8012405C,0x8012405C,0xB
-asm/non_matchings/code/z_player_lib/func_80124088.s,func_80124088,0x80124088,0x10
-asm/non_matchings/code/z_player_lib/func_801240C8.s,func_801240C8,0x801240C8,0x5
+asm/non_matchings/code/z_player_lib/Player_HasMirrorShieldEquipped.s,Player_HasMirrorShieldEquipped,0x8012405C,0xB
+asm/non_matchings/code/z_player_lib/Player_IsHoldingMirrorShield.s,Player_IsHoldingMirrorShield,0x80124088,0x10
+asm/non_matchings/code/z_player_lib/Player_IsHoldingHookshot.s,Player_IsHoldingHookshot,0x801240C8,0x5
asm/non_matchings/code/z_player_lib/func_801240DC.s,func_801240DC,0x801240DC,0xD
asm/non_matchings/code/z_player_lib/func_80124110.s,func_80124110,0x80124110,0xE
asm/non_matchings/code/z_player_lib/func_80124148.s,func_80124148,0x80124148,0x8
-asm/non_matchings/code/z_player_lib/func_80124168.s,func_80124168,0x80124168,0xA
-asm/non_matchings/code/z_player_lib/func_80124190.s,func_80124190,0x80124190,0x9
-asm/non_matchings/code/z_player_lib/func_801241B4.s,func_801241B4,0x801241B4,0xB
-asm/non_matchings/code/z_player_lib/func_801241E0.s,func_801241E0,0x801241E0,0xB
-asm/non_matchings/code/z_player_lib/func_8012420C.s,func_8012420C,0x8012420C,0x8
-asm/non_matchings/code/z_player_lib/func_8012422C.s,func_8012422C,0x8012422C,0xB
+asm/non_matchings/code/z_player_lib/Player_ActionToMeleeWeapon.s,Player_ActionToMeleeWeapon,0x80124168,0xA
+asm/non_matchings/code/z_player_lib/Player_GetMeleeWeaponHeld.s,Player_GetMeleeWeaponHeld,0x80124190,0x9
+asm/non_matchings/code/z_player_lib/Player_IsHoldingTwoHandedWeapon.s,Player_IsHoldingTwoHandedWeapon,0x801241B4,0xB
+asm/non_matchings/code/z_player_lib/Player_ActionToBottle.s,Player_ActionToBottle,0x801241E0,0xB
+asm/non_matchings/code/z_player_lib/Player_GetBottleHeld.s,Player_GetBottleHeld,0x8012420C,0x8
+asm/non_matchings/code/z_player_lib/Player_ActionToExplosive.s,Player_ActionToExplosive,0x8012422C,0xB
asm/non_matchings/code/z_player_lib/Player_GetExplosiveHeld.s,Player_GetExplosiveHeld,0x80124258,0x8
asm/non_matchings/code/z_player_lib/func_80124278.s,func_80124278,0x80124278,0xF
asm/non_matchings/code/z_player_lib/func_801242B4.s,func_801242B4,0x801242B4,0xA
@@ -1758,7 +1758,7 @@ asm/non_matchings/code/z_player_lib/func_801251C4.s,func_801251C4,0x801251C4,0x5
asm/non_matchings/code/z_player_lib/func_80125318.s,func_80125318,0x80125318,0xA
asm/non_matchings/code/z_player_lib/func_80125340.s,func_80125340,0x80125340,0xB
asm/non_matchings/code/z_player_lib/func_8012536C.s,func_8012536C,0x8012536C,0xE
-asm/non_matchings/code/z_player_lib/func_801253A4.s,func_801253A4,0x801253A4,0x57
+asm/non_matchings/code/z_player_lib/Player_DrawZoraShield.s,Player_DrawZoraShield,0x801253A4,0x57
asm/non_matchings/code/z_player_lib/func_80125500.s,func_80125500,0x80125500,0x20
asm/non_matchings/code/z_player_lib/func_80125580.s,func_80125580,0x80125580,0x1D8
asm/non_matchings/code/z_player_lib/func_80125CE0.s,func_80125CE0,0x80125CE0,0x1B
@@ -1768,15 +1768,15 @@ asm/non_matchings/code/z_player_lib/func_801263FC.s,func_801263FC,0x801263FC,0x1
asm/non_matchings/code/z_player_lib/func_80126440.s,func_80126440,0x80126440,0x62
asm/non_matchings/code/z_player_lib/func_801265C8.s,func_801265C8,0x801265C8,0x35
asm/non_matchings/code/z_player_lib/func_8012669C.s,func_8012669C,0x8012669C,0x5B
-asm/non_matchings/code/z_player_lib/func_80126808.s,func_80126808,0x80126808,0x5D
-asm/non_matchings/code/z_player_lib/func_8012697C.s,func_8012697C,0x8012697C,0x4E
+asm/non_matchings/code/z_player_lib/Player_DrawGetItemImpl.s,Player_DrawGetItemImpl,0x80126808,0x5D
+asm/non_matchings/code/z_player_lib/Player_DrawGetItem.s,Player_DrawGetItem,0x8012697C,0x4E
asm/non_matchings/code/z_player_lib/func_80126AB4.s,func_80126AB4,0x80126AB4,0x36
asm/non_matchings/code/z_player_lib/func_80126B8C.s,func_80126B8C,0x80126B8C,0x11
asm/non_matchings/code/z_player_lib/func_80126BD0.s,func_80126BD0,0x80126BD0,0x178
asm/non_matchings/code/z_player_lib/func_801271B0.s,func_801271B0,0x801271B0,0xA2
asm/non_matchings/code/z_player_lib/func_80127438.s,func_80127438,0x80127438,0x14
asm/non_matchings/code/z_player_lib/func_80127488.s,func_80127488,0x80127488,0x31
-asm/non_matchings/code/z_player_lib/func_8012754C.s,func_8012754C,0x8012754C,0x12
+asm/non_matchings/code/z_player_lib/Player_DrawCouplesMask.s,Player_DrawCouplesMask,0x8012754C,0x12
asm/non_matchings/code/z_player_lib/func_80127594.s,func_80127594,0x80127594,0xD9
asm/non_matchings/code/z_player_lib/func_801278F8.s,func_801278F8,0x801278F8,0x5A
asm/non_matchings/code/z_player_lib/func_80127A60.s,func_80127A60,0x80127A60,0x41