mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Merge remote-tracking branch 'upstream/main' into ovl_En_An
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
<Root>
|
||||
<!-- Assets for Anju -->
|
||||
<File Name="object_an1" Segment="6">
|
||||
<Animation Name="gAnju1TastingAnim" Offset="0x1090" /> <!-- Original name is "an_ajimi" ("tasting; sampling") -->
|
||||
<Animation Name="gAnju1TastingEndAnim" Offset="0x144C" /> <!-- Original name is "an_ajimiend" -->
|
||||
<Animation Name="gAnju1TasteAnim" Offset="0x1090" /> <!-- Original name is "an_ajimi" ("tasting; sampling") -->
|
||||
<Animation Name="gAnju1TasteEndAnim" Offset="0x144C" /> <!-- Original name is "an_ajimiend" -->
|
||||
|
||||
<Animation Name="gAnju1LookingUpRelievedAnim" Offset="0x1E74" /> <!-- Original name is "an_aogu" ("to look up") -->
|
||||
<Animation Name="gAnju1LookUpRelievedAnim" Offset="0x1E74" /> <!-- Original name is "an_aogu" ("to look up") -->
|
||||
<Animation Name="gAnju1SurprisedAnim" Offset="0x26B4" /> <!-- Original name is "an_bikkuri" ("to be surprised") -->
|
||||
<Animation Name="gAnju1WaitingWithTrayAnim" Offset="0x341C" /> <!-- Original name is "an_obonwait" ("obon" = "tray") -->
|
||||
<Animation Name="gAnju1WalkingWithTrayAnim" Offset="0x3EA8" /> <!-- Original name is "an_obonwalk" -->
|
||||
<Animation Name="gAnju1BowingAnim" Offset="0x544C" /> <!-- Original name is "an_ojigit" ("bow; bowing") -->
|
||||
<Animation Name="gAnju1CookingAnim" Offset="0x65C8" /> <!-- Original name is "an_ryouri" ("cooking") -->
|
||||
<Animation Name="gAnju1WaitWithTrayAnim" Offset="0x341C" /> <!-- Original name is "an_obonwait" ("obon" = "tray") -->
|
||||
<Animation Name="gAnju1WalkWithTrayAnim" Offset="0x3EA8" /> <!-- Original name is "an_obonwalk" -->
|
||||
<Animation Name="gAnju1BowAnim" Offset="0x544C" /> <!-- Original name is "an_ojigit" ("bow; bowing") -->
|
||||
<Animation Name="gAnju1CookAnim" Offset="0x65C8" /> <!-- Original name is "an_ryouri" ("cooking") -->
|
||||
<Animation Name="gAnju1SitAnim" Offset="0x71E8" /> <!-- Original name is "an_suwaru" ("to sit") -->
|
||||
<Animation Name="gAnju1SittingInDisbelieveAnim" Offset="0x7E08" /> <!-- Original name is "an_suzetsubou" ("su" = short for "suwaru", "zetsubou" = "despair; hopelessness") -->
|
||||
<Animation Name="gAnju1SittingInDisbeliefAnim" Offset="0x7E08" /> <!-- Original name is "an_suzetsubou" ("su" = short for "suwaru", "zetsubou" = "despair; hopelessness") -->
|
||||
<Animation Name="gAnju1IdleAnim" Offset="0x8B6C" /> <!-- Original name is "an_wait" -->
|
||||
|
||||
<!-- Skeleton's Display lists -->
|
||||
@@ -55,12 +55,12 @@
|
||||
<Texture Name="gAnju1EyeClosedTex" OutName="anju_eye_closed" Format="ci8" Width="32" Height="32" Offset="0xF3A0" TlutOffset="0xDD20" />
|
||||
<Texture Name="gAnju1MouthHappyTex" OutName="anju_mouth_happy" Format="ci8" Width="32" Height="16" Offset="0xF7A0" TlutOffset="0xDF20" />
|
||||
<Texture Name="gAnju1EyeSadTex" OutName="anju_eye_sad" Format="ci8" Width="32" Height="32" Offset="0xF9A0" TlutOffset="0xDD20" />
|
||||
<Texture Name="gAnju1EyeComfortingTex" OutName="anju_eye_comforting" Format="ci8" Width="32" Height="32" Offset="0xFDA0" TlutOffset="0xDD20" />
|
||||
<Texture Name="gAnju1EyeComfortTex" OutName="anju_eye_comfort" Format="ci8" Width="32" Height="32" Offset="0xFDA0" TlutOffset="0xDD20" />
|
||||
<Texture Name="gAnju1MouthOpenTex" OutName="anju_mouth_open" Format="ci8" Width="32" Height="16" Offset="0x101A0" TlutOffset="0xDF20" />
|
||||
<Texture Name="gAnju1EyeRelievedClosedTex" OutName="anju_eye_relieved_closed" Format="ci8" Width="32" Height="32" Offset="0x103A0" TlutOffset="0xDD20" />
|
||||
|
||||
<!-- Empty -->
|
||||
<DList Name="object_an1_DL_0111E0" Offset="0x111E0" />
|
||||
<DList Name="gAnju1EmptyDL" Offset="0x111E0" />
|
||||
|
||||
<!-- Food tray for Granny -->
|
||||
<DList Name="gAnju1FoodTrayDL" Offset="0x111E8" /> <!-- Original name is "an_obon_model" -->
|
||||
@@ -79,10 +79,10 @@
|
||||
<!-- Skeleton's limbs -->
|
||||
<Limb Name="gAnju1RootLimb" Type="Standard" EnumName="ANJU1_LIMB_ROOT" Offset="0x124D8" />
|
||||
<Limb Name="gAnju1TorsoLimb" Type="Standard" EnumName="ANJU1_LIMB_TORSO" Offset="0x124E4" />
|
||||
<Limb Name="gAnju1LeftUpperArmLimb" Type="Standard" EnumName="ANJU1_LIMB_LEFT_UPPERARM" Offset="0x124F0" />
|
||||
<Limb Name="gAnju1LeftUpperArmLimb" Type="Standard" EnumName="ANJU1_LIMB_LEFT_UPPER_ARM" Offset="0x124F0" />
|
||||
<Limb Name="gAnju1LeftForearmLimb" Type="Standard" EnumName="ANJU1_LIMB_LEFT_FOREARM" Offset="0x124FC" />
|
||||
<Limb Name="gAnju1LeftHandLimb" Type="Standard" EnumName="ANJU1_LIMB_LEFT_HAND" Offset="0x12508" />
|
||||
<Limb Name="gAnju1RightUpperArmLimb" Type="Standard" EnumName="ANJU1_LIMB_RIGHT_UPPERARM" Offset="0x12514" />
|
||||
<Limb Name="gAnju1RightUpperArmLimb" Type="Standard" EnumName="ANJU1_LIMB_RIGHT_UPPER_ARM" Offset="0x12514" />
|
||||
<Limb Name="gAnju1RightForearmLimb" Type="Standard" EnumName="ANJU1_LIMB_RIGHT_FOREARM" Offset="0x12520" />
|
||||
<Limb Name="gAnju1RightHandLimb" Type="Standard" EnumName="ANJU1_LIMB_RIGHT_HAND" Offset="0x1252C" />
|
||||
<Limb Name="gAnju1HeadLimb" Type="Standard" EnumName="ANJU1_LIMB_HEAD" Offset="0x12538" />
|
||||
@@ -102,6 +102,6 @@
|
||||
<Skeleton Name="gAnju1Skel" Type="Flex" LimbType="Standard" LimbNone="ANJU1_LIMB_NONE" LimbMax="ANJU1_LIMB_MAX" EnumName="Anju1Limb" Offset="0x12618" />
|
||||
|
||||
<Animation Name="gAnju1WalkAnim" Offset="0x13048" /> <!-- Original name is "an_walk" -->
|
||||
<Animation Name="gAnju1HoldingHandsAnim" Offset="0x13E1C" /> <!-- Holding hands with Kafei while kneeled --> <!-- Original name is "anj_tetunagu_loop" ("joined hands") -->
|
||||
<Animation Name="gAnju1HoldHandsAnim" Offset="0x13E1C" /> <!-- Holding hands with Kafei while kneeled --> <!-- Original name is "anj_tetunagu_loop" ("joined hands") -->
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- Assets for Anju on the rainy second day -->
|
||||
<File Name="object_an2" Segment="6">
|
||||
<!-- Empty -->
|
||||
<DList Name="object_an2_DL_000370" Offset="0x370" />
|
||||
<DList Name="gAnju2EmptyDL" Offset="0x370" />
|
||||
|
||||
<!-- Umbrella -->
|
||||
<DList Name="gAnju2UmbrellaDL" Offset="0x378" /> <!-- Original name is "an_kasa_model" ("umbrella; parasol") -->
|
||||
@@ -10,7 +10,7 @@
|
||||
<Texture Name="gAnju2UmbrellaDesignTex" OutName="umbrella_design" Format="i8" Width="32" Height="32" Offset="0x678" />
|
||||
|
||||
<!-- Animations holding the umbrella -->
|
||||
<Animation Name="gAnju2UmbrellaCryingAnim" Offset="0x1B80" /> <!-- Original name is "an_kasasuwarinaku" ("suwari" = "sitting", "naku" = "to cry; to weep; to sob") -->
|
||||
<Animation Name="gAnju2UmbrellaCryAnim" Offset="0x1B80" /> <!-- Original name is "an_kasasuwarinaku" ("suwari" = "sitting", "naku" = "to cry; to weep; to sob") -->
|
||||
<Animation Name="gAnju2UmbrellaIdleAnim" Offset="0x28DC" /> <!-- Original name is "an_kasawait" -->
|
||||
<Animation Name="gAnju2UmbrellaSitAnim" Offset="0x38A0" /> <!-- Original name is "an_kasawait2suwaru" ("suwaru" = "to sit") -->
|
||||
<Animation Name="gAnju2UmbrellaWalkAnim" Offset="0x42CC" /> <!-- Original name is "an_kasawalk" -->
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<!-- Assets for Anju sweeping on the third day -->
|
||||
<File Name="object_an3" Segment="6">
|
||||
<!-- Empty -->
|
||||
<DList Name="object_an3_DL_000300" Offset="0x300" />
|
||||
<DList Name="gAnju3EmptyDL" Offset="0x300" />
|
||||
|
||||
<!-- Broom -->
|
||||
<DList Name="gAnju3BroomDL" Offset="0x308" /> <!-- Original name is "an_hoki_model" ("broom") -->
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
<Root>
|
||||
<!-- Assets for Anju in the Couple's Mask cutscene -->
|
||||
<File Name="object_an4" Segment="6">
|
||||
<Animation Name="object_an4_Anim_00041C" Offset="0x41C" /> <!-- Not able to see it ingame... --> <!-- Original name is "anj_awase" ("to face; to be opposite (someone)") -->
|
||||
<Animation Name="gAnju4CombineMasks2Anim" Offset="0x41C" /> <!-- Original name is "anj_awase" ("to face; to be opposite (someone)") -->
|
||||
|
||||
<Animation Name="object_an4_Anim_0013C8" Offset="0x13C8" /> <!-- Start hugging while kneeled --> <!-- Original name is "anj_dakiau" ("to embrace each other") -->
|
||||
<Animation Name="object_an4_Anim_002550" Offset="0x2550" /> <!-- hugging while kneeled --> <!-- Original name is "anj_dakiau_loop" -->
|
||||
<Animation Name="object_an4_Anim_00353C" Offset="0x353C" /> <!-- Stop hugging while kneeled --> <!-- Original name is "anj_hanare" ("to be separated; to be apart") -->
|
||||
<Animation Name="object_an4_Anim_004498" Offset="0x4498" /> <!-- Original name is "anj_hanare_loop" -->
|
||||
<Animation Name="gAnju4HugAnim" Offset="0x13C8" /> <!-- Start hugging while kneeled --> <!-- Original name is "anj_dakiau" ("to embrace each other") -->
|
||||
<Animation Name="gAnju4HugLoopAnim" Offset="0x2550" /> <!-- hugging while kneeled --> <!-- Original name is "anj_dakiau_loop" -->
|
||||
|
||||
<Animation Name="gAnju4SittingRaiseFaceAnim" Offset="0x4A78" /> <!-- Original name is "anj_kaoage" ("raising face") -->
|
||||
<Animation Name="object_an4_Anim_00506C" Offset="0x506C" /> <!-- Original name is "anj_kaoage_loop" -->
|
||||
<Animation Name="object_an4_Anim_0060B4" Offset="0x60B4" /> <!-- Shows Moon Mask to Kafei --> <!-- Original name is "anj_miseau" ("to show each other") -->
|
||||
<Animation Name="object_an4_Anim_006CC0" Offset="0x6CC0" /> <!-- Holds the Moon Mask while standing --> <!-- Original name is "anj_mitume_loop" ("to stare (at); to gaze (at)") -->
|
||||
<Animation Name="object_an4_Anim_007E3C" Offset="0x7E3C" /> <!-- Holds the Moon Mask while kneeling --> <!-- Original name is "anj_omen" ("mask") -->
|
||||
<Animation Name="object_an4_Anim_0088C0" Offset="0x88C0" /> <!-- Holds the Moon Mask while kneeled --> <!-- Original name is "anj_omen_loop" -->
|
||||
<Animation Name="gAnju4HugReleaseAnim" Offset="0x353C" /> <!-- Stop hugging while kneeled --> <!-- Original name is "anj_hanare" ("to be separated; to be apart") -->
|
||||
<Animation Name="gAnju4HugReleaseLoopAnim" Offset="0x4498" /> <!-- Original name is "anj_hanare_loop" -->
|
||||
|
||||
<Animation Name="gAnju4LookUpAnim" Offset="0x4A78" /> <!-- Original name is "anj_kaoage" ("raising face") -->
|
||||
<Animation Name="gAnju4LookUpLoopAnim" Offset="0x506C" /> <!-- Original name is "anj_kaoage_loop" -->
|
||||
|
||||
<Animation Name="gAnju4CombineMasks1Anim" Offset="0x60B4" /> <!-- Shows Moon Mask to Kafei --> <!-- Original name is "anj_miseau" ("to show each other") -->
|
||||
|
||||
<Animation Name="gAnju4MaskStandLoopAnim" Offset="0x6CC0" /> <!-- Holds the Moon Mask while standing --> <!-- Original name is "anj_mitume_loop" ("to stare (at); to gaze (at)") -->
|
||||
|
||||
<Animation Name="gAnju4MaskKneelAnim" Offset="0x7E3C" /> <!-- Holds the Moon Mask while kneeling --> <!-- Original name is "anj_omen" ("mask") -->
|
||||
<Animation Name="gAnju4MaskKneelLoopAnim" Offset="0x88C0" /> <!-- Holds the Moon Mask while kneeled --> <!-- Original name is "anj_omen_loop" -->
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
<Root>
|
||||
<!-- Assets for Kafei's Mask -->
|
||||
<File Name="object_mask_kerfay" Segment="10">
|
||||
<DList Name="gKafeiMaskDL" Offset="0xD40" />
|
||||
<DList Name="gKafeisMaskDL" Offset="0xD40" />
|
||||
|
||||
<Texture Name="object_mask_kerfay_TLUT_001140" OutName="tlut_001140" Format="rgba16" Width="16" Height="16" Offset="0x1140" />
|
||||
<Texture Name="object_mask_kerfay_Tex_001340" OutName="tex_001340" Format="ci8" Width="16" Height="16" Offset="0x1340" />
|
||||
<Texture Name="object_mask_kerfay_Tex_001440" OutName="tex_001440" Format="ci8" Width="8" Height="16" Offset="0x1440" />
|
||||
<Texture Name="object_mask_kerfay_Tex_0014C0" OutName="tex_0014C0" Format="ci8" Width="8" Height="16" Offset="0x14C0" />
|
||||
<Texture Name="object_mask_kerfay_Tex_001540" OutName="tex_001540" Format="ci8" Width="16" Height="8" Offset="0x1540" />
|
||||
<Texture Name="gKafeisMaskTLUT" OutName="kafeis_mask_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1140" />
|
||||
<Texture Name="gKafeisMaskHoleTex" OutName="hole" Format="ci8" Width="16" Height="16" Offset="0x1340" TlutOffset="0x1140" />
|
||||
<Texture Name="gKafeisMaskHairTex" OutName="hair" Format="ci8" Width="8" Height="16" Offset="0x1440" TlutOffset="0x1140" />
|
||||
<Texture Name="gKafeisMaskHairPartAndUndersideTex" OutName="hair_part_and_underside" Format="ci8" Width="8" Height="16" Offset="0x14C0" TlutOffset="0x1140" />
|
||||
<Texture Name="gKafeisMaskEyebrowTex" OutName="eyebrow" Format="ci8" Width="16" Height="8" Offset="0x1540" TlutOffset="0x1140" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -1,95 +1,121 @@
|
||||
<Root>
|
||||
<!-- Object for Kaepora Gaebora (Owl) -->
|
||||
<File Name="object_owl" Segment="6">
|
||||
<Animation Name="object_owl_Anim_001168" Offset="0x1168" />
|
||||
<DList Name="object_owl_DL_001200" Offset="0x1200" />
|
||||
<Texture Name="object_owl_Tex_001290" OutName="tex_001290" Format="rgba16" Width="16" Height="32" Offset="0x1290" />
|
||||
<Animation Name="object_owl_Anim_001ADC" Offset="0x1ADC" />
|
||||
<DList Name="object_owl_DL_005050" Offset="0x5050" />
|
||||
<DList Name="object_owl_DL_0051C8" Offset="0x51C8" />
|
||||
<DList Name="object_owl_DL_0052F0" Offset="0x52F0" />
|
||||
<DList Name="object_owl_DL_005770" Offset="0x5770" />
|
||||
<DList Name="object_owl_DL_005828" Offset="0x5828" />
|
||||
<DList Name="object_owl_DL_0058E0" Offset="0x58E0" />
|
||||
<DList Name="object_owl_DL_0059A8" Offset="0x59A8" />
|
||||
<DList Name="object_owl_DL_005A98" Offset="0x5A98" />
|
||||
<DList Name="object_owl_DL_005C30" Offset="0x5C30" />
|
||||
<DList Name="object_owl_DL_005E70" Offset="0x5E70" />
|
||||
<DList Name="object_owl_DL_0060C8" Offset="0x60C8" />
|
||||
<DList Name="object_owl_DL_0062F8" Offset="0x62F8" />
|
||||
<DList Name="object_owl_DL_006578" Offset="0x6578" />
|
||||
<DList Name="object_owl_DL_0067B8" Offset="0x67B8" />
|
||||
<DList Name="object_owl_DL_006A10" Offset="0x6A10" />
|
||||
<DList Name="object_owl_DL_006C40" Offset="0x6C40" />
|
||||
<DList Name="object_owl_DL_006EC0" Offset="0x6EC0" />
|
||||
<DList Name="object_owl_DL_006F68" Offset="0x6F68" />
|
||||
<DList Name="object_owl_DL_007030" Offset="0x7030" />
|
||||
<DList Name="object_owl_DL_007120" Offset="0x7120" />
|
||||
<Texture Name="object_owl_Tex_0072B8" OutName="tex_0072B8" Format="rgba16" Width="16" Height="16" Offset="0x72B8" />
|
||||
<Texture Name="object_owl_Tex_0074B8" OutName="tex_0074B8" Format="rgba16" Width="16" Height="16" Offset="0x74B8" />
|
||||
<Texture Name="object_owl_Tex_0076B8" OutName="tex_0076B8" Format="rgba16" Width="32" Height="32" Offset="0x76B8" />
|
||||
<Texture Name="object_owl_Tex_007EB8" OutName="tex_007EB8" Format="rgba16" Width="32" Height="32" Offset="0x7EB8" />
|
||||
<Texture Name="object_owl_Tex_0086B8" OutName="tex_0086B8" Format="rgba16" Width="32" Height="32" Offset="0x86B8" />
|
||||
<Texture Name="object_owl_Tex_008EB8" OutName="tex_008EB8" Format="ci8" Width="32" Height="32" Offset="0x8EB8" />
|
||||
<Texture Name="object_owl_Tex_0092B8" OutName="tex_0092B8" Format="ci8" Width="32" Height="32" Offset="0x92B8" />
|
||||
<Texture Name="object_owl_Tex_0096B8" OutName="tex_0096B8" Format="ci8" Width="32" Height="32" Offset="0x96B8" />
|
||||
<Texture Name="object_owl_Tex_009AB8" OutName="tex_009AB8" Format="rgba16" Width="32" Height="32" Offset="0x9AB8" />
|
||||
<Texture Name="object_owl_Tex_00A2B8" OutName="tex_00A2B8" Format="rgba16" Width="16" Height="16" Offset="0xA2B8" />
|
||||
<Texture Name="object_owl_Tex_00A4B8" OutName="tex_00A4B8" Format="rgba16" Width="64" Height="32" Offset="0xA4B8" />
|
||||
<Texture Name="object_owl_Tex_00B4B8" OutName="tex_00B4B8" Format="rgba16" Width="32" Height="32" Offset="0xB4B8" />
|
||||
<Texture Name="object_owl_Tex_00BCB8" OutName="tex_00BCB8" Format="rgba16" Width="32" Height="32" Offset="0xBCB8" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4B8" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_01" Offset="0xC4B8" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4C4" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_02" Offset="0xC4C4" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4D0" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_03" Offset="0xC4D0" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4DC" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_04" Offset="0xC4DC" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4E8" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_05" Offset="0xC4E8" />
|
||||
<Limb Name="object_owl_Standardlimb_00C4F4" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_06" Offset="0xC4F4" />
|
||||
<Limb Name="object_owl_Standardlimb_00C500" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_07" Offset="0xC500" />
|
||||
<Limb Name="object_owl_Standardlimb_00C50C" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_08" Offset="0xC50C" />
|
||||
<Limb Name="object_owl_Standardlimb_00C518" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_09" Offset="0xC518" />
|
||||
<Limb Name="object_owl_Standardlimb_00C524" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0A" Offset="0xC524" />
|
||||
<Limb Name="object_owl_Standardlimb_00C530" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0B" Offset="0xC530" />
|
||||
<Limb Name="object_owl_Standardlimb_00C53C" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0C" Offset="0xC53C" />
|
||||
<Limb Name="object_owl_Standardlimb_00C548" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0D" Offset="0xC548" />
|
||||
<Limb Name="object_owl_Standardlimb_00C554" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0E" Offset="0xC554" />
|
||||
<Limb Name="object_owl_Standardlimb_00C560" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_0F" Offset="0xC560" />
|
||||
<Limb Name="object_owl_Standardlimb_00C56C" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_10" Offset="0xC56C" />
|
||||
<Limb Name="object_owl_Standardlimb_00C578" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_11" Offset="0xC578" />
|
||||
<Limb Name="object_owl_Standardlimb_00C584" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_12" Offset="0xC584" />
|
||||
<Limb Name="object_owl_Standardlimb_00C590" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_13" Offset="0xC590" />
|
||||
<Limb Name="object_owl_Standardlimb_00C59C" Type="Standard" EnumName="OBJECT_OWL_1_LIMB_14" Offset="0xC59C" />
|
||||
<Skeleton Name="object_owl_Skel_00C5F8" Type="Flex" LimbType="Standard" LimbNone="OBJECT_OWL_1_LIMB_NONE" LimbMax="OBJECT_OWL_1_LIMB_MAX" EnumName="ObjectOwl1Limb" Offset="0xC5F8" />
|
||||
<Animation Name="object_owl_Anim_00C6D4" Offset="0xC6D4" />
|
||||
<Animation Name="object_owl_Anim_00CB94" Offset="0xCB94" />
|
||||
<Animation Name="object_owl_Anim_00CDB0" Offset="0xCDB0" />
|
||||
<DList Name="object_owl_DL_00F220" Offset="0xF220" />
|
||||
<DList Name="object_owl_DL_00F3B0" Offset="0xF3B0" />
|
||||
<DList Name="object_owl_DL_00F540" Offset="0xF540" />
|
||||
<DList Name="object_owl_DL_00F5E8" Offset="0xF5E8" />
|
||||
<DList Name="object_owl_DL_00F6D0" Offset="0xF6D0" />
|
||||
<DList Name="object_owl_DL_00F840" Offset="0xF840" />
|
||||
<DList Name="object_owl_DL_00FCC0" Offset="0xFCC0" />
|
||||
<DList Name="object_owl_DL_00FD78" Offset="0xFD78" />
|
||||
<DList Name="object_owl_DL_00FE30" Offset="0xFE30" />
|
||||
<DList Name="object_owl_DL_00FEF8" Offset="0xFEF8" />
|
||||
<DList Name="object_owl_DL_00FFE8" Offset="0xFFE8" />
|
||||
<DList Name="object_owl_DL_010180" Offset="0x10180" />
|
||||
<DList Name="object_owl_DL_010248" Offset="0x10248" />
|
||||
<DList Name="object_owl_DL_010338" Offset="0x10338" />
|
||||
<Limb Name="object_owl_Standardlimb_0104D0" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_01" Offset="0x104D0" />
|
||||
<Limb Name="object_owl_Standardlimb_0104DC" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_02" Offset="0x104DC" />
|
||||
<Limb Name="object_owl_Standardlimb_0104E8" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_03" Offset="0x104E8" />
|
||||
<Limb Name="object_owl_Standardlimb_0104F4" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_04" Offset="0x104F4" />
|
||||
<Limb Name="object_owl_Standardlimb_010500" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_05" Offset="0x10500" />
|
||||
<Limb Name="object_owl_Standardlimb_01050C" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_06" Offset="0x1050C" />
|
||||
<Limb Name="object_owl_Standardlimb_010518" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_07" Offset="0x10518" />
|
||||
<Limb Name="object_owl_Standardlimb_010524" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_08" Offset="0x10524" />
|
||||
<Limb Name="object_owl_Standardlimb_010530" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_09" Offset="0x10530" />
|
||||
<Limb Name="object_owl_Standardlimb_01053C" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0A" Offset="0x1053C" />
|
||||
<Limb Name="object_owl_Standardlimb_010548" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0B" Offset="0x10548" />
|
||||
<Limb Name="object_owl_Standardlimb_010554" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0C" Offset="0x10554" />
|
||||
<Limb Name="object_owl_Standardlimb_010560" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0D" Offset="0x10560" />
|
||||
<Limb Name="object_owl_Standardlimb_01056C" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0E" Offset="0x1056C" />
|
||||
<Limb Name="object_owl_Standardlimb_010578" Type="Standard" EnumName="OBJECT_OWL_2_LIMB_0F" Offset="0x10578" />
|
||||
<Skeleton Name="object_owl_Skel_0105C0" Type="Flex" LimbType="Standard" LimbNone="OBJECT_OWL_2_LIMB_NONE" LimbMax="OBJECT_OWL_2_LIMB_MAX" EnumName="ObjectOwl2Limb" Offset="0x105C0" />
|
||||
<!-- Animation -->
|
||||
<Animation Name="gOwlTakeoffAnim" Offset="0x1168" />
|
||||
|
||||
<!-- Single feather -->
|
||||
<DList Name="gOwlFeatherDL" Offset="0x1200" />
|
||||
<Texture Name="gOwlFeatherTex" OutName="owl_feather" Format="rgba16" Width="16" Height="32" Offset="0x1290" />
|
||||
|
||||
<!-- Animation -->
|
||||
<Animation Name="gOwlFlyAnim" Offset="0x1ADC" />
|
||||
|
||||
<!-- Owl Flying DList -->
|
||||
<DList Name="gOwlFlyingLowerBodyDL" Offset="0x5050" />
|
||||
<DList Name="gOwlFlyingUpperBodyDL" Offset="0x51C8" />
|
||||
<DList Name="gOwlFlyingHeadDL" Offset="0x52F0" />
|
||||
<DList Name="gOwlFlyingRightEyebrowDL" Offset="0x5770" />
|
||||
<DList Name="gOwlFlyingLeftEyebrowDL" Offset="0x5828" />
|
||||
<DList Name="gOwlFlyingUpperRightLegDL" Offset="0x58E0" />
|
||||
<DList Name="gOwlFlyingLowerRightLegDL" Offset="0x59A8" />
|
||||
<DList Name="gOwlFlyingRightTalonDL" Offset="0x5A98" />
|
||||
<DList Name="gOwlFlyingLowerLeftWingDL" Offset="0x5C30" />
|
||||
<DList Name="gOwlFlyingMiddleLeftWing1DL" Offset="0x5E70" />
|
||||
<DList Name="gOwlFlyingMiddleLeftWing2DL" Offset="0x60C8" />
|
||||
<DList Name="gOwlFlyingUpperLeftWingDL" Offset="0x62F8" />
|
||||
<DList Name="gOwlFlyingLowerRightWingDL" Offset="0x6578" />
|
||||
<DList Name="gOwlFlyingMiddleRightWing1DL" Offset="0x67B8" />
|
||||
<DList Name="gOwlFlyingMiddleRightWing2DL" Offset="0x6A10" />
|
||||
<DList Name="gOwlFlyingUpperRightWingDL" Offset="0x6C40" />
|
||||
<DList Name="gOwlFlyingTailDL" Offset="0x6EC0" />
|
||||
<DList Name="gOwlFlyingUpperLeftLegDL" Offset="0x6F68" />
|
||||
<DList Name="gOwlFlyingLowerLeftLegDL" Offset="0x7030" />
|
||||
<DList Name="gOwlFlyingLeftTalonDL" Offset="0x7120" />
|
||||
|
||||
<!-- The two following TLUTs are identical and both are used as TLUTs for the eye textures -->
|
||||
<!-- TLUT used in gOwlPerchingHeadDL -->
|
||||
<Texture Name="gOwlPerchingEyeTLUT" OutName="owl_perching_eye_tlut" Format="rgba16" Width="16" Height="16" Offset="0x72B8" />
|
||||
<!-- TLUT used in gOwlFlyingHeadDL -->
|
||||
<Texture Name="gOwlFlyingEyeTLUT" OutName="owl_flying_eye_tlut" Format="rgba16" Width="16" Height="16" Offset="0x74B8" />
|
||||
|
||||
<!-- Textures -->
|
||||
<Texture Name="gOwlChinMarking1Tex" OutName="owl_chin_marking1" Format="rgba16" Width="32" Height="32" Offset="0x76B8" />
|
||||
<Texture Name="gOwlForeheadMarkingTex" OutName="owl_forehead_marking" Format="rgba16" Width="32" Height="32" Offset="0x7EB8" />
|
||||
<Texture Name="gOwlBeakTex" OutName="owl_beak" Format="rgba16" Width="32" Height="32" Offset="0x86B8" />
|
||||
<Texture Name="gOwlEyeOpenTex" OutName="owl_eye_open" Format="ci8" Width="32" Height="32" Offset="0x8EB8" />
|
||||
<Texture Name="gOwlEyeHalfTex" OutName="owl_eye_half" Format="ci8" Width="32" Height="32" Offset="0x92B8" />
|
||||
<Texture Name="gOwlEyeClosedTex" OutName="owl_eye_closed" Format="ci8" Width="32" Height="32" Offset="0x96B8" />
|
||||
<Texture Name="gOwlChinMarking2Tex" OutName="owl_chin_marking2" Format="rgba16" Width="32" Height="32" Offset="0x9AB8" />
|
||||
<Texture Name="gOwlFeathersTex" OutName="owl_feathers" Format="rgba16" Width="16" Height="16" Offset="0xA2B8" />
|
||||
<Texture Name="gOwlEyebrowTex" OutName="owl_eyebrow" Format="rgba16" Width="64" Height="32" Offset="0xA4B8" />
|
||||
<Texture Name="gOwlFlightFeathers1Tex" OutName="owl_flight_feathers1" Format="rgba16" Width="32" Height="32" Offset="0xB4B8" />
|
||||
<Texture Name="gOwlFlightFeathers2Tex" OutName="owl_flight_feathers2" Format="rgba16" Width="32" Height="32" Offset="0xBCB8" />
|
||||
|
||||
<!-- Owl Flying Limbs -->
|
||||
<Limb Name="gOwlFlyingLowerBodyLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LOWER_BODY" Offset="0xC4B8" />
|
||||
<Limb Name="gOwlFlyingUpperBodyLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_UPPER_BODY" Offset="0xC4C4" />
|
||||
<Limb Name="gOwlFlyingHeadLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_HEAD" Offset="0xC4D0" />
|
||||
<Limb Name="gOwlFlyingRightEyebrowLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_RIGHT_EYEBROW" Offset="0xC4DC" />
|
||||
<Limb Name="gOwlFlyingLeftEyebrowLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LEFT_EYEBROW" Offset="0xC4E8" />
|
||||
<Limb Name="gOwlFlyingLowerLeftWingLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LOWER_LEFT_WING" Offset="0xC4F4" />
|
||||
<Limb Name="gOwlFlyingMiddleLeftWing1Limb" Type="Standard" EnumName="OWL_FLYING_LIMB_MIDDLE_LEFT_WING_1" Offset="0xC500" />
|
||||
<Limb Name="gOwlFlyingMiddleLeftWing2Limb" Type="Standard" EnumName="OWL_FLYING_LIMB_MIDDLE_LEFT_WING_2" Offset="0xC50C" />
|
||||
<Limb Name="gOwlFlyingUpperLeftWingLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_UPPER_LEFT_WING" Offset="0xC518" />
|
||||
<Limb Name="gOwlFlyingLowerRightWingLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LOWER_RIGHT_WING" Offset="0xC524" />
|
||||
<Limb Name="gOwlFlyingMiddleRightWing1Limb" Type="Standard" EnumName="OWL_FLYING_LIMB_MIDDLE_RIGHT_WING_1" Offset="0xC530" />
|
||||
<Limb Name="gOwlFlyingMiddleRightWing2Limb" Type="Standard" EnumName="OWL_FLYING_LIMB_MIDDLE_RIGHT_WING_2" Offset="0xC53C" />
|
||||
<Limb Name="gOwlFlyingUpperRightWingLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_UPPER_RIGHT_WING" Offset="0xC548" />
|
||||
<Limb Name="gOwlFlyingUpperRightLegLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_UPPER_RIGHT_LEG" Offset="0xC554" />
|
||||
<Limb Name="gOwlFlyingLowerRightLegLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LOWER_RIGHT_LEG" Offset="0xC560" />
|
||||
<Limb Name="gOwlFlyingRightTalonLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_RIGHT_TALON" Offset="0xC56C" />
|
||||
<Limb Name="gOwlFlyingUpperLeftLegLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_UPPER_LEFT_LEG" Offset="0xC578" />
|
||||
<Limb Name="gOwlFlyingLowerLeftLegLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LOWER_LEFT_LEG" Offset="0xC584" />
|
||||
<Limb Name="gOwlFlyingLeftTalonLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_LEFT_TALON" Offset="0xC590" />
|
||||
<Limb Name="gOwlFlyingTailLimb" Type="Standard" EnumName="OWL_FLYING_LIMB_TAIL" Offset="0xC59C" />
|
||||
|
||||
<!-- Owl Flying Skeleton -->
|
||||
<Skeleton Name="gOwlFlyingSkel" Type="Flex" LimbType="Standard" LimbNone="OWL_FLYING_LIMB_NONE" LimbMax="OWL_FLYING_LIMB_MAX" EnumName="OwlFlyingLimb" Offset="0xC5F8" />
|
||||
|
||||
<!-- Animations -->
|
||||
<Animation Name="gOwlGlideAnim" Offset="0xC6D4" />
|
||||
<Animation Name="gOwlUnfoldWingsAnim" Offset="0xCB94" />
|
||||
<Animation Name="gOwlPerchAnim" Offset="0xCDB0" />
|
||||
|
||||
<!-- Owl Perching DList -->
|
||||
<DList Name="gOwlPerchingLeftWingDL" Offset="0xF220" />
|
||||
<DList Name="gOwlPerchingRightWingDL" Offset="0xF3B0" />
|
||||
<DList Name="gOwlPerchingTailDL" Offset="0xF540" />
|
||||
<DList Name="gOwlPerchingLowerBodyDL" Offset="0xF5E8" />
|
||||
<DList Name="gOwlPerchingUpperBodyDL" Offset="0xF6D0" />
|
||||
<DList Name="gOwlPerchingHeadDL" Offset="0xF840" />
|
||||
<DList Name="gOwlPerchingRightEyebrowDL" Offset="0xFCC0" />
|
||||
<DList Name="gOwlPerchingLeftEyebrowDL" Offset="0xFD78" />
|
||||
<DList Name="gOwlPerchingUpperLeftLegDL" Offset="0xFE30" />
|
||||
<DList Name="gOwlPerchingLowerLeftLegDL" Offset="0xFEF8" />
|
||||
<DList Name="gOwlPerchingLeftTalonDL" Offset="0xFFE8" />
|
||||
<DList Name="gOwlPerchingUpperRightLegDL" Offset="0x10180" />
|
||||
<DList Name="gOwlPerchingLowerRightLegDL" Offset="0x10248" />
|
||||
<DList Name="gOwlPerchingRightTalonDL" Offset="0x10338" />
|
||||
|
||||
<!-- Owl Perching Limbs -->
|
||||
<Limb Name="gOwlPerchingRootLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_ROOT" Offset="0x104D0" />
|
||||
<Limb Name="gOwlPerchingUpperBodyLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_UPPER_BODY" Offset="0x104DC" />
|
||||
<Limb Name="gOwlPerchingHeadLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_HEAD" Offset="0x104E8" />
|
||||
<Limb Name="gOwlPerchingRightEyebrowLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_RIGHT_EYEBROW" Offset="0x104F4" />
|
||||
<Limb Name="gOwlPerchingLeftEyebrowLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LEFT_EYEBROW" Offset="0x10500" />
|
||||
<Limb Name="gOwlPerchingLowerBodyLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LOWER_BODY" Offset="0x1050C" />
|
||||
<Limb Name="gOwlPerchingRightWingLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_RIGHT_WING" Offset="0x10518" />
|
||||
<Limb Name="gOwlPerchingLeftWingLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LEFT_WING" Offset="0x10524" />
|
||||
<Limb Name="gOwlPerchingUpperLeftLegLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_UPPER_LEFT_LEG" Offset="0x10530" />
|
||||
<Limb Name="gOwlPerchingLowerLeftLegLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LOWER_LEFT_LEG" Offset="0x1053C" />
|
||||
<Limb Name="gOwlPerchingLeftTalonLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LEFT_TALON" Offset="0x10548" />
|
||||
<Limb Name="gOwlPerchingUpperRightLegLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_UPPER_RIGHT_LEG" Offset="0x10554" />
|
||||
<Limb Name="gOwlPerchingLowerRightLegLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_LOWER_RIGHT_LEG" Offset="0x10560" />
|
||||
<Limb Name="gOwlPerchingRightTalonLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_RIGHT_TALON" Offset="0x1056C" />
|
||||
<Limb Name="gOwlPerchingTailLimb" Type="Standard" EnumName="OWL_PERCHING_LIMB_TAIL" Offset="0x10578" />
|
||||
|
||||
<!-- Owl Perching Skeleton -->
|
||||
<Skeleton Name="gOwlPerchingSkel" Type="Flex" LimbType="Standard" LimbNone="OWL_PERCHING_LIMB_NONE" LimbMax="OWL_PERCHING_LIMB_MAX" EnumName="OwlPerchingLimb" Offset="0x105C0" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<Root>
|
||||
<!-- Hot Spring Water found in the Goron Graveyard -->
|
||||
<File Name="object_oyu" Segment="6">
|
||||
<DList Name="object_oyu_DL_000080" Offset="0x80" />
|
||||
<DList Name="object_oyu_DL_000158" Offset="0x158" />
|
||||
<Texture Name="object_oyu_Tex_000160" OutName="tex_000160" Format="rgba16" Width="32" Height="32" Offset="0x160" />
|
||||
<TextureAnimation Name="object_oyu_Matanimheader_000968" Offset="0x968" />
|
||||
<Collision Name="object_oyu_Colheader_000988" Offset="0x988" />
|
||||
<DList Name="gGoronGraveyardHotSpringWaterDL" Offset="0x80" />
|
||||
<DList Name="gGoronGraveyardHotSpringWaterEmptyDL" Offset="0x158" />
|
||||
<Texture Name="gGoronGraveyardHotSpringWaterTex" OutName="hot_spring_water" Format="rgba16" Width="32" Height="32" Offset="0x160" />
|
||||
<TextureAnimation Name="gGoronGraveyardHotSpringWaterTexAnim" Offset="0x968" />
|
||||
<Collision Name="gGoronGraveyardHotSpringWaterCol" Offset="0x988" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -482,7 +482,7 @@ typedef enum {
|
||||
/* 0x22A */ CS_CMD_ACTOR_CUE_554,
|
||||
/* 0x22B */ CS_CMD_ACTOR_CUE_555,
|
||||
/* 0x22C */ CS_CMD_ACTOR_CUE_556,
|
||||
/* 0x22D */ CS_CMD_ACTOR_CUE_557, // Moon mask cs, Anju
|
||||
/* 0x22D */ CS_CMD_ACTOR_CUE_557, // Couple's Mask cs, Anju cues
|
||||
/* 0x22E */ CS_CMD_ACTOR_CUE_558,
|
||||
/* 0x22F */ CS_CMD_ACTOR_CUE_559,
|
||||
/* 0x230 */ CS_CMD_ACTOR_CUE_560,
|
||||
|
||||
@@ -2515,7 +2515,7 @@ u8 D_801C0B1C[] = {
|
||||
|
||||
Gfx* D_801C0B20[] = {
|
||||
object_mask_truth_DL_0001A0, // PLAYER_MASK_TRUTH
|
||||
gKafeiMaskDL, // PLAYER_MASK_KAFEIS_MASK
|
||||
gKafeisMaskDL, // PLAYER_MASK_KAFEIS_MASK
|
||||
object_mask_yofukasi_DL_000490, // PLAYER_MASK_ALL_NIGHT
|
||||
object_mask_rabit_DL_000610, // PLAYER_MASK_BUNNY
|
||||
object_mask_ki_tan_DL_0004A0, // PLAYER_MASK_KEATON
|
||||
|
||||
@@ -153,7 +153,7 @@ void BgGoronOyu_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
Actor_SetScale(&this->dyna.actor, 0.1f);
|
||||
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
|
||||
CollisionHeader_GetVirtual(&object_oyu_Colheader_000988, &colHeader);
|
||||
CollisionHeader_GetVirtual(&gGoronGraveyardHotSpringWaterCol, &colHeader);
|
||||
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
|
||||
@@ -185,10 +185,10 @@ void BgGoronOyu_Draw(Actor* thisx, PlayState* play) {
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(object_oyu_Matanimheader_000968));
|
||||
AnimatedMat_Draw(play, Lib_SegmentedToVirtual(gGoronGraveyardHotSpringWaterTexAnim));
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000158);
|
||||
gSPDisplayList(POLY_XLU_DISP++, &object_oyu_DL_000080);
|
||||
gSPDisplayList(POLY_XLU_DISP++, &gGoronGraveyardHotSpringWaterEmptyDL);
|
||||
gSPDisplayList(POLY_XLU_DISP++, &gGoronGraveyardHotSpringWaterDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
@@ -16,10 +16,10 @@ void DmAn_Init(Actor* thisx, PlayState* play);
|
||||
void DmAn_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmAn_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80C1C958(DmAn* this, PlayState* play);
|
||||
void DmAn_HandleCutscene(DmAn* this, PlayState* play);
|
||||
void DmAn_WaitForObject(DmAn* this, PlayState* play);
|
||||
void DmAn_HandleCouplesMaskCs(DmAn* this, PlayState* play);
|
||||
void DmAn_DoNothing(DmAn* this, PlayState* play);
|
||||
void func_80C1D0B0(Actor* thisx, PlayState* play);
|
||||
void DmAn_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
ActorInit Dm_An_InitVars = {
|
||||
ACTOR_DM_AN,
|
||||
@@ -33,40 +33,51 @@ ActorInit Dm_An_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
/* -1 */ DMAN_ANIM_NONE = -1,
|
||||
/* 0x0 */ DMAN_ANIM_0,
|
||||
/* 0x1 */ DMAN_ANIM_1,
|
||||
/* 0x2 */ DMAN_ANIM_2,
|
||||
/* 0x3 */ DMAN_ANIM_3,
|
||||
/* 0x4 */ DMAN_ANIM_4,
|
||||
/* 0x5 */ DMAN_ANIM_5,
|
||||
/* 0x6 */ DMAN_ANIM_6,
|
||||
/* 0x7 */ DMAN_ANIM_7,
|
||||
/* 0x8 */ DMAN_ANIM_8,
|
||||
/* 0x9 */ DMAN_ANIM_9,
|
||||
/* 0xA */ DMAN_ANIM_10,
|
||||
/* 0xB */ DMAN_ANIM_11,
|
||||
/* 0xC */ DMAN_ANIM_12,
|
||||
/* 0xD */ DMAN_ANIM_13,
|
||||
/* 0xE */ DMAN_ANIM_MAX
|
||||
/**
|
||||
* Anju stores her animations across different objects and the ones used by this actor are put together right next to
|
||||
* each other in the sAnimationInfo array. Due to this, animation functions check which object to load by comparing
|
||||
* index ranges. To make this a bit easier to read, this enum includes `DMAN_ANIMOBJ_*` values that mark when a range of
|
||||
* animations of a certain object start
|
||||
*/
|
||||
typedef enum DmAnAnimation {
|
||||
/* -1 */ DMAN_ANIM_NONE = -1,
|
||||
/* 0 */ DMAN_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 1 */ DMAN_ANIM_SIT,
|
||||
|
||||
/* 2 */ DMAN_ANIMOBJ_AN4,
|
||||
/* 2 */ DMAN_ANIM_MASK_STAND_LOOP = DMAN_ANIMOBJ_AN4,
|
||||
/* 3 */ DMAN_ANIM_HOLD_HANDS, //! @bug See note at `sAnimationInfo`
|
||||
/* 4 */ DMAN_ANIM_MASK_KNEEL,
|
||||
/* 5 */ DMAN_ANIM_MASK_KNEEL_LOOP,
|
||||
/* 6 */ DMAN_ANIM_HUG,
|
||||
/* 7 */ DMAN_ANIM_HUG_LOOP,
|
||||
/* 8 */ DMAN_ANIM_HUG_RELEASE,
|
||||
/* 9 */ DMAN_ANIM_HUG_RELEASE_LOOP,
|
||||
/* 10 */ DMAN_ANIM_COMBINE_MASKS_1,
|
||||
/* 11 */ DMAN_ANIM_COMBINE_MASKS_2,
|
||||
/* 12 */ DMAN_ANIM_LOOK_UP,
|
||||
/* 13 */ DMAN_ANIM_LOOK_UP_LOOP,
|
||||
/* 14 */ DMAN_ANIM_MAX
|
||||
} DmAnAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMAN_ANIM_MAX] = {
|
||||
{ &gAnju1SittingInDisbelieveAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_0
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_1
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_2
|
||||
{ &gAnju1HoldingHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_3
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_4
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_5
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_6
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_7
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_8
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_9
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_10
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_11
|
||||
{ &gAnju4SittingRaiseFaceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_12
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_13
|
||||
{ &gAnju1SittingInDisbeliefAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_SITTING_IN_DISBELIEF
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_SIT
|
||||
|
||||
// DMAN_ANIMOBJ_AN4
|
||||
{ &gAnju4MaskStandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_MASK_STAND_LOOP
|
||||
//! @bug Uses symbol from OBJECT_AN1 instead of OBJECT_AN4
|
||||
{ &gAnju1HoldHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HOLD_HANDS
|
||||
{ &gAnju4MaskKneelAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_MASK_KNEEL
|
||||
{ &gAnju4MaskKneelLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_MASK_KNEEL_LOOP
|
||||
{ &gAnju4HugAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_HUG
|
||||
{ &gAnju4HugLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HUG_LOOP
|
||||
{ &gAnju4HugReleaseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_HUG_RELEASE
|
||||
{ &gAnju4HugReleaseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_HUG_RELEASE_LOOP
|
||||
{ &gAnju4CombineMasks1Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_COMBINE_MASKS_1
|
||||
{ &gAnju4CombineMasks2Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_COMBINE_MASKS_2
|
||||
{ &gAnju4LookUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMAN_ANIM_LOOK_UP
|
||||
{ &gAnju4LookUpLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMAN_ANIM_LOOK_UP_LOOP
|
||||
};
|
||||
|
||||
s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) {
|
||||
@@ -74,13 +85,13 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) {
|
||||
s8 objectSlot2;
|
||||
s32 isAnimFinished = false;
|
||||
|
||||
if (this->animIndex <= DMAN_ANIM_1) {
|
||||
if (this->animIndex < DMAN_ANIMOBJ_AN4) {
|
||||
objectSlot2 = this->actor.objectSlot;
|
||||
} else {
|
||||
objectSlot2 = this->an4ObjectSlot;
|
||||
}
|
||||
|
||||
if (objectSlot2 >= 0) {
|
||||
if (objectSlot2 > OBJECT_SLOT_NONE) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment);
|
||||
isAnimFinished = SkelAnime_Update(&this->skelAnime);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
|
||||
@@ -89,18 +100,18 @@ s32 DmAn_UpdateSkelAnime(DmAn* this, PlayState* play) {
|
||||
return isAnimFinished;
|
||||
}
|
||||
|
||||
s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) {
|
||||
s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, DmAnAnimation animIndex) {
|
||||
s8 objectSlot = this->actor.objectSlot;
|
||||
s8 objectSlot2;
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (animIndex <= DMAN_ANIM_1) {
|
||||
if (animIndex < DMAN_ANIMOBJ_AN4) {
|
||||
objectSlot2 = this->actor.objectSlot;
|
||||
} else {
|
||||
objectSlot2 = this->an4ObjectSlot;
|
||||
}
|
||||
|
||||
if ((objectSlot2 >= 0) && (this->animIndex != animIndex)) {
|
||||
if ((objectSlot2 > OBJECT_SLOT_NONE) && (this->animIndex != animIndex)) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot2].segment);
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
@@ -110,66 +121,85 @@ s32 DmAn_ChangeAnim(DmAn* this, PlayState* play, s32 animIndex) {
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C1C5B4(DmAn* this) {
|
||||
if (DECR(this->unk_2BA) == 0) {
|
||||
this->unk_2B8++;
|
||||
if (this->unk_2B8 >= 4) {
|
||||
this->unk_2BA = Rand_S16Offset(30, 30);
|
||||
this->unk_2B8 = 0;
|
||||
typedef enum DmAnEyes {
|
||||
/* 0 */ DMAN_EYES_OPEN,
|
||||
/* 1 */ DMAN_EYES_HALF1,
|
||||
/* 2 */ DMAN_EYES_CLOSED,
|
||||
/* 3 */ DMAN_EYES_HALF2,
|
||||
/* 4 */ DMAN_EYES_COMFORT,
|
||||
/* 5 */ DMAN_EYES_SAD,
|
||||
/* 6 */ DMAN_EYES_RELIEVED_CLOSED,
|
||||
/* 7 */ DMAN_EYES_MAX
|
||||
} DmAnEyes;
|
||||
|
||||
typedef enum DmAnMouth {
|
||||
/* 0 */ DMAN_MOUTH_CLOSED,
|
||||
/* 1 */ DMAN_MOUTH_HAPPY,
|
||||
/* 2 */ DMAN_MOUTH_OPEN,
|
||||
/* 3 */ DMAN_MOUTH_MAX
|
||||
} DmAnMouth;
|
||||
|
||||
void DmAn_Blink(DmAn* this) {
|
||||
if (DECR(this->eyeTimer) == 0) {
|
||||
this->eyeTexIndex++;
|
||||
if (this->eyeTexIndex > DMAN_EYES_HALF2) {
|
||||
this->eyeTimer = Rand_S16Offset(30, 30);
|
||||
this->eyeTexIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_80C1C62C(DmAn* this, PlayState* play) {
|
||||
s32 DmAn_UpdateHeadRot(DmAn* this, PlayState* play) {
|
||||
s32 pad;
|
||||
Vec3f sp40;
|
||||
Vec3f sp34;
|
||||
s16 sp32;
|
||||
Vec3f lookAtActorPos;
|
||||
Vec3f pos;
|
||||
s16 yaw;
|
||||
|
||||
Math_Vec3f_Copy(&sp40, &this->unk_2B4->world.pos);
|
||||
Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
|
||||
sp32 = Math_Vec3f_Yaw(&sp34, &sp40);
|
||||
Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->world.pos);
|
||||
Math_Vec3f_Copy(&pos, &this->actor.world.pos);
|
||||
yaw = Math_Vec3f_Yaw(&pos, &lookAtActorPos);
|
||||
|
||||
Math_ApproachS(&this->unk_2C0, (sp32 - this->unk_2C4) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->unk_2C0 = CLAMP(this->unk_2C0, -0x1FFE, 0x1FFE);
|
||||
Math_ApproachS(&this->headRotY, (yaw - this->torsoRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE);
|
||||
|
||||
Math_ApproachS(&this->unk_2C4, (sp32 - this->unk_2C0) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70);
|
||||
Math_ApproachS(&this->torsoRotY, (yaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->torsoRotY = CLAMP(this->torsoRotY, -0x1C70, 0x1C70);
|
||||
|
||||
if (this->unk_2B4->id == ACTOR_PLAYER) {
|
||||
sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
|
||||
if (this->lookAtActor->id == ACTOR_PLAYER) {
|
||||
lookAtActorPos.y = ((Player*)this->lookAtActor)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
|
||||
} else {
|
||||
Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos);
|
||||
Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->focus.pos);
|
||||
}
|
||||
|
||||
Math_Vec3f_Copy(&sp34, &this->actor.focus.pos);
|
||||
Math_ApproachS(&this->unk_2BE, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2C2, 4, 0x2AA8);
|
||||
this->unk_2BE = CLAMP(this->unk_2BE, -0x1C70, 0x1C70);
|
||||
Math_Vec3f_Copy(&pos, &this->actor.focus.pos);
|
||||
Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->torsoRotZ, 4, 0x2AA8);
|
||||
this->headRotZ = CLAMP(this->headRotZ, -0x1C70, 0x1C70);
|
||||
|
||||
Math_ApproachS(&this->torsoRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->headRotZ, 4, 0x2AA8);
|
||||
this->torsoRotZ = CLAMP(this->torsoRotZ, -0x1C70, 0x1C70);
|
||||
|
||||
Math_ApproachS(&this->unk_2C2, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2BE, 4, 0x2AA8);
|
||||
this->unk_2C2 = CLAMP(this->unk_2C2, -0x1C70, 0x1C70);
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 func_80C1C83C(DmAn* this, PlayState* play) {
|
||||
if (this->unk_2B4 != NULL) {
|
||||
func_80C1C62C(this, play);
|
||||
this->unk_2AE &= ~1;
|
||||
this->unk_2AE |= 2;
|
||||
} else if (this->unk_2AE & 2) {
|
||||
this->unk_2AE &= ~2;
|
||||
this->unk_2BE = 0;
|
||||
this->unk_2C0 = 0;
|
||||
this->unk_2C2 = 0;
|
||||
this->unk_2C4 = 0;
|
||||
this->unk_2BC = 20;
|
||||
} else if (DECR(this->unk_2BC) == 0) {
|
||||
this->unk_2AE |= 1;
|
||||
s32 DmAn_UpdateAttention(DmAn* this, PlayState* play) {
|
||||
if (this->lookAtActor != NULL) {
|
||||
DmAn_UpdateHeadRot(this, play);
|
||||
this->stateFlags &= ~DMAN_STATE_LOST_ATTENTION;
|
||||
this->stateFlags |= DMAN_STATE_FACE_TARGET;
|
||||
} else if (this->stateFlags & DMAN_STATE_FACE_TARGET) {
|
||||
this->stateFlags &= ~DMAN_STATE_FACE_TARGET;
|
||||
this->headRotZ = 0;
|
||||
this->headRotY = 0;
|
||||
this->torsoRotZ = 0;
|
||||
this->torsoRotY = 0;
|
||||
this->loseAttentionTimer = 20;
|
||||
} else if (DECR(this->loseAttentionTimer) == 0) {
|
||||
this->stateFlags |= DMAN_STATE_LOST_ATTENTION;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Actor* func_80C1C8E8(PlayState* play) {
|
||||
Actor* DmAn_FindAnjusMotherActor(PlayState* play) {
|
||||
Actor* tempActor;
|
||||
Actor* foundActor = NULL;
|
||||
|
||||
@@ -190,7 +220,7 @@ Actor* func_80C1C8E8(PlayState* play) {
|
||||
return foundActor;
|
||||
}
|
||||
|
||||
void func_80C1C958(DmAn* this, PlayState* play) {
|
||||
void DmAn_WaitForObject(DmAn* this, PlayState* play) {
|
||||
if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) &&
|
||||
(this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f);
|
||||
@@ -198,26 +228,34 @@ void func_80C1C958(DmAn* this, PlayState* play) {
|
||||
ANJU1_LIMB_MAX);
|
||||
|
||||
this->animIndex = DMAN_ANIM_NONE;
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_0);
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_SITTING_IN_DISBELIEF);
|
||||
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_2AE |= 1;
|
||||
this->actor.draw = func_80C1D0B0;
|
||||
this->stateFlags |= DMAN_STATE_LOST_ATTENTION;
|
||||
this->actor.draw = DmAn_Draw;
|
||||
|
||||
if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) {
|
||||
this->unk_2B4 = func_80C1C8E8(play);
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_1);
|
||||
this->lookAtActor = DmAn_FindAnjusMotherActor(play);
|
||||
DmAn_ChangeAnim(this, play, DMAN_ANIM_SIT);
|
||||
this->actionFunc = DmAn_DoNothing;
|
||||
} else {
|
||||
this->actionFunc = DmAn_HandleCutscene;
|
||||
this->actionFunc = DmAn_HandleCouplesMaskCs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DmAn_HandleCutscene(DmAn* this, PlayState* play) {
|
||||
void DmAn_HandleCouplesMaskCs(DmAn* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMAN_ANIM_0, DMAN_ANIM_0, DMAN_ANIM_12, DMAN_ANIM_2, DMAN_ANIM_4,
|
||||
DMAN_ANIM_6, DMAN_ANIM_8, DMAN_ANIM_10, DMAN_ANIM_11, DMAN_ANIM_3,
|
||||
/* 0 */ 0, // no cue
|
||||
/* 1 */ DMAN_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 2 */ DMAN_ANIM_LOOK_UP,
|
||||
/* 3 */ DMAN_ANIM_MASK_STAND_LOOP,
|
||||
/* 4 */ DMAN_ANIM_MASK_KNEEL,
|
||||
/* 5 */ DMAN_ANIM_HUG,
|
||||
/* 6 */ DMAN_ANIM_HUG_RELEASE,
|
||||
/* 7 */ DMAN_ANIM_COMBINE_MASKS_1,
|
||||
/* 8 */ DMAN_ANIM_COMBINE_MASKS_2,
|
||||
/* 9 */ DMAN_ANIM_HOLD_HANDS,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
@@ -247,8 +285,8 @@ void DmAn_HandleCutscene(DmAn* this, PlayState* play) {
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
if ((this->animIndex == DMAN_ANIM_12) || (this->animIndex == DMAN_ANIM_4) ||
|
||||
(this->animIndex == DMAN_ANIM_6) || (this->animIndex == DMAN_ANIM_8)) {
|
||||
if ((this->animIndex == DMAN_ANIM_LOOK_UP) || (this->animIndex == DMAN_ANIM_MASK_KNEEL) ||
|
||||
(this->animIndex == DMAN_ANIM_HUG) || (this->animIndex == DMAN_ANIM_HUG_RELEASE)) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
DmAn_ChangeAnim(this, play, this->animIndex + 1);
|
||||
}
|
||||
@@ -275,7 +313,7 @@ void DmAn_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play);
|
||||
this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play);
|
||||
this->actionFunc = func_80C1C958;
|
||||
this->actionFunc = DmAn_WaitForObject;
|
||||
}
|
||||
|
||||
void DmAn_Destroy(Actor* thisx, PlayState* play) {
|
||||
@@ -286,26 +324,25 @@ void DmAn_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->actionFunc(this, play);
|
||||
|
||||
func_80C1C83C(this, play);
|
||||
DmAn_UpdateAttention(this, play);
|
||||
|
||||
if (this->actor.draw != NULL) {
|
||||
DmAn_UpdateSkelAnime(this, play);
|
||||
func_80C1C5B4(this);
|
||||
DmAn_Blink(this);
|
||||
}
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
|
||||
}
|
||||
|
||||
Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f };
|
||||
Vec3s D_80C1D2D4 = { 0x238C, 0, -0x3FFC };
|
||||
Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f };
|
||||
|
||||
void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
void DmAn_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
s32 pad[2];
|
||||
DmAn* this = THIS;
|
||||
s8 objectSlot = this->actor.objectSlot;
|
||||
s8 msmoObjectSlot = this->msmoObjectSlot;
|
||||
|
||||
if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) {
|
||||
static Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f };
|
||||
static Vec3s D_80C1D2D4 = { 0x238C, 0, -0x3FFC };
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Matrix_Push();
|
||||
@@ -322,18 +359,20 @@ void func_80C1CD80(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Acto
|
||||
}
|
||||
|
||||
if (limbIndex == ANJU1_LIMB_HEAD) {
|
||||
static Vec3f D_80C1D2DC = { 1000.0f, 0.0f, 0.0f };
|
||||
|
||||
Matrix_MultVec3f(&D_80C1D2DC, &this->actor.focus.pos);
|
||||
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
void DmAn_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
DmAn* this = THIS;
|
||||
s16 stepRot;
|
||||
s16 overrideRot;
|
||||
|
||||
if (!(this->unk_2AE & 1)) {
|
||||
if (this->unk_2AE & 2) {
|
||||
if (!(this->stateFlags & DMAN_STATE_LOST_ATTENTION)) {
|
||||
if (this->stateFlags & DMAN_STATE_FACE_TARGET) {
|
||||
overrideRot = true;
|
||||
} else {
|
||||
overrideRot = false;
|
||||
@@ -345,52 +384,56 @@ void func_80C1CEFC(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
}
|
||||
|
||||
if (limbIndex == ANJU1_LIMB_HEAD) {
|
||||
SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000,
|
||||
this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C,
|
||||
&this->unk_1A4, stepRot, overrideRot);
|
||||
SubS_UpdateLimb(this->headRotZ + this->torsoRotZ + 0x4000,
|
||||
this->headRotY + this->torsoRotY + this->actor.shape.rot.y + 0x4000, &this->headComputedPos,
|
||||
&this->headComputedRot, stepRot, overrideRot);
|
||||
Matrix_Pop();
|
||||
Matrix_Translate(this->unk_18C.x, this->unk_18C.y, this->unk_18C.z, MTXMODE_NEW);
|
||||
Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->unk_1A4.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY);
|
||||
Matrix_Push();
|
||||
} else if (limbIndex == ANJU1_LIMB_TORSO) {
|
||||
SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194,
|
||||
&this->unk_1AA, stepRot, overrideRot);
|
||||
SubS_UpdateLimb(this->torsoRotZ + 0x4000, this->torsoRotY + this->actor.shape.rot.y + 0x4000,
|
||||
&this->torsoComputedPos, &this->torsoComputedRot, stepRot, overrideRot);
|
||||
Matrix_Pop();
|
||||
Matrix_Translate(this->unk_194.x, this->unk_194.y, this->unk_194.z, MTXMODE_NEW);
|
||||
Matrix_Translate(this->torsoComputedPos.x, this->torsoComputedPos.y, this->torsoComputedPos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->unk_1AA.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->unk_1AA.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->unk_1AA.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->torsoComputedRot.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->torsoComputedRot.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->torsoComputedRot.z, MTXMODE_APPLY);
|
||||
Matrix_Push();
|
||||
}
|
||||
}
|
||||
|
||||
TexturePtr D_80C1D2E8[] = {
|
||||
gAnju1MouthClosedTex,
|
||||
gAnju1MouthHappyTex,
|
||||
gAnju1MouthOpenTex,
|
||||
};
|
||||
|
||||
TexturePtr D_80C1D2F4[] = {
|
||||
gAnju1EyeOpenTex, gAnju1EyeHalfTex, gAnju1EyeClosedTex, gAnju1EyeHalfTex,
|
||||
gAnju1EyeComfortingTex, gAnju1EyeSadTex, gAnju1EyeRelievedClosedTex,
|
||||
};
|
||||
|
||||
void func_80C1D0B0(Actor* thisx, PlayState* play) {
|
||||
void DmAn_Draw(Actor* thisx, PlayState* play) {
|
||||
static TexturePtr sMouthTextures[DMAN_MOUTH_MAX] = {
|
||||
gAnju1MouthClosedTex, // DMAN_MOUTH_CLOSED
|
||||
gAnju1MouthHappyTex, // DMAN_MOUTH_HAPPY
|
||||
gAnju1MouthOpenTex, // DMAN_MOUTH_OPEN
|
||||
};
|
||||
static TexturePtr sEyeTextures[DMAN_EYES_MAX] = {
|
||||
gAnju1EyeOpenTex, // DMAN_EYES_OPEN
|
||||
gAnju1EyeHalfTex, // DMAN_EYES_HALF1
|
||||
gAnju1EyeClosedTex, // DMAN_EYES_CLOSED
|
||||
gAnju1EyeHalfTex, // DMAN_EYES_HALF2
|
||||
gAnju1EyeComfortTex, // DMAN_EYES_COMFORT
|
||||
gAnju1EyeSadTex, // DMAN_EYES_SAD
|
||||
gAnju1EyeRelievedClosedTex, // DMAN_EYES_RELIEVED_CLOSED
|
||||
};
|
||||
DmAn* this = THIS;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Opa(play->state.gfxCtx);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C1D2F4[this->unk_2B8]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C1D2E8[0]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[DMAN_MOUTH_CLOSED]));
|
||||
|
||||
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||
this->skelAnime.dListCount, NULL, func_80C1CD80, func_80C1CEFC, &this->actor);
|
||||
this->skelAnime.dListCount, NULL, DmAn_PostLimbDraw, DmAn_TransformLimbDraw,
|
||||
&this->actor);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
@@ -8,28 +8,31 @@ struct DmAn;
|
||||
|
||||
typedef void (*DmAnActionFunc)(struct DmAn*, PlayState*);
|
||||
|
||||
#define DMAN_STATE_LOST_ATTENTION (1 << 0)
|
||||
#define DMAN_STATE_FACE_TARGET (1 << 1)
|
||||
|
||||
typedef struct DmAn {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ DmAnActionFunc actionFunc;
|
||||
/* 0x18C */ Vec3f unk_18C;
|
||||
/* 0x18C */ Vec3f unk_194;
|
||||
/* 0x1A4 */ Vec3s unk_1A4;
|
||||
/* 0x1A4 */ Vec3s unk_1AA;
|
||||
/* 0x18C */ Vec3f headComputedPos;
|
||||
/* 0x18C */ Vec3f torsoComputedPos;
|
||||
/* 0x1A4 */ Vec3s headComputedRot;
|
||||
/* 0x1A4 */ Vec3s torsoComputedRot;
|
||||
/* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX];
|
||||
/* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX];
|
||||
/* 0x2AC */ s8 an4ObjectSlot;
|
||||
/* 0x2AD */ s8 msmoObjectSlot;
|
||||
/* 0x2AE */ u16 unk_2AE;
|
||||
/* 0x2AE */ u16 stateFlags;
|
||||
/* 0x2B0 */ u8 cueId;
|
||||
/* 0x2B4 */ Actor* unk_2B4;
|
||||
/* 0x2B8 */ s16 unk_2B8;
|
||||
/* 0x2BA */ s16 unk_2BA;
|
||||
/* 0x2BC */ s16 unk_2BC;
|
||||
/* 0x2BE */ s16 unk_2BE;
|
||||
/* 0x2C0 */ s16 unk_2C0;
|
||||
/* 0x2C2 */ s16 unk_2C2;
|
||||
/* 0x2C4 */ s16 unk_2C4;
|
||||
/* 0x2B4 */ Actor* lookAtActor;
|
||||
/* 0x2B8 */ s16 eyeTexIndex;
|
||||
/* 0x2BA */ s16 eyeTimer;
|
||||
/* 0x2BC */ s16 loseAttentionTimer;
|
||||
/* 0x2BE */ s16 headRotZ;
|
||||
/* 0x2C0 */ s16 headRotY;
|
||||
/* 0x2C2 */ s16 torsoRotZ;
|
||||
/* 0x2C4 */ s16 torsoRotY;
|
||||
/* 0x2C8 */ s32 animIndex;
|
||||
/* 0x2CC */ s32 prevAnimIndex;
|
||||
/* 0x2D0 */ s32 isCutscenePlaying;
|
||||
|
||||
@@ -16,10 +16,10 @@ void DmGm_Init(Actor* thisx, PlayState* play);
|
||||
void DmGm_Destroy(Actor* thisx, PlayState* play);
|
||||
void DmGm_Update(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80C248A8(DmGm* this, PlayState* play);
|
||||
void DmGm_HandleCutscene(DmGm* this, PlayState* play);
|
||||
void DmGm_WaitForObject(DmGm* this, PlayState* play);
|
||||
void DmGm_HandleCouplesMaskCs(DmGm* this, PlayState* play);
|
||||
void DmGm_DoNothing(DmGm* this, PlayState* play);
|
||||
void func_80C25000(Actor* thisx, PlayState* play);
|
||||
void DmGm_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
ActorInit Dm_Gm_InitVars = {
|
||||
ACTOR_DM_GM,
|
||||
@@ -33,40 +33,51 @@ ActorInit Dm_Gm_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
/* -1 */ DMGM_ANIM_NONE = -1,
|
||||
/* 0x0 */ DMGM_ANIM_0,
|
||||
/* 0x1 */ DMGM_ANIM_1,
|
||||
/* 0x2 */ DMGM_ANIM_2,
|
||||
/* 0x3 */ DMGM_ANIM_3,
|
||||
/* 0x4 */ DMGM_ANIM_4,
|
||||
/* 0x5 */ DMGM_ANIM_5,
|
||||
/* 0x6 */ DMGM_ANIM_6,
|
||||
/* 0x7 */ DMGM_ANIM_7,
|
||||
/* 0x8 */ DMGM_ANIM_8,
|
||||
/* 0x9 */ DMGM_ANIM_9,
|
||||
/* 0xA */ DMGM_ANIM_10,
|
||||
/* 0xB */ DMGM_ANIM_11,
|
||||
/* 0xC */ DMGM_ANIM_12,
|
||||
/* 0xD */ DMGM_ANIM_13,
|
||||
/* 0xE */ DMGM_ANIM_MAX
|
||||
/**
|
||||
* Anju stores her animations across different objects and the ones used by this actor are put together right next to
|
||||
* each other in the sAnimationInfo array. Due to this, animation functions check which object to load by comparing
|
||||
* index ranges. To make this a bit easier to read, this enum includes `DMGM_ANIMOBJ_*` values that mark when a range of
|
||||
* animations of a certain object start
|
||||
*/
|
||||
typedef enum DmGmAnimation {
|
||||
/* -1 */ DMGM_ANIM_NONE = -1,
|
||||
/* 0 */ DMGM_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 1 */ DMGM_ANIM_SIT,
|
||||
|
||||
/* 2 */ DMGM_ANIMOBJ_AN4,
|
||||
/* 2 */ DMGM_ANIM_MASK_STAND_LOOP = DMGM_ANIMOBJ_AN4,
|
||||
/* 3 */ DMGM_ANIM_HOLD_HANDS, //! @bug See note at `sAnimationInfo`
|
||||
/* 4 */ DMGM_ANIM_MASK_KNEEL,
|
||||
/* 5 */ DMGM_ANIM_MASK_KNEEL_LOOP,
|
||||
/* 6 */ DMGM_ANIM_HUG,
|
||||
/* 7 */ DMGM_ANIM_HUG_LOOP,
|
||||
/* 8 */ DMGM_ANIM_HUG_RELEASE,
|
||||
/* 9 */ DMGM_ANIM_HUG_RELEASE_LOOP,
|
||||
/* 10 */ DMGM_ANIM_COMBINE_MASKS_1,
|
||||
/* 11 */ DMGM_ANIM_COMBINE_MASKS_2,
|
||||
/* 12 */ DMGM_ANIM_LOOK_UP,
|
||||
/* 13 */ DMGM_ANIM_LOOK_UP_LOOP,
|
||||
/* 14 */ DMGM_ANIM_MAX
|
||||
} DmGmAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[DMGM_ANIM_MAX] = {
|
||||
{ &gAnju1SittingInDisbelieveAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_0
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_1
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_2
|
||||
{ &gAnju1HoldingHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_3
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_4
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_5
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_6
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_7
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_8
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_9
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_10
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_11
|
||||
{ &gAnju4SittingRaiseFaceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_12
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_13
|
||||
{ &gAnju1SittingInDisbeliefAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_SITTING_IN_DISBELIEF
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_SIT
|
||||
|
||||
// DMGM_ANIMOBJ_AN4
|
||||
{ &gAnju4MaskStandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_MASK_STAND_LOOP
|
||||
//! @bug Uses symbol from OBJECT_AN1 instead of OBJECT_AN4
|
||||
{ &gAnju1HoldHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 }, // DMGM_ANIM_HOLD_HANDS
|
||||
{ &gAnju4MaskKneelAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_MASK_KNEEL
|
||||
{ &gAnju4MaskKneelLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_MASK_KNEEL_LOOP
|
||||
{ &gAnju4HugAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_HUG
|
||||
{ &gAnju4HugLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_HUG_LOOP
|
||||
{ &gAnju4HugReleaseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_HUG_RELEASE
|
||||
{ &gAnju4HugReleaseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_HUG_RELEASE_LOOP
|
||||
{ &gAnju4CombineMasks1Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_COMBINE_MASKS_1
|
||||
{ &gAnju4CombineMasks2Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_COMBINE_MASKS_2
|
||||
{ &gAnju4LookUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // DMGM_ANIM_LOOK_UP
|
||||
{ &gAnju4LookUpLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // DMGM_ANIM_LOOK_UP_LOOP
|
||||
};
|
||||
|
||||
s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) {
|
||||
@@ -74,13 +85,13 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) {
|
||||
s8 objectIndex2;
|
||||
s32 isAnimFinished = false;
|
||||
|
||||
if (this->animIndex <= DMGM_ANIM_1) {
|
||||
if (this->animIndex < DMGM_ANIMOBJ_AN4) {
|
||||
objectIndex2 = this->actor.objectSlot;
|
||||
} else {
|
||||
objectIndex2 = this->an4ObjectSlot;
|
||||
}
|
||||
|
||||
if (objectIndex2 >= 0) {
|
||||
if (objectIndex2 > OBJECT_SLOT_NONE) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment);
|
||||
isAnimFinished = SkelAnime_Update(&this->skelAnime);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectSlot].segment);
|
||||
@@ -89,18 +100,18 @@ s32 DmGm_UpdateSkelAnime(DmGm* this, PlayState* play) {
|
||||
return isAnimFinished;
|
||||
}
|
||||
|
||||
s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) {
|
||||
s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, DmGmAnimation animIndex) {
|
||||
s8 objectSlot = this->actor.objectSlot;
|
||||
s8 objectIndex2;
|
||||
s32 didAnimChange = false;
|
||||
|
||||
if (animIndex <= DMGM_ANIM_1) {
|
||||
if (animIndex < DMGM_ANIMOBJ_AN4) {
|
||||
objectIndex2 = this->actor.objectSlot;
|
||||
} else {
|
||||
objectIndex2 = this->an4ObjectSlot;
|
||||
}
|
||||
|
||||
if ((objectIndex2 >= 0) && (this->animIndex != animIndex)) {
|
||||
if ((objectIndex2 > OBJECT_SLOT_NONE) && (this->animIndex != animIndex)) {
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.slots[objectIndex2].segment);
|
||||
this->animIndex = animIndex;
|
||||
didAnimChange = SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimationInfo, animIndex);
|
||||
@@ -110,66 +121,85 @@ s32 DmGm_ChangeAnim(DmGm* this, PlayState* play, s32 animIndex) {
|
||||
return didAnimChange;
|
||||
}
|
||||
|
||||
void func_80C24504(DmGm* this) {
|
||||
if (DECR(this->unk_2BA) == 0) {
|
||||
this->unk_2B8++;
|
||||
if (this->unk_2B8 >= 4) {
|
||||
this->unk_2BA = Rand_S16Offset(30, 30);
|
||||
this->unk_2B8 = 0;
|
||||
typedef enum DmGmEyes {
|
||||
/* 0 */ DMGM_EYES_OPEN,
|
||||
/* 1 */ DMGM_EYES_HALF1,
|
||||
/* 2 */ DMGM_EYES_CLOSED,
|
||||
/* 3 */ DMGM_EYES_HALF2,
|
||||
/* 4 */ DMGM_EYES_COMFORT,
|
||||
/* 5 */ DMGM_EYES_SAD,
|
||||
/* 6 */ DMGM_EYES_RELIEVED_CLOSED,
|
||||
/* 7 */ DMGM_EYES_MAX
|
||||
} DmGmEyes;
|
||||
|
||||
typedef enum DmGmMouth {
|
||||
/* 0 */ DMGM_MOUTH_CLOSED,
|
||||
/* 1 */ DMGM_MOUTH_HAPPY,
|
||||
/* 2 */ DMGM_MOUTH_OPEN,
|
||||
/* 3 */ DMGM_MOUTH_MAX
|
||||
} DmGmMouth;
|
||||
|
||||
void DmGm_Blink(DmGm* this) {
|
||||
if (DECR(this->eyeTimer) == 0) {
|
||||
this->eyeTexIndex++;
|
||||
if (this->eyeTexIndex > DMGM_EYES_HALF2) {
|
||||
this->eyeTimer = Rand_S16Offset(30, 30);
|
||||
this->eyeTexIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 func_80C2457C(DmGm* this, PlayState* play) {
|
||||
s32 DmGm_UpdateHeadRot(DmGm* this, PlayState* play) {
|
||||
s32 pad;
|
||||
Vec3f sp40;
|
||||
Vec3f sp34;
|
||||
s16 sp32;
|
||||
Vec3f lookAtActorPos;
|
||||
Vec3f pos;
|
||||
s16 yaw;
|
||||
|
||||
Math_Vec3f_Copy(&sp40, &this->unk_2B4->world.pos);
|
||||
Math_Vec3f_Copy(&sp34, &this->actor.world.pos);
|
||||
sp32 = Math_Vec3f_Yaw(&sp34, &sp40);
|
||||
Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->world.pos);
|
||||
Math_Vec3f_Copy(&pos, &this->actor.world.pos);
|
||||
yaw = Math_Vec3f_Yaw(&pos, &lookAtActorPos);
|
||||
|
||||
Math_ApproachS(&this->unk_2C0, (sp32 - this->unk_2C4) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->unk_2C0 = CLAMP(this->unk_2C0, -0x1FFE, 0x1FFE);
|
||||
Math_ApproachS(&this->headRotY, (yaw - this->torsoRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->headRotY = CLAMP(this->headRotY, -0x1FFE, 0x1FFE);
|
||||
|
||||
Math_ApproachS(&this->unk_2C4, (sp32 - this->unk_2C0) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->unk_2C4 = CLAMP(this->unk_2C4, -0x1C70, 0x1C70);
|
||||
Math_ApproachS(&this->torsoRotY, (yaw - this->headRotY) - this->actor.shape.rot.y, 4, 0x2AA8);
|
||||
this->torsoRotY = CLAMP(this->torsoRotY, -0x1C70, 0x1C70);
|
||||
|
||||
if (this->unk_2B4->id == ACTOR_PLAYER) {
|
||||
sp40.y = ((Player*)this->unk_2B4)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
|
||||
if (this->lookAtActor->id == ACTOR_PLAYER) {
|
||||
lookAtActorPos.y = ((Player*)this->lookAtActor)->bodyPartsPos[PLAYER_BODYPART_HEAD].y + 3.0f;
|
||||
} else {
|
||||
Math_Vec3f_Copy(&sp40, &this->unk_2B4->focus.pos);
|
||||
Math_Vec3f_Copy(&lookAtActorPos, &this->lookAtActor->focus.pos);
|
||||
}
|
||||
|
||||
Math_Vec3f_Copy(&sp34, &this->actor.focus.pos);
|
||||
Math_ApproachS(&this->unk_2BE, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2C2, 4, 0x2AA8);
|
||||
this->unk_2BE = CLAMP(this->unk_2BE, -0x1C70, 0x1C70);
|
||||
Math_Vec3f_Copy(&pos, &this->actor.focus.pos);
|
||||
Math_ApproachS(&this->headRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->torsoRotZ, 4, 0x2AA8);
|
||||
this->headRotZ = CLAMP(this->headRotZ, -0x1C70, 0x1C70);
|
||||
|
||||
Math_ApproachS(&this->torsoRotZ, Math_Vec3f_Pitch(&pos, &lookAtActorPos) - this->headRotZ, 4, 0x2AA8);
|
||||
this->torsoRotZ = CLAMP(this->torsoRotZ, -0x1C70, 0x1C70);
|
||||
|
||||
Math_ApproachS(&this->unk_2C2, Math_Vec3f_Pitch(&sp34, &sp40) - this->unk_2BE, 4, 0x2AA8);
|
||||
this->unk_2C2 = CLAMP(this->unk_2C2, -0x1C70, 0x1C70);
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 func_80C2478C(DmGm* this, PlayState* play) {
|
||||
if (this->unk_2B4 != NULL) {
|
||||
func_80C2457C(this, play);
|
||||
this->unk_2AE &= ~1;
|
||||
this->unk_2AE |= 2;
|
||||
} else if (this->unk_2AE & 2) {
|
||||
this->unk_2AE &= ~2;
|
||||
this->unk_2BE = 0;
|
||||
this->unk_2C0 = 0;
|
||||
this->unk_2C2 = 0;
|
||||
this->unk_2C4 = 0;
|
||||
this->unk_2BC = 20;
|
||||
} else if (DECR(this->unk_2BC) == 0) {
|
||||
this->unk_2AE |= 1;
|
||||
s32 DmGm_UpdateAttention(DmGm* this, PlayState* play) {
|
||||
if (this->lookAtActor != NULL) {
|
||||
DmGm_UpdateHeadRot(this, play);
|
||||
this->stateFlags &= ~DMGM_STATE_LOST_ATTENTION;
|
||||
this->stateFlags |= DMGM_STATE_FACE_TARGET;
|
||||
} else if (this->stateFlags & DMGM_STATE_FACE_TARGET) {
|
||||
this->stateFlags &= ~DMGM_STATE_FACE_TARGET;
|
||||
this->headRotZ = 0;
|
||||
this->headRotY = 0;
|
||||
this->torsoRotZ = 0;
|
||||
this->torsoRotY = 0;
|
||||
this->loseAttentionTimer = 20;
|
||||
} else if (DECR(this->loseAttentionTimer) == 0) {
|
||||
this->stateFlags |= DMGM_STATE_LOST_ATTENTION;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Actor* func_80C24838(PlayState* play) {
|
||||
Actor* DmGm_FindAnjusMotherActor(PlayState* play) {
|
||||
Actor* tempActor;
|
||||
Actor* foundActor = NULL;
|
||||
|
||||
@@ -190,7 +220,7 @@ Actor* func_80C24838(PlayState* play) {
|
||||
return foundActor;
|
||||
}
|
||||
|
||||
void func_80C248A8(DmGm* this, PlayState* play) {
|
||||
void DmGm_WaitForObject(DmGm* this, PlayState* play) {
|
||||
if ((this->an4ObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->an4ObjectSlot, play) &&
|
||||
(this->msmoObjectSlot > OBJECT_SLOT_NONE) && SubS_IsObjectLoaded(this->msmoObjectSlot, play)) {
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 14.0f);
|
||||
@@ -198,26 +228,34 @@ void func_80C248A8(DmGm* this, PlayState* play) {
|
||||
ANJU1_LIMB_MAX);
|
||||
|
||||
this->animIndex = DMGM_ANIM_NONE;
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_0);
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_SITTING_IN_DISBELIEF);
|
||||
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_2AE |= 1;
|
||||
this->actor.draw = func_80C25000;
|
||||
this->stateFlags |= 1;
|
||||
this->actor.draw = DmGm_Draw;
|
||||
|
||||
if ((play->sceneId == SCENE_YADOYA) && (play->curSpawn == 4)) {
|
||||
this->unk_2B4 = func_80C24838(play);
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_1);
|
||||
this->lookAtActor = DmGm_FindAnjusMotherActor(play);
|
||||
DmGm_ChangeAnim(this, play, DMGM_ANIM_SIT);
|
||||
this->actionFunc = DmGm_DoNothing;
|
||||
} else {
|
||||
this->actionFunc = DmGm_HandleCutscene;
|
||||
this->actionFunc = DmGm_HandleCouplesMaskCs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DmGm_HandleCutscene(DmGm* this, PlayState* play) {
|
||||
void DmGm_HandleCouplesMaskCs(DmGm* this, PlayState* play) {
|
||||
s32 csAnimIndex[] = {
|
||||
DMGM_ANIM_0, DMGM_ANIM_0, DMGM_ANIM_12, DMGM_ANIM_2, DMGM_ANIM_4,
|
||||
DMGM_ANIM_6, DMGM_ANIM_8, DMGM_ANIM_10, DMGM_ANIM_11, DMGM_ANIM_3,
|
||||
/* 0 */ 0, // no cue
|
||||
/* 1 */ DMGM_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 2 */ DMGM_ANIM_LOOK_UP,
|
||||
/* 3 */ DMGM_ANIM_MASK_STAND_LOOP,
|
||||
/* 4 */ DMGM_ANIM_MASK_KNEEL,
|
||||
/* 5 */ DMGM_ANIM_HUG,
|
||||
/* 6 */ DMGM_ANIM_HUG_RELEASE,
|
||||
/* 7 */ DMGM_ANIM_COMBINE_MASKS_1,
|
||||
/* 8 */ DMGM_ANIM_COMBINE_MASKS_2,
|
||||
/* 9 */ DMGM_ANIM_HOLD_HANDS,
|
||||
};
|
||||
u16 cueId;
|
||||
s32 cueChannel;
|
||||
@@ -247,8 +285,8 @@ void DmGm_HandleCutscene(DmGm* this, PlayState* play) {
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
if ((this->animIndex == DMGM_ANIM_12) || (this->animIndex == DMGM_ANIM_4) ||
|
||||
(this->animIndex == DMGM_ANIM_6) || (this->animIndex == DMGM_ANIM_8)) {
|
||||
if ((this->animIndex == DMGM_ANIM_LOOK_UP) || (this->animIndex == DMGM_ANIM_MASK_KNEEL) ||
|
||||
(this->animIndex == DMGM_ANIM_HUG) || (this->animIndex == DMGM_ANIM_HUG_RELEASE)) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
DmGm_ChangeAnim(this, play, this->animIndex + 1);
|
||||
}
|
||||
@@ -275,7 +313,7 @@ void DmGm_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->an4ObjectSlot = SubS_GetObjectSlot(OBJECT_AN4, play);
|
||||
this->msmoObjectSlot = SubS_GetObjectSlot(OBJECT_MSMO, play);
|
||||
this->actionFunc = func_80C248A8;
|
||||
this->actionFunc = DmGm_WaitForObject;
|
||||
}
|
||||
|
||||
void DmGm_Destroy(Actor* thisx, PlayState* play) {
|
||||
@@ -286,35 +324,34 @@ void DmGm_Update(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->actionFunc(this, play);
|
||||
|
||||
func_80C2478C(this, play);
|
||||
DmGm_UpdateAttention(this, play);
|
||||
|
||||
if (this->actor.draw != NULL) {
|
||||
DmGm_UpdateSkelAnime(this, play);
|
||||
func_80C24504(this);
|
||||
DmGm_Blink(this);
|
||||
}
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
|
||||
}
|
||||
|
||||
Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f };
|
||||
Vec3s D_80C25224 = { 0x238C, 0, -0x3FFC };
|
||||
Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f };
|
||||
|
||||
void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
s32 pad[2];
|
||||
DmGm* this = THIS;
|
||||
s8 sp2B = this->actor.objectSlot;
|
||||
s8 sp2A = this->msmoObjectSlot;
|
||||
s8 objectSlot = this->actor.objectSlot;
|
||||
s8 msmoObjectSlot = this->msmoObjectSlot;
|
||||
|
||||
if ((limbIndex == ANJU1_LIMB_LEFT_HAND) && this->didAnimChangeInCs) {
|
||||
static Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f };
|
||||
static Vec3s D_80C25224 = { 0x238C, 0, -0x3FFC };
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Matrix_Push();
|
||||
Matrix_TranslateRotateZYX(&D_80C25218, &D_80C25224);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2A].segment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[msmoObjectSlot].segment);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gMoonMaskDL);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[sp2B].segment);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[objectSlot].segment);
|
||||
|
||||
Matrix_Pop();
|
||||
|
||||
@@ -322,6 +359,8 @@ void DmGm_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
|
||||
}
|
||||
|
||||
if (limbIndex == ANJU1_LIMB_HEAD) {
|
||||
static Vec3f D_80C2522C = { 1000.0f, 0.0f, 0.0f };
|
||||
|
||||
Matrix_MultVec3f(&D_80C2522C, &this->actor.focus.pos);
|
||||
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
|
||||
}
|
||||
@@ -332,8 +371,8 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
s16 stepRot;
|
||||
s16 overrideRot;
|
||||
|
||||
if (!(this->unk_2AE & 1)) {
|
||||
if (this->unk_2AE & 2) {
|
||||
if (!(this->stateFlags & DMGM_STATE_LOST_ATTENTION)) {
|
||||
if (this->stateFlags & DMGM_STATE_FACE_TARGET) {
|
||||
overrideRot = true;
|
||||
} else {
|
||||
overrideRot = false;
|
||||
@@ -345,49 +384,52 @@ void DmGm_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) {
|
||||
}
|
||||
|
||||
if (limbIndex == ANJU1_LIMB_HEAD) {
|
||||
SubS_UpdateLimb(this->unk_2BE + this->unk_2C2 + 0x4000,
|
||||
this->unk_2C0 + this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_18C,
|
||||
&this->unk_1A4, stepRot, overrideRot);
|
||||
SubS_UpdateLimb(this->headRotZ + this->torsoRotZ + 0x4000,
|
||||
this->headRotY + this->torsoRotY + this->actor.shape.rot.y + 0x4000, &this->headComputedPos,
|
||||
&this->headComputedRot, stepRot, overrideRot);
|
||||
Matrix_Pop();
|
||||
Matrix_Translate(this->unk_18C.x, this->unk_18C.y, this->unk_18C.z, MTXMODE_NEW);
|
||||
Matrix_Translate(this->headComputedPos.x, this->headComputedPos.y, this->headComputedPos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->unk_1A4.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->unk_1A4.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->unk_1A4.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->headComputedRot.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->headComputedRot.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->headComputedRot.z, MTXMODE_APPLY);
|
||||
Matrix_Push();
|
||||
} else if (limbIndex == ANJU1_LIMB_TORSO) {
|
||||
SubS_UpdateLimb(this->unk_2C2 + 0x4000, this->unk_2C4 + this->actor.shape.rot.y + 0x4000, &this->unk_194,
|
||||
&this->unk_1AA, stepRot, overrideRot);
|
||||
SubS_UpdateLimb(this->torsoRotZ + 0x4000, this->torsoRotY + this->actor.shape.rot.y + 0x4000,
|
||||
&this->torsoComputedPos, &this->torsoComputedRot, stepRot, overrideRot);
|
||||
Matrix_Pop();
|
||||
Matrix_Translate(this->unk_194.x, this->unk_194.y, this->unk_194.z, MTXMODE_NEW);
|
||||
Matrix_Translate(this->torsoComputedPos.x, this->torsoComputedPos.y, this->torsoComputedPos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->unk_1AA.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->unk_1AA.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->unk_1AA.z, MTXMODE_APPLY);
|
||||
Matrix_RotateYS(this->torsoComputedRot.y, MTXMODE_APPLY);
|
||||
Matrix_RotateXS(this->torsoComputedRot.x, MTXMODE_APPLY);
|
||||
Matrix_RotateZS(this->torsoComputedRot.z, MTXMODE_APPLY);
|
||||
Matrix_Push();
|
||||
}
|
||||
}
|
||||
|
||||
TexturePtr D_80C25238[] = {
|
||||
gAnju1MouthClosedTex,
|
||||
gAnju1MouthHappyTex,
|
||||
gAnju1MouthOpenTex,
|
||||
};
|
||||
|
||||
TexturePtr D_80C25244[] = {
|
||||
gAnju1EyeOpenTex, gAnju1EyeHalfTex, gAnju1EyeClosedTex, gAnju1EyeHalfTex,
|
||||
gAnju1EyeComfortingTex, gAnju1EyeSadTex, gAnju1EyeRelievedClosedTex,
|
||||
};
|
||||
|
||||
void func_80C25000(Actor* thisx, PlayState* play) {
|
||||
void DmGm_Draw(Actor* thisx, PlayState* play) {
|
||||
static TexturePtr sMouthTextures[DMGM_MOUTH_MAX] = {
|
||||
gAnju1MouthClosedTex, // DMGM_MOUTH_CLOSED
|
||||
gAnju1MouthHappyTex, // DMGM_MOUTH_HAPPY
|
||||
gAnju1MouthOpenTex, // DMGM_MOUTH_OPEN
|
||||
};
|
||||
static TexturePtr sEyeTextures[DMGM_EYES_MAX] = {
|
||||
gAnju1EyeOpenTex, // DMGM_EYES_OPEN
|
||||
gAnju1EyeHalfTex, // DMGM_EYES_HALF1
|
||||
gAnju1EyeClosedTex, // DMGM_EYES_CLOSED
|
||||
gAnju1EyeHalfTex, // DMGM_EYES_HALF2
|
||||
gAnju1EyeComfortTex, // DMGM_EYES_COMFORT
|
||||
gAnju1EyeSadTex, // DMGM_EYES_SAD
|
||||
gAnju1EyeRelievedClosedTex, // DMGM_EYES_RELIEVED_CLOSED
|
||||
};
|
||||
DmGm* this = THIS;
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Opa(play->state.gfxCtx);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C25244[this->unk_2B8]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C25238[0]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sEyeTextures[this->eyeTexIndex]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(sMouthTextures[DMGM_MOUTH_CLOSED]));
|
||||
|
||||
SkelAnime_DrawTransformFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||
this->skelAnime.dListCount, NULL, DmGm_PostLimbDraw, DmGm_TransformLimbDraw,
|
||||
|
||||
@@ -8,28 +8,31 @@ struct DmGm;
|
||||
|
||||
typedef void (*DmGmActionFunc)(struct DmGm*, PlayState*);
|
||||
|
||||
#define DMGM_STATE_LOST_ATTENTION (1 << 0)
|
||||
#define DMGM_STATE_FACE_TARGET (1 << 1)
|
||||
|
||||
typedef struct DmGm {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ DmGmActionFunc actionFunc;
|
||||
/* 0x18C */ Vec3f unk_18C;
|
||||
/* 0x18C */ Vec3f unk_194;
|
||||
/* 0x1A4 */ Vec3s unk_1A4;
|
||||
/* 0x1A4 */ Vec3s unk_1AA;
|
||||
/* 0x18C */ Vec3f headComputedPos;
|
||||
/* 0x18C */ Vec3f torsoComputedPos;
|
||||
/* 0x1A4 */ Vec3s headComputedRot;
|
||||
/* 0x1A4 */ Vec3s torsoComputedRot;
|
||||
/* 0x1B0 */ Vec3s jointTable[ANJU1_LIMB_MAX];
|
||||
/* 0x22E */ Vec3s morphTable[ANJU1_LIMB_MAX];
|
||||
/* 0x2AC */ s8 an4ObjectSlot;
|
||||
/* 0x2AD */ s8 msmoObjectSlot;
|
||||
/* 0x2AE */ u16 unk_2AE;
|
||||
/* 0x2AE */ u16 stateFlags;
|
||||
/* 0x2B0 */ u8 cueId;
|
||||
/* 0x2B4 */ Actor* unk_2B4;
|
||||
/* 0x2B8 */ s16 unk_2B8;
|
||||
/* 0x2BA */ s16 unk_2BA;
|
||||
/* 0x2BC */ s16 unk_2BC;
|
||||
/* 0x2BE */ s16 unk_2BE;
|
||||
/* 0x2C0 */ s16 unk_2C0;
|
||||
/* 0x2C2 */ s16 unk_2C2;
|
||||
/* 0x2C4 */ s16 unk_2C4;
|
||||
/* 0x2B4 */ Actor* lookAtActor;
|
||||
/* 0x2B8 */ s16 eyeTexIndex;
|
||||
/* 0x2BA */ s16 eyeTimer;
|
||||
/* 0x2BC */ s16 loseAttentionTimer;
|
||||
/* 0x2BE */ s16 headRotZ;
|
||||
/* 0x2C0 */ s16 headRotY;
|
||||
/* 0x2C2 */ s16 torsoRotZ;
|
||||
/* 0x2C4 */ s16 torsoRotY;
|
||||
/* 0x2C8 */ s32 animIndex;
|
||||
/* 0x2CC */ s32 prevAnimIndex;
|
||||
/* 0x2D0 */ s32 isCutscenePlaying;
|
||||
|
||||
@@ -926,29 +926,29 @@ EnDoor* EnAn_FindDoor(PlayState* play, AnjuScheduleResult scheduleOutputResult)
|
||||
*/
|
||||
typedef enum EnAnAnimation {
|
||||
/* -1 */ ENAN_ANIM_NONE = -1,
|
||||
/* 0 */ ENAN_ANIM_HOLDING_HANDS,
|
||||
/* 0 */ ENAN_ANIM_HOLD_HANDS,
|
||||
/* 1 */ ENAN_ANIM_IDLE,
|
||||
/* 2 */ ENAN_ANIM_IDLE_MORPH,
|
||||
/* 3 */ ENAN_ANIM_BOWING,
|
||||
/* 4 */ ENAN_ANIM_BOWING_MORPH,
|
||||
/* 3 */ ENAN_ANIM_BOW,
|
||||
/* 4 */ ENAN_ANIM_BOW_MORPH,
|
||||
/* 5 */ ENAN_ANIM_SURPRISED,
|
||||
/* 6 */ ENAN_ANIM_LOOKING_UP_RELIEVED,
|
||||
/* 6 */ ENAN_ANIM_LOOK_UP_RELIEVED,
|
||||
/* 7 */ ENAN_ANIM_WALK,
|
||||
/* 8 */ ENAN_ANIM_WALK2, // Duplicate of ENAN_ANIM_WALK
|
||||
/* 9 */ ENAN_ANIM_SIT,
|
||||
/* 10 */ ENAN_ANIM_SIT_MORPH,
|
||||
/* 11 */ ENAN_ANIM_SITTING_IN_DISBELIEVE,
|
||||
/* 12 */ ENAN_ANIM_COOKING,
|
||||
/* 13 */ ENAN_ANIM_TASTING,
|
||||
/* 14 */ ENAN_ANIM_TASTING_END,
|
||||
/* 15 */ ENAN_ANIM_WAITING_WITH_TRAY,
|
||||
/* 16 */ ENAN_ANIM_WALKING_WITH_TRAY,
|
||||
/* 11 */ ENAN_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 12 */ ENAN_ANIM_COOK,
|
||||
/* 13 */ ENAN_ANIM_TASTE,
|
||||
/* 14 */ ENAN_ANIM_TASTE_END,
|
||||
/* 15 */ ENAN_ANIM_WAIT_WITH_TRAY,
|
||||
/* 16 */ ENAN_ANIM_WALK_WITH_TRAY,
|
||||
|
||||
/* 17 */ ENAN_ANIMOBJ_AN2,
|
||||
/* 17 */ ENAN_ANIM_UMBRELLA_IDLE = ENAN_ANIMOBJ_AN2,
|
||||
/* 18 */ ENAN_ANIM_UMBRELLA_WALK,
|
||||
/* 19 */ ENAN_ANIM_UMBRELLA_SIT,
|
||||
/* 20 */ ENAN_ANIM_UMBRELLA_CRYING,
|
||||
/* 20 */ ENAN_ANIM_UMBRELLA_CRY,
|
||||
|
||||
/* 21 */ ENAN_ANIMOBJ_AN3,
|
||||
/* 21 */ ENAN_ANIM_BROOM_IDLE = ENAN_ANIMOBJ_AN3,
|
||||
@@ -957,44 +957,44 @@ typedef enum EnAnAnimation {
|
||||
/* 24 */ ENAN_ANIM_24, //! @bug See note at `sAnimationInfo`
|
||||
|
||||
/* 25 */ ENAN_ANIMOBJ_AN4,
|
||||
/* 25 */ ENAN_ANIM_25 = ENAN_ANIMOBJ_AN4,
|
||||
/* 26 */ ENAN_ANIM_26,
|
||||
/* 27 */ ENAN_ANIM_27,
|
||||
/* 28 */ ENAN_ANIM_28,
|
||||
/* 29 */ ENAN_ANIM_29,
|
||||
/* 30 */ ENAN_ANIM_30,
|
||||
/* 31 */ ENAN_ANIM_31,
|
||||
/* 32 */ ENAN_ANIM_32,
|
||||
/* 33 */ ENAN_ANIM_33,
|
||||
/* 34 */ ENAN_ANIM_SITTING_RAISE_FACE,
|
||||
/* 35 */ ENAN_ANIM_35,
|
||||
/* 25 */ ENAN_ANIM_MASK_STAND_LOOP = ENAN_ANIMOBJ_AN4,
|
||||
/* 26 */ ENAN_ANIM_MASK_KNEEL,
|
||||
/* 27 */ ENAN_ANIM_MASK_KNEEL_LOOP,
|
||||
/* 28 */ ENAN_ANIM_HUG,
|
||||
/* 29 */ ENAN_ANIM_HUG_LOOP,
|
||||
/* 30 */ ENAN_ANIM_HUG_RELEASE,
|
||||
/* 31 */ ENAN_ANIM_HUG_RELEASE_LOOP,
|
||||
/* 32 */ ENAN_ANIM_COMBINE_MASKS_1,
|
||||
/* 33 */ ENAN_ANIM_COMBINE_MASKS_2,
|
||||
/* 34 */ ENAN_ANIM_LOOK_UP,
|
||||
/* 35 */ ENAN_ANIM_LOOK_UP_LOOP,
|
||||
/* 36 */ ENAN_ANIM_MAX
|
||||
} EnAnAnimation;
|
||||
|
||||
static AnimationInfoS sAnimationInfo[ENAN_ANIM_MAX] = {
|
||||
{ &gAnju1HoldingHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_HOLDING_HANDS
|
||||
{ &gAnju1HoldHandsAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_HOLD_HANDS
|
||||
{ &gAnju1IdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_IDLE
|
||||
{ &gAnju1IdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // ENAN_ANIM_IDLE_MORPH
|
||||
{ &gAnju1BowingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_BOWING
|
||||
{ &gAnju1BowingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // ENAN_ANIM_BOWING_MORPH
|
||||
{ &gAnju1BowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_BOW
|
||||
{ &gAnju1BowAnim, 1.0f, 0, -1, ANIMMODE_ONCE, -6 }, // ENAN_ANIM_BOW_MORPH
|
||||
{ &gAnju1SurprisedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_SURPRISED
|
||||
{ &gAnju1LookingUpRelievedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_LOOKING_UP_RELIEVED
|
||||
{ &gAnju1LookUpRelievedAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_LOOK_UP_RELIEVED
|
||||
{ &gAnju1WalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WALK
|
||||
{ &gAnju1WalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WALK2
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_SIT
|
||||
{ &gAnju1SitAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -6 }, // ENAN_ANIM_SIT_MORPH
|
||||
{ &gAnju1SittingInDisbelieveAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_SITTING_IN_DISBELIEVE
|
||||
{ &gAnju1CookingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_COOKING
|
||||
{ &gAnju1TastingAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_TASTING
|
||||
{ &gAnju1TastingEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_TASTING_END
|
||||
{ &gAnju1WaitingWithTrayAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WAITING_WITH_TRAY
|
||||
{ &gAnju1WalkingWithTrayAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WALKING_WITH_TRAY
|
||||
{ &gAnju1SittingInDisbeliefAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_SITTING_IN_DISBELIEF
|
||||
{ &gAnju1CookAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_COOK
|
||||
{ &gAnju1TasteAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_TASTE
|
||||
{ &gAnju1TasteEndAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_TASTE_END
|
||||
{ &gAnju1WaitWithTrayAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WAIT_WITH_TRAY
|
||||
{ &gAnju1WalkWithTrayAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_WALK_WITH_TRAY
|
||||
|
||||
// ENAN_ANIMOBJ_AN2
|
||||
{ &gAnju2UmbrellaIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_UMBRELLA_IDLE
|
||||
{ &gAnju2UmbrellaWalkAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_UMBRELLA_WALK
|
||||
{ &gAnju2UmbrellaSitAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_UMBRELLA_SIT
|
||||
{ &gAnju2UmbrellaCryingAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_UMBRELLA_CRYING
|
||||
{ &gAnju2UmbrellaCryAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_UMBRELLA_CRY
|
||||
|
||||
// ENAN_ANIMOBJ_AN3
|
||||
{ &gAnju3BroomIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_BROOM_IDLE
|
||||
@@ -1004,17 +1004,17 @@ static AnimationInfoS sAnimationInfo[ENAN_ANIM_MAX] = {
|
||||
{ &gAnju2UmbrellaSitAnim, -1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_24
|
||||
|
||||
// ENAN_ANIMOBJ_AN4
|
||||
{ &object_an4_Anim_006CC0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_25
|
||||
{ &object_an4_Anim_007E3C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_26
|
||||
{ &object_an4_Anim_0088C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_27
|
||||
{ &object_an4_Anim_0013C8, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_28
|
||||
{ &object_an4_Anim_002550, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_29
|
||||
{ &object_an4_Anim_00353C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_30
|
||||
{ &object_an4_Anim_004498, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_31
|
||||
{ &object_an4_Anim_0060B4, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_32
|
||||
{ &object_an4_Anim_00041C, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_33
|
||||
{ &gAnju4SittingRaiseFaceAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_SITTING_RAISE_FACE
|
||||
{ &object_an4_Anim_00506C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_35
|
||||
{ &gAnju4MaskStandLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_MASK_STAND_LOOP
|
||||
{ &gAnju4MaskKneelAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_MASK_KNEEL
|
||||
{ &gAnju4MaskKneelLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_MASK_KNEEL_LOOP
|
||||
{ &gAnju4HugAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_HUG
|
||||
{ &gAnju4HugLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_HUG_LOOP
|
||||
{ &gAnju4HugReleaseAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_HUG_RELEASE
|
||||
{ &gAnju4HugReleaseLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_HUG_RELEASE_LOOP
|
||||
{ &gAnju4CombineMasks1Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_COMBINE_MASKS_1
|
||||
{ &gAnju4CombineMasks2Anim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_COMBINE_MASKS_2
|
||||
{ &gAnju4LookUpAnim, 1.0f, 0, -1, ANIMMODE_ONCE, 0 }, // ENAN_ANIM_LOOK_UP
|
||||
{ &gAnju4LookUpLoopAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENAN_ANIM_LOOK_UP_LOOP
|
||||
};
|
||||
|
||||
s32 EnAn_UpdateSkel(EnAn* this, PlayState* play) {
|
||||
@@ -1131,7 +1131,7 @@ typedef enum EnAnEyes {
|
||||
/* 1 */ ENAN_EYES_HALF1,
|
||||
/* 2 */ ENAN_EYES_CLOSED,
|
||||
/* 3 */ ENAN_EYES_HALF2,
|
||||
/* 4 */ ENAN_EYES_COMFORTING,
|
||||
/* 4 */ ENAN_EYES_COMFORT,
|
||||
/* 5 */ ENAN_EYES_SAD,
|
||||
/* 6 */ ENAN_EYES_RELIEVED_CLOSED,
|
||||
/* 7 */ ENAN_EYES_MAX
|
||||
@@ -1195,15 +1195,15 @@ void EnAn_UpdateFace(EnAn* this) {
|
||||
break;
|
||||
|
||||
case ENAN_FACE_8:
|
||||
if ((this->eyeTexIndex == ENAN_EYES_COMFORTING) || (this->eyeTexIndex == ENAN_EYES_CLOSED)) {
|
||||
if ((this->eyeTexIndex == ENAN_EYES_COMFORT) || (this->eyeTexIndex == ENAN_EYES_CLOSED)) {
|
||||
skipBlink = true;
|
||||
this->eyeTexIndex = ENAN_EYES_COMFORTING;
|
||||
this->eyeTexIndex = ENAN_EYES_COMFORT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!skipBlink) {
|
||||
if ((this->eyeTexIndex == ENAN_EYES_COMFORTING) || (this->eyeTexIndex == ENAN_EYES_SAD)) {
|
||||
if ((this->eyeTexIndex == ENAN_EYES_COMFORT) || (this->eyeTexIndex == ENAN_EYES_SAD)) {
|
||||
this->eyeTexIndex = ENAN_EYES_OPEN;
|
||||
} else if (this->eyeTexIndex == ENAN_EYES_RELIEVED_CLOSED) {
|
||||
this->eyeTexIndex = ENAN_EYES_HALF1;
|
||||
@@ -1278,7 +1278,7 @@ void EnAn_DrawAccessory(EnAn* this, PlayState* play, EnAnAccessory accessoryId)
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gKafeiMaskDL);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gKafeisMaskDL);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, play->objectCtx.slots[originalObjectSlot].segment);
|
||||
}
|
||||
break;
|
||||
@@ -1531,7 +1531,7 @@ s32 EnAn_MsgEvent_Cooking(Actor* thisx, PlayState* play) {
|
||||
|
||||
switch (this->msgEventState) {
|
||||
case 0x0:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_TASTING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_TASTE);
|
||||
this->msgEventState++;
|
||||
break;
|
||||
|
||||
@@ -1544,7 +1544,7 @@ s32 EnAn_MsgEvent_Cooking(Actor* thisx, PlayState* play) {
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_TASTING_END);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_TASTE_END);
|
||||
this->msgEventState++;
|
||||
break;
|
||||
}
|
||||
@@ -1572,7 +1572,7 @@ s32 EnAn_MsgEvent_LaundryPool(Actor* thisx, PlayState* play) {
|
||||
label:
|
||||
this->stateFlags &= ~(ENAN_STATE_ENGAGED | ENAN_STATE_DRAW_KAFEI_MASK);
|
||||
this->stateFlags |= ENAN_STATE_LOST_ATTENTION;
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRYING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRY);
|
||||
ret = true;
|
||||
this->msgEventState++;
|
||||
break;
|
||||
@@ -1864,11 +1864,11 @@ s32 EnAn_ChooseAnimAfterTalking(EnAn* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
case ANJU_SCH_COOKING:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_COOKING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_COOK);
|
||||
break;
|
||||
|
||||
case ANJU_SCH_GIVE_LUNCH_TO_GRANNY:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAITING_WITH_TRAY);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAIT_WITH_TRAY);
|
||||
break;
|
||||
|
||||
case ANJU_SCH_WALKING_47:
|
||||
@@ -1883,8 +1883,8 @@ s32 EnAn_ChooseAnimAfterTalking(EnAn* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
default:
|
||||
if (this->animIndex == ENAN_ANIM_WAITING_WITH_TRAY) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALKING_WITH_TRAY);
|
||||
if (this->animIndex == ENAN_ANIM_WAIT_WITH_TRAY) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALK_WITH_TRAY);
|
||||
}
|
||||
if (this->animIndex == ENAN_ANIM_UMBRELLA_IDLE) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_WALK);
|
||||
@@ -1900,7 +1900,7 @@ s32 EnAn_ChooseAnimAfterTalking(EnAn* this, PlayState* play) {
|
||||
|
||||
void EnAn_DialogueFunc_80B556F8(EnAn* this, PlayState* play) {
|
||||
if (this->dialogueFuncState == 0) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_LOOKING_UP_RELIEVED);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_LOOK_UP_RELIEVED);
|
||||
this->stateFlags &= ~ENAN_STATE_ENGAGED;
|
||||
this->stateFlags |= ENAN_STATE_LOST_ATTENTION;
|
||||
this->dialogueFuncState++;
|
||||
@@ -1914,7 +1914,7 @@ void EnAn_DialogueFunc_80B556F8(EnAn* this, PlayState* play) {
|
||||
|
||||
void EnAn_DialogueFunc_80B557AC(EnAn* this, PlayState* play) {
|
||||
if (this->dialogueFuncState == 0) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_BOWING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_BOW);
|
||||
this->stateFlags &= ~ENAN_STATE_ENGAGED;
|
||||
this->stateFlags |= ENAN_STATE_LOST_ATTENTION;
|
||||
this->dialogueFuncState++;
|
||||
@@ -1928,7 +1928,7 @@ void EnAn_DialogueFunc_80B557AC(EnAn* this, PlayState* play) {
|
||||
|
||||
void EnAn_DialogueFunc_80B55860(EnAn* this, PlayState* play) {
|
||||
if (this->dialogueFuncState == 0) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_BOWING_MORPH);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_BOW_MORPH);
|
||||
this->stateFlags |= ENAN_STATE_LOST_ATTENTION;
|
||||
this->stateFlags &= ~ENAN_STATE_ENGAGED;
|
||||
this->dialogueFuncState++;
|
||||
@@ -1969,7 +1969,7 @@ s32 EnAn_HandleDialogue(EnAn* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
case 0x28C6: // "Don't talk to me or I'll drop this plate"
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAITING_WITH_TRAY);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAIT_WITH_TRAY);
|
||||
break;
|
||||
|
||||
case 0x28F5: // "The town will be crushed by the moon. Forget about the letter"
|
||||
@@ -1982,10 +1982,10 @@ s32 EnAn_HandleDialogue(EnAn* this, PlayState* play) {
|
||||
break;
|
||||
|
||||
case 0x28EB: // "I'm afraid to meet him..."
|
||||
if (this->animIndex != ENAN_ANIM_UMBRELLA_CRYING) {
|
||||
if (this->animIndex != ENAN_ANIM_UMBRELLA_CRY) {
|
||||
this->stateFlags &= ~(ENAN_STATE_ENGAGED | ENAN_STATE_DRAW_KAFEI_MASK);
|
||||
this->stateFlags |= ENAN_STATE_LOST_ATTENTION;
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRYING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRY);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2083,8 +2083,8 @@ s32 EnAn_HandleDialogue(EnAn* this, PlayState* play) {
|
||||
case 0x28F4: // "But he said in the letter he'll come back"
|
||||
case 0x28F6: // "Mother thank you"
|
||||
default:
|
||||
if (this->animIndex == ENAN_ANIM_WALKING_WITH_TRAY) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAITING_WITH_TRAY);
|
||||
if (this->animIndex == ENAN_ANIM_WALK_WITH_TRAY) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAIT_WITH_TRAY);
|
||||
}
|
||||
if (this->animIndex == ENAN_ANIM_UMBRELLA_WALK) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_IDLE);
|
||||
@@ -2329,7 +2329,7 @@ s32 EnAn_ProcessSchedule_GiveLunchToGranny(EnAn* this, PlayState* play, Schedule
|
||||
s32 ret = false;
|
||||
|
||||
if (func_80B55D98(this, play, scheduleOutput, ACTORCAT_NPC, ACTOR_EN_NB)) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAITING_WITH_TRAY);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WAIT_WITH_TRAY);
|
||||
SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
|
||||
ret = true;
|
||||
|
||||
@@ -2398,7 +2398,7 @@ s32 EnAn_ProcessSchedule_Door(EnAn* this, PlayState* play, ScheduleOutput* sched
|
||||
case ANJU_SCH_DOOR_27:
|
||||
case ANJU_SCH_DOOR_28:
|
||||
this->stateFlags |= ENAN_STATE_DRAW_TRAY | ENAN_STATE_UPDATE_EYES;
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALKING_WITH_TRAY);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALK_WITH_TRAY);
|
||||
break;
|
||||
|
||||
case ANJU_SCH_DOOR_36:
|
||||
@@ -2492,7 +2492,7 @@ s32 EnAn_ProcessSchedule_Walking(EnAn* this, PlayState* play, ScheduleOutput* sc
|
||||
/* fallthrough */
|
||||
case ANJU_SCH_WALKING_44:
|
||||
case ANJU_SCH_WALKING_45:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALKING_WITH_TRAY);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_WALK_WITH_TRAY);
|
||||
this->stateFlags |= ENAN_STATE_UPDATE_EYES | ENAN_STATE_LOST_ATTENTION;
|
||||
this->stateFlags |= ENAN_STATE_DRAW_TRAY;
|
||||
break;
|
||||
@@ -2630,7 +2630,7 @@ s32 EnAn_ProcessSchedule_80B56880(EnAn* this, PlayState* play, ScheduleOutput* s
|
||||
this->stateFlags |= ENAN_STATE_DRAW_UMBRELLA;
|
||||
|
||||
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_SPOKE_TO_ANJU_IN_LAUNDRY_POOL)) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRYING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_UMBRELLA_CRY);
|
||||
this->stateFlags |= ENAN_STATE_IGNORE_GRAVITY;
|
||||
this->actor.world.rot.y += 0x7FF8;
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
@@ -2646,7 +2646,7 @@ s32 EnAn_ProcessSchedule_80B56880(EnAn* this, PlayState* play, ScheduleOutput* s
|
||||
break;
|
||||
|
||||
case ANJU_SCH_COOKING:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_COOKING);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_COOK);
|
||||
SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
|
||||
this->stateFlags |= ENAN_STATE_UPDATE_EYES | ENAN_STATE_LOST_ATTENTION;
|
||||
this->stateFlags |= ENAN_STATE_DRAW_CHOPSTICKS;
|
||||
@@ -2668,7 +2668,7 @@ s32 EnAn_ProcessSchedule_Ranch(EnAn* this, PlayState* play, ScheduleOutput* sche
|
||||
Math_Vec3s_Copy(&this->actor.world.rot, &this->actor.shape.rot);
|
||||
|
||||
if (scheduleOutput->result == ANJU_SCH_RANCH) {
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_SITTING_IN_DISBELIEVE);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_SITTING_IN_DISBELIEF);
|
||||
SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
|
||||
|
||||
this->stateFlags |= ENAN_STATE_UPDATE_EYES | ENAN_STATE_LOST_ATTENTION;
|
||||
@@ -2698,7 +2698,7 @@ s32 EnAn_ProcessSchedule_StaffRoom(EnAn* this, PlayState* play, ScheduleOutput*
|
||||
break;
|
||||
|
||||
case ANJU_SCH_TALKING_WITH_MOM:
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_SITTING_IN_DISBELIEVE);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_SITTING_IN_DISBELIEF);
|
||||
this->savedFaceIndex = ENAN_FACE_5;
|
||||
this->faceIndex = ENAN_FACE_5;
|
||||
this->eyeTimer = 8;
|
||||
@@ -2718,7 +2718,7 @@ s32 EnAn_ProcessSchedule_WithKafei(EnAn* this, PlayState* play, ScheduleOutput*
|
||||
|
||||
Math_Vec3s_Copy(&this->actor.shape.rot, &D_80B58EA4);
|
||||
Math_Vec3s_Copy(&this->actor.world.rot, &this->actor.shape.rot);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_HOLDING_HANDS);
|
||||
EnAn_ChangeAnim(this, play, ENAN_ANIM_HOLD_HANDS);
|
||||
SubS_SetOfferMode(&this->stateFlags, SUBS_OFFER_MODE_ONSCREEN, SUBS_OFFER_MODE_MASK);
|
||||
this->stateFlags |= ENAN_STATE_UPDATE_EYES | ENAN_STATE_LOST_ATTENTION;
|
||||
|
||||
@@ -3219,15 +3219,15 @@ void EnAn_Talk(EnAn* this, PlayState* play) {
|
||||
void EnAn_HandleCouplesMaskCutscene(EnAn* this, PlayState* play) {
|
||||
s32 animIds[] = {
|
||||
/* 0 */ 0, // no cue
|
||||
/* 1 */ ENAN_ANIM_SITTING_IN_DISBELIEVE,
|
||||
/* 2 */ ENAN_ANIM_SITTING_RAISE_FACE,
|
||||
/* 3 */ ENAN_ANIM_25,
|
||||
/* 4 */ ENAN_ANIM_26,
|
||||
/* 5 */ ENAN_ANIM_28,
|
||||
/* 6 */ ENAN_ANIM_30,
|
||||
/* 7 */ ENAN_ANIM_32,
|
||||
/* 8 */ ENAN_ANIM_33,
|
||||
/* 9 */ ENAN_ANIM_HOLDING_HANDS,
|
||||
/* 1 */ ENAN_ANIM_SITTING_IN_DISBELIEF,
|
||||
/* 2 */ ENAN_ANIM_LOOK_UP,
|
||||
/* 3 */ ENAN_ANIM_MASK_STAND_LOOP,
|
||||
/* 4 */ ENAN_ANIM_MASK_KNEEL,
|
||||
/* 5 */ ENAN_ANIM_HUG,
|
||||
/* 6 */ ENAN_ANIM_HUG_RELEASE,
|
||||
/* 7 */ ENAN_ANIM_COMBINE_MASKS_1,
|
||||
/* 8 */ ENAN_ANIM_COMBINE_MASKS_2,
|
||||
/* 9 */ ENAN_ANIM_HOLD_HANDS,
|
||||
};
|
||||
s32 pad;
|
||||
|
||||
@@ -3252,8 +3252,8 @@ void EnAn_HandleCouplesMaskCutscene(EnAn* this, PlayState* play) {
|
||||
EnAn_ChangeAnim(this, play, animIds[cueId]);
|
||||
}
|
||||
|
||||
if ((this->animIndex == ENAN_ANIM_26) || (this->animIndex == ENAN_ANIM_28) ||
|
||||
(this->animIndex == ENAN_ANIM_30) || (this->animIndex == ENAN_ANIM_SITTING_RAISE_FACE)) {
|
||||
if ((this->animIndex == ENAN_ANIM_MASK_KNEEL) || (this->animIndex == ENAN_ANIM_HUG) ||
|
||||
(this->animIndex == ENAN_ANIM_HUG_RELEASE) || (this->animIndex == ENAN_ANIM_LOOK_UP)) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
EnAn_ChangeAnim(this, play, this->animIndex + 1);
|
||||
}
|
||||
@@ -3869,7 +3869,7 @@ void EnAn_Draw(Actor* thisx, PlayState* play) {
|
||||
gAnju1EyeHalfTex, // ENAN_EYES_HALF1
|
||||
gAnju1EyeClosedTex, // ENAN_EYES_CLOSED
|
||||
gAnju1EyeHalfTex, // ENAN_EYES_HALF2
|
||||
gAnju1EyeComfortingTex, // ENAN_EYES_COMFORTING
|
||||
gAnju1EyeComfortTex, // ENAN_EYES_COMFORT
|
||||
gAnju1EyeSadTex, // ENAN_EYES_SAD
|
||||
gAnju1EyeRelievedClosedTex, // ENAN_EYES_RELIEVED_CLOSED
|
||||
};
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
*/
|
||||
|
||||
#include "z_en_owl.h"
|
||||
#include "objects/object_owl/object_owl.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_10)
|
||||
|
||||
@@ -128,15 +127,15 @@ void EnOwl_Init(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime1, &object_owl_Skel_00C5F8, &object_owl_Anim_001ADC, this->jointTable1,
|
||||
this->morphTable1, 21);
|
||||
SkelAnime_InitFlex(play, &this->skelAnime2, &object_owl_Skel_0105C0, &object_owl_Anim_00CDB0, this->jointTable2,
|
||||
this->morphTable2, 16);
|
||||
SkelAnime_InitFlex(play, &this->skelAnimeFlying, &gOwlFlyingSkel, &gOwlFlyAnim, this->jointTableFlying,
|
||||
this->morphTableFlying, OWL_FLYING_LIMB_MAX);
|
||||
SkelAnime_InitFlex(play, &this->skelAnimePerching, &gOwlPerchingSkel, &gOwlPerchAnim, this->jointTablePerching,
|
||||
this->morphTablePerching, OWL_PERCHING_LIMB_MAX);
|
||||
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
this->actor.terminalVelocity = -10.0f;
|
||||
this->actor.targetArrowOffset = 500.0f;
|
||||
EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f);
|
||||
|
||||
this->actionFlags = 0;
|
||||
this->unk_40D = 0;
|
||||
@@ -252,7 +251,7 @@ s32 func_8095A9FC(EnOwl* this, PlayState* play, u16 textId) {
|
||||
}
|
||||
|
||||
void func_8095AA70(EnOwl* this) {
|
||||
EnOwl_ChangeMode(this, func_8095C1C8, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095C1C8, func_8095C484, &this->skelAnimeFlying, &gOwlUnfoldWingsAnim, 0.0f);
|
||||
this->eyeTexIndex = 0;
|
||||
this->blinkTimer = Rand_S16Offset(60, 60);
|
||||
}
|
||||
@@ -425,9 +424,9 @@ void func_8095B0C8(EnOwl* this) {
|
||||
}
|
||||
|
||||
void func_8095B158(EnOwl* this) {
|
||||
if (Animation_OnFrame(&this->skelAnime1, 2.0f) || Animation_OnFrame(&this->skelAnime1, 9.0f) ||
|
||||
Animation_OnFrame(&this->skelAnime1, 23.0f) || Animation_OnFrame(&this->skelAnime1, 40.0f) ||
|
||||
Animation_OnFrame(&this->skelAnime1, 58.0f)) {
|
||||
if (Animation_OnFrame(&this->skelAnimeFlying, 2.0f) || Animation_OnFrame(&this->skelAnimeFlying, 9.0f) ||
|
||||
Animation_OnFrame(&this->skelAnimeFlying, 23.0f) || Animation_OnFrame(&this->skelAnimeFlying, 40.0f) ||
|
||||
Animation_OnFrame(&this->skelAnimeFlying, 58.0f)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
|
||||
}
|
||||
}
|
||||
@@ -448,7 +447,7 @@ void func_8095B254(EnOwl* this, PlayState* play) {
|
||||
}
|
||||
|
||||
if (this->actionFlags & 1) {
|
||||
EnOwl_ChangeMode(this, func_8095B1E4, func_8095C328, &this->skelAnime1, &object_owl_Anim_001ADC, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095B1E4, func_8095C328, &this->skelAnimeFlying, &gOwlFlyAnim, 0.0f);
|
||||
this->unk_3EA = 6;
|
||||
this->actor.flags |= ACTOR_FLAG_20;
|
||||
}
|
||||
@@ -458,7 +457,7 @@ void func_8095B254(EnOwl* this, PlayState* play) {
|
||||
|
||||
void func_8095B2F8(EnOwl* this, PlayState* play) {
|
||||
func_8095B06C(this);
|
||||
if (this->skelAnime1.curFrame >= 18.0f) {
|
||||
if (this->skelAnimeFlying.curFrame >= 18.0f) {
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x200, 0x80);
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
}
|
||||
@@ -466,7 +465,7 @@ void func_8095B2F8(EnOwl* this, PlayState* play) {
|
||||
if ((this->actor.shape.rot.y == this->unk_3EC) && (this->actionFlags & 1)) {
|
||||
this->actionFunc = func_8095B254;
|
||||
Animation_Change(this->skelAnime3, this->skelAnime3->animation, 1.0f, 19.0f,
|
||||
Animation_GetLastFrame(&object_owl_Anim_001168), ANIMMODE_ONCE, 0.0f);
|
||||
Animation_GetLastFrame(&gOwlTakeoffAnim), ANIMMODE_ONCE, 0.0f);
|
||||
this->unk_414 = func_8095C484;
|
||||
}
|
||||
|
||||
@@ -476,7 +475,7 @@ void func_8095B2F8(EnOwl* this, PlayState* play) {
|
||||
void func_8095B3DC(EnOwl* this, PlayState* play) {
|
||||
if (this->actionFlags & 1) {
|
||||
this->actionFunc = func_8095B2F8;
|
||||
Animation_Change(this->skelAnime3, &object_owl_Anim_001168, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f);
|
||||
Animation_Change(this->skelAnime3, &gOwlTakeoffAnim, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f);
|
||||
this->unk_414 = func_8095C408;
|
||||
this->unk_3EC = 0x5500;
|
||||
this->actor.world.pos.y += 100.0f;
|
||||
@@ -489,7 +488,7 @@ void func_8095B480(EnOwl* this, PlayState* play) {
|
||||
|
||||
if (player->stateFlags3 & PLAYER_STATE3_10000000) {
|
||||
this->actor.textId = 0xBF1;
|
||||
EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095BF58, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f);
|
||||
this->eyeTexIndex = 0;
|
||||
this->actionFlags &= ~8;
|
||||
this->blinkTimer = Rand_S16Offset(60, 60);
|
||||
@@ -523,7 +522,7 @@ void func_8095B574(EnOwl* this, PlayState* play) {
|
||||
|
||||
void func_8095B650(EnOwl* this, PlayState* play) {
|
||||
if (this->actionFlags & 1) {
|
||||
EnOwl_ChangeMode(this, func_8095B574, func_8095C484, &this->skelAnime2, &object_owl_Anim_00CDB0, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095B574, func_8095C484, &this->skelAnimePerching, &gOwlPerchAnim, 0.0f);
|
||||
this->actor.textId = 0xBF5;
|
||||
this->actionFlags &= ~8;
|
||||
}
|
||||
@@ -532,8 +531,8 @@ void func_8095B650(EnOwl* this, PlayState* play) {
|
||||
|
||||
void func_8095B6C8(EnOwl* this, PlayState* play) {
|
||||
if (this->actionFlags & 1) {
|
||||
Animation_Change(this->skelAnime3, &object_owl_Anim_00CB94, -1.0f,
|
||||
Animation_GetLastFrame(&object_owl_Anim_00CB94), 0.0f, ANIMMODE_ONCE, 0.0f);
|
||||
Animation_Change(this->skelAnime3, &gOwlUnfoldWingsAnim, -1.0f, Animation_GetLastFrame(&gOwlUnfoldWingsAnim),
|
||||
0.0f, ANIMMODE_ONCE, 0.0f);
|
||||
this->unk_414 = func_8095C484;
|
||||
this->actionFunc = func_8095B650;
|
||||
}
|
||||
@@ -588,7 +587,7 @@ void func_8095B76C(EnOwl* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_8095B960(EnOwl* this, PlayState* play) {
|
||||
if (this->skelAnime1.curFrame >= 18.0f) {
|
||||
if (this->skelAnimeFlying.curFrame >= 18.0f) {
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x200, 0x80);
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
}
|
||||
@@ -605,7 +604,7 @@ void func_8095B960(EnOwl* this, PlayState* play) {
|
||||
void func_8095B9FC(EnOwl* this, PlayState* play) {
|
||||
if (this->actionFlags & 1) {
|
||||
this->actionFunc = func_8095B960;
|
||||
Animation_Change(this->skelAnime3, &object_owl_Anim_001168, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f);
|
||||
Animation_Change(this->skelAnime3, &gOwlTakeoffAnim, 1.0f, 0.0f, 35.0f, ANIMMODE_ONCE, 0.0f);
|
||||
this->unk_414 = func_8095C408;
|
||||
func_8095B0C8(this);
|
||||
}
|
||||
@@ -684,8 +683,8 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
|
||||
case 0xBEE:
|
||||
Message_CloseTextbox(play);
|
||||
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
|
||||
EnOwl_ChangeMode(this, func_8095B9FC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94,
|
||||
0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095B9FC, func_8095C484, &this->skelAnimeFlying,
|
||||
&gOwlUnfoldWingsAnim, 0.0f);
|
||||
this->eyeTexIndex = 0;
|
||||
this->blinkTimer = Rand_S16Offset(60, 60);
|
||||
this->actionFlags |= 8;
|
||||
@@ -714,8 +713,8 @@ void func_8095BA84(EnOwl* this, PlayState* play) {
|
||||
Message_CloseTextbox(play);
|
||||
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 0);
|
||||
this->actor.flags &= ~ACTOR_FLAG_10000;
|
||||
EnOwl_ChangeMode(this, func_8095B3DC, func_8095C484, &this->skelAnime1, &object_owl_Anim_00CB94,
|
||||
0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095B3DC, func_8095C484, &this->skelAnimeFlying,
|
||||
&gOwlUnfoldWingsAnim, 0.0f);
|
||||
this->eyeTexIndex = 0;
|
||||
this->blinkTimer = Rand_S16Offset(60, 60);
|
||||
this->actionFlags |= 8;
|
||||
@@ -783,23 +782,23 @@ void func_8095BF78(EnOwl* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void func_8095C09C(EnOwl* this, PlayState* play) {
|
||||
if (this->skelAnime1.curFrame > 10.0f) {
|
||||
if (this->skelAnimeFlying.curFrame > 10.0f) {
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_3EC, 2, 0x400, 0x40);
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
}
|
||||
|
||||
if (this->skelAnime1.curFrame > 45.0f) {
|
||||
if (this->skelAnimeFlying.curFrame > 45.0f) {
|
||||
this->actor.velocity.y = 2.0f;
|
||||
this->actor.gravity = 0.0f;
|
||||
this->actor.speed = 8.0f;
|
||||
} else if (this->skelAnime1.curFrame > 17.0f) {
|
||||
} else if (this->skelAnimeFlying.curFrame > 17.0f) {
|
||||
this->actor.velocity.y = 6.0f;
|
||||
this->actor.gravity = 0.0f;
|
||||
this->actor.speed = 4.0f;
|
||||
}
|
||||
|
||||
if (this->actionFlags & 1) {
|
||||
EnOwl_ChangeMode(this, func_8095BF78, func_8095C328, &this->skelAnime1, &object_owl_Anim_001ADC, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095BF78, func_8095C328, &this->skelAnimeFlying, &gOwlFlyAnim, 0.0f);
|
||||
this->unk_3EA = 6;
|
||||
this->unk_3EC += 0x2000;
|
||||
}
|
||||
@@ -810,7 +809,7 @@ void func_8095C09C(EnOwl* this, PlayState* play) {
|
||||
void func_8095C1C8(EnOwl* this, PlayState* play) {
|
||||
if (this->actionFlags & 1) {
|
||||
this->unk_3EA = 3;
|
||||
EnOwl_ChangeMode(this, func_8095C09C, func_8095C484, &this->skelAnime1, &object_owl_Anim_001168, 0.0f);
|
||||
EnOwl_ChangeMode(this, func_8095C09C, func_8095C484, &this->skelAnimeFlying, &gOwlTakeoffAnim, 0.0f);
|
||||
this->unk_3EC = BINANG_ADD(this->actor.world.rot.y, 0x4000);
|
||||
this->unk_3E4 = this->actor.world.pos.y;
|
||||
this->actor.velocity.y = 2.0f;
|
||||
@@ -826,8 +825,8 @@ void func_8095C258(EnOwl* this) {
|
||||
} else {
|
||||
this->unk_414 = func_8095C328;
|
||||
this->unk_3EA = 6;
|
||||
Animation_Change(this->skelAnime3, &object_owl_Anim_001ADC, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_owl_Anim_001ADC), ANIMMODE_ONCE, 5.0f);
|
||||
Animation_Change(this->skelAnime3, &gOwlFlyAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gOwlFlyAnim),
|
||||
ANIMMODE_ONCE, 5.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -840,8 +839,8 @@ void func_8095C328(EnOwl* this) {
|
||||
} else {
|
||||
this->unk_3EA = 160;
|
||||
this->unk_414 = func_8095C258;
|
||||
Animation_Change(this->skelAnime3, &object_owl_Anim_00C6D4, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_owl_Anim_00C6D4), ANIMMODE_LOOP, 5.0f);
|
||||
Animation_Change(this->skelAnime3, &gOwlGlideAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gOwlGlideAnim),
|
||||
ANIMMODE_LOOP, 5.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -925,7 +924,7 @@ void EnOwl_Update(Actor* thisx, PlayState* play) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) {
|
||||
if ((this->skelAnimeFlying.animation == &gOwlFlyAnim) && Animation_OnFrame(&this->skelAnimeFlying, 4.0f)) {
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER);
|
||||
}
|
||||
|
||||
@@ -1180,9 +1179,9 @@ void EnOwl_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
|
||||
|
||||
void EnOwl_Draw(Actor* thisx, PlayState* play) {
|
||||
static TexturePtr eyeTextures[] = {
|
||||
object_owl_Tex_008EB8,
|
||||
object_owl_Tex_0092B8,
|
||||
object_owl_Tex_0096B8,
|
||||
gOwlEyeOpenTex,
|
||||
gOwlEyeHalfTex,
|
||||
gOwlEyeClosedTex,
|
||||
};
|
||||
s32 pad;
|
||||
EnOwl* this = THIS;
|
||||
@@ -1214,7 +1213,7 @@ void func_8095D074(Actor* thisx, PlayState* play) {
|
||||
|
||||
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_owl_DL_001200);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gOwlFeatherDL);
|
||||
} else {
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
@@ -1222,7 +1221,7 @@ void func_8095D074(Actor* thisx, PlayState* play) {
|
||||
|
||||
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, (u8)(this->unk_3DC * 8));
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_owl_DL_001200);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gOwlFeatherDL);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define Z_EN_OWL_H
|
||||
|
||||
#include "global.h"
|
||||
#include "objects/object_owl/object_owl.h"
|
||||
|
||||
struct EnOwl;
|
||||
|
||||
@@ -23,12 +24,12 @@ typedef enum {
|
||||
typedef struct EnOwl {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ ColliderCylinder collider;
|
||||
/* 0x190 */ SkelAnime skelAnime1;
|
||||
/* 0x1D4 */ Vec3s jointTable1[21];
|
||||
/* 0x252 */ Vec3s morphTable1[21];
|
||||
/* 0x2D0 */ SkelAnime skelAnime2;
|
||||
/* 0x314 */ Vec3s jointTable2[16];
|
||||
/* 0x374 */ Vec3s morphTable2[16];
|
||||
/* 0x190 */ SkelAnime skelAnimeFlying;
|
||||
/* 0x1D4 */ Vec3s jointTableFlying[OWL_FLYING_LIMB_MAX];
|
||||
/* 0x252 */ Vec3s morphTableFlying[OWL_FLYING_LIMB_MAX];
|
||||
/* 0x2D0 */ SkelAnime skelAnimePerching;
|
||||
/* 0x314 */ Vec3s jointTablePerching[OWL_PERCHING_LIMB_MAX];
|
||||
/* 0x374 */ Vec3s morphTablePerching[OWL_PERCHING_LIMB_MAX];
|
||||
/* 0x3D4 */ SkelAnime* skelAnime3;
|
||||
/* 0x3D8 */ s16 unk_3D8;
|
||||
/* 0x3DA */ s16 unk_3DA;
|
||||
|
||||
+16
-16
@@ -16941,19 +16941,19 @@
|
||||
0x80C1C130:("DmAl_Draw",),
|
||||
0x80C1C410:("DmAn_UpdateSkelAnime",),
|
||||
0x80C1C4D8:("DmAn_ChangeAnim",),
|
||||
0x80C1C5B4:("func_80C1C5B4",),
|
||||
0x80C1C62C:("func_80C1C62C",),
|
||||
0x80C1C83C:("func_80C1C83C",),
|
||||
0x80C1C8E8:("func_80C1C8E8",),
|
||||
0x80C1C958:("func_80C1C958",),
|
||||
0x80C1CAB0:("DmAn_HandleCutscene",),
|
||||
0x80C1C5B4:("DmAn_Blink",),
|
||||
0x80C1C62C:("DmAn_UpdateHeadRot",),
|
||||
0x80C1C83C:("DmAn_UpdateAttention",),
|
||||
0x80C1C8E8:("DmAn_FindAnjusMotherActor",),
|
||||
0x80C1C958:("DmAn_WaitForObject",),
|
||||
0x80C1CAB0:("DmAn_HandleCouplesMaskCs",),
|
||||
0x80C1CC80:("DmAn_DoNothing",),
|
||||
0x80C1CC90:("DmAn_Init",),
|
||||
0x80C1CCE4:("DmAn_Destroy",),
|
||||
0x80C1CCF4:("DmAn_Update",),
|
||||
0x80C1CD80:("func_80C1CD80",),
|
||||
0x80C1CEFC:("func_80C1CEFC",),
|
||||
0x80C1D0B0:("func_80C1D0B0",),
|
||||
0x80C1CD80:("DmAn_PostLimbDraw",),
|
||||
0x80C1CEFC:("DmAn_TransformLimbDraw",),
|
||||
0x80C1D0B0:("DmAn_Draw",),
|
||||
0x80C1D410:("DmAh_ChangeAnim",),
|
||||
0x80C1D458:("func_80C1D458",),
|
||||
0x80C1D4D0:("func_80C1D4D0",),
|
||||
@@ -17102,19 +17102,19 @@
|
||||
0x80C23F6C:("EnEndingHero6_Draw",),
|
||||
0x80C24360:("DmGm_UpdateSkelAnime",),
|
||||
0x80C24428:("DmGm_ChangeAnim",),
|
||||
0x80C24504:("func_80C24504",),
|
||||
0x80C2457C:("func_80C2457C",),
|
||||
0x80C2478C:("func_80C2478C",),
|
||||
0x80C24838:("func_80C24838",),
|
||||
0x80C248A8:("func_80C248A8",),
|
||||
0x80C24A00:("DmGm_HandleCutscene",),
|
||||
0x80C24504:("DmGm_Blink",),
|
||||
0x80C2457C:("DmGm_UpdateHeadRot",),
|
||||
0x80C2478C:("DmGm_UpdateAttention",),
|
||||
0x80C24838:("DmGm_FindAnjusMotherActor",),
|
||||
0x80C248A8:("DmGm_WaitForObject",),
|
||||
0x80C24A00:("DmGm_HandleCouplesMaskCs",),
|
||||
0x80C24BD0:("DmGm_DoNothing",),
|
||||
0x80C24BE0:("DmGm_Init",),
|
||||
0x80C24C34:("DmGm_Destroy",),
|
||||
0x80C24C44:("DmGm_Update",),
|
||||
0x80C24CD0:("DmGm_PostLimbDraw",),
|
||||
0x80C24E4C:("DmGm_TransformLimbDraw",),
|
||||
0x80C25000:("func_80C25000",),
|
||||
0x80C25000:("DmGm_Draw",),
|
||||
0x80C25360:("func_80C25360",),
|
||||
0x80C253D0:("func_80C253D0",),
|
||||
0x80C255DC:("ObjSwprize_Init",),
|
||||
|
||||
@@ -16414,8 +16414,8 @@
|
||||
0x80C1D2C8:("D_80C1D2C8","UNK_TYPE1","",0x1),
|
||||
0x80C1D2D4:("D_80C1D2D4","UNK_TYPE1","",0x1),
|
||||
0x80C1D2DC:("D_80C1D2DC","UNK_TYPE1","",0x1),
|
||||
0x80C1D2E8:("D_80C1D2E8","UNK_TYPE4","",0x4),
|
||||
0x80C1D2F4:("D_80C1D2F4","UNK_TYPE1","",0x1),
|
||||
0x80C1D2E8:("sMouthTextures","UNK_TYPE4","",0x4),
|
||||
0x80C1D2F4:("sEyeTextures","UNK_TYPE1","",0x1),
|
||||
0x80C1D310:("jtbl_80C1D310","UNK_PTR","",0x4),
|
||||
0x80C1DDC0:("Dm_Ah_InitVars","UNK_TYPE1","",0x1),
|
||||
0x80C1DDE0:("D_80C1DDE0","UNK_PTR","",0x4),
|
||||
@@ -16501,8 +16501,8 @@
|
||||
0x80C25218:("D_80C25218","UNK_TYPE1","",0x1),
|
||||
0x80C25224:("D_80C25224","UNK_TYPE1","",0x1),
|
||||
0x80C2522C:("D_80C2522C","UNK_TYPE1","",0x1),
|
||||
0x80C25238:("D_80C25238","UNK_TYPE4","",0x4),
|
||||
0x80C25244:("D_80C25244","UNK_TYPE1","",0x1),
|
||||
0x80C25238:("sMouthTextures","UNK_TYPE4","",0x4),
|
||||
0x80C25244:("sEyeTextures","UNK_TYPE1","",0x1),
|
||||
0x80C25260:("jtbl_80C25260","UNK_PTR","",0x4),
|
||||
0x80C257D0:("Obj_Swprize_InitVars","UNK_TYPE1","",0x1),
|
||||
0x80C257F0:("D_80C257F0","UNK_TYPE1","",0x1),
|
||||
|
||||
+1
-1
@@ -239,7 +239,7 @@ for line in map_file:
|
||||
eprint(f"Found file '{obj_file}' in unknown asset category '{assetCat}'")
|
||||
eprint("I'll ignore this for now, but please fix it!")
|
||||
|
||||
elif len(line_split) == 2 and line_split[0].startswith("0x00000000"):
|
||||
elif len(line_split) == 2 and line_split[0].startswith("0x"):
|
||||
varVramStr, varName = line_split
|
||||
varVram = int(varVramStr, 16)
|
||||
varName = varName.strip()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user