summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-05-28 17:41:37 -0400
committerGitHub <noreply@github.com>2023-05-28 17:41:37 -0400
commitefc9df3f56046bf11097715204aee96d433a952e (patch)
treeef2785a9edfd7b3debe1364723f700047f031973 /include
parent20f7e2199ac4c53095f3bc60ec30958f1bfb5e41 (diff)
`ovl_player_actor`: Dawn of a new PR (#1227)
* Rename Player_UpdateBottleHeld * Match func_808497A0 * func_80852290 NON_MATCHING * Match func_8083B3B4 * Params cleanup * Match func_8083FBC4 * sfxId cleanups and others * Fix declaration of functions from D_8085D990 * Change D_8085BE84 to be a 2D array * ARRAY_COUNT_2D * Match func_8085ADA0 * func_808426F0 nonmatching * Match func_80852290 * Match func_808426F0 Co-authored-by: engineer124 <engineer124engineer124@gmail.com> * Add notes to Player_SetDoAction * Name putAwayCountdown * rebase * Match func_80856918 * format * func_8084933C nonmatching small amount of boomerang documentation * Progress on moving data near where it is used * finish moving data * format * cleanup up remaining data * more match * Some minor cleanups * PlayerCsMode enum * func_80851F18 nonmatching * Fix unk_B10 * Purge ExchangeItemID enum * Rename `targetActor` to `talkActor` * Name `targetedActor` * PLAYER_LIMB_BUF_SIZE Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Change SkelAnime Player functions to take a void pointer for the corresponding buffers * Use PlayerAnimationFrame on Player_DrawImpl * Match func_8082F1AC * Match func_8083D23C * cleanup * Match and clean up func_808373F8 * Match and document func_8083A98C * PLAYER_PARAMS macro and PlayerInitMode enum * Preliminary names for InitMode functions * Match func_8083C8E8 * remove redundant externs * Match func_8084933C * cleanup func_8084933C * Access D_8085BE84 directly instead of using a macro * Match func_8084AC84 * Fix boomearng typo * OK boomerang * cleanup func_8083D168 * untargetedRotY * this->unk_14E = ABS_ALT(var_v1); * GIFIELD macros * sort of a match * Match func_8084C16C Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Use the same trick to match func_808573A4 * Add note on Deku spinning * Match func_8084D18C * Match func_80850D68 * Improve func_80832660 * Match func_80854EFC Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> * Rename unk_B2A to getItemDrawId * Some cleanup * fix merge issues * format * minor anim docs * Match func_808553F4 * Cleanup func_808553F4 * func_8083D860 nonmatching * Match func_8083D860 * Defake func_80859BA8 * () * Add notes to PlayerAnimGroup enum * underwaterTimer Co-authored-by: engineer124 <engineer124engineer124@gmail.com> * some stateFlags cleaning * more stateFlags cleaning * some notes and minor cleanups * more general cleanups * Slightly less fake func_80832CAC * Document some melee weapon damage stuff * Mark lunge storage * Note PCS patch * match * add notes to bss * yeet extra indentation * add reloc as nonmatching to spec * floorSfxOffset * Player_GetFloorSfx * Player_GetFloorSfxByAge * Comments for AnimSfx dunctions * Name some AnimSfx functions * Name AnimSfx stuff * Some PlayerAgeProperties notes * use animflag defines * Player_SpawnExplosive * fix enum and some other minor fixes * Bit more misc. cleanup * Use OoT's version of func_808333CC * Note on quickspin buffer * Final nonmatching, func_80851F18 Co-authored-by: Synray <31429825+Synray@users.noreply.github.com> * RIP player.c * Name Player_StopHorizontalMovement * misc fixes * Actor_DeactivateLens * fixes * typos and tweaks * minor stuff * add names as comments on the animgoup array * Correct some function names and data type * add anim commets to ageproperties * some notes * De-fake func_80840F90 * Defake & clean up func_8085ADA0 * Improve func_80859BA8 * Enums in func_80852B28 * Name some secret-related things * 3 small things * stuff * Player_TalkWithPlayer * SurfaceType_GetFloorType * SurfaceType_GetWallFlags * and more bgcheck stuff * more bss naming * sPlayerControlInput * clean up func_80836F10 a bit * name the parameters of func_80835BF8 * door stuff * remove NON_MATCHING * remove D_8085D2B0 padding * Name some Player_Cutscene_ functions * various cleanups * format * remainingHopsCounter * some cleanups on the struct * Actor_RequestRumble * this->exchangeItemId = PLAYER_AP_NONE; * fix merge stuff * format * PlayerUnkAA5 * Name two cylinder-related functions * BSS * Add MagicConsume's enum, treat lensActive as bool * Update func_808332A0 based on better info * fix merge * fix merge issues * remove redundant comments * Name Player_AddQuake * ANIM_FLAG_UPDATE*_*Y * Format * AT_TYPE_ENEMY * fix merge issues * format * fix uintptr_ts * Rename * Name leftHandMf * fix merge issues * format * exchangeItemId <= PLAYER_IA_MINUS1 * getItemDrawIdPlusOne * currentActorCsIndex * <= PLAYER_IA_MINUS1 * fix merge issues * format * namefixer and bss * fix build * bombs parameters cleanup * bss * Fix building * fix building * Fix building * Fix building and cleanups * Pre-PR cleanup * really... * format * review * stateFlag Mistakes * 268 * 0.1f * z64door.h * fix cutscene stuff * bss * Update include/z64player.h Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * Update include/z64player.h Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * reiew * PR Review * collision * review * format and a few stuff i missed * EnBomExplosiveType * weekeventregconvert and eventinfconvert * more review * review * bss * review * re format sGetItemTable * Entangle PlayerMask and PlayerItemAction * a few extra cases i missed * bss * review * EnArrow stuff * ARROW_MAGIC_DEKU_BUBBLE * minor format * merge * fix bss * review * !ARROW_IS_ARROW * review * bool cleanup * fix merge * review * Player_StopCutscene * Player_RequestQuake * quakeIndex * Player_RequestQuakeAndRumble * knobDoor and slidingDoor * bss * fix * review * dog and float --------- Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com> Co-authored-by: engineer124 <engineer124engineer124@gmail.com> Co-authored-by: petrie911 <pmontag@PHYS-S129.iowa.uiowa.edu> Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com> Co-authored-by: Synray <31429825+Synray@users.noreply.github.com>
Diffstat (limited to 'include')
-rw-r--r--include/functions.h5
-rw-r--r--include/macros.h2
-rw-r--r--include/z64.h13
-rw-r--r--include/z64actor.h5
-rw-r--r--include/z64animation.h7
-rw-r--r--include/z64door.h24
-rw-r--r--include/z64effect.h8
-rw-r--r--include/z64item.h64
-rw-r--r--include/z64player.h212
-rw-r--r--include/z64save.h2
10 files changed, 235 insertions, 107 deletions
diff --git a/include/functions.h b/include/functions.h
index 292c5e210..bcc79f9e5 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -726,8 +726,9 @@ Actor* Actor_SpawnAsChildAndCutscene(ActorContext* actorCtx, PlayState* play, s1
Actor* Actor_SpawnAsChild(ActorContext* actorCtx, Actor* parent, PlayState* play, s16 actorId, f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, s32 params);
void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx);
void Enemy_StartFinishingBlow(PlayState* play, Actor* actor);
-s16 func_800BBAC0(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3);
-s16 func_800BBB74(s16 arg0[2], s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBAC0(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBB74(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
+s16 func_800BBC20(BlinkInfo* info, s16 arg1, s16 arg2, s16 arg3);
void Actor_SpawnBodyParts(Actor* actor, PlayState* play, s32 partParams, Gfx** dList);
void Actor_SpawnFloorDustRing(PlayState* play, Actor* actor, Vec3f* posXZ, f32 radius, s32 countMinusOne, f32 randAccelWeight, s16 scale, s16 scaleStep, u8 useLighting);
void func_800BBFB0(PlayState* play, Vec3f* position, f32 arg2, s32 arg3, s16 arg4, s16 scaleStep, u8 arg6);
diff --git a/include/macros.h b/include/macros.h
index 9e74c40cd..f2bcb07dd 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -17,6 +17,8 @@
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
#define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0]))
+#define ARRAY_COUNT_2D(arr) (ARRAY_COUNT(arr) * ARRAY_COUNT(arr[0]))
+
// TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000
#define PHYSICAL_TO_VIRTUAL(addr) ((uintptr_t)(addr) + RDRAM_CACHED)
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED)
diff --git a/include/z64.h b/include/z64.h
index 6388bc120..05aad655e 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -82,11 +82,12 @@
#define Z_PRIORITY_IRQMGR 18
typedef enum {
- /* 0 */ EQUIP_SLOT_B,
- /* 1 */ EQUIP_SLOT_C_LEFT,
- /* 2 */ EQUIP_SLOT_C_DOWN,
- /* 3 */ EQUIP_SLOT_C_RIGHT,
- /* 4 */ EQUIP_SLOT_A
+ /* -1 */ EQUIP_SLOT_NONE = -1,
+ /* 0 */ EQUIP_SLOT_B,
+ /* 1 */ EQUIP_SLOT_C_LEFT,
+ /* 2 */ EQUIP_SLOT_C_DOWN,
+ /* 3 */ EQUIP_SLOT_C_RIGHT,
+ /* 4 */ EQUIP_SLOT_A
} EquipSlot;
typedef struct {
@@ -517,7 +518,7 @@ typedef struct PlayState {
/* 0x18770 */ void (*unk_18770)(struct PlayState* play, Player* player);
/* 0x18774 */ s32 (*startPlayerFishing)(struct PlayState* play);
/* 0x18778 */ s32 (*grabPlayer)(struct PlayState* play, Player* player);
- /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, s32 mode);
+ /* 0x1877C */ s32 (*startPlayerCutscene)(struct PlayState* play, Player* player, PlayerCsMode csMode);
/* 0x18780 */ void (*func_18780)(Player* player, struct PlayState* play);
/* 0x18784 */ s32 (*damagePlayer)(struct PlayState* play, s32 damage);
/* 0x18788 */ void (*talkWithPlayer)(struct PlayState* play, Actor* actor);
diff --git a/include/z64actor.h b/include/z64actor.h
index 3a646fe8f..f58716401 100644
--- a/include/z64actor.h
+++ b/include/z64actor.h
@@ -739,6 +739,11 @@ typedef struct NpcInteractInfo {
/* 0x24 */ UNK_TYPE1 unk_24[0x4];
} NpcInteractInfo; // size = 0x28
+typedef struct BlinkInfo {
+ /* 0x0 */ s16 eyeTexIndex;
+ /* 0x2 */ s16 blinkTimer;
+} BlinkInfo; // size = 0x4
+
extern TargetRangeParams gTargetRanges[];
extern s16 D_801AED48[8];
extern Gfx D_801AEF88[];
diff --git a/include/z64animation.h b/include/z64animation.h
index 44c35312d..316dfe341 100644
--- a/include/z64animation.h
+++ b/include/z64animation.h
@@ -14,9 +14,13 @@ struct PlayerAnimationFrame;
#define LIMB_DONE 0xFF
#define ANIM_FLAG_1 (1 << 0)
-#define ANIM_FLAG_UPDATEY (1 << 1)
+#define ANIM_FLAG_UPDATE_Y (1 << 1)
#define ANIM_FLAG_4 (1 << 2)
+#define ANIM_FLAG_8 (1 << 3)
#define ANIM_FLAG_NOMOVE (1 << 4)
+#define ANIM_FLAG_80 (1 << 7)
+#define ANIM_FLAG_100 (1 << 8)
+#define ANIM_FLAG_200 (1 << 9)
typedef enum AnimationMode {
/* 0 */ ANIMMODE_LOOP,
@@ -326,6 +330,7 @@ void AnimationContext_Update(struct PlayState* play, AnimationContext* animation
void SkelAnime_InitPlayer(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount);
void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime);
s32 PlayerAnimation_Update(struct PlayState* play, SkelAnime* skelAnime);
+void PlayerAnimation_AnimateFrame(struct PlayState* play, SkelAnime* skelAnime);
void Animation_SetMorph(struct PlayState* play, SkelAnime* skelAnime, f32 morphFrames);
void PlayerAnimation_Change(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames);
void PlayerAnimation_PlayOnce(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation);
diff --git a/include/z64door.h b/include/z64door.h
new file mode 100644
index 000000000..26653c308
--- /dev/null
+++ b/include/z64door.h
@@ -0,0 +1,24 @@
+#ifndef Z64_DOOR_H
+#define Z64_DOOR_H
+
+#include "ultra64.h"
+#include "z64actor.h"
+
+typedef struct KnobDoorActor {
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ SkelAnime skelAnime;
+ /* 0x1A0 */ u8 animIndex;
+ /* 0x1A1 */ u8 playOpenAnim;
+ /* 0x1A2 */ s8 requiredObjBankIndex;
+ /* 0x1A3 */ s8 dlIndex;
+} KnobDoorActor; // size = 0x1A4
+
+typedef struct SlidingDoorActor {
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ s16 unk_15C;
+ /* 0x15E */ s16 unk_15E;
+} SlidingDoorActor; // size = 0x160
+
+#define DOOR_GET_TRANSITION_ID(thisx) ((u16)(thisx)->params >> 10)
+
+#endif
diff --git a/include/z64effect.h b/include/z64effect.h
index d6ab8b3b5..71ad80510 100644
--- a/include/z64effect.h
+++ b/include/z64effect.h
@@ -118,10 +118,10 @@ typedef struct {
/* 0x188 */ u16 flags;
/* 0x18A */ s16 addAngleChange;
/* 0x18C */ s16 addAngle;
- /* 0x18E */ Color_RGBA8 p1StartColor;
- /* 0x192 */ Color_RGBA8 p2StartColor;
- /* 0x196 */ Color_RGBA8 p1EndColor;
- /* 0x19A */ Color_RGBA8 p2EndColor;
+ /* 0x18E */ u8 p1StartColor[4];
+ /* 0x192 */ u8 p2StartColor[4];
+ /* 0x196 */ u8 p1EndColor[4];
+ /* 0x19A */ u8 p2EndColor[4];
/* 0x19E */ u8 numElements; // "now_edge_num"
/* 0x19F */ u8 elemDuration;
/* 0x1A0 */ u8 unkFlag;
diff --git a/include/z64item.h b/include/z64item.h
index d1d36ebba..345a22897 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -332,12 +332,16 @@ typedef enum GetItemId {
/* 0x08 */ GI_WALLET_ADULT,
/* 0x09 */ GI_WALLET_GIANT,
/* 0x0A */ GI_RECOVERY_HEART,
- /* 0x0C */ GI_HEART_PIECE = 0x0C,
+ /* 0x0B */ GI_0B,
+ /* 0x0C */ GI_HEART_PIECE,
/* 0x0D */ GI_HEART_CONTAINER,
/* 0x0E */ GI_MAGIC_SMALL,
/* 0x0F */ GI_MAGIC_LARGE,
- /* 0x11 */ GI_STRAY_FAIRY = 0x11,
- /* 0x14 */ GI_BOMBS_1 = 0x14,
+ /* 0x10 */ GI_10,
+ /* 0x11 */ GI_STRAY_FAIRY,
+ /* 0x12 */ GI_12,
+ /* 0x13 */ GI_13,
+ /* 0x14 */ GI_BOMBS_1,
/* 0x15 */ GI_BOMBS_5,
/* 0x16 */ GI_BOMBS_10,
/* 0x17 */ GI_BOMBS_20,
@@ -360,8 +364,14 @@ typedef enum GetItemId {
/* 0x28 */ GI_NUTS_1,
/* 0x29 */ GI_NUTS_5,
/* 0x2A */ GI_NUTS_10,
- /* 0x2E */ GI_BOMBCHUS_20 = 0x2E,
- /* 0x32 */ GI_SHIELD_HERO = 0x32,
+ /* 0x2B */ GI_2B,
+ /* 0x2C */ GI_2C,
+ /* 0x2D */ GI_2D,
+ /* 0x2E */ GI_BOMBCHUS_20,
+ /* 0x2F */ GI_2F,
+ /* 0x30 */ GI_30,
+ /* 0x31 */ GI_31,
+ /* 0x32 */ GI_SHIELD_HERO,
/* 0x33 */ GI_SHIELD_MIRROR,
/* 0x34 */ GI_POWDER_KEG,
/* 0x35 */ GI_MAGIC_BEANS,
@@ -379,10 +389,24 @@ typedef enum GetItemId {
/* 0x41 */ GI_HOOKSHOT,
/* 0x42 */ GI_LENS,
/* 0x43 */ GI_PICTO_BOX,
- /* 0x4C */ GI_OCARINA = 0x4C,
- /* 0x50 */ GI_BOMBERS_NOTEBOOK = 0x50,
- /* 0x52 */ GI_SKULL_TOKEN = 0x52,
- /* 0x55 */ GI_REMAINS_ODOLWA = 0x55,
+ /* 0x44 */ GI_44,
+ /* 0x45 */ GI_45,
+ /* 0x46 */ GI_46,
+ /* 0x47 */ GI_47,
+ /* 0x48 */ GI_48,
+ /* 0x49 */ GI_49,
+ /* 0x4A */ GI_4A,
+ /* 0x4B */ GI_4B,
+ /* 0x4C */ GI_OCARINA,
+ /* 0x4D */ GI_4D,
+ /* 0x4E */ GI_4E,
+ /* 0x4F */ GI_4F,
+ /* 0x50 */ GI_BOMBERS_NOTEBOOK,
+ /* 0x51 */ GI_51,
+ /* 0x52 */ GI_SKULL_TOKEN,
+ /* 0x53 */ GI_53,
+ /* 0x54 */ GI_54,
+ /* 0x55 */ GI_REMAINS_ODOLWA,
/* 0x56 */ GI_REMAINS_GOHT,
/* 0x57 */ GI_REMAINS_GYORG,
/* 0x58 */ GI_REMAINS_TWINMOLD,
@@ -410,9 +434,14 @@ typedef enum GetItemId {
/* 0x6E */ GI_SEAHORSE,
/* 0x6F */ GI_CHATEAU_BOTTLE,
/* 0x70 */ GI_HYLIAN_LOACH,
- /* 0x75 */ GI_75 = 0x75,
+ /* 0x71 */ GI_71,
+ /* 0x72 */ GI_72,
+ /* 0x73 */ GI_73,
+ /* 0x74 */ GI_74,
+ /* 0x75 */ GI_75,
/* 0x76 */ GI_ICE_TRAP,
- /* 0x78 */ GI_MASK_DEKU = 0x78,
+ /* 0x77 */ GI_77,
+ /* 0x78 */ GI_MASK_DEKU,
/* 0x79 */ GI_MASK_GORON,
/* 0x7A */ GI_MASK_ZORA,
/* 0x7B */ GI_MASK_FIERCE_DEITY,
@@ -436,7 +465,8 @@ typedef enum GetItemId {
/* 0x8D */ GI_MASK_BLAST,
/* 0x8E */ GI_MASK_SCENTS,
/* 0x8F */ GI_MASK_KAFEIS_MASK,
- /* 0x91 */ GI_CHATEAU = 0x91,
+ /* 0x90 */ GI_90,
+ /* 0x91 */ GI_CHATEAU,
/* 0x92 */ GI_MILK,
/* 0x93 */ GI_GOLD_DUST_2,
/* 0x94 */ GI_HYLIAN_LOACH_2, // Unused bottled eel
@@ -463,7 +493,15 @@ typedef enum GetItemId {
/* 0xA9 */ GI_BOTTLE_STOLEN, // buy back stolen bottle
/* 0xAA */ GI_LETTER_TO_KAFEI,
/* 0xAB */ GI_PENDANT_OF_MEMORIES,
- /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN = 0xB4,
+ /* 0xAC */ GI_AC,
+ /* 0xAD */ GI_AD,
+ /* 0xAE */ GI_AE,
+ /* 0xAF */ GI_AF,
+ /* 0xB0 */ GI_B0,
+ /* 0xB1 */ GI_B1,
+ /* 0xB2 */ GI_B2,
+ /* 0xB3 */ GI_B3,
+ /* 0xB4 */ GI_TINGLE_MAP_CLOCK_TOWN,
/* 0xB5 */ GI_TINGLE_MAP_WOODFALL,
/* 0xB6 */ GI_TINGLE_MAP_SNOWHEAD,
/* 0xB7 */ GI_TINGLE_MAP_ROMANI_RANCH,
diff --git a/include/z64player.h b/include/z64player.h
index 3bcc53fde..d9c80384f 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -43,35 +43,6 @@ typedef enum PlayerTransformation {
/* 5 */ PLAYER_FORM_MAX
} PlayerTransformation;
-typedef enum PlayerMask {
- /* 0x00 */ PLAYER_MASK_NONE,
- /* 0x01 */ PLAYER_MASK_TRUTH,
- /* 0x02 */ PLAYER_MASK_KAFEIS_MASK,
- /* 0x03 */ PLAYER_MASK_ALL_NIGHT,
- /* 0x04 */ PLAYER_MASK_BUNNY,
- /* 0x05 */ PLAYER_MASK_KEATON,
- /* 0x06 */ PLAYER_MASK_GARO,
- /* 0x07 */ PLAYER_MASK_ROMANI,
- /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER,
- /* 0x09 */ PLAYER_MASK_POSTMAN,
- /* 0x0A */ PLAYER_MASK_COUPLE,
- /* 0x0B */ PLAYER_MASK_GREAT_FAIRY,
- /* 0x0C */ PLAYER_MASK_GIBDO,
- /* 0x0D */ PLAYER_MASK_DON_GERO,
- /* 0x0E */ PLAYER_MASK_KAMARO,
- /* 0x0F */ PLAYER_MASK_CAPTAIN,
- /* 0x10 */ PLAYER_MASK_STONE,
- /* 0x11 */ PLAYER_MASK_BREMEN,
- /* 0x12 */ PLAYER_MASK_BLAST,
- /* 0x13 */ PLAYER_MASK_SCENTS,
- /* 0x14 */ PLAYER_MASK_GIANT,
- /* 0x15 */ PLAYER_MASK_FIERCE_DEITY,
- /* 0x16 */ PLAYER_MASK_GORON,
- /* 0x17 */ PLAYER_MASK_ZORA,
- /* 0x18 */ PLAYER_MASK_DEKU,
- /* 0x19 */ PLAYER_MASK_MAX
-} PlayerMask;
-
typedef enum {
/* 0 */ PLAYER_ENV_HAZARD_NONE,
/* 1 */ PLAYER_ENV_HAZARD_HOTROOM,
@@ -89,7 +60,7 @@ typedef enum PlayerItemAction {
/* 0x03 */ PLAYER_IA_SWORD_KOKIRI = PLAYER_IA_SWORD_MIN,
/* 0x04 */ PLAYER_IA_SWORD_RAZOR,
/* 0x05 */ PLAYER_IA_SWORD_GILDED,
- /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY,
+ /* 0x06 */ PLAYER_IA_SWORD_TWO_HANDED,
/* 0x07 */ PLAYER_IA_STICK,
/* 0x08 */ PLAYER_IA_ZORA_FINS,
/* 0x09 */ PLAYER_IA_BOW,
@@ -143,7 +114,8 @@ typedef enum PlayerItemAction {
/* 0x37 */ PLAYER_IA_37,
/* 0x38 */ PLAYER_IA_38,
/* 0x39 */ PLAYER_IA_39,
- /* 0x3A */ PLAYER_IA_MASK_TRUTH,
+ /* 0x3A */ PLAYER_IA_MASK_MIN,
+ /* 0x3A */ PLAYER_IA_MASK_TRUTH = PLAYER_IA_MASK_MIN,
/* 0x3B */ PLAYER_IA_MASK_KAFEIS_MASK,
/* 0x3C */ PLAYER_IA_MASK_ALL_NIGHT,
/* 0x3D */ PLAYER_IA_MASK_BUNNY,
@@ -163,10 +135,12 @@ typedef enum PlayerItemAction {
/* 0x4B */ PLAYER_IA_MASK_BLAST,
/* 0x4C */ PLAYER_IA_MASK_SCENTS,
/* 0x4D */ PLAYER_IA_MASK_GIANT,
- /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY,
+ /* 0x4E */ PLAYER_IA_MASK_TRANSFORMATION_MIN,
+ /* 0x4E */ PLAYER_IA_MASK_FIERCE_DEITY = PLAYER_IA_MASK_TRANSFORMATION_MIN,
/* 0x4F */ PLAYER_IA_MASK_GORON,
/* 0x50 */ PLAYER_IA_MASK_ZORA,
/* 0x51 */ PLAYER_IA_MASK_DEKU,
+ /* 0x51 */ PLAYER_IA_MASK_MAX = PLAYER_IA_MASK_DEKU,
/* 0x52 */ PLAYER_IA_LENS,
/* 0x53 */ PLAYER_IA_MAX
} PlayerItemAction;
@@ -190,12 +164,45 @@ typedef enum PlayerMeleeWeapon {
/* 1 */ PLAYER_MELEEWEAPON_SWORD_KOKIRI = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_KOKIRI),
/* 2 */ PLAYER_MELEEWEAPON_SWORD_RAZOR = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_RAZOR),
/* 3 */ PLAYER_MELEEWEAPON_SWORD_GILDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GILDED),
- /* 4 */ PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY),
+ /* 4 */ PLAYER_MELEEWEAPON_SWORD_TWO_HANDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED),
/* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK),
/* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS),
/* 7 */ PLAYER_MELEEWEAPON_MAX
} PlayerMeleeWeapon;
+// Relies on mask item actions to be contiguous
+#define GET_MASK_FROM_IA(itemAction) ((itemAction) - (PLAYER_IA_MASK_MIN - 1))
+#define GET_IA_FROM_MASK(mask) ((mask) + (PLAYER_IA_MASK_MIN - 1))
+
+typedef enum PlayerMask {
+ /* 0x00 */ PLAYER_MASK_NONE,
+ /* 0x01 */ PLAYER_MASK_TRUTH = GET_MASK_FROM_IA(PLAYER_IA_MASK_TRUTH),
+ /* 0x02 */ PLAYER_MASK_KAFEIS_MASK = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAFEIS_MASK),
+ /* 0x03 */ PLAYER_MASK_ALL_NIGHT = GET_MASK_FROM_IA(PLAYER_IA_MASK_ALL_NIGHT),
+ /* 0x04 */ PLAYER_MASK_BUNNY = GET_MASK_FROM_IA(PLAYER_IA_MASK_BUNNY),
+ /* 0x05 */ PLAYER_MASK_KEATON = GET_MASK_FROM_IA(PLAYER_IA_MASK_KEATON),
+ /* 0x06 */ PLAYER_MASK_GARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GARO),
+ /* 0x07 */ PLAYER_MASK_ROMANI = GET_MASK_FROM_IA(PLAYER_IA_MASK_ROMANI),
+ /* 0x08 */ PLAYER_MASK_CIRCUS_LEADER = GET_MASK_FROM_IA(PLAYER_IA_MASK_CIRCUS_LEADER),
+ /* 0x09 */ PLAYER_MASK_POSTMAN = GET_MASK_FROM_IA(PLAYER_IA_MASK_POSTMAN),
+ /* 0x0A */ PLAYER_MASK_COUPLE = GET_MASK_FROM_IA(PLAYER_IA_MASK_COUPLE),
+ /* 0x0B */ PLAYER_MASK_GREAT_FAIRY = GET_MASK_FROM_IA(PLAYER_IA_MASK_GREAT_FAIRY),
+ /* 0x0C */ PLAYER_MASK_GIBDO = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIBDO),
+ /* 0x0D */ PLAYER_MASK_DON_GERO = GET_MASK_FROM_IA(PLAYER_IA_MASK_DON_GERO),
+ /* 0x0E */ PLAYER_MASK_KAMARO = GET_MASK_FROM_IA(PLAYER_IA_MASK_KAMARO),
+ /* 0x0F */ PLAYER_MASK_CAPTAIN = GET_MASK_FROM_IA(PLAYER_IA_MASK_CAPTAIN),
+ /* 0x10 */ PLAYER_MASK_STONE = GET_MASK_FROM_IA(PLAYER_IA_MASK_STONE),
+ /* 0x11 */ PLAYER_MASK_BREMEN = GET_MASK_FROM_IA(PLAYER_IA_MASK_BREMEN),
+ /* 0x12 */ PLAYER_MASK_BLAST = GET_MASK_FROM_IA(PLAYER_IA_MASK_BLAST),
+ /* 0x13 */ PLAYER_MASK_SCENTS = GET_MASK_FROM_IA(PLAYER_IA_MASK_SCENTS),
+ /* 0x14 */ PLAYER_MASK_GIANT = GET_MASK_FROM_IA(PLAYER_IA_MASK_GIANT),
+ /* 0x15 */ PLAYER_MASK_FIERCE_DEITY = GET_MASK_FROM_IA(PLAYER_IA_MASK_FIERCE_DEITY),
+ /* 0x16 */ PLAYER_MASK_GORON = GET_MASK_FROM_IA(PLAYER_IA_MASK_GORON),
+ /* 0x17 */ PLAYER_MASK_ZORA = GET_MASK_FROM_IA(PLAYER_IA_MASK_ZORA),
+ /* 0x18 */ PLAYER_MASK_DEKU = GET_MASK_FROM_IA(PLAYER_IA_MASK_DEKU),
+ /* 0x19 */ PLAYER_MASK_MAX
+} PlayerMask;
+
// Relies on bottle-related item actions to be contiguous
#define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN)
@@ -244,7 +251,7 @@ typedef enum PlayerSword {
/* 0 */ PLAYER_SWORD_KOKIRI = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI),
/* 1 */ PLAYER_SWORD_RAZOR = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR),
/* 2 */ PLAYER_SWORD_GILDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED),
- /* 3 */ PLAYER_SWORD_GREAT_FAIRY = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY),
+ /* 3 */ PLAYER_SWORD_TWO_HANDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_TWO_HANDED),
/* 4 */ PLAYER_SWORD_MAX
} PlayerSword;
@@ -287,6 +294,12 @@ typedef enum PlayerMeleeWeaponAnimation {
/* 34 */ PLAYER_MWA_MAX
} PlayerMeleeWeaponAnimation;
+typedef enum PlayerMeleeWeaponState {
+ /* -1 */ PLAYER_MELEE_WEAPON_STATE_MINUS_1 = -1,
+ /* 0 */ PLAYER_MELEE_WEAPON_STATE_0,
+ /* 1 */ PLAYER_MELEE_WEAPON_STATE_1
+} PlayerMeleeWeaponState;
+
typedef enum PlayerDoorType {
/* -1 */ PLAYER_DOORTYPE_TALKING = -1, // Displays a message instead of opening
/* 0 */ PLAYER_DOORTYPE_NONE,
@@ -300,13 +313,61 @@ typedef enum PlayerDoorType {
typedef enum PlayerAnimType {
/* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT
/* 1 */ PLAYER_ANIMTYPE_1,
- /* 2 */ PLAYER_ANIMTYPE_2,
+ /* 2 */ PLAYER_ANIMTYPE_2, // Shield but no sword?
/* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon
/* 4 */ PLAYER_ANIMTYPE_4,
/* 5 */ PLAYER_ANIMTYPE_5,
/* 6 */ PLAYER_ANIMTYPE_MAX
} PlayerAnimType;
+typedef enum PlayerAnimGroup {
+ /* 0 */ PLAYER_ANIMGROUP_0, // STANDING_IDLE
+ /* 1 */ PLAYER_ANIMGROUP_1, // WALKING
+ /* 2 */ PLAYER_ANIMGROUP_2, // RUNNING
+ /* 3 */ PLAYER_ANIMGROUP_3,
+ /* 4 */ PLAYER_ANIMGROUP_4,
+ /* 5 */ PLAYER_ANIMGROUP_5, // Z-Targeting ?
+ /* 6 */ PLAYER_ANIMGROUP_6, // Start or finishing some animation
+ /* 7 */ PLAYER_ANIMGROUP_7, // DRAW_MELEE_WEAPON
+ /* 8 */ PLAYER_ANIMGROUP_8, // OPEN_DOOR_LEFT_FIERCE_DEITY
+ /* 9 */ PLAYER_ANIMGROUP_9, // OPEN_DOOR_LEFT_HUMAN
+ /* 10 */ PLAYER_ANIMGROUP_10, // OPEN_DOOR_RIGHT_FIERCE_DEITY
+ /* 11 */ PLAYER_ANIMGROUP_11, // OPEN_DOOR_RIGHT_HUMAN
+ /* 12 */ PLAYER_ANIMGROUP_12, // GRABBING
+ /* 13 */ PLAYER_ANIMGROUP_13, // FALLING/LANDING?
+ /* 14 */ PLAYER_ANIMGROUP_14, // landing from short distances?
+ /* 15 */ PLAYER_ANIMGROUP_15, // ROLLING
+ /* 16 */ PLAYER_ANIMGROUP_16, // BONK/BONKING
+ /* 17 */ PLAYER_ANIMGROUP_17,
+ /* 18 */ PLAYER_ANIMGROUP_18,
+ /* 19 */ PLAYER_ANIMGROUP_19, // START_SHIELDING
+ /* 20 */ PLAYER_ANIMGROUP_20, // SHIELDING
+ /* 21 */ PLAYER_ANIMGROUP_21, // STOP_SHIELDING/END_SHIELDING
+ /* 22 */ PLAYER_ANIMGROUP_22, // SLOW_SIDE_WALK?
+ /* 23 */ PLAYER_ANIMGROUP_23, // SIDE_WALK
+ /* 24 */ PLAYER_ANIMGROUP_24, // SIDE_WALK_RIGHT
+ /* 25 */ PLAYER_ANIMGROUP_25,
+ /* 26 */ PLAYER_ANIMGROUP_26,
+ /* 27 */ PLAYER_ANIMGROUP_27,
+ /* 28 */ PLAYER_ANIMGROUP_28, // THROWING
+ /* 29 */ PLAYER_ANIMGROUP_29, // PUT_DOWN_OBJECT?
+ /* 30 */ PLAYER_ANIMGROUP_30, // back walking slow?
+ /* 31 */ PLAYER_ANIMGROUP_31,
+ /* 32 */ PLAYER_ANIMGROUP_32,
+ /* 33 */ PLAYER_ANIMGROUP_33,
+ /* 34 */ PLAYER_ANIMGROUP_34, // PULLING_START
+ /* 35 */ PLAYER_ANIMGROUP_35, // PULLING
+ /* 36 */ PLAYER_ANIMGROUP_36, // PULLING_END
+ /* 37 */ PLAYER_ANIMGROUP_37, // climbing from a ledge?
+ /* 38 */ PLAYER_ANIMGROUP_38, // ledge
+ /* 39 */ PLAYER_ANIMGROUP_39, // ledge
+ /* 40 */ PLAYER_ANIMGROUP_40, // climbing from a ledge
+ /* 41 */ PLAYER_ANIMGROUP_41,
+ /* 42 */ PLAYER_ANIMGROUP_42,
+ /* 43 */ PLAYER_ANIMGROUP_43,
+ /* 44 */ PLAYER_ANIMGROUP_MAX
+} PlayerAnimGroup;
+
typedef enum PlayerModelType {
// left hand
/* 0 */ PLAYER_MODELTYPE_LH_OPEN,
@@ -464,7 +525,7 @@ typedef struct PlayerAnimationFrame {
#define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00)
typedef struct PlayerAgeProperties {
- /* 0x00 */ f32 unk_00; // ceilingCheckHeight?
+ /* 0x00 */ f32 unk_00; // ceilingCheckHeight
/* 0x04 */ f32 shadowScale;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
@@ -478,7 +539,7 @@ typedef struct PlayerAgeProperties {
/* 0x2C */ f32 unk_2C; // water stuff // depthInWater
/* 0x30 */ f32 unk_30; // water stuff // depthInWater
/* 0x34 */ f32 unk_34;
- /* 0x38 */ f32 unk_38; // wallCheckHeight?
+ /* 0x38 */ f32 unk_38; // wallCheckHeight
/* 0x3C */ f32 unk_3C;
/* 0x40 */ f32 unk_40;
/* 0x44 */ Vec3s unk_44;
@@ -489,9 +550,9 @@ typedef struct PlayerAgeProperties {
/* 0x94 */ u16 surfaceSfxIdOffset;
/* 0x98 */ f32 unk_98;
/* 0x9C */ f32 unk_9C;
- /* 0xA0 */ PlayerAnimationHeader* unk_A0;
- /* 0xA4 */ PlayerAnimationHeader* unk_A4;
- /* 0xA8 */ PlayerAnimationHeader* unk_A8;
+ /* 0xA0 */ PlayerAnimationHeader* openChestAnim;
+ /* 0xA4 */ PlayerAnimationHeader* unk_A4; // OoT leftovers to interact with the Master Sword
+ /* 0xA8 */ PlayerAnimationHeader* unk_A8; // OoT leftovers to interact with the Master Sword
/* 0xAC */ PlayerAnimationHeader* unk_AC;
/* 0xB0 */ PlayerAnimationHeader* unk_B0;
/* 0xB4 */ PlayerAnimationHeader* unk_B4[4];
@@ -547,7 +608,7 @@ typedef enum PlayerCsMode {
/* 0x0F */ PLAYER_CSMODE_15,
/* 0x10 */ PLAYER_CSMODE_16,
/* 0x11 */ PLAYER_CSMODE_17,
- /* 0x12 */ PLAYER_CSMODE_18,
+ /* 0x12 */ PLAYER_CSMODE_18, // Strangled by Wallmaster
/* 0x13 */ PLAYER_CSMODE_19,
/* 0x14 */ PLAYER_CSMODE_20,
/* 0x15 */ PLAYER_CSMODE_21,
@@ -555,7 +616,7 @@ typedef enum PlayerCsMode {
/* 0x17 */ PLAYER_CSMODE_23,
/* 0x18 */ PLAYER_CSMODE_24,
/* 0x19 */ PLAYER_CSMODE_25,
- /* 0x1A */ PLAYER_CSMODE_26,
+ /* 0x1A */ PLAYER_CSMODE_26, // Halt!
/* 0x1B */ PLAYER_CSMODE_27,
/* 0x1C */ PLAYER_CSMODE_28,
/* 0x1D */ PLAYER_CSMODE_29,
@@ -613,7 +674,7 @@ typedef enum PlayerCsMode {
/* 0x51 */ PLAYER_CSMODE_81,
/* 0x52 */ PLAYER_CSMODE_82,
/* 0x53 */ PLAYER_CSMODE_83,
- /* 0x54 */ PLAYER_CSMODE_84,
+ /* 0x54 */ PLAYER_CSMODE_84, // Sucked by the moon
/* 0x55 */ PLAYER_CSMODE_85,
/* 0x56 */ PLAYER_CSMODE_86,
/* 0x57 */ PLAYER_CSMODE_87,
@@ -867,10 +928,11 @@ typedef enum PlayerCsMode {
#define PLAYER_STATE3_20000000 (1 << 29)
//
#define PLAYER_STATE3_40000000 (1 << 30)
-//
+// TARGETING_HOSTILE?
#define PLAYER_STATE3_80000000 (1 << 31)
+#define PLAYER_GET_BG_CAM_INDEX(thisx) ((thisx)->params & 0xFF)
#define PLAYER_GET_INITMODE(thisx) (((thisx)->params & 0xF00) >> 8)
typedef enum PlayerInitMode {
@@ -894,6 +956,15 @@ typedef enum PlayerInitMode {
#define PLAYER_PARAMS(startBgCamIndex, initMode) ((startBgCamIndex & 0xFF) | ((initMode & 0xF) << 8))
+typedef enum PlayerUnkAA5 {
+ /* 0 */ PLAYER_UNKAA5_0,
+ /* 1 */ PLAYER_UNKAA5_1,
+ /* 2 */ PLAYER_UNKAA5_2,
+ /* 3 */ PLAYER_UNKAA5_3,
+ /* 4 */ PLAYER_UNKAA5_4,
+ /* 5 */ PLAYER_UNKAA5_5,
+} PlayerUnkAA5;
+
typedef void (*PlayerActionFunc)(struct Player* this, struct PlayState* play);
typedef s32 (*PlayerFuncAC4)(struct Player* this, struct PlayState* play);
typedef void (*PlayerFuncD58)(struct PlayState* play, struct Player* this);
@@ -917,31 +988,13 @@ typedef struct Player {
/* 0x151 */ u8 rightHandType;
/* 0x152 */ u8 sheathType;
/* 0x153 */ u8 currentMask; // PlayerMask enum
- /* 0x154 */ s8 unk_154;
+ /* 0x154 */ s8 unk_154; // EquipSlot enum // Last pressed equip slot?
/* 0x155 */ u8 prevMask;
/* 0x158 */ Gfx** rightHandDLists;
/* 0x15C */ Gfx** leftHandDLists;
/* 0x160 */ Gfx** sheathDLists;
/* 0x164 */ Gfx** waistDLists;
- /* 0x168 */ f32 unk_168;
- /* 0x16C */ f32 unk_16C;
- /* 0x170 */ f32 unk_170;
- /* 0x174 */ f32 unk_174;
- /* 0x178 */ f32 unk_178;
- /* 0x17C */ f32 unk_17C;
- /* 0x180 */ f32 unk_180;
- /* 0x184 */ f32 unk_184;
- /* 0x188 */ f32 unk_188;
- /* 0x18C */ f32 unk_18C;
- /* 0x190 */ f32 unk_190;
- /* 0x194 */ f32 unk_194;
- /* 0x198 */ f32 unk_198;
- /* 0x19C */ f32 unk_19C;
- /* 0x1A0 */ f32 unk_1A0;
- /* 0x1A4 */ f32 unk_1A4;
- /* 0x1A8 */ f32 unk_1A8;
- /* 0x1AC */ f32 unk_1AC;
- /* 0x1B0 */ f32 unk_1B0;
+ /* 0x168 */ UNK_TYPE1 unk_168[0x4C];
/* 0x1B4 */ s16 unk_1B4;
/* 0x1B6 */ char unk_1B6[2];
/* 0x1B8 */ u8 giObjectLoading;
@@ -960,8 +1013,7 @@ typedef struct Player {
/* 0x2C8 */ SkelAnime unk_2C8;
/* 0x30C */ Vec3s jointTable[5];
/* 0x32A */ Vec3s morphTable[5];
- /* 0x348 */ s16 eyeTexId;
- /* 0x34A */ s16 eyeAnimTimer;
+ /* 0x348 */ BlinkInfo blinkInfo;
/* 0x34C */ Actor* heldActor;
/* 0x350 */ PosRot leftHandWorld;
/* 0x364 */ Actor* rightHandActor;
@@ -980,12 +1032,12 @@ typedef struct Player {
/* 0x395 */ u8 prevCsMode; // PlayerCsMode enum
/* 0x396 */ u8 unk_396; // currentActorActionId?
/* 0x397 */ u8 unk_397; // PlayerDoorType enum
- /* 0x398 */ Actor* unk_398;
+ /* 0x398 */ Actor* unk_398; // csActor?
/* 0x39C */ UNK_TYPE1 unk_39C[0x4];
/* 0x3A0 */ Vec3f unk_3A0;
/* 0x3AC */ Vec3f unk_3AC;
/* 0x3B8 */ u16 unk_3B8;
- /* 0x3BA */ s16 unk_3BA;
+ /* 0x3BA */ s16 doorBgCamIndex;
/* 0x3BC */ s16 subCamId;
/* 0x3BE */ char unk_3BE[2];
/* 0x3C0 */ Vec3f unk_3C0;
@@ -1028,7 +1080,7 @@ typedef struct Player {
/* 0xA9C */ f32 secretRumbleCharge; // builds per frame until discharges with a rumble request
/* 0xAA0 */ f32 closestSecretDistSq; // Used to augment `secretRumbleCharge`. Cleared every frame
/* 0xAA4 */ s8 unk_AA4;
- /* 0xAA5 */ u8 unk_AA5;
+ /* 0xAA5 */ u8 unk_AA5; // PlayerUnkAA5 enum
/* 0xAA6 */ u16 unk_AA6; // flags of some kind
/* 0xAA8 */ s16 unk_AA8;
/* 0xAAA */ s16 unk_AAA;
@@ -1049,20 +1101,21 @@ typedef struct Player {
/* 0xADA */ s8 meleeWeaponAnimation;
/* 0xADB */ s8 meleeWeaponState;
/* 0xADC */ s8 unk_ADC;
- /* 0xADD */ s8 unk_ADD;
+ /* 0xADD */ s8 unk_ADD; // Some sort of combo counter
/* 0xADE */ u8 unk_ADE;
/* 0xADF */ s8 unk_ADF[4]; // Circular buffer used for testing for triggering a quickspin
/* 0xAE3 */ s8 unk_AE3[4]; // Circular buffer used for ?
- /* 0xAE7 */ s8 unk_AE7; // a timer
+ /* 0xAE7 */ s8 unk_AE7; // a timer, used as an index for multiple kinds of animations too, room index?, etc
/* 0xAE8 */ s16 unk_AE8; // multipurpose timer
/* 0xAEC */ f32 unk_AEC;
- /* 0xAF0 */ union { // TODO: this may be an union of two structs
+ /* 0xAF0 */ union {
Vec3f unk_AF0[2];
f32 arr_AF0[6];
};
- /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array
+ /* 0xB08 */ f32 unk_B08;
+ /* 0xB0C */ f32 unk_B0C;
/* 0xB10 */ f32 unk_B10[6];
- /* 0xB28 */ s16 unk_B28; //Burning stick timer?
+ /* 0xB28 */ s16 unk_B28; // Burning stick timer?
/* 0xB2A */ s8 getItemDrawIdPlusOne;
/* 0xB2B */ s8 unk_B2B;
/* 0xB2C */ f32 windSpeed;
@@ -1088,7 +1141,7 @@ typedef struct Player {
/* 0xB64 */ u8 unk_B64;
/* 0xB65 */ u8 shockTimer;
/* 0xB66 */ u8 unk_B66;
- /* 0xB67 */ u8 unk_B67; // deku remaining hops counter
+ /* 0xB67 */ u8 remainingHopsCounter; // Deku hopping on water
/* 0xB68 */ s16 fallStartHeight; // last truncated Y position before falling
/* 0xB6A */ s16 fallDistance; // truncated Y distance the player has fallen so far (positive is down)
/* 0xB6C */ s16 unk_B6C;
@@ -1100,8 +1153,8 @@ typedef struct Player {
/* 0xB76 */ s16 unk_B76;
/* 0xB78 */ f32 unk_B78;
/* 0xB7C */ f32 unk_B7C;
- /* 0xB80 */ f32 unk_B80;
- /* 0xB84 */ s16 unk_B84;
+ /* 0xB80 */ f32 pushedSpeed; // Pushing player, examples include water currents, floor conveyors, climbing sloped surfaces
+ /* 0xB84 */ s16 pushedYaw; // Yaw of direction in which player is being pushed
/* 0xB86 */ s16 unk_B86[2]; // unknown length
/* 0xB8A */ s16 unk_B8A;
/* 0xB8C */ s16 unk_B8C;
@@ -1112,7 +1165,7 @@ typedef struct Player {
/* 0xB96 */ s16 unk_B96;
/* 0xB98 */ WeaponInfo meleeWeaponInfo[3];
/* 0xBEC */ Vec3f bodyPartsPos[PLAYER_BODYPART_MAX];
- /* 0xCC4 */ MtxF mf_CC4;
+ /* 0xCC4 */ MtxF leftHandMf;
/* 0xD04 */ MtxF shieldMf;
/* 0xD44 */ u8 isBurning;
/* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part
@@ -1120,8 +1173,7 @@ typedef struct Player {
/* 0xD58 */ PlayerFuncD58 unk_D58;
/* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame)
/* 0xD5D */ u8 unk_D5D;
- /* 0xD5E */ u8 unk_D5E;
- /* 0xD5F */ u8 unk_D5F;
+ /* 0xD5E */ u8 floorProperty; // FloorProperty enum
/* 0xD60 */ f32 unk_D60;
/* 0xD64 */ s16 unk_D64;
/* 0xD66 */ u16 unk_D66; // sfx
diff --git a/include/z64save.h b/include/z64save.h
index 9d580803f..01acfed0e 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -338,7 +338,7 @@ typedef struct SaveContext {
/* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE"
/* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item"
/* 0x3DBB */ u8 unk_3DBB; // "next_walk"
- /* 0x3DBC */ s16 dogParams; // "dog_flag"
+ /* 0x3DBC */ s16 dogParams; // OoT leftover. "dog_flag"
/* 0x3DBE */ u8 envHazardTextTriggerFlags; // "guide_status"
/* 0x3DBF */ u8 showTitleCard; // "name_display"
/* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer"