Hg and Hgo documented (#1112)

* inital work

* en_hg done-zo

* finished hgo

* forgot to format...

* review comments from anon

* fixing review comments

* fixing comments

* update name

* fix
This commit is contained in:
Parker Burnett 2022-10-20 20:01:59 -07:00 committed by GitHub
parent dca019f9fa
commit a848bb138d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 477 additions and 394 deletions

View File

@ -1,128 +1,131 @@
<Root>
<!-- Object for the Pamela's father, both human and gibdo form-->
<File Name="object_harfgibud" Segment="6">
<Animation Name="object_harfgibud_Anim_000370" Offset="0x370" />
<Animation Name="object_harfgibud_Anim_001138" Offset="0x1138" />
<Animation Name="object_harfgibud_Anim_0015D4" Offset="0x15D4" />
<Animation Name="object_harfgibud_Anim_001960" Offset="0x1960" />
<Animation Name="object_harfgibud_Anim_00260C" Offset="0x260C" />
<DList Name="gHarfgibudGibdoPelvisDL" Offset="0x5790" />
<DList Name="gHarfgibudGibdoRightFootDL" Offset="0x5878" />
<DList Name="gHarfgibudGibdoRightLegDL" Offset="0x5978" />
<DList Name="gHarfgibudGibdoRightThighDL" Offset="0x5A60" />
<DList Name="gHarfgibudGibdoLeftFootDL" Offset="0x5B50" />
<DList Name="gHarfgibudGibdoLeftLegDL" Offset="0x5C50" />
<DList Name="gHarfgibudGibdoLeftThighDL" Offset="0x5D38" />
<DList Name="gHarfgibudGibdoEyebrowsDL" Offset="0x5E28" />
<DList Name="gHarfgibudGibdoHeadDL" Offset="0x5ED0" />
<DList Name="gHarfgibudGibdoChestDL" Offset="0x65B0" />
<DList Name="gHarfgibudGibdoRightHandDL" Offset="0x67C8" />
<DList Name="gHarfgibudGibdoRightForearmDL" Offset="0x6988" />
<DList Name="gHarfgibudGibdoRightUpperArmDL" Offset="0x6B80" />
<DList Name="gHarfgibudGibdoLeftHandDL" Offset="0x6C80" />
<DList Name="gHarfgibudGibdoLeftForearmDL" Offset="0x6DB8" />
<DList Name="gHarfgibudGibdoLeftUpperArmDL" Offset="0x6EA0" />
<DList Name="gHarfgibudGibdoAbdomenDL" Offset="0x6F98" />
<!-- Gibdo Form -->
<Animation Name="gPamelasFatherLeanForwardAnim" Offset="0x370" />
<Animation Name="gPamelasFatherReachForwardAnim" Offset="0x1138" />
<Animation Name="gPamelasFatherCurlUpAnim" Offset="0x15D4" />
<Animation Name="gPamelasFatherCrouchedPanicAnim" Offset="0x1960" />
<Animation Name="gPamelasFatherIdleAnim" Offset="0x260C" />
<Texture Name="object_harfgibud_TLUT_0070A0" OutName="tlut_0070A0" Format="rgba16" Width="16" Height="16" Offset="0x70A0" />
<Texture Name="object_harfgibud_Tex_0072A0" OutName="tex_0072A0" Format="i8" Width="64" Height="32" Offset="0x72A0" />
<Texture Name="object_harfgibud_Tex_007AA0" OutName="tex_007AA0" Format="ci8" Width="8" Height="8" Offset="0x7AA0" />
<Texture Name="object_harfgibud_Tex_007AE0" OutName="tex_007AE0" Format="ci8" Width="8" Height="16" Offset="0x7AE0" />
<Texture Name="object_harfgibud_Tex_007B60" OutName="tex_007B60" Format="ci8" Width="8" Height="8" Offset="0x7B60" />
<Texture Name="object_harfgibud_Tex_007BA0" OutName="tex_007BA0" Format="ci8" Width="8" Height="8" Offset="0x7BA0" />
<Texture Name="object_harfgibud_Tex_007BE0" OutName="tex_007BE0" Format="ci8" Width="32" Height="32" Offset="0x7BE0" />
<Texture Name="object_harfgibud_Tex_007FE0" OutName="tex_007FE0" Format="ci8" Width="16" Height="16" Offset="0x7FE0" />
<Texture Name="object_harfgibud_Tex_0080E0" OutName="tex_0080E0" Format="rgba16" Width="16" Height="16" Offset="0x80E0" />
<Texture Name="object_harfgibud_Tex_0082E0" OutName="tex_0082E0" Format="i8" Width="8" Height="8" Offset="0x82E0" />
<Texture Name="object_harfgibud_Tex_008320" OutName="tex_008320" Format="rgba16" Width="8" Height="8" Offset="0x8320" />
<Texture Name="object_harfgibud_Tex_0083A0" OutName="tex_0083A0" Format="ci8" Width="16" Height="8" Offset="0x83A0" />
<Texture Name="object_harfgibud_Tex_008420" OutName="tex_008420" Format="i8" Width="8" Height="8" Offset="0x8420" />
<DList Name="gPamelasFatherGibdoPelvisDL" Offset="0x5790" />
<DList Name="gPamelasFatherGibdoRightFootDL" Offset="0x5878" />
<DList Name="gPamelasFatherGibdoRightLegDL" Offset="0x5978" />
<DList Name="gPamelasFatherGibdoRightThighDL" Offset="0x5A60" />
<DList Name="gPamelasFatherGibdoLeftFootDL" Offset="0x5B50" />
<DList Name="gPamelasFatherGibdoLeftLegDL" Offset="0x5C50" />
<DList Name="gPamelasFatherGibdoLeftThighDL" Offset="0x5D38" />
<DList Name="gPamelasFatherGibdoEyebrowsDL" Offset="0x5E28" />
<DList Name="gPamelasFatherGibdoHeadDL" Offset="0x5ED0" />
<DList Name="gPamelasFatherGibdoChestDL" Offset="0x65B0" />
<DList Name="gPamelasFatherGibdoRightHandDL" Offset="0x67C8" />
<DList Name="gPamelasFatherGibdoRightForearmDL" Offset="0x6988" />
<DList Name="gPamelasFatherGibdoRightUpperArmDL" Offset="0x6B80" />
<DList Name="gPamelasFatherGibdoLeftHandDL" Offset="0x6C80" />
<DList Name="gPamelasFatherGibdoLeftForearmDL" Offset="0x6DB8" />
<DList Name="gPamelasFatherGibdoLeftUpperArmDL" Offset="0x6EA0" />
<DList Name="gPamelasFatherGibdoAbdomenDL" Offset="0x6F98" />
<Limb Name="gHarfgibudGibdoRootLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_ROOT" Offset="0x8460" />
<Limb Name="gHarfgibudGibdoAbdomenLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_ABDOMEN" Offset="0x846C" />
<Limb Name="gHarfgibudGibdoChestLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_CHEST" Offset="0x8478" />
<Limb Name="gHarfgibudGibdoLeftUpperArmLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_UPPER_ARM" Offset="0x8484" />
<Limb Name="gHarfgibudGibdoLeftForearmLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_FOREARM" Offset="0x8490" />
<Limb Name="gHarfgibudGibdoLeftHandLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_HAND" Offset="0x849C" />
<Limb Name="gHarfgibudGibdoRightUpperArmLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_UPPER_ARM" Offset="0x84A8" />
<Limb Name="gHarfgibudGibdoRightForearmLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_FOREARM" Offset="0x84B4" />
<Limb Name="gHarfgibudGibdoRightHandLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_HAND" Offset="0x84C0" />
<Limb Name="gHarfgibudGibdoEyebrowsLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_EYEBROWS" Offset="0x84CC" />
<Limb Name="gHarfgibudGibdoHeadLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_HEAD" Offset="0x84D8" />
<Limb Name="gHarfgibudGibdoPelvisLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_PELVIS" Offset="0x84E4" />
<Limb Name="gHarfgibudGibdoLeftThighLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_THIGH" Offset="0x84F0" />
<Limb Name="gHarfgibudGibdoLeftLegLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_LEG" Offset="0x84FC" />
<Limb Name="gHarfgibudGibdoLeftFootLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_LEFT_FOOT" Offset="0x8508" />
<Limb Name="gHarfgibudGibdoRightThighLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_THIGH" Offset="0x8514" />
<Limb Name="gHarfgibudGibdoRightLegLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_LEG" Offset="0x8520" />
<Limb Name="gHarfgibudGibdoRightFootLimb" Type="Standard" EnumName="HARFGIBUD_GIBDO_LIMB_RIGHT_FOOT" Offset="0x852C" />
<Skeleton Name="gHarfgibudGibdoSkel" Type="Flex" LimbType="Standard" LimbNone="HARFGIBUD_GIBDO_LIMB_NONE" LimbMax="HARFGIBUD_GIBDO_LIMB_MAX" EnumName="HarfgibudGibdoLimb" Offset="0x8580" />
<Texture Name="gPamelasFatherGibdoTLUT" OutName="pamelas_father_gibdo__tlut" Format="rgba16" Width="16" Height="16" Offset="0x70A0" />
<Texture Name="gPamelasFatherGibdoBandageWrappingsTex" OutName="gibdo_bandage_wrappings" Format="i8" Width="64" Height="32" Offset="0x72A0" />
<Texture Name="gPamelasFatherGibdoSkinGradientTex" OutName="gibdo_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x7AA0" />
<Texture Name="gPamelasFatherGibdoSideHairTex" OutName="gibdo_side_hair" Format="ci8" Width="8" Height="16" Offset="0x7AE0" />
<Texture Name="gPamelasFatherGibdoEarTex" OutName="gibdo_ear" Format="ci8" Width="8" Height="8" Offset="0x7B60" />
<Texture Name="gPamelasFatherGibdoLipTex" OutName="gibdo_lip" Format="ci8" Width="8" Height="8" Offset="0x7BA0" />
<Texture Name="gPamelasFatherGibdoBloodshotEyeTex" OutName="gibdo_bloodshot_eye" Format="ci8" Width="32" Height="32" Offset="0x7BE0" />
<Texture Name="gPamelasFatherGibdoHairTex" OutName="gibdo_hair" Format="ci8" Width="16" Height="16" Offset="0x7FE0" />
<Texture Name="gPamelasFatherGibdoEyebrowTex" OutName="gibdo_eyebrow" Format="rgba16" Width="16" Height="16" Offset="0x80E0" />
<Texture Name="gPamelasFatherGibdoLabCoatSleeveTex" OutName="gibdo_lab_coat_sleeve" Format="i8" Width="8" Height="8" Offset="0x82E0" />
<Texture Name="gPamelasFatherGibdoShirtPieceTex" OutName="gibdo_shirt_piece" Format="rgba16" Width="8" Height="8" Offset="0x8320" />
<Texture Name="gPamelasFatherGibdoFingernailTex" OutName="gibdo_fingernail" Format="ci8" Width="16" Height="8" Offset="0x83A0" />
<Texture Name="gPamelasFatherGibdoLabCoatCuffTex" OutName="gibdo_lab_coat_cuff" Format="i8" Width="8" Height="8" Offset="0x8420" />
<Animation Name="object_harfgibud_Anim_009D44" Offset="0x9D44" />
<Animation Name="object_harfgibud_Anim_00A164" Offset="0xA164" />
<Animation Name="object_harfgibud_Anim_00AE1C" Offset="0xAE1C" />
<TextureAnimation Name="object_harfgibud_Matanimheader_00AE50" Offset="0xAE50" />
<Animation Name="object_harfgibud_Anim_00B644" Offset="0xB644" />
<Limb Name="gPamelasFatherGibdoRootLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_ROOT" Offset="0x8460" />
<Limb Name="gPamelasFatherGibdoAbdomenLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_ABDOMEN" Offset="0x846C" />
<Limb Name="gPamelasFatherGibdoChestLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_CHEST" Offset="0x8478" />
<Limb Name="gPamelasFatherGibdoLeftUpperArmLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_UPPER_ARM" Offset="0x8484" />
<Limb Name="gPamelasFatherGibdoLeftForearmLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_FOREARM" Offset="0x8490" />
<Limb Name="gPamelasFatherGibdoLeftHandLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_HAND" Offset="0x849C" />
<Limb Name="gPamelasFatherGibdoRightUpperArmLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_UPPER_ARM" Offset="0x84A8" />
<Limb Name="gPamelasFatherGibdoRightForearmLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_FOREARM" Offset="0x84B4" />
<Limb Name="gPamelasFatherGibdoRightHandLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_HAND" Offset="0x84C0" />
<Limb Name="gPamelasFatherGibdoEyebrowsLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_EYEBROWS" Offset="0x84CC" />
<Limb Name="gPamelasFatherGibdoHeadLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_HEAD" Offset="0x84D8" />
<Limb Name="gPamelasFatherGibdoPelvisLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_PELVIS" Offset="0x84E4" />
<Limb Name="gPamelasFatherGibdoLeftThighLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_THIGH" Offset="0x84F0" />
<Limb Name="gPamelasFatherGibdoLeftShinLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_SHIN" Offset="0x84FC" />
<Limb Name="gPamelasFatherGibdoLeftFootLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_LEFT_FOOT" Offset="0x8508" />
<Limb Name="gPamelasFatherGibdoRightThighLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_THIGH" Offset="0x8514" />
<Limb Name="gPamelasFatherGibdoRightShinLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_SHIN" Offset="0x8520" />
<Limb Name="gPamelasFatherGibdoRightFootLimb" Type="Standard" EnumName="PAMELAS_FATHER_GIBDO_LIMB_RIGHT_FOOT" Offset="0x852C" />
<Skeleton Name="gPamelasFatherGibdoSkel" Type="Flex" LimbType="Standard" LimbNone="PAMELAS_FATHER_GIBDO_LIMB_NONE" LimbMax="PAMELAS_FATHER_GIBDO_LIMB_MAX" EnumName="PamelasFatherGibdoLimb" Offset="0x8580" />
<DList Name="gHarfgibudHumanPelvisDL" Offset="0xE860" />
<DList Name="gHarfgibudHumanRightFootDL" Offset="0xE9E0" />
<DList Name="gHarfgibudHumanRightLegDL" Offset="0xEB28" />
<DList Name="gHarfgibudHumanRightThighDL" Offset="0xEC48" />
<DList Name="gHarfgibudHumanLeftFootDL" Offset="0xEE50" />
<DList Name="gHarfgibudHumanLeftLegDL" Offset="0xEF98" />
<DList Name="gHarfgibudHumanLeftThighDL" Offset="0xF0B8" />
<DList Name="gHarfgibudHumanEyebrowsDL" Offset="0xF248" />
<DList Name="gHarfgibudHumanHeadDL" Offset="0xF2F0" />
<DList Name="gHarfgibudHumanChestDL" Offset="0xF838" />
<DList Name="gHarfgibudHumanRightHandDL" Offset="0xFAA8" />
<DList Name="gHarfgibudHumanRightForearmDL" Offset="0xFC10" />
<DList Name="gHarfgibudHumanRightUpperArmDL" Offset="0xFE08" />
<DList Name="gHarfgibudHumanLeftHandDL" Offset="0xFF10" />
<DList Name="gHarfgibudHumanLeftForearmDL" Offset="0x10078" />
<DList Name="gHarfgibudHumanLeftUpperArmDL" Offset="0x102B8" />
<DList Name="gHarfgibudHumanAbdomenDL" Offset="0x103C0" />
<Animation Name="gPamelasFatherLurchForwardAnim" Offset="0x9D44" />
<Animation Name="gPamelasFatherRecoilFromHitAnim" Offset="0xA164" />
<Animation Name="gPamelasFatherPanicAnim" Offset="0xAE1C" />
<TextureAnimation Name="gPamelasFatherEyeTexAnim" Offset="0xAE50" />
<Animation Name="gPamelasFatherArmsFoldedAnim" Offset="0xB644" />
<Texture Name="object_harfgibud_TLUT_010578" OutName="tlut_010578" Format="rgba16" Width="16" Height="16" Offset="0x10578" />
<Texture Name="object_harfgibud_Tex_010778" OutName="tex_010778" Format="ci8" Width="8" Height="8" Offset="0x10778" />
<Texture Name="object_harfgibud_Tex_0107B8" OutName="tex_0107B8" Format="ci8" Width="16" Height="16" Offset="0x107B8" />
<Texture Name="object_harfgibud_Tex_0108B8" OutName="tex_0108B8" Format="ci8" Width="8" Height="16" Offset="0x108B8" />
<Texture Name="object_harfgibud_Tex_010938" OutName="tex_010938" Format="ci8" Width="8" Height="8" Offset="0x10938" />
<Texture Name="object_harfgibud_Tex_010978" OutName="tex_010978" Format="ci8" Width="32" Height="16" Offset="0x10978" />
<Texture Name="object_harfgibud_Tex_010B78" OutName="tex_010B78" Format="ci8" Width="8" Height="8" Offset="0x10B78" />
<Texture Name="object_harfgibud_Tex_010BB8" OutName="tex_010BB8" Format="rgba16" Width="8" Height="16" Offset="0x10BB8" />
<Texture Name="object_harfgibud_Tex_010CB8" OutName="tex_010CB8" Format="rgba16" Width="16" Height="16" Offset="0x10CB8" />
<Texture Name="object_harfgibud_Tex_010EB8" OutName="tex_010EB8" Format="i8" Width="8" Height="8" Offset="0x10EB8" />
<Texture Name="object_harfgibud_Tex_010EF8" OutName="tex_010EF8" Format="rgba16" Width="16" Height="16" Offset="0x10EF8" />
<Texture Name="object_harfgibud_Tex_0110F8" OutName="tex_0110F8" Format="i8" Width="8" Height="8" Offset="0x110F8" />
<Texture Name="object_harfgibud_Tex_011138" OutName="tex_011138" Format="rgba16" Width="32" Height="32" Offset="0x11138" />
<Texture Name="object_harfgibud_Tex_011938" OutName="tex_011938" Format="rgba16" Width="32" Height="32" Offset="0x11938" />
<Texture Name="object_harfgibud_Tex_012138" OutName="tex_012138" Format="rgba16" Width="32" Height="32" Offset="0x12138" />
<DList Name="gPamelasFatherHumanPelvisDL" Offset="0xE860" />
<DList Name="gPamelasFatherHumanRightFootDL" Offset="0xE9E0" />
<DList Name="gPamelasFatherHumanRightShinDL" Offset="0xEB28" />
<DList Name="gPamelasFatherHumanRightThighDL" Offset="0xEC48" />
<DList Name="gPamelasFatherHumanLeftFootDL" Offset="0xEE50" />
<DList Name="gPamelasFatherHumanLeftShinDL" Offset="0xEF98" />
<DList Name="gPamelasFatherHumanLeftThighDL" Offset="0xF0B8" />
<DList Name="gPamelasFatherHumanEyebrowsDL" Offset="0xF248" />
<DList Name="gPamelasFatherHumanHeadDL" Offset="0xF2F0" />
<DList Name="gPamelasFatherHumanChestDL" Offset="0xF838" />
<DList Name="gPamelasFatherHumanRightHandDL" Offset="0xFAA8" />
<DList Name="gPamelasFatherHumanRightForearmDL" Offset="0xFC10" />
<DList Name="gPamelasFatherHumanRightUpperArmDL" Offset="0xFE08" />
<DList Name="gPamelasFatherHumanLeftHandDL" Offset="0xFF10" />
<DList Name="gPamelasFatherHumanLeftForearmDL" Offset="0x10078" />
<DList Name="gPamelasFatherHumanLeftUpperArmDL" Offset="0x102B8" />
<DList Name="gPamelasFatherHumanAbdomenDL" Offset="0x103C0" />
<Limb Name="gHarfgibudHumanRootLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_ROOT" Offset="0x12938" />
<Limb Name="gHarfgibudHumanAbdomenLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_ABDOMEN" Offset="0x12944" />
<Limb Name="gHarfgibudHumanChestLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_CHEST" Offset="0x12950" />
<Limb Name="gHarfgibudHumanLeftUpperArmLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_UPPER_ARM" Offset="0x1295C" />
<Limb Name="gHarfgibudHumanLeftForearmLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_FOREARM" Offset="0x12968" />
<Limb Name="gHarfgibudHumanLeftHandLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_HAND" Offset="0x12974" />
<Limb Name="gHarfgibudHumanRightUpperArmLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_UPPER_ARM" Offset="0x12980" />
<Limb Name="gHarfgibudHumanRightForearmLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_FOREARM" Offset="0x1298C" />
<Limb Name="gHarfgibudHumanRightHandLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_HAND" Offset="0x12998" />
<Limb Name="gHarfgibudHumanEyebrowsLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_EYEBROWS" Offset="0x129A4" />
<Limb Name="gHarfgibudHumanHeadLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_HEAD" Offset="0x129B0" />
<Limb Name="gHarfgibudHumanPelvisLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_PELVIS" Offset="0x129BC" />
<Limb Name="gHarfgibudHumanLeftThighLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_THIGH" Offset="0x129C8" />
<Limb Name="gHarfgibudHumanLeftLegLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_LEG" Offset="0x129D4" />
<Limb Name="gHarfgibudHumanLeftFootLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_LEFT_FOOT" Offset="0x129E0" />
<Limb Name="gHarfgibudHumanRightThighLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_THIGH" Offset="0x129EC" />
<Limb Name="gHarfgibudHumanRightLegLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_LEG" Offset="0x129F8" />
<Limb Name="gHarfgibudHumanRightFootLimb" Type="Standard" EnumName="HARFGIBUD_HUMAN_LIMB_RIGHT_FOOT" Offset="0x12A04" />
<Skeleton Name="gHarfgibudHumanSkel" Type="Flex" LimbType="Standard" LimbNone="HARFGIBUD_HUMAN_LIMB_NONE" LimbMax="HARFGIBUD_HUMAN_LIMB_MAX" EnumName="HarfgibudHumanLimb" Offset="0x12A58" />
<Texture Name="gPamelasFatherHumanTLUT" OutName="human_tlut" Format="rgba16" Width="16" Height="16" Offset="0x10578" />
<Texture Name="gPamelasFatherHumanSkinGradientTex" OutName="human_skin_gradient" Format="ci8" Width="8" Height="8" Offset="0x10778" />
<Texture Name="gPamelasFatherHumanHandTex" OutName="human_hand" Format="ci8" Width="16" Height="16" Offset="0x107B8" />
<Texture Name="gPamelasFatherHumanSideHairTex" OutName="human_side_hair" Format="ci8" Width="8" Height="16" Offset="0x108B8" />
<Texture Name="gPamelasFatherHumanEarTex" OutName="human_ear" Format="ci8" Width="8" Height="8" Offset="0x10938" />
<Texture Name="gPamelasFatherHumanBeltTex" OutName="human_belt" Format="ci8" Width="32" Height="16" Offset="0x10978" />
<Texture Name="gPamelasFatherHumanLipTex" OutName="human_lip" Format="ci8" Width="8" Height="8" Offset="0x10B78" />
<Texture Name="gPamelasFatherHumanShirtTex" OutName="human_shirt" Format="rgba16" Width="8" Height="16" Offset="0x10BB8" />
<Texture Name="gPamelasFatherHumanEyebrowTex" OutName="human_eyebrow" Format="rgba16" Width="16" Height="16" Offset="0x10CB8" />
<Texture Name="gPamelasFatherHumanLabCoatTex" OutName="human_lab_coat" Format="i8" Width="8" Height="8" Offset="0x10EB8" />
<Texture Name="gPamelasFatherHumanSockTex" OutName="human_sock" Format="rgba16" Width="16" Height="16" Offset="0x10EF8" />
<Texture Name="gPamelasFatherHumanLabCoatCuffTex" OutName="human_lab_coat_cuff" Format="i8" Width="8" Height="8" Offset="0x110F8" />
<Texture Name="gPamelasFatherHumanEyeOpenTex" OutName="human_eye_open" Format="rgba16" Width="32" Height="32" Offset="0x11138" />
<Texture Name="gPamelasFatherHumanEyeHalfTex" OutName="human_eye_half" Format="rgba16" Width="32" Height="32" Offset="0x11938" />
<Texture Name="gPamelasFatherHumanEyeClosedTex" OutName="human_eye_closed" Format="rgba16" Width="32" Height="32" Offset="0x12138" />
<Animation Name="object_harfgibud_Anim_013684" Offset="0x13684" />
<Animation Name="object_harfgibud_Anim_014220" Offset="0x14220" />
<Animation Name="object_harfgibud_Anim_014A9C" Offset="0x14A9C" />
<Animation Name="object_harfgibud_Anim_0152EC" Offset="0x152EC" />
<Animation Name="object_harfgibud_Anim_015C70" Offset="0x15C70" />
<Animation Name="object_harfgibud_Anim_0165F0" Offset="0x165F0" />
<Limb Name="gPamelasFatherHumanRootLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_ROOT" Offset="0x12938" />
<Limb Name="gPamelasFatherHumanAbdomenLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_ABDOMEN" Offset="0x12944" />
<Limb Name="gPamelasFatherHumanChestLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_CHEST" Offset="0x12950" />
<Limb Name="gPamelasFatherHumanLeftUpperArmLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_UPPER_ARM" Offset="0x1295C" />
<Limb Name="gPamelasFatherHumanLeftForearmLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_FOREARM" Offset="0x12968" />
<Limb Name="gPamelasFatherHumanLeftHandLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_HAND" Offset="0x12974" />
<Limb Name="gPamelasFatherHumanRightUpperArmLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_UPPER_ARM" Offset="0x12980" />
<Limb Name="gPamelasFatherHumanRightForearmLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_FOREARM" Offset="0x1298C" />
<Limb Name="gPamelasFatherHumanRightHandLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_HAND" Offset="0x12998" />
<Limb Name="gPamelasFatherHumanEyebrowsLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_EYEBROWS" Offset="0x129A4" />
<Limb Name="gPamelasFatherHumanHeadLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_HEAD" Offset="0x129B0" />
<Limb Name="gPamelasFatherHumanPelvisLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_PELVIS" Offset="0x129BC" />
<Limb Name="gPamelasFatherHumanLeftThighLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_THIGH" Offset="0x129C8" />
<Limb Name="gPamelasFatherHumanLeftLegLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_SHIN" Offset="0x129D4" />
<Limb Name="gPamelasFatherHumanLeftFootLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_LEFT_FOOT" Offset="0x129E0" />
<Limb Name="gPamelasFatherHumanRightThighLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_THIGH" Offset="0x129EC" />
<Limb Name="gPamelasFatherHumanRightLegLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_SHIN" Offset="0x129F8" />
<Limb Name="gPamelasFatherHumanRightFootLimb" Type="Standard" EnumName="PAMELAS_FATHER_HUMAN_LIMB_RIGHT_FOOT" Offset="0x12A04" />
<Skeleton Name="gPamelasFatherHumanSkel" Type="Flex" LimbType="Standard" LimbNone="PAMELAS_FATHER_HUMAN_LIMB_NONE" LimbMax="PAMELAS_FATHER_HUMAN_LIMB_MAX" EnumName="PamelasFatherHumanLimb" Offset="0x12A58" />
<Animation Name="gPamelasFatherAstonishedAnim" Offset="0x13684" />
<Animation Name="gPamelasFatherReachDownToLiftAnim" Offset="0x14220" />
<Animation Name="gPamelasFatherTossAnim" Offset="0x14A9C" />
<Animation Name="gPamelasFatherKneelDownAndHugAnim" Offset="0x152EC" />
<Animation Name="gPamelasFatherConsoleAnim" Offset="0x15C70" />
<Animation Name="gPamelasFatherConsoleHeadUpAnim" Offset="0x165F0" />
</File>
</Root>

View File

@ -15,22 +15,39 @@ void EnHg_Destroy(Actor* thisx, PlayState* play);
void EnHg_Update(Actor* thisx, PlayState* play);
void EnHg_Draw(Actor* thisx, PlayState* play);
void func_80BCF354(EnHg* this);
void func_80BCF398(EnHg* this, PlayState* play);
void func_80BCF468(EnHg* this);
void func_80BCF468(EnHg* this);
void func_80BCF4AC(EnHg* this, PlayState* play);
void func_80BCF5F0(EnHg* this);
void func_80BCF634(EnHg* this, PlayState* play);
void func_80BCF68C(EnHg* this);
void func_80BCF6D0(EnHg* this, PlayState* play);
void func_80BCF8A0(EnHg* this, PlayState* play);
void func_80BCF93C(EnHg* this);
void func_80BCF95C(EnHg* this, PlayState* play);
void EnHg_SetupWait(EnHg* this);
void EnHg_Wait(EnHg* this, PlayState* play);
void EnHg_SetupChasePlayer(EnHg* this);
void EnHg_ChasePlayer(EnHg* this, PlayState* play);
void EnHg_SetupChasePlayerWait(EnHg* this);
void EnHg_ChasePlayerWait(EnHg* this, PlayState* play);
void EnHg_SetupReactToHit(EnHg* this);
void EnHg_ReactToHit(EnHg* this, PlayState* play);
void EnHg_PlayCutscene(EnHg* this, PlayState* play);
void EnHg_SetupCsAction(EnHg* this);
void EnHg_HandleCsAction(EnHg* this, PlayState* play);
s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
ActorInit En_Hg_InitVars = {
typedef enum {
/* 0 */ HG_ANIM_IDLE,
/* 1 */ HG_ANIM_LURCH_FORWARD,
/* 2 */ HG_ANIM_RECOIL,
/* 3 */ HG_ANIM_LEAN_FORWARD,
/* 4 */ HG_ANIM_REACH_FORWARD,
/* 5 */ HG_ANIM_CURL_UP,
/* 6 */ HG_ANIM_CROUCHED_PANIC,
/* 7 */ HG_ANIM_PANIC,
} HgAnimation;
typedef enum {
/* 0 */ HG_CS_FIRST_ENCOUNTER,
/* 1 */ HG_CS_GET_MASK,
/* 2 */ HG_CS_SUBSEQUENT_ENCOUNTER,
/* 3 */ HG_CS_SONG_OF_HEALING,
} HgCsIndex;
const ActorInit En_Hg_InitVars = {
ACTOR_EN_HG,
ACTORCAT_PROP,
FLAGS,
@ -102,17 +119,17 @@ static CollisionCheckInfoInit2 sColChkInfoInit2 = {
};
static AnimationInfo sAnimationInfo[] = {
{ &object_harfgibud_Anim_00260C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &object_harfgibud_Anim_009D44, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &object_harfgibud_Anim_00A164, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &object_harfgibud_Anim_000370, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &object_harfgibud_Anim_001138, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &object_harfgibud_Anim_0015D4, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &object_harfgibud_Anim_001960, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &object_harfgibud_Anim_00AE1C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &gPamelasFatherLurchForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &gPamelasFatherRecoilFromHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &gPamelasFatherLeanForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &gPamelasFatherReachForwardAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherCurlUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &gPamelasFatherCrouchedPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherPanicAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
static u32 D_80BD00C8 = false;
static u32 sHasSoundPlayed = false;
void EnHg_Init(Actor* thisx, PlayState* play) {
EnHg* this = THIS;
@ -120,8 +137,8 @@ void EnHg_Init(Actor* thisx, PlayState* play) {
s32 i;
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 36.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gHarfgibudGibdoSkel, &object_harfgibud_Anim_00260C, this->jointTable,
this->morphTable, HARFGIBUD_GIBDO_LIMB_MAX);
SkelAnime_InitFlex(play, &this->skelAnime, &gPamelasFatherGibdoSkel, &gPamelasFatherIdleAnim, this->jointTable,
this->morphTable, PAMELAS_FATHER_GIBDO_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit2);
@ -138,7 +155,7 @@ void EnHg_Init(Actor* thisx, PlayState* play) {
this->cutscenes[i] = currentCutscene;
currentCutscene = ActorCutscene_GetAdditionalCutscene(currentCutscene);
}
func_80BCF354(this);
EnHg_SetupWait(this);
}
void EnHg_Destroy(Actor* thisx, PlayState* play) {
@ -147,16 +164,16 @@ void EnHg_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
void func_80BCF354(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
this->actionFunc = func_80BCF398;
void EnHg_SetupWait(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
this->actionFunc = EnHg_Wait;
}
void func_80BCF398(EnHg* this, PlayState* play) {
void EnHg_Wait(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health == 1) {
if ((this->actor.xzDistToPlayer < 200.0f && this->actor.playerHeightRel < 40.0f) &&
!Cutscene_CheckActorAction(play, 0x1E3)) {
func_80BCF468(this);
EnHg_SetupChasePlayer(this);
}
if ((gSaveContext.sceneLayer == 0) && (play->csCtx.currentCsIndex == 0) &&
((play->csCtx.frames == 20) || (play->csCtx.frames == 60))) {
@ -165,12 +182,12 @@ void func_80BCF398(EnHg* this, PlayState* play) {
}
}
void func_80BCF468(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
this->actionFunc = func_80BCF4AC;
void EnHg_SetupChasePlayer(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LURCH_FORWARD);
this->actionFunc = EnHg_ChasePlayer;
}
void func_80BCF4AC(EnHg* this, PlayState* play) {
void EnHg_ChasePlayer(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 pad;
@ -184,38 +201,39 @@ void func_80BCF4AC(EnHg* this, PlayState* play) {
}
if ((Math_Vec3f_DistXZ(&this->actor.world.pos, &this->actor.home.pos) > 200.0f) &&
(Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos) > 200.0f)) {
func_80BCF5F0(this);
EnHg_SetupChasePlayerWait(this);
}
}
}
void func_80BCF5F0(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
this->actionFunc = func_80BCF634;
void EnHg_SetupChasePlayerWait(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
this->actionFunc = EnHg_ChasePlayerWait;
}
void func_80BCF634(EnHg* this, PlayState* play) {
void EnHg_ChasePlayerWait(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Math_Vec3f_DistXZ(&player->actor.world.pos, &this->actor.home.pos) < 200.0f) {
func_80BCF468(this);
EnHg_SetupChasePlayer(this);
}
}
void func_80BCF68C(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
this->actionFunc = func_80BCF6D0;
void EnHg_SetupReactToHit(EnHg* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_RECOIL);
this->actionFunc = EnHg_ReactToHit;
}
void func_80BCF6D0(EnHg* this, PlayState* play) {
void EnHg_ReactToHit(EnHg* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
func_80BCF5F0(this);
EnHg_SetupChasePlayerWait(this);
}
}
void func_80BCF710(EnHg* this, PlayState* play) {
void EnHg_HandleTatlDialog(EnHg* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
// "...Sort of looks different..."
Message_StartTextbox(play, 0x24F, &this->actor);
} else {
func_800B8614(&this->actor, play, 80.0f);
@ -223,53 +241,53 @@ void func_80BCF710(EnHg* this, PlayState* play) {
}
}
void func_80BCF778(EnHg* this, PlayState* play) {
void EnHg_PlayRedeadSfx(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health == 1) {
if (this->actionFunc == func_80BCF4AC || this->actionFunc == func_80BCF6D0 ||
this->actionFunc == func_80BCF634) {
if ((this->actionFunc == EnHg_ChasePlayer) || (this->actionFunc == EnHg_ReactToHit) ||
(this->actionFunc == EnHg_ChasePlayerWait)) {
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG);
}
}
}
void func_80BCF7D8(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health) {
void EnHg_UpdateCollision(EnHg* this, PlayState* play) {
if (this->actor.colChkInfo.health != 0) {
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
func_80BCF68C(this);
EnHg_SetupReactToHit(this);
}
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (this->actionFunc != func_80BCF6D0 && this->actionFunc != func_80BCF8A0 &&
this->actionFunc != func_80BCF95C) {
if ((this->actionFunc != EnHg_ReactToHit) && (this->actionFunc != EnHg_PlayCutscene) &&
(this->actionFunc != EnHg_HandleCsAction)) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
}
}
void func_80BCF88C(EnHg* this) {
this->actionFunc = func_80BCF8A0;
void EnHg_SetupCutscene(EnHg* this) {
this->actionFunc = EnHg_PlayCutscene;
}
void func_80BCF8A0(EnHg* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->unk218])) {
ActorCutscene_Start(this->cutscenes[this->unk218], &this->actor);
func_80BCF93C(this);
void EnHg_PlayCutscene(EnHg* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->cutscenes[this->cutsceneIndex])) {
ActorCutscene_Start(this->cutscenes[this->cutsceneIndex], &this->actor);
EnHg_SetupCsAction(this);
} else {
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
ActorCutscene_Stop(0x7C);
}
ActorCutscene_SetIntentToPlay(this->cutscenes[this->unk218]);
ActorCutscene_SetIntentToPlay(this->cutscenes[this->cutsceneIndex]);
}
}
void func_80BCF93C(EnHg* this) {
void EnHg_SetupCsAction(EnHg* this) {
this->cutscenes[3] = 0x63;
this->cutscenes[2] = 0;
this->actionFunc = func_80BCF95C;
this->actionFunc = EnHg_HandleCsAction;
}
void func_80BCF95C(EnHg* this, PlayState* play) {
void EnHg_HandleCsAction(EnHg* this, PlayState* play) {
if (Cutscene_CheckActorAction(play, 484)) {
s32 actionIndex = Cutscene_GetActorActionIndex(play, 484);
@ -278,109 +296,129 @@ void func_80BCF95C(EnHg* this, PlayState* play) {
switch (play->csCtx.actorActions[actionIndex]->action) {
case 1:
this->animIndex = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_IDLE);
break;
case 2:
this->cutscenes[2] = 0;
this->animIndex = 3;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
this->animIndex = HG_ANIM_LEAN_FORWARD;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LEAN_FORWARD);
break;
case 3:
this->cutscenes[2] = 0;
this->animIndex = 5;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
this->animIndex = HG_ANIM_CURL_UP;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CURL_UP);
break;
case 4:
this->cutscenes[2] = 0;
this->animIndex = 7;
if ((this->unk218 == 1) || (this->unk218 == 3)) {
this->animIndex = HG_ANIM_PANIC;
if ((this->cutsceneIndex == HG_CS_GET_MASK) || (this->cutsceneIndex == HG_CS_SONG_OF_HEALING)) {
func_8019F128(NA_SE_EN_HALF_REDEAD_TRANS);
}
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 7);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_PANIC);
break;
case 5:
this->animIndex = 1;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
this->animIndex = HG_ANIM_LURCH_FORWARD;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_LURCH_FORWARD);
break;
case 6:
gSaveContext.save.weekEventReg[75] |= 0x20;
Actor_Kill(&this->actor);
break;
}
} else {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
switch (this->animIndex) {
case 3:
this->animIndex = 4;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
break;
case 5:
this->animIndex = 6;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
switch (this->animIndex) {
case HG_ANIM_LEAN_FORWARD:
this->animIndex = HG_ANIM_REACH_FORWARD;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_REACH_FORWARD);
break;
case HG_ANIM_CURL_UP:
this->animIndex = HG_ANIM_CROUCHED_PANIC;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, HG_ANIM_CROUCHED_PANIC);
break;
}
}
switch (this->animIndex) {
case 3:
case 4:
case HG_ANIM_LEAN_FORWARD:
case HG_ANIM_REACH_FORWARD:
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_LOOP - SFX_FLAG);
break;
case 5:
case 6:
case HG_ANIM_CURL_UP:
case HG_ANIM_CROUCHED_PANIC:
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
break;
case 7:
if ((this->unk218 == 0) || (this->unk218 == 2)) {
case HG_ANIM_PANIC:
if ((this->cutsceneIndex == HG_CS_FIRST_ENCOUNTER) ||
(this->cutsceneIndex == HG_CS_SUBSEQUENT_ENCOUNTER)) {
func_800B9010(&this->actor, NA_SE_EN_HALF_REDEAD_SCREAME - SFX_FLAG);
}
break;
}
Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
return;
} else if (play->csCtx.state == 0) {
func_80BCF354(this);
EnHg_SetupWait(this);
}
this->cutscenes[3] = 0x63;
}
void func_80BCFC0C(EnHg* this, PlayState* play) {
void EnHg_WaitForPlayerAction(EnHg* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (this->actor.colChkInfo.health == 1 && !(fabsf(this->actor.playerHeightRel) >= 80.0f)) {
if (player->stateFlags2 & PLAYER_STATE2_8000000) {
if (!D_80BD00C8) {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
D_80BD00C8 = true;
} else {
D_80BD00C8 = false;
// If the player has gone upstairs this interaction will not trigger
if ((this->actor.colChkInfo.health != 1) || (fabsf(this->actor.playerHeightRel) >= 80.0f)) {
return;
}
if (player->stateFlags2 & PLAYER_STATE2_8000000) {
if (!sHasSoundPlayed) {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
}
if (play->msgCtx.ocarinaMode == 3) {
if (play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING &&
gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) {
this->unk218 = 3;
sHasSoundPlayed = true;
} else {
sHasSoundPlayed = false;
}
if (play->msgCtx.ocarinaMode == 3) {
if ((play->msgCtx.lastPlayedSong == OCARINA_SONG_HEALING) &&
(gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) {
if (INV_CONTENT(ITEM_MASK_GIBDO) == ITEM_MASK_GIBDO) {
this->cutsceneIndex = HG_CS_SONG_OF_HEALING;
} else {
this->cutsceneIndex = HG_CS_GET_MASK;
}
EnHg_SetupCutscene(this);
}
} else {
if ((this->actor.xzDistToPlayer < 60.0f) && (fabsf(this->actor.playerHeightRel) < 40.0f)) {
if ((this->actionFunc != EnHg_PlayCutscene) && (this->actionFunc != EnHg_HandleCsAction)) {
if (!(gSaveContext.save.weekEventReg[61] & 2)) {
gSaveContext.save.weekEventReg[61] |= 2;
this->cutsceneIndex = HG_CS_FIRST_ENCOUNTER;
} else {
this->unk218 = 1;
this->cutsceneIndex = HG_CS_SUBSEQUENT_ENCOUNTER;
}
func_80BCF88C(this);
EnHg_SetupCutscene(this);
return;
}
} else {
if (this->actor.xzDistToPlayer < 60.0f && fabsf(this->actor.playerHeightRel) < 40.0f) {
if ((this->actionFunc != func_80BCF8A0) && (this->actionFunc != func_80BCF95C)) {
if (!(gSaveContext.save.weekEventReg[61] & 2)) {
gSaveContext.save.weekEventReg[61] |= 2;
this->unk218 = 0;
} else {
this->unk218 = 2;
}
func_80BCF88C(this);
return;
}
}
func_80BCF710(this, play);
}
EnHg_HandleTatlDialog(this, play);
}
}
@ -389,10 +427,10 @@ void EnHg_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
func_80BCF7D8(this, play);
func_80BCFC0C(this, play);
EnHg_UpdateCollision(this, play);
EnHg_WaitForPlayerAction(this, play);
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, 5);
func_80BCF778(this, play);
EnHg_PlayRedeadSfx(this, play);
}
s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
@ -401,9 +439,9 @@ s32 EnHg_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* po
void EnHg_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnHg* this = THIS;
if (limbIndex == HARFGIBUD_GIBDO_LIMB_EYEBROWS) {
Matrix_Get(&this->unk1D8);
} else if (limbIndex == HARFGIBUD_GIBDO_LIMB_HEAD) {
if (limbIndex == PAMELAS_FATHER_GIBDO_LIMB_EYEBROWS) {
Matrix_Get(&this->mf);
} else if (limbIndex == PAMELAS_FATHER_GIBDO_LIMB_HEAD) {
Matrix_MultZero(&this->actor.focus.pos);
}
}
@ -415,8 +453,8 @@ void EnHg_Draw(Actor* thisx, PlayState* play) {
func_8012C28C(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHg_OverrideLimbDraw, EnHg_PostLimbDraw, &this->actor);
Matrix_Put(&this->unk1D8);
Matrix_Put(&this->mf);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gHarfgibudGibdoEyebrowsDL);
gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherGibdoEyebrowsDL);
CLOSE_DISPS(play->state.gfxCtx);
}

View File

@ -14,11 +14,11 @@ typedef struct EnHg {
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnHgActionFunc actionFunc;
/* 0x1D8 */ MtxF unk1D8;
/* 0x218 */ s32 unk218;
/* 0x1D8 */ MtxF mf;
/* 0x218 */ s32 cutsceneIndex;
/* 0x21C */ s32 animIndex;
/* 0x220 */ Vec3s jointTable[HARFGIBUD_GIBDO_LIMB_MAX];
/* 0x292 */ Vec3s morphTable[HARFGIBUD_GIBDO_LIMB_MAX];
/* 0x220 */ Vec3s jointTable[PAMELAS_FATHER_GIBDO_LIMB_MAX];
/* 0x292 */ Vec3s morphTable[PAMELAS_FATHER_GIBDO_LIMB_MAX];
/* 0x304 */ UNK_TYPE1 pad304[0xC];
/* 0x310 */ u16 cutscenes[4];
} EnHg; // size = 0x318

View File

@ -15,19 +15,40 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play);
void EnHgo_Update(Actor* thisx, PlayState* play);
void EnHgo_Draw(Actor* thisx, PlayState* play);
void func_80BD03EC(EnHgo* this);
void func_80BD0410(EnHgo* this, PlayState* play);
void func_80BD0434(EnHgo* this, PlayState* play);
void func_80BD049C(EnHgo* this);
void func_80BD04E0(EnHgo* this, PlayState* play);
void EnHgo_SetupDoNothing(EnHgo* this);
void EnHgo_DoNothing(EnHgo* this, PlayState* play);
void EnHgo_UpdateCollision(EnHgo* this, PlayState* play);
void EnHgo_SetupTalk(EnHgo* this);
void EnHgo_Talk(EnHgo* this, PlayState* play);
void EnHgo_SetupDialogueHandler(EnHgo* this);
void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play);
void func_80BD06FC(EnHgo* this, PlayState* play);
s32 func_80BD0898(EnHgo* this, PlayState* play);
void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play);
s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play);
s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx);
void EnHgo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* pos, Actor* thisx);
ActorInit En_Hgo_InitVars = {
#define TALK_FLAG_NONE 0
#define TALK_FLAG_HAS_SPOKEN_WITH_HUMAN (1 << 0)
#define TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM (1 << 1)
#define TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK (1 << 2)
typedef enum {
/* 0 */ HGO_EYE_OPEN,
/* 1 */ HGO_EYE_HALF,
/* 2 */ HGO_EYE_CLOSED
} EyeState;
typedef enum {
/* 0 */ HGO_ANIM_ARMS_FOLDED,
/* 1 */ HGO_ANIM_ASTONISHED,
/* 2 */ HGO_ANIM_KNEEL_DOWN_AND_HUG,
/* 3 */ HGO_ANIM_CONSOLE,
/* 4 */ HGO_ANIM_CONSOLE_HEAD_UP,
/* 5 */ HGO_ANIM_REACH_DOWN_TO_LIFT,
/* 6 */ HGO_ANIM_TOSS,
} HgoAnimation;
const ActorInit En_Hgo_InitVars = {
ACTOR_EN_HGO,
ACTORCAT_NPC,
FLAGS,
@ -40,13 +61,13 @@ ActorInit En_Hgo_InitVars = {
};
static AnimationInfo sAnimationInfo[] = {
{ &object_harfgibud_Anim_00B644, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &object_harfgibud_Anim_013684, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &object_harfgibud_Anim_0152EC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &object_harfgibud_Anim_015C70, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &object_harfgibud_Anim_0165F0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &object_harfgibud_Anim_014220, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &object_harfgibud_Anim_014A9C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherArmsFoldedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
{ &gPamelasFatherAstonishedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherKneelDownAndHugAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &gPamelasFatherConsoleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherConsoleHeadUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
{ &gPamelasFatherReachDownToLiftAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
{ &gPamelasFatherTossAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
static ColliderCylinderInit sCylinderInit = {
@ -71,33 +92,27 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
static TexturePtr sEyeTextures[] = {
object_harfgibud_Tex_011138,
object_harfgibud_Tex_011938,
object_harfgibud_Tex_012138,
};
void EnHgo_Init(Actor* thisx, PlayState* play) {
EnHgo* this = THIS;
s32 pad;
EnHgo* this = THIS;
ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gHarfgibudHumanSkel, &object_harfgibud_Anim_00B644, this->jointTable,
this->morphTable, HARFGIBUD_HUMAN_LIMB_MAX);
SkelAnime_InitFlex(play, &this->skelAnime, &gPamelasFatherHumanSkel, &gPamelasFatherArmsFoldedAnim,
this->jointTable, this->morphTable, PAMELAS_FATHER_HUMAN_LIMB_MAX);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&thisx->colChkInfo, NULL, &sColChkInfoInit);
thisx->targetMode = 6;
this->unk_30C = 0;
this->unk_30E = 0;
this->unk_314 = 0;
this->unk_310 = 0;
this->unk_312 = 0;
this->eyeIndex = 0;
this->blinkTimer = 0;
this->textId = 0;
this->talkFlags = TALK_FLAG_NONE;
this->isInCutscene = false;
if ((gSaveContext.save.weekEventReg[75] & 0x20) || (gSaveContext.save.weekEventReg[52] & 0x20)) {
func_80BD049C(this);
EnHgo_SetupTalk(this);
} else {
thisx->draw = NULL;
func_80BD03EC(this);
EnHgo_SetupDoNothing(this);
}
}
@ -107,59 +122,59 @@ void EnHgo_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
void func_80BD03EC(EnHgo* this) {
void EnHgo_SetupDoNothing(EnHgo* this) {
this->actor.flags &= ~ACTOR_FLAG_1;
this->actionFunc = func_80BD0410;
this->actionFunc = EnHgo_DoNothing;
}
void func_80BD0410(EnHgo* this, PlayState* play) {
void EnHgo_DoNothing(EnHgo* this, PlayState* play) {
}
void func_80BD0420(EnHgo* this) {
this->actionFunc = func_80BD0434;
void EnHgo_SetupInitCollision(EnHgo* this) {
this->actionFunc = EnHgo_UpdateCollision;
}
void func_80BD0434(EnHgo* this, PlayState* play) {
void EnHgo_UpdateCollision(EnHgo* this, PlayState* play) {
this->collider.dim.pos.x = this->actor.focus.pos.x;
this->collider.dim.pos.y = this->actor.world.pos.y;
this->collider.dim.pos.z = this->actor.focus.pos.z;
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
void func_80BD049C(EnHgo* this) {
void EnHgo_SetupTalk(EnHgo* this) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
this->actionFunc = func_80BD04E0;
this->actionFunc = EnHgo_Talk;
}
void func_80BD04E0(EnHgo* this, PlayState* play) {
void EnHgo_Talk(EnHgo* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
if (Player_GetMask(play) == PLAYER_MASK_GIBDO) {
if (!(this->unk_310 & 4)) {
this->unk_310 |= 4;
if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK)) {
this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_GIBDO_MASK;
Message_StartTextbox(play, 0x15A5, &this->actor);
this->unk_314 = 0x15A5; // That mask is a gibdo
this->textId = 0x15A5; // That mask is a gibdo
} else {
Message_StartTextbox(play, 0x15A7, &this->actor);
this->unk_314 = 0x15A7; // can I research that mask
this->textId = 0x15A7; // can I research that mask
}
} else if (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) {
if (!(this->unk_310 & 1)) {
this->unk_310 |= 1;
if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_HUMAN)) {
this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_HUMAN;
Message_StartTextbox(play, 0x158F, &this->actor);
this->unk_314 = 0x158F; // Isn't this a fairy
this->textId = 0x158F; // Isn't this a fairy
} else {
Message_StartTextbox(play, 0x1593, &this->actor);
this->unk_314 = 0x1593; // Never seen a fairy this lively
this->textId = 0x1593; // Never seen a fairy this lively
}
} else {
if (!(this->unk_310 & 2)) {
this->unk_310 |= 2;
if (!(this->talkFlags & TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM)) {
this->talkFlags |= TALK_FLAG_HAS_SPOKEN_WITH_OTHER_MASK_FORM;
Message_StartTextbox(play, 0x1595, &this->actor);
this->unk_314 = 0x1595; // ghost radar is reacting
this->textId = 0x1595; // ghost radar is reacting
} else {
Message_StartTextbox(play, 0x1598, &this->actor);
this->unk_314 = 0x1598; // you seem to be similar to a ghost
this->textId = 0x1598; // you seem to be similar to a ghost
}
}
EnHgo_SetupDialogueHandler(this);
@ -182,12 +197,12 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) {
break;
case TEXT_STATE_5:
func_80BD06FC(this, play);
EnHgo_HandlePlayerChoice(this, play);
break;
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
func_80BD049C(this);
EnHgo_SetupTalk(this);
}
break;
}
@ -196,109 +211,128 @@ void EnHgo_DefaultDialogueHandler(EnHgo* this, PlayState* play) {
this->actor.shape.rot.y = this->actor.world.rot.y;
}
void func_80BD06FC(EnHgo* this, PlayState* play) {
// Handles the next dialogue based on player's selection
void EnHgo_HandlePlayerChoice(EnHgo* this, PlayState* play) {
if (Message_ShouldAdvance(play)) {
switch (this->unk_314) {
switch (this->textId) {
case 0x158F:
Message_StartTextbox(play, 0x1590, &this->actor);
this->unk_314 = 0x1590;
this->textId = 0x1590;
break;
case 0x1590:
if (gSaveContext.save.weekEventReg[14] & 4) {
Message_StartTextbox(play, 0x1591, &this->actor);
this->unk_314 = 0x1591;
this->textId = 0x1591;
break;
}
Message_StartTextbox(play, 0x1592, &this->actor);
this->unk_314 = 0x1592;
this->textId = 0x1592;
break;
case 0x1591:
Message_StartTextbox(play, 0x1592, &this->actor);
this->unk_314 = 0x1592;
this->textId = 0x1592;
break;
case 0x1593:
Message_StartTextbox(play, 0x1594, &this->actor);
this->unk_314 = 0x1594;
this->textId = 0x1594;
break;
case 0x1595:
Message_StartTextbox(play, 0x1596, &this->actor);
this->unk_314 = 0x1596;
this->textId = 0x1596;
break;
case 0x1596:
Message_StartTextbox(play, 0x1597, &this->actor);
this->unk_314 = 0x1597;
this->textId = 0x1597;
break;
case 0x1598:
Message_StartTextbox(play, 0x1599, &this->actor);
this->unk_314 = 0x1599;
this->textId = 0x1599;
break;
case 0x15A5:
Message_StartTextbox(play, 0x15A6, &this->actor);
this->unk_314 = 0x15A6;
this->textId = 0x15A6;
break;
case 0x15A6:
Message_StartTextbox(play, 0x15A7, &this->actor);
this->unk_314 = 0x15A7;
this->textId = 0x15A7;
break;
case 0x15A7:
func_801477B4(play);
func_80BD049C(this);
EnHgo_SetupTalk(this);
break;
}
}
}
s32 func_80BD0898(EnHgo* this, PlayState* play) {
s32 EnHgo_HandleCsAction(EnHgo* this, PlayState* play) {
s32 actionIndex;
if (Cutscene_CheckActorAction(play, 486)) {
actionIndex = Cutscene_GetActorActionIndex(play, 486);
if (this->unk_316 != play->csCtx.actorActions[actionIndex]->action) {
this->unk_316 = play->csCtx.actorActions[actionIndex]->action;
if (this->csAction != play->csCtx.actorActions[actionIndex]->action) {
this->csAction = play->csCtx.actorActions[actionIndex]->action;
switch (play->csCtx.actorActions[actionIndex]->action) {
case 1:
this->unk_218 = 0;
this->animIndex = HGO_ANIM_ARMS_FOLDED;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 0);
break;
case 2:
this->actor.draw = EnHgo_Draw;
this->unk_218 = 1;
this->animIndex = HGO_ANIM_ASTONISHED;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
break;
case 3:
this->unk_218 = 2;
this->animIndex = HGO_ANIM_KNEEL_DOWN_AND_HUG;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
break;
case 4:
this->unk_218 = 3;
this->animIndex = HGO_ANIM_CONSOLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
break;
case 5:
this->unk_218 = 4;
this->animIndex = HGO_ANIM_CONSOLE_HEAD_UP;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4);
break;
case 6:
this->unk_218 = 5;
this->animIndex = HGO_ANIM_REACH_DOWN_TO_LIFT;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
break;
}
} else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
switch (this->unk_218) {
case 1:
if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) && (this->unk_312 == 0)) {
this->unk_312 = 1;
switch (this->animIndex) {
case HGO_ANIM_ASTONISHED:
if ((Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) &&
(this->isInCutscene == false)) {
this->isInCutscene = true;
if ((gSaveContext.sceneLayer == 0) &&
((play->csCtx.currentCsIndex == 2) || (play->csCtx.currentCsIndex == 4))) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_VO_GBVO02);
}
}
break;
case 2:
this->unk_218 = 3;
case HGO_ANIM_KNEEL_DOWN_AND_HUG:
this->animIndex = HGO_ANIM_CONSOLE;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
break;
case 5:
this->unk_218 = 6;
case HGO_ANIM_REACH_DOWN_TO_LIFT:
this->animIndex = HGO_ANIM_TOSS;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
}
}
@ -306,30 +340,32 @@ s32 func_80BD0898(EnHgo* this, PlayState* play) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, actionIndex);
return true;
}
if ((play->csCtx.state == 0) && (((gSaveContext.save.weekEventReg[75]) & 0x20)) &&
(this->actionFunc == func_80BD0410)) {
(this->actionFunc == EnHgo_DoNothing)) {
this->actor.shape.rot.y = this->actor.world.rot.y;
Actor_Spawn(&play->actorCtx, play, ACTOR_ELF_MSG2, this->actor.focus.pos.x, this->actor.focus.pos.y,
this->actor.focus.pos.z, 7, 0, 0, 0x7F5A);
func_80BD0420(this);
EnHgo_SetupInitCollision(this);
}
this->unk_316 = 0x63;
this->csAction = 0x63;
return false;
}
void func_80BD0B8C(EnHgo* this, PlayState* play) {
void EnHgo_UpdateModel(EnHgo* this, PlayState* play) {
Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->torsoRot, this->actor.focus.pos);
if (this->unk_30E > 2) {
this->unk_30E--;
} else if (this->unk_30E == 2) {
this->unk_30C = 1;
this->unk_30E = 1;
} else if (this->unk_30E == 1) {
this->unk_30C = 2;
this->unk_30E = 0;
if (this->blinkTimer > 2) {
this->blinkTimer--;
} else if (this->blinkTimer == 2) {
this->eyeIndex = HGO_EYE_HALF;
this->blinkTimer = 1;
} else if (this->blinkTimer == 1) {
this->eyeIndex = HGO_EYE_CLOSED;
this->blinkTimer = 0;
} else {
this->unk_30C = 0;
this->unk_30E = 60;
this->eyeIndex = HGO_EYE_OPEN;
this->blinkTimer = 60;
}
}
@ -339,13 +375,13 @@ void EnHgo_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
SkelAnime_Update(&this->skelAnime);
if (func_80BD0898(this, play)) {
if (EnHgo_HandleCsAction(this, play)) {
Actor_TrackNone(&this->headRot, &this->torsoRot);
} else if (this->actionFunc != func_80BD0410) {
if (this->actionFunc != func_80BD0434) {
} else if (this->actionFunc != EnHgo_DoNothing) {
if (this->actionFunc != EnHgo_UpdateCollision) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
func_80BD0B8C(this, play);
EnHgo_UpdateModel(this, play);
}
}
}
@ -353,7 +389,7 @@ void EnHgo_Update(Actor* thisx, PlayState* play) {
s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnHgo* this = THIS;
if (limbIndex == HARFGIBUD_HUMAN_LIMB_HEAD) {
if (limbIndex == PAMELAS_FATHER_HUMAN_LIMB_HEAD) {
rot->x += this->headRot.y;
rot->z += this->headRot.x;
}
@ -363,22 +399,28 @@ s32 EnHgo_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnHgo_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* pos, Actor* thisx) {
EnHgo* this = THIS;
if (limbIndex == HARFGIBUD_HUMAN_LIMB_HEAD) {
Matrix_Get(&this->unk_1D8);
if (limbIndex == PAMELAS_FATHER_HUMAN_LIMB_HEAD) {
Matrix_Get(&this->mf);
Matrix_MultZero(&this->actor.focus.pos);
}
}
static TexturePtr sEyeTextures[] = {
gPamelasFatherHumanEyeOpenTex,
gPamelasFatherHumanEyeHalfTex,
gPamelasFatherHumanEyeClosedTex,
};
void EnHgo_Draw(Actor* thisx, PlayState* play) {
EnHgo* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
func_8012C28C(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->unk_30C]));
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeIndex]));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnHgo_OverrideLimbDraw, &EnHgo_PostLimbDraw, &this->actor);
Matrix_Put(&this->unk_1D8);
Matrix_Put(&this->mf);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gHarfgibudHumanEyebrowsDL);
gSPDisplayList(POLY_OPA_DISP++, gPamelasFatherHumanEyebrowsDL);
CLOSE_DISPS(play->state.gfxCtx);
}

View File

@ -13,18 +13,18 @@ typedef struct EnHgo {
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnHgoActionFunc actionFunc;
/* 0x1D8 */ MtxF unk_1D8;
/* 0x218 */ s32 unk_218;
/* 0x21C */ Vec3s jointTable[HARFGIBUD_HUMAN_LIMB_MAX];
/* 0x28E */ Vec3s morphTable[HARFGIBUD_HUMAN_LIMB_MAX];
/* 0x1D8 */ MtxF mf;
/* 0x218 */ s32 animIndex;
/* 0x21C */ Vec3s jointTable[PAMELAS_FATHER_HUMAN_LIMB_MAX];
/* 0x28E */ Vec3s morphTable[PAMELAS_FATHER_HUMAN_LIMB_MAX];
/* 0x300 */ Vec3s headRot;
/* 0x306 */ Vec3s torsoRot; // Set, but not used
/* 0x30C */ s16 unk_30C;
/* 0x30E */ s16 unk_30E;
/* 0x310 */ s16 unk_310;
/* 0x312 */ s16 unk_312;
/* 0x314 */ u16 unk_314;
/* 0x316 */ u16 unk_316;
/* 0x30C */ s16 eyeIndex;
/* 0x30E */ s16 blinkTimer;
/* 0x310 */ s16 talkFlags;
/* 0x312 */ s16 isInCutscene;
/* 0x314 */ u16 textId;
/* 0x316 */ u16 csAction;
} EnHgo; // size = 0x318
#endif // Z_EN_HGO_H

View File

@ -15672,39 +15672,39 @@
0x80BCEF0C:("EffKamejimaWave_Draw",),
0x80BCF1D0:("EnHg_Init",),
0x80BCF328:("EnHg_Destroy",),
0x80BCF354:("func_80BCF354",),
0x80BCF398:("func_80BCF398",),
0x80BCF468:("func_80BCF468",),
0x80BCF4AC:("func_80BCF4AC",),
0x80BCF5F0:("func_80BCF5F0",),
0x80BCF634:("func_80BCF634",),
0x80BCF68C:("func_80BCF68C",),
0x80BCF6D0:("func_80BCF6D0",),
0x80BCF710:("func_80BCF710",),
0x80BCF778:("func_80BCF778",),
0x80BCF7D8:("func_80BCF7D8",),
0x80BCF88C:("func_80BCF88C",),
0x80BCF8A0:("func_80BCF8A0",),
0x80BCF93C:("func_80BCF93C",),
0x80BCF95C:("func_80BCF95C",),
0x80BCFC0C:("func_80BCFC0C",),
0x80BCF354:("EnHg_SetupWait",),
0x80BCF398:("EnHg_Wait",),
0x80BCF468:("EnHg_SetupChasePlayer",),
0x80BCF4AC:("EnHg_ChasePlayer",),
0x80BCF5F0:("EnHg_SetupChasePlayerWait",),
0x80BCF634:("EnHg_ChasePlayerWait",),
0x80BCF68C:("EnHg_SetupReactToHit",),
0x80BCF6D0:("EnHg_ReactToHit",),
0x80BCF710:("EnHg_HandleTatlDialog",),
0x80BCF778:("EnHg_PlayRedeadSfx",),
0x80BCF7D8:("EnHg_UpdateCollision",),
0x80BCF88C:("EnHg_SetupCutscene",),
0x80BCF8A0:("EnHg_PlayCutscene",),
0x80BCF93C:("EnHg_SetupCsAction",),
0x80BCF95C:("EnHg_HandleCsAction",),
0x80BCFC0C:("EnHg_WaitForPlayerAction",),
0x80BCFDC4:("EnHg_Update",),
0x80BCFE54:("EnHg_OverrideLimbDraw",),
0x80BCFE70:("EnHg_PostLimbDraw",),
0x80BCFEC4:("EnHg_Draw",),
0x80BD02B0:("EnHgo_Init",),
0x80BD03C0:("EnHgo_Destroy",),
0x80BD03EC:("func_80BD03EC",),
0x80BD0410:("func_80BD0410",),
0x80BD0420:("func_80BD0420",),
0x80BD0434:("func_80BD0434",),
0x80BD049C:("func_80BD049C",),
0x80BD04E0:("func_80BD04E0",),
0x80BD03EC:("EnHgo_SetupDoNothing",),
0x80BD0410:("EnHgo_DoNothing",),
0x80BD0420:("EnHgo_SetupInitCollision",),
0x80BD0434:("EnHgo_UpdateCollision",),
0x80BD049C:("EnHgo_SetupTalk",),
0x80BD04E0:("EnHgo_Talk",),
0x80BD064C:("EnHgo_SetupDialogueHandler",),
0x80BD0660:("EnHgo_DefaultDialogueHandler",),
0x80BD06FC:("func_80BD06FC",),
0x80BD0898:("func_80BD0898",),
0x80BD0B8C:("func_80BD0B8C",),
0x80BD06FC:("EnHgo_HandlePlayerChoice",),
0x80BD0898:("EnHgo_HandleCsAction",),
0x80BD0B8C:("EnHgo_UpdateModel",),
0x80BD0C30:("EnHgo_Update",),
0x80BD0CF0:("EnHgo_OverrideLimbDraw",),
0x80BD0D38:("EnHgo_PostLimbDraw",),