En_Dragon (Deep Python) OK and documented. object_utubo documented (#771)

* EnDragon_Init OK

* func_80B5EDF0 OK

* func_80B5EAA0 OK

* EnDragon_Destroy OK

* EnDragon_Update OK

* func_80B60138 OK

* func_80B5EE3C OK

* func_80B5EF88 OK

* func_80B5F418 OK

* func_80B5ED90 OK

* func_80B5EB40 OK (commented out because data is not imported yet)

* Import data into C

* Uncomment func_80B5EB40

* func_80B5EFD0 OK

* func_80B5F3A4 OK

* func_80B5F888 OK

* func_80B5FCC0 OK

* Draw functions OK

* func_80B5FD68 OK

* func_80B5F508 OK

* func_80B5F8D8 OK

* Better match on func_80B5FD68

* Use generated reloc

* Remove undefined_syms for this actor

* Some minor cleanup

* Make the data like Anghelo said

* Document object_utubo

* Name a bunch of stuff

* Name some more stuff

* Some documentation around death

* Documentation for actions

* Name a bunch of junk

* Use regs instead of directly accessing gGameInfo

* Name the player position vars

* Update weekEventReg references

* Name and list out states

* Name timer

* Document extend stuff

* Finish documentation

* Respond to Anghelo's review

* Respond to hensldm's review

* The thing Anghelo suggested *actually* matches
This commit is contained in:
Tom Overton
2022-04-06 21:03:27 -04:00
committed by GitHub
parent 15dfaf0862
commit 50c5ab0fc7
9 changed files with 889 additions and 168 deletions
+49 -38
View File
@@ -1,42 +1,53 @@
<Root>
<!-- Assets for Deep Python -->
<File Name="object_utubo" Segment="6">
<Animation Name="object_utubo_Anim_00082C" Offset="0x82C" />
<DList Name="object_utubo_DL_0020B0" Offset="0x20B0" />
<DList Name="object_utubo_DL_002358" Offset="0x2358" />
<DList Name="object_utubo_DL_002440" Offset="0x2440" />
<DList Name="object_utubo_DL_002580" Offset="0x2580" />
<DList Name="object_utubo_DL_002738" Offset="0x2738" />
<DList Name="object_utubo_DL_0028A0" Offset="0x28A0" />
<DList Name="object_utubo_DL_002A08" Offset="0x2A08" />
<DList Name="object_utubo_DL_002B18" Offset="0x2B18" />
<DList Name="object_utubo_DL_002C28" Offset="0x2C28" />
<DList Name="object_utubo_DL_002D38" Offset="0x2D38" />
<Texture Name="object_utubo_TLUT_002E48" OutName="tlut_002E48" Format="rgba16" Width="4" Height="4" Offset="0x2E48" />
<Texture Name="object_utubo_TLUT_002E68" OutName="tlut_002E68" Format="rgba16" Width="4" Height="4" Offset="0x2E68" />
<Texture Name="object_utubo_TLUT_002E88" OutName="tlut_002E88" Format="rgba16" Width="4" Height="4" Offset="0x2E88" />
<Texture Name="object_utubo_Tex_002EA8" OutName="tex_002EA8" Format="ci4" Width="64" Height="64" Offset="0x2EA8" />
<Texture Name="object_utubo_Tex_0036A8" OutName="tex_0036A8" Format="rgba16" Width="32" Height="32" Offset="0x36A8" />
<Texture Name="object_utubo_Tex_003EA8" OutName="tex_003EA8" Format="ci4" Width="32" Height="32" Offset="0x3EA8" />
<Texture Name="object_utubo_Tex_0040A8" OutName="tex_0040A8" Format="ci4" Width="32" Height="32" Offset="0x40A8" />
<Limb Name="object_utubo_Standardlimb_0042A8" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_01" Offset="0x42A8" />
<Limb Name="object_utubo_Standardlimb_0042B4" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_02" Offset="0x42B4" />
<Limb Name="object_utubo_Standardlimb_0042C0" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_03" Offset="0x42C0" />
<Limb Name="object_utubo_Standardlimb_0042CC" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_04" Offset="0x42CC" />
<Limb Name="object_utubo_Standardlimb_0042D8" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_05" Offset="0x42D8" />
<Limb Name="object_utubo_Standardlimb_0042E4" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_06" Offset="0x42E4" />
<Limb Name="object_utubo_Standardlimb_0042F0" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_07" Offset="0x42F0" />
<Limb Name="object_utubo_Standardlimb_0042FC" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_08" Offset="0x42FC" />
<Limb Name="object_utubo_Standardlimb_004308" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_09" Offset="0x4308" />
<Limb Name="object_utubo_Standardlimb_004314" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0A" Offset="0x4314" />
<Limb Name="object_utubo_Standardlimb_004320" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0B" Offset="0x4320" />
<Limb Name="object_utubo_Standardlimb_00432C" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0C" Offset="0x432C" />
<Limb Name="object_utubo_Standardlimb_004338" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0D" Offset="0x4338" />
<Limb Name="object_utubo_Standardlimb_004344" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0E" Offset="0x4344" />
<Limb Name="object_utubo_Standardlimb_004350" Type="Standard" EnumName="OBJECT_UTUBO_LIMB_0F" Offset="0x4350" />
<Skeleton Name="object_utubo_Skel_004398" Type="Flex" LimbType="Standard" LimbNone="OBJECT_UTUBO_LIMB_NONE" LimbMax="OBJECT_UTUBO_LIMB_MAX" EnumName="object_utubo_Limbs" Offset="0x4398" />
<Animation Name="object_utubo_Anim_004518" Offset="0x4518" />
<Animation Name="object_utubo_Anim_004740" Offset="0x4740" />
<Animation Name="object_utubo_Anim_0048B8" Offset="0x48B8" />
<Animation Name="object_utubo_Anim_004ABC" Offset="0x4ABC" />
<Animation Name="gDeepPythonMultiDirectionalSwayAnim" Offset="0x82C" /> <!-- Unused -->
<!-- Deep Python Limb DisplayLists -->
<DList Name="gDeepPythonHeadDL" Offset="0x20B0" />
<DList Name="gDeepPythonJawDL" Offset="0x2358" />
<DList Name="gDeepPythonCollarDL" Offset="0x2440" />
<DList Name="gDeepPythonBodySegment1DL" Offset="0x2580" />
<DList Name="gDeepPythonBodySegment2DL" Offset="0x2738" />
<DList Name="gDeepPythonBodySegment3DL" Offset="0x28A0" />
<DList Name="gDeepPythonBodySegment4DL" Offset="0x2A08" />
<DList Name="gDeepPythonBodySegment7DL" Offset="0x2B18" />
<DList Name="gDeepPythonBodySegment6DL" Offset="0x2C28" />
<DList Name="gDeepPythonBodySegment5DL" Offset="0x2D38" />
<!-- Deep Python Textures -->
<Texture Name="gDeepPythonHeadAndCollarTLUT" OutName="deep_python_head_and_collar_tlut" Format="rgba16" Width="4" Height="4" Offset="0x2E48" />
<Texture Name="gDeepPythonBodySegment1FrontTLUT" OutName="deep_python_body_segment_1_front_tlut" Format="rgba16" Width="4" Height="4" Offset="0x2E68" />
<Texture Name="gDeepPythonBodyTLUT" OutName="deep_python_body_tlut" Format="rgba16" Width="4" Height="4" Offset="0x2E88" />
<Texture Name="gDeepPythonHeadAndCollarTex" OutName="deep_python_head_and_collar" Format="ci4" Width="64" Height="64" Offset="0x2EA8" />
<Texture Name="gDeepPythonEyeTex" OutName="deep_python_eye" Format="rgba16" Width="32" Height="32" Offset="0x36A8" />
<Texture Name="gDeepPythonBodySegment1FrontTex" OutName="deep_python_body_segment_1_front" Format="ci4" Width="32" Height="32" Offset="0x3EA8" />
<Texture Name="gDeepPythonBodyTex" OutName="deep_python_body" Format="ci4" Width="32" Height="32" Offset="0x40A8" />
<!-- Deep Python Limbs -->
<Limb Name="gDeepPythonRootLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_ROOT" Offset="0x42A8" />
<Limb Name="gDeepPythonMiddleBodyRootLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_MIDDLE_BODY_ROOT" Offset="0x42B4" />
<Limb Name="gDeepPythonBodySegment4Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_4" Offset="0x42C0" />
<Limb Name="gDeepPythonBodySegment5Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_5" Offset="0x42CC" />
<Limb Name="gDeepPythonBodySegment6Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_6" Offset="0x42D8" />
<Limb Name="gDeepPythonBodySegment7Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_7" Offset="0x42E4" />
<Limb Name="gDeepPythonBodySegment3Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_3" Offset="0x42F0" />
<Limb Name="gDeepPythonUpperBodyRootLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_UPPER_BODY_ROOT" Offset="0x42FC" />
<Limb Name="gDeepPythonBodySegment2Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_2" Offset="0x4308" />
<Limb Name="gDeepPythonBodySegment1Limb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_BODY_SEGMENT_1" Offset="0x4314" />
<Limb Name="gDeepPythonHeadAndCollarRootLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_HEAD_AND_COLLAR_ROOT" Offset="0x4320" />
<Limb Name="gDeepPythonCollarLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_COLLAR" Offset="0x432C" />
<Limb Name="gDeepPythonHeadLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_HEAD" Offset="0x4338" />
<Limb Name="gDeepPythonJawRootLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_JAW_ROOT" Offset="0x4344" />
<Limb Name="gDeepPythonJawLimb" Type="Standard" EnumName="DEEP_PYTHON_LIMB_JAW" Offset="0x4350" />
<!-- Deep Python Skeleton -->
<Skeleton Name="gDeepPythonSkel" Type="Flex" LimbType="Standard" LimbNone="DEEP_PYTHON_LIMB_NONE" LimbMax="DEEP_PYTHON_LIMB_MAX" EnumName="DeepPythonLimbs" Offset="0x4398" />
<!-- Deep Python Animations -->
<Animation Name="gDeepPythonUnusedSideSwayAnim" Offset="0x4518" /> <!-- Unused duplicate of gDeepPythonSmallSideSwayAnim -->
<Animation Name="gDeepPythonVerticalSwayAnim" Offset="0x4740" /> <!-- Referenced by En_Dragon, but never actually used in the final game. -->
<Animation Name="gDeepPythonSmallSideSwayAnim" Offset="0x48B8" /> <!-- Original name might be "utubo_wait" -->
<Animation Name="gDeepPythonLargeSideSwayAnim" Offset="0x4ABC" /> <!-- Original name might be "utubo_yoko" ("side-to-side") -->
</File>
</Root>
+1 -1
View File
@@ -1322,7 +1322,7 @@ struct GlobalContext {
/* 0x18760 */ DoorContext doorCtx;
/* 0x18768 */ void (*playerInit)(Player* player, struct GlobalContext* globalCtx, FlexSkeletonHeader* skelHeader);
/* 0x1876C */ void (*playerUpdate)(Player* player, struct GlobalContext* globalCtx, Input* input);
/* 0x18770 */ void* unk_18770; //! @TODO: Determine function prototype
/* 0x18770 */ void (*unk_18770)(struct GlobalContext* globalCtx, Player* player);
/* 0x18774 */ s32 (*startPlayerFishing)(struct GlobalContext* globalCtx);
/* 0x18778 */ s32 (*grabPlayer)(struct GlobalContext* globalCtx, Player* player);
/* 0x1877C */ s32 (*startPlayerCutscene)(struct GlobalContext* globalCtx, Player* player, s32 mode);
+1 -2
View File
@@ -4058,8 +4058,7 @@ beginseg
name "ovl_En_Dragon"
compress
include "build/src/overlays/actors/ovl_En_Dragon/z_en_dragon.o"
include "build/data/ovl_En_Dragon/ovl_En_Dragon.data.o"
include "build/data/ovl_En_Dragon/ovl_En_Dragon.reloc.o"
include "build/src/overlays/actors/ovl_En_Dragon/ovl_En_Dragon_reloc.o"
endseg
beginseg
@@ -1,7 +1,7 @@
/*
* File: z_bg_sinkai_kabe.c
* Overlay: ovl_Bg_Sinkai_Kabe
* Description: Large Rotating Green Rupee
* Description: Manages the Deep Pythons and Seahorse in Pinnacle Rock
*/
#include "z_bg_sinkai_kabe.h"
File diff suppressed because it is too large Load Diff
@@ -2,16 +2,53 @@
#define Z_EN_DRAGON_H
#include "global.h"
#include "objects/object_utubo/object_utubo.h"
#define EN_DRAGON_GET_PYTHON_INDEX(thisx) (((thisx)->params >> 7) & 0x1F)
struct EnDragon;
typedef void (*EnDragonActionFunc)(struct EnDragon*, GlobalContext*);
typedef struct EnDragon {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x104];
/* 0x0248 */ EnDragonActionFunc actionFunc;
/* 0x024C */ char unk_24C[0x2B0];
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[DEEP_PYTHON_LIMB_MAX];
/* 0x1E8 */ Vec3s morphTable[DEEP_PYTHON_LIMB_MAX];
/* 0x248 */ EnDragonActionFunc actionFunc;
/* 0x24C */ s32 animationIndex;
/* 0x250 */ s32 pythonIndex;
/* 0x254 */ Vec3f jawPos;
/* 0x260 */ Vec3f burrowEntrancePos; // Vertically and horizontally centered on the burrow opening. Set by Bg_Sinkai_Kabe
/* 0x26C */ Vec3f playerGrabPosition;
/* 0x278 */ Vec3f cameraEye;
/* 0x278 */ Vec3f cameraAt;
/* 0x290 */ Vec3f playerGrabPositionTemp;
/* 0x29C */ Vec3f focusPos;
/* 0x2A8 */ s16 jawZRotation;
/* 0x2AA */ s16 jawYRotation; // Never initialized by the actor
/* 0x2AC */ s16 jawXRotation; // Never initialized by the actor
/* 0x2AE */ s16 retreatTimer; // If the Deep Python is extended and this timer reaches 0, it is forced to retreat back to its burrow
/* 0x2B0 */ s16 behindJawRetreatTimer; // If the player is behind the jaw, then this will count up. When it reaches 60, the Deep Python will retreat
/* 0x2B2 */ s16 largeSwayWaitTimer; // If the player is in front of the jaw, it won't play or replay the large sway animation unless this is zero.
/* 0x2B4 */ s16 timer;
/* 0x2B6 */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
/* 0x2B8 */ s16 hasGrabbedPlayer;
/* 0x2BA */ s16 action;
/* 0x2BC */ UNK_TYPE1 unk_2BC[0x2];
/* 0x2BE */ s16 state;
/* 0x2C0 */ s16 grabCutsceneIndex;
/* 0x2C2 */ s16 deathCutsceneIndex;
/* 0x2C4 */ UNK_TYPE1 unk_2C4[0x4];
/* 0x2C8 */ s16 cameraId;
/* 0x2CA */ s16 grabTimer; // Counts up from the time a grab starts until the time the actor begins attacking
/* 0x2CC */ s16 unk_2CC; // Initialized, but never used
/* 0x2CE */ UNK_TYPE1 unk_2CE[0x2];
/* 0x2D0 */ f32 endFrame;
/* 0x2D4 */ f32 scale;
/* 0x2D8 */ UNK_TYPE1 unk_2D8[0x4];
/* 0x2DC */ ColliderJntSph collider;
/* 0x2FC */ ColliderJntSphElement colliderElements[8];
} EnDragon; // size = 0x4FC
extern const ActorInit En_Dragon_InitVars;
+17 -17
View File
@@ -14130,24 +14130,24 @@
0x80B5E1D8:("func_80B5E1D8",),
0x80B5E890:("EnDragon_Init",),
0x80B5EA74:("EnDragon_Destroy",),
0x80B5EAA0:("func_80B5EAA0",),
0x80B5EB40:("func_80B5EB40",),
0x80B5ED90:("func_80B5ED90",),
0x80B5EDF0:("func_80B5EDF0",),
0x80B5EE3C:("func_80B5EE3C",),
0x80B5EF88:("func_80B5EF88",),
0x80B5EFD0:("func_80B5EFD0",),
0x80B5F3A4:("func_80B5F3A4",),
0x80B5F418:("func_80B5F418",),
0x80B5F508:("func_80B5F508",),
0x80B5F888:("func_80B5F888",),
0x80B5F8D8:("func_80B5F8D8",),
0x80B5FCC0:("func_80B5FCC0",),
0x80B5FD68:("func_80B5FD68",),
0x80B60138:("func_80B60138",),
0x80B5EAA0:("EnDragon_ChangeAnimation",),
0x80B5EB40:("EnDragon_SpawnBubbles",),
0x80B5ED90:("EnDragon_RetreatOnceTimerEnds",),
0x80B5EDF0:("EnDragon_SetupRetreatOrIdle",),
0x80B5EE3C:("EnDragon_RetreatOrIdle",),
0x80B5EF88:("EnDragon_SetupExtend",),
0x80B5EFD0:("EnDragon_Extend",),
0x80B5F3A4:("EnDragon_CameraSetAtEye",),
0x80B5F418:("EnDragon_SetupGrab",),
0x80B5F508:("EnDragon_Grab",),
0x80B5F888:("EnDragon_SetupAttack",),
0x80B5F8D8:("EnDragon_Attack",),
0x80B5FCC0:("EnDragon_SetupDead",),
0x80B5FD68:("EnDragon_Dead",),
0x80B60138:("EnDragon_UpdateDamage",),
0x80B6031C:("EnDragon_Update",),
0x80B6043C:("func_80B6043C",),
0x80B60494:("func_80B60494",),
0x80B6043C:("EnDragon_OverrideLimbDraw",),
0x80B60494:("EnDragon_PostLimbDraw",),
0x80B60564:("EnDragon_Draw",),
0x80B60AD0:("ObjDora_Init",),
0x80B60C70:("ObjDora_Destroy",),
+4 -9
View File
@@ -14800,15 +14800,10 @@
0x80B60754:("D_80B60754","UNK_TYPE1","",0x1),
0x80B60758:("D_80B60758","UNK_TYPE1","",0x1),
0x80B60764:("D_80B60764","UNK_TYPE1","",0x1),
0x80B60770:("D_80B60770","f32","",0x4),
0x80B60774:("D_80B60774","f32","",0x4),
0x80B60778:("D_80B60778","f32","",0x4),
0x80B6077C:("D_80B6077C","UNK_TYPE1","",0x1),
0x80B60780:("D_80B60780","f32","",0x4),
0x80B60788:("D_80B60788","UNK_TYPE1","",0x1),
0x80B60790:("D_80B60790","f32","",0x4),
0x80B607E8:("D_80B607E8","UNK_TYPE1","",0x1),
0x80B607F0:("D_80B607F0","f32","",0x4),
0x80B60770:("D_80B60770","Vec3f","",0xC),
0x80B6077C:("D_80B6077C","Vec3f","",0xC),
0x80B60788:("D_80B60788","Vec3f","[8]",0x60),
0x80B607E8:("D_80B607E8","Vec3f","[8]",0x60),
0x80B60848:("D_80B60848","UNK_TYPE1","",0x1),
0x80B60858:("D_80B60858","UNK_TYPE1","",0x1),
0x80B60878:("D_80B60878","UNK_TYPE4","",0x4),
-5
View File
@@ -1136,11 +1136,6 @@ D_0600D640 = 0x0600D640;
D_06002950 = 0x06002950;
// ovl_En_Dragon
D_06004398 = 0x06004398;
D_060048B8 = 0x060048B8;
// ovl_En_Ds2n
D_06008038 = 0x06008038;