Gerudo objects (#757)

* object_ge1

* more stuff named

* object_gla OK, symbols added to C

* eff fire fix in gameplay_keep

* object_nb OK, fixed gameplay_keep

* replaced symbols in EnNb, limb enums

* Change EnGeldB limb enums to hex

* Use enum in header too

* Add descriptions to EnGe2 and EnNb, rearrange xml

* Reorder xml

* review changes
This commit is contained in:
EllipticEllipsis 2021-04-10 17:25:03 +01:00 committed by GitHub
parent c04806fc66
commit 8d2a2a8e46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 466 additions and 160 deletions

View File

@ -929,8 +929,8 @@
<DList Name="gZTargetLockOnTriangleDL" Offset="0x4D450"/>
<DList Name="gEffFire1DL" Offset="0x4D4E0"/>
<DList Name="gEffFire2DL" Offset="0x4D5A0"/>
<Texture Name="gEffFire1Tex" OutName="eff_fire_1" Format="i8" Width="32" Height="64" Offset="0x4D660"/>
<Texture Name="gEffFire2Tex" OutName="eff_fire_2" Format="i8" Width="32" Height="64" Offset="0x4DE60"/>
<Texture Name="gDecorativeFlameMaskTex" OutName="eff_fire_mask" Format="i4" Width="32" Height="128" Offset="0x4D660"/>
<Texture Name="gDecorativeFlameTex" OutName="eff_fire" Format="i8" Width="32" Height="64" Offset="0x4DE60"/>
<DList Name="gUnusedUnknownShape1DL" Offset="0x4F2B0"/>
<DList Name="gUnusedUnknownShape1RefDL" Offset="0x4F630"/>
<DList Name="gUnusedUnknownShape2DL" Offset="0x502E0"/>

View File

@ -0,0 +1,78 @@
<Root>
<File Name="object_ge1" Segment="6">
<!-- White-clothed Gerudo Skeleton -->
<Skeleton Name="gGerudoWhiteSkel" Type="Flex" LimbType="Standard" Offset="0x0330"/>
<!-- White-clothed Gerudo Limbs -->
<Limb Name="gGerudoWhiteWaistLimb" Type="Standard" Offset="0x0240"/>
<Limb Name="gGerudoWhiteLeftThighLimb" Type="Standard" Offset="0x024C"/>
<Limb Name="gGerudoWhiteLeftShinLimb" Type="Standard" Offset="0x0258"/>
<Limb Name="gGerudoWhiteLeftFootLimb" Type="Standard" Offset="0x0264"/>
<Limb Name="gGerudoWhiteRightThighLimb" Type="Standard" Offset="0x0270"/>
<Limb Name="gGerudoWhiteRightShinLimb" Type="Standard" Offset="0x027C"/>
<Limb Name="gGerudoWhiteRightFootLimb" Type="Standard" Offset="0x0288"/>
<Limb Name="gGerudoWhiteTorsoLimb" Type="Standard" Offset="0x0294"/>
<Limb Name="gGerudoWhiteLeftUpperArmLimb" Type="Standard" Offset="0x02A0"/>
<Limb Name="gGerudoWhiteLeftForearmLimb" Type="Standard" Offset="0x02AC"/>
<Limb Name="gGerudoWhiteLeftHandLimb" Type="Standard" Offset="0x02B8"/>
<Limb Name="gGerudoWhiteRightUpperArmLimb" Type="Standard" Offset="0x02C4"/>
<Limb Name="gGerudoWhiteRightForearmLimb" Type="Standard" Offset="0x02D0"/>
<Limb Name="gGerudoWhiteRightHandLimb" Type="Standard" Offset="0x02DC"/>
<Limb Name="gGerudoWhiteHeadLimb" Type="Standard" Offset="0x02E8"/>
<!-- White-clothed Gerudo Limb DisplayLists -->
<DList Name="gGerudoWhiteWaistDL" Offset="0x69E0"/>
<DList Name="gGerudoWhiteLeftThighDL" Offset="0x70B0"/>
<DList Name="gGerudoWhiteLeftShinDL" Offset="0x71E0"/>
<DList Name="gGerudoWhiteLeftFootDL" Offset="0x73A8"/>
<DList Name="gGerudoWhiteRightThighDL" Offset="0x6AD0"/>
<DList Name="gGerudoWhiteRightShinDL" Offset="0x6C00"/>
<DList Name="gGerudoWhiteRightFootDL" Offset="0x6E50"/>
<DList Name="gGerudoWhiteTorsoDL" Offset="0x5608"/>
<DList Name="gGerudoWhiteLeftUpperArmDL" Offset="0x6510"/>
<DList Name="gGerudoWhiteLeftForearmDL" Offset="0x66B8"/>
<DList Name="gGerudoWhiteLeftHandDL" Offset="0x67E8"/>
<DList Name="gGerudoWhiteRightUpperArmDL" Offset="0x6040"/>
<DList Name="gGerudoWhiteRightForearmDL" Offset="0x61E8"/>
<DList Name="gGerudoWhiteRightHandDL" Offset="0x6318"/>
<DList Name="gGerudoWhiteHeadDL" Offset="0x5C38"/>
<!-- White-clothed Gerudo palettes -->
<Texture Name="gGerudoWhiteGeneralTLUT" OutName="gerudo_white_general_tlut" Format="rgb5a1" Width="16" Height="16" Offset="0x0348"/>
<Texture Name="gGerudoWhiteHairTLUT" OutName="gerudo_white_hair_tlut" Format="rgb5a1" Width="16" Height="16" Offset="0x2808"/>
<!-- White-clothed Gerudo Displaylist textures -->
<Texture Name="gGerudoWhiteSkinGradientTex" OutName="gerudo_white_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x0548"/>
<Texture Name="gGerudoWhiteWhiteFabricLipsTex" OutName="gerudo_white_white_fabric_lips" Format="ci8" Width="16" Height="16" Offset="0x0588"/>
<Texture Name="gGerudoWhiteEarTex" OutName="gerudo_white_ear" Format="ci8" Width="8" Height="16" Offset="0x0688"/>
<Texture Name="gGerudoWhiteFingersTex" OutName="gerudo_white_fingers" Format="ci8" Width="32" Height="32" Offset="0x1F08"/>
<Texture Name="gGerudoWhiteArmletTex" OutName="gerudo_white_armlet" Format="ci8" Width="8" Height="16" Offset="0x2308"/>
<Texture Name="gGerudoWhiteJacketTex" OutName="gerudo_white_jacket" Format="ci8" Width="16" Height="16" Offset="0x2388"/>
<Texture Name="gGerudoWhiteTubeTopTex" OutName="gerudo_white_tube_top" Format="ci8" Width="16" Height="16" Offset="0x2488"/>
<Texture Name="gGerudoWhiteNavelTex" OutName="gerudo_white_navel" Format="ci8" Width="16" Height="16" Offset="0x2588"/>
<Texture Name="gGerudoWhiteCleavageTex" OutName="gerudo_white_cleavage" Format="ci8" Width="8" Height="8" Offset="0x2688"/>
<Texture Name="gGerudoWhiteShoeUpperTex" OutName="gerudo_white_shoe_upper" Format="ci8" Width="8" Height="16" Offset="0x26C8"/>
<Texture Name="gGerudoWhiteShoeSoleTex" OutName="gerudo_white_shoe_sole" Format="ci8" Width="8" Height="8" Offset="0x2748"/>
<Texture Name="gGerudoWhiteCrotchTex" OutName="gerudo_white_crotch" Format="rgb5a1" Width="8" Height="8" Offset="0x2788"/>
<!-- White-clothed Gerudo Hairstyle DisplayLists -->
<DList Name="gGerudoWhiteHairstyleBobDL" Offset="0x9198"/>
<DList Name="gGerudoWhiteHairstyleStraightFringeDL" Offset="0x9430"/>
<DList Name="gGerudoWhiteHairstyleSpikyDL" Offset="0x9690"/>
<!-- White-clothed Gerudo Hair textures -->
<Texture Name="gGerudoWhiteHairTex" OutName="gerudo_white_hair" Format="ci8" Width="16" Height="16" Offset="0x2A08"/>
<!-- White-clothed Gerudo Eye Textures -->
<Texture Name="gGerudoWhiteEyeOpenTex" OutName="gerudo_white_eye_open" Format="rgb5a1" Width="32" Height="32" Offset="0x0708"/>
<Texture Name="gGerudoWhiteEyeHalfTex" OutName="gerudo_white_eye_half" Format="rgb5a1" Width="32" Height="32" Offset="0x0F08"/>
<Texture Name="gGerudoWhiteEyeClosedTex" OutName="gerudo_white_eye_closed" Format="rgb5a1" Width="32" Height="32" Offset="0x1708"/>
<!-- White-clothed Gerudo Animations -->
<Animation Name="gGerudoWhiteUnusedFoldingArmsAnim" Offset="0x0168"/>
<Animation Name="gGerudoWhiteIdleAnim" Offset="0x0228"/>
<Animation Name="gGerudoWhiteClapAnim" Offset="0xA048"/>
<Animation Name="gGerudoWhiteDismissiveAnim" Offset="0xA498"/>
</File>
</Root>

View File

@ -0,0 +1,85 @@
<Root>
<File Name="object_gla" Segment="6">
<!-- Purple-clothed Gerudo Skeleton -->
<Skeleton Name="gGerudoPurpleSkel" Type="Flex" LimbType="Standard" Offset="0x8968"/>
<!-- Purple-clothed Gerudo Limbs -->
<Limb Name="gGerudoPurpleRootLimb" Type="Standard" Offset="0x8818"/>
<Limb Name="gGerudoPurpleTorsoLimb" Type="Standard" Offset="0x8824"/>
<Limb Name="gGerudoPurpleNeckLimb" Type="Standard" Offset="0x8830"/>
<Limb Name="gGerudoPurplePonytailLimb" Type="Standard" Offset="0x883C"/>
<Limb Name="gGerudoPurpleVeilLimb" Type="Standard" Offset="0x8848"/>
<Limb Name="gGerudoPurpleHeadLimb" Type="Standard" Offset="0x8854"/>
<Limb Name="gGerudoPurpleRightUpperArmLimb" Type="Standard" Offset="0x8860"/>
<Limb Name="gGerudoPurpleRightForearmLimb" Type="Standard" Offset="0x886C"/>
<Limb Name="gGerudoPurpleRightWristLimb" Type="Standard" Offset="0x8878"/>
<Limb Name="gGerudoPurpleRightHandLimb" Type="Standard" Offset="0x8884"/>
<Limb Name="gGerudoPurpleGlaiveLimb" Type="Standard" Offset="0x8890"/>
<Limb Name="gGerudoPurpleLeftUpperArmLimb" Type="Standard" Offset="0x889C"/>
<Limb Name="gGerudoPurpleLeftForearmLimb" Type="Standard" Offset="0x88A8"/>
<Limb Name="gGerudoPurpleLeftHandLimb" Type="Standard" Offset="0x88B4"/>
<Limb Name="gGerudoPurpleLeftThighLimb" Type="Standard" Offset="0x88C0"/>
<Limb Name="gGerudoPurpleLeftShinLimb" Type="Standard" Offset="0x88CC"/>
<Limb Name="gGerudoPurpleLeftFootLimb" Type="Standard" Offset="0x88D8"/>
<Limb Name="gGerudoPurpleRightThighLimb" Type="Standard" Offset="0x88E4"/>
<Limb Name="gGerudoPurpleRightShinLimb" Type="Standard" Offset="0x88F0"/>
<Limb Name="gGerudoPurpleRightFootLimb" Type="Standard" Offset="0x88FC"/>
<Limb Name="gGerudoPurpleWaistLimb" Type="Standard" Offset="0x8908"/>
<!-- Purple-clothed Gerudo Limb DisplayLists -->
<DList Name="gGerudoPurpleTorsoDL" Offset="0x3540"/>
<DList Name="gGerudoPurplePonytailDL" Offset="0x8270"/>
<DList Name="gGerudoPurpleVeilDL" Offset="0x81B8"/>
<DList Name="gGerudoPurpleHeadDL" Offset="0x8360"/>
<DList Name="gGerudoPurpleRightUpperArmDL" Offset="0x39E0"/>
<DList Name="gGerudoPurpleRightForearmDL" Offset="0x3B18"/>
<DList Name="gGerudoPurpleRightHandDL" Offset="0x7E60"/>
<DList Name="gGerudoPurpleGlaiveDL" Offset="0x7FC8"/>
<DList Name="gGerudoPurpleLeftUpperArmDL" Offset="0x3D18"/>
<DList Name="gGerudoPurpleLeftForearmDL" Offset="0x3E50"/>
<DList Name="gGerudoPurpleLeftHandDL" Offset="0x7CF8"/>
<DList Name="gGerudoPurpleLeftThighDL" Offset="0x44B8"/>
<DList Name="gGerudoPurpleLeftShinDL" Offset="0x45C8"/>
<DList Name="gGerudoPurpleLeftFootDL" Offset="0x7978"/>
<DList Name="gGerudoPurpleRightThighDL" Offset="0x41E8"/>
<DList Name="gGerudoPurpleRightShinDL" Offset="0x42F8"/>
<DList Name="gGerudoPurpleRightFootDL" Offset="0x7B38"/>
<DList Name="gGerudoPurpleWaistDL" Offset="0x4050"/>
<!-- Purple-clothed Gerudo palettes -->
<Texture Name="gGerudoPurple1TLUT" OutName="gerudo_purple_1_tlut" Format="rgb5a1" Width="16" Height="16" Offset="0x4788"/>
<Texture Name="gGerudoPurple2TLUT" OutName="gerudo_purple_2_tlut" Format="rgb5a1" Width="18" Height="12" Offset="0x4D08"/>
<!-- Purple-clothed Gerudo Displaylist textures -->
<Texture Name="gGerudoPurpleSkinShadowTex" OutName="gerudo_purple_skin_shadow" Format="ci8" Width="8" Height="8" Offset="0x4988"/>
<Texture Name="gGerudoPurpleNavelTex" OutName="gerudo_purple_navel" Format="ci8" Width="16" Height="16" Offset="0x4A08"/>
<Texture Name="gGerudoPurpleChestJewelTex" OutName="gerudo_purple_chest_jewel" Format="ci8" Width="16" Height="16" Offset="0x4B08"/>
<Texture Name="gGerudoPurpleSkinEdgeTex" OutName="gerudo_purple_skin_edge" Format="ci8" Width="8" Height="8" Offset="0x4EB8"/>
<Texture Name="gGerudoPurpleEarTex" OutName="gerudo_purple_ear" Format="ci8" Width="8" Height="16" Offset="0x4EF8"/>
<Texture Name="gGerudoPurpleDarkFabricTex" OutName="gerudo_purple_dark_fabric" Format="ci8" Width="8" Height="8" Offset="0x49C8"/>
<Texture Name="gGerudoPurpleFabricFoldTex" OutName="gerudo_purple_fabric_fold" Format="i8" Width="16" Height="16" Offset="0x4C08"/>
<Texture Name="gGerudoPurpleGlaiveGuard" OutName="gerudo_purple_glaive_guard" Format="i8" Width="8" Height="8" Offset="0x5378"/>
<Texture Name="gGerudoPurpleGlaiveBladeFabricPatternTex" OutName="gerudo_purple_fabric_pattern" Format="i8" Width="16" Height="16" Offset="0x53B8"/>
<Texture Name="gGerudoPurpleShoeUpperTex" OutName="gerudo_purple_shoe_upper" Format="ci8" Width="8" Height="16" Offset="0x54B8"/>
<Texture Name="gGerudoPurpleGlaiveHaftShoeSoleTex" OutName="gerudo_purple_glaive_haft_shoe_upper" Format="ci8" Width="8" Height="8" Offset="0x5538"/>
<Texture Name="gGerudoPurpleMetalTex" OutName="gerudo_purple_metal" Format="i8" Width="8" Height="16" Offset="0x5978"/>
<Texture Name="gGerudoPurpleHairTex" OutName="gerudo_purple_hair" Format="ci8" Width="16" Height="16" Offset="0x59F8"/>
<Texture Name="gGerudoPurpleLipsFingersTex" OutName="gerudo_purple_lips_fingers" Format="i8" Width="16" Height="16" Offset="0x5AF8"/>
<!-- Purple-clothed Gerudo Eye Textures -->
<Texture Name="gGerudoPurpleEyeOpenTex" OutName="gerudo_purple_eye_open" Format="ci8" Width="32" Height="32" Offset="0x4F78"/>
<Texture Name="gGerudoPurpleEyeHalfTex" OutName="gerudo_purple_eye_half" Format="ci8" Width="32" Height="32" Offset="0x5578"/>
<Texture Name="gGerudoPurpleEyeClosedTex" OutName="gerudo_purple_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x5BF8"/>
<!-- Purple-clothed Gerudo Animations -->
<Animation Name="gGerudoPurpleUnusedHorizontalSlashAnim" Offset="0x0324"/>
<Animation Name="gGerudoPurpleUnusedSlashToStandingAnim" Offset="0x0780"/>
<Animation Name="gGerudoPurpleFallingToGroundAnim" Offset="0x11F4"/>
<Animation Name="gGerudoPurpleUnusedStandingToCrouchAnim" Offset="0x15D0"/>
<Animation Name="gGerudoPurpleUnusedCrouchingLookAroundAnim" Offset="0x1B3C"/>
<Animation Name="gGerudoPurpleChargingAnim" Offset="0x8D60"/>
<Animation Name="gGerudoPurpleLookingAboutAnim" Offset="0x98AC"/>
<Animation Name="gGerudoPurpleWalkingAnim" Offset="0x9ED4"/>
</File>
</Root>

View File

@ -0,0 +1,118 @@
<Root>
<File Name="object_nb" Segment="6">
<!-- Nabooru Skeleton -->
<Skeleton Name="gNabooruSkel" Type="Flex" LimbType="Standard" Offset="0x181C8"/>
<!-- Nabooru Limbs -->
<Limb Name="gNabooruRootLimb" Type="Standard" Offset="0x180A8"/>
<Limb Name="gNabooruLeftThighLimb" Type="Standard" Offset="0x180B4"/>
<Limb Name="gNabooruLeftShinLimb" Type="Standard" Offset="0x180C0"/>
<Limb Name="gNabooruLeftFootLimb" Type="Standard" Offset="0x180CC"/>
<Limb Name="gNabooruRightThighLimb" Type="Standard" Offset="0x180D8"/>
<Limb Name="gNabooruRightShinLimb" Type="Standard" Offset="0x180E4"/>
<Limb Name="gNabooruRightFootLimb" Type="Standard" Offset="0x180F0"/>
<Limb Name="gNabooruTorsoLimb" Type="Standard" Offset="0x180FC"/>
<Limb Name="gNabooruLeftUpperArmLimb" Type="Standard" Offset="0x18108"/>
<Limb Name="gNabooruLeftForearmLimb" Type="Standard" Offset="0x18114"/>
<Limb Name="gNabooruLeftHandLimb" Type="Standard" Offset="0x18120"/>
<Limb Name="gNabooruRightUpperArmLimb" Type="Standard" Offset="0x1812C"/>
<Limb Name="gNabooruRightForearmLimb" Type="Standard" Offset="0x18138"/>
<Limb Name="gNabooruRightHandLimb" Type="Standard" Offset="0x18144"/>
<Limb Name="gNabooruHeadLimb" Type="Standard" Offset="0x18150"/>
<Limb Name="gNabooruBlankLimb" Type="Standard" Offset="0x1815C"/>
<Limb Name="gNabooruPonytailLimb" Type="Standard" Offset="0x18168"/>
<Limb Name="gNabooruWaistLimb" Type="Standard" Offset="0x18174"/>
<!-- Nabooru Limb DisplayLists -->
<DList Name="gNabooruHeadMouthOpenDL" Offset="0x13158"/>
<DList Name="gNabooruLeftThighDL" Offset="0x17B40"/>
<DList Name="gNabooruLeftShinDL" Offset="0x17D80"/>
<DList Name="gNabooruLeftFootDL" Offset="0x12F50"/>
<DList Name="gNabooruRightThighDL" Offset="0x17658"/>
<DList Name="gNabooruRightShinDL" Offset="0x17818"/>
<DList Name="gNabooruRightFootDL" Offset="0x12D48"/>
<DList Name="gNabooruTorsoDL" Offset="0x16848"/>
<DList Name="gNabooruLeftUpperArmDL" Offset="0x172D8"/>
<DList Name="gNabooruLeftForearmDL" Offset="0x174A0"/>
<DList Name="gNabooruLeftHandDL" Offset="0x126B8"/>
<DList Name="gNabooruRightUpperArmDL" Offset="0x16FE0"/>
<DList Name="gNabooruRightForearmDL" Offset="0x17120"/>
<DList Name="gNabooruRightHandDL" Offset="0x12A00"/>
<DList Name="gNabooruHeadMouthClosedDL" Offset="0x114A8"/>
<DList Name="gNabooruBlankDL" Offset="0x125A0"/>
<DList Name="gNabooruPonytailDL" Offset="0x125A8"/>
<DList Name="gNabooruWaistDL" Offset="0x16490"/>
<!-- Nabooru palettes -->
<Texture Name="gNabooru1TLUT" OutName="nabooru_1_tlut" Format="rgb5a1" Width="16" Height="16" Offset="0x096B0"/>
<Texture Name="gNabooru2TLUT" OutName="nabooru_2_tlut" Format="rgb5a1" Width="4" Height="59" Offset="0x0AE70"/>
<Texture Name="gNabooru3TLUT" OutName="nabooru_3_tlut" Format="rgb5a1" Width="16" Height="16" Offset="0x0B048"/>
<!-- Nabooru Displaylist Textures -->
<Texture Name="gNabooruClothesButtonsTex" OutName="nabooru_clothes_buttons" Format="ci8" Width="16" Height="16" Offset="0x098B0"/>
<Texture Name="gNabooruSkinGradient1Tex" OutName="nabooru_skin_gradient_1" Format="ci8" Width="8" Height="8" Offset="0x099B0"/>
<Texture Name="gNabooruNavelTex" OutName="nabooru_navel" Format="ci8" Width="16" Height="16" Offset="0x099F0"/>
<Texture Name="gNabooruPendantJewelTex" OutName="nabooru_pendant_jewel" Format="ci8" Width="32" Height="32" Offset="0x09AF0"/>
<Texture Name="gNabooruCleavageTex" OutName="nabooru_cleavage" Format="ci8" Width="8" Height="8" Offset="0x09EF0"/>
<Texture Name="gNabooruTopFabricPatternTex" OutName="nabooru_top_fabric_pattern" Format="rgb5a1" Width="16" Height="16" Offset="0x09F30"/>
<Texture Name="gNabooruAnkleBraceletTex" OutName="nabooru_ankle_bracelet" Format="ci8" Width="16" Height="16" Offset="0x0A130"/>
<Texture Name="gNabooruTrousersShadowTex" OutName="nabooru_trousers_shadow" Format="ci8" Width="8" Height="8" Offset="0x0A230"/>
<Texture Name="gNabooruTrousersFabricTex" OutName="nabooru_trousers_fabric" Format="ci8" Width="16" Height="16" Offset="0x0A270"/>
<Texture Name="gNabooruTrouserCuffPatternTex" OutName="nabooru_trouser_cuff_pattern" Format="rgb5a1" Width="16" Height="16" Offset="0x0A370"/>
<Texture Name="gNabooruBeltJewelTex" OutName="nabooru_belt_jewel" Format="ci8" Width="16" Height="16" Offset="0x0A570"/>
<Texture Name="gNabooruBeltTex" OutName="nabooru_belt" Format="rgb5a1" Width="32" Height="32" Offset="0x0A670"/>
<Texture Name="gNabooruSkinGradient2Tex" OutName="nabooru_skin_gradient_2" Format="ci8" Width="8" Height="8" Offset="0x0B248"/><!-- Looks like 0x099B0, but uses 2TLUT -->
<Texture Name="gNabooruForeheadJewelSettingTopTex" OutName="nabooru_forehead_jewel_setting_top" Format="ci8" Width="8" Height="4" Offset="0x0B288"/>
<Texture Name="gNabooruForeheadJewelSettingBottomTex" OutName="nabooru_forehead_jewel_setting_bottom" Format="ci8" Width="8" Height="16" Offset="0x0B2A8"/>
<Texture Name="gNabooruForeheadJewelSettingSideTex" OutName="nabooru_forehead_jewel_setting_side" Format="ci8" Width="16" Height="16" Offset="0x0B328"/>
<Texture Name="gNabooruHairTex" OutName="nabooru_hair" Format="ci8" Width="16" Height="16" Offset="0x0B828"/>
<Texture Name="gNabooruForeheadJewelTex" OutName="nabooru_forehead_jewel" Format="ci8" Width="16" Height="16" Offset="0x0B928"/><!-- Looks like 0x0A570, but uses 2TLUT -->
<Texture Name="gNabooruEarTex" OutName="nabooru_ear" Format="ci8" Width="8" Height="16" Offset="0x0BA28"/>
<Texture Name="gNabooruFingersBackSideTex" OutName="nabooru_fingers_back_side" Format="ci8" Width="32" Height="32" Offset="0x0BAA8"/>
<Texture Name="gNabooruEarringsNecklaceArmletTex" OutName="nabooru_earrings_necklace_armlet" Format="rgb5a1" Width="32" Height="32" Offset="0x0BEA8"/>
<Texture Name="gNabooruPonytailCuffJewelTex" OutName="nabooru_ponytail_cuff_jewel" Format="ci8" Width="32" Height="32" Offset="0x0C6A8"/><!-- Looks like 0x09AF0, but uses 2TLUT -->
<Texture Name="gNabooruGloveHandBackTex" OutName="nabooru_glove_hand_back" Format="ci8" Width="16" Height="16" Offset="0x0CAA8"/><!-- Looks like 0x098B0, but uses 2TLUT -->
<Texture Name="gNabooruGloveHandPalmTex" OutName="nabooru_glove_hand_palm" Format="ci8" Width="8" Height="8" Offset="0x0CBA8"/>
<Texture Name="gNabooruShoeUpperMouthTex" OutName="nabooru_shoe_upper_mouth" Format="ci8" Width="8" Height="8" Offset="0x0CBE8"/>
<Texture Name="gNabooruShoeSoleTex" OutName="nabooru_shoe_sole" Format="ci8" Width="8" Height="8" Offset="0x0CC28"/>
<Texture Name="gNabooruTopOfFootTex" OutName="nabooru_top_of_foot" Format="ci8" Width="8" Height="16" Offset="0x0CC68"/>
<Texture Name="gNabooruFingersPalmSideTex" OutName="nabooru_fingers_palm_side" Format="ci8" Width="32" Height="32" Offset="0x0CCE8"/>
<Texture Name="gNabooruLipsTex" OutName="nabooru_lips" Format="rgb5a1" Width="8" Height="8" Offset="0x0DCE8"/>
<!-- Nabooru Eye Textures -->
<Texture Name="gNabooruEyeOpenTex" OutName="nabooru_eye_open" Format="ci8" Width="32" Height="32" Offset="0x0B428"/>
<Texture Name="gNabooruEyeHalfTex" OutName="nabooru_eye_half" Format="ci8" Width="32" Height="32" Offset="0x0D0E8"/>
<Texture Name="gNabooruEyeClosedTex" OutName="nabooru_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x0D4E8"/>
<Texture Name="gNabooruEyeWideTex" OutName="nabooru_eye_wide" Format="ci8" Width="32" Height="32" Offset="0x0D8E8"/>
<!-- Nabooru Animations -->
<Animation Name="gNabooruPuttingHandsTogetherCastingMagicAnim" Offset="0x00410"/>
<Animation Name="gNabooruSittingCrossLeggedAnim" Offset="0x00BC0"/>
<Animation Name="gNabooruTrappedInVortexRaisingArmAnim" Offset="0x01104"/>
<Animation Name="gNabooruSuckedByVortexAnim" Offset="0x01350"/>
<Animation Name="gNabooruTrappedInVortexPushingGroundAnim" Offset="0x01E7C"/>
<Animation Name="gNabooruRaisingArmsGivingMedallionAnim" Offset="0x0274C"/>
<Animation Name="gNabooruArmsRaisedGivingMedallionAnim" Offset="0x02B4C"/>
<Animation Name="gNabooruOnOneKneeTurningHeadRightToLeftTransitionAnim" Offset="0x02DBC"/>
<Animation Name="gNabooruOnOneKneeLookingLeftAnim" Offset="0x035A8"/>
<Animation Name="gNabooruOnAllFoursToOnOneKneeLookingRightTransitionAnim" Offset="0x03954"/>
<Animation Name="gNabooruOnOneKneeLookingRightAnim" Offset="0x04030"/>
<Animation Name="gNabooruOnAllFoursAnim" Offset="0x046A8"/>
<Animation Name="gNabooruStandingHandsOnHipsAnim" Offset="0x04BB4"/>
<Animation Name="gNabooruStandingToWalkingTransitionAnim" Offset="0x04E60"/>
<Animation Name="gNabooruSittingCrossLeggedLookingUpRightAnim" Offset="0x05614"/>
<Animation Name="gNabooruSittingCrossLeggedTurningToLookUpRightTransitionAnim" Offset="0x05CA4"/>
<Animation Name="gNabooruKneeingToRunningToHitAnim" Offset="0x06320"/>
<Animation Name="gNabooruUnusedKneelingAtCrawlspaceToStandingTransitionAnim" Offset="0x0676C"/>
<Animation Name="gNabooruKneeingAtCrawlspaceAnim" Offset="0x06E78"/>
<Animation Name="gNabooruCollapseFromStandingToKneelingTransitionAnim" Offset="0x08BD0"/>
<Animation Name="gNabooruWalkingAnim" Offset="0x09238"/>
<Animation Name="gNabooruStandingHandsOnHipsChamberOfSagesAnim" Offset="0x09694"/>
<!-- Nabooru unused vertices -->
<Array Name="gNabooruUnusedVtx_00EFF8" Count="31" Offset="0x0EFF8">
<Vtx/>
</Array>
</File>
</Root>

9
spec
View File

@ -4467,7 +4467,8 @@ endseg
beginseg
name "object_nb"
romalign 0x1000
include "build/baserom/object_nb.o"
include "build/assets/objects/object_nb/object_nb.o"
number 6
endseg
beginseg
@ -5089,7 +5090,8 @@ endseg
beginseg
name "object_ge1"
romalign 0x1000
include "build/baserom/object_ge1.o"
include "build/assets/objects/object_ge1/object_ge1.o"
number 6
endseg
beginseg
@ -5594,7 +5596,8 @@ endseg
beginseg
name "object_gla"
romalign 0x1000
include "build/baserom/object_gla.o"
include "build/assets/objects/object_gla/object_gla.o"
number 6
endseg
beginseg

View File

@ -1,5 +1,12 @@
/*
* File: z_en_ge1.c
* Overlay: ovl_En_Ge1
* Description: White-clothed Gerudo
*/
#include "z_en_ge1.h"
#include "vt.h"
#include "objects/object_ge1/object_ge1.h"
#define FLAGS 0x00000009
@ -13,7 +20,7 @@
typedef enum {
/* 00 */ GE1_HAIR_BOB,
/* 01 */ GE1_HAIR_STRAIGHT,
/* 02 */ GE1_HAIR_SPIKEY
/* 02 */ GE1_HAIR_SPIKY
} EnGe1Hairstyle;
void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx);
@ -67,36 +74,31 @@ static ColliderCylinderInit sCylinderInit = {
};
static Gfx* sHairstyleDLists[] = {
0x06009198, // Bob
0x06009430, // Straight with fringe
0x06009690, // Spikey
gGerudoWhiteHairstyleBobDL,
gGerudoWhiteHairstyleStraightFringeDL,
gGerudoWhiteHairstyleSpikyDL,
};
static Vec3f D_80A327A8 = { 600.0f, 700.0f, 0.0f };
static u64* sEyeTextures[] = {
0x06000708, // Mostly Open
0x06000F08, // Half
0x06001708, // Closed
gGerudoWhiteEyeOpenTex,
gGerudoWhiteEyeHalfTex,
gGerudoWhiteEyeClosedTex,
};
extern AnimationHeader D_06000228; // Idle, arms crossed
extern FlexSkeletonHeader D_06000330;
extern AnimationHeader D_0600A048; // Clap
extern AnimationHeader D_0600A498; // Dismissive gesture
void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
s32 pad;
EnGe1* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06000330, &D_06000228, this->jointTable, this->morphTable,
GE1_LIMB_MAX);
Animation_PlayOnce(&this->skelAnime, &D_06000228);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGerudoWhiteSkel, &gGerudoWhiteIdleAnim, this->jointTable,
this->morphTable, GE1_LIMB_MAX);
Animation_PlayOnce(&this->skelAnime, &gGerudoWhiteIdleAnim);
Collider_InitCylinder(globalCtx, &this->collider);
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->animation = &D_06000228;
this->animation = &gGerudoWhiteIdleAnim;
this->animFunc = EnGe1_CueUpAnimation;
this->actor.targetMode = 6;
Actor_SetScale(&this->actor, 0.01f);
@ -107,12 +109,13 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
switch (this->actor.params & 0xFF) {
case GE1_TYPE_GATE_GUARD:
this->hairstyle = GE1_HAIR_SPIKEY;
this->hairstyle = GE1_HAIR_SPIKY;
this->actionFunc = EnGe1_GetReaction_GateGuard;
break;
case GE1_TYPE_GATE_OPERATOR:
this->hairstyle = GE1_HAIR_STRAIGHT;
if (EnGe1_CheckCarpentersFreed()) {
this->actionFunc = EnGe1_CheckGate_GateOp;
} else {
@ -122,6 +125,7 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
case GE1_TYPE_NORMAL:
this->hairstyle = GE1_HAIR_STRAIGHT;
if (EnGe1_CheckCarpentersFreed()) {
this->actionFunc = EnGe1_SetNormalText;
} else {
@ -169,6 +173,7 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
}
break;
}
this->stateFlags = 0;
}
@ -183,23 +188,25 @@ s32 EnGe1_SetTalkAction(EnGe1* this, GlobalContext* globalCtx, u16 textId, f32 a
this->actionFunc = actionFunc;
this->animFunc = EnGe1_StopFidget;
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
this->animation = &D_06000228;
Animation_Change(&this->skelAnime, &D_06000228, 1.0f, 0.0f, Animation_GetLastFrame(&D_06000228), ANIMMODE_ONCE,
-8.0f);
this->animation = &gGerudoWhiteIdleAnim;
Animation_Change(&this->skelAnime, &gGerudoWhiteIdleAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gGerudoWhiteIdleAnim), ANIMMODE_ONCE, -8.0f);
return true;
}
this->actor.textId = textId;
if (this->actor.xzDistToPlayer < arg3) {
func_8002F2CC(&this->actor, globalCtx, arg3);
}
return false;
}
void EnGe1_SetAnimationIdle(EnGe1* this) {
Animation_Change(&this->skelAnime, &D_06000228, -1.0f, Animation_GetLastFrame(&D_06000228), 0.0f, ANIMMODE_ONCE,
8.0f);
this->animation = &D_06000228;
Animation_Change(&this->skelAnime, &gGerudoWhiteIdleAnim, -1.0f, Animation_GetLastFrame(&gGerudoWhiteIdleAnim),
0.0f, ANIMMODE_ONCE, 8.0f);
this->animation = &gGerudoWhiteIdleAnim;
this->animFunc = EnGe1_CueUpAnimation;
}
@ -225,7 +232,7 @@ void EnGe1_KickPlayer(EnGe1* this, GlobalContext* globalCtx) {
if ((INV_CONTENT(ITEM_HOOKSHOT) == ITEM_NONE) || (INV_CONTENT(ITEM_LONGSHOT) == ITEM_NONE)) {
globalCtx->nextEntranceIndex = 0x1A5;
} else if (gSaveContext.eventChkInf[12] & 0x80) {
} else if (gSaveContext.eventChkInf[12] & 0x80) { // Caught previously
globalCtx->nextEntranceIndex = 0x5F8;
} else {
globalCtx->nextEntranceIndex = 0x3B4;
@ -254,6 +261,7 @@ void EnGe1_WatchForPlayerFrontOnly(EnGe1* this, GlobalContext* globalCtx) {
if (this->collider.base.acFlags & AC_HIT) {
EnGe1_SpotPlayer(this, globalCtx);
}
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
}
@ -265,13 +273,16 @@ void EnGe1_ChooseActionFromTextId(EnGe1* this, GlobalContext* globalCtx) {
case 0x6001:
this->actionFunc = EnGe1_SetNormalText;
break;
case 0x601A:
case 0x6019:
this->actionFunc = EnGe1_GetReaction_ValleyFloor;
break;
case 0x6018:
this->actionFunc = EnGe1_CheckGate_GateOp;
break;
default:
this->actionFunc = EnGe1_GetReaction_ValleyFloor;
break;
@ -333,9 +344,9 @@ void EnGe1_Open_GTGGuard(EnGe1* this, GlobalContext* globalCtx) {
void EnGe1_SetupOpen_GTGGuard(EnGe1* this, GlobalContext* globalCtx) {
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
this->actionFunc = EnGe1_Open_GTGGuard;
Animation_Change(&this->skelAnime, &D_0600A048, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A048), ANIMMODE_ONCE,
-3.0f);
this->animation = &D_0600A048;
Animation_Change(&this->skelAnime, &gGerudoWhiteClapAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gGerudoWhiteClapAnim), ANIMMODE_ONCE, -3.0f);
this->animation = &gGerudoWhiteClapAnim;
this->animFunc = EnGe1_StopFidget;
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
}
@ -428,9 +439,9 @@ void EnGe1_SetupOpenGate_GateOp(EnGe1* this, GlobalContext* globalCtx) {
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
this->actionFunc = EnGe1_OpenGate_GateOp;
Animation_Change(&this->skelAnime, &D_0600A048, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A048), ANIMMODE_ONCE,
-3.0f);
this->animation = &D_0600A048;
Animation_Change(&this->skelAnime, &gGerudoWhiteClapAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gGerudoWhiteClapAnim), ANIMMODE_ONCE, -3.0f);
this->animation = &gGerudoWhiteClapAnim;
this->animFunc = EnGe1_StopFidget;
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
}
@ -466,9 +477,9 @@ void EnGe1_GetReaction_GateGuard(EnGe1* this, GlobalContext* globalCtx) {
if (EnGe1_SetTalkAction(this, globalCtx, reactionText, 100.0f, EnGe1_Talk_GateGuard)) {
this->animFunc = EnGe1_CueUpAnimation;
this->animation = &D_0600A498;
Animation_Change(&this->skelAnime, &D_0600A498, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A498), ANIMMODE_ONCE,
-8.0f);
this->animation = &gGerudoWhiteDismissiveAnim;
Animation_Change(&this->skelAnime, &gGerudoWhiteDismissiveAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gGerudoWhiteDismissiveAnim), ANIMMODE_ONCE, -8.0f);
}
}
@ -516,6 +527,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, GlobalContext* globalCtx) {
this->actor.flags &= ~0x10000;
this->actionFunc = EnGe1_WaitTillItemGiven_Archery;
}
if (this->stateFlags & GE1_STATE_GIVE_QUIVER) {
switch (CUR_UPG_VALUE(UPG_QUIVER)) {
//! @bug Asschest: the compiler inserts a default assigning *(sp+0x24) to getItemId, which is junk data left
@ -532,6 +544,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, GlobalContext* globalCtx) {
} else {
getItemId = GI_HEART_PIECE;
}
func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 50.0f);
}
@ -586,9 +599,11 @@ void EnGe1_BeginGame_Archery(EnGe1* this, GlobalContext* globalCtx) {
horse->freezeTimer = 1200;
}
}
this->actionFunc = EnGe1_WaitDoNothing;
}
break;
case 1:
this->actionFunc = EnGe1_Wait_Archery;
func_80106CCC(globalCtx);
@ -615,11 +630,11 @@ void EnGe1_TalkNoPrize_Archery(EnGe1* this, GlobalContext* globalCtx) {
void EnGe1_TalkAfterGame_Archery(EnGe1* this, GlobalContext* globalCtx) {
gSaveContext.eventInf[0] &= ~0x100;
LOG_NUM("z_common_data.yabusame_total", gSaveContext.minigameScore, "../z_en_ge1.c", 1110);
LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", gSaveContext.highScores[0], "../z_en_ge1.c", 1111);
LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", gSaveContext.highScores[HS_HBA], "../z_en_ge1.c", 1111);
this->actor.flags |= 0x10000;
if (gSaveContext.highScores[0] < gSaveContext.minigameScore) {
gSaveContext.highScores[0] = gSaveContext.minigameScore;
if (gSaveContext.highScores[HS_HBA] < gSaveContext.minigameScore) {
gSaveContext.highScores[HS_HBA] = gSaveContext.minigameScore;
}
if (gSaveContext.minigameScore < 1000) {
@ -776,10 +791,12 @@ void EnGe1_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
EnGe1* this = THIS;
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1419);
if (limbIndex == GE1_LIMB_HEAD) {
gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLists[this->hairstyle]);
Matrix_MultVec3f(&D_80A327A8, &this->actor.focus.pos);
}
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1427);
}
@ -788,9 +805,11 @@ void EnGe1_Draw(Actor* thisx, GlobalContext* globalCtx) {
EnGe1* this = THIS;
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1442);
func_800943C8(globalCtx->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, this);
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1459);
}

View File

@ -1,6 +1,12 @@
/*
* File: z_en_ge2.c
* Overlay: ovl_En_Ge2
* Description: Purple-clothed Gerudo
*/
#include "z_en_ge2.h"
#include "vt.h"
#include "objects/object_gla/object_gla.h"
#define FLAGS 0x00000019
@ -90,13 +96,9 @@ static EnGe2ActionFunc sActionFuncs[] = {
};
static AnimationHeader* sAnimations[] = {
0x06009ED4, // Walking, spear on shoulder
0x060098AC, // Standing, looking left and right
0x060098AC,
0x060011F4, // Falling to ground
0x060098AC,
0x06008D60, // Runnng, spear in attack position
0x060098AC, 0x060098AC, 0x060098AC,
&gGerudoPurpleWalkingAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim,
&gGerudoPurpleFallingToGroundAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleChargingAnim,
&gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim,
};
static u8 sAnimModes[] = {
@ -104,9 +106,6 @@ static u8 sAnimModes[] = {
ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE,
};
extern FlexSkeletonHeader D_06008968;
extern AnimationHeader D_06009ED4;
void EnGe2_ChangeAction(EnGe2* this, s32 i) {
this->actionFunc = sActionFuncs[i];
Animation_Change(&this->skelAnime, sAnimations[i], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[i]),
@ -119,8 +118,8 @@ void EnGe2_Init(Actor* thisx, GlobalContext* globalCtx) {
EnGe2* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06008968, NULL, this->jointTable, this->morphTable, 22);
Animation_PlayLoop(&this->skelAnime, &D_06009ED4);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGerudoPurpleSkel, NULL, this->jointTable, this->morphTable, 22);
Animation_PlayLoop(&this->skelAnime, &gGerudoPurpleWalkingAnim);
Collider_InitCylinder(globalCtx, &this->collider);
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@ -644,9 +643,9 @@ void EnGe2_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
}
static u64* sEyeTextures[] = {
0x06004F78, // Half-open
0x06005578, // Quarter-open
0x06005BF8, // Closed
gGerudoPurpleEyeOpenTex,
gGerudoPurpleEyeHalfTex,
gGerudoPurpleEyeClosedTex,
};
void EnGe2_Draw(Actor* thisx, GlobalContext* globalCtx) {

View File

@ -7,31 +7,31 @@
struct EnGeldB;
typedef enum {
/* 00 */ GELDB_LIMB_NONE,
/* 01 */ GELDB_LIMB_ROOT,
/* 02 */ GELDB_LIMB_TORSO,
/* 03 */ GELDB_LIMB_NECK,
/* 04 */ GELDB_LIMB_PONYTAIL,
/* 05 */ GELDB_LIMB_VEIL,
/* 06 */ GELDB_LIMB_HEAD,
/* 07 */ GELDB_LIMB_R_UPPER_ARM,
/* 08 */ GELDB_LIMB_R_FOREARM,
/* 09 */ GELDB_LIMB_R_WRIST,
/* 10 */ GELDB_LIMB_R_HAND,
/* 11 */ GELDB_LIMB_R_SWORD,
/* 12 */ GELDB_LIMB_L_UPPER_ARM,
/* 13 */ GELDB_LIMB_L_FOREARM,
/* 14 */ GELDB_LIMB_L_WRIST,
/* 15 */ GELDB_LIMB_L_HAND,
/* 16 */ GELDB_LIMB_L_SWORD,
/* 17 */ GELDB_LIMB_L_THIGH,
/* 18 */ GELDB_LIMB_L_SHIN,
/* 19 */ GELDB_LIMB_L_FOOT,
/* 20 */ GELDB_LIMB_R_THIGH,
/* 21 */ GELDB_LIMB_R_SHIN,
/* 22 */ GELDB_LIMB_R_FOOT,
/* 23 */ GELDB_LIMB_WAIST,
/* 24 */ GELDB_LIMB_MAX
/* 0x00 */ GELDB_LIMB_NONE,
/* 0x01 */ GELDB_LIMB_ROOT,
/* 0x02 */ GELDB_LIMB_TORSO,
/* 0x03 */ GELDB_LIMB_NECK,
/* 0x04 */ GELDB_LIMB_PONYTAIL,
/* 0x05 */ GELDB_LIMB_VEIL,
/* 0x06 */ GELDB_LIMB_HEAD,
/* 0x07 */ GELDB_LIMB_R_UPPER_ARM,
/* 0x08 */ GELDB_LIMB_R_FOREARM,
/* 0x09 */ GELDB_LIMB_R_WRIST,
/* 0x0A */ GELDB_LIMB_R_HAND,
/* 0x0B */ GELDB_LIMB_R_SWORD,
/* 0x0C */ GELDB_LIMB_L_UPPER_ARM,
/* 0x0D */ GELDB_LIMB_L_FOREARM,
/* 0x0E */ GELDB_LIMB_L_WRIST,
/* 0x0F */ GELDB_LIMB_L_HAND,
/* 0x10 */ GELDB_LIMB_L_SWORD,
/* 0x11 */ GELDB_LIMB_L_THIGH,
/* 0x12 */ GELDB_LIMB_L_SHIN,
/* 0x13 */ GELDB_LIMB_L_FOOT,
/* 0x14 */ GELDB_LIMB_R_THIGH,
/* 0x15 */ GELDB_LIMB_R_SHIN,
/* 0x16 */ GELDB_LIMB_R_FOOT,
/* 0x17 */ GELDB_LIMB_WAIST,
/* 0x18 */ GELDB_LIMB_MAX
} EnGeldBLimb;
typedef void (*EnGeldBActionFunc)(struct EnGeldB*, GlobalContext*);

View File

@ -1,5 +1,12 @@
/*
* File: z_en_nb.c
* Overlay: ovl_En_Nb
* Description: Nabooru
*/
#include "z_en_nb.h"
#include "vt.h"
#include "objects/object_nb/object_nb.h"
#define FLAGS 0x00000010
@ -52,32 +59,6 @@ void EnNb_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnNb_Update(Actor* thisx, GlobalContext* globalCtx);
void EnNb_Draw(Actor* thisx, GlobalContext* globalCtx);
extern FlexSkeletonHeader D_060181C8;
extern AnimationHeader D_06004BB4; // standing up hands on hips
extern AnimationHeader D_06006E78;
extern AnimationHeader D_06004E60; // getting up from crawlspace
extern AnimationHeader D_06004BB4;
extern AnimationHeader D_06009238;
extern AnimationHeader D_06009694; // hands on hips standing
extern AnimationHeader D_0600274C; // raising both arms up transition (giving medallion to link ?)
extern AnimationHeader D_06002B4C; // raising both arms up stable (giving medallion to link ?)
extern AnimationHeader D_06000410; // clasping hands together
extern AnimationHeader D_06001E7C; // looking around ?
extern AnimationHeader D_06001350; // i think this is the animation where she is in the purple thing
extern AnimationHeader D_06001104; // transition to raising arm up in purple portal
extern AnimationHeader D_06008BD0; // falls to the ground
extern AnimationHeader D_060046A8; // looking in crawlspace ?
extern AnimationHeader D_06003954; // on ground getting up ??
extern AnimationHeader D_06004030; // looking behind her to the right
extern AnimationHeader D_06002DBC; // freaking out
extern AnimationHeader D_060035A8; // looking behind her
extern AnimationHeader D_06006320; // sees unk from behind, turns and runs
extern AnimationHeader D_06000BC0; // crossed legs
extern AnimationHeader D_06005CA4; // crossed legs, turns head and looks behind to the right
extern AnimationHeader D_06005614; // crossed legs, looking behind to the right
extern Gfx D_06013158[];
extern UNK_TYPE D_0600D8E8;
static ColliderCylinderInitType1 sCylinderInit = {
{
COLTYPE_HIT0,
@ -97,10 +78,10 @@ static ColliderCylinderInitType1 sCylinderInit = {
{ 25, 80, 0, { 0, 0, 0 } },
};
static UNK_PTR sEyeTextures[] = {
0x0600B428,
0x0600D0E8,
0x0600D4E8,
static u64* sEyeTextures[] = {
gNabooruEyeOpenTex,
gNabooruEyeHalfTex,
gNabooruEyeClosedTex,
};
static s32 D_80AB4318 = 0;
@ -322,7 +303,7 @@ void EnNb_SetCurrentAnim(EnNb* this, AnimationHeader* animation, u8 mode, f32 tr
}
void EnNb_SetChamberAnim(EnNb* this, GlobalContext* globalCtx) {
EnNb_SetCurrentAnim(this, &D_06009694, 0, 0, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsChamberOfSagesAnim, 0, 0, 0);
this->actor.shape.yOffset = -10000.0f;
}
@ -385,7 +366,7 @@ void EnNb_SetupDefaultChamberIdle(EnNb* this) {
}
void EnNb_SetupArmRaise(EnNb* this, GlobalContext* globalCtx) {
AnimationHeader* animation = &D_0600274C;
AnimationHeader* animation = &gNabooruRaisingArmsGivingMedallionAnim;
CsCmdActorAction* csCmdNPCAction;
if (globalCtx->csCtx.state != CS_STATE_IDLE) {
@ -399,7 +380,7 @@ void EnNb_SetupArmRaise(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetupRaisedArmTransition(EnNb* this, s32 animFinished) {
AnimationHeader* animation = &D_06002B4C;
AnimationHeader* animation = &gNabooruArmsRaisedGivingMedallionAnim;
if (animFinished) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
@ -466,7 +447,7 @@ void func_80AB19FC(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetupLightArrowOrSealingCs(EnNb* this, GlobalContext* globalCtx) {
EnNb_SetCurrentAnim(this, &D_06000410, 2, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruPuttingHandsTogetherCastingMagicAnim, 2, 0.0f, 0);
this->action = NB_ACTION_7;
this->actor.shape.shadowAlpha = 0;
}
@ -579,7 +560,7 @@ void EnNb_DrawTransparency(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_InitKidnap(EnNb* this, GlobalContext* globalCtx) {
EnNb_SetCurrentAnim(this, &D_06001E7C, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruTrappedInVortexPushingGroundAnim, 0, 0.0f, 0);
this->action = NB_KIDNAPPED;
this->actor.shape.shadowAlpha = 0;
gSaveContext.eventChkInf[9] |= 0x20;
@ -627,7 +608,7 @@ void EnNb_SetupCaptureCutsceneState(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetRaisedArmCaptureAnim(EnNb* this, s32 animFinished) {
AnimationHeader* animation = &D_06001350;
AnimationHeader* animation = &gNabooruSuckedByVortexAnim;
if (animFinished) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
@ -636,7 +617,7 @@ void EnNb_SetRaisedArmCaptureAnim(EnNb* this, s32 animFinished) {
}
void EnNb_SetupLookAroundInKidnap(EnNb* this) {
AnimationHeader* animation = &D_06001E7C;
AnimationHeader* animation = &gNabooruTrappedInVortexPushingGroundAnim;
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP, -8.0f);
this->action = NB_KIDNAPPED_LOOK_AROUND;
@ -644,7 +625,7 @@ void EnNb_SetupLookAroundInKidnap(EnNb* this) {
}
void EnNb_SetupKidnap(EnNb* this) {
AnimationHeader* animation = &D_06001104;
AnimationHeader* animation = &gNabooruTrappedInVortexRaisingArmAnim;
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_ONCE, -8.0f);
this->action = NB_PORTAL_FALLTHROUGH;
@ -707,7 +688,7 @@ void EnNb_SuckedInByPortal(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetupConfrontation(EnNb* this, GlobalContext* globalCtx) {
AnimationHeader* animation = &D_06008BD0;
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
EnNb_SetCurrentAnim(this, animation, 0, 0.0f, 0);
this->action = NB_IN_CONFRONTATION;
@ -766,28 +747,28 @@ void func_80AB26C8(EnNb* this) {
void func_80AB26DC(EnNb* this, GlobalContext* globalCtx) {
s32 pad;
AnimationHeader* animation = &D_06008BD0;
f32 frames = Animation_GetLastFrame(animation);
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
f32 lastFrame = Animation_GetLastFrame(animation);
EnNb_SetupCsPosRot(this, globalCtx, 1);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, 0.0f);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, 0.0f);
this->action = NB_ACTION_14;
this->drawMode = NB_DRAW_KNEEL;
this->actor.shape.shadowAlpha = 0xFF;
}
void EnNb_SetupKneel(EnNb* this) {
AnimationHeader* animation = &D_06008BD0;
f32 frames = Animation_GetLastFrame(animation);
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
f32 lastFrame = Animation_GetLastFrame(animation);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, 0.0f);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, 0.0f);
this->action = NB_KNEEL;
this->drawMode = NB_DRAW_KNEEL;
this->actor.shape.shadowAlpha = 0xFF;
}
void EnNb_CheckIfKneeling(EnNb* this, s32 animFinished) {
AnimationHeader* animation = &D_060046A8;
AnimationHeader* animation = &gNabooruOnAllFoursAnim;
if (animFinished) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
@ -797,17 +778,17 @@ void EnNb_CheckIfKneeling(EnNb* this, s32 animFinished) {
}
void EnNb_SetupLookRight(EnNb* this) {
AnimationHeader* animation = &D_06003954;
f32 frames = Animation_GetLastFrame(animation);
AnimationHeader* animation = &gNabooruOnAllFoursToOnOneKneeLookingRightTransitionAnim;
f32 lastFrame = Animation_GetLastFrame(animation);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
this->action = NB_LOOK_RIGHT;
this->drawMode = NB_DRAW_DEFAULT;
this->actor.shape.shadowAlpha = 0xFF;
}
void EnNb_CheckIfLookingRight(EnNb* this, s32 animFinished) {
AnimationHeader* animation = &D_06004030;
AnimationHeader* animation = &gNabooruOnOneKneeLookingRightAnim;
if (animFinished) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
@ -817,17 +798,17 @@ void EnNb_CheckIfLookingRight(EnNb* this, s32 animFinished) {
}
void EnNb_SetupLookLeft(EnNb* this) {
AnimationHeader* animation = &D_06002DBC;
f32 frames = Animation_GetLastFrame(animation);
AnimationHeader* animation = &gNabooruOnOneKneeTurningHeadRightToLeftTransitionAnim;
f32 lastFrame = Animation_GetLastFrame(animation);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
this->action = NB_LOOK_LEFT;
this->drawMode = NB_DRAW_LOOK_DIRECTION;
this->actor.shape.shadowAlpha = 0xFF;
}
void EnNb_CheckIfLookLeft(EnNb* this, s32 animFinished) {
AnimationHeader* animation = &D_060035A8;
AnimationHeader* animation = &gNabooruOnOneKneeLookingLeftAnim;
if (animFinished) {
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
@ -843,10 +824,10 @@ void EnNb_SetupDemo6KInConfrontation(EnNb* this, GlobalContext* globalCtx, s32 a
}
void EnNb_SetupRun(EnNb* this) {
AnimationHeader* animation = &D_06006320;
f32 frames = Animation_GetLastFrame(animation);
AnimationHeader* animation = &gNabooruKneeingToRunningToHitAnim;
f32 lastFrame = Animation_GetLastFrame(animation);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
this->action = NB_RUN;
this->drawMode = NB_DRAW_LOOK_DIRECTION;
this->actor.shape.shadowAlpha = 0xFF;
@ -975,8 +956,8 @@ void func_80AB2E70(EnNb* this, GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_nb_inConfrontion.c", 572);
func_80093D18(globalCtx->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_0600D8E8));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_0600D8E8));
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gNabooruEyeWideTex));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gNabooruEyeWideTex));
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
gSPSegment(POLY_OPA_DISP++, 0x0C, &D_80116280[2]);
SkelAnime_DrawFlexOpa(globalCtx, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, NULL, NULL,
@ -988,8 +969,8 @@ void func_80AB2E70(EnNb* this, GlobalContext* globalCtx) {
s32 func_80AB2FC0(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
EnNb* this = THIS;
if (limbIndex == 15) {
*dList = D_06013158;
if (limbIndex == NB_LIMB_HEAD) {
*dList = gNabooruHeadMouthOpenDL;
}
return 0;
@ -1016,7 +997,7 @@ void func_80AB2FE4(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetupCreditsSpawn(EnNb* this, GlobalContext* globalCtx) {
EnNb_SetCurrentAnim(this, &D_06000BC0, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedAnim, 0, 0.0f, 0);
this->action = NB_CREDITS_INIT;
this->drawMode = NB_DRAW_NOTHING;
this->actor.shape.shadowAlpha = 0;
@ -1030,7 +1011,7 @@ void EnNb_SetAlphaInCredits(EnNb* this) {
if ((kREG(17) + 10.0f) <= this->alphaTimer) {
this->alpha = 255;
this->actor.shape.shadowAlpha = 0xFF;
this->actor.shape.shadowAlpha = 255;
} else {
alpha = (*alphaTimer / (kREG(17) + 10.0f)) * 255.0f;
this->alpha = alpha;
@ -1052,13 +1033,13 @@ void EnNb_SetupCreditsSit(EnNb* this) {
}
void EnNb_SetupCreditsHeadTurn(EnNb* this) {
EnNb_SetCurrentAnim(this, &D_06005CA4, 2, -8.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedTurningToLookUpRightTransitionAnim, 2, -8.0f, 0);
this->action = NB_CREDITS_HEAD_TURN;
}
void EnNb_CheckIfLookingUp(EnNb* this, s32 animFinished) {
if (animFinished) {
EnNb_SetCurrentAnim(this, &D_06005614, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedLookingUpRightAnim, 0, 0.0f, 0);
}
}
@ -1122,11 +1103,11 @@ void EnNb_CrawlspaceSpawnCheck(EnNb* this, GlobalContext* globalCtx) {
// looking into crawlspace
if (!(gSaveContext.eventChkInf[9] & 0x10)) {
EnNb_SetCurrentAnim(this, &D_06006E78, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruKneeingAtCrawlspaceAnim, 0, 0.0f, 0);
this->action = NB_CROUCH_CRAWLSPACE;
this->drawMode = NB_DRAW_DEFAULT;
} else {
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, 0.0f, 0);
this->headTurnFlag = 1;
this->actor.flags |= 9;
this->actor.world.pos = this->finalPos;
@ -1195,7 +1176,7 @@ void func_80AB36DC(EnNb* this, GlobalContext* globalCtx) {
void EnNb_CheckNoticed(EnNb* this, GlobalContext* globalCtx) {
if (EnNb_GetNoticedStatus(this, globalCtx)) {
EnNb_SetCurrentAnim(this, &D_06004E60, 2, -8.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingToWalkingTransitionAnim, 2, -8.0f, 0);
this->action = NB_NOTICE_PLAYER;
EnNb_SetNoticeSFX(this);
}
@ -1203,7 +1184,7 @@ void EnNb_CheckNoticed(EnNb* this, GlobalContext* globalCtx) {
void EnNb_SetupIdleCrawlspace(EnNb* this, s32 animFinished) {
if (animFinished) {
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, -8.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, -8.0f, 0);
this->headTurnFlag = 1;
this->actor.flags |= 9;
this->action = NB_IDLE_CRAWLSPACE;
@ -1227,7 +1208,7 @@ void func_80AB3838(EnNb* this, GlobalContext* globalCtx) {
}
void EnNb_SetupPathMovement(EnNb* this, GlobalContext* globalCtx) {
EnNb_SetCurrentAnim(this, &D_06004E60, 2, -8.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingToWalkingTransitionAnim, 2, -8.0f, 0);
gSaveContext.eventChkInf[9] |= 0x10;
this->action = NB_IN_PATH;
this->actor.flags &= ~9;
@ -1292,12 +1273,12 @@ void EnNb_SetTextIdAsChild(EnNb* this, GlobalContext* globalCtx) {
void func_80AB3A7C(EnNb* this, GlobalContext* globalCtx, s32 animFinished) {
u16 movementTimer = this->movementTimer;
if ((u16)(kREG(17) + 0x19) > movementTimer) {
if ((u16)(kREG(17) + 25) > movementTimer) {
if (animFinished) {
EnNb_SetCurrentAnim(this, &D_06009238, 0, 0.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruWalkingAnim, 0, 0.0f, 0);
}
} else {
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, -8.0f, 0);
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, -8.0f, 0);
this->action = NB_IDLE_AFTER_TALK;
}
}
@ -1443,7 +1424,7 @@ void EnNb_Init(Actor* thisx, GlobalContext* globalCtx) {
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
EnNb_SetupCollider(thisx, globalCtx);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_060181C8, NULL, this->jointTable, this->morphTable, 19);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gNabooruSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX);
switch (EnNb_GetType(this)) {
case NB_TYPE_DEMO02:
@ -1473,11 +1454,11 @@ s32 EnNb_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
s32 ret = false;
if (this->headTurnFlag != 0) {
if (limbIndex == 8) {
if (limbIndex == NB_LIMB_TORSO) {
rot->x += unk_300->unk_0E.y;
rot->y -= unk_300->unk_0E.x;
ret = false;
} else if (limbIndex == 15) {
} else if (limbIndex == NB_LIMB_HEAD) {
rot->x += unk_300->unk_08.y;
rot->z += unk_300->unk_08.x;
ret = false;
@ -1490,7 +1471,7 @@ s32 EnNb_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
void EnNb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
EnNb* this = THIS;
if (limbIndex == 15) {
if (limbIndex == NB_LIMB_HEAD) {
Vec3f vec1 = { 0.0f, 10.0f, 0.0f };
Vec3f vec2;

View File

@ -6,14 +6,37 @@
struct EnNb;
typedef enum {
/* 0x00 */ NB_LIMB_NONE,
/* 0x01 */ NB_LIMB_ROOT,
/* 0x02 */ NB_LIMB_L_THIGH,
/* 0x03 */ NB_LIMB_L_SHIN,
/* 0x04 */ NB_LIMB_L_FOOT,
/* 0x05 */ NB_LIMB_R_THIGH,
/* 0x06 */ NB_LIMB_R_SHIN,
/* 0x07 */ NB_LIMB_R_FOOT,
/* 0x08 */ NB_LIMB_TORSO,
/* 0x09 */ NB_LIMB_L_UPPER_ARM,
/* 0x0A */ NB_LIMB_L_FOREARM,
/* 0x0B */ NB_LIMB_L_HAND,
/* 0x0C */ NB_LIMB_R_UPPER_ARM,
/* 0x0D */ NB_LIMB_R_FOREARM,
/* 0x0E */ NB_LIMB_R_HAND,
/* 0x0F */ NB_LIMB_HEAD,
/* 0x10 */ NB_LIMB_BLANK,
/* 0x11 */ NB_LIMB_PONYTAIL,
/* 0x12 */ NB_LIMB_WAIST,
/* 0x13 */ NB_LIMB_MAX
} EnNbLimb;
typedef void (*EnNbActionFunc)(struct EnNb*, GlobalContext*);
typedef void (*EnNbDrawFunc)(struct EnNb*, GlobalContext*);
typedef struct EnNb {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ Vec3s jointTable[19];
/* 0x0202 */ Vec3s morphTable[19];
/* 0x0190 */ Vec3s jointTable[NB_LIMB_MAX];
/* 0x0202 */ Vec3s morphTable[NB_LIMB_MAX];
/* 0x0274 */ s16 eyeIdx;
/* 0x0276 */ s16 blinkTimer;
/* 0x0278 */ s32 action;