Document object_rd, document En_Rd and En_Railgibud, and clean up En_Talk_Gibud (#604)

* Document object_rd + use it in rd and railgibud

* Move limb enum to rd.h, share it across all redead actors

* Copy over head/body rotation and effect documentation from Talk_Gibud to the other two

* Minor spacing things in Talk_Gibud

* Import tons of symbols from Talk_Gibud into Railgibud

* Always set actionFunc last in Setup functions

* Document the isInvincible struct var (thanks kz)

* More railgibud struct documentation

* Cutscene-related struct names

* Damage effect enum for Railgibud

* Damage effect enum for Rd

* Use the UpdateDamage name that everyone else uses

* Grab/Type enums in Railgibud

* Document EnRailgibud_MoveGrabbedPlayerAwayFromWall

* Document EnRailgibud_PlayerInRangeWithCorrectState

* Document EnRailgibud_PlayerOutOfRange

* Document path stuff in Railgibud

* More Railgibud junk

* Enum for animations

* Minor documentation on effect stuff

* Document Railgibud sink into ground

* Document most of Railgibud that was left

* Clarify one function name

* Use player2, since I guess func_800B8E58 takes Player* now

* Make Talk_Gibud/Railgibud consistent with each other in style

* Name a few Rd functions

* Name some dancing functions

* Make define for is Redead

* Define for if the Redead is frozen

* Make most params access use TYPE

* Document some Rd types

* Document grab fail functions

* Port a few more names from other Gibdo actors

* More Rd documentation

* Document alpha

* Document walk to home functions

* Document deathTimer in Rd

* Some more timers documented

* Document damageEffect struct var

* Name all functions in Rd

* Document unk_3E4

* Document grab stuff

* Document mourning state

* Document action states

* Name all remaining variables

* Document remaining EnRdType

* Document all types of Redead

* Use ACTOR_FLAGs

* Verbose player stateflags

* CheckCollision -> UpdateCollision

* Try to explain what makes Rd different from the others better

* Last changes before PR

* Move the limb enum to the object

* Remove unnecessary includes from the .c files

* Format after sync
This commit is contained in:
Tom Overton 2022-02-19 11:58:31 -08:00 committed by GitHub
parent 557825636f
commit e353f3bb96
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 1680 additions and 1421 deletions

View File

@ -1,114 +1,114 @@
<Root>
<File Name="object_rd" Segment="6">
<Animation Name="object_rd_Anim_0009C4" Offset="0x9C4" />
<Animation Name="object_rd_Anim_000F1C" Offset="0xF1C" />
<Animation Name="object_rd_Anim_001600" Offset="0x1600" />
<Texture Name="object_rd_Tex_001610" OutName="tex_001610" Format="rgba16" Width="64" Height="32" Offset="0x1610" />
<Texture Name="object_rd_Tex_002610" OutName="tex_002610" Format="rgba16" Width="32" Height="16" Offset="0x2610" />
<DList Name="object_rd_DL_004270" Offset="0x4270" />
<DList Name="object_rd_DL_004350" Offset="0x4350" />
<DList Name="object_rd_DL_0044C0" Offset="0x44C0" />
<DList Name="object_rd_DL_004628" Offset="0x4628" />
<DList Name="object_rd_DL_004730" Offset="0x4730" />
<DList Name="object_rd_DL_004830" Offset="0x4830" />
<DList Name="object_rd_DL_004930" Offset="0x4930" />
<DList Name="object_rd_DL_004A38" Offset="0x4A38" />
<DList Name="object_rd_DL_004B38" Offset="0x4B38" />
<DList Name="object_rd_DL_004C38" Offset="0x4C38" />
<DList Name="object_rd_DL_004D48" Offset="0x4D48" />
<DList Name="object_rd_DL_004E40" Offset="0x4E40" />
<DList Name="object_rd_DL_004F58" Offset="0x4F58" />
<DList Name="object_rd_DL_005068" Offset="0x5068" />
<DList Name="object_rd_DL_005160" Offset="0x5160" />
<Limb Name="object_rd_Standardlimb_005258" Type="Standard" Offset="0x5258" />
<Limb Name="object_rd_Standardlimb_005264" Type="Standard" Offset="0x5264" />
<Limb Name="object_rd_Standardlimb_005270" Type="Standard" Offset="0x5270" />
<Limb Name="object_rd_Standardlimb_00527C" Type="Standard" Offset="0x527C" />
<Limb Name="object_rd_Standardlimb_005288" Type="Standard" Offset="0x5288" />
<Limb Name="object_rd_Standardlimb_005294" Type="Standard" Offset="0x5294" />
<Limb Name="object_rd_Standardlimb_0052A0" Type="Standard" Offset="0x52A0" />
<Limb Name="object_rd_Standardlimb_0052AC" Type="Standard" Offset="0x52AC" />
<Limb Name="object_rd_Standardlimb_0052B8" Type="Standard" Offset="0x52B8" />
<Limb Name="object_rd_Standardlimb_0052C4" Type="Standard" Offset="0x52C4" />
<Limb Name="object_rd_Standardlimb_0052D0" Type="Standard" Offset="0x52D0" />
<Limb Name="object_rd_Standardlimb_0052DC" Type="Standard" Offset="0x52DC" />
<Limb Name="object_rd_Standardlimb_0052E8" Type="Standard" Offset="0x52E8" />
<Limb Name="object_rd_Standardlimb_0052F4" Type="Standard" Offset="0x52F4" />
<Limb Name="object_rd_Standardlimb_005300" Type="Standard" Offset="0x5300" />
<Limb Name="object_rd_Standardlimb_00530C" Type="Standard" Offset="0x530C" />
<Limb Name="object_rd_Standardlimb_005318" Type="Standard" Offset="0x5318" />
<Limb Name="object_rd_Standardlimb_005324" Type="Standard" Offset="0x5324" />
<Limb Name="object_rd_Standardlimb_005330" Type="Standard" Offset="0x5330" />
<Limb Name="object_rd_Standardlimb_00533C" Type="Standard" Offset="0x533C" />
<Limb Name="object_rd_Standardlimb_005348" Type="Standard" Offset="0x5348" />
<Limb Name="object_rd_Standardlimb_005354" Type="Standard" Offset="0x5354" />
<Limb Name="object_rd_Standardlimb_005360" Type="Standard" Offset="0x5360" />
<Limb Name="object_rd_Standardlimb_00536C" Type="Standard" Offset="0x536C" />
<Limb Name="object_rd_Standardlimb_005378" Type="Standard" Offset="0x5378" />
<Skeleton Name="object_rd_Skel_0053E8" Type="Flex" LimbType="Standard" Offset="0x53E8" />
<Animation Name="object_rd_Anim_005DF4" Offset="0x5DF4" />
<Animation Name="object_rd_Anim_0061E4" Offset="0x61E4" />
<Animation Name="object_rd_Anim_006678" Offset="0x6678" />
<Animation Name="object_rd_Anim_006B08" Offset="0x6B08" />
<Animation Name="object_rd_Anim_006EEC" Offset="0x6EEC" />
<Animation Name="object_rd_Anim_0073A4" Offset="0x73A4" />
<Animation Name="object_rd_Anim_007BBC" Offset="0x7BBC" />
<Animation Name="object_rd_Anim_0081A8" Offset="0x81A8" />
<Animation Name="object_rd_Anim_009298" Offset="0x9298" />
<Animation Name="object_rd_Anim_009900" Offset="0x9900" />
<Animation Name="object_rd_Anim_00A450" Offset="0xA450" />
<Animation Name="object_rd_Anim_00ABE0" Offset="0xABE0" />
<Texture Name="object_rd_Tex_00ABF0" OutName="tex_00ABF0" Format="rgba16" Width="32" Height="64" Offset="0xABF0" />
<Texture Name="object_rd_Tex_00BBF0" OutName="tex_00BBF0" Format="rgba16" Width="32" Height="64" Offset="0xBBF0" />
<Texture Name="object_rd_Tex_00CBF0" OutName="tex_00CBF0" Format="rgba16" Width="16" Height="32" Offset="0xCBF0" />
<Texture Name="object_rd_Tex_00CFF0" OutName="tex_00CFF0" Format="rgba16" Width="16" Height="32" Offset="0xCFF0" />
<Texture Name="object_rd_Tex_00D3F0" OutName="tex_00D3F0" Format="i8" Width="32" Height="32" Offset="0xD3F0" />
<Texture Name="object_rd_Tex_00D7F0" OutName="tex_00D7F0" Format="rgba16" Width="32" Height="64" Offset="0xD7F0" />
<Texture Name="object_rd_Tex_00E7F0" OutName="tex_00E7F0" Format="rgba16" Width="32" Height="16" Offset="0xE7F0" />
<DList Name="object_rd_DL_00FAB0" Offset="0xFAB0" />
<DList Name="object_rd_DL_00FBD8" Offset="0xFBD8" />
<DList Name="object_rd_DL_00FED0" Offset="0xFED0" />
<DList Name="object_rd_DL_00FFB0" Offset="0xFFB0" />
<DList Name="object_rd_DL_010070" Offset="0x10070" />
<DList Name="object_rd_DL_010140" Offset="0x10140" />
<DList Name="object_rd_DL_010218" Offset="0x10218" />
<DList Name="object_rd_DL_0102E8" Offset="0x102E8" />
<DList Name="object_rd_DL_0103B8" Offset="0x103B8" />
<DList Name="object_rd_DL_0104F8" Offset="0x104F8" />
<DList Name="object_rd_DL_0105D8" Offset="0x105D8" />
<DList Name="object_rd_DL_0106A0" Offset="0x106A0" />
<DList Name="object_rd_DL_010768" Offset="0x10768" />
<DList Name="object_rd_DL_010848" Offset="0x10848" />
<DList Name="object_rd_DL_010910" Offset="0x10910" />
<Limb Name="object_rd_Standardlimb_0109F8" Type="Standard" Offset="0x109F8" />
<Limb Name="object_rd_Standardlimb_010A04" Type="Standard" Offset="0x10A04" />
<Limb Name="object_rd_Standardlimb_010A10" Type="Standard" Offset="0x10A10" />
<Limb Name="object_rd_Standardlimb_010A1C" Type="Standard" Offset="0x10A1C" />
<Limb Name="object_rd_Standardlimb_010A28" Type="Standard" Offset="0x10A28" />
<Limb Name="object_rd_Standardlimb_010A34" Type="Standard" Offset="0x10A34" />
<Limb Name="object_rd_Standardlimb_010A40" Type="Standard" Offset="0x10A40" />
<Limb Name="object_rd_Standardlimb_010A4C" Type="Standard" Offset="0x10A4C" />
<Limb Name="object_rd_Standardlimb_010A58" Type="Standard" Offset="0x10A58" />
<Limb Name="object_rd_Standardlimb_010A64" Type="Standard" Offset="0x10A64" />
<Limb Name="object_rd_Standardlimb_010A70" Type="Standard" Offset="0x10A70" />
<Limb Name="object_rd_Standardlimb_010A7C" Type="Standard" Offset="0x10A7C" />
<Limb Name="object_rd_Standardlimb_010A88" Type="Standard" Offset="0x10A88" />
<Limb Name="object_rd_Standardlimb_010A94" Type="Standard" Offset="0x10A94" />
<Limb Name="object_rd_Standardlimb_010AA0" Type="Standard" Offset="0x10AA0" />
<Limb Name="object_rd_Standardlimb_010AAC" Type="Standard" Offset="0x10AAC" />
<Limb Name="object_rd_Standardlimb_010AB8" Type="Standard" Offset="0x10AB8" />
<Limb Name="object_rd_Standardlimb_010AC4" Type="Standard" Offset="0x10AC4" />
<Limb Name="object_rd_Standardlimb_010AD0" Type="Standard" Offset="0x10AD0" />
<Limb Name="object_rd_Standardlimb_010ADC" Type="Standard" Offset="0x10ADC" />
<Limb Name="object_rd_Standardlimb_010AE8" Type="Standard" Offset="0x10AE8" />
<Limb Name="object_rd_Standardlimb_010AF4" Type="Standard" Offset="0x10AF4" />
<Limb Name="object_rd_Standardlimb_010B00" Type="Standard" Offset="0x10B00" />
<Limb Name="object_rd_Standardlimb_010B0C" Type="Standard" Offset="0x10B0C" />
<Limb Name="object_rd_Standardlimb_010B18" Type="Standard" Offset="0x10B18" />
<Skeleton Name="object_rd_Skel_010B88" Type="Flex" LimbType="Standard" Offset="0x10B88" />
<Animation Name="object_rd_Anim_0113EC" Offset="0x113EC" />
<Animation Name="object_rd_Anim_0118D8" Offset="0x118D8" />
<Animation Name="object_rd_Anim_011DB8" Offset="0x11DB8" />
<Animation Name="object_rd_Anim_01216C" Offset="0x1216C" />
<Animation Name="gGibdoRedeadArmsUpStartAnim" Offset="0x9C4" /> <!-- Original name is "gibud_banzai" ("cheering"?)-->
<Animation Name="gGibdoRedeadArmsUpLoopAnim" Offset="0xF1C" /> <!-- Original name is "gibud_banzai_loop" -->
<Animation Name="gGibdoRedeadConvulsionAnim" Offset="0x1600" /> <!-- Original name is "gibud_keiren" ("convulsion") -->
<Texture Name="gGibdoWrappingTex" OutName="gibdo_wrapping" Format="rgba16" Width="64" Height="32" Offset="0x1610" />
<Texture Name="gGibdoEyeTex" OutName="gibdo_eye" Format="rgba16" Width="32" Height="16" Offset="0x2610" />
<DList Name="gGibdoPelvisDL" Offset="0x4270" />
<DList Name="gGibdoHeadDL" Offset="0x4350" />
<DList Name="gGibdoTorsoDL" Offset="0x44C0" />
<DList Name="gGibdoRightShoulderAndUpperArmDL" Offset="0x4628" />
<DList Name="gGibdoRightForearmDL" Offset="0x4730" />
<DList Name="gGibdoRightHandDL" Offset="0x4830" />
<DList Name="gGibdoLeftShoulderAndUpperArmDL" Offset="0x4930" />
<DList Name="gGibdoLeftForearmDL" Offset="0x4A38" />
<DList Name="gGibdoLeftHandDL" Offset="0x4B38" />
<DList Name="gGibdoRightThighDL" Offset="0x4C38" />
<DList Name="gGibdoRightShinDL" Offset="0x4D48" />
<DList Name="gGibdoRightFootDL" Offset="0x4E40" />
<DList Name="gGibdoLeftThighDL" Offset="0x4F58" />
<DList Name="gGibdoLeftShinDL" Offset="0x5068" />
<DList Name="gGibdoLeftFootDL" Offset="0x5160" />
<Limb Name="gGibdoRootLimb" Type="Standard" EnumName="GIBDO_LIMB_ROOT" Offset="0x5258" />
<Limb Name="gGibdoLeftLegRootLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_LEG_ROOT" Offset="0x5264" />
<Limb Name="gGibdoLeftThighLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_THIGH" Offset="0x5270" />
<Limb Name="gGibdoLeftShinLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_SHIN" Offset="0x527C" />
<Limb Name="gGibdoLeftAnkleLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_ANKLE" Offset="0x5288" />
<Limb Name="gGibdoLeftFootLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_FOOT" Offset="0x5294" />
<Limb Name="gGibdoRightLegRootLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_LEG_ROOT" Offset="0x52A0" />
<Limb Name="gGibdoRightThighLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_THIGH" Offset="0x52AC" />
<Limb Name="gGibdoRightShinLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_SHIN" Offset="0x52B8" />
<Limb Name="gGibdoRightAnkleLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_ANKLE" Offset="0x52C4" />
<Limb Name="gGibdoRightFootLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_FOOT" Offset="0x52D0" />
<Limb Name="gGibdoUpperBodyRootLimb" Type="Standard" EnumName="GIBDO_LIMB_UPPER_BODY_ROOT" Offset="0x52DC" />
<Limb Name="gGibdoUpperBodyLimb" Type="Standard" EnumName="GIBDO_LIMB_UPPER_BODY" Offset="0x52E8" />
<Limb Name="gGibdoTorsoLimb" Type="Standard" EnumName="GIBDO_LIMB_TORSO" Offset="0x52F4" />
<Limb Name="gGibdoLeftArmRootLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_ARM_ROOT" Offset="0x5300" />
<Limb Name="gGibdoLeftShoulderAndUpperArmLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_SHOULDER_AND_UPPER_ARM" Offset="0x530C" />
<Limb Name="gGibdoLeftForearmLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_FOREARM" Offset="0x5318" />
<Limb Name="gGibdoLeftHandLimb" Type="Standard" EnumName="GIBDO_LIMB_LEFT_HAND" Offset="0x5324" />
<Limb Name="gGibdoRightArmRootLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_ARM_ROOT" Offset="0x5330" />
<Limb Name="gGibdoRightShoulderAndUpperArmLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM" Offset="0x533C" />
<Limb Name="gGibdoRightForearmLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_FOREARM" Offset="0x5348" />
<Limb Name="gGibdoRightHandLimb" Type="Standard" EnumName="GIBDO_LIMB_RIGHT_HAND" Offset="0x5354" />
<Limb Name="gGibdoHeadRootLimb" Type="Standard" EnumName="GIBDO_LIMB_HEAD_ROOT" Offset="0x5360" />
<Limb Name="gGibdoHeadLimb" Type="Standard" EnumName="GIBDO_LIMB_HEAD" Offset="0x536C" />
<Limb Name="gGibdoPelvisLimb" Type="Standard" EnumName="GIBDO_LIMB_PELVIS" Offset="0x5378" />
<Skeleton Name="gGibdoSkel" Type="Flex" LimbType="Standard" LimbNone="GIBDO_LIMB_NONE" LimbMax="GIBDO_LIMB_MAX" EnumName="GibdoLimbs" Offset="0x53E8" />
<Animation Name="gGibdoRedeadSlumpStartAnim" Offset="0x5DF4" /> <!-- Original name is "gibud_stop" -->
<Animation Name="gGibdoRedeadSlumpLoopAnim" Offset="0x61E4" /> <!-- Original name is "gibud_stop_loop" -->
<Animation Name="gGibdoRedeadGrabAttackAnim" Offset="0x6678" /> <!-- Original name is "re_dead_attack" -->
<Animation Name="gGibdoRedeadGrabEndAnim" Offset="0x6B08" /> <!-- Original name is "re_dead_attack_end" -->
<Animation Name="gGibdoRedeadGrabStartAnim" Offset="0x6EEC" /> <!-- Original name is "re_dead_attack_start" -->
<Animation Name="gGibdoRedeadLookBackAnim" Offset="0x73A4" /> <!-- Original name is "re_dead_back_turn" -->
<Animation Name="gGibdoRedeadWipingTearsAnim" Offset="0x7BBC" /> <!-- Original name is "re_dead_cry" -->
<Animation Name="gGibdoRedeadSobbingAnim" Offset="0x81A8" /> <!-- Original name is "re_dead_cryB" -->
<Animation Name="gGibdoRedeadDeathAnim" Offset="0x9298" /> <!-- Original name is "re_dead_down" -->
<Animation Name="gGibdoRedeadDamageAnim" Offset="0x9900" /> <!-- Original name is "re_dead_hit" -->
<Animation Name="gGibdoRedeadStandUpAnim" Offset="0xA450" /> <!-- Original name is "re_dead_standing" -->
<Animation Name="gGibdoRedeadIdleAnim" Offset="0xABE0" /> <!-- Original name is "re_dead_wait" -->
<Texture Name="gRedeadBackTex" OutName="redead_back" Format="rgba16" Width="32" Height="64" Offset="0xABF0" />
<Texture Name="gRedeadTorsoTex" OutName="redead_torso" Format="rgba16" Width="32" Height="64" Offset="0xBBF0" />
<Texture Name="gRedeadFingersAndToesTex" OutName="redead_fingers_and_toes" Format="rgba16" Width="16" Height="32" Offset="0xCBF0" />
<Texture Name="gRedeadMuscleTex" OutName="redead_muscle" Format="rgba16" Width="16" Height="32" Offset="0xCFF0" />
<Texture Name="gRedeadMaskTex" OutName="redead_mask" Format="i8" Width="32" Height="32" Offset="0xD3F0" />
<Texture Name="gRedeadFaceTex" OutName="redead_face" Format="rgba16" Width="32" Height="64" Offset="0xD7F0" />
<Texture Name="gRedeadHipsTex" OutName="redead_hips" Format="rgba16" Width="32" Height="16" Offset="0xE7F0" />
<DList Name="gRedeadPelvisDL" Offset="0xFAB0" />
<DList Name="gRedeadTorsoDL" Offset="0xFBD8" />
<DList Name="gRedeadLeftShoulderAndUpperArmDL" Offset="0xFED0" />
<DList Name="gRedeadLeftForearmDL" Offset="0xFFB0" />
<DList Name="gRedeadLeftHandDL" Offset="0x10070" />
<DList Name="gRedeadRightShoulderAndUpperArmDL" Offset="0x10140" />
<DList Name="gRedeadRightForearmDL" Offset="0x10218" />
<DList Name="gRedeadRightHandDL" Offset="0x102E8" />
<DList Name="gRedeadHeadDL" Offset="0x103B8" />
<DList Name="gRedeadLeftThighDL" Offset="0x104F8" />
<DList Name="gRedeadLeftShinDL" Offset="0x105D8" />
<DList Name="gRedeadLeftFootDL" Offset="0x106A0" />
<DList Name="gRedeadRightThighDL" Offset="0x10768" />
<DList Name="gRedeadRightShinDL" Offset="0x10848" />
<DList Name="gRedeadRightFootDL" Offset="0x10910" />
<Limb Name="gRedeadRootLimb" Type="Standard" EnumName="REDEAD_LIMB_ROOT" Offset="0x109F8" />
<Limb Name="gRedeadLeftLegRootLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_LEG_ROOT" Offset="0x10A04" />
<Limb Name="gRedeadLeftThighLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_THIGH" Offset="0x10A10" />
<Limb Name="gRedeadLeftShinLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_SHIN" Offset="0x10A1C" />
<Limb Name="gRedeadLeftAnkleLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_ANKLE" Offset="0x10A28" />
<Limb Name="gRedeadLeftFootLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_FOOT" Offset="0x10A34" />
<Limb Name="gRedeadRightLegRootLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_LEG_ROOT" Offset="0x10A40" />
<Limb Name="gRedeadRightThighLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_THIGH" Offset="0x10A4C" />
<Limb Name="gRedeadRightShinLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_SHIN" Offset="0x10A58" />
<Limb Name="gRedeadRightAnkleLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_ANKLE" Offset="0x10A64" />
<Limb Name="gRedeadRightFootLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_FOOT" Offset="0x10A70" />
<Limb Name="gRedeadUpperBodyRootLimb" Type="Standard" EnumName="REDEAD_LIMB_UPPER_BODY_ROOT" Offset="0x10A7C" />
<Limb Name="gRedeadUpperBodyLimb" Type="Standard" EnumName="REDEAD_LIMB_UPPER_BODY" Offset="0x10A88" />
<Limb Name="gRedeadTorsoLimb" Type="Standard" EnumName="REDEAD_LIMB_TORSO" Offset="0x10A94" />
<Limb Name="gRedeadLeftArmRootLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_ARM_ROOT" Offset="0x10AA0" />
<Limb Name="gRedeadLeftShoulderAndUpperArmLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_SHOULDER_AND_UPPER_ARM" Offset="0x10AAC" />
<Limb Name="gRedeadLeftForearmLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_FOREARM" Offset="0x10AB8" />
<Limb Name="gRedeadLeftHandLimb" Type="Standard" EnumName="REDEAD_LIMB_LEFT_HAND" Offset="0x10AC4" />
<Limb Name="gRedeadRightArmRootLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_ARM_ROOT" Offset="0x10AD0" />
<Limb Name="gRedeadRightShoulderAndUpperArmLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM" Offset="0x10ADC" />
<Limb Name="gRedeadRightForearmLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_FOREARM" Offset="0x10AE8" />
<Limb Name="gRedeadRightHandLimb" Type="Standard" EnumName="REDEAD_LIMB_RIGHT_HAND" Offset="0x10AF4" />
<Limb Name="gRedeadHeadRootLimb" Type="Standard" EnumName="REDEAD_LIMB_HEAD_ROOT" Offset="0x10B00" />
<Limb Name="gRedeadHeadLimb" Type="Standard" EnumName="REDEAD_LIMB_HEAD" Offset="0x10B0C" />
<Limb Name="gRedeadPelvisLimb" Type="Standard" EnumName="REDEAD_LIMB_PELVIS" Offset="0x10B18" />
<Skeleton Name="gRedeadSkel" Type="Flex" LimbType="Standard" LimbNone="REDEAD_LIMB_NONE" LimbMax="REDEAD_LIMB_MAX" EnumName="RedeadLimbs" Offset="0x10B88" />
<Animation Name="gGibdoRedeadWalkAnim" Offset="0x113EC" /> <!-- Original name is "re_dead_walk" -->
<Animation Name="gGibdoRedeadPirouetteAnim" Offset="0x118D8" /> <!-- Original name is "wait_baree" ("ballet") -->
<Animation Name="gGibdoRedeadClappingDanceAnim" Offset="0x11DB8" /> <!-- Original name is "wait_dance_b" -->
<Animation Name="gGibdoRedeadSquattingDanceAnim" Offset="0x1216C" /> <!-- Original name is "wait_kosakku" ("Cossack" as in "Cossack Dance") -->
</File>
</Root>

File diff suppressed because it is too large Load Diff

View File

@ -2,49 +2,57 @@
#define Z_EN_RAILGIBUD_H
#include "global.h"
#include "objects/object_rd/object_rd.h"
struct EnRailgibud;
typedef void (*EnRailgibudActionFunc)(struct EnRailgibud*, GlobalContext*);
#define ENRAILGIBUD_GET_7F(thisx) ((thisx)->params & 0x7F)
#define ENRAILGIBUD_GET_80(thisx) ((thisx)->params & 0x80)
#define ENRAILGIBUD_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define ENRAILGIBUD_GET_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x7F)
#define ENRAILGIBUD_IS_CUTSCENE_TYPE(thisx) ((thisx)->params & 0x80)
#define ENRAILGIBUD_GET_PATH(thisx) (((thisx)->params & 0xFF00) >> 8)
typedef struct EnRailgibud {
/* 0x0000 */ Actor actor;
/* 0x0144 */ ColliderCylinder collider;
/* 0x0190 */ SkelAnime skelAnime;
/* 0x01D4 */ EnRailgibudActionFunc actionFunc;
/* 0x01D8 */ Vec3f unk_1D8[15];
/* 0x028C */ s32 unk_28C;
/* 0x01D8 */ Vec3f limbPos[15];
/* 0x028C */ s32 limbIndex;
/* 0x0290 */ UNK_TYPE1 unk290[0x4];
/* 0x0294 */ Vec3s* unk_294;
/* 0x0298 */ s32 unk_298;
/* 0x029C */ s32 unk_29C;
/* 0x02A0 */ f32 unk_2A0;
/* 0x02A4 */ f32 unk_2A4;
/* 0x02A8 */ Vec3s jointTable[26];
/* 0x0344 */ Vec3s morphTable[26];
/* 0x03E0 */ UNK_TYPE1 unk3E0[0x2];
/* 0x03E2 */ s16 unk_3E2;
/* 0x03E4 */ UNK_TYPE1 unk3E4[0x4];
/* 0x03E8 */ s16 unk_3E8;
/* 0x03EA */ UNK_TYPE1 unk3EA[0x2];
/* 0x03EC */ s16 unk_3EC;
/* 0x03EE */ s16 unk_3EE;
/* 0x03F0 */ s16 unk_3F0;
/* 0x03F2 */ s16 unk_3F2;
/* 0x03F4 */ s16 unk_3F4;
/* 0x03F6 */ s16 unk_3F6;
/* 0x03F8 */ s16 unk_3F8;
/* 0x03FA */ s16 unk_3FA;
/* 0x03FC */ u16 unk_3FC;
/* 0x03FE */ u16 unk_3FE;
/* 0x0294 */ Vec3s* points;
/* 0x0298 */ s32 currentPoint;
/* 0x029C */ s32 pathCount;
/* 0x02A0 */ f32 effectAlpha;
/* 0x02A4 */ f32 effectScale;
/* 0x02A8 */ Vec3s jointTable[GIBDO_LIMB_MAX];
/* 0x0344 */ Vec3s morphTable[GIBDO_LIMB_MAX];
/* 0x03E0 */ Vec3s headRotation;
/* 0x03E6 */ Vec3s upperBodyRotation;
/* 0x03EC */ s16 shouldWalkForward; // Only used by the "main" Gibdo
/* 0x03EE */ s16 shouldWalkForwardNextFrame; // Only used by the "main" Gibdo
/* 0x03F0 */ union {
s16 grabState;
s16 cutsceneAnimationIndex;
};
/* 0x03F2 */ union {
s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero
s16 grabDamageTimer;
s16 headShakeTimer;
s16 stunTimer;
s16 deathTimer;
s16 sinkTimer;
};
/* 0x03F4 */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
/* 0x03F6 */ s16 effectTimer;
/* 0x03F8 */ s16 type;
/* 0x03FA */ s16 isInvincible;
/* 0x03FC */ u16 actorActionCommand;
/* 0x03FE */ u16 csAction;
/* 0x0400 */ u16 textId;
/* 0x0402 */ s16 unk_402;
/* 0x0404 */ u8 unk_404;
/* 0x0405 */ s8 unk_405;
/* 0x0402 */ s16 timeInitialized; // unused other than setting it
/* 0x0404 */ u8 effectType;
/* 0x0405 */ s8 unk_405; // related to player->unk_ADD
} EnRailgibud; // size = 0x408
extern const ActorInit En_Railgibud_InitVars;

File diff suppressed because it is too large Load Diff

View File

@ -2,58 +2,74 @@
#define Z_EN_RD_H
#include "global.h"
#include "objects/object_rd/object_rd.h"
struct EnRd;
typedef void (*EnRdActionFunc)(struct EnRd*, GlobalContext*);
typedef void (*EnRdFunc)(struct EnRd*);
typedef void (*EnRdSetupDanceFunc)(struct EnRd*);
#define ENRD_GET_80(thisx) ((thisx)->params & 0x80)
#define ENRD_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_RD_GET_80(thisx) ((thisx)->params & 0x80)
#define EN_RD_GET_FLAGS(thisx) (((thisx)->params & 0xFF00) >> 8)
#define EN_RD_GET_TYPE(thisx) ((thisx)->params)
#define EN_RD_GET_SWITCH_FLAG(this) ((this)->flags & 0x7F)
enum {
/* -2 */ ENRD_GET_MINUS_2 = -2,
/* -1 */ ENRD_GET_MINUS_1 = -1,
/* 0x00 */ ENRD_GET_0 = 0,
/* 0x01 */ ENRD_GET_1,
/* 0x02 */ ENRD_GET_2,
/* 0x03 */ ENRD_GET_3,
/* 0x04 */ ENRD_GET_4,
/* 0x05 */ ENRD_GET_5,
};
#define EN_RD_FLAG_CANNOT_FREEZE_PLAYER (1 << 7)
typedef enum {
/* -3 */ EN_RD_TYPE_GIBDO_RISING_OUT_OF_COFFIN = -3, // Unused OoT leftover
/* -2 */ EN_RD_TYPE_GIBDO = -2, // Unused OoT leftover
/* -1 */ EN_RD_TYPE_DOES_NOT_MOURN = -1, // Unused OoT leftover
/* 0 */ EN_RD_TYPE_DOES_NOT_MOURN_IF_WALKING = 0, // Unused OoT leftover. Still mourns, but it must come to a complete stop first
/* 1 */ EN_RD_TYPE_REGULAR, // Unused OoT leftover
/* 2 */ EN_RD_TYPE_CRYING, // Unused in the final game
/* 3 */ EN_RD_TYPE_INVISIBLE, // Unused OoT leftover
/* 4 */ EN_RD_TYPE_FROZEN, // Unused in the final game
/* 5 */ EN_RD_TYPE_SQUATTING_DANCE,
/* 6 */ EN_RD_TYPE_CLAPPING_DANCE,
/* 7 */ EN_RD_TYPE_PIROUETTE,
} EnRdType;
typedef struct EnRd {
/* 0x0000 */ Actor actor;
/* 0x0144 */ SkelAnime skelAnime;
/* 0x0188 */ EnRdActionFunc actionFunc;
/* 0x018C */ EnRdFunc unkFunc;
/* 0x018C */ EnRdSetupDanceFunc setupDanceFunc;
/* 0x0190 */ ColliderCylinder collider;
/* 0x01DC */ Vec3f unk_1DC[15];
/* 0x0290 */ s32 unk_290;
/* 0x0294 */ f32 unk_294;
/* 0x0298 */ f32 unk_298;
/* 0x029C */ Vec3s jointTable[26];
/* 0x0338 */ Vec3s morphTable[26];
/* 0x03D4 */ s16 unk_3D4;
/* 0x03D6 */ s16 unk_3D6;
/* 0x03D8 */ s16 unk_3D8;
/* 0x03DA */ s16 unk_3DA;
/* 0x03DC */ s16 unk_3DC;
/* 0x03DE */ s16 unk_3DE;
/* 0x03E0 */ s16 unk_3E0;
/* 0x03E2 */ s16 unk_3E2;
/* 0x03E4 */ s16 unk_3E4;
/* 0x03E6 */ s16 unk_3E6;
/* 0x03E8 */ u8 unk_3E8;
/* 0x03E9 */ u8 unk_3E9;
/* 0x03EA */ u8 unk_3EA;
/* 0x03EB */ u8 unk_3EB;
/* 0x03EC */ u8 unk_3EC;
/* 0x03ED */ u8 unk_3ED;
/* 0x03EE */ u8 unk_3EE;
/* 0x03EF */ u8 unk_3EF;
/* 0x03F0 */ u8 unk_3F0;
/* 0x03F1 */ s8 unk_3F1;
/* 0x01DC */ Vec3f limbPos[15];
/* 0x0290 */ s32 limbIndex;
/* 0x0294 */ f32 effectAlpha;
/* 0x0298 */ f32 effectScale;
/* 0x029C */ Vec3s jointTable[REDEAD_LIMB_MAX];
/* 0x0338 */ Vec3s morphTable[REDEAD_LIMB_MAX];
/* 0x03D4 */ s16 headShakeTimer;
/* 0x03D6 */ union {
s16 animationJudderTimer;
s16 stunTimer;
s16 deathTimer;
s16 coffinRiseForwardAccelTimer;
};
/* 0x03D8 */ s16 headYRotation;
/* 0x03DA */ s16 upperBodyYRotation;
/* 0x03DC */ s16 flags;
/* 0x03DE */ s16 alpha;
/* 0x03E0 */ s16 sunsSongStunTimer;
/* 0x03E2 */ UNK_TYPE1 unk3E2[0x2];
/* 0x03E4 */ union {
s16 danceEndTimer;
s16 pirouetteRotationalVelocity;
};
/* 0x03E6 */ s16 effectTimer;
/* 0x03E8 */ u8 effectType;
/* 0x03E9 */ u8 stunnedBySunsSong;
/* 0x03EA */ u8 grabDamageTimer;
/* 0x03EB */ u8 grabState;
/* 0x03EC */ u8 isMourning;
/* 0x03ED */ u8 playerStunWaitTimer; // Cannot stun the player if this is non-zero
/* 0x03EE */ u8 grabWaitTimer; // Cannot grab the player if this is non-zero
/* 0x03EF */ u8 action;
/* 0x03F0 */ u8 damageEffect;
/* 0x03F1 */ s8 unk_3F1; // related to player->unk_ADD
} EnRd; // size = 0x3F4
extern const ActorInit En_Rd_InitVars;

View File

@ -5,9 +5,8 @@
*/
#include "z_en_talk_gibud.h"
#include "objects/object_rd/object_rd.h"
#define FLAGS 0x00000415
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_4 | ACTOR_FLAG_10 | ACTOR_FLAG_400)
#define THIS ((EnTalkGibud*)thisx)
@ -18,8 +17,8 @@ void EnTalkGibud_Draw(Actor* thisx, GlobalContext* globalCtx);
void EnTalkGibud_SetupIdle(EnTalkGibud* this);
void EnTalkGibud_Idle(EnTalkGibud* this, GlobalContext* globalCtx);
void EnTalkGibud_SetupAttemptPlayerStun(EnTalkGibud* this);
void EnTalkGibud_AttemptPlayerStun(EnTalkGibud* this, GlobalContext* globalCtx);
void EnTalkGibud_SetupAttemptPlayerFreeze(EnTalkGibud* this);
void EnTalkGibud_AttemptPlayerFreeze(EnTalkGibud* this, GlobalContext* globalCtx);
void EnTalkGibud_SetupWalkToPlayer(EnTalkGibud* this);
void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, GlobalContext* globalCtx);
void EnTalkGibud_SetupGrab(EnTalkGibud* this);
@ -55,23 +54,6 @@ typedef struct {
/* 0xC */ s16 isBottledItem;
} EnTalkGibudRequestedItem;
typedef enum {
/* 0 */ EN_TALK_GIBUD_ANIMATION_GRAB_ATTACK,
/* 1 */ EN_TALK_GIBUD_ANIMATION_GRAB_END,
/* 2 */ EN_TALK_GIBUD_ANIMATION_GRAB_START,
/* 3 */ EN_TALK_GIBUD_ANIMATION_LOOK_AWAY,
/* 4 */ EN_TALK_GIBUD_ANIMATION_CROUCH_WIPING_TEARS,
/* 5 */ EN_TALK_GIBUD_ANIMATION_CROUCH_CRYING,
/* 6 */ EN_TALK_GIBUD_ANIMATION_DEATH,
/* 7 */ EN_TALK_GIBUD_ANIMATION_DAMAGE,
/* 8 */ EN_TALK_GIBUD_ANIMATION_CROUCH_END,
/* 9 */ EN_TALK_GIBUD_ANIMATION_IDLE,
/* 10 */ EN_TALK_GIBUD_ANIMATION_WALK,
/* 11 */ EN_TALK_GIBUD_ANIMATION_DANCE_SQUAT,
/* 12 */ EN_TALK_GIBUD_ANIMATION_DANCE_PIROUETTE,
/* 13 */ EN_TALK_GIBUD_ANIMATION_DANCE_CLAP,
} EnTalkGibudAnimations;
typedef enum {
/* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET,
/* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO,
@ -91,6 +73,34 @@ typedef enum {
/* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK,
} EnTalkGibudRequestedItemIndex;
typedef enum {
/* 0 */ EN_TALK_GIBUD_ANIMATION_GRAB_ATTACK,
/* 1 */ EN_TALK_GIBUD_ANIMATION_GRAB_END,
/* 2 */ EN_TALK_GIBUD_ANIMATION_GRAB_START,
/* 3 */ EN_TALK_GIBUD_ANIMATION_LOOK_BACK,
/* 4 */ EN_TALK_GIBUD_ANIMATION_CROUCH_WIPING_TEARS,
/* 5 */ EN_TALK_GIBUD_ANIMATION_CROUCH_CRYING,
/* 6 */ EN_TALK_GIBUD_ANIMATION_DEATH,
/* 7 */ EN_TALK_GIBUD_ANIMATION_DAMAGE,
/* 8 */ EN_TALK_GIBUD_ANIMATION_CROUCH_END,
/* 9 */ EN_TALK_GIBUD_ANIMATION_IDLE,
/* 10 */ EN_TALK_GIBUD_ANIMATION_WALK,
/* 11 */ EN_TALK_GIBUD_ANIMATION_DANCE_SQUAT,
/* 12 */ EN_TALK_GIBUD_ANIMATION_DANCE_PIROUETTE,
/* 13 */ EN_TALK_GIBUD_ANIMATION_DANCE_CLAP,
} EnTalkGibudAnimations;
typedef enum {
/* 0 */ EN_TALK_GIBUD_TYPE_GIBDO,
/* 1 */ EN_TALK_GIBUD_TYPE_REDEAD,
} EnTalkGibudType;
typedef enum {
/* 0 */ EN_TALK_GIBUD_GRAB_START,
/* 1 */ EN_TALK_GIBUD_GRAB_ATTACK,
/* 2 */ EN_TALK_GIBUD_GRAB_RELEASE,
} EnTalkGibudGrabState;
const ActorInit En_Talk_Gibud_InitVars = {
ACTOR_EN_TALK_GIBUD,
ACTORCAT_ENEMY,
@ -104,20 +114,20 @@ const ActorInit En_Talk_Gibud_InitVars = {
};
static AnimationInfo sAnimations[] = {
{ &object_rd_Anim_006678, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &object_rd_Anim_006B08, 0.5f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 0.0f },
{ &object_rd_Anim_006EEC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_0073A4, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_007BBC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_0081A8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &object_rd_Anim_009298, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_009900, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_00A450, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &object_rd_Anim_00ABE0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &object_rd_Anim_0113EC, 0.4f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -8.0f },
{ &object_rd_Anim_01216C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &object_rd_Anim_0118D8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &object_rd_Anim_011DB8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadGrabAttackAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadGrabEndAnim, 0.5f, 0.0f, 0.0f, ANIMMODE_ONCE_INTERP, 0.0f },
{ &gGibdoRedeadGrabStartAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadLookBackAnim, 0.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadWipingTearsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadSobbingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadDeathAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadDamageAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadStandUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
{ &gGibdoRedeadIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadWalkAnim, 0.4f, 0.0f, 0.0f, ANIMMODE_LOOP_INTERP, -8.0f },
{ &gGibdoRedeadSquattingDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadPirouetteAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
{ &gGibdoRedeadClappingDanceAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
};
static ColliderCylinderInit sCylinderInit = {
@ -141,9 +151,9 @@ static ColliderCylinderInit sCylinderInit = {
};
typedef enum {
/* 0x0 */ EN_TALK_GIBUD_DMGEFF_NONE, // Does not interact with the Gibdo/Redead at all
/* 0x1 */ EN_TALK_GIBUD_DMGEFF_STUN, // Stuns without applying any effect
/* 0x2 */ EN_TALK_GIBUD_DMGEFF_FIRE_ARROW, // Damages and changes a Gibdo into a Redead
/* 0x0 */ EN_TALK_GIBUD_DMGEFF_NONE, // Does not interact with the Gibdo/Redead at all
/* 0x1 */ EN_TALK_GIBUD_DMGEFF_STUN, // Stuns without applying any effect
/* 0x2 */ EN_TALK_GIBUD_DMGEFF_FIRE_ARROW, // Damages, applies a fire effect, and changes a Gibdo into a Redead
/* 0x4 */ EN_TALK_GIBUD_DMGEFF_LIGHT_ARROW = 0x4, // Damages and applies a light effect
/* 0xC */ EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC = 0xC, // Stuns and applies an electric effect
/* 0xD */ EN_TALK_GIBUD_DMGEFF_RECOIL, // Deals no damage, but displays hit mark and recoil animation
@ -220,12 +230,14 @@ void EnTalkGibud_Init(Actor* thisx, GlobalContext* globalCtx) {
this->actor.targetMode = 0;
this->actor.hintId = 0x2D;
this->actor.textId = 0;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 28.0f);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_rd_Skel_0053E8, &object_rd_Anim_00ABE0, this->jointTable,
this->morphTable, EN_TALK_GIBUD_LIMB_MAX);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGibdoSkel, &gGibdoRedeadIdleAnim, this->jointTable,
this->morphTable, GIBDO_LIMB_MAX);
Collider_InitCylinder(globalCtx, &this->collider);
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
this->playerStunWaitTimer = 0;
this->grabState = EN_TALK_GIBUD_GRAB_START;
this->grabWaitTimer = 0;
@ -246,6 +258,7 @@ void EnTalkGibud_Init(Actor* thisx, GlobalContext* globalCtx) {
if (this->requestedItemIndex < EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BLUE_POTION) {
this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BLUE_POTION;
}
if (this->requestedItemIndex > EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK) {
this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK;
}
@ -253,6 +266,7 @@ void EnTalkGibud_Init(Actor* thisx, GlobalContext* globalCtx) {
if (this->switchFlag == 0xFF) {
this->switchFlag = -1;
}
if (this->switchFlag != -1 && Flags_GetSwitch(globalCtx, this->switchFlag)) {
Actor_MarkForDeath(&this->actor);
}
@ -277,18 +291,19 @@ void EnTalkGibud_SetupIdle(EnTalkGibud* this) {
*/
void EnTalkGibud_Idle(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->actor.xzDistToPlayer <= 150.0f && func_800B715C(globalCtx)) {
EnTalkGibud_SetupAttemptPlayerStun(this);
EnTalkGibud_SetupAttemptPlayerFreeze(this);
}
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 0x64, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 0x64, 0);
}
void EnTalkGibud_SetupAttemptPlayerStun(EnTalkGibud* this) {
void EnTalkGibud_SetupAttemptPlayerFreeze(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_IDLE);
this->actionFunc = EnTalkGibud_AttemptPlayerStun;
this->actionFunc = EnTalkGibud_AttemptPlayerFreeze;
}
void EnTalkGibud_AttemptPlayerStun(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_AttemptPlayerFreeze(EnTalkGibud* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
s16 rot = this->actor.shape.rot.y + this->headRotation.y + this->upperBodyRotation.y;
s16 yaw = BINANG_SUB(this->actor.yawTowardsPlayer, rot);
@ -300,17 +315,20 @@ void EnTalkGibud_AttemptPlayerStun(EnTalkGibud* this, GlobalContext* globalCtx)
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_AIM);
EnTalkGibud_SetupWalkToPlayer(this);
}
EnTalkGibud_TurnTowardsPlayer(this, globalCtx);
}
void EnTalkGibud_SetupWalkToPlayer(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_WALK);
this->actor.speedXZ = 0.4f;
if (this->actionFunc == EnTalkGibud_AttemptPlayerStun) {
if (this->actionFunc == EnTalkGibud_AttemptPlayerFreeze) {
this->playerStunWaitTimer = 80;
} else {
this->playerStunWaitTimer = 20;
}
this->actionFunc = EnTalkGibud_WalkToPlayer;
}
@ -320,12 +338,13 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, GlobalContext* globalCtx) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0xFA);
this->actor.world.rot = this->actor.shape.rot;
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 100, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 100, 0);
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 0x64, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 0x64, 0);
if (EnTalkGibud_PlayerInRangeWithCorrectState(this, globalCtx) && Actor_IsFacingPlayer(&this->actor, 0x38E3)) {
if (this->grabWaitTimer == 0 && this->actor.xzDistToPlayer <= 45.0f) {
if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) {
player->actor.freezeTimer = 0;
if (gSaveContext.playerForm == PLAYER_FORM_GORON || gSaveContext.playerForm == PLAYER_FORM_DEKU) {
if ((gSaveContext.playerForm == PLAYER_FORM_GORON) || (gSaveContext.playerForm == PLAYER_FORM_DEKU)) {
// If the Gibdo/Redead tries to grab Goron or Deku Link, it will fail to
// do so. It will appear to take damage and shake its head side-to-side.
EnTalkGibud_SetupGrabFail(this);
@ -343,18 +362,19 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, GlobalContext* globalCtx) {
this->playerStunWaitTimer--;
}
}
} else if (this->grabWaitTimer == 0 && this->actor.xzDistToPlayer <= 45.0f) {
} else if ((this->grabWaitTimer == 0) && (this->actor.xzDistToPlayer <= 45.0f)) {
EnTalkGibud_SetupWalkToHome(this);
} else if (EnTalkGibud_PlayerOutOfRange(this, globalCtx)) {
EnTalkGibud_SetupWalkToHome(this);
}
if (this->grabWaitTimer > 0) {
this->grabWaitTimer--;
}
if (Animation_OnFrame(&this->skelAnime, 10.0f) || Animation_OnFrame(&this->skelAnime, 22.0f)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_RIZA_WALK);
} else if (!(globalCtx->gameplayFrames & 0x5F)) {
} else if (!(globalCtx->gameplayFrames & 95)) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_CRY);
}
}
@ -362,25 +382,21 @@ void EnTalkGibud_WalkToPlayer(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_SetupGrab(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_GRAB_START);
this->grabDamageTimer = 0;
this->actor.flags &= ~1;
this->actor.flags &= ~ACTOR_FLAG_1;
this->grabState = EN_TALK_GIBUD_GRAB_START;
this->actionFunc = EnTalkGibud_Grab;
}
void EnTalkGibud_Grab(EnTalkGibud* this, GlobalContext* globalCtx) {
// This function needs to have two different temps for Player to match,
// but you don't have to necessarily use them both. This is just the most
// likely scenario; they got an Actor* pointer in the first temp, then
// casted it to Player* in the second temp.
Actor* playerActor = &GET_PLAYER(globalCtx)->actor;
Player* player = (Player*)playerActor;
Player* player2 = GET_PLAYER(globalCtx);
Player* player = player2;
s32 inPositionToAttack;
u16 damageSfxId;
switch (this->grabState) {
case EN_TALK_GIBUD_GRAB_START:
inPositionToAttack = EnTalkGibud_MoveToIdealGrabPositionAndRotation(this, globalCtx);
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && inPositionToAttack == true) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame) && (inPositionToAttack == true)) {
this->grabState = EN_TALK_GIBUD_GRAB_ATTACK;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_GRAB_ATTACK);
}
@ -403,13 +419,14 @@ void EnTalkGibud_Grab(EnTalkGibud* this, GlobalContext* globalCtx) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_ATTACK);
}
if (!(player->stateFlags2 & 0x80) || player->unk_B62 != 0) {
if (player->unk_B62 != 0 && (player->stateFlags2 & 0x80)) {
if (!(player->stateFlags2 & 0x80) || (player->unk_B62 != 0)) {
if ((player->unk_B62 != 0) && (player->stateFlags2 & 0x80)) {
player->stateFlags2 &= ~0x80;
player->unk_AE8 = 100;
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_GRAB_END);
this->actor.flags |= 1;
this->actor.flags |= ACTOR_FLAG_1;
this->grabState = EN_TALK_GIBUD_GRAB_RELEASE;
this->grabDamageTimer = 0;
}
@ -430,14 +447,15 @@ void EnTalkGibud_Grab(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_SetupGrabFail(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_DAMAGE);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DAMAGE);
this->actionFunc = EnTalkGibud_GrabFail;
this->actor.speedXZ = -2.0f;
this->actionFunc = EnTalkGibud_GrabFail;
}
void EnTalkGibud_GrabFail(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->actor.speedXZ < 0.0f) {
this->actor.speedXZ += 0.15f;
}
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
Math_SmoothStepToS(&this->headRotation.y, 0, 1, 0x12C, 0);
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 0x12C, 0);
@ -481,6 +499,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, GlobalContext* globalCtx) {
} else {
this->actor.speedXZ = 0.0f;
}
Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.home.rot.y, 1, 200, 10);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->actor.world.rot.y == this->actor.home.rot.y) {
@ -491,7 +510,7 @@ void EnTalkGibud_WalkToHome(EnTalkGibud* this, GlobalContext* globalCtx) {
this->actor.world.rot = this->actor.shape.rot;
}
if (EnTalkGibud_PlayerInRangeWithCorrectState(this, globalCtx)) {
if (gSaveContext.playerForm != PLAYER_FORM_GORON && gSaveContext.playerForm != PLAYER_FORM_DEKU &&
if ((gSaveContext.playerForm != PLAYER_FORM_GORON) && (gSaveContext.playerForm != PLAYER_FORM_DEKU) &&
Actor_IsFacingPlayer(&this->actor, 0x38E3)) {
EnTalkGibud_SetupWalkToPlayer(this);
}
@ -502,11 +521,13 @@ void EnTalkGibud_SetupStunned(EnTalkGibud* this) {
this->stunTimer = 10;
this->actor.speedXZ = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->effectTimer != 0) {
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
} else {
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
}
this->actionFunc = EnTalkGibud_Stunned;
}
@ -518,6 +539,7 @@ void EnTalkGibud_Stunned(EnTalkGibud* this, GlobalContext* globalCtx) {
EnTalkGibud_SetupDamage(this);
}
}
if (this->stunTimer != 0) {
this->stunTimer--;
}
@ -529,25 +551,27 @@ void EnTalkGibud_SetupDamage(EnTalkGibud* this) {
this->stunTimer = 0;
this->grabWaitTimer = 0;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actionFunc = EnTalkGibud_Damage;
this->actor.speedXZ = -2.0f;
this->actionFunc = EnTalkGibud_Damage;
}
void EnTalkGibud_Damage(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->actor.speedXZ < 0.0f) {
this->actor.speedXZ += 0.15f;
}
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->unk_3F7 = -1;
this->actor.world.rot.y = this->actor.shape.rot.y;
if (this->effectTimer > 0 && this->effectType == 0 && this->type == EN_TALK_GIBUD_TYPE_GIBDO) {
if ((this->effectTimer > 0) && (this->effectType == 0) && (this->type == EN_TALK_GIBUD_TYPE_GIBDO)) {
this->actor.hintId = 0x2A;
this->actor.flags &= ~(0x8 | 0x1);
this->actor.flags |= (0x4 | 0x1);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_rd_Skel_010B88, NULL, this->jointTable,
this->morphTable, EN_TALK_GIBUD_LIMB_MAX);
this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1);
this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable,
GIBDO_LIMB_MAX);
this->type = EN_TALK_GIBUD_TYPE_REDEAD;
}
if (EnTalkGibud_PlayerOutOfRange(this, globalCtx)) {
EnTalkGibud_SetupWalkToHome(this);
} else {
@ -558,7 +582,7 @@ void EnTalkGibud_Damage(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_SetupDead(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_DEATH);
this->actor.flags &= ~1;
this->actor.flags &= ~ACTOR_FLAG_1;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_DEAD);
this->deathTimer = 0;
this->actionFunc = EnTalkGibud_Dead;
@ -572,18 +596,19 @@ void EnTalkGibud_Dead(EnTalkGibud* this, GlobalContext* globalCtx) {
Math_SmoothStepToS(&this->upperBodyRotation.y, 0, 1, 250, 0);
this->deathTimer++;
}
if (this->deathTimer == 20 && this->effectTimer > 0 && this->effectType == 0 &&
this->type == EN_TALK_GIBUD_TYPE_GIBDO) {
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_rd_Skel_010B88, NULL, this->jointTable,
this->morphTable, EN_TALK_GIBUD_LIMB_MAX);
if ((this->deathTimer == 20) && (this->effectTimer > 0) && (this->effectType == 0) &&
(this->type == EN_TALK_GIBUD_TYPE_GIBDO)) {
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable,
GIBDO_LIMB_MAX);
this->type = EN_TALK_GIBUD_TYPE_REDEAD;
}
}
void EnTalkGibud_SetupRevive(EnTalkGibud* this) {
Animation_Change(&this->skelAnime, &object_rd_Anim_009298, -1.0f, Animation_GetLastFrame(&object_rd_Anim_009298),
Animation_Change(&this->skelAnime, &gGibdoRedeadDeathAnim, -1.0f, Animation_GetLastFrame(&gGibdoRedeadDeathAnim),
0.0f, 2, -8.0f);
this->actor.flags |= 1;
this->actor.flags |= ACTOR_FLAG_1;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_REDEAD_REVERSE);
this->deathTimer = 0;
this->actor.world.rot.y = this->actor.shape.rot.y;
@ -603,38 +628,47 @@ void EnTalkGibud_GetTextIdForRequestedItem(EnTalkGibud* this, GlobalContext* glo
func_801518B0(globalCtx, 0x138C, &this->actor);
this->textId = 0x138C;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BEANS:
func_801518B0(globalCtx, 0x138D, &this->actor);
this->textId = 0x138D;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_SPRING_WATER:
func_801518B0(globalCtx, 0x138E, &this->actor);
this->textId = 0x138E;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_FISH:
func_801518B0(globalCtx, 0x138F, &this->actor);
this->textId = 0x138F;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BUGS:
func_801518B0(globalCtx, 0x1390, &this->actor);
this->textId = 0x1390;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_DEKU_NUTS:
func_801518B0(globalCtx, 0x1391, &this->actor);
this->textId = 0x1391;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS:
func_801518B0(globalCtx, 0x1392, &this->actor);
this->textId = 0x1392;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER:
func_801518B0(globalCtx, 0x1393, &this->actor);
this->textId = 0x1393;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE:
func_801518B0(globalCtx, 0x1394, &this->actor);
this->textId = 0x1394;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK:
func_801518B0(globalCtx, 0x1395, &this->actor);
this->textId = 0x1395;
@ -648,6 +682,7 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, GlobalContext* globalCtx) {
case 0x1388:
EnTalkGibud_GetTextIdForRequestedItem(this, globalCtx);
break;
case 0x138C:
case 0x138D:
case 0x138E:
@ -699,14 +734,17 @@ void EnTalkGibud_CheckPresentedItem(EnTalkGibud* this, GlobalContext* globalCtx)
player->actor.textId = 0x138A;
this->textId = 0x138A;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO:
player->actor.textId = 0x138B;
this->textId = 0x138B;
break;
case EN_TALK_GIBUD_REQUESTED_ITEM_NOT_MET:
player->actor.textId = 0x1389;
this->textId = 0x1389;
break;
default:
break;
}
@ -769,9 +807,11 @@ void EnTalkGibud_Talk(EnTalkGibud* this, GlobalContext* globalCtx) {
case 12:
case 13:
break;
case 5:
EnTalkGibud_GetNextTextBoxId(this, globalCtx);
break;
case 6:
if (func_80147624(globalCtx)) {
if (this->textId == 0x138A) {
@ -784,13 +824,14 @@ void EnTalkGibud_Talk(EnTalkGibud* this, GlobalContext* globalCtx) {
}
player->stateFlags1 |= 0x20;
player->stateFlags1 |= 0x20000000;
this->actor.flags |= 0x100000;
this->actor.flags |= ACTOR_FLAG_100000;
EnTalkGibud_SetupDisappear(this);
} else {
EnTalkGibud_SetupPassiveIdle(this);
}
}
break;
case 16:
EnTalkGibud_CheckPresentedItem(this, globalCtx);
break;
@ -800,7 +841,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_SetupDisappear(EnTalkGibud* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, EN_TALK_GIBUD_ANIMATION_IDLE);
this->actor.flags &= ~1;
this->actor.flags &= ~ACTOR_FLAG_1;
this->disappearanceTimer = 40;
this->actionFunc = EnTalkGibud_Disappear;
}
@ -851,8 +892,9 @@ void EnTalkGibud_FacePlayerWhenTalking(EnTalkGibud* this, GlobalContext* globalC
s32 EnTalkGibud_PlayerInRangeWithCorrectState(EnTalkGibud* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if ((Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) < 150.0f) && !(player->stateFlags1 & 0x2C6080) &&
!(player->stateFlags2 & 0x4080)) {
if ((Actor_DistanceToPoint(&player->actor, &this->actor.home.pos) < 150.0f) &&
!(player->stateFlags1 & (0x200000 | 0x80000 | 0x40000 | 0x4000 | 0x2000 | 0x80)) &&
!(player->stateFlags2 & (0x4000 | 0x80))) {
return true;
}
@ -875,20 +917,20 @@ s32 EnTalkGibud_PlayerOutOfRange(EnTalkGibud* this, GlobalContext* globalCtx) {
}
void EnTalkGibud_CheckForGibdoMask(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->actionFunc != EnTalkGibud_Grab && this->actionFunc != EnTalkGibud_Dead &&
this->actionFunc != EnTalkGibud_Disappear && this->actionFunc != EnTalkGibud_Revive &&
this->actionFunc != EnTalkGibud_Damage && this->actionFunc != EnTalkGibud_Talk) {
if ((this->actionFunc != EnTalkGibud_Grab) && (this->actionFunc != EnTalkGibud_Dead) &&
(this->actionFunc != EnTalkGibud_Disappear) && (this->actionFunc != EnTalkGibud_Revive) &&
(this->actionFunc != EnTalkGibud_Damage) && (this->actionFunc != EnTalkGibud_Talk)) {
if (this->actionFunc != EnTalkGibud_PassiveIdle) {
if (Player_GetMask(globalCtx) == PLAYER_MASK_GIBDO) {
this->actor.flags &= ~(0x4 | 0x1);
this->actor.flags |= (0x8 | 0x1);
this->actor.flags &= ~(ACTOR_FLAG_4 | ACTOR_FLAG_1);
this->actor.flags |= (ACTOR_FLAG_8 | ACTOR_FLAG_1);
this->actor.hintId = 0xFF;
this->actor.textId = 0;
EnTalkGibud_SetupPassiveIdle(this);
}
} else if (Player_GetMask(globalCtx) != PLAYER_MASK_GIBDO) {
this->actor.flags &= ~(0x8 | 0x1);
this->actor.flags |= (0x4 | 0x1);
this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1);
this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1);
if (this->type == EN_TALK_GIBUD_TYPE_REDEAD) {
this->actor.hintId = 0x2A;
} else {
@ -941,7 +983,8 @@ s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, GlobalCont
distanceFromTargetYOffset = Math_SmoothStepToF(&this->actor.shape.yOffset, -1500.0f, 1.0f, 150.0f, 0.0f);
}
if (distanceFromTargetPos == 0.0f && ABS_ALT(distanceFromTargetAngle) < 100 && distanceFromTargetYOffset == 0.0f) {
if ((distanceFromTargetPos == 0.0f) && (ABS_ALT(distanceFromTargetAngle) < 100) &&
(distanceFromTargetYOffset == 0.0f)) {
return true;
}
@ -955,13 +998,13 @@ void EnTalkGibud_PlayAnimation(EnTalkGibud* this, GlobalContext* globalCtx) {
}
void EnTalkGibud_MoveWithGravity(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->actionFunc == EnTalkGibud_WalkToPlayer || this->actionFunc == EnTalkGibud_WalkToHome ||
this->actionFunc == EnTalkGibud_Damage) {
if ((this->actionFunc == EnTalkGibud_WalkToPlayer) || (this->actionFunc == EnTalkGibud_WalkToHome) ||
(this->actionFunc == EnTalkGibud_Damage)) {
Actor_MoveWithGravity(&this->actor);
}
}
void EnTalkGibud_CheckDamageEffect(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_UpdateDamage(EnTalkGibud* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if (this->collider.base.acFlags & AC_HIT) {
@ -1033,18 +1076,18 @@ void EnTalkGibud_CheckDamageEffect(EnTalkGibud* this, GlobalContext* globalCtx)
}
}
void EnTalkGibud_CheckCollision(EnTalkGibud* this, GlobalContext* globalCtx) {
void EnTalkGibud_UpdateCollision(EnTalkGibud* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if (this->actionFunc != EnTalkGibud_Dead && this->actionFunc != EnTalkGibud_Disappear &&
this->actionFunc != EnTalkGibud_Revive &&
(this->actionFunc != EnTalkGibud_Grab || this->grabState == EN_TALK_GIBUD_GRAB_RELEASE)) {
if ((this->actionFunc != EnTalkGibud_Dead) && (this->actionFunc != EnTalkGibud_Disappear) &&
(this->actionFunc != EnTalkGibud_Revive) &&
((this->actionFunc != EnTalkGibud_Grab) || (this->grabState == EN_TALK_GIBUD_GRAB_RELEASE))) {
if (this->isTalking != true) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
if ((this->actionFunc != EnTalkGibud_Damage ||
(player->unk_ADC != 0 && player->unk_ADD != this->unk_3F7)) &&
(this->actionFunc != EnTalkGibud_Stunned || this->stunTimer == 0)) {
if (((this->actionFunc != EnTalkGibud_Damage) ||
((player->unk_ADC != 0) && (player->unk_ADD != this->unk_3F7))) &&
((this->actionFunc != EnTalkGibud_Stunned) || (this->stunTimer == 0))) {
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
}
}
@ -1077,6 +1120,7 @@ void EnTalkGibud_UpdateEffect(EnTalkGibud* this, GlobalContext* globalCtx) {
if (this->effectTimer > 0) {
this->effectTimer--;
}
if (this->effectTimer < 20) {
Math_SmoothStepToF(&this->effectScale, 0.0f, 0.5f, 0.03f, 0.0f);
this->effectAlpha = this->effectTimer * 0.05f;
@ -1089,13 +1133,16 @@ void EnTalkGibud_Update(Actor* thisx, GlobalContext* globalCtx) {
EnTalkGibud* this = THIS;
EnTalkGibud_CheckForGibdoMask(this, globalCtx);
EnTalkGibud_CheckDamageEffect(this, globalCtx);
EnTalkGibud_UpdateDamage(this, globalCtx);
this->actionFunc(this, globalCtx);
EnTalkGibud_PlayAnimation(this, globalCtx);
EnTalkGibud_MoveWithGravity(this, globalCtx);
EnTalkGibud_CheckCollision(this, globalCtx);
EnTalkGibud_UpdateCollision(this, globalCtx);
EnTalkGibud_MoveGrabbedPlayerAwayFromWall(this, globalCtx);
EnTalkGibud_UpdateEffect(this, globalCtx);
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 50.0f;
}
@ -1104,9 +1151,9 @@ s32 EnTalkGibud_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx**
Actor* thisx, Gfx** gfx) {
EnTalkGibud* this = THIS;
if (limbIndex == EN_TALK_GIBUD_LIMB_UPPER_BODY_ROOT) {
if (limbIndex == GIBDO_LIMB_UPPER_BODY_ROOT) {
rot->y += this->upperBodyRotation.y;
} else if (limbIndex == EN_TALK_GIBUD_LIMB_HEAD_ROOT) {
} else if (limbIndex == GIBDO_LIMB_HEAD_ROOT) {
rot->y += this->headRotation.y;
}
@ -1118,14 +1165,13 @@ void EnTalkGibud_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
EnTalkGibud* this = THIS;
if ((this->effectTimer != 0) &&
((limbIndex == EN_TALK_GIBUD_LIMB_LEFT_THIGH) || (limbIndex == EN_TALK_GIBUD_LIMB_LEFT_LOWER_LEG) ||
(limbIndex == EN_TALK_GIBUD_LIMB_LEFT_FOOT) || (limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_THIGH) ||
(limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_LOWER_LEG) || (limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_FOOT) ||
(limbIndex == EN_TALK_GIBUD_LIMB_TORSO) || (limbIndex == EN_TALK_GIBUD_LIMB_LEFT_SHOULDER_AND_UPPER_ARM) ||
(limbIndex == EN_TALK_GIBUD_LIMB_LEFT_FOREARM) || (limbIndex == EN_TALK_GIBUD_LIMB_LEFT_HAND) ||
(limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM) ||
(limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_FOREARM) || (limbIndex == EN_TALK_GIBUD_LIMB_RIGHT_HAND) ||
(limbIndex == EN_TALK_GIBUD_LIMB_HEAD) || (limbIndex == EN_TALK_GIBUD_LIMB_PELVIS))) {
((limbIndex == GIBDO_LIMB_LEFT_THIGH) || (limbIndex == GIBDO_LIMB_LEFT_SHIN) ||
(limbIndex == GIBDO_LIMB_LEFT_FOOT) || (limbIndex == GIBDO_LIMB_RIGHT_THIGH) ||
(limbIndex == GIBDO_LIMB_RIGHT_SHIN) || (limbIndex == GIBDO_LIMB_RIGHT_FOOT) ||
(limbIndex == GIBDO_LIMB_TORSO) || (limbIndex == GIBDO_LIMB_LEFT_SHOULDER_AND_UPPER_ARM) ||
(limbIndex == GIBDO_LIMB_LEFT_FOREARM) || (limbIndex == GIBDO_LIMB_LEFT_HAND) ||
(limbIndex == GIBDO_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM) || (limbIndex == GIBDO_LIMB_RIGHT_FOREARM) ||
(limbIndex == GIBDO_LIMB_RIGHT_HAND) || (limbIndex == GIBDO_LIMB_HEAD) || (limbIndex == GIBDO_LIMB_PELVIS))) {
Matrix_GetStateTranslation(&this->limbPos[this->limbIndex]);
this->limbIndex++;
}
@ -1156,6 +1202,7 @@ void EnTalkGibud_Draw(Actor* thisx, GlobalContext* globalCtx) {
this->skelAnime.dListCount, EnTalkGibud_OverrideLimbDraw,
EnTalkGibud_PostLimbDraw, &this->actor, POLY_XLU_DISP);
}
if (this->effectTimer > 0) {
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->effectScale, 0.5f,
this->effectAlpha, this->effectType);

View File

@ -2,51 +2,11 @@
#define Z_EN_TALK_GIBUD_H
#include "global.h"
#include "objects/object_rd/object_rd.h"
#define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF)
#define EN_TALK_GIBUD_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4)
typedef enum {
/* 0 */ EN_TALK_GIBUD_TYPE_GIBDO,
/* 1 */ EN_TALK_GIBUD_TYPE_REDEAD,
} EnTalkGibudType;
typedef enum {
/* 0 */ EN_TALK_GIBUD_GRAB_START,
/* 1 */ EN_TALK_GIBUD_GRAB_ATTACK,
/* 2 */ EN_TALK_GIBUD_GRAB_RELEASE,
} EnTalkGibudGrabState;
typedef enum {
/* 0 */ EN_TALK_GIBUD_LIMB_NONE,
/* 1 */ EN_TALK_GIBUD_LIMB_ROOT, // Root of Left Leg Root, Right Leg Root, Upper Body Root, and Pelvis
/* 2 */ EN_TALK_GIBUD_LIMB_LEFT_LEG_ROOT,
/* 3 */ EN_TALK_GIBUD_LIMB_LEFT_THIGH,
/* 4 */ EN_TALK_GIBUD_LIMB_LEFT_LOWER_LEG,
/* 5 */ EN_TALK_GIBUD_LIMB_LEFT_FOOT_ROOT,
/* 6 */ EN_TALK_GIBUD_LIMB_LEFT_FOOT,
/* 7 */ EN_TALK_GIBUD_LIMB_RIGHT_LEG_ROOT,
/* 8 */ EN_TALK_GIBUD_LIMB_RIGHT_THIGH,
/* 9 */ EN_TALK_GIBUD_LIMB_RIGHT_LOWER_LEG,
/* 10 */ EN_TALK_GIBUD_LIMB_RIGHT_FOOT_ROOT,
/* 11 */ EN_TALK_GIBUD_LIMB_RIGHT_FOOT,
/* 12 */ EN_TALK_GIBUD_LIMB_UPPER_BODY_ROOT,
/* 13 */ EN_TALK_GIBUD_LIMB_UPPER_BODY, // Root of Torso
/* 14 */ EN_TALK_GIBUD_LIMB_TORSO, // Root of Left Arm Root, Right Arm Root, and Head Root
/* 15 */ EN_TALK_GIBUD_LIMB_LEFT_ARM_ROOT,
/* 16 */ EN_TALK_GIBUD_LIMB_LEFT_SHOULDER_AND_UPPER_ARM,
/* 17 */ EN_TALK_GIBUD_LIMB_LEFT_FOREARM,
/* 18 */ EN_TALK_GIBUD_LIMB_LEFT_HAND,
/* 19 */ EN_TALK_GIBUD_LIMB_RIGHT_ARM_ROOT,
/* 20 */ EN_TALK_GIBUD_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM,
/* 21 */ EN_TALK_GIBUD_LIMB_RIGHT_FOREARM,
/* 22 */ EN_TALK_GIBUD_LIMB_RIGHT_HAND,
/* 23 */ EN_TALK_GIBUD_LIMB_HEAD_ROOT,
/* 24 */ EN_TALK_GIBUD_LIMB_HEAD,
/* 25 */ EN_TALK_GIBUD_LIMB_PELVIS,
/* 26 */ EN_TALK_GIBUD_LIMB_MAX,
} EnTalkGibudLimbs;
struct EnTalkGibud;
typedef void (*EnTalkGibudActionFunc)(struct EnTalkGibud*, GlobalContext*);
@ -63,19 +23,19 @@ typedef struct EnTalkGibud {
/* 0x298 */ s32 switchFlag;
/* 0x29C */ f32 effectAlpha;
/* 0x2A0 */ f32 effectScale;
/* 0x2A4 */ Vec3s jointTable[EN_TALK_GIBUD_LIMB_MAX];
/* 0x340 */ Vec3s morphTable[EN_TALK_GIBUD_LIMB_MAX];
/* 0x2A4 */ Vec3s jointTable[GIBDO_LIMB_MAX];
/* 0x340 */ Vec3s morphTable[GIBDO_LIMB_MAX];
/* 0x3DC */ s16 textId;
/* 0x3DE */ Vec3s headRotation;
/* 0x3E4 */ Vec3s upperBodyRotation;
/* 0x3EA */ union {
s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero
s16 grabDamageTimer;
s16 headShakeTimer;
s16 stunTimer;
s16 deathTimer;
s16 disappearanceTimer;
};
s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero
s16 grabDamageTimer;
s16 headShakeTimer;
s16 stunTimer;
s16 deathTimer;
s16 disappearanceTimer;
};
/* 0x3EC */ s16 grabState;
/* 0x3EE */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
/* 0x3F0 */ s16 effectTimer;

View File

@ -6344,49 +6344,49 @@
0x808D3754:("func_808D3754",),
0x808D3E20:("EnRd_Init",),
0x808D414C:("EnRd_Destroy",),
0x808D4190:("func_808D4190",),
0x808D41FC:("func_808D41FC",),
0x808D4260:("func_808D4260",),
0x808D4308:("func_808D4308",),
0x808D43AC:("func_808D43AC",),
0x808D45D4:("func_808D45D4",),
0x808D4660:("func_808D4660",),
0x808D47DC:("func_808D47DC",),
0x808D4868:("func_808D4868",),
0x808D49E4:("func_808D49E4",),
0x808D4A90:("func_808D4A90",),
0x808D4B20:("func_808D4B20",),
0x808D4CA8:("func_808D4CA8",),
0x808D4DC4:("func_808D4DC4",),
0x808D4E60:("func_808D4E60",),
0x808D4FE0:("func_808D4FE0",),
0x808D506C:("func_808D506C",),
0x808D53C0:("func_808D53C0",),
0x808D5440:("func_808D5440",),
0x808D5660:("func_808D5660",),
0x808D56E4:("func_808D56E4",),
0x808D586C:("func_808D586C",),
0x808D58CC:("func_808D58CC",),
0x808D5C54:("func_808D5C54",),
0x808D5CCC:("func_808D5CCC",),
0x808D5D88:("func_808D5D88",),
0x808D5DF4:("func_808D5DF4",),
0x808D5E98:("func_808D5E98",),
0x808D5F18:("func_808D5F18",),
0x808D6008:("func_808D6008",),
0x808D6054:("func_808D6054",),
0x808D60B0:("func_808D60B0",),
0x808D6130:("func_808D6130",),
0x808D616C:("func_808D616C",),
0x808D6200:("func_808D6200",),
0x808D6310:("func_808D6310",),
0x808D6388:("func_808D6388",),
0x808D64D0:("func_808D64D0",),
0x808D65BC:("func_808D65BC",),
0x808D66A0:("func_808D66A0",),
0x808D6814:("func_808D6814",),
0x808D6A94:("func_808D6A94",),
0x808D6B64:("func_808D6B64",),
0x808D4190:("EnRd_UpdateParentForOtherRedeads",),
0x808D41FC:("EnRd_ShouldNotDance",),
0x808D4260:("EnRd_SetupDanceIfConditionsMet",),
0x808D4308:("EnRd_SetupIdle",),
0x808D43AC:("EnRd_Idle",),
0x808D45D4:("EnRd_SetupSquattingDance",),
0x808D4660:("EnRd_SquattingDance",),
0x808D47DC:("EnRd_SetupClappingDance",),
0x808D4868:("EnRd_ClappingDance",),
0x808D49E4:("EnRd_EndClappingOrSquattingDanceWhenPlayerIsClose",),
0x808D4A90:("EnRd_SetupPirouette",),
0x808D4B20:("EnRd_Pirouette",),
0x808D4CA8:("EnRd_EndPirouetteWhenPlayerIsClose",),
0x808D4DC4:("EnRd_SetupRiseFromCoffin",),
0x808D4E60:("EnRd_RiseFromCoffin",),
0x808D4FE0:("EnRd_SetupWalkToPlayer",),
0x808D506C:("EnRd_WalkToPlayer",),
0x808D53C0:("EnRd_SetupWalkToHome",),
0x808D5440:("EnRd_WalkToHome",),
0x808D5660:("EnRd_SetupWalkToParent",),
0x808D56E4:("EnRd_WalkToParent",),
0x808D586C:("EnRd_SetupGrab",),
0x808D58CC:("EnRd_Grab",),
0x808D5C54:("EnRd_SetupAttemptPlayerFreeze",),
0x808D5CCC:("EnRd_AttemptPlayerFreeze",),
0x808D5D88:("EnRd_SetupGrabFail",),
0x808D5DF4:("EnRd_GrabFail",),
0x808D5E98:("EnRd_SetupTurnAwayAndShakeHead",),
0x808D5F18:("EnRd_TurnAwayAndShakeHead",),
0x808D6008:("EnRd_SetupStandUp",),
0x808D6054:("EnRd_StandUp",),
0x808D60B0:("EnRd_SetupCrouch",),
0x808D6130:("EnRd_Crouch",),
0x808D616C:("EnRd_SetupDamage",),
0x808D6200:("EnRd_Damage",),
0x808D6310:("EnRd_SetupDead",),
0x808D6388:("EnRd_Dead",),
0x808D64D0:("EnRd_SetupStunned",),
0x808D65BC:("EnRd_Stunned",),
0x808D66A0:("EnRd_TurnTowardsPlayer",),
0x808D6814:("EnRd_UpdateDamage",),
0x808D6A94:("EnRd_UpdateCollision",),
0x808D6B64:("EnRd_UpdateEffect",),
0x808D6C10:("EnRd_Update",),
0x808D6DA0:("EnRd_OverrideLimbDraw",),
0x808D6DFC:("EnRd_PostLimbDraw",),
@ -12819,8 +12819,8 @@
0x80AFEB0C:("EnTalkGibud_Destroy",),
0x80AFEB38:("EnTalkGibud_SetupIdle",),
0x80AFEB7C:("EnTalkGibud_Idle",),
0x80AFEC08:("EnTalkGibud_SetupAttemptPlayerStun",),
0x80AFEC4C:("EnTalkGibud_AttemptStun",),
0x80AFEC08:("EnTalkGibud_SetupAttemptPlayerFreeze",),
0x80AFEC4C:("EnTalkGibud_AttemptPlayerFreeze",),
0x80AFED08:("EnTalkGibud_SetupWalkToPlayer",),
0x80AFED7C:("EnTalkGibud_WalkToPlayer",),
0x80AFEFD4:("EnTalkGibud_SetupGrab",),
@ -12857,8 +12857,8 @@
0x80B00760:("EnTalkGibud_MoveToIdealGrabPositionAndRotation",),
0x80B008BC:("EnTalkGibud_PlayAnimation",),
0x80B008FC:("EnTalkGibud_MoveWithGravity",),
0x80B0094C:("EnTalkGibud_CheckDamageEffect",),
0x80B00B8C:("EnTalkGibud_CheckCollision",),
0x80B0094C:("EnTalkGibud_UpdateDamage",),
0x80B00B8C:("EnTalkGibud_UpdateCollision",),
0x80B00C94:("EnTalkGibud_MoveGrabbedPlayerAwayFromWall",),
0x80B00D9C:("EnTalkGibud_UpdateEffect",),
0x80B00E48:("EnTalkGibud_Update",),
@ -15118,56 +15118,56 @@
0x80BA4CB4:("func_80BA4CB4",),
0x80BA4E2C:("EnToto_Update",),
0x80BA4EFC:("EnToto_Draw",),
0x80BA5400:("func_80BA5400",),
0x80BA5400:("EnRailgibud_SpawnOtherGibdosAndSetPositionAndRotation",),
0x80BA5620:("EnRailgibud_Init",),
0x80BA577C:("EnRailgibud_Destroy",),
0x80BA57A8:("func_80BA57A8",),
0x80BA57F8:("func_80BA57F8",),
0x80BA59F0:("func_80BA59F0",),
0x80BA5A34:("func_80BA5A34",),
0x80BA5AF0:("func_80BA5AF0",),
0x80BA5B64:("func_80BA5B64",),
0x80BA5DBC:("func_80BA5DBC",),
0x80BA5E18:("func_80BA5E18",),
0x80BA6054:("func_80BA6054",),
0x80BA60B0:("func_80BA60B0",),
0x80BA6158:("func_80BA6158",),
0x80BA61A0:("func_80BA61A0",),
0x80BA6284:("func_80BA6284",),
0x80BA62D4:("func_80BA62D4",),
0x80BA6440:("func_80BA6440",),
0x80BA64AC:("func_80BA64AC",),
0x80BA6584:("func_80BA6584",),
0x80BA6604:("func_80BA6604",),
0x80BA6664:("func_80BA6664",),
0x80BA66C8:("func_80BA66C8",),
0x80BA6800:("func_80BA6800",),
0x80BA6974:("func_80BA6974",),
0x80BA6B30:("func_80BA6B30",),
0x80BA6B9C:("func_80BA6B9C",),
0x80BA6D10:("func_80BA6D10",),
0x80BA6DAC:("func_80BA6DAC",),
0x80BA6DF8:("func_80BA6DF8",),
0x80BA7088:("func_80BA7088",),
0x80BA71E4:("func_80BA71E4",),
0x80BA7234:("func_80BA7234",),
0x80BA7388:("func_80BA7388",),
0x80BA7434:("func_80BA7434",),
0x80BA7578:("func_80BA7578",),
0x80BA76C4:("func_80BA76C4",),
0x80BA57A8:("EnRailgibud_SetupWalkInCircles",),
0x80BA57F8:("EnRailgibud_WalkInCircles",),
0x80BA59F0:("EnRailgibud_SetupAttemptPlayerFreeze",),
0x80BA5A34:("EnRailgibud_AttemptPlayerFreeze",),
0x80BA5AF0:("EnRailgibud_SetupWalkToPlayer",),
0x80BA5B64:("EnRailgibud_WalkToPlayer",),
0x80BA5DBC:("EnRailgibud_SetupGrab",),
0x80BA5E18:("EnRailgibud_Grab",),
0x80BA6054:("EnRailgibud_SetupGrabFail",),
0x80BA60B0:("EnRailgibud_GrabFail",),
0x80BA6158:("EnRailgibud_SetupTurnAwayAndShakeHead",),
0x80BA61A0:("EnRailgibud_TurnAwayAndShakeHead",),
0x80BA6284:("EnRailgibud_SetupWalkToHome",),
0x80BA62D4:("EnRailgibud_WalkToHome",),
0x80BA6440:("EnRailgibud_SetupDamage",),
0x80BA64AC:("EnRailgibud_Damage",),
0x80BA6584:("EnRailgibud_SetupStunned",),
0x80BA6604:("EnRailgibud_Stunned",),
0x80BA6664:("EnRailgibud_SetupDead",),
0x80BA66C8:("EnRailgibud_Dead",),
0x80BA6800:("EnRailgibud_SpawnEffectsForSinkingIntoTheGround",),
0x80BA6974:("EnRailgibud_SpawnDust",),
0x80BA6B30:("EnRailgibud_UpdateWalkForwardState",),
0x80BA6B9C:("EnRailgibud_TurnTowardsPlayer",),
0x80BA6D10:("EnRailgibud_PlayerInRangeWithCorrectState",),
0x80BA6DAC:("EnRailgibud_PlayerOutOfRange",),
0x80BA6DF8:("EnRailgibud_UpdateDamage",),
0x80BA7088:("EnRailgibud_MoveToIdealGrabPositionAndRotation",),
0x80BA71E4:("EnRailgibud_MoveWithGravity",),
0x80BA7234:("EnRailgibud_MoveGrabbedPlayerAwayFromWall",),
0x80BA7388:("EnRailgibud_UpdateEffect",),
0x80BA7434:("EnRailgibud_CheckForGibdoMask",),
0x80BA7578:("EnRailgibud_CheckIfTalkingToPlayer",),
0x80BA76C4:("EnRailgibud_UpdateCollision",),
0x80BA77A0:("EnRailgibud_Update",),
0x80BA7878:("func_80BA7878",),
0x80BA789C:("func_80BA789C",),
0x80BA78F8:("func_80BA78F8",),
0x80BA7878:("EnRailgibud_MainGibdo_DeadUpdate",),
0x80BA789C:("EnRailgibud_OverrideLimbDraw",),
0x80BA78F8:("EnRailgibud_PostLimbDraw",),
0x80BA79D4:("EnRailgibud_Draw",),
0x80BA7B6C:("func_80BA7B6C",),
0x80BA7C78:("func_80BA7C78",),
0x80BA7CF0:("func_80BA7CF0",),
0x80BA7D04:("func_80BA7D04",),
0x80BA7D14:("func_80BA7D14",),
0x80BA7D30:("func_80BA7D30",),
0x80BA7DC8:("func_80BA7DC8",),
0x80BA8050:("func_80BA8050",),
0x80BA7B6C:("EnRailgibud_InitCutsceneGibdo",),
0x80BA7C78:("EnRailgibud_InitActorActionCommand",),
0x80BA7CF0:("EnRailgibud_SetupDoNothing",),
0x80BA7D04:("EnRailgibud_DoNothing",),
0x80BA7D14:("EnRailgibud_SetupSinkIntoGround",),
0x80BA7D30:("EnRailgibud_SinkIntoGround",),
0x80BA7DC8:("EnRailgibud_PerformCutsceneActions",),
0x80BA8050:("EnRailgibud_Cutscene_Update",),
0x80BA8820:("func_80BA8820",),
0x80BA886C:("func_80BA886C",),
0x80BA8C4C:("func_80BA8C4C",),