Document object_dnq (Deku Princess) (#1130)

* Document object_dnq (Deku Princess)

* Respond to reviews
This commit is contained in:
Tom Overton
2022-10-18 04:25:59 -07:00
committed by GitHub
parent 8a714af8d0
commit 1d1b6986af
5 changed files with 224 additions and 167 deletions
+96 -84
View File
@@ -1,88 +1,100 @@
<Root>
<!-- Assets for the Deku Princess. -->
<File Name="object_dnq" Segment="6">
<Animation Name="object_dnq_Anim_0007D8" Offset="0x7D8" />
<Animation Name="object_dnq_Anim_00125C" Offset="0x125C" />
<Animation Name="object_dnq_Anim_0017F8" Offset="0x17F8" />
<Animation Name="object_dnq_Anim_001C1C" Offset="0x1C1C" />
<Animation Name="object_dnq_Anim_0021DC" Offset="0x21DC" />
<Animation Name="object_dnq_Anim_0026B8" Offset="0x26B8" />
<Animation Name="object_dnq_Anim_004D08" Offset="0x4D08" />
<Animation Name="object_dnq_Anim_0057AC" Offset="0x57AC" />
<Animation Name="object_dnq_Anim_00625C" Offset="0x625C" />
<Animation Name="object_dnq_Anim_00674C" Offset="0x674C" />
<Animation Name="object_dnq_Anim_006B74" Offset="0x6B74" />
<Animation Name="object_dnq_Anim_0071F4" Offset="0x71F4" />
<Animation Name="object_dnq_Anim_007960" Offset="0x7960" />
<Animation Name="object_dnq_Anim_008588" Offset="0x8588" />
<Animation Name="object_dnq_Anim_00923C" Offset="0x923C" />
<Animation Name="object_dnq_Anim_009AA0" Offset="0x9AA0" />
<Animation Name="object_dnq_Anim_00A900" Offset="0xA900" />
<Animation Name="object_dnq_Anim_00AEB8" Offset="0xAEB8" />
<Animation Name="object_dnq_Anim_00B324" Offset="0xB324" />
<Animation Name="object_dnq_Anim_00B754" Offset="0xB754" />
<Animation Name="object_dnq_Anim_00BAD8" Offset="0xBAD8" />
<DList Name="object_dnq_DL_00D670" Offset="0xD670" />
<DList Name="object_dnq_DL_00D978" Offset="0xD978" />
<DList Name="object_dnq_DL_00DA08" Offset="0xDA08" />
<DList Name="object_dnq_DL_00DAA0" Offset="0xDAA0" />
<DList Name="object_dnq_DL_00DB38" Offset="0xDB38" />
<DList Name="object_dnq_DL_00DBD0" Offset="0xDBD0" />
<DList Name="object_dnq_DL_00DC68" Offset="0xDC68" />
<DList Name="object_dnq_DL_00DD00" Offset="0xDD00" />
<DList Name="object_dnq_DL_00DD98" Offset="0xDD98" />
<DList Name="object_dnq_DL_00DE30" Offset="0xDE30" />
<DList Name="object_dnq_DL_00DEC8" Offset="0xDEC8" />
<DList Name="object_dnq_DL_00E018" Offset="0xE018" />
<DList Name="object_dnq_DL_00E1C8" Offset="0xE1C8" />
<DList Name="object_dnq_DL_00E260" Offset="0xE260" />
<DList Name="object_dnq_DL_00E2F8" Offset="0xE2F8" />
<DList Name="object_dnq_DL_00E340" Offset="0xE340" />
<DList Name="object_dnq_DL_00E410" Offset="0xE410" />
<DList Name="object_dnq_DL_00E530" Offset="0xE530" />
<DList Name="object_dnq_DL_00E650" Offset="0xE650" />
<DList Name="object_dnq_DL_00E768" Offset="0xE768" />
<DList Name="object_dnq_DL_00E888" Offset="0xE888" />
<DList Name="object_dnq_DL_00E9A8" Offset="0xE9A8" />
<DList Name="object_dnq_DL_00EAC0" Offset="0xEAC0" />
<DList Name="object_dnq_DL_00EBD8" Offset="0xEBD8" />
<Texture Name="object_dnq_Tex_00ECD0" OutName="tex_00ECD0" Format="rgba16" Width="16" Height="32" Offset="0xECD0" />
<Texture Name="object_dnq_Tex_00F0D0" OutName="tex_00F0D0" Format="rgba16" Width="16" Height="32" Offset="0xF0D0" />
<Texture Name="object_dnq_Tex_00F4D0" OutName="tex_00F4D0" Format="rgba16" Width="4" Height="16" Offset="0xF4D0" />
<Texture Name="object_dnq_Tex_00F550" OutName="tex_00F550" Format="rgba16" Width="8" Height="8" Offset="0xF550" />
<Texture Name="object_dnq_Tex_00F5D0" OutName="tex_00F5D0" Format="rgba16" Width="16" Height="16" Offset="0xF5D0" />
<Texture Name="object_dnq_Tex_00F7D0" OutName="tex_00F7D0" Format="rgba16" Width="32" Height="32" Offset="0xF7D0" />
<Texture Name="object_dnq_Tex_00FFD0" OutName="tex_00FFD0" Format="rgba16" Width="16" Height="32" Offset="0xFFD0" />
<Texture Name="object_dnq_Tex_0103D0" OutName="tex_0103D0" Format="rgba16" Width="16" Height="16" Offset="0x103D0" />
<Texture Name="object_dnq_Tex_0105D0" OutName="tex_0105D0" Format="rgba16" Width="16" Height="16" Offset="0x105D0" />
<Texture Name="object_dnq_Tex_0107D0" OutName="tex_0107D0" Format="rgba16" Width="16" Height="16" Offset="0x107D0" />
<Texture Name="object_dnq_Tex_0109D0" OutName="tex_0109D0" Format="rgba16" Width="16" Height="16" Offset="0x109D0" />
<Limb Name="object_dnq_Standardlimb_010BD0" Type="Standard" EnumName="OBJECT_DNQ_LIMB_01" Offset="0x10BD0" />
<Limb Name="object_dnq_Standardlimb_010BDC" Type="Standard" EnumName="OBJECT_DNQ_LIMB_02" Offset="0x10BDC" />
<Limb Name="object_dnq_Standardlimb_010BE8" Type="Standard" EnumName="OBJECT_DNQ_LIMB_03" Offset="0x10BE8" />
<Limb Name="object_dnq_Standardlimb_010BF4" Type="Standard" EnumName="OBJECT_DNQ_LIMB_04" Offset="0x10BF4" />
<Limb Name="object_dnq_Standardlimb_010C00" Type="Standard" EnumName="OBJECT_DNQ_LIMB_05" Offset="0x10C00" />
<Limb Name="object_dnq_Standardlimb_010C0C" Type="Standard" EnumName="OBJECT_DNQ_LIMB_06" Offset="0x10C0C" />
<Limb Name="object_dnq_Standardlimb_010C18" Type="Standard" EnumName="OBJECT_DNQ_LIMB_07" Offset="0x10C18" />
<Limb Name="object_dnq_Standardlimb_010C24" Type="Standard" EnumName="OBJECT_DNQ_LIMB_08" Offset="0x10C24" />
<Limb Name="object_dnq_Standardlimb_010C30" Type="Standard" EnumName="OBJECT_DNQ_LIMB_09" Offset="0x10C30" />
<Limb Name="object_dnq_Standardlimb_010C3C" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0A" Offset="0x10C3C" />
<Limb Name="object_dnq_Standardlimb_010C48" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0B" Offset="0x10C48" />
<Limb Name="object_dnq_Standardlimb_010C54" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0C" Offset="0x10C54" />
<Limb Name="object_dnq_Standardlimb_010C60" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0D" Offset="0x10C60" />
<Limb Name="object_dnq_Standardlimb_010C6C" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0E" Offset="0x10C6C" />
<Limb Name="object_dnq_Standardlimb_010C78" Type="Standard" EnumName="OBJECT_DNQ_LIMB_0F" Offset="0x10C78" />
<Limb Name="object_dnq_Standardlimb_010C84" Type="Standard" EnumName="OBJECT_DNQ_LIMB_10" Offset="0x10C84" />
<Limb Name="object_dnq_Standardlimb_010C90" Type="Standard" EnumName="OBJECT_DNQ_LIMB_11" Offset="0x10C90" />
<Limb Name="object_dnq_Standardlimb_010C9C" Type="Standard" EnumName="OBJECT_DNQ_LIMB_12" Offset="0x10C9C" />
<Limb Name="object_dnq_Standardlimb_010CA8" Type="Standard" EnumName="OBJECT_DNQ_LIMB_13" Offset="0x10CA8" />
<Limb Name="object_dnq_Standardlimb_010CB4" Type="Standard" EnumName="OBJECT_DNQ_LIMB_14" Offset="0x10CB4" />
<Limb Name="object_dnq_Standardlimb_010CC0" Type="Standard" EnumName="OBJECT_DNQ_LIMB_15" Offset="0x10CC0" />
<Limb Name="object_dnq_Standardlimb_010CCC" Type="Standard" EnumName="OBJECT_DNQ_LIMB_16" Offset="0x10CCC" />
<Limb Name="object_dnq_Standardlimb_010CD8" Type="Standard" EnumName="OBJECT_DNQ_LIMB_17" Offset="0x10CD8" />
<Limb Name="object_dnq_Standardlimb_010CE4" Type="Standard" EnumName="OBJECT_DNQ_LIMB_18" Offset="0x10CE4" />
<Limb Name="object_dnq_Standardlimb_010CF0" Type="Standard" EnumName="OBJECT_DNQ_LIMB_19" Offset="0x10CF0" />
<Skeleton Name="object_dnq_Skel_010D60" Type="Flex" LimbType="Standard" LimbNone="OBJECT_DNQ_LIMB_NONE" LimbMax="OBJECT_DNQ_LIMB_MAX" EnumName="ObjectDnpLimb" Offset="0x10D60" />
<Animation Name="object_dnq_Anim_0115B8" Offset="0x115B8" />
<Animation Name="object_dnq_Anim_012428" Offset="0x12428" />
<!-- Deku Princess Animations -->
<Animation Name="gDekuPrincessJumpKickAnim" Offset="0x7D8" /> <!-- Original name is "dnq_atack" -->
<Animation Name="gDekuPrincessJumpAnim" Offset="0x125C" /> <!-- Original name is "dnq_attack1" -->
<Animation Name="gDekuPrincessBounceStartAnim" Offset="0x17F8" /> <!-- Original name is "dnq_attack2" -->
<Animation Name="gDekuPrincessBounceLoopAnim" Offset="0x1C1C" /> <!-- Original name is "dnq_attack2_loop" -->
<Animation Name="gDekuPrincessHurryAnim" Offset="0x21DC" /> <!-- Original name is "dnq_awate" ("to hurry; to rush; to hasten") -->
<Animation Name="gDekuPrincessHurryEndAnim" Offset="0x26B8" /> <!-- Original name is "dnq_awateTOwait" -->
<Animation Name="gDekuPrincessScoldAnim" Offset="0x4D08" /> <!-- Original name is "dnq_baka" ("idiot; moron; fool") -->
<Animation Name="gDekuPrincessGlareStartAnim" Offset="0x57AC" /> <!-- Original name is "dnq_gekido" ("rage; fury") -->
<Animation Name="gDekuPrincessGlareLoopAnim" Offset="0x625C" /> <!-- Origianl name is "dnq_gekido_loop" -->
<Animation Name="gDekuPrincessThinkLoopAnim" Offset="0x674C" /> <!-- Original name is "dnq_hatena" ("question") -->
<Animation Name="gDekuPrincessArmsTogetherLoopAnim" Offset="0x6B74" /> <!-- Original name is "dnq_ho" -->
<Animation Name="gDekuPrincessLaughStartAnim" Offset="0x71F4" /> <!-- Original name is "dnq_hoTOhohoho" -->
<Animation Name="gDekuPrincessLaughLoopAnim" Offset="0x7960" /> <!-- Original name is "dnq_hohoho" -->
<Animation Name="gDekuPrincessTurnAroundAnim" Offset="0x8588" /> <!-- Original name is "dnq_maji" (from her Japanese dialogue, like "really?!" or "seriously?!")-->
<Animation Name="gDekuPrincessAngryStartAnim" Offset="0x923C" /> <!-- Original name is "dnq_okoru" ("to get angry; to get mad") -->
<Animation Name="gDekuPrincessAngryLoopAnim" Offset="0x9AA0" /> <!-- Original name is "dnq_okoru_loop" -->
<Animation Name="gDekuPrincessBowAnim" Offset="0xA900" /> <!-- Original name is "dnq_orei" ("bow") -->
<Animation Name="gDekuPrincessRunAnim" Offset="0xAEB8" /> <!-- Original name is "dnq_run" -->
<Animation Name="gDekuPrincessIdleAnim" Offset="0xB324" /> <!-- Original name is "dnq_wait" -->
<Animation Name="gDekuPrincessThinkStartAnim" Offset="0xB754" /> <!-- Original name is "dnq_waitTOhatena" -->
<Animation Name="gDekuPrincessArmsTogetherStartAnim" Offset="0xBAD8" /> <!-- Original name is "dnq_waitTOho" -->
<!-- Deku Princess Limb DisplayLists -->
<DList Name="gDekuPrincessHeadDL" Offset="0xD670" />
<DList Name="gDekuPrincessEyesDL" Offset="0xD978" />
<DList Name="gDekuPrincessHair9DL" Offset="0xDA08" />
<DList Name="gDekuPrincessHair8DL" Offset="0xDAA0" />
<DList Name="gDekuPrincessHair7DL" Offset="0xDB38" />
<DList Name="gDekuPrincessHair6DL" Offset="0xDBD0" />
<DList Name="gDekuPrincessHair5DL" Offset="0xDC68" />
<DList Name="gDekuPrincessHair4DL" Offset="0xDD00" />
<DList Name="gDekuPrincessHair3DL" Offset="0xDD98" />
<DList Name="gDekuPrincessHair2DL" Offset="0xDE30" />
<DList Name="gDekuPrincessHair1DL" Offset="0xDEC8" />
<DList Name="gDekuPrincessSnoutDL" Offset="0xE018" />
<DList Name="gDekuPrincessRightEarringDL" Offset="0xE1C8" />
<DList Name="gDekuPrincessLeftEarringDL" Offset="0xE260" />
<DList Name="gDekuPrincessNeckDL" Offset="0xE2F8" /> <!-- Renders a single triangle instead of a normal-looking limb -->
<DList Name="gDekuPrincessTorsoDL" Offset="0xE340" />
<DList Name="gDekuPrincessRightSleeveEndDL" Offset="0xE410" />
<DList Name="gDekuPrincessRightForearmDL" Offset="0xE530" />
<DList Name="gDekuPrincessRightUpperArmDL" Offset="0xE650" />
<DList Name="gDekuPrincessLeftSleeveEndDL" Offset="0xE768" />
<DList Name="gDekuPrincessLeftForearmDL" Offset="0xE888" />
<DList Name="gDekuPrincessLeftUpperArmDL" Offset="0xE9A8" />
<DList Name="gDekuPrincessDressDL" Offset="0xEAC0" />
<DList Name="gDekuPrincessDressTrainDL" Offset="0xEBD8" />
<!-- Deku Princess Textures -->
<Texture Name="gDekuPrincessPetalTex" OutName="deku_princess_petal" Format="rgba16" Width="16" Height="32" Offset="0xECD0" />
<Texture Name="gDekuPrincessHairLeafTex" OutName="deku_princess_hair_leaf" Format="rgba16" Width="16" Height="32" Offset="0xF0D0" />
<Texture Name="gDekuPrincessHeadTex" OutName="deku_princess_head" Format="rgba16" Width="4" Height="16" Offset="0xF4D0" />
<Texture Name="gDekuPrincessMouthTex" OutName="deku_princess_mouth" Format="rgba16" Width="8" Height="8" Offset="0xF550" />
<Texture Name="gDekuPrincessFaceTex" OutName="deku_princess_face" Format="rgba16" Width="16" Height="16" Offset="0xF5D0" />
<Texture Name="gDekuPrincessDressTex" OutName="deku_princess_dress" Format="rgba16" Width="32" Height="32" Offset="0xF7D0" />
<Texture Name="gDekuPrincessSleeveTex" OutName="deku_princess_sleeve" Format="rgba16" Width="16" Height="32" Offset="0xFFD0" />
<Texture Name="gDekuPrincessEyeOpenTex" OutName="deku_princess_eye_open" Format="rgba16" Width="16" Height="16" Offset="0x103D0" />
<Texture Name="gDekuPrincessEyeHalfTex" OutName="deku_princess_eye_half" Format="rgba16" Width="16" Height="16" Offset="0x105D0" />
<Texture Name="gDekuPrincessEyeClosedTex" OutName="deku_princess_eye_closed" Format="rgba16" Width="16" Height="16" Offset="0x107D0" />
<Texture Name="gDekuPrincessEyeAngryTex" OutName="deku_princess_eye_angry" Format="rgba16" Width="16" Height="16" Offset="0x109D0" />
<!-- Deku Princess Limbs -->
<Limb Name="gDekuPrincessRootLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_ROOT" Offset="0x10BD0" />
<Limb Name="gDekuPrincessDressLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_DRESS" Offset="0x10BDC" />
<Limb Name="gDekuPrincessDressTrainLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_DRESS_TRAIN" Offset="0x10BE8" />
<Limb Name="gDekuPrincessTorsoLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_TORSO" Offset="0x10BF4" />
<Limb Name="gDekuPrincessLeftUpperArmLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_LEFT_UPPER_ARM" Offset="0x10C00" />
<Limb Name="gDekuPrincessLeftForearmLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_LEFT_FOREARM" Offset="0x10C0C" />
<Limb Name="gDekuPrincessLeftSleeveEndLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_LEFT_SLEEVE_END" Offset="0x10C18" />
<Limb Name="gDekuPrincessRightUpperArmLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_RIGHT_UPPER_ARM" Offset="0x10C24" />
<Limb Name="gDekuPrincessRightForearmLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_RIGHT_FOREARM" Offset="0x10C30" />
<Limb Name="gDekuPrincessRightSleeveEndLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_RIGHT_SLEEVE_END" Offset="0x10C3C" />
<Limb Name="gDekuPrincessNeckLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_NECK" Offset="0x10C48" />
<Limb Name="gDekuPrincessHeadLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HEAD" Offset="0x10C54" />
<Limb Name="gDekuPrincessLeftEarringLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_LEFT_EARRING" Offset="0x10C60" />
<Limb Name="gDekuPrincessRightEarringLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_RIGHT_EARRING" Offset="0x10C6C" />
<Limb Name="gDekuPrincessSnoutLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_SNOUT" Offset="0x10C78" />
<Limb Name="gDekuPrincessHair1Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_1" Offset="0x10C84" />
<Limb Name="gDekuPrincessHair2Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_2" Offset="0x10C90" />
<Limb Name="gDekuPrincessHair3Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_3" Offset="0x10C9C" />
<Limb Name="gDekuPrincessHair4Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_4" Offset="0x10CA8" />
<Limb Name="gDekuPrincessHair5Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_5" Offset="0x10CB4" />
<Limb Name="gDekuPrincessHair6Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_6" Offset="0x10CC0" />
<Limb Name="gDekuPrincessHair7Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_7" Offset="0x10CCC" />
<Limb Name="gDekuPrincessHair8Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_8" Offset="0x10CD8" />
<Limb Name="gDekuPrincessHair9Limb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_HAIR_9" Offset="0x10CE4" />
<Limb Name="gDekuPrincessEyesLimb" Type="Standard" EnumName="DEKU_PRINCESS_LIMB_EYES" Offset="0x10CF0" />
<!-- Deku Princess Skeleton -->
<Skeleton Name="gDekuPrincessSkel" Type="Flex" LimbType="Standard" LimbNone="DEKU_PRINCESS_LIMB_NONE" LimbMax="DEKU_PRINCESS_LIMB_MAX" EnumName="DekuPrincessLimb" Offset="0x10D60" />
<!-- Deku Princess Animations -->
<Animation Name="gDekuPrincessWalkAnim" Offset="0x115B8" /> <!-- Original name is "dnq_walk" -->
<Animation Name="gDekuPrincessGreetingAnim" Offset="0x12428" /> <!-- Original name is "dnq_yorosiku" (probably short for "pleased to meet you") -->
</File>
</Root>
+113 -69
View File
@@ -8,7 +8,6 @@
*/
#include "z_en_dnp.h"
#include "objects/object_dnq/object_dnq.h"
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10)
@@ -25,6 +24,14 @@ void func_80B3D338(EnDnp* this, PlayState* play);
void func_80B3D3F8(EnDnp* this, PlayState* play);
void func_80B3D558(EnDnp* this, PlayState* play);
typedef enum {
/* 0 */ EN_DNP_EYE_OPEN,
/* 1 */ EN_DNP_EYE_HALF,
/* 2 */ EN_DNP_EYE_CLOSED,
/* 3 */ EN_DNP_EYE_ANGRY,
/* 4 */ EN_DNP_EYE_MAX,
} EnDnpEyeIndex;
ActorInit En_Dnp_InitVars = {
ACTOR_EN_DNP,
ACTORCAT_NPC,
@@ -59,33 +66,63 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
typedef enum {
/* -1 */ EN_DNP_ANIM_NONE = -1,
/* 0 */ EN_DNP_ANIM_JUMP_KICK, // Can be triggered by a cutscene, but no cutscene in the final game does so
/* 1 */ EN_DNP_ANIM_HURRY,
/* 2 */ EN_DNP_ANIM_CUTSCENE_HURRY,
/* 3 */ EN_DNP_ANIM_HURRY_END,
/* 4 */ EN_DNP_ANIM_SCOLD, // Unused
/* 5 */ EN_DNP_ANIM_LAUGH_START,
/* 6 */ EN_DNP_ANIM_LAUGH_LOOP,
/* 7 */ EN_DNP_ANIM_TURN_AROUND,
/* 8 */ EN_DNP_ANIM_BOW,
/* 9 */ EN_DNP_ANIM_RUN, // Unused
/* 10 */ EN_DNP_ANIM_THINK_START,
/* 11 */ EN_DNP_ANIM_THINK_LOOP,
/* 12 */ EN_DNP_ANIM_ARMS_TOGETHER_START,
/* 13 */ EN_DNP_ANIM_ARMS_TOGETHER_LOOP,
/* 14 */ EN_DNP_ANIM_GREETING,
/* 15 */ EN_DNP_ANIM_IDLE,
/* 16 */ EN_DNP_ANIM_CUTSCENE_IDLE,
/* 17 */ EN_DNP_ANIM_UNUSED_WALK, // Unused
/* 18 */ EN_DNP_ANIM_WALK, // Can be triggered by a cutscene, but no cutscene in the final game does so
/* 19 */ EN_DNP_ANIM_ANGRY_START,
/* 20 */ EN_DNP_ANIM_ANGRY_LOOP,
/* 21 */ EN_DNP_ANIM_JUMP,
/* 22 */ EN_DNP_ANIM_BOUNCE_START,
/* 23 */ EN_DNP_ANIM_BOUNCE_LOOP,
/* 24 */ EN_DNP_ANIM_GLARE_START,
/* 25 */ EN_DNP_ANIM_GLARE_LOOP
} EnDnpAnimation;
static AnimationInfoS sAnimationInfo[] = {
{ &object_dnq_Anim_0007D8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_0021DC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_dnq_Anim_0021DC, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_0026B8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_004D08, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_0071F4, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_007960, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_008588, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &object_dnq_Anim_00A900, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_00AEB8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_00B754, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_00674C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_00BAD8, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_006B74, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_012428, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_00B324, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_dnq_Anim_00B324, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_0115B8, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_0115B8, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &object_dnq_Anim_00923C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_009AA0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_00125C, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &object_dnq_Anim_0017F8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &object_dnq_Anim_001C1C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &object_dnq_Anim_0057AC, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &object_dnq_Anim_00625C, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessJumpKickAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gDekuPrincessHurryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessHurryEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessScoldAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessLaughStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessLaughLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessTurnAroundAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gDekuPrincessBowAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessRunAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessThinkStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessThinkLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessArmsTogetherStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessArmsTogetherLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessGreetingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gDekuPrincessIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
{ &gDekuPrincessAngryStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessAngryLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessJumpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -4 },
{ &gDekuPrincessBounceStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gDekuPrincessBounceLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
{ &gDekuPrincessGlareStartAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 },
{ &gDekuPrincessGlareLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
static s32 D_80B3DE58[] = {
@@ -93,38 +130,38 @@ static s32 D_80B3DE58[] = {
};
s32 func_80B3CA20(EnDnp* this) {
if ((this->unk_340 == 2) || (this->unk_340 == 9)) {
if ((this->animIndex == EN_DNP_ANIM_CUTSCENE_HURRY) || (this->animIndex == EN_DNP_ANIM_RUN)) {
if (Animation_OnFrame(&this->skelAnime, 1.0f) || Animation_OnFrame(&this->skelAnime, 5.0f) ||
Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 13.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_TURN);
}
} else if ((this->unk_340 == 24) || (this->unk_340 == 7)) {
} else if ((this->animIndex == EN_DNP_ANIM_GLARE_START) || (this->animIndex == EN_DNP_ANIM_TURN_AROUND)) {
if (Animation_OnFrame(&this->skelAnime, 1.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_TURN);
}
} else if (this->unk_340 == 14) {
} else if (this->animIndex == EN_DNP_ANIM_GREETING) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET);
}
if (Animation_OnFrame(&this->skelAnime, 22.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
}
} else if (this->unk_340 == 8) {
} else if (this->animIndex == EN_DNP_ANIM_BOW) {
if (Animation_OnFrame(&this->skelAnime, 9.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET);
}
if (Animation_OnFrame(&this->skelAnime, 18.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_GREET2);
}
} else if ((this->unk_340 == 17) && (this->unk_340 == 18)) {
} else if ((this->animIndex == EN_DNP_ANIM_UNUSED_WALK) && (this->animIndex == EN_DNP_ANIM_WALK)) {
if (Animation_OnFrame(&this->skelAnime, 7.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
} else if (this->unk_340 == 21) {
} else if (this->animIndex == EN_DNP_ANIM_JUMP) {
if (Animation_OnFrame(&this->skelAnime, 17.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
} else if (this->unk_340 == 23) {
} else if (this->animIndex == EN_DNP_ANIM_BOUNCE_LOOP) {
if (Animation_OnFrame(&this->skelAnime, 3.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKUHIME_WALK);
}
@@ -133,12 +170,12 @@ s32 func_80B3CA20(EnDnp* this) {
return 0;
}
s32 func_80B3CC38(EnDnp* this, s32 arg1) {
s32 EnDnp_ChangeAnim(EnDnp* this, s32 animIndex) {
s32 ret = false;
if (arg1 != this->unk_340) {
this->unk_340 = arg1;
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, arg1);
if (animIndex != this->animIndex) {
this->animIndex = animIndex;
ret = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
}
return ret;
@@ -154,11 +191,11 @@ void func_80B3CC80(EnDnp* this, PlayState* play) {
}
void func_80B3CD1C(EnDnp* this) {
if ((this->unk_322 & 0x80) && (DECR(this->unk_334) == 0)) {
this->unk_336++;
if (this->unk_336 >= 4) {
this->unk_334 = Rand_S16Offset(30, 30);
this->unk_336 = 0;
if ((this->unk_322 & 0x80) && (DECR(this->blinkTimer) == 0)) {
this->eyeIndex++;
if (this->eyeIndex >= EN_DNP_EYE_MAX) {
this->blinkTimer = Rand_S16Offset(30, 30);
this->eyeIndex = EN_DNP_EYE_OPEN;
}
}
}
@@ -244,8 +281,12 @@ s32 func_80B3D044(EnDnp* this, PlayState* play) {
}
void func_80B3D11C(EnDnp* this, PlayState* play) {
static s32 D_80B3DE74[] = {
0, 16, 14, 10, 18, 12, 5, 7, 2, 19, 21, 22, 24, 8,
static s32 sCsAnimations[] = {
EN_DNP_ANIM_JUMP_KICK, EN_DNP_ANIM_CUTSCENE_IDLE, EN_DNP_ANIM_GREETING,
EN_DNP_ANIM_THINK_START, EN_DNP_ANIM_WALK, EN_DNP_ANIM_ARMS_TOGETHER_START,
EN_DNP_ANIM_LAUGH_START, EN_DNP_ANIM_TURN_AROUND, EN_DNP_ANIM_CUTSCENE_HURRY,
EN_DNP_ANIM_ANGRY_START, EN_DNP_ANIM_JUMP, EN_DNP_ANIM_BOUNCE_START,
EN_DNP_ANIM_GLARE_START, EN_DNP_ANIM_BOW,
};
s32 temp_v0;
s32 val;
@@ -260,29 +301,30 @@ void func_80B3D11C(EnDnp* this, PlayState* play) {
temp_v0 = Cutscene_GetActorActionIndex(play, 101);
val = play->csCtx.actorActions[temp_v0]->action;
if (this->unk_324 != (u8)val) {
func_80B3CC38(this, D_80B3DE74[val]);
if (this->unk_340 == 16) {
EnDnp_ChangeAnim(this, sCsAnimations[val]);
if (this->animIndex == EN_DNP_ANIM_CUTSCENE_IDLE) {
this->unk_322 |= 8;
} else {
this->unk_322 &= ~8;
}
if (this->unk_340 == 19) {
if (this->animIndex == EN_DNP_ANIM_ANGRY_START) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_DHVO04);
}
if (this->unk_340 == 24) {
if (this->animIndex == EN_DNP_ANIM_GLARE_START) {
this->unk_322 &= ~0x80;
this->unk_336 = 3;
this->unk_334 = 0;
this->eyeIndex = EN_DNP_EYE_ANGRY;
this->blinkTimer = 0;
}
}
this->unk_324 = val;
if (((this->unk_340 == 10) || (this->unk_340 == 12) || (this->unk_340 == 5) || (this->unk_340 == 19) ||
(this->unk_340 == 22) || (this->unk_340 == 24)) &&
if (((this->animIndex == EN_DNP_ANIM_THINK_START) || (this->animIndex == EN_DNP_ANIM_ARMS_TOGETHER_START) ||
(this->animIndex == EN_DNP_ANIM_LAUGH_START) || (this->animIndex == EN_DNP_ANIM_ANGRY_START) ||
(this->animIndex == EN_DNP_ANIM_BOUNCE_START) || (this->animIndex == EN_DNP_ANIM_GLARE_START)) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
func_80B3CC38(this, this->unk_340 + 1);
EnDnp_ChangeAnim(this, this->animIndex + 1);
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, temp_v0);
}
@@ -353,16 +395,17 @@ void EnDnp_Init(Actor* thisx, PlayState* play) {
EnDnp* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 16.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &object_dnq_Skel_010D60, NULL, this->jointTable, this->morphTable, 26);
this->unk_340 = -1;
func_80B3CC38(this, 15);
SkelAnime_InitFlex(play, &this->skelAnime, &gDekuPrincessSkel, NULL, this->jointTable, this->morphTable,
DEKU_PRINCESS_LIMB_MAX);
this->animIndex = EN_DNP_ANIM_NONE;
EnDnp_ChangeAnim(this, EN_DNP_ANIM_IDLE);
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
this->unk_322 = 0;
this->actor.targetMode = 0;
this->unk_322 |= (0x100 | 0x80 | 0x10);
this->actor.gravity = -1.0f;
if (ENDNP_GET_7(&this->actor) == ENDNP_GET_7_1) {
if (EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_RELEASED_FROM_BOTTLE) {
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_SetScale(&this->actor, 0.00085000007f);
SubS_UpdateFlags(&this->unk_322, 0, 7);
@@ -370,15 +413,16 @@ void EnDnp_Init(Actor* thisx, PlayState* play) {
this->actor.world.rot.x = this->actor.shape.rot.x;
this->actor.cutscene = 0x10;
this->actionFunc = func_80B3D47C;
} else if (((ENDNP_GET_7(&this->actor) == ENDNP_GET_7_0) && !Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) &&
!(gSaveContext.save.weekEventReg[23] & 0x20)) ||
((ENDNP_GET_7(&this->actor) == ENDNP_GET_7_2) && (gSaveContext.save.weekEventReg[23] & 0x20))) {
} else if (((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_WOODFALL_TEMPLE) &&
!Inventory_HasItemInBottle(ITEM_DEKU_PRINCESS) && !(gSaveContext.save.weekEventReg[23] & 0x20)) ||
((EN_DNP_GET_TYPE(&this->actor) == EN_DNP_TYPE_DEKU_KINGS_CHAMBER) &&
(gSaveContext.save.weekEventReg[23] & 0x20))) {
Actor_SetScale(&this->actor, 0.0085f);
SubS_UpdateFlags(&this->unk_322, 3, 7);
this->unk_322 |= 0x400;
if ((play->sceneId == SCENE_MITURIN) && (gSaveContext.save.weekEventReg[29] & 0x40)) {
this->unk_322 |= 0x20;
func_80B3CC38(this, 1);
EnDnp_ChangeAnim(this, EN_DNP_ANIM_HURRY);
}
this->actionFunc = func_80B3D2D4;
} else {
@@ -470,7 +514,7 @@ void EnDnp_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
}
if (limbIndex == 12) {
if (limbIndex == DEKU_PRINCESS_LIMB_HEAD) {
func_80B3D974(this->unk_330 + 0x4000, this->unk_332 + this->actor.shape.rot.y + 0x4000, &this->unk_1D8,
&this->unk_1E4, phi_v1, phi_v0);
Matrix_Pop();
@@ -484,11 +528,11 @@ void EnDnp_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
}
void EnDnp_Draw(Actor* thisx, PlayState* play) {
static TexturePtr D_80B3DEAC[] = {
object_dnq_Tex_0103D0,
object_dnq_Tex_0105D0,
object_dnq_Tex_0107D0,
object_dnq_Tex_0109D0,
static TexturePtr sEyeTextures[] = {
gDekuPrincessEyeOpenTex,
gDekuPrincessEyeHalfTex,
gDekuPrincessEyeClosedTex,
gDekuPrincessEyeAngryTex,
};
EnDnp* this = THIS;
@@ -497,7 +541,7 @@ void EnDnp_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B3DEAC[this->unk_336]));
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, EnDnp_PostLimbDraw, EnDnp_TransformLimbDraw,
+12 -11
View File
@@ -2,18 +2,19 @@
#define Z_EN_DNP_H
#include "global.h"
#include "objects/object_dnq/object_dnq.h"
struct EnDnp;
typedef void (*EnDnpActionFunc)(struct EnDnp*, PlayState*);
#define ENDNP_GET_7(thisx) ((thisx)->params & 7)
#define EN_DNP_GET_TYPE(thisx) ((thisx)->params & 7)
enum {
/* 0x0 */ ENDNP_GET_7_0,
/* 0x1 */ ENDNP_GET_7_1,
/* 0x2 */ ENDNP_GET_7_2,
};
typedef enum {
/* 0x0 */ EN_DNP_TYPE_WOODFALL_TEMPLE,
/* 0x1 */ EN_DNP_TYPE_RELEASED_FROM_BOTTLE,
/* 0x2 */ EN_DNP_TYPE_DEKU_KINGS_CHAMBER,
} EnDnpType;
typedef struct EnDnp {
/* 0x000 */ Actor actor;
@@ -22,8 +23,8 @@ typedef struct EnDnp {
/* 0x18C */ ColliderCylinder collider;
/* 0x1D8 */ Vec3f unk_1D8;
/* 0x1E4 */ Vec3s unk_1E4;
/* 0x1EA */ Vec3s jointTable[26];
/* 0x286 */ Vec3s morphTable[26];
/* 0x1EA */ Vec3s jointTable[DEKU_PRINCESS_LIMB_MAX];
/* 0x286 */ Vec3s morphTable[DEKU_PRINCESS_LIMB_MAX];
/* 0x322 */ u16 unk_322;
/* 0x324 */ u8 unk_324;
/* 0x328 */ s32 unk_328;
@@ -31,11 +32,11 @@ typedef struct EnDnp {
/* 0x32E */ s16 unk_32E;
/* 0x330 */ s16 unk_330;
/* 0x332 */ s16 unk_332;
/* 0x334 */ s16 unk_334;
/* 0x336 */ s16 unk_336;
/* 0x334 */ s16 blinkTimer;
/* 0x336 */ s16 eyeIndex;
/* 0x338 */ s16 unk_338;
/* 0x33A */ UNK_TYPE1 unk_33A[0x6];
/* 0x340 */ s32 unk_340;
/* 0x340 */ s32 animIndex;
} EnDnp; // size = 0x344
#endif // Z_EN_DNP_H
+1 -1
View File
@@ -13616,7 +13616,7 @@
0x80B3C80C:("ObjGhaka_Update",),
0x80B3C858:("ObjGhaka_Draw",),
0x80B3CA20:("func_80B3CA20",),
0x80B3CC38:("func_80B3CC38",),
0x80B3CC38:("EnDnp_ChangeAnim",),
0x80B3CC80:("func_80B3CC80",),
0x80B3CD1C:("func_80B3CD1C",),
0x80B3CDA4:("func_80B3CDA4",),
+2 -2
View File
@@ -14278,8 +14278,8 @@
0x80B3DCAC:("D_80B3DCAC","UNK_TYPE1","",0x1),
0x80B3DCB8:("sAnimations","UNK_TYPE1","",0x1),
0x80B3DE58:("D_80B3DE58","UNK_TYPE1","",0x1),
0x80B3DE74:("D_80B3DE74","UNK_TYPE1","",0x1),
0x80B3DEAC:("D_80B3DEAC","UNK_TYPE1","",0x1),
0x80B3DE74:("sCsAnimations","UNK_TYPE1","",0x1),
0x80B3DEAC:("sEyeTextures","UNK_TYPE1","",0x1),
0x80B3DEC0:("D_80B3DEC0","f32","",0x4),
0x80B3DEC4:("D_80B3DEC4","f32","",0x4),
0x80B3DEC8:("D_80B3DEC8","f32","",0x4),