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