1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-11 11:33:48 +00:00

Documentation pass centered on z_player_lib (#1230)

This commit is contained in:
Dragorn421 2022-05-29 04:52:15 -07:00 committed by GitHub
parent e68f321777
commit d39ce02458
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 220 additions and 191 deletions

View file

@ -73,10 +73,10 @@ extern s16 gSpoilingItems[3];
extern s16 gSpoilingItemReverts[3]; extern s16 gSpoilingItemReverts[3];
extern FlexSkeletonHeader* gPlayerSkelHeaders[2]; extern FlexSkeletonHeader* gPlayerSkelHeaders[2];
extern u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX]; extern u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX];
extern Gfx* D_80125DE8[]; extern Gfx* gPlayerLeftHandBgsDLs[];
extern Gfx* D_80125E08[]; extern Gfx* gPlayerLeftHandOpenDLs[];
extern Gfx* D_80125E18[]; extern Gfx* gPlayerLeftHandClosedDLs[];
extern Gfx* D_80125EF8[]; extern Gfx* gPlayerLeftHandBoomerangDLs[];
extern Gfx gCullBackDList[]; extern Gfx gCullBackDList[];
extern Gfx gCullFrontDList[]; extern Gfx gCullFrontDList[];
extern Gfx gEmptyDL[]; extern Gfx gEmptyDL[];

View file

@ -254,7 +254,7 @@ typedef enum {
/* 0x00 */ PLAYER_MODELTYPE_LH_OPEN, // empty open hand /* 0x00 */ PLAYER_MODELTYPE_LH_OPEN, // empty open hand
/* 0x01 */ PLAYER_MODELTYPE_LH_CLOSED, // empty closed hand /* 0x01 */ PLAYER_MODELTYPE_LH_CLOSED, // empty closed hand
/* 0x02 */ PLAYER_MODELTYPE_LH_SWORD, // holding kokiri/master sword /* 0x02 */ PLAYER_MODELTYPE_LH_SWORD, // holding kokiri/master sword
/* 0x03 */ PLAYER_MODELTYPE_3, // unused, same as PLAYER_MODELTYPE_LH_SWORD /* 0x03 */ PLAYER_MODELTYPE_LH_SWORD_2, // unused, same as PLAYER_MODELTYPE_LH_SWORD
/* 0x04 */ PLAYER_MODELTYPE_LH_BGS, // holding bgs/broken giant knife (child: master sword) /* 0x04 */ PLAYER_MODELTYPE_LH_BGS, // holding bgs/broken giant knife (child: master sword)
/* 0x05 */ PLAYER_MODELTYPE_LH_HAMMER, // holding hammer (child: empty hand) /* 0x05 */ PLAYER_MODELTYPE_LH_HAMMER, // holding hammer (child: empty hand)
/* 0x06 */ PLAYER_MODELTYPE_LH_BOOMERANG, // holding boomerang (adult: empty hand) /* 0x06 */ PLAYER_MODELTYPE_LH_BOOMERANG, // holding boomerang (adult: empty hand)
@ -264,7 +264,7 @@ typedef enum {
/* 0x09 */ PLAYER_MODELTYPE_RH_CLOSED, // empty closed hand /* 0x09 */ PLAYER_MODELTYPE_RH_CLOSED, // empty closed hand
/* 0x0A */ PLAYER_MODELTYPE_RH_SHIELD, // holding a shield (including no shield) /* 0x0A */ PLAYER_MODELTYPE_RH_SHIELD, // holding a shield (including no shield)
/* 0x0B */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, // holding bow/slingshot /* 0x0B */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT, // holding bow/slingshot
/* 0x0C */ PLAYER_MODELTYPE_12, // unused, same as PLAYER_MODELTYPE_RH_BOW_SLINGSHOT /* 0x0C */ PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2, // unused, same as PLAYER_MODELTYPE_RH_BOW_SLINGSHOT
/* 0x0D */ PLAYER_MODELTYPE_RH_OCARINA, // holding ocarina (child: fairy ocarina, adult: OoT) /* 0x0D */ PLAYER_MODELTYPE_RH_OCARINA, // holding ocarina (child: fairy ocarina, adult: OoT)
/* 0x0E */ PLAYER_MODELTYPE_RH_OOT, // holding OoT /* 0x0E */ PLAYER_MODELTYPE_RH_OOT, // holding OoT
/* 0x0F */ PLAYER_MODELTYPE_RH_HOOKSHOT, // holding hookshot (child: empty hand) /* 0x0F */ PLAYER_MODELTYPE_RH_HOOKSHOT, // holding hookshot (child: empty hand)

View file

@ -101,7 +101,7 @@ typedef struct {
typedef struct { typedef struct {
/* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory" /* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory"
/* 0x0004 */ s32 linkAge; /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`)
/* 0x0008 */ s32 cutsceneIndex; /* 0x0008 */ s32 cutsceneIndex;
/* 0x000C */ u16 dayTime; // "zelda_time" /* 0x000C */ u16 dayTime; // "zelda_time"
/* 0x0010 */ s32 nightFlag; /* 0x0010 */ s32 nightFlag;

View file

@ -9,9 +9,9 @@ typedef struct {
} TextTriggerEntry; // size = 0x04 } TextTriggerEntry; // size = 0x04
typedef struct { typedef struct {
/* 0x00 */ void* dList; /* 0x00 */ Gfx* dList;
/* 0x04 */ Vec3f pos; /* 0x04 */ Vec3f pos;
} BowStringData; // size = 0x10 } BowSlingshotStringData; // size = 0x10
FlexSkeletonHeader* gPlayerSkelHeaders[] = { &gLinkAdultSkel, &gLinkChildSkel }; FlexSkeletonHeader* gPlayerSkelHeaders[] = { &gLinkAdultSkel, &gLinkChildSkel };
@ -26,73 +26,73 @@ s16 sBootData[PLAYER_BOOTS_MAX][17] = {
// Used to map action params to model groups // Used to map action params to model groups
u8 sActionModelGroups[PLAYER_AP_MAX] = { u8 sActionModelGroups[PLAYER_AP_MAX] = {
/* PLAYER_AP_NONE */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_NONE
/* PLAYER_AP_LAST_USED */ PLAYER_MODELGROUP_15, PLAYER_MODELGROUP_15, // PLAYER_AP_LAST_USED
/* PLAYER_AP_FISHING_POLE */ PLAYER_MODELGROUP_10, PLAYER_MODELGROUP_10, // PLAYER_AP_FISHING_POLE
/* PLAYER_AP_SWORD_MASTER */ PLAYER_MODELGROUP_SWORD, PLAYER_MODELGROUP_SWORD, // PLAYER_AP_SWORD_MASTER
/* PLAYER_AP_SWORD_KOKIRI */ PLAYER_MODELGROUP_SWORD, PLAYER_MODELGROUP_SWORD, // PLAYER_AP_SWORD_KOKIRI
/* PLAYER_AP_SWORD_BGS */ PLAYER_MODELGROUP_BGS, PLAYER_MODELGROUP_BGS, // PLAYER_AP_SWORD_BGS
/* PLAYER_AP_STICK */ PLAYER_MODELGROUP_10, PLAYER_MODELGROUP_10, // PLAYER_AP_STICK
/* PLAYER_AP_HAMMER */ PLAYER_MODELGROUP_HAMMER, PLAYER_MODELGROUP_HAMMER, // PLAYER_AP_HAMMER
/* PLAYER_AP_BOW */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW
/* PLAYER_AP_BOW_FIRE */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_FIRE
/* PLAYER_AP_BOW_ICE */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_ICE
/* PLAYER_AP_BOW_LIGHT */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_LIGHT
/* PLAYER_AP_BOW_0C */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_0C
/* PLAYER_AP_BOW_0D */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_0D
/* PLAYER_AP_BOW_0E */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_BOW_0E
/* PLAYER_AP_SLINGSHOT */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_SLINGSHOT
/* PLAYER_AP_HOOKSHOT */ PLAYER_MODELGROUP_HOOKSHOT, PLAYER_MODELGROUP_HOOKSHOT, // PLAYER_AP_HOOKSHOT
/* PLAYER_AP_LONGSHOT */ PLAYER_MODELGROUP_HOOKSHOT, PLAYER_MODELGROUP_HOOKSHOT, // PLAYER_AP_LONGSHOT
/* PLAYER_AP_BOMB */ PLAYER_MODELGROUP_EXPLOSIVES, PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_AP_BOMB
/* PLAYER_AP_BOMBCHU */ PLAYER_MODELGROUP_EXPLOSIVES, PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_AP_BOMBCHU
/* PLAYER_AP_BOOMERANG */ PLAYER_MODELGROUP_BOOMERANG, PLAYER_MODELGROUP_BOOMERANG, // PLAYER_AP_BOOMERANG
/* PLAYER_AP_MAGIC_SPELL_15 */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MAGIC_SPELL_15
/* PLAYER_AP_MAGIC_SPELL_16 */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MAGIC_SPELL_16
/* PLAYER_AP_MAGIC_SPELL_17 */ PLAYER_MODELGROUP_BOW_SLINGSHOT, PLAYER_MODELGROUP_BOW_SLINGSHOT, // PLAYER_AP_MAGIC_SPELL_17
/* PLAYER_AP_FARORES_WIND */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_FARORES_WIND
/* PLAYER_AP_NAYRUS_LOVE */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_NAYRUS_LOVE
/* PLAYER_AP_DINS_FIRE */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_DINS_FIRE
/* PLAYER_AP_NUT */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_NUT
/* PLAYER_AP_OCARINA_FAIRY */ PLAYER_MODELGROUP_OCARINA, PLAYER_MODELGROUP_OCARINA, // PLAYER_AP_OCARINA_FAIRY
/* PLAYER_AP_OCARINA_TIME */ PLAYER_MODELGROUP_OOT, PLAYER_MODELGROUP_OOT, // PLAYER_AP_OCARINA_TIME
/* PLAYER_AP_BOTTLE */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE
/* PLAYER_AP_BOTTLE_FISH */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_FISH
/* PLAYER_AP_BOTTLE_FIRE */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_FIRE
/* PLAYER_AP_BOTTLE_BUG */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_BUG
/* PLAYER_AP_BOTTLE_POE */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POE
/* PLAYER_AP_BOTTLE_BIG_POE */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_BIG_POE
/* PLAYER_AP_BOTTLE_LETTER */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_LETTER
/* PLAYER_AP_BOTTLE_POTION_RED */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_RED
/* PLAYER_AP_BOTTLE_POTION_BLUE */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_BLUE
/* PLAYER_AP_BOTTLE_POTION_GREEN */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_POTION_GREEN
/* PLAYER_AP_BOTTLE_MILK */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_MILK
/* PLAYER_AP_BOTTLE_MILK_HALF */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_MILK_HALF
/* PLAYER_AP_BOTTLE_FAIRY */ PLAYER_MODELGROUP_BOTTLE, PLAYER_MODELGROUP_BOTTLE, // PLAYER_AP_BOTTLE_FAIRY
/* PLAYER_AP_LETTER_ZELDA */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_LETTER_ZELDA
/* PLAYER_AP_WEIRD_EGG */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_WEIRD_EGG
/* PLAYER_AP_CHICKEN */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_CHICKEN
/* PLAYER_AP_BEAN */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_BEAN
/* PLAYER_AP_POCKET_EGG */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_POCKET_EGG
/* PLAYER_AP_POCKET_CUCCO */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_POCKET_CUCCO
/* PLAYER_AP_COJIRO */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_COJIRO
/* PLAYER_AP_ODD_MUSHROOM */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_ODD_MUSHROOM
/* PLAYER_AP_ODD_POTION */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_ODD_POTION
/* PLAYER_AP_SAW */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_SAW
/* PLAYER_AP_SWORD_BROKEN */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_SWORD_BROKEN
/* PLAYER_AP_PRESCRIPTION */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_PRESCRIPTION
/* PLAYER_AP_FROG */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_FROG
/* PLAYER_AP_EYEDROPS */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_EYEDROPS
/* PLAYER_AP_CLAIM_CHECK */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_CLAIM_CHECK
/* PLAYER_AP_MASK_KEATON */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_KEATON
/* PLAYER_AP_MASK_SKULL */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_SKULL
/* PLAYER_AP_MASK_SPOOKY */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_SPOOKY
/* PLAYER_AP_MASK_BUNNY */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_BUNNY
/* PLAYER_AP_MASK_GORON */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GORON
/* PLAYER_AP_MASK_ZORA */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_ZORA
/* PLAYER_AP_MASK_GERUDO */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_GERUDO
/* PLAYER_AP_MASK_TRUTH */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_MASK_TRUTH
/* PLAYER_AP_LENS */ PLAYER_MODELGROUP_DEFAULT, PLAYER_MODELGROUP_DEFAULT, // PLAYER_AP_LENS
}; };
TextTriggerEntry sTextTriggers[] = { TextTriggerEntry sTextTriggers[] = {
@ -154,7 +154,7 @@ u8 gPlayerModelTypes[PLAYER_MODELGROUP_MAX][PLAYER_MODELGROUPENTRY_MAX] = {
PLAYER_MODELTYPE_WAIST }, PLAYER_MODELTYPE_WAIST },
}; };
Gfx* D_80125CE8[PLAYER_SHIELD_MAX * 4] = { Gfx* sPlayerRightHandShieldDLs[PLAYER_SHIELD_MAX * 4] = {
// PLAYER_SHIELD_NONE // PLAYER_SHIELD_NONE
gLinkAdultRightHandClosedNearDL, gLinkAdultRightHandClosedNearDL,
gLinkChildRightHandClosedNearDL, gLinkChildRightHandClosedNearDL,
@ -177,7 +177,7 @@ Gfx* D_80125CE8[PLAYER_SHIELD_MAX * 4] = {
gLinkChildRightHandClosedFarDL, gLinkChildRightHandClosedFarDL,
}; };
Gfx* D_80125D28[PLAYER_SHIELD_MAX * 4] = { Gfx* D_80125D28[(PLAYER_SHIELD_MAX + 2) * 4] = {
// PLAYER_SHIELD_NONE // PLAYER_SHIELD_NONE
gLinkAdultMasterSwordAndSheathNearDL, gLinkAdultMasterSwordAndSheathNearDL,
gLinkChildSwordAndSheathNearDL, gLinkChildSwordAndSheathNearDL,
@ -198,10 +198,16 @@ Gfx* D_80125D28[PLAYER_SHIELD_MAX * 4] = {
gLinkChildSwordAndSheathNearDL, gLinkChildSwordAndSheathNearDL,
gLinkAdultMirrorShieldSwordAndSheathFarDL, gLinkAdultMirrorShieldSwordAndSheathFarDL,
gLinkChildSwordAndSheathFarDL, gLinkChildSwordAndSheathFarDL,
}; // PLAYER_SHIELD_NONE (child, no sword)
NULL,
Gfx* D_80125D68[] = { NULL,
NULL, NULL, NULL, NULL, NULL, gLinkChildDekuShieldWithMatrixDL, NULL, gLinkChildDekuShieldWithMatrixDL, NULL,
NULL,
// PLAYER_SHIELD_DEKU (child, no sword)
NULL,
gLinkChildDekuShieldWithMatrixDL,
NULL,
gLinkChildDekuShieldWithMatrixDL,
}; };
Gfx* D_80125D88[(PLAYER_SHIELD_MAX + 2) * 4] = { Gfx* D_80125D88[(PLAYER_SHIELD_MAX + 2) * 4] = {
@ -237,7 +243,7 @@ Gfx* D_80125D88[(PLAYER_SHIELD_MAX + 2) * 4] = {
gLinkChildDekuShieldWithMatrixDL, gLinkChildDekuShieldWithMatrixDL,
}; };
Gfx* D_80125DE8[] = { Gfx* gPlayerLeftHandBgsDLs[] = {
// biggoron sword // biggoron sword
gLinkAdultLeftHandHoldingBgsNearDL, gLinkAdultLeftHandHoldingBgsNearDL,
gLinkChildLeftHandHoldingMasterSwordDL, gLinkChildLeftHandHoldingMasterSwordDL,
@ -250,49 +256,50 @@ Gfx* D_80125DE8[] = {
gLinkChildLeftHandHoldingMasterSwordDL, gLinkChildLeftHandHoldingMasterSwordDL,
}; };
Gfx* D_80125E08[] = { Gfx* gPlayerLeftHandOpenDLs[] = {
gLinkAdultLeftHandNearDL, gLinkAdultLeftHandNearDL,
gLinkChildLeftHandNearDL, gLinkChildLeftHandNearDL,
gLinkAdultLeftHandFarDL, gLinkAdultLeftHandFarDL,
gLinkChildLeftHandFarDL, gLinkChildLeftHandFarDL,
}; };
Gfx* D_80125E18[] = { Gfx* gPlayerLeftHandClosedDLs[] = {
gLinkAdultLeftHandClosedNearDL, gLinkAdultLeftHandClosedNearDL,
gLinkChildLeftFistNearDL, gLinkChildLeftFistNearDL,
gLinkAdultLeftHandClosedFarDL, gLinkAdultLeftHandClosedFarDL,
gLinkChildLeftFistFarDL, gLinkChildLeftFistFarDL,
}; };
Gfx* D_80125E28[] = { // Identical to `sPlayerLeftHandSwordDLs` and unused
Gfx* sPlayerLeftHandSwordDLs2[] = {
gLinkAdultLeftHandHoldingMasterSwordNearDL, gLinkAdultLeftHandHoldingMasterSwordNearDL,
gLinkChildLeftFistAndKokiriSwordNearDL, gLinkChildLeftFistAndKokiriSwordNearDL,
gLinkAdultLeftHandHoldingMasterSwordFarDL, gLinkAdultLeftHandHoldingMasterSwordFarDL,
gLinkChildLeftFistAndKokiriSwordFarDL, gLinkChildLeftFistAndKokiriSwordFarDL,
}; };
Gfx* D_80125E38[] = { Gfx* sPlayerLeftHandSwordDLs[] = {
gLinkAdultLeftHandHoldingMasterSwordNearDL, gLinkAdultLeftHandHoldingMasterSwordNearDL,
gLinkChildLeftFistAndKokiriSwordNearDL, gLinkChildLeftFistAndKokiriSwordNearDL,
gLinkAdultLeftHandHoldingMasterSwordFarDL, gLinkAdultLeftHandHoldingMasterSwordFarDL,
gLinkChildLeftFistAndKokiriSwordFarDL, gLinkChildLeftFistAndKokiriSwordFarDL,
}; };
Gfx* D_80125E48[] = { Gfx* sPlayerRightHandOpenDLs[] = {
gLinkAdultRightHandNearDL, gLinkAdultRightHandNearDL,
gLinkChildRightHandNearDL, gLinkChildRightHandNearDL,
gLinkAdultRightHandFarDL, gLinkAdultRightHandFarDL,
gLinkChildRightHandFarDL, gLinkChildRightHandFarDL,
}; };
Gfx* D_80125E58[] = { Gfx* sPlayerRightHandClosedDLs[] = {
gLinkAdultRightHandClosedNearDL, gLinkAdultRightHandClosedNearDL,
gLinkChildRightHandClosedNearDL, gLinkChildRightHandClosedNearDL,
gLinkAdultRightHandClosedFarDL, gLinkAdultRightHandClosedFarDL,
gLinkChildRightHandClosedFarDL, gLinkChildRightHandClosedFarDL,
}; };
Gfx* D_80125E68[] = { Gfx* sPlayerRightHandBowSlingshotDLs[] = {
gLinkAdultRightHandHoldingBowNearDL, gLinkAdultRightHandHoldingBowNearDL,
gLinkChildRightHandHoldingSlingshotNearDL, gLinkChildRightHandHoldingSlingshotNearDL,
gLinkAdultRightHandHoldingBowFarDL, gLinkAdultRightHandHoldingBowFarDL,
@ -313,110 +320,111 @@ Gfx* D_80125E88[] = {
gLinkChildSheathFarDL, gLinkChildSheathFarDL,
}; };
Gfx* D_80125E98[] = { Gfx* sPlayerWaistDLs[] = {
gLinkAdultWaistNearDL, gLinkAdultWaistNearDL,
gLinkChildWaistNearDL, gLinkChildWaistNearDL,
gLinkAdultWaistFarDL, gLinkAdultWaistFarDL,
gLinkChildWaistFarDL, gLinkChildWaistFarDL,
}; };
Gfx* D_80125EA8[] = { // Identical to `sPlayerRightHandBowSlingshotDLs` and unused
Gfx* sPlayerRightHandBowSlingshotDLs2[] = {
gLinkAdultRightHandHoldingBowNearDL, gLinkAdultRightHandHoldingBowNearDL,
gLinkChildRightHandHoldingSlingshotNearDL, gLinkChildRightHandHoldingSlingshotNearDL,
gLinkAdultRightHandHoldingBowFarDL, gLinkAdultRightHandHoldingBowFarDL,
gLinkChildRightHandHoldingSlingshotFarDL, gLinkChildRightHandHoldingSlingshotFarDL,
}; };
Gfx* D_80125EB8[] = { Gfx* sPlayerRightHandOcarinaDLs[] = {
gLinkAdultRightHandHoldingOotNearDL, gLinkAdultRightHandHoldingOotNearDL,
gLinkChildRightHandHoldingFairyOcarinaNearDL, gLinkChildRightHandHoldingFairyOcarinaNearDL,
gLinkAdultRightHandHoldingOotFarDL, gLinkAdultRightHandHoldingOotFarDL,
gLinkChildRightHandHoldingFairyOcarinaFarDL, gLinkChildRightHandHoldingFairyOcarinaFarDL,
}; };
Gfx* D_80125EC8[] = { Gfx* sPlayerRightHandOotDLs[] = {
gLinkAdultRightHandHoldingOotNearDL, gLinkAdultRightHandHoldingOotNearDL,
gLinkChildRightHandAndOotNearDL, gLinkChildRightHandAndOotNearDL,
gLinkAdultRightHandHoldingOotFarDL, gLinkAdultRightHandHoldingOotFarDL,
gLinkChildRightHandHoldingOOTFarDL, gLinkChildRightHandHoldingOOTFarDL,
}; };
Gfx* D_80125ED8[] = { Gfx* sPlayerRightHandHookshotDLs[] = {
gLinkAdultRightHandHoldingHookshotNearDL, gLinkAdultRightHandHoldingHookshotNearDL,
gLinkChildRightHandNearDL, gLinkChildRightHandNearDL,
gLinkAdultRightHandHoldingHookshotNearDL, // The 'far' display list exists but is not used gLinkAdultRightHandHoldingHookshotNearDL, // The 'far' display list exists but is not used
gLinkChildRightHandFarDL, gLinkChildRightHandFarDL,
}; };
Gfx* D_80125EE8[] = { Gfx* sPlayerLeftHandHammerDLs[] = {
gLinkAdultLeftHandHoldingHammerNearDL, gLinkAdultLeftHandHoldingHammerNearDL,
gLinkChildLeftHandNearDL, gLinkChildLeftHandNearDL,
gLinkAdultLeftHandHoldingHammerFarDL, gLinkAdultLeftHandHoldingHammerFarDL,
gLinkChildLeftHandFarDL, gLinkChildLeftHandFarDL,
}; };
Gfx* D_80125EF8[] = { Gfx* gPlayerLeftHandBoomerangDLs[] = {
gLinkAdultLeftHandNearDL, gLinkAdultLeftHandNearDL,
gLinkChildLeftFistAndBoomerangNearDL, gLinkChildLeftFistAndBoomerangNearDL,
gLinkAdultLeftHandFarDL, gLinkAdultLeftHandFarDL,
gLinkChildLeftFistAndBoomerangFarDL, gLinkChildLeftFistAndBoomerangFarDL,
}; };
Gfx* D_80125F08[] = { Gfx* sPlayerLeftHandBottleDLs[] = {
gLinkAdultLeftHandOutNearDL, gLinkAdultLeftHandOutNearDL,
gLinkChildLeftHandUpNearDL, gLinkChildLeftHandUpNearDL,
gLinkAdultLeftHandOutNearDL, gLinkAdultLeftHandOutNearDL,
gLinkChildLeftHandUpNearDL, gLinkChildLeftHandUpNearDL,
}; };
Gfx* sArmOutDLs[] = { Gfx* sFirstPersonLeftForearmDLs[] = {
gLinkAdultRightArmOutNearDL, gLinkAdultRightArmOutNearDL,
NULL, NULL,
}; };
Gfx* sHandOutDLs[] = { Gfx* sFirstPersonLeftHandDLs[] = {
gLinkAdultRightHandOutNearDL, gLinkAdultRightHandOutNearDL,
NULL, NULL,
}; };
Gfx* sRightShoulderNearDLs[] = { Gfx* sFirstPersonRightShoulderDLs[] = {
gLinkAdultRightShoulderNearDL, gLinkAdultRightShoulderNearDL,
gLinkChildRightShoulderNearDL, gLinkChildRightShoulderNearDL,
}; };
Gfx* D_80125F30[] = { Gfx* sFirstPersonForearmDLs[] = {
gLinkAdultLeftArmOutNearDL, gLinkAdultLeftArmOutNearDL,
NULL, NULL,
}; };
Gfx* sHoldingFirstPersonWeaponDLs[] = { Gfx* sFirstPersonRightHandHoldingWeaponDLs[] = {
gLinkAdultRightHandHoldingBowFirstPersonDL, gLinkAdultRightHandHoldingBowFirstPersonDL,
gLinkChildRightArmStretchedSlingshotDL, gLinkChildRightArmStretchedSlingshotDL,
}; };
// Indexed by model types (left hand, right hand, sheath or waist) // Indexed by model types (left hand, right hand, sheath or waist)
Gfx** sPlayerDListGroups[PLAYER_MODELTYPE_MAX] = { Gfx** sPlayerDListGroups[PLAYER_MODELTYPE_MAX] = {
/* PLAYER_MODELTYPE_LH_OPEN */ D_80125E08, gPlayerLeftHandOpenDLs, // PLAYER_MODELTYPE_LH_OPEN
/* PLAYER_MODELTYPE_LH_CLOSED */ D_80125E18, gPlayerLeftHandClosedDLs, // PLAYER_MODELTYPE_LH_CLOSED
/* PLAYER_MODELTYPE_LH_SWORD */ D_80125E38, sPlayerLeftHandSwordDLs, // PLAYER_MODELTYPE_LH_SWORD
/* PLAYER_MODELTYPE_3 */ D_80125E28, sPlayerLeftHandSwordDLs2, // PLAYER_MODELTYPE_LH_SWORD_2
/* PLAYER_MODELTYPE_LH_BGS */ D_80125DE8, gPlayerLeftHandBgsDLs, // PLAYER_MODELTYPE_LH_BGS
/* PLAYER_MODELTYPE_LH_HAMMER */ D_80125EE8, sPlayerLeftHandHammerDLs, // PLAYER_MODELTYPE_LH_HAMMER
/* PLAYER_MODELTYPE_LH_BOOMERANG */ D_80125EF8, gPlayerLeftHandBoomerangDLs, // PLAYER_MODELTYPE_LH_BOOMERANG
/* PLAYER_MODELTYPE_LH_BOTTLE */ D_80125F08, sPlayerLeftHandBottleDLs, // PLAYER_MODELTYPE_LH_BOTTLE
/* PLAYER_MODELTYPE_RH_OPEN */ D_80125E48, sPlayerRightHandOpenDLs, // PLAYER_MODELTYPE_RH_OPEN
/* PLAYER_MODELTYPE_RH_CLOSED */ D_80125E58, sPlayerRightHandClosedDLs, // PLAYER_MODELTYPE_RH_CLOSED
/* PLAYER_MODELTYPE_RH_SHIELD */ D_80125CE8, sPlayerRightHandShieldDLs, // PLAYER_MODELTYPE_RH_SHIELD
/* PLAYER_MODELTYPE_RH_BOW_SLINGSHOT */ D_80125E68, sPlayerRightHandBowSlingshotDLs, // PLAYER_MODELTYPE_RH_BOW_SLINGSHOT
/* PLAYER_MODELTYPE_12 */ D_80125EA8, sPlayerRightHandBowSlingshotDLs2, // PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2
/* PLAYER_MODELTYPE_RH_OCARINA */ D_80125EB8, sPlayerRightHandOcarinaDLs, // PLAYER_MODELTYPE_RH_OCARINA
/* PLAYER_MODELTYPE_RH_OOT */ D_80125EC8, sPlayerRightHandOotDLs, // PLAYER_MODELTYPE_RH_OOT
/* PLAYER_MODELTYPE_RH_HOOKSHOT */ D_80125ED8, sPlayerRightHandHookshotDLs, // PLAYER_MODELTYPE_RH_HOOKSHOT
/* PLAYER_MODELTYPE_SHEATH_16 */ D_80125E78, D_80125E78, // PLAYER_MODELTYPE_SHEATH_16
/* PLAYER_MODELTYPE_SHEATH_17 */ D_80125E88, D_80125E88, // PLAYER_MODELTYPE_SHEATH_17
/* PLAYER_MODELTYPE_SHEATH_18 */ D_80125D28, D_80125D28, // PLAYER_MODELTYPE_SHEATH_18
/* PLAYER_MODELTYPE_SHEATH_19 */ D_80125D88, D_80125D88, // PLAYER_MODELTYPE_SHEATH_19
/* PLAYER_MODELTYPE_WAIST */ D_80125E98, sPlayerWaistDLs, // PLAYER_MODELTYPE_WAIST
}; };
Gfx gCullBackDList[] = { Gfx gCullBackDList[] = {
@ -517,13 +525,13 @@ void Player_SetModelsForHoldingShield(Player* this) {
((this->itemActionParam < 0) || (this->itemActionParam == this->heldItemActionParam))) { ((this->itemActionParam < 0) || (this->itemActionParam == this->heldItemActionParam))) {
if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) { if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) {
this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD; this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD;
this->rightHandDLists = &sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD][(void)0, gSaveContext.linkAge]; this->rightHandDLists = sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD] + ((void)0, gSaveContext.linkAge);
if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) { if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_16; this->sheathType = PLAYER_MODELTYPE_SHEATH_16;
} else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) { } else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_17; this->sheathType = PLAYER_MODELTYPE_SHEATH_17;
} }
this->sheathDLists = &sPlayerDListGroups[this->sheathType][(void)0, gSaveContext.linkAge]; this->sheathDLists = sPlayerDListGroups[this->sheathType] + ((void)0, gSaveContext.linkAge);
this->modelAnimType = PLAYER_ANIMTYPE_2; this->modelAnimType = PLAYER_ANIMTYPE_2;
this->itemActionParam = -1; this->itemActionParam = -1;
} }
@ -535,14 +543,14 @@ void Player_SetModels(Player* this, s32 modelGroup) {
this->rightHandType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND]; this->rightHandType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND];
this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]; this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH];
this->leftHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]] this->leftHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]] +
[(void)0, gSaveContext.linkAge]; ((void)0, gSaveContext.linkAge);
this->rightHandDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND]] this->rightHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND]] +
[(void)0, gSaveContext.linkAge]; ((void)0, gSaveContext.linkAge);
this->sheathDLists = &sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]] this->sheathDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]] +
[(void)0, gSaveContext.linkAge]; ((void)0, gSaveContext.linkAge);
this->waistDLists = this->waistDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]] +
&sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]][(void)0, gSaveContext.linkAge]; ((void)0, gSaveContext.linkAge);
Player_SetModelsForHoldingShield(this); Player_SetModelsForHoldingShield(this);
} }
@ -702,10 +710,10 @@ s32 func_8008F128(Player* this) {
} }
s32 Player_ActionToMeleeWeapon(s32 actionParam) { s32 Player_ActionToMeleeWeapon(s32 actionParam) {
s32 sword = actionParam - PLAYER_AP_FISHING_POLE; s32 meleeWeapon = actionParam - PLAYER_AP_FISHING_POLE;
if ((sword > 0) && (sword < 6)) { if ((meleeWeapon > 0) && (meleeWeapon < 6)) {
return sword; return meleeWeapon;
} else { } else {
return 0; return 0;
} }
@ -1102,7 +1110,6 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx**
} else if (limbIndex == PLAYER_LIMB_R_THIGH) { } else if (limbIndex == PLAYER_LIMB_R_THIGH) {
func_8008F87C(play, this, &this->skelAnime, pos, rot, PLAYER_LIMB_R_THIGH, PLAYER_LIMB_R_SHIN, func_8008F87C(play, this, &this->skelAnime, pos, rot, PLAYER_LIMB_R_THIGH, PLAYER_LIMB_R_SHIN,
PLAYER_LIMB_R_FOOT); PLAYER_LIMB_R_FOOT);
return false;
} else { } else {
return false; return false;
} }
@ -1122,15 +1129,15 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) { if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) {
dLists += 4; dLists += 4;
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) { } else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) {
dLists = &D_80125E08[gSaveContext.linkAge]; dLists = gPlayerLeftHandOpenDLs + gSaveContext.linkAge;
sLeftHandType = PLAYER_MODELTYPE_LH_OPEN; sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speedXZ > 2.0f) && } else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speedXZ > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) { !(this->stateFlags1 & PLAYER_STATE1_27)) {
dLists = &D_80125E18[gSaveContext.linkAge]; dLists = gPlayerLeftHandClosedDLs + gSaveContext.linkAge;
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED; sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
} }
*dList = dLists[sDListsLodOffset]; *dList = *(dLists + sDListsLodOffset);
} else if (limbIndex == PLAYER_LIMB_R_HAND) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
Gfx** dLists = this->rightHandDLists; Gfx** dLists = this->rightHandDLists;
@ -1138,11 +1145,11 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
dLists += this->currentShield * 4; dLists += this->currentShield * 4;
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speedXZ > 2.0f) && } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speedXZ > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) { !(this->stateFlags1 & PLAYER_STATE1_27)) {
dLists = &D_80125E58[gSaveContext.linkAge]; dLists = sPlayerRightHandClosedDLs + gSaveContext.linkAge;
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED; sRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
} }
*dList = dLists[sDListsLodOffset]; *dList = *(dLists + sDListsLodOffset);
} else if (limbIndex == PLAYER_LIMB_SHEATH) { } else if (limbIndex == PLAYER_LIMB_SHEATH) {
Gfx** dLists = this->sheathDLists; Gfx** dLists = this->sheathDLists;
@ -1156,12 +1163,12 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) || ((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) ||
(this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) && (this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) &&
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) { (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
dLists = D_80125D68; dLists = D_80125D28 + PLAYER_SHIELD_MAX * 4;
} }
*dList = dLists[sDListsLodOffset]; *dList = *(dLists + sDListsLodOffset);
} else if (limbIndex == PLAYER_LIMB_WAIST) { } else if (limbIndex == PLAYER_LIMB_WAIST) {
*dList = this->waistDLists[sDListsLodOffset]; *dList = *(this->waistDLists + sDListsLodOffset);
} }
} }
@ -1176,16 +1183,16 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
if (this->unk_6AD != 2) { if (this->unk_6AD != 2) {
*dList = NULL; *dList = NULL;
} else if (limbIndex == PLAYER_LIMB_L_FOREARM) { } else if (limbIndex == PLAYER_LIMB_L_FOREARM) {
*dList = sArmOutDLs[(void)0, gSaveContext.linkAge]; *dList = sFirstPersonLeftForearmDLs[(void)0, gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_L_HAND) { } else if (limbIndex == PLAYER_LIMB_L_HAND) {
*dList = sHandOutDLs[(void)0, gSaveContext.linkAge]; *dList = sFirstPersonLeftHandDLs[(void)0, gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) { } else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
*dList = sRightShoulderNearDLs[(void)0, gSaveContext.linkAge]; *dList = sFirstPersonRightShoulderDLs[(void)0, gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) { } else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
*dList = D_80125F30[(void)0, gSaveContext.linkAge]; *dList = sFirstPersonForearmDLs[(void)0, gSaveContext.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_HAND) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
*dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL *dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL
: sHoldingFirstPersonWeaponDLs[(void)0, gSaveContext.linkAge]; : sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.linkAge];
} else { } else {
*dList = NULL; *dList = NULL;
} }
@ -1211,14 +1218,14 @@ u8 func_80090480(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo
Math_Vec3f_Copy(&weaponInfo->tip, newTip); Math_Vec3f_Copy(&weaponInfo->tip, newTip);
Math_Vec3f_Copy(&weaponInfo->base, newBase); Math_Vec3f_Copy(&weaponInfo->base, newBase);
weaponInfo->active = 1; weaponInfo->active = 1;
return 1; return true;
} else if ((weaponInfo->tip.x == newTip->x) && (weaponInfo->tip.y == newTip->y) && } else if ((weaponInfo->tip.x == newTip->x) && (weaponInfo->tip.y == newTip->y) &&
(weaponInfo->tip.z == newTip->z) && (weaponInfo->base.x == newBase->x) && (weaponInfo->tip.z == newTip->z) && (weaponInfo->base.x == newBase->x) &&
(weaponInfo->base.y == newBase->y) && (weaponInfo->base.z == newBase->z)) { (weaponInfo->base.y == newBase->y) && (weaponInfo->base.z == newBase->z)) {
if (collider != NULL) { if (collider != NULL) {
Collider_ResetQuadAT(play, &collider->base); Collider_ResetQuadAT(play, &collider->base);
} }
return 0; return false;
} else { } else {
if (collider != NULL) { if (collider != NULL) {
Collider_SetQuadVertices(collider, newBase, newTip, &weaponInfo->base, &weaponInfo->tip); Collider_SetQuadVertices(collider, newBase, newTip, &weaponInfo->base, &weaponInfo->tip);
@ -1227,11 +1234,11 @@ u8 func_80090480(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo
Math_Vec3f_Copy(&weaponInfo->base, newBase); Math_Vec3f_Copy(&weaponInfo->base, newBase);
Math_Vec3f_Copy(&weaponInfo->tip, newTip); Math_Vec3f_Copy(&weaponInfo->tip, newTip);
weaponInfo->active = 1; weaponInfo->active = 1;
return 1; return true;
} }
} }
void func_80090604(PlayState* play, Player* this, ColliderQuad* collider, Vec3f* quadSrc) { void Player_UpdateShieldCollider(PlayState* play, Player* this, ColliderQuad* collider, Vec3f* quadSrc) {
static u8 shieldColTypes[PLAYER_SHIELD_MAX] = { static u8 shieldColTypes[PLAYER_SHIELD_MAX] = {
COLTYPE_METAL, COLTYPE_METAL,
COLTYPE_WOOD, COLTYPE_WOOD,
@ -1367,28 +1374,45 @@ void Player_DrawHookshotReticle(PlayState* play, Player* this, f32 arg2) {
} }
} }
Vec3f D_801260D4 = { 1100.0f, -700.0f, 0.0f }; // Coordinates of the player focus position, in the head limb's own model space.
Vec3f sPlayerFocusHeadLimbModelPos = { 1100.0f, -700.0f, 0.0f };
f32 sMeleeWeaponLengths[] = { f32 sMeleeWeaponLengths[] = {
0.0f, 4000.0f, 3000.0f, 5500.0f, 0.0f, 2500.0f, 0.0f, // not a melee weapon
4000.0f, // Master Sword
3000.0f, // Kokiri Sword
5500.0f, // Biggoron's Sword
0.0f, // Deku Stick
2500.0f, // Hammer
}; };
Gfx* sBottleDLists[] = { gLinkAdultBottleDL, gLinkChildBottleDL }; Gfx* sBottleDLists[] = { gLinkAdultBottleDL, gLinkChildBottleDL };
Color_RGB8 sBottleColors[] = { Color_RGB8 sBottleColors[] = {
{ 255, 255, 255 }, { 80, 80, 255 }, { 255, 100, 255 }, { 0, 0, 255 }, { 255, 0, 255 }, { 255, 255, 255 }, // Empty
{ 255, 0, 255 }, { 200, 200, 100 }, { 255, 0, 0 }, { 0, 0, 255 }, { 0, 255, 0 }, { 80, 80, 255 }, // Fish
{ 255, 255, 255 }, { 255, 255, 255 }, { 80, 80, 255 }, { 255, 100, 255 }, // Fire
{ 0, 0, 255 }, // Bug
{ 255, 0, 255 }, // Poe
{ 255, 0, 255 }, // Big Poe
{ 200, 200, 100 }, // Letter
{ 255, 0, 0 }, // Red Potion
{ 0, 0, 255 }, // Blue Potion
{ 0, 255, 0 }, // Green Potion
{ 255, 255, 255 }, // Milk
{ 255, 255, 255 }, // Half Milk
{ 80, 80, 255 }, // Fairy
}; };
Vec3f D_80126128 = { 398.0f, 1419.0f, 244.0f }; Vec3f D_80126128 = { 398.0f, 1419.0f, 244.0f };
BowStringData sBowStringData[] = { BowSlingshotStringData sBowSlingshotStringData[] = {
{ gLinkAdultBowStringDL, { 0.0f, -360.4f, 0.0f } }, // bow { gLinkAdultBowStringDL, { 0.0f, -360.4f, 0.0f } }, // Bow
{ gLinkChildSlinghotStringDL, { 606.0f, 236.0f, 0.0f } }, // slingshot { gLinkChildSlinghotStringDL, { 606.0f, 236.0f, 0.0f } }, // Slingshot
}; };
Vec3f D_80126154[] = { // Coordinates of the shield quad collider vertices, in the right hand limb's own model space.
Vec3f sRightHandLimbModelShieldQuadVertices[] = {
{ -4500.0f, -3000.0f, -600.0f }, { -4500.0f, -3000.0f, -600.0f },
{ 1500.0f, -3000.0f, -600.0f }, { 1500.0f, -3000.0f, -600.0f },
{ -4500.0f, 3000.0f, -600.0f }, { -4500.0f, 3000.0f, -600.0f },
@ -1398,17 +1422,20 @@ Vec3f D_80126154[] = {
Vec3f D_80126184 = { 100.0f, 1500.0f, 0.0f }; Vec3f D_80126184 = { 100.0f, 1500.0f, 0.0f };
Vec3f D_80126190 = { 100.0f, 1640.0f, 0.0f }; Vec3f D_80126190 = { 100.0f, 1640.0f, 0.0f };
Vec3f D_8012619C[] = { // Coordinates of the shield quad collider vertices, in the sheath limb's own model space.
Vec3f sSheathLimbModelShieldQuadVertices[] = {
{ -3000.0f, -3000.0f, -900.0f }, { -3000.0f, -3000.0f, -900.0f },
{ 3000.0f, -3000.0f, -900.0f }, { 3000.0f, -3000.0f, -900.0f },
{ -3000.0f, 3000.0f, -900.0f }, { -3000.0f, 3000.0f, -900.0f },
{ 3000.0f, 3000.0f, -900.0f }, { 3000.0f, 3000.0f, -900.0f },
}; };
Vec3f D_801261CC = { 630.0f, 100.0f, -30.0f }; // Position and rotation of the shield on Link's back, in the sheath limb's own model space.
Vec3s D_801261D8 = { 0, 0, 0x7FFF }; Vec3f sSheathLimbModelShieldOnBackPos = { 630.0f, 100.0f, -30.0f };
Vec3s sSheathLimbModelShieldOnBackZyxRot = { 0, 0, 0x7FFF };
Vec3f D_801261E0[] = { // Position of Link's foot, in the foot limb's own model space.
Vec3f sLeftRightFootLimbModelFootPos[] = {
{ 200.0f, 300.0f, 0.0f }, { 200.0f, 300.0f, 0.0f },
{ 200.0f, 200.0f, 0.0f }, { 200.0f, 200.0f, 0.0f },
}; };
@ -1505,8 +1532,8 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
if (this->rightHandType == PLAYER_MODELTYPE_RH_FF) { if (this->rightHandType == PLAYER_MODELTYPE_RH_FF) {
Matrix_Get(&this->shieldMf); Matrix_Get(&this->shieldMf);
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) || } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) ||
(this->rightHandType == PLAYER_MODELTYPE_12)) { (this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) {
BowStringData* stringData = &sBowStringData[gSaveContext.linkAge]; BowSlingshotStringData* stringData = &sBowSlingshotStringData[gSaveContext.linkAge];
OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2783); OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2783);
@ -1548,7 +1575,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
CLOSE_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2809); CLOSE_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2809);
} else if ((this->actor.scale.y >= 0.0f) && (this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD)) { } else if ((this->actor.scale.y >= 0.0f) && (this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD)) {
Matrix_Get(&this->shieldMf); Matrix_Get(&this->shieldMf);
func_80090604(play, this, &this->shieldQuad, D_80126154); Player_UpdateShieldCollider(play, this, &this->shieldQuad, sRightHandLimbModelShieldQuadVertices);
} }
if (this->actor.scale.y >= 0.0f) { if (this->actor.scale.y >= 0.0f) {
@ -1594,18 +1621,20 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
if ((this->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) && if ((this->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) &&
(this->rightHandType != PLAYER_MODELTYPE_RH_FF)) { (this->rightHandType != PLAYER_MODELTYPE_RH_FF)) {
if (Player_IsChildWithHylianShield(this)) { if (Player_IsChildWithHylianShield(this)) {
func_80090604(play, this, &this->shieldQuad, D_8012619C); Player_UpdateShieldCollider(play, this, &this->shieldQuad, sSheathLimbModelShieldQuadVertices);
} }
Matrix_TranslateRotateZYX(&D_801261CC, &D_801261D8); Matrix_TranslateRotateZYX(&sSheathLimbModelShieldOnBackPos, &sSheathLimbModelShieldOnBackZyxRot);
Matrix_Get(&this->shieldMf); Matrix_Get(&this->shieldMf);
} }
} else if (limbIndex == PLAYER_LIMB_HEAD) { } else if (limbIndex == PLAYER_LIMB_HEAD) {
Matrix_MultVec3f(&D_801260D4, &this->actor.focus.pos); Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos);
} else { } else {
Vec3f* vec = &D_801261E0[((void)0, gSaveContext.linkAge)]; Vec3f* footPos = &sLeftRightFootLimbModelFootPos[((void)0, gSaveContext.linkAge)];
Actor_SetFeetPos(&this->actor, limbIndex, PLAYER_LIMB_L_FOOT, vec, PLAYER_LIMB_R_FOOT, vec); // The same model position is used for both feet,
// but the resulting world position will be different for each limb.
Actor_SetFeetPos(&this->actor, limbIndex, PLAYER_LIMB_L_FOOT, footPos, PLAYER_LIMB_R_FOOT, footPos);
} }
} }
} }
@ -1636,7 +1665,7 @@ u32 func_80091738(PlayState* play, u8* segment, SkelAnime* skelAnime) {
sizeof(Vec3s[PLAYER_LIMB_BUF_COUNT]); sizeof(Vec3s[PLAYER_LIMB_BUF_COUNT]);
} }
u8 D_801261F8[] = { u8 sPauseModelGroupBySword[] = {
PLAYER_MODELGROUP_SWORD, // PLAYER_SWORD_KOKIRI PLAYER_MODELGROUP_SWORD, // PLAYER_SWORD_KOKIRI
PLAYER_MODELGROUP_SWORD, // PLAYER_SWORD_MASTER PLAYER_MODELGROUP_SWORD, // PLAYER_SWORD_MASTER
PLAYER_MODELGROUP_BGS, // PLAYER_SWORD_BGS PLAYER_MODELGROUP_BGS, // PLAYER_SWORD_BGS
@ -1644,9 +1673,9 @@ u8 D_801261F8[] = {
s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* arg) { s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* arg) {
u8* playerSwordAndShield = arg; u8* playerSwordAndShield = arg;
//! @bug `playerSwordAndShield[0]` can be 0 (`PLAYER_SWORD_NONE`), which indexes `D_801261F8[-1]`. The result //! @bug `playerSwordAndShield[0]` can be 0 (`PLAYER_SWORD_NONE`), which indexes `sPauseModelGroupBySword[-1]`.
//! happens to be 0 (`PLAYER_MODELGROUP_0`) in vanilla, but weird values are likely to cause a crash //! The result happens to be 0 (`PLAYER_MODELGROUP_0`) in vanilla, but weird values are likely to cause a crash.
u8 modelGroup = D_801261F8[playerSwordAndShield[0] - PLAYER_SWORD_KOKIRI]; u8 modelGroup = sPauseModelGroupBySword[playerSwordAndShield[0] - PLAYER_SWORD_KOKIRI];
s32 type; s32 type;
s32 dListOffset = 0; s32 dListOffset = 0;
Gfx** dLists; Gfx** dLists;
@ -1676,13 +1705,13 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
} else if (limbIndex == PLAYER_LIMB_WAIST) { } else if (limbIndex == PLAYER_LIMB_WAIST) {
type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]; type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST];
} else { } else {
return 0; return false;
} }
dLists = &sPlayerDListGroups[type][(void)0, gSaveContext.linkAge]; dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.linkAge);
*dList = dLists[dListOffset]; *dList = *(dLists + dListOffset);
return 0; return false;
} }
void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, SkelAnime* skelAnime, Vec3f* pos, void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, SkelAnime* skelAnime, Vec3f* pos,

View file

@ -261,7 +261,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) {
Matrix_MultVec3f(&sMultVec1, &vec1); Matrix_MultVec3f(&sMultVec1, &vec1);
Matrix_MultVec3f(&sMultVec2, &vec2); Matrix_MultVec3f(&sMultVec2, &vec2);
if (func_80090480(play, &this->collider, &this->boomerangInfo, &vec1, &vec2) != 0) { if (func_80090480(play, &this->collider, &this->boomerangInfo, &vec1, &vec2)) {
EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &vec1, &vec2); EffectBlure_AddVertex(Effect_GetByIndex(this->effectIndex), &vec1, &vec2);
} }

View file

@ -2667,7 +2667,7 @@ s32 func_808356E8(Player* this, PlayState* play) {
} }
void func_808357E8(Player* this, Gfx** dLists) { void func_808357E8(Player* this, Gfx** dLists) {
this->leftHandDLists = &dLists[gSaveContext.linkAge]; this->leftHandDLists = dLists + gSaveContext.linkAge;
} }
s32 func_80835800(Player* this, PlayState* play) { s32 func_80835800(Player* this, PlayState* play) {
@ -2754,7 +2754,7 @@ s32 func_80835B60(Player* this, PlayState* play) {
if (!(this->stateFlags1 & PLAYER_STATE1_25)) { if (!(this->stateFlags1 & PLAYER_STATE1_25)) {
func_80833638(this, func_80835C08); func_80833638(this, func_80835C08);
LinkAnimation_PlayOnce(play, &this->skelAnime2, &gPlayerAnim_0025F8); LinkAnimation_PlayOnce(play, &this->skelAnime2, &gPlayerAnim_0025F8);
func_808357E8(this, D_80125EF8); func_808357E8(this, gPlayerLeftHandBoomerangDLs);
func_8002F7DC(&this->actor, NA_SE_PL_CATCH_BOOMERANG); func_8002F7DC(&this->actor, NA_SE_PL_CATCH_BOOMERANG);
func_80832698(this, NA_SE_VO_LI_SWORD_N); func_80832698(this, NA_SE_VO_LI_SWORD_N);
return 1; return 1;
@ -13805,11 +13805,11 @@ void func_80851A50(PlayState* play, Player* this, CsCmdActorAction* arg2) {
this->interactRangeActor->parent = &this->actor; this->interactRangeActor->parent = &this->actor;
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
dLists = D_80125DE8; dLists = gPlayerLeftHandBgsDLs;
} else { } else {
dLists = D_80125E18; dLists = gPlayerLeftHandClosedDLs;
} }
this->leftHandDLists = &dLists[gSaveContext.linkAge]; this->leftHandDLists = dLists + gSaveContext.linkAge;
func_8002F7DC(&this->actor, sp2C->unk_00); func_8002F7DC(&this->actor, sp2C->unk_00);
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
@ -14119,7 +14119,7 @@ void func_80852648(PlayState* play, Player* this, CsCmdActorAction* arg2) {
this->heldItemActionParam = this->itemActionParam = PLAYER_AP_NONE; this->heldItemActionParam = this->itemActionParam = PLAYER_AP_NONE;
this->heldItemId = ITEM_NONE; this->heldItemId = ITEM_NONE;
this->modelGroup = this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_AP_NONE); this->modelGroup = this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_AP_NONE);
this->leftHandDLists = D_80125E08; this->leftHandDLists = gPlayerLeftHandOpenDLs;
Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER);
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
Inventory_DeleteEquipment(play, EQUIP_TYPE_SWORD); Inventory_DeleteEquipment(play, EQUIP_TYPE_SWORD);