1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-11 19:43:44 +00:00

Document Ganon objects (#1345)

* Document Ganon objects

* Better name for one texture
This commit is contained in:
Tom Overton 2022-08-29 16:44:17 -07:00 committed by GitHub
parent 0b531fd1ee
commit f5f6f2ef6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 671 additions and 553 deletions

View file

@ -1,96 +1,106 @@
<Root>
<!-- Assets for Ganondorf -->
<File Name="object_ganon" Segment="6">
<DList Name="object_ganon_DL_0049C0" Offset="0x49C0"/>
<DList Name="object_ganon_DL_004C08" Offset="0x4C08"/>
<DList Name="object_ganon_DL_004E08" Offset="0x4E08"/>
<DList Name="object_ganon_DL_004F20" Offset="0x4F20"/>
<DList Name="object_ganon_DL_005070" Offset="0x5070"/>
<DList Name="object_ganon_DL_005270" Offset="0x5270"/>
<DList Name="object_ganon_DL_005388" Offset="0x5388"/>
<DList Name="object_ganon_DL_0054D8" Offset="0x54D8"/>
<DList Name="object_ganon_DL_006030" Offset="0x6030"/>
<DList Name="object_ganon_DL_006198" Offset="0x6198"/>
<DList Name="object_ganon_DL_0062F0" Offset="0x62F0"/>
<DList Name="object_ganon_DL_006460" Offset="0x6460"/>
<DList Name="object_ganon_DL_0066E8" Offset="0x66E8"/>
<DList Name="object_ganon_DL_006A28" Offset="0x6A28"/>
<DList Name="object_ganon_DL_006B90" Offset="0x6B90"/>
<DList Name="object_ganon_DL_006F20" Offset="0x6F20"/>
<DList Name="object_ganon_DL_007048" Offset="0x7048"/>
<DList Name="object_ganon_DL_007310" Offset="0x7310"/>
<DList Name="object_ganon_DL_007518" Offset="0x7518"/>
<DList Name="object_ganon_DL_007640" Offset="0x7640"/>
<DList Name="object_ganon_DL_007908" Offset="0x7908"/>
<!-- Ganondorf Limb DisplayLists -->
<DList Name="gGanondorfPelvisDL" Offset="0x49C0"/>
<DList Name="gGanondorfRightShinDL" Offset="0x4C08"/>
<DList Name="gGanondorfRightFootDL" Offset="0x4E08"/>
<DList Name="gGanondorfRightThighDL" Offset="0x4F20"/>
<DList Name="gGanondorfLeftShinDL" Offset="0x5070"/>
<DList Name="gGanondorfLeftFootDL" Offset="0x5270"/>
<DList Name="gGanondorfLeftThighDL" Offset="0x5388"/>
<DList Name="gGanondorfHeadDL" Offset="0x54D8"/>
<DList Name="gGanondorfRightUpperLipDL" Offset="0x6030"/>
<DList Name="gGanondorfLowerHairEndDL" Offset="0x6198"/>
<DList Name="gGanondorfUpperHairEndDL" Offset="0x62F0"/>
<DList Name="gGanondorfJawDL" Offset="0x6460"/>
<DList Name="gGanondorfMouthDL" Offset="0x66E8"/>
<DList Name="gGanondorfLeftUpperLipDL" Offset="0x6A28"/>
<DList Name="gGanondorfTorsoDL" Offset="0x6B90"/>
<DList Name="gGanondorfRightForearmDL" Offset="0x6F20"/>
<DList Name="gGanondorfRightUpperArmDL" Offset="0x7048"/>
<DList Name="gGanondorfRightShoulderDL" Offset="0x7310"/>
<DList Name="gGanondorfLeftForearmDL" Offset="0x7518"/>
<DList Name="gGanondorfLeftUpperArmDL" Offset="0x7640"/>
<DList Name="gGanondorfLeftShoulderDL" Offset="0x7908"/>
<Texture Name="object_ganon_TLUT_007B10" OutName="tlut_00007B10" Format="rgba16" Width="16" Height="16" Offset="0x7B10"/>
<Texture Name="object_ganon_TLUT_007D10" OutName="tlut_00007D10" Format="rgba16" Width="16" Height="16" Offset="0x7D10"/>
<Texture Name="object_ganon_Tex_007F10" OutName="tex_00007F10" Format="rgba16" Width="8" Height="8" Offset="0x7F10"/>
<Texture Name="object_ganon_Tex_007F90" OutName="tex_00007F90" Format="ci8" Width="16" Height="16" Offset="0x7F90" TlutOffset="0x7B10"/>
<Texture Name="object_ganon_Tex_008090" OutName="tex_00008090" Format="ci8" Width="16" Height="16" Offset="0x8090" TlutOffset="0x7D10"/>
<Texture Name="object_ganon_Tex_008190" OutName="tex_00008190" Format="rgba16" Width="4" Height="8" Offset="0x8190"/>
<Texture Name="object_ganon_Tex_0081D0" OutName="tex_000081D0" Format="ci8" Width="16" Height="16" Offset="0x81D0" TlutOffset="0x7B10"/>
<Texture Name="object_ganon_Tex_0082D0" OutName="tex_000082D0" Format="ci8" Width="16" Height="16" Offset="0x82D0" TlutOffset="0x7D10"/>
<Texture Name="object_ganon_Tex_0083D0" OutName="tex_000083D0" Format="rgba16" Width="4" Height="4" Offset="0x83D0"/>
<Texture Name="object_ganon_Tex_0083F0" OutName="tex_000083F0" Format="ci8" Width="16" Height="8" Offset="0x83F0" TlutOffset="0x7D10"/>
<Texture Name="object_ganon_Tex_008470" OutName="tex_00008470" Format="ci8" Width="16" Height="16" Offset="0x8470" TlutOffset="0x7D10"/>
<Texture Name="object_ganon_Tex_008570" OutName="tex_00008570" Format="rgba16" Width="4" Height="16" Offset="0x8570"/>
<Texture Name="object_ganon_Tex_0085F0" OutName="tex_000085F0" Format="ci8" Width="8" Height="8" Offset="0x85F0" TlutOffset="0x7B10"/>
<Texture Name="object_ganon_Tex_008630" OutName="tex_00008630" Format="rgba16" Width="8" Height="16" Offset="0x8630"/>
<Texture Name="object_ganon_Tex_008730" OutName="tex_00008730" Format="ci8" Width="32" Height="16" Offset="0x8730" TlutOffset="0x7B10"/>
<Texture Name="object_ganon_Tex_008930" OutName="tex_00008930" Format="rgba16" Width="16" Height="16" Offset="0x8930"/>
<Texture Name="object_ganon_Tex_008B30" OutName="tex_00008B30" Format="rgba16" Width="16" Height="16" Offset="0x8B30"/>
<Texture Name="object_ganon_Tex_008D30" OutName="tex_00008D30" Format="rgba16" Width="8" Height="8" Offset="0x8D30"/>
<Texture Name="object_ganon_Tex_008DB0" OutName="tex_00008DB0" Format="rgba16" Width="16" Height="16" Offset="0x8DB0"/>
<Texture Name="object_ganon_Tex_008FB0" OutName="tex_00008FB0" Format="rgba16" Width="16" Height="16" Offset="0x8FB0"/>
<Texture Name="object_ganon_Tex_0091B0" OutName="tex_000091B0" Format="rgba16" Width="32" Height="16" Offset="0x91B0"/>
<Texture Name="object_ganon_TLUT_0095B0" OutName="tlut_000095B0" Format="rgba16" Width="56" Height="1" Offset="0x95B0"/>
<Texture Name="object_ganon_Tex_009620" OutName="tex_00009620" Format="rgba16" Width="16" Height="32" Offset="0x9620"/>
<Texture Name="gDorfEyeTex" OutName="dorf_eye" Format="rgba16" Width="32" Height="16" Offset="0x9A20"/>
<Texture Name="object_ganon_Tex_009E20" OutName="tex_00009E20" Format="rgba16" Width="16" Height="16" Offset="0x9E20"/>
<Texture Name="object_ganon_Tex_00A020" OutName="tex_0000A020" Format="rgba16" Width="16" Height="16" Offset="0xA020"/>
<Texture Name="object_ganon_Tex_00A220" OutName="tex_0000A220" Format="ci8" Width="8" Height="8" Offset="0xA220" TlutOffset="0x95B0"/>
<Texture Name="object_ganon_Tex_00A260" OutName="tex_0000A260" Format="rgba16" Width="16" Height="16" Offset="0xA260"/>
<Texture Name="object_ganon_Tex_00A460" OutName="tex_0000A460" Format="ci8" Width="8" Height="8" Offset="0xA460" TlutOffset="0x95B0"/>
<Texture Name="object_ganon_Tex_00A4A0" OutName="tex_0000A4A0" Format="ci8" Width="8" Height="8" Offset="0xA4A0" TlutOffset="0x95B0"/>
<Texture Name="object_ganon_Tex_00A4E0" OutName="tex_0000A4E0" Format="rgba16" Width="32" Height="16" Offset="0xA4E0"/>
<Texture Name="object_ganon_Tex_00A8E0" OutName="tex_0000A8E0" Format="rgba16" Width="32" Height="16" Offset="0xA8E0"/>
<!-- Ganondorf Textures -->
<Texture Name="gGanondorfSkinTLUT" OutName="ganondorf_skin_tlut" Format="rgba16" Width="16" Height="16" Offset="0x7B10"/>
<Texture Name="gGanondorfHairTLUT" OutName="ganondorf_hair_tlut" Format="rgba16" Width="16" Height="16" Offset="0x7D10"/>
<Texture Name="gGanondorfInnerMouthTex" OutName="ganondorf_inner_mouth" Format="rgba16" Width="8" Height="8" Offset="0x7F10"/>
<Texture Name="gGanondorfJawTex" OutName="ganondorf_jaw" Format="ci8" Width="16" Height="16" Offset="0x7F90" TlutOffset="0x7B10"/>
<Texture Name="gGanondorfSideburnTex" OutName="ganondorf_sideburn" Format="ci8" Width="16" Height="16" Offset="0x8090" TlutOffset="0x7D10"/>
<Texture Name="gGanondorfOuterMouthTex" OutName="ganondorf_outer_mouth" Format="rgba16" Width="4" Height="8" Offset="0x8190"/>
<Texture Name="gGanondorfUpperLipTex" OutName="ganondorf_upper_lip" Format="ci8" Width="16" Height="16" Offset="0x81D0" TlutOffset="0x7B10"/>
<Texture Name="gGanondorfHairTex" OutName="ganondorf_hair" Format="ci8" Width="16" Height="16" Offset="0x82D0" TlutOffset="0x7D10"/>
<Texture Name="gGanondorfTeethTex" OutName="ganondorf_teeth" Format="rgba16" Width="4" Height="4" Offset="0x83D0"/>
<Texture Name="gGanondorfEyebrowTex" OutName="ganondorf_eyebrow" Format="ci8" Width="16" Height="8" Offset="0x83F0" TlutOffset="0x7D10"/>
<Texture Name="gGanondorfHairFringeTex" OutName="ganondorf_hair_fringe" Format="ci8" Width="16" Height="16" Offset="0x8470" TlutOffset="0x7D10"/>
<Texture Name="gGanondorfNoseBridgeTex" OutName="ganondorf_nose_bridge" Format="rgba16" Width="4" Height="16" Offset="0x8570"/>
<Texture Name="gGanondorfNoseTex" OutName="ganondorf_nose" Format="ci8" Width="8" Height="8" Offset="0x85F0" TlutOffset="0x7B10"/>
<Texture Name="gGanondorfEarTex" OutName="ganondorf_ear" Format="rgba16" Width="8" Height="16" Offset="0x8630"/>
<Texture Name="gGanondorfEyeOrbitTex" OutName="ganondorf_eye_orbit" Format="ci8" Width="32" Height="16" Offset="0x8730" TlutOffset="0x7B10"/>
<Texture Name="gGanondorfGerudoFabricTex" OutName="ganondorf_gerudo_fabric" Format="rgba16" Width="16" Height="16" Offset="0x8930"/>
<Texture Name="gGanondorfRedFabricTex" OutName="ganondorf_red_fabric" Format="rgba16" Width="16" Height="16" Offset="0x8B30"/>
<Texture Name="gGanondorfBodysuitTex" OutName="ganondorf_bodysuit" Format="rgba16" Width="8" Height="8" Offset="0x8D30"/>
<Texture Name="gGanondorfLeatherTex" OutName="ganondorf_leather" Format="rgba16" Width="16" Height="16" Offset="0x8DB0"/>
<Texture Name="gGanondorfCapeFasteningTex" OutName="ganondorf_cape_fastening" Format="rgba16" Width="16" Height="16" Offset="0x8FB0"/>
<Texture Name="gGanondorfGerudoFabricWithSunTex" OutName="ganondorf_gerudo_fabric_with_sun" Format="rgba16" Width="32" Height="16" Offset="0x91B0"/>
<Texture Name="gGanondorfHandTLUT" OutName="ganondorf_hand_tlut" Format="rgba16" Width="56" Height="1" Offset="0x95B0"/>
<Texture Name="gGanondorfJewelTex" OutName="ganondorf_jewel" Format="rgba16" Width="16" Height="32" Offset="0x9620"/>
<Texture Name="gGanondorfNormalEyeTex" OutName="ganondorf_normal_eye" Format="rgba16" Width="32" Height="16" Offset="0x9A20"/>
<Texture Name="gGanondorfChestJewelTex" OutName="ganondorf_chest_jewel" Format="rgba16" Width="16" Height="16" Offset="0x9E20"/>
<Texture Name="gGanondorfBlackLeatherTex" OutName="ganondorf_black_leather" Format="rgba16" Width="16" Height="16" Offset="0xA020"/>
<Texture Name="gGanondorfThumbTex" OutName="ganondorf_thumb" Format="ci8" Width="8" Height="8" Offset="0xA220" TlutOffset="0x95B0"/>
<Texture Name="gGanondorfGauntletAndPauldronTex" OutName="ganondorf_gauntlet_and_pauldron" Format="rgba16" Width="16" Height="16" Offset="0xA260"/>
<Texture Name="gGanondorfHandSideTex" OutName="ganondorf_hand_side" Format="ci8" Width="8" Height="8" Offset="0xA460" TlutOffset="0x95B0"/>
<Texture Name="gGanondorfFingerTex" OutName="ganondorf_finger" Format="ci8" Width="8" Height="8" Offset="0xA4A0" TlutOffset="0x95B0"/>
<Texture Name="gGanondorfCrazedEyeTex" OutName="ganondorf_crazed_eye" Format="rgba16" Width="32" Height="16" Offset="0xA4E0"/>
<Texture Name="gGanondorfEmptyEyeTex" OutName="ganondorf_empty_eye" Format="rgba16" Width="32" Height="16" Offset="0xA8E0"/>
<DList Name="object_ganon_DL_00BE90" Offset="0xBE90"/>
<DList Name="object_ganon_DL_00BF40" Offset="0xBF40"/>
<DList Name="object_ganon_DL_00C048" Offset="0xC048"/>
<DList Name="object_ganon_DL_00C518" Offset="0xC518"/>
<DList Name="gDorfOpenHandDL" Offset="0xC9E8"/>
<!-- DisplayList for Ganondorf's eyes -->
<DList Name="gGanondorfEyesDL" Offset="0xBE90"/>
<Texture Name="gDorfTitleCardTex" OutName="ganondorf_title_card" Format="i8" Width="128" Height="40" Offset="0xCF00"/>
<!-- Ganondorf Limb DisplayLists -->
<DList Name="gGanondorfJewelDL" Offset="0xBF40"/>
<DList Name="gGanondorfLeftHandDL" Offset="0xC048"/>
<DList Name="gGanondorfRightHandClosedDL" Offset="0xC518"/>
<DList Name="gGanondorfRightHandOpenDL" Offset="0xC9E8"/>
<Animation Name="object_ganon_Anim_011348" Offset="0x11348"/>
<!-- Ganondorf Title Card Texture -->
<Texture Name="gGanondorfTitleCardTex" OutName="ganondorf_title_card" Format="i8" Width="128" Height="40" Offset="0xCF00"/>
<Limb Name="object_ganon_Limb_011358" LimbType="Standard" Offset="0x11358"/>
<Limb Name="object_ganon_Limb_011364" LimbType="Standard" Offset="0x11364"/>
<Limb Name="object_ganon_Limb_011370" LimbType="Standard" Offset="0x11370"/>
<Limb Name="object_ganon_Limb_01137C" LimbType="Standard" Offset="0x1137C"/>
<Limb Name="object_ganon_Limb_011388" LimbType="Standard" Offset="0x11388"/>
<Limb Name="object_ganon_Limb_011394" LimbType="Standard" Offset="0x11394"/>
<Limb Name="object_ganon_Limb_0113A0" LimbType="Standard" Offset="0x113A0"/>
<Limb Name="object_ganon_Limb_0113AC" LimbType="Standard" Offset="0x113AC"/>
<Limb Name="object_ganon_Limb_0113B8" LimbType="Standard" Offset="0x113B8"/>
<Limb Name="object_ganon_Limb_0113C4" LimbType="Standard" Offset="0x113C4"/>
<Limb Name="object_ganon_Limb_0113D0" LimbType="Standard" Offset="0x113D0"/>
<Limb Name="object_ganon_Limb_0113DC" LimbType="Standard" Offset="0x113DC"/>
<Limb Name="object_ganon_Limb_0113E8" LimbType="Standard" Offset="0x113E8"/>
<Limb Name="object_ganon_Limb_0113F4" LimbType="Standard" Offset="0x113F4"/>
<Limb Name="object_ganon_Limb_011400" LimbType="Standard" Offset="0x11400"/>
<Limb Name="object_ganon_Limb_01140C" LimbType="Standard" Offset="0x1140C"/>
<Limb Name="object_ganon_Limb_011418" LimbType="Standard" Offset="0x11418"/>
<Limb Name="object_ganon_Limb_011424" LimbType="Standard" Offset="0x11424"/>
<Limb Name="object_ganon_Limb_011430" LimbType="Standard" Offset="0x11430"/>
<Limb Name="object_ganon_Limb_01143C" LimbType="Standard" Offset="0x1143C"/>
<Limb Name="object_ganon_Limb_011448" LimbType="Standard" Offset="0x11448"/>
<Limb Name="object_ganon_Limb_011454" LimbType="Standard" Offset="0x11454"/>
<Limb Name="object_ganon_Limb_011460" LimbType="Standard" Offset="0x11460"/>
<Limb Name="object_ganon_Limb_01146C" LimbType="Standard" Offset="0x1146C"/>
<Limb Name="object_ganon_Limb_011478" LimbType="Standard" Offset="0x11478"/>
<!-- Ganondorf Animation -->
<Animation Name="gGanondorfEndingFloatAnim" Offset="0x11348"/> <!-- Original name is "ONOLEE" (lit. "Curse you!" from his in-game dialogue) -->
<Skeleton Name="gDorfSkel" Type="Flex" LimbType="Standard" Offset="0x114E8"/>
<!-- Ganondorf Limbs -->
<Limb Name="gGanondorfRootLimb" LimbType="Standard" Offset="0x11358"/>
<Limb Name="gGanondorfTorsoLimb" LimbType="Standard" Offset="0x11364"/>
<Limb Name="gGanondorfLeftShoulderLimb" LimbType="Standard" Offset="0x11370"/>
<Limb Name="gGanondorfLeftUpperArmLimb" LimbType="Standard" Offset="0x1137C"/>
<Limb Name="gGanondorfLeftForearmLimb" LimbType="Standard" Offset="0x11388"/>
<Limb Name="gGanondorfLeftHandLimb" LimbType="Standard" Offset="0x11394"/>
<Limb Name="gGanondorfRightShoulderLimb" LimbType="Standard" Offset="0x113A0"/>
<Limb Name="gGanondorfRightUpperArmLimb" LimbType="Standard" Offset="0x113AC"/>
<Limb Name="gGanondorfRightForearmLimb" LimbType="Standard" Offset="0x113B8"/>
<Limb Name="gGanondorfRightHandLimb" LimbType="Standard" Offset="0x113C4"/>
<Limb Name="gGanondorfJewelLimb" LimbType="Standard" Offset="0x113D0"/>
<Limb Name="gGanondorfLeftUpperLipLimb" LimbType="Standard" Offset="0x113DC"/>
<Limb Name="gGanondorfMouthLimb" LimbType="Standard" Offset="0x113E8"/>
<Limb Name="gGanondorfJawLimb" LimbType="Standard" Offset="0x113F4"/>
<Limb Name="gGanondorfUpperHairEndLimb" LimbType="Standard" Offset="0x11400"/>
<Limb Name="gGanondorfLowerHairEndLimb" LimbType="Standard" Offset="0x1140C"/>
<Limb Name="gGanondorfRightUpperLipLimb" LimbType="Standard" Offset="0x11418"/>
<Limb Name="gGanondorfHeadLimb" LimbType="Standard" Offset="0x11424"/>
<Limb Name="gGanondorfPelvisLimb" LimbType="Standard" Offset="0x11430"/>
<Limb Name="gGanondorfLeftThighLimb" LimbType="Standard" Offset="0x1143C"/>
<Limb Name="gGanondorfLeftShinLimb" LimbType="Standard" Offset="0x11448"/>
<Limb Name="gGanondorfLeftFootLimb" LimbType="Standard" Offset="0x11454"/>
<Limb Name="gGanondorfRightThighLimb" LimbType="Standard" Offset="0x11460"/>
<Limb Name="gGanondorfRightShinLimb" LimbType="Standard" Offset="0x1146C"/>
<Limb Name="gGanondorfRightFootLimb" LimbType="Standard" Offset="0x11478"/>
<!-- Ganondorf Skeleton -->
<Skeleton Name="gGanondorfSkel" Type="Flex" LimbType="Standard" Offset="0x114E8"/>
</File>
</Root>

View file

@ -1,158 +1,174 @@
<Root>
<!-- Assets for Ganon -->
<File Name="object_ganon2" Segment="6">
<Animation Name="object_ganon2_Anim_003B1C" Offset="0x3B1C"/>
<Animation Name="object_ganon2_Anim_007288" Offset="0x7288"/>
<Animation Name="object_ganon2_Anim_008EB8" Offset="0x8EB8"/>
<Animation Name="object_ganon2_Anim_009654" Offset="0x9654"/>
<Animation Name="object_ganon2_Anim_00ADD0" Offset="0xADD0"/>
<Animation Name="object_ganon2_Anim_00CAF8" Offset="0xCAF8"/>
<Animation Name="object_ganon2_Anim_00DFF0" Offset="0xDFF0"/>
<Animation Name="object_ganon2_Anim_00E8EC" Offset="0xE8EC"/>
<Animation Name="object_ganon2_Anim_00F1D0" Offset="0xF1D0"/>
<Animation Name="object_ganon2_Anim_00FFE4" Offset="0xFFE4"/>
<DList Name="object_ganon2_DL_0163F0" Offset="0x163F0"/>
<DList Name="object_ganon2_DL_016630" Offset="0x16630"/>
<DList Name="object_ganon2_DL_016740" Offset="0x16740"/>
<DList Name="object_ganon2_DL_0168E0" Offset="0x168E0"/>
<DList Name="object_ganon2_DL_016AA8" Offset="0x16AA8"/>
<DList Name="object_ganon2_DL_016BE8" Offset="0x16BE8"/>
<DList Name="object_ganon2_DL_016D10" Offset="0x16D10"/>
<DList Name="object_ganon2_DL_016F80" Offset="0x16F80"/>
<DList Name="object_ganon2_DL_017160" Offset="0x17160"/>
<DList Name="object_ganon2_DL_017620" Offset="0x17620"/>
<DList Name="object_ganon2_DL_017910" Offset="0x17910"/>
<DList Name="object_ganon2_DL_017AF0" Offset="0x17AF0"/>
<DList Name="object_ganon2_DL_017FB0" Offset="0x17FB0"/>
<DList Name="object_ganon2_DL_0180E0" Offset="0x180E0"/>
<DList Name="object_ganon2_DL_018650" Offset="0x18650"/>
<DList Name="object_ganon2_DL_018740" Offset="0x18740"/>
<DList Name="object_ganon2_DL_018828" Offset="0x18828"/>
<DList Name="object_ganon2_DL_0188D8" Offset="0x188D8"/>
<DList Name="object_ganon2_DL_0189C8" Offset="0x189C8"/>
<DList Name="object_ganon2_DL_018AB0" Offset="0x18AB0"/>
<DList Name="object_ganon2_DL_018B60" Offset="0x18B60"/>
<DList Name="object_ganon2_DL_018EA0" Offset="0x18EA0"/>
<DList Name="object_ganon2_DL_019210" Offset="0x19210"/>
<DList Name="object_ganon2_DL_019330" Offset="0x19330"/>
<DList Name="object_ganon2_DL_019420" Offset="0x19420"/>
<DList Name="object_ganon2_DL_019510" Offset="0x19510"/>
<DList Name="object_ganon2_DL_0195C0" Offset="0x195C0"/>
<DList Name="object_ganon2_DL_019A40" Offset="0x19A40"/>
<DList Name="object_ganon2_DL_019C68" Offset="0x19C68"/>
<DList Name="object_ganon2_DL_019F48" Offset="0x19F48"/>
<DList Name="object_ganon2_DL_01A050" Offset="0x1A050"/>
<DList Name="object_ganon2_DL_01A4E0" Offset="0x1A4E0"/>
<DList Name="object_ganon2_DL_01A708" Offset="0x1A708"/>
<DList Name="object_ganon2_DL_01A9E8" Offset="0x1A9E8"/>
<DList Name="object_ganon2_DL_01AAF0" Offset="0x1AAF0"/>
<Texture Name="object_ganon2_TLUT_01AF80" OutName="tlut_0001AF80" Format="rgba16" Width="16" Height="16" Offset="0x1AF80"/>
<Texture Name="object_ganon2_TLUT_01B180" OutName="tlut_0001B180" Format="rgba16" Width="16" Height="16" Offset="0x1B180"/>
<Blob Name="object_ganon2_Blob_01B380" Size="0x200" Offset="0x1B380"/>
<Texture Name="object_ganon2_TLUT_01B580" OutName="tlut_0001B580" Format="rgba16" Width="16" Height="16" Offset="0x1B580"/>
<Texture Name="object_ganon2_TLUT_01B780" OutName="tlut_0001B780" Format="rgba16" Width="16" Height="16" Offset="0x1B780"/>
<Texture Name="object_ganon2_TLUT_01B980" OutName="tlut_0001B980" Format="rgba16" Width="16" Height="16" Offset="0x1B980"/>
<Texture Name="object_ganon2_TLUT_01BB80" OutName="tlut_0001BB80" Format="rgba16" Width="16" Height="16" Offset="0x1BB80"/>
<Texture Name="object_ganon2_TLUT_01BD80" OutName="tlut_0001BD80" Format="rgba16" Width="16" Height="16" Offset="0x1BD80"/>
<Texture Name="object_ganon2_TLUT_01BF80" OutName="tlut_0001BF80" Format="rgba16" Width="16" Height="16" Offset="0x1BF80"/>
<Texture Name="object_ganon2_Tex_01C180" OutName="tex_0001C180" Format="rgba16" Width="8" Height="16" Offset="0x1C180"/>
<Texture Name="object_ganon2_Tex_01C280" OutName="tex_0001C280" Format="rgba16" Width="8" Height="16" Offset="0x1C280"/>
<Texture Name="object_ganon2_Tex_01C380" OutName="tex_0001C380" Format="rgba16" Width="8" Height="8" Offset="0x1C380"/>
<Texture Name="object_ganon2_Tex_01C400" OutName="tex_0001C400" Format="ci8" Width="32" Height="32" Offset="0x1C400" TlutOffset="0x1AF80"/>
<Texture Name="object_ganon2_Tex_01C800" OutName="tex_0001C800" Format="rgba16" Width="8" Height="16" Offset="0x1C800"/>
<Texture Name="object_ganon2_Tex_01C900" OutName="tex_0001C900" Format="rgba16" Width="8" Height="16" Offset="0x1C900"/>
<Texture Name="object_ganon2_Tex_01CA00" OutName="tex_0001CA00" Format="ci8" Width="32" Height="16" Offset="0x1CA00" TlutOffset="0x1B180"/>
<Texture Name="object_ganon2_Tex_01CC00" OutName="tex_0001CC00" Format="ci8" Width="16" Height="16" Offset="0x1CC00" TlutOffset="0x1B580"/>
<Texture Name="object_ganon2_Tex_01CD00" OutName="tex_0001CD00" Format="rgba16" Width="16" Height="16" Offset="0x1CD00"/>
<Texture Name="object_ganon2_Tex_01CF00" OutName="tex_0001CF00" Format="ci8" Width="16" Height="16" Offset="0x1CF00" TlutOffset="0x1B780"/>
<Texture Name="object_ganon2_Tex_01D000" OutName="tex_0001D000" Format="ci8" Width="16" Height="16" Offset="0x1D000" TlutOffset="0x1B980"/>
<Texture Name="object_ganon2_Tex_01D100" OutName="tex_0001D100" Format="ci8" Width="16" Height="16" Offset="0x1D100" TlutOffset="0x1B780"/>
<Texture Name="object_ganon2_Tex_01D200" OutName="tex_0001D200" Format="ci8" Width="16" Height="16" Offset="0x1D200" TlutOffset="0x1B980"/>
<Texture Name="object_ganon2_Tex_01D300" OutName="tex_0001D300" Format="ci8" Width="16" Height="16" Offset="0x1D300" TlutOffset="0x1BB80"/>
<Texture Name="object_ganon2_Tex_01D400" OutName="tex_0001D400" Format="ci8" Width="16" Height="16" Offset="0x1D400" TlutOffset="0x1BD80"/>
<Texture Name="object_ganon2_Tex_01D500" OutName="tex_0001D500" Format="rgba16" Width="4" Height="16" Offset="0x1D500"/>
<Texture Name="object_ganon2_Tex_01D580" OutName="tex_0001D580" Format="ci8" Width="16" Height="32" Offset="0x1D580" TlutOffset="0x1BF80"/>
<Texture Name="object_ganon2_TLUT_01D780" OutName="tlut_0001D780" Format="rgba16" Width="4" Height="4" Offset="0x1D780"/>
<Texture Name="object_ganon2_TLUT_01D7A8" OutName="tlut_0001D7A8" Format="rgba16" Width="16" Height="11" Offset="0x1D7A8"/>
<Texture Name="object_ganon2_Tex_01D908" OutName="tex_0001D908" Format="ci8" Width="32" Height="32" Offset="0x1D908" TlutOffset="0x1D7A8"/>
<Texture Name="object_ganon2_Tex_01DD08" OutName="tex_0001DD08" Format="rgba16" Width="16" Height="32" Offset="0x1DD08"/>
<Texture Name="object_ganon2_Tex_01E108" OutName="tex_0001E108" Format="rgba16" Width="8" Height="8" Offset="0x1E108"/>
<Texture Name="object_ganon2_Tex_01E188" Format="ci4" Width="16" Height="16" Offset="0x1E188" TlutOffset="0x1D780"/> <!-- eye open -->
<Texture Name="object_ganon2_Tex_01E208" OutName="tex_0001E208" Format="rgba16" Width="8" Height="8" Offset="0x1E208"/>
<Texture Name="object_ganon2_Tex_01E288" OutName="tex_0001E288" Format="rgba16" Width="16" Height="16" Offset="0x1E288"/>
<Texture Name="object_ganon2_Tex_01E488" OutName="tex_0001E488" Format="rgba16" Width="16" Height="8" Offset="0x1E488"/>
<Texture Name="object_ganon2_Tex_01E588" OutName="tex_0001E588" Format="i4" Width="32" Height="32" Offset="0x1E588"/>
<Texture Name="object_ganon2_Tex_01E788" OutName="tex_0001E788" Format="rgba16" Width="8" Height="16" Offset="0x1E788"/>
<Texture Name="object_ganon2_Tex_01E888" OutName="tex_0001E888" Format="rgba16" Width="8" Height="16" Offset="0x1E888"/>
<Texture Name="object_ganon2_Tex_01E988" Format="ci4" Width="16" Height="16" Offset="0x1E988" TlutOffset="0x1D780"/> <!-- eye half closed -->
<Texture Name="object_ganon2_Tex_01EA08" Format="ci4" Width="16" Height="16" Offset="0x1EA08" TlutOffset="0x1D780"/> <!-- eye closed -->
<DList Name="object_ganon2_DL_020B18" Offset="0x20B18"/>
<DList Name="object_ganon2_DL_020BE0" Offset="0x20BE0"/>
<DList Name="object_ganon2_DL_020C80" Offset="0x20C80"/>
<DList Name="object_ganon2_DL_020DE8" Offset="0x20DE8"/>
<DList Name="object_ganon2_DL_020F50" Offset="0x20F50"/>
<DList Name="object_ganon2_DL_021120" Offset="0x21120"/>
<DList Name="object_ganon2_DL_0212F0" Offset="0x212F0"/>
<DList Name="object_ganon2_DL_0215D0" Offset="0x215D0"/>
<DList Name="object_ganon2_DL_0218B8" Offset="0x218B8"/>
<DList Name="object_ganon2_DL_0219D8" Offset="0x219D8"/>
<Texture Name="object_ganon2_Tex_021A90" Format="ia8" Width="128" Height="120" Offset="0x21A90"/>
<Limb Name="object_ganon2_Limb_025690" LimbType="Standard" Offset="0x25690"/>
<Limb Name="object_ganon2_Limb_02569C" LimbType="Standard" Offset="0x2569C"/>
<Limb Name="object_ganon2_Limb_0256A8" LimbType="Standard" Offset="0x256A8"/>
<Limb Name="object_ganon2_Limb_0256B4" LimbType="Standard" Offset="0x256B4"/>
<Limb Name="object_ganon2_Limb_0256C0" LimbType="Standard" Offset="0x256C0"/>
<Limb Name="object_ganon2_Limb_0256CC" LimbType="Standard" Offset="0x256CC"/>
<Limb Name="object_ganon2_Limb_0256D8" LimbType="Standard" Offset="0x256D8"/>
<Limb Name="object_ganon2_Limb_0256E4" LimbType="Standard" Offset="0x256E4"/>
<Limb Name="object_ganon2_Limb_0256F0" LimbType="Standard" Offset="0x256F0"/>
<Limb Name="object_ganon2_Limb_0256FC" LimbType="Standard" Offset="0x256FC"/>
<Limb Name="object_ganon2_Limb_025708" LimbType="Standard" Offset="0x25708"/>
<Limb Name="object_ganon2_Limb_025714" LimbType="Standard" Offset="0x25714"/>
<Limb Name="object_ganon2_Limb_025720" LimbType="Standard" Offset="0x25720"/>
<Limb Name="object_ganon2_Limb_02572C" LimbType="Standard" Offset="0x2572C"/>
<Limb Name="object_ganon2_Limb_025738" LimbType="Standard" Offset="0x25738"/>
<Limb Name="object_ganon2_Limb_025744" LimbType="Standard" Offset="0x25744"/>
<Limb Name="object_ganon2_Limb_025750" LimbType="Standard" Offset="0x25750"/>
<Limb Name="object_ganon2_Limb_02575C" LimbType="Standard" Offset="0x2575C"/>
<Limb Name="object_ganon2_Limb_025768" LimbType="Standard" Offset="0x25768"/>
<Limb Name="object_ganon2_Limb_025774" LimbType="Standard" Offset="0x25774"/>
<Limb Name="object_ganon2_Limb_025780" LimbType="Standard" Offset="0x25780"/>
<Limb Name="object_ganon2_Limb_02578C" LimbType="Standard" Offset="0x2578C"/>
<Limb Name="object_ganon2_Limb_025798" LimbType="Standard" Offset="0x25798"/>
<Limb Name="object_ganon2_Limb_0257A4" LimbType="Standard" Offset="0x257A4"/>
<Limb Name="object_ganon2_Limb_0257B0" LimbType="Standard" Offset="0x257B0"/>
<Limb Name="object_ganon2_Limb_0257BC" LimbType="Standard" Offset="0x257BC"/>
<Limb Name="object_ganon2_Limb_0257C8" LimbType="Standard" Offset="0x257C8"/>
<Limb Name="object_ganon2_Limb_0257D4" LimbType="Standard" Offset="0x257D4"/>
<Limb Name="object_ganon2_Limb_0257E0" LimbType="Standard" Offset="0x257E0"/>
<Limb Name="object_ganon2_Limb_0257EC" LimbType="Standard" Offset="0x257EC"/>
<Limb Name="object_ganon2_Limb_0257F8" LimbType="Standard" Offset="0x257F8"/>
<Limb Name="object_ganon2_Limb_025804" LimbType="Standard" Offset="0x25804"/>
<Limb Name="object_ganon2_Limb_025810" LimbType="Standard" Offset="0x25810"/>
<Limb Name="object_ganon2_Limb_02581C" LimbType="Standard" Offset="0x2581C"/>
<Limb Name="object_ganon2_Limb_025828" LimbType="Standard" Offset="0x25828"/>
<Limb Name="object_ganon2_Limb_025834" LimbType="Standard" Offset="0x25834"/>
<Limb Name="object_ganon2_Limb_025840" LimbType="Standard" Offset="0x25840"/>
<Limb Name="object_ganon2_Limb_02584C" LimbType="Standard" Offset="0x2584C"/>
<Limb Name="object_ganon2_Limb_025858" LimbType="Standard" Offset="0x25858"/>
<Limb Name="object_ganon2_Limb_025864" LimbType="Standard" Offset="0x25864"/>
<Limb Name="object_ganon2_Limb_025870" LimbType="Standard" Offset="0x25870"/>
<Limb Name="object_ganon2_Limb_02587C" LimbType="Standard" Offset="0x2587C"/>
<Limb Name="object_ganon2_Limb_025888" LimbType="Standard" Offset="0x25888"/>
<Limb Name="object_ganon2_Limb_025894" LimbType="Standard" Offset="0x25894"/>
<Limb Name="object_ganon2_Limb_0258A0" LimbType="Standard" Offset="0x258A0"/>
<Limb Name="object_ganon2_Limb_0258AC" LimbType="Standard" Offset="0x258AC"/>
<Skeleton Name="object_ganon2_Skel_025970" Type="Flex" LimbType="Standard" Offset="0x25970"/>
<Animation Name="object_ganon2_Anim_026510" Offset="0x26510"/>
<Animation Name="object_ganon2_Anim_026AF4" Offset="0x26AF4"/>
<Animation Name="object_ganon2_Anim_027824" Offset="0x27824"/>
<Animation Name="object_ganon2_Anim_02A848" Offset="0x2A848"/>
<Animation Name="object_ganon2_Anim_02B528" Offset="0x2B528"/>
<Animation Name="object_ganon2_Anim_02C0D0" Offset="0x2C0D0"/>
<Animation Name="object_ganon2_Anim_02C6B4" Offset="0x2C6B4"/>
<Animation Name="object_ganon2_Anim_0334F8" Offset="0x334F8"/>
<Animation Name="object_ganon2_Anim_034278" Offset="0x34278"/>
<Animation Name="object_ganon2_Anim_0353C0" Offset="0x353C0"/>
<Animation Name="object_ganon2_Anim_035BDC" Offset="0x35BDC"/>
<!-- Ganon Animations -->
<Animation Name="gGanonFinalBlowAnim" Offset="0x3B1C"/> <!-- Original name is "Last_hit_motion1" -->
<Animation Name="gGanonDeadStartAnim" Offset="0x7288"/> <!-- Original name is "Last_hit_motion2" -->
<Animation Name="gGanonDeadLoopAnim" Offset="0x8EB8"/> <!-- Original name is "Last_mogaki" ("writhing") -->
<Animation Name="gGanonGuardToWalk" Offset="0x9654"/> <!-- Unused. Original name is "gn2_K_to_walk" -->
<Animation Name="gGanonLeftSwordSwingAnim" Offset="0xADD0"/> <!-- Original name is "gn2_Katack01L" -->
<Animation Name="gGanonRightSwordSwingAnim" Offset="0xCAF8"/> <!-- Original name is "gn2_Katack01R" -->
<Animation Name="gGanonDamageAnim" Offset="0xDFF0"/> <!-- Original name is "gn2_Kdamage" -->
<Animation Name="gGanonGuardWalkAnim" Offset="0xE8EC"/> <!-- Original name is "gn2_Kfrontwalk" -->
<Animation Name="gGanonGuardSidestepAnim" Offset="0xF1D0"/> <!-- Unused. Original name is "gn2_Ksidewalk" -->
<Animation Name="gGanonGuardIdleAnim" Offset="0xFFE4"/> <!-- Original name is "gn2_Kwait" -->
<!-- Ganon Limb DisplayLists -->
<DList Name="gGanonPelvisDL" Offset="0x163F0"/>
<DList Name="gGanonTail1DL" Offset="0x16630"/>
<DList Name="gGanonTail2DL" Offset="0x16740"/>
<DList Name="gGanonTail3DL" Offset="0x168E0"/>
<DList Name="gGanonTail4DL" Offset="0x16AA8"/>
<DList Name="gGanonTail5DL" Offset="0x16BE8"/>
<DList Name="gGanonRightShinDL" Offset="0x16D10"/>
<DList Name="gGanonRightFootDL" Offset="0x16F80"/>
<DList Name="gGanonRightThighDL" Offset="0x17160"/>
<DList Name="gGanonLeftShinDL" Offset="0x17620"/>
<DList Name="gGanonLeftFootDL" Offset="0x17910"/>
<DList Name="gGanonLeftThighDL" Offset="0x17AF0"/>
<DList Name="gGanonNeckDL" Offset="0x17FB0"/>
<DList Name="gGanonHeadDL" Offset="0x180E0"/>
<DList Name="gGanonRightHair3DL" Offset="0x18650"/>
<DList Name="gGanonRightHair2DL" Offset="0x18740"/>
<DList Name="gGanonRightHair1DL" Offset="0x18828"/>
<DList Name="gGanonLeftHair3DL" Offset="0x188D8"/>
<DList Name="gGanonLeftHair2DL" Offset="0x189C8"/>
<DList Name="gGanonLeftHair1DL" Offset="0x18AB0"/>
<DList Name="gGanonJawDL" Offset="0x18B60"/>
<DList Name="gGanonMouthDL" Offset="0x18EA0"/>
<DList Name="gGanonSnoutDL" Offset="0x19210"/>
<DList Name="gGanonMiddleHair3DL" Offset="0x19330"/>
<DList Name="gGanonMiddleHair2DL" Offset="0x19420"/>
<DList Name="gGanonMiddleHair1DL" Offset="0x19510"/>
<DList Name="gGanonTorsoDL" Offset="0x195C0"/>
<DList Name="gGanonRightShoulderDL" Offset="0x19A40"/>
<DList Name="gGanonRightForearmDL" Offset="0x19C68"/>
<DList Name="gGanonRightWristDL" Offset="0x19F48"/>
<DList Name="gGanonRightUpperArmDL" Offset="0x1A050"/>
<DList Name="gGanonLeftShoulderDL" Offset="0x1A4E0"/>
<DList Name="gGanonLeftForearmDL" Offset="0x1A708"/>
<DList Name="gGanonLeftWristDL" Offset="0x1A9E8"/>
<DList Name="gGanonLeftUpperArmDL" Offset="0x1AAF0"/>
<!-- Ganon Textures -->
<Texture Name="gGanonBodyTLUT" OutName="ganon_body_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1AF80"/>
<Texture Name="gGanonHairFringeTLUT" OutName="ganon_hair_fringe_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1B180"/>
<Texture Name="gGanonUnusedTLUT" OutName="ganon_unused_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1B380"/>
<Texture Name="gGanonGerudoFabricTLUT" OutName="ganon_gerudo_fabric_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1B580"/>
<Texture Name="gGanonRedFabricTLUT" OutName="ganon_red_fabric_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1B780"/>
<Texture Name="gGanonBlackLeatherAndPauldronTLUT" OutName="ganon_black_metal_and_pauldron_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1B980"/>
<Texture Name="gGanonLeatherTLUT" OutName="ganon_leather_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1BB80"/>
<Texture Name="gGanonHoofTLUT" OutName="ganon_hoof_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1BD80"/>
<Texture Name="gGanonTailTLUT" OutName="ganon_tail_tlut" Format="rgba16" Width="16" Height="16" Offset="0x1BF80"/>
<Texture Name="gGanonHairTex" OutName="ganon_hair" Format="rgba16" Width="8" Height="16" Offset="0x1C180"/>
<Texture Name="gGanonMouthTex" OutName="ganon_mouth" Format="rgba16" Width="8" Height="16" Offset="0x1C280"/>
<Texture Name="gGanonFacialHairTex" OutName="ganon_facial_hair" Format="rgba16" Width="8" Height="8" Offset="0x1C380"/>
<Texture Name="gGanonBodyTex" OutName="ganon_body" Format="ci8" Width="32" Height="32" Offset="0x1C400" TlutOffset="0x1AF80"/>
<Texture Name="gGanonSnoutFrontTex" OutName="ganon_snout_front" Format="rgba16" Width="8" Height="16" Offset="0x1C800"/>
<Texture Name="gGanonSnoutSideTex" OutName="ganon_snout_side" Format="rgba16" Width="8" Height="16" Offset="0x1C900"/>
<Texture Name="gGanonHairFringeTex" OutName="ganon_hair_fringe" Format="ci8" Width="32" Height="16" Offset="0x1CA00" TlutOffset="0x1B180"/>
<Texture Name="gGanonGerudoFabricTex" OutName="ganon_gerudo_fabric" Format="ci8" Width="16" Height="16" Offset="0x1CC00" TlutOffset="0x1B580"/>
<Texture Name="gGanonFurTuftTex" OutName="ganon_fur_tuft" Format="rgba16" Width="16" Height="16" Offset="0x1CD00"/>
<Texture Name="gGanonRedFabricTex" OutName="ganon_red_fabric" Format="ci8" Width="16" Height="16" Offset="0x1CF00" TlutOffset="0x1B780"/>
<Texture Name="gGanonPauldronTex" OutName="ganon_pauldron" Format="ci8" Width="16" Height="16" Offset="0x1D000" TlutOffset="0x1B980"/>
<Texture Name="gGanonCapeFasteningTex" OutName="ganon_cape_fastening" Format="ci8" Width="16" Height="16" Offset="0x1D100" TlutOffset="0x1B780"/>
<Texture Name="gGanonBlackLeatherTex" OutName="ganon_black_leather" Format="ci8" Width="16" Height="16" Offset="0x1D200" TlutOffset="0x1B980"/>
<Texture Name="gGanonLeatherTex" OutName="ganon_leather" Format="ci8" Width="16" Height="16" Offset="0x1D300" TlutOffset="0x1BB80"/>
<Texture Name="gGanonHoofTex" OutName="ganon_hoof" Format="ci8" Width="16" Height="16" Offset="0x1D400" TlutOffset="0x1BD80"/>
<Texture Name="gGanonUnderSkirtTex" OutName="ganon_under_skirt" Format="rgba16" Width="4" Height="16" Offset="0x1D500"/>
<Texture Name="gGanonTailTex" OutName="ganon_tail" Format="ci8" Width="16" Height="32" Offset="0x1D580" TlutOffset="0x1BF80"/>
<Texture Name="gGanonEyesTLUT" OutName="ganon_eyes_tlut" Format="rgba16" Width="4" Height="4" Offset="0x1D780"/>
<Texture Name="gGanonHandTLUT" OutName="ganon_hand_tlut" Format="rgba16" Width="16" Height="11" Offset="0x1D7A8"/>
<Texture Name="gGanonHandTex" OutName="ganon_hand" Format="ci8" Width="32" Height="32" Offset="0x1D908" TlutOffset="0x1D7A8"/>
<Texture Name="gGanonJewelTex" OutName="ganon_jewel" Format="rgba16" Width="16" Height="32" Offset="0x1DD08"/>
<Texture Name="gGanonClawAndTeethTex" OutName="ganon_claw_and_teeth" Format="rgba16" Width="8" Height="8" Offset="0x1E108"/>
<Texture Name="gGanonEyeOpenTex" OutName="ganon_eye_open" Format="ci4" Width="16" Height="16" Offset="0x1E188" TlutOffset="0x1D780"/>
<Texture Name="gGanonLipsTex" OutName="ganon_lips" Format="rgba16" Width="8" Height="8" Offset="0x1E208"/>
<Texture Name="gGanonHornBaseTex" OutName="ganon_horn_base" Format="rgba16" Width="16" Height="16" Offset="0x1E288"/>
<Texture Name="gGanonHornTex" OutName="ganon_horn" Format="rgba16" Width="16" Height="8" Offset="0x1E488"/>
<Texture Name="gGanonSwordBladeTex" OutName="ganon_sword_blade" Format="i4" Width="32" Height="32" Offset="0x1E588"/>
<Texture Name="gGanonSwordGuardTex" OutName="ganon_sword_guard" Format="rgba16" Width="8" Height="16" Offset="0x1E788"/>
<Texture Name="gGanonSwordGripTex" OutName="ganon_sword_grip" Format="rgba16" Width="8" Height="16" Offset="0x1E888"/>
<Texture Name="gGanonEyeHalfTex" OutName="ganon_eye_half" Format="ci4" Width="16" Height="16" Offset="0x1E988" TlutOffset="0x1D780"/>
<Texture Name="gGanonEyeClosedTex" OutName="ganon_eye_closed" Format="ci4" Width="16" Height="16" Offset="0x1EA08" TlutOffset="0x1D780"/>
<!-- Ganon Limb DisplayLists -->
<DList Name="gGanonEyesDL" Offset="0x20B18"/>
<DList Name="gGanonJewelDL" Offset="0x20BE0"/>
<DList Name="gGanonRightHornDL" Offset="0x20C80"/>
<DList Name="gGanonLeftHornDL" Offset="0x20DE8"/>
<DList Name="gGanonRightHandDL" Offset="0x20F50"/>
<DList Name="gGanonLeftHandDL" Offset="0x21120"/>
<DList Name="gGanonRightSwordDL" Offset="0x212F0"/>
<DList Name="gGanonLeftSwordDL" Offset="0x215D0"/>
<DList Name="gGanonOuterTeethDL" Offset="0x218B8"/>
<DList Name="gGanonInnerTeethDL" Offset="0x219D8"/>
<!-- Ganon Title Card Texture -->
<Texture Name="gGanonTitleCardTex" OutName="ganon_title_card" Format="ia8" Width="128" Height="120" Offset="0x21A90"/>
<!-- Ganon Limbs -->
<Limb Name="gGanonRootLimb" LimbType="Standard" Offset="0x25690"/>
<Limb Name="gGanonTorsoLimb" LimbType="Standard" Offset="0x2569C"/>
<Limb Name="gGanonLeftShoulderLimb" LimbType="Standard" Offset="0x256A8"/>
<Limb Name="gGanonLeftUpperArmLimb" LimbType="Standard" Offset="0x256B4"/>
<Limb Name="gGanonLeftForearmLimb" LimbType="Standard" Offset="0x256C0"/>
<Limb Name="gGanonLeftWristLimb" LimbType="Standard" Offset="0x256CC"/>
<Limb Name="gGanonLeftSwordLimb" LimbType="Standard" Offset="0x256D8"/>
<Limb Name="gGanonLeftHandLimb" LimbType="Standard" Offset="0x256E4"/>
<Limb Name="gGanonRightShoulderLimb" LimbType="Standard" Offset="0x256F0"/>
<Limb Name="gGanonRightUpperArmLimb" LimbType="Standard" Offset="0x256FC"/>
<Limb Name="gGanonRightForearmLimb" LimbType="Standard" Offset="0x25708"/>
<Limb Name="gGanonRightWristLimb" LimbType="Standard" Offset="0x25714"/>
<Limb Name="gGanonRightSwordLimb" LimbType="Standard" Offset="0x25720"/>
<Limb Name="gGanonRightHandLimb" LimbType="Standard" Offset="0x2572C"/>
<Limb Name="gGanonNeckLimb" LimbType="Standard" Offset="0x25738"/>
<Limb Name="gGanonJewelLimb" LimbType="Standard" Offset="0x25744"/>
<Limb Name="gGanonSnoutLimb" LimbType="Standard" Offset="0x25750"/>
<Limb Name="gGanonOuterTeethLimb" LimbType="Standard" Offset="0x2575C"/>
<Limb Name="gGanonMouthLimb" LimbType="Standard" Offset="0x25768"/>
<Limb Name="gGanonInnerTeethLimb" LimbType="Standard" Offset="0x25774"/>
<Limb Name="gGanonJawLimb" LimbType="Standard" Offset="0x25780"/>
<Limb Name="gGanonMiddleHair1Limb" LimbType="Standard" Offset="0x2578C"/>
<Limb Name="gGanonMiddleHair2Limb" LimbType="Standard" Offset="0x25798"/>
<Limb Name="gGanonMiddleHair3Limb" LimbType="Standard" Offset="0x257A4"/>
<Limb Name="gGanonLeftHair1Limb" LimbType="Standard" Offset="0x257B0"/>
<Limb Name="gGanonLeftHair2Limb" LimbType="Standard" Offset="0x257BC"/>
<Limb Name="gGanonLeftHair3Limb" LimbType="Standard" Offset="0x257C8"/>
<Limb Name="gGanonRightHair1Limb" LimbType="Standard" Offset="0x257D4"/>
<Limb Name="gGanonRightHair2Limb" LimbType="Standard" Offset="0x257E0"/>
<Limb Name="gGanonRightHair3Limb" LimbType="Standard" Offset="0x257EC"/>
<Limb Name="gGanonEyesLimb" LimbType="Standard" Offset="0x257F8"/>
<Limb Name="gGanonHeadLimb" LimbType="Standard" Offset="0x25804"/>
<Limb Name="gGanonLeftHornLimb" LimbType="Standard" Offset="0x25810"/>
<Limb Name="gGanonRightHornLimb" LimbType="Standard" Offset="0x2581C"/>
<Limb Name="gGanonPelvisLimb" LimbType="Standard" Offset="0x25828"/>
<Limb Name="gGanonLeftThighLimb" LimbType="Standard" Offset="0x25834"/>
<Limb Name="gGanonLeftShinLimb" LimbType="Standard" Offset="0x25840"/>
<Limb Name="gGanonLeftFootLimb" LimbType="Standard" Offset="0x2584C"/>
<Limb Name="gGanonRightThighLimb" LimbType="Standard" Offset="0x25858"/>
<Limb Name="gGanonRightShinLimb" LimbType="Standard" Offset="0x25864"/>
<Limb Name="gGanonRightFootLimb" LimbType="Standard" Offset="0x25870"/>
<Limb Name="gGanonTail1Limb" LimbType="Standard" Offset="0x2587C"/>
<Limb Name="gGanonTail2Limb" LimbType="Standard" Offset="0x25888"/>
<Limb Name="gGanonTail3Limb" LimbType="Standard" Offset="0x25894"/>
<Limb Name="gGanonTail4Limb" LimbType="Standard" Offset="0x258A0"/>
<Limb Name="gGanonTail5Limb" LimbType="Standard" Offset="0x258AC"/>
<!-- Ganon Skeleton -->
<Skeleton Name="gGanonSkel" Type="Flex" LimbType="Standard" Offset="0x25970"/>
<!-- Ganon Animations -->
<Animation Name="gGanonStunStartAnim" Offset="0x26510"/> <!-- Original name is "gn2_Lhit" -->
<Animation Name="gGanonStunLoopAnim" Offset="0x26AF4"/> <!-- Original name is "gn2_Lmahi" ("paralysis, stupor") -->
<Animation Name="gGanonStunEndAnim" Offset="0x27824"/> <!-- Original name is "gn2_Lmahi_to_K" -->
<Animation Name="gGanonDownedStartAnim" Offset="0x2A848"/> <!-- Original name is "gn2_downDEMO" -->
<Animation Name="gGanonStunEndToWalkAnim" Offset="0x2B528"/> <!-- Unused, similar to gGanonStunEndAnim. Transitions into walk instead of guard. -->
<Animation Name="gGanonDuplicateStunStartAnim" Offset="0x2C0D0"/> <!-- Unused duplicate of gGanonStunStartAnim -->
<Animation Name="gGanonDuplicateStunLoopAnim" Offset="0x2C6B4"/> <!-- Unused duplicate of gGanonStunLoopAnim -->
<Animation Name="gGanonGetUpAnim" Offset="0x334F8"/> <!-- Original name is "gn2_hukkiDEMO" ("return, comeback") -->
<Animation Name="gGanonDownedLoopAnim" Offset="0x34278"/> <!-- Original name is "gn2_mahiDEMO" -->
<Animation Name="gGanonWalkAnim" Offset="0x353C0"/> <!-- Original name is "gn2_walk" -->
<Animation Name="gGanonWalkToGuardAnim" Offset="0x35BDC"/> <!-- Unused. Original name is "gn2_walk_to_K" -->
</File>
</Root>

View file

@ -1,29 +1,30 @@
<Root>
<!-- Animations used during the Ganondorf fight. -->
<File Name="object_ganon_anime1" Segment="6">
<Animation Name="gDorfBigMagicWindupAnim" Offset="0x0540"/>
<Animation Name="gDorfBigMagicThrowAnim" Offset="0x0FE8"/>
<Animation Name="gDorfBigMagicThrowEndAnim" Offset="0x1440"/>
<Animation Name="gDorfBigMagicChargeStartAnim" Offset="0x1B0C"/>
<Animation Name="gDorfBigMagicChargeHoldAnim" Offset="0x1FF8"/>
<Animation Name="gDorfPoundAnim" Offset="0x2D2C"/>
<Animation Name="gDorfPoundEndAnim" Offset="0x343C"/>
<Animation Name="gDorfKneelVulnerableAnim" Offset="0x3D40"/>
<Animation Name="gDorfLightArrowHitAnim" Offset="0x4884"/>
<Animation Name="gDorfLightEnergyHitAnim" Offset="0x4DA8"/>
<Animation Name="gDorfGetUp1Anim" Offset="0x58C4"/>
<Animation Name="gDorfGetUp2Anim" Offset="0x6028"/>
<Animation Name="gDorfLandAnim" Offset="0x63CC"/>
<Animation Name="gDorfVulnerableAnim" Offset="0x69A0"/>
<Animation Name="gDorfThrowAnim" Offset="0x738C"/>
<Animation Name="gDorfBigMagicHitAnim" Offset="0x8128"/>
<Animation Name="gDorfGetUp3Anim" Offset="0x8A88"/>
<Animation Name="gDorfLightArrowWaitAnim" Offset="0x8F44"/>
<Animation Name="gDorfDamageAnim" Offset="0x96B0"/>
<Animation Name="gDorfFloatAnim" Offset="0x9A14"/>
<Animation Name="gDorfBlockAnim" Offset="0x9D5C"/>
<Animation Name="gDorfBlockReleaseAnim" Offset="0xA598"/>
<Animation Name="gDorfChargeLightBallAnim" Offset="0xAA24"/>
<Animation Name="gDorfVolleyLeftAnim" Offset="0xB4AC"/>
<Animation Name="gDorfVolleyRightAnim" Offset="0xBC28"/>
<Animation Name="gGanondorfBigMagicWindupAnim" Offset="0x0540"/> <!-- Original name is "gn1_BAatack01" -->
<Animation Name="gGanondorfBigMagicThrowAnim" Offset="0x0FE8"/> <!-- Original name is "gn1_BAatack02" -->
<Animation Name="gGanondorfBigMagicThrowEndAnim" Offset="0x1440"/> <!-- Original name is "gn1_BAhukki" ("return, comeback") -->
<Animation Name="gGanondorfBigMagicChargeStartAnim" Offset="0x1B0C"/> <!-- Original name is "gn1_BAjunbi" ("preparation") -->
<Animation Name="gGanondorfBigMagicChargeHoldAnim" Offset="0x1FF8"/> <!-- Original name is "gn1_BAtame" ("to amass, to accumulate") -->
<Animation Name="gGanondorfPoundAnim" Offset="0x2D2C"/> <!-- Original name is "gn1_Patack" -->
<Animation Name="gGanondorfPoundEndAnim" Offset="0x343C"/> <!-- Original name is "gn1_Phukki" -->
<Animation Name="gGanondorfDownedAnim" Offset="0x3D40"/> <!-- Original name is "gn1_YAdown" -->
<Animation Name="gGanondorfLightArrowHitAnim" Offset="0x4884"/> <!-- Original name is "gn1_YAhit01" -->
<Animation Name="gGanondorfLightEnergyHitAnim" Offset="0x4DA8"/> <!-- Original name is "gn1_YAhit02" -->
<Animation Name="gGanondorfGetUp1Anim" Offset="0x58C4"/> <!-- Original name is "gn1_YAhukki01" -->
<Animation Name="gGanondorfGetUp2Anim" Offset="0x6028"/> <!-- Original name is "gn1_YAhukki02" -->
<Animation Name="gGanondorfLandAnim" Offset="0x63CC"/> <!-- Original name is "gn1_YAlanding" -->
<Animation Name="gGanondorfVulnerableAnim" Offset="0x69A0"/> <!-- Original name is "gn1_YAmahi" ("paralysis, stupor") -->
<Animation Name="gGanondorfThrowAnim" Offset="0x738C"/> <!-- Original name is "gn1_atack" -->
<Animation Name="gGanondorfBigMagicHitAnim" Offset="0x8128"/> <!-- Original name is "gn1_ballhit" -->
<Animation Name="gGanondorfGetUp3Anim" Offset="0x8A88"/> <!-- Original name is "gn1_ballhukki" -->
<Animation Name="gGanondorfLightArrowWaitAnim" Offset="0x8F44"/> <!-- Original name is "gn1_ballmahi" -->
<Animation Name="gGanondorfDamageAnim" Offset="0x96B0"/> <!-- Original name is "gn1_damage" -->
<Animation Name="gGanondorfFloatAnim" Offset="0x9A14"/> <!-- Original name is "gn1_fly" -->
<Animation Name="gGanondorfBlockAnim" Offset="0x9D5C"/> <!-- Original name is "gn1_guard01" -->
<Animation Name="gGanondorfBlockReleaseAnim" Offset="0xA598"/> <!-- Original name is "gn1_guard02" -->
<Animation Name="gGanondorfChargeLightBallAnim" Offset="0xAA24"/> <!-- Original name is "gn1_preatack" -->
<Animation Name="gGanondorfVolleyLeftAnim" Offset="0xB4AC"/> <!-- Original name is "gn1_resieve01" -->
<Animation Name="gGanondorfVolleyRightAnim" Offset="0xBC28"/> <!-- Original name is "gn1_resieve02" -->
</File>
</Root>

View file

@ -1,21 +1,22 @@
<Root>
<!-- Animations used during the intro and ending cutscenes for the Ganondorf fight. -->
<File Name="object_ganon_anime2" Segment="6">
<Animation Name="object_ganon_anime2_Anim_001F58" Offset="0x1F58"/>
<Animation Name="object_ganon_anime2_Anim_003018" Offset="0x3018"/>
<Animation Name="object_ganon_anime2_Anim_004304" Offset="0x4304"/>
<Animation Name="object_ganon_anime2_Anim_004F64" Offset="0x4F64"/>
<Animation Name="object_ganon_anime2_Anim_005FFC" Offset="0x5FFC"/>
<Animation Name="object_ganon_anime2_Anim_006AF4" Offset="0x6AF4"/>
<Animation Name="object_ganon_anime2_Anim_007268" Offset="0x7268"/>
<Animation Name="object_ganon_anime2_Anim_007A64" Offset="0x7A64"/>
<Animation Name="object_ganon_anime2_Anim_0089F8" Offset="0x89F8"/>
<Animation Name="object_ganon_anime2_Anim_009AE0" Offset="0x9AE0"/>
<Animation Name="object_ganon_anime2_Anim_00ADDC" Offset="0xADDC"/>
<Animation Name="object_ganon_anime2_Anim_00B668" Offset="0xB668"/>
<Animation Name="object_ganon_anime2_Anim_00BE38" Offset="0xBE38"/>
<Animation Name="object_ganon_anime2_Anim_00EA00" Offset="0xEA00"/>
<Animation Name="object_ganon_anime2_Anim_00F19C" Offset="0xF19C"/>
<Animation Name="object_ganon_anime2_Anim_010298" Offset="0x10298"/>
<Animation Name="object_ganon_anime2_Anim_010514" Offset="0x10514"/>
<Animation Name="gGanondorfTurnAroundAnim" Offset="0x1F58"/> <!-- Original name is "G_furimuku" ("to turn around") -->
<Animation Name="gGanondorfStandIdleAnim" Offset="0x3018"/> <!-- Original name is "G_n_wait" -->
<Animation Name="gGanondorfStandUpFromOrganAnim" Offset="0x4304"/> <!-- Original name is "G_okosu" ("to stand up") -->
<Animation Name="gGanondorfStopPlayingOrganAnim" Offset="0x4F64"/> <!-- Original name is "G_or_end" -->
<Animation Name="gGanondorfPlayOrganAnim" Offset="0x5FFC"/> <!-- Original name is "G_or_hikuL" ("to play (a keyboard instrument)") -->
<Animation Name="gGanondorfLeanOnOrganAnim" Offset="0x6AF4"/> <!-- Original name is "G_tame" ("to hesitate") -->
<Animation Name="gGanondorfRaiseHandStartAnim" Offset="0x7268"/> <!-- Original name is "G_te_ageru" ("to raise") -->
<Animation Name="gGanondorfRaiseHandLoopAnim" Offset="0x7A64"/> <!-- Original name is "G_te_hikaru" ("to shine") -->
<Animation Name="gGanondorfStandBackwardsAnim" Offset="0x89F8"/> <!-- Original name is "G_usiro_wait" ("back-facing") -->
<Animation Name="gGanondorfLaughWhileLeaningAnim" Offset="0x9AE0"/> <!-- Unused. Original name is "G_warau" ("to laugh") -->
<Animation Name="gGanondorfCollapseAnim" Offset="0xADDC"/> <!-- Original name is "g_demo_down" -->
<Animation Name="gGanondorfVomitStartAnim" Offset="0xB668"/> <!-- Original name is "g_demo_hedohaki" ("to vomit") -->
<Animation Name="gGanondorfVomitLoopAnim" Offset="0xBE38"/> <!-- Original name is "g_demo_hedohaki_wait" -->
<Animation Name="gGanondorfDefeatedStartAnim" Offset="0xEA00"/> <!-- Original name is "g_demo_hizaoti" ("fall on your knees") -->
<Animation Name="gGanondorfDefeatedLoopAnim" Offset="0xF19C"/> <!-- Original name is "g_demo_hizaoti_wait" -->
<Animation Name="gGanondorfYellStartAnim" Offset="0x10298"/> <!-- Original name is "g_demo_sakebi" ("shout, yell") -->
<Animation Name="gGanondorfYellLoopAnim" Offset="0x10514"/> <!-- Original name is "g_demo_sakebi_wait" -->
</File>
</Root>

View file

@ -1,13 +1,17 @@
<Root>
<!-- Animations used in the intro to the Ganon fight. -->
<File Name="object_ganon_anime3" Segment="6">
<Animation Name="object_ganon_anime3_Anim_000BFC" Offset="0xBFC"/>
<Animation Name="object_ganon_anime3_Anim_002168" Offset="0x2168"/>
<Animation Name="object_ganon_anime3_Anim_0028A8" Offset="0x28A8"/>
<Animation Name="object_ganon_anime3_Anim_002E6C" Offset="0x2E6C"/>
<Animation Name="object_ganon_anime3_Anim_003754" Offset="0x3754"/>
<Animation Name="object_ganon_anime3_Anim_003884" Offset="0x3884"/>
<Animation Name="object_ganon_anime3_Anim_003F38" Offset="0x3F38"/>
<Animation Name="object_ganon_anime3_Anim_010380" Offset="0x10380"/>
<Animation Name="object_ganon_anime3_Anim_0147E0" Offset="0x147E0"/>
<!-- Ganondorf Animations -->
<Animation Name="gGanondorfShowTriforceStartAnim" Offset="0xBFC"/> <!-- Original name is "GF_aw" -->
<Animation Name="gGanondorfBurstOutAnim" Offset="0x2168"/> <!-- Original name is "GF_f" -->
<Animation Name="gGanondorfTransformEndAnim" Offset="0x28A8"/> <!-- Original name is "GF_hen_shin" ("transformation") -->
<Animation Name="gGanondorfFloatingHeavyBreathingAnim" Offset="0x2E6C"/> <!-- Original name is "GF_sw" -->
<Animation Name="gGanondorfTransformStartAnim" Offset="0x3754"/> <!-- Original name is "GF_tijimu" ("to shrink, to contract") -->
<Animation Name="gGanondorfTransformLoopAnim" Offset="0x3884"/> <!-- Original name is "GF_tijimu_wait" -->
<Animation Name="gGanondorfShowTriforceLoopAnim" Offset="0x3F38"/> <!-- Original name is "GF_tw" -->
<!-- Ganon Animations -->
<Animation Name="gGanonUncurlAndFlailAnim" Offset="0x10380"/> <!-- Original name is "LG_DANGO" ("ball-shaped") -->
<Animation Name="gGanonRoarAnim" Offset="0x147E0"/> <!-- Original name is "LG_Hoeru" ("howl") -->
</File>
</Root>

View file

@ -1,53 +1,53 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="assets/objects/gameplay_keep/"/>
<File Name="ovl_Boss_Ganon" BaseAddress="0x808D6870" RangeStart="0xE6B8" RangeEnd="0x211D8">
<Texture Name="gDorfLightning1Tex" OutName="lightning_1" Format="i8" Width="32" Height="96" Offset="0x11600" Static="Off"/>
<Texture Name="gDorfLightning2Tex" OutName="lightning_2" Format="i8" Width="32" Height="96" Offset="0x12200" Static="Off"/>
<Texture Name="gDorfLightning3Tex" OutName="lightning_3" Format="i8" Width="32" Height="96" Offset="0x12E00" Static="Off"/>
<Texture Name="gDorfLightning4Tex" OutName="lightning_4" Format="i8" Width="32" Height="96" Offset="0x13A00" Static="Off"/>
<Texture Name="gDorfLightning5Tex" OutName="lightning_5" Format="i8" Width="32" Height="96" Offset="0x14600" Static="Off"/>
<Texture Name="gDorfLightning6Tex" OutName="lightning_6" Format="i8" Width="32" Height="96" Offset="0x15200" Static="Off"/>
<Texture Name="gDorfLightning7Tex" OutName="lightning_7" Format="i8" Width="32" Height="96" Offset="0x15E00" Static="Off"/>
<Texture Name="gDorfLightning8Tex" OutName="lightning_8" Format="i8" Width="32" Height="96" Offset="0x16A00" Static="Off"/>
<Texture Name="gDorfLightning9Tex" OutName="lightning_9" Format="i8" Width="32" Height="96" Offset="0x17600" Static="Off"/>
<Texture Name="gDorfLightning10Tex" OutName="lightning_10" Format="i8" Width="32" Height="96" Offset="0x18200" Static="Off"/>
<Texture Name="gDorfLightning11Tex" OutName="lightning_11" Format="i8" Width="32" Height="96" Offset="0x18E00" Static="Off"/>
<Texture Name="gDorfLightning12Tex" OutName="lightning_12" Format="i8" Width="32" Height="96" Offset="0x19A00" Static="Off"/>
<Texture Name="gGanondorfLightning1Tex" OutName="lightning_1" Format="i8" Width="32" Height="96" Offset="0x11600" Static="Off"/>
<Texture Name="gGanondorfLightning2Tex" OutName="lightning_2" Format="i8" Width="32" Height="96" Offset="0x12200" Static="Off"/>
<Texture Name="gGanondorfLightning3Tex" OutName="lightning_3" Format="i8" Width="32" Height="96" Offset="0x12E00" Static="Off"/>
<Texture Name="gGanondorfLightning4Tex" OutName="lightning_4" Format="i8" Width="32" Height="96" Offset="0x13A00" Static="Off"/>
<Texture Name="gGanondorfLightning5Tex" OutName="lightning_5" Format="i8" Width="32" Height="96" Offset="0x14600" Static="Off"/>
<Texture Name="gGanondorfLightning6Tex" OutName="lightning_6" Format="i8" Width="32" Height="96" Offset="0x15200" Static="Off"/>
<Texture Name="gGanondorfLightning7Tex" OutName="lightning_7" Format="i8" Width="32" Height="96" Offset="0x15E00" Static="Off"/>
<Texture Name="gGanondorfLightning8Tex" OutName="lightning_8" Format="i8" Width="32" Height="96" Offset="0x16A00" Static="Off"/>
<Texture Name="gGanondorfLightning9Tex" OutName="lightning_9" Format="i8" Width="32" Height="96" Offset="0x17600" Static="Off"/>
<Texture Name="gGanondorfLightning10Tex" OutName="lightning_10" Format="i8" Width="32" Height="96" Offset="0x18200" Static="Off"/>
<Texture Name="gGanondorfLightning11Tex" OutName="lightning_11" Format="i8" Width="32" Height="96" Offset="0x18E00" Static="Off"/>
<Texture Name="gGanondorfLightning12Tex" OutName="lightning_12" Format="i8" Width="32" Height="96" Offset="0x19A00" Static="Off"/>
<Texture Name="gDorfWindowShatterTemplateTex" OutName="window_shatter_template" Format="i8" Width="32" Height="64" Offset="0xFD38" Static="Off"/>
<Texture Name="gGanondorfWindowShatterTemplateTex" OutName="window_shatter_template" Format="i8" Width="32" Height="64" Offset="0xFD38" Static="Off"/>
<DList Name="gDorfLightStreak1DL" Offset="0x1FCF0" Static="Off"/>
<DList Name="gDorfLightStreak2DL" Offset="0x1FD28" Static="Off"/>
<DList Name="gDorfLightStreak3DL" Offset="0x1FD60" Static="Off"/>
<DList Name="gDorfLightStreak4DL" Offset="0x1FD98" Static="Off"/>
<DList Name="gDorfLightStreak5DL" Offset="0x1FDD0" Static="Off"/>
<DList Name="gDorfLightStreak6DL" Offset="0x1FE08" Static="Off"/>
<DList Name="gDorfLightStreak7DL" Offset="0x1FE40" Static="Off"/>
<DList Name="gDorfLightStreak8DL" Offset="0x1FE78" Static="Off"/>
<DList Name="gDorfLightStreak9DL" Offset="0x1FEB0" Static="Off"/>
<DList Name="gDorfLightStreak10DL" Offset="0x1FEE8" Static="Off"/>
<DList Name="gDorfLightStreak11DL" Offset="0x1FF20" Static="Off"/>
<DList Name="gDorfLightStreak12DL" Offset="0x1FF58" Static="Off"/>
<DList Name="gGanondorfLightStreak1DL" Offset="0x1FCF0" Static="Off"/>
<DList Name="gGanondorfLightStreak2DL" Offset="0x1FD28" Static="Off"/>
<DList Name="gGanondorfLightStreak3DL" Offset="0x1FD60" Static="Off"/>
<DList Name="gGanondorfLightStreak4DL" Offset="0x1FD98" Static="Off"/>
<DList Name="gGanondorfLightStreak5DL" Offset="0x1FDD0" Static="Off"/>
<DList Name="gGanondorfLightStreak6DL" Offset="0x1FE08" Static="Off"/>
<DList Name="gGanondorfLightStreak7DL" Offset="0x1FE40" Static="Off"/>
<DList Name="gGanondorfLightStreak8DL" Offset="0x1FE78" Static="Off"/>
<DList Name="gGanondorfLightStreak9DL" Offset="0x1FEB0" Static="Off"/>
<DList Name="gGanondorfLightStreak10DL" Offset="0x1FEE8" Static="Off"/>
<DList Name="gGanondorfLightStreak11DL" Offset="0x1FF20" Static="Off"/>
<DList Name="gGanondorfLightStreak12DL" Offset="0x1FF58" Static="Off"/>
<DList Name="gDorfShadowSetupDL" Offset="0xE6F8" Static="Off"/>
<DList Name="gDorfShadowModelDL" Offset="0xE718" Static="Off"/>
<DList Name="gDorfTriforceDL" Offset="0xF788" Static="Off"/>
<DList Name="gDorfWindowShardMaterialDL" Offset="0xFC78" Static="Off"/>
<DList Name="gDorfWindowShardModelDL" Offset="0xFD20" Static="Off"/>
<DList Name="gDorfLightBallMaterialDL" Offset="0x11578" Static="Off"/>
<DList Name="gDorfSquareDL" Offset="0x115E8" Static="Off"/>
<DList Name="gDorfLightningDL" Offset="0x1A640" Static="Off"/>
<DList Name="gDorfUnusedDL" Offset="0x1A6F0" Static="Off"/>
<DList Name="gDorfLightRayTriDL" Offset="0x1A768" Static="Off"/>
<DList Name="gDorfLightFlecksDL" Offset="0x1C1C0" Static="Off"/>
<DList Name="gDorfBigMagicBGCircleDL" Offset="0x1C2B0" Static="Off"/>
<DList Name="gDorfDotDL" Offset="0x1C358" Static="Off"/>
<DList Name="gDorfShockwaveDL" Offset="0x1CDC0" Static="Off"/>
<DList Name="gDorfImpactDarkDL" Offset="0x1DC58" Static="Off"/>
<DList Name="gDorfImpactLightDL" Offset="0x1DD70" Static="Off"/>
<DList Name="gDorfShockGlowDL" Offset="0x1EEC8" Static="Off"/>
<DList Name="gDorfLightCoreDL" Offset="0x20228" Static="Off"/>
<DList Name="gDorfShockDL" Offset="0x202F0" Static="Off"/>
<DList Name="gDorfVortexDL" Offset="0x210D0" Static="Off"/>
<DList Name="gGanondorfShadowSetupDL" Offset="0xE6F8" Static="Off"/>
<DList Name="gGanondorfShadowModelDL" Offset="0xE718" Static="Off"/>
<DList Name="gGanondorfTriforceDL" Offset="0xF788" Static="Off"/>
<DList Name="gGanondorfWindowShardMaterialDL" Offset="0xFC78" Static="Off"/>
<DList Name="gGanondorfWindowShardModelDL" Offset="0xFD20" Static="Off"/>
<DList Name="gGanondorfLightBallMaterialDL" Offset="0x11578" Static="Off"/>
<DList Name="gGanondorfSquareDL" Offset="0x115E8" Static="Off"/>
<DList Name="gGanondorfLightningDL" Offset="0x1A640" Static="Off"/>
<DList Name="gGanondorfUnusedDL" Offset="0x1A6F0" Static="Off"/>
<DList Name="gGanondorfLightRayTriDL" Offset="0x1A768" Static="Off"/>
<DList Name="gGanondorfLightFlecksDL" Offset="0x1C1C0" Static="Off"/>
<DList Name="gGanondorfBigMagicBGCircleDL" Offset="0x1C2B0" Static="Off"/>
<DList Name="gGanondorfDotDL" Offset="0x1C358" Static="Off"/>
<DList Name="gGanondorfShockwaveDL" Offset="0x1CDC0" Static="Off"/>
<DList Name="gGanondorfImpactDarkDL" Offset="0x1DC58" Static="Off"/>
<DList Name="gGanondorfImpactLightDL" Offset="0x1DD70" Static="Off"/>
<DList Name="gGanondorfShockGlowDL" Offset="0x1EEC8" Static="Off"/>
<DList Name="gGanondorfLightCoreDL" Offset="0x20228" Static="Off"/>
<DList Name="gGanondorfShockDL" Offset="0x202F0" Static="Off"/>
<DList Name="gGanondorfVortexDL" Offset="0x210D0" Static="Off"/>
</File>
</Root>

View file

@ -355,7 +355,7 @@ void BossGanon_Init(Actor* thisx, PlayState* play2) {
Actor_ProcessInitChain(thisx, sInitChain);
ActorShape_Init(&thisx->shape, 0, NULL, 0);
Actor_SetScale(thisx, 0.01f);
SkelAnime_InitFlex(play, &this->skelAnime, &gDorfSkel, NULL, NULL, NULL, 0);
SkelAnime_InitFlex(play, &this->skelAnime, &gGanondorfSkel, NULL, NULL, NULL, 0);
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, thisx, &sDorfCylinderInit);
@ -485,7 +485,7 @@ void BossGanon_SetupIntroCutscene(BossGanon* this, PlayState* play) {
this->unk_198 = 1;
this->animBankIndex = animBankIndex;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[animBankIndex].segment);
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_005FFC, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfPlayOrganAnim, 0.0f);
} else {
this->actionFunc = BossGanon_SetupIntroCutscene;
}
@ -569,7 +569,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
this->csTimer = 0;
player->actor.world.pos.z = 20.0f;
this->useOpenHand = false;
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_0089F8, -5.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfStandBackwardsAnim, -5.0f);
this->fwork[GDF_FWORK_1] = 1000.0f;
BossGanon_SetIntroCsCamera(this, 11);
this->unk_198 = 2;
@ -808,12 +808,12 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
if (this->csTimer == 30) {
Audio_QueueSeqCmd(0x100100FF);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_004F64);
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_004F64, -5.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfStopPlayingOrganAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfStopPlayingOrganAnim, -5.0f);
}
if ((this->csTimer > 30) && Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_006AF4, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfLeanOnOrganAnim, 0.0f);
this->fwork[GDF_FWORK_1] = 1000.0f;
}
@ -853,12 +853,12 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
if (this->csTimer <= 20) {
if (this->csTimer == 20) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_004304, -5.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_004304);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfStandUpFromOrganAnim, -5.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfStandUpFromOrganAnim);
}
} else if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
Message_StartTextbox(play, 0x70CA, NULL);
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_0089F8, -5.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfStandBackwardsAnim, -5.0f);
this->fwork[GDF_FWORK_1] = 1000.0f;
}
@ -872,8 +872,8 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
this->envLightMode = 3;
if (this->csTimer == 20) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_001F58, -5.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_001F58);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfTurnAroundAnim, -5.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfTurnAroundAnim);
}
if (this->csTimer > 10) {
@ -906,7 +906,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
this->csCamEye.z += 6.0f;
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1] - 5.0f)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_003018, -5.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfStandIdleAnim, -5.0f);
this->fwork[GDF_FWORK_1] = 1000.0f;
}
@ -917,7 +917,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
this->csState = 19;
this->csTimer = 0;
Message_StartTextbox(play, 0x70CC, NULL);
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_007268, -5.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfRaiseHandStartAnim, -5.0f);
this->triforceType = GDF_TRIFORCE_DORF;
this->fwork[GDF_TRIFORCE_SCALE] = 10.0f;
this->fwork[GDF_TRIFORCE_PRIM_A] = 0.0f;
@ -953,7 +953,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
}
if (this->csTimer == 17) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_007A64, -5.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfRaiseHandLoopAnim, -5.0f);
}
if ((this->csTimer > 80) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
@ -1068,7 +1068,7 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
if (this->csTimer == 20) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp3Anim, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp3Anim, 0.0f);
SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset = 0.0f;
sCape->attachShouldersTimer = 18.0f;
@ -1082,8 +1082,8 @@ void BossGanon_IntroCutscene(BossGanon* this, PlayState* play) {
play->objectCtx.status[Object_GetIndex(&play->objectCtx, OBJECT_GANON)].segment);
if (!GET_EVENTCHKINF(EVENTCHKINF_78)) {
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gDorfTitleCardTex), 160,
180, 128, 40);
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGanondorfTitleCardTex),
160, 180, 128, 40);
}
SET_EVENTCHKINF(EVENTCHKINF_78);
@ -1170,8 +1170,8 @@ void BossGanon_SetupDeathCutscene(BossGanon* this, PlayState* play) {
this->unk_198 = 1;
this->animBankIndex = animBankIndex;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[animBankIndex].segment);
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_00EA00, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_00EA00);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfDefeatedStartAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfDefeatedStartAnim);
this->unk_508 = 0.0f;
}
}
@ -1183,8 +1183,8 @@ void BossGanon_SetupTowerCutscene(BossGanon* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, animBankIndex)) {
this->animBankIndex = animBankIndex;
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[animBankIndex].segment);
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_00EA00, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_00EA00);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfDefeatedStartAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfDefeatedStartAnim);
this->actionFunc = BossGanon_DeathAndTowerCutscene;
this->csTimer = 0;
this->csState = 100;
@ -1203,7 +1203,8 @@ void BossGanon_ShatterWindows(u8 windowShatterState) {
for (i = 0; i < 2048; i++) {
if ((tex1[i] != 0) && (Rand_ZeroOne() < 0.03f)) {
if ((((u8*)gDorfWindowShatterTemplateTex)[i] == 0) || (windowShatterState == GDF_WINDOW_SHATTER_FULL)) {
if ((((u8*)gGanondorfWindowShatterTemplateTex)[i] == 0) ||
(windowShatterState == GDF_WINDOW_SHATTER_FULL)) {
tex1[i] = tex2[i] = 1;
}
}
@ -1274,7 +1275,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
this->csCamAt.z = this->unk_1FC.z;
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_00F19C, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfDefeatedLoopAnim, 0.0f);
this->csState = 2;
this->csTimer = 0;
}
@ -1320,8 +1321,8 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
if ((this->fwork[GDF_FWORK_1] > 100.0f) && (this->csTimer > 100) &&
(Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_00B668, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_00B668);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfVomitStartAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfVomitStartAnim);
Audio_PlayActorSfx2(&this->actor, NA_SE_EN_GANON_TOKETU);
} else {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1] - 16.0f)) {
@ -1344,7 +1345,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_00BE38, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfVomitLoopAnim, 0.0f);
this->csState = 4;
this->csTimer = 0;
}
@ -1367,8 +1368,8 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
if ((this->csTimer > 70) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
this->csState = 6;
this->csTimer = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_010298, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_010298);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfYellStartAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfYellStartAnim);
this->csCamMovementScale = 0.05f;
this->csCamMaxStepScale = 0.0f;
@ -1399,7 +1400,7 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
Math_ApproachF(&this->csCamMaxStepScale, 0.2f, 1.0f, 0.01f);
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime2_Anim_010514, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfYellLoopAnim, 0.0f);
this->csState = 7;
this->csTimer = 0;
this->unk_2E8 = 0;
@ -1507,8 +1508,8 @@ void BossGanon_DeathAndTowerCutscene(BossGanon* this, PlayState* play) {
this->csCamIndex = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_WAIT);
Play_ChangeCameraStatus(play, this->csCamIndex, CAM_STAT_ACTIVE);
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime2_Anim_00ADDC, 0.0f);
this->fwork[1] = Animation_GetLastFrame(&object_ganon_anime2_Anim_00EA00);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfCollapseAnim, 0.0f);
this->fwork[1] = Animation_GetLastFrame(&gGanondorfDefeatedStartAnim);
this->csState = 101;
this->skelAnime.playSpeed = 0.0f;
sZelda = (EnZl3*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_ZL3, 0.0f, 6000.0f, 0.0f,
@ -1875,8 +1876,8 @@ void BossGanon_PoundFloor(BossGanon* this, PlayState* play) {
Math_ApproachF(&this->actor.velocity.y, 20.0f, 1.0f, 1.0f);
if (this->timers[0] == 14) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfPoundAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfPoundAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfPoundAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfPoundAnim, 0.0f);
this->actor.velocity.y = 0.0f;
}
@ -1918,8 +1919,8 @@ void BossGanon_PoundFloor(BossGanon* this, PlayState* play) {
this->envLightMode = 1;
if (this->timers[0] == 0) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfPoundEndAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfPoundEndAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfPoundEndAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfPoundEndAnim, 0.0f);
this->unk_1C2 = 3;
this->unk_19F = 1;
this->actor.velocity.y = 0.0f;
@ -1931,8 +1932,8 @@ void BossGanon_PoundFloor(BossGanon* this, PlayState* play) {
Math_ApproachF(&this->actor.velocity.y, 20.0f, 1.0f, 1.0f);
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp3Anim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp3Anim, 0.0f);
SkelAnime_Update(&this->skelAnime);
sCape->attachShouldersTimer = 18.0f;
Audio_PlayActorSfx2(&this->actor, NA_SE_EV_GANON_MANTLE);
@ -2001,16 +2002,16 @@ void BossGanon_ChargeBigMagic(BossGanon* this, PlayState* play) {
switch (this->unk_1C2) {
case 0:
if (this->timers[0] == 0) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicChargeStartAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfBigMagicChargeStartAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicChargeStartAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBigMagicChargeStartAnim, 0.0f);
this->unk_1C2 = 1;
}
break;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicChargeHoldAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfBigMagicChargeHoldAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicChargeHoldAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfBigMagicChargeHoldAnim, 0.0f);
this->unk_1C2 = 2;
this->timers[0] = 100;
}
@ -2032,8 +2033,8 @@ void BossGanon_ChargeBigMagic(BossGanon* this, PlayState* play) {
}
if (this->timers[0] == 0) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicWindupAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfBigMagicWindupAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicWindupAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBigMagicWindupAnim, 0.0f);
this->unk_1C2 = 3;
this->timers[0] = 6;
this->timers[1] = 15;
@ -2132,8 +2133,8 @@ void BossGanon_ChargeBigMagic(BossGanon* this, PlayState* play) {
}
if (this->timers[1] == 0) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicThrowAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfBigMagicThrowAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicThrowAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfBigMagicThrowAnim, 0.0f);
this->unk_1C2 = 4;
this->unk_288 = 0.0f;
this->unk_290 = 0.0f;
@ -2161,8 +2162,8 @@ void BossGanon_ChargeBigMagic(BossGanon* this, PlayState* play) {
}
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicThrowEndAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfBigMagicThrowEndAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicThrowEndAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfBigMagicThrowEndAnim, 0.0f);
this->unk_1C2 = 5;
}
break;
@ -2179,7 +2180,7 @@ void BossGanon_ChargeBigMagic(BossGanon* this, PlayState* play) {
void BossGanon_SetupWait(BossGanon* this, PlayState* play) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
Animation_MorphToLoop(&this->skelAnime, &gDorfFloatAnim, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfFloatAnim, -10.0f);
this->actionFunc = BossGanon_Wait;
this->fwork[GDF_FWORK_0] = 0.0f;
this->timers[0] = (s16)Rand_ZeroFloat(64.0f) + 30;
@ -2244,8 +2245,8 @@ void BossGanon_Wait(BossGanon* this, PlayState* play) {
void BossGanon_SetupChargeLightBall(BossGanon* this, PlayState* play) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfChargeLightBallAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfChargeLightBallAnim, -3.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfChargeLightBallAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfChargeLightBallAnim, -3.0f);
this->actionFunc = BossGanon_ChargeLightBall;
this->timers[0] = 25;
}
@ -2291,13 +2292,13 @@ void BossGanon_ChargeLightBall(BossGanon* this, PlayState* play) {
void BossGanon_SetupPlayTennis(BossGanon* this, PlayState* play) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfThrowAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfThrowAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfThrowAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfThrowAnim, 0.0f);
this->actionFunc = BossGanon_PlayTennis;
}
void BossGanon_PlayTennis(BossGanon* this, PlayState* play) {
static AnimationHeader* volleyAnims[] = { &gDorfVolleyLeftAnim, &gDorfVolleyRightAnim };
static AnimationHeader* volleyAnims[] = { &gGanondorfVolleyLeftAnim, &gGanondorfVolleyRightAnim };
static s16 capeRightArmDurations[] = { 26, 20 };
s16 rand;
@ -2310,7 +2311,7 @@ void BossGanon_PlayTennis(BossGanon* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->unk_1C2 = 1;
Animation_MorphToLoop(&this->skelAnime, &gDorfFloatAnim, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfFloatAnim, 0.0f);
}
if (this->skelAnime.curFrame <= 12.0f) {
@ -2359,8 +2360,8 @@ void BossGanon_PlayTennis(BossGanon* this, PlayState* play) {
void BossGanon_SetupBlock(BossGanon* this, PlayState* play) {
if ((this->actionFunc != BossGanon_Block) || (this->unk_1C2 != 0)) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBlockAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfBlockAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBlockAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBlockAnim, 0.0f);
this->actionFunc = BossGanon_Block;
}
@ -2381,8 +2382,8 @@ void BossGanon_Block(BossGanon* this, PlayState* play) {
if (this->unk_1C2 == 0) {
if (this->timers[0] == 0) {
this->unk_1C2 = 1;
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfBlockReleaseAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBlockReleaseAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBlockReleaseAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBlockReleaseAnim);
SkelAnime_Update(&this->skelAnime);
sCape->attachShouldersTimer = 15.0f;
Audio_PlayActorSfx2(&this->actor, NA_SE_EV_GANON_MANTLE);
@ -2408,8 +2409,8 @@ void BossGanon_SetupHitByLightBall(BossGanon* this, PlayState* play) {
s16 i;
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfBigMagicHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfBigMagicHitAnim, 0);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfBigMagicHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBigMagicHitAnim, 0);
this->timers[0] = 70;
sCape->attachRightArmTimer = sCape->attachLeftArmTimer = 0;
@ -2436,16 +2437,16 @@ void BossGanon_HitByLightBall(BossGanon* this, PlayState* play) {
BossGanonEff_SpawnShock(play, 1500.0f, GDF_SHOCK_DORF_YELLOW);
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfLightArrowWaitAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfLightArrowWaitAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfLightArrowWaitAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfLightArrowWaitAnim, 0.0f);
this->unk_1C2 = 1;
}
} else if (this->unk_1C2 == 1) {
BossGanonEff_SpawnShock(play, 1000.0f, GDF_SHOCK_DORF_YELLOW);
if (this->timers[0] == 0) {
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp3Anim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp3Anim, 0.0f);
this->unk_1C2 = 2;
SkelAnime_Update(&this->skelAnime);
sCape->attachShouldersTimer = 18.0f;
@ -2480,8 +2481,8 @@ void BossGanon_SetupVulnerable(BossGanon* this, PlayState* play) {
if (this->actionFunc != BossGanon_Vulnerable) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfLightArrowHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfLightArrowHitAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfLightArrowHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfLightArrowHitAnim, 0.0f);
sCape->attachRightArmTimer = sCape->attachLeftArmTimer = 0;
this->actionFunc = BossGanon_Vulnerable;
@ -2539,16 +2540,16 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->unk_1C2 = 1;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfLightEnergyHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfLightEnergyHitAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfLightEnergyHitAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfLightEnergyHitAnim, 0.0f);
}
break;
case 1:
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->unk_1C2 = 2;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfKneelVulnerableAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfKneelVulnerableAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfDownedAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfDownedAnim, 0.0f);
}
break;
@ -2560,8 +2561,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
this->actor.world.pos.y = 40.0f;
this->actor.velocity.y = 0.0f;
this->unk_1C2 = 3;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfLandAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfLandAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfLandAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfLandAnim, 0.0f);
this->timers[0] = 70;
this->actor.flags |= ACTOR_FLAG_10;
}
@ -2574,8 +2575,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->unk_1C2 = 4;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfVulnerableAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfVulnerableAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfVulnerableAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfVulnerableAnim, 0.0f);
}
break;
@ -2586,8 +2587,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
if (this->timers[0] == 0) {
this->unk_1C2 = 5;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfGetUp1Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp1Anim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfGetUp1Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp1Anim, 0.0f);
this->unk_2D4 = 80;
for (i = 1; i < 15; i++) {
@ -2605,8 +2606,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->unk_1C2 = 6;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfGetUp2Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp2Anim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfGetUp2Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp2Anim, 0.0f);
sCape->minDist = 20.0f;
this->unk_19F = 1;
}
@ -2624,8 +2625,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
case 7:
this->envLightMode = 0;
Math_ApproachF(&this->actor.world.pos.y, 150.0f, 0.05f, 30.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfGetUp3Anim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfGetUp3Anim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfGetUp3Anim, 0.0f);
this->unk_1C2 = 8;
SkelAnime_Update(&this->skelAnime);
sCape->attachShouldersTimer = 18.0f;
@ -2658,8 +2659,8 @@ void BossGanon_Vulnerable(BossGanon* this, PlayState* play) {
void BossGanon_SetupDamaged(BossGanon* this, PlayState* play) {
BossGanon_SetAnimationObject(this, play, OBJECT_GANON_ANIME1);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfDamageAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gDorfDamageAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfDamageAnim);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfDamageAnim, 0.0f);
this->actionFunc = BossGanon_Damaged;
}
@ -2676,8 +2677,8 @@ void BossGanon_Damaged(BossGanon* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->fwork[GDF_FWORK_1])) {
this->actionFunc = BossGanon_Vulnerable;
this->unk_1C2 = 4;
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gDorfVulnerableAnim);
Animation_MorphToLoop(&this->skelAnime, &gDorfVulnerableAnim, 0.0f);
this->fwork[GDF_FWORK_1] = Animation_GetLastFrame(&gGanondorfVulnerableAnim);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfVulnerableAnim, 0.0f);
}
}
@ -3191,40 +3192,40 @@ s32 BossGanon_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
BossGanon* this = (BossGanon*)thisx;
switch (limbIndex) {
case 10:
case GANONDORF_LIMB_RIGHT_HAND:
if (this->useOpenHand) {
*dList = gDorfOpenHandDL;
*dList = gGanondorfRightHandOpenDL;
}
break;
case 20:
case GANONDORF_LIMB_LEFT_THIGH:
rot->y += this->legRot.x + this->legRot.z;
rot->z += this->legRot.y;
break;
case 21:
case GANONDORF_LIMB_LEFT_SHIN:
if (this->legRot.y > 0.0f) {
rot->z += this->legRot.y;
}
break;
case 22:
case GANONDORF_LIMB_LEFT_FOOT:
rot->y += this->legRot.x + this->legRot.z;
rot->z += this->legRot.y;
break;
case 23:
case GANONDORF_LIMB_RIGHT_THIGH:
rot->y += this->legRot.x - this->legRot.z;
rot->z += this->legRot.y;
break;
case 24:
case GANONDORF_LIMB_RIGHT_SHIN:
if (this->legRot.y > 0.0f) {
rot->z += this->legRot.y;
}
break;
case 25:
case GANONDORF_LIMB_RIGHT_FOOT:
rot->y += this->legRot.x - this->legRot.z;
rot->z += this->legRot.y;
break;
@ -3255,22 +3256,22 @@ void BossGanon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&D_808E4DB8, &this->unk_2EC[bodyPart]);
}
if (limbIndex == 2) {
if (limbIndex == GANONDORF_LIMB_TORSO) {
Matrix_MultVec3f(&D_808E4DB8, &this->unk_1FC);
} else if (limbIndex == 19) {
} else if (limbIndex == GANONDORF_LIMB_PELVIS) {
Matrix_MultVec3f(&D_808E4DB8, &this->actor.focus.pos);
} else if (limbIndex == 11) {
} else if (limbIndex == GANONDORF_LIMB_JEWEL) {
OPEN_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 7191);
Matrix_MultVec3f(&D_808E4DB8, &this->unk_208);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 7196),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_ganon_DL_00BE90));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfEyesDL));
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 7198);
} else if (limbIndex == 6) {
} else if (limbIndex == GANONDORF_LIMB_LEFT_HAND) {
Matrix_MultVec3f(&D_808E4DC4, &this->unk_238);
} else if (limbIndex == 10) {
} else if (limbIndex == GANONDORF_LIMB_RIGHT_HAND) {
Matrix_MultVec3f(&D_808E4DD0, &this->unk_22C);
if (this->unk_25C == 0) {
@ -3282,7 +3283,7 @@ void BossGanon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
if (this->triforceType == GDF_TRIFORCE_DORF) {
Matrix_MultVec3f(&D_808E4DE8, &this->triforcePos);
}
} else if (limbIndex == 4) {
} else if (limbIndex == GANONDORF_LIMB_LEFT_UPPER_ARM) {
Vec3f sp28 = D_808E4DA0;
if (this->unk_198 == 1) {
@ -3295,7 +3296,7 @@ void BossGanon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
}
Matrix_MultVec3f(&sp28, &this->unk_220);
} else if (limbIndex == 8) {
} else if (limbIndex == GANONDORF_LIMB_RIGHT_UPPER_ARM) {
Vec3f sp1C = D_808E4DAC;
if (this->unk_198 == 1) {
@ -3346,7 +3347,7 @@ void BossGanon_DrawShock(BossGanon* this, PlayState* play) {
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
if (this->unk_2E8 != 0) {
Player* player = GET_PLAYER(play);
@ -3359,7 +3360,7 @@ void BossGanon_DrawShock(BossGanon* this, PlayState* play) {
Matrix_RotateZ(Rand_CenteredFloat(M_PI), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 7384),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
} else {
for (i = 1; i < 15; i++) {
@ -3380,9 +3381,9 @@ void BossGanon_DrawShock(BossGanon* this, PlayState* play) {
(this->unk_1A2 + i) * -15, 32, 64));
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 200, 255, 170, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 128);
gSPDisplayList(POLY_XLU_DISP++, gDorfShockGlowDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfShockGlowDL);
} else {
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
}
}
@ -3408,7 +3409,7 @@ void BossGanon_DrawHandLightBall(BossGanon* this, PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, 100, 255, 0, 0);
}
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
Matrix_Translate(this->unk_260.x, this->unk_260.y, this->unk_260.z, MTXMODE_NEW);
Matrix_ReplaceRotation(&play->billboardMtxF);
@ -3416,7 +3417,7 @@ void BossGanon_DrawHandLightBall(BossGanon* this, PlayState* play) {
Matrix_RotateZ(this->unk_258, 1);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 7510),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
alpha = ((this->unk_1A2 % 2) != 0) ? 100 : 80;
gDPPipeSync(POLY_XLU_DISP++);
@ -3425,7 +3426,7 @@ void BossGanon_DrawHandLightBall(BossGanon* this, PlayState* play) {
Matrix_Scale(this->handLightBallScale * 0.75f, 1.0f, this->handLightBallScale * 0.75f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 7531),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightCoreDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightCoreDL);
CLOSE_DISPS(gfxCtx, "../z_boss_ganon.c", 7534);
}
@ -3453,7 +3454,7 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, PlayState* play) {
Matrix_Scale(this->unk_28C, this->unk_28C, this->unk_28C, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 7588),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightFlecksDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightFlecksDL);
// background circle texture
Matrix_Translate(this->unk_278.x, this->unk_278.y, this->unk_278.z, MTXMODE_NEW);
@ -3465,19 +3466,19 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 0, 0, 0x20, 0x20, 1, 0, this->unk_1A2 * -4,
0x20, 0x20));
gSPDisplayList(POLY_XLU_DISP++, gDorfBigMagicBGCircleDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfBigMagicBGCircleDL);
// yellow background dot
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 150, 170, 0, (s8)this->unk_288);
gSPSegment(POLY_XLU_DISP++, 0x0A,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 0, 0, 0x20, 0x20, 1, this->unk_1A2 * 2,
this->unk_1A2 * -0x14, 0x40, 0x40));
gSPDisplayList(POLY_XLU_DISP++, gDorfDotDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfDotDL);
// light ball material
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 100, 0);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
// light ball geometry
Matrix_Translate(this->unk_278.x, this->unk_278.y, this->unk_278.z, MTXMODE_NEW);
@ -3486,7 +3487,7 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, PlayState* play) {
Matrix_RotateZ((this->unk_1A2 * 10.0f) / 1000.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 7673),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
BossGanon_InitRand(this->unk_1AA + 1, 0x71AC, 0x263A);
Matrix_Translate(this->unk_278.x, this->unk_278.y, this->unk_278.z, MTXMODE_NEW);
@ -3507,7 +3508,7 @@ void BossGanon_DrawBigMagicCharge(BossGanon* this, PlayState* play) {
Matrix_Scale(4.0f, 4.0f, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 7713),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightRayTriDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightRayTriDL);
Matrix_Pop();
}
@ -3560,7 +3561,7 @@ void BossGanon_DrawTriforce(BossGanon* this, PlayState* play) {
Matrix_Scale(this->fwork[GDF_TRIFORCE_SCALE], this->fwork[GDF_TRIFORCE_SCALE], 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 7779),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gDorfTriforceDL));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfTriforceDL));
Matrix_Pop();
@ -3595,7 +3596,7 @@ void BossGanon_DrawDarkVortex(BossGanon* this, PlayState* play) {
MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 7841),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gDorfVortexDL));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfVortexDL));
Matrix_Pop();
@ -3769,10 +3770,10 @@ void BossGanon_DrawShadowTexture(void* tex, BossGanon* this, PlayState* play) {
Matrix_Scale(0.95000005f, 1.0f, 0.95000005f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 8396),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gDorfShadowSetupDL);
gSPDisplayList(POLY_OPA_DISP++, gGanondorfShadowSetupDL);
gDPLoadTextureBlock(POLY_OPA_DISP++, tex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_CLAMP,
G_TX_NOMIRROR | G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD);
gSPDisplayList(POLY_OPA_DISP++, gDorfShadowModelDL);
gSPDisplayList(POLY_OPA_DISP++, gGanondorfShadowModelDL);
CLOSE_DISPS(gfxCtx, "../z_boss_ganon.c", 8426);
}
@ -3793,7 +3794,7 @@ void BossGanon_Draw(Actor* thisx, PlayState* play) {
POLY_OPA_DISP = Gfx_SetFog(POLY_OPA_DISP, 255, 50, 0, 0, 900, 1099);
}
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gDorfEyeTex));
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gGanondorfNormalEyeTex));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
BossGanon_OverrideLimbDraw, BossGanon_PostLimbDraw, &this->actor);
@ -4137,10 +4138,10 @@ void BossGanon_LightBall_Draw(Actor* thisx, PlayState* play) {
Matrix_Scale(this->actor.scale.x * 0.75f, 1.0f, this->actor.scale.z * 0.75f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 9875),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightCoreDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightCoreDL);
Matrix_Pop();
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (s8)this->fwork[GDF_FWORK_1]);
@ -4154,7 +4155,7 @@ void BossGanon_LightBall_Draw(Actor* thisx, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 9899),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
Matrix_Pop();
}
} else if (this->unk_1A8 == 0) {
@ -4162,7 +4163,7 @@ void BossGanon_LightBall_Draw(Actor* thisx, PlayState* play) {
Matrix_RotateZ((this->actor.shape.rot.z / 32768.0f) * 3.1416f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 9907),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 9911);
@ -4276,7 +4277,7 @@ void func_808E229C(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
for (i = 9; i >= 0; i--) {
temp = (s16)(((this->unk_1A6 - i) + 0xF) % 15);
@ -4287,7 +4288,7 @@ void func_808E229C(Actor* thisx, PlayState* play2) {
Matrix_RotateZ(((2.0f * (i * M_PI)) / 10.0f) + BINANG_TO_RAD_ALT(this->actor.shape.rot.z), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 10109),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 10113);
@ -4541,9 +4542,9 @@ void func_808E2544(Actor* thisx, PlayState* play) {
}
static Gfx* sBigMagicLightStreakDLists[] = {
gDorfLightStreak12DL, gDorfLightStreak11DL, gDorfLightStreak10DL, gDorfLightStreak9DL,
gDorfLightStreak8DL, gDorfLightStreak7DL, gDorfLightStreak6DL, gDorfLightStreak5DL,
gDorfLightStreak4DL, gDorfLightStreak3DL, gDorfLightStreak2DL, gDorfLightStreak1DL,
gGanondorfLightStreak12DL, gGanondorfLightStreak11DL, gGanondorfLightStreak10DL, gGanondorfLightStreak9DL,
gGanondorfLightStreak8DL, gGanondorfLightStreak7DL, gGanondorfLightStreak6DL, gGanondorfLightStreak5DL,
gGanondorfLightStreak4DL, gGanondorfLightStreak3DL, gGanondorfLightStreak2DL, gGanondorfLightStreak1DL,
};
void func_808E324C(Actor* thisx, PlayState* play) {
@ -4580,9 +4581,9 @@ void func_808E324C(Actor* thisx, PlayState* play) {
Matrix_RotateZ(Rand_CenteredFloat(M_PI), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon.c", 10534),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon.c", 10541);
}
@ -4786,9 +4787,10 @@ void BossGanon_UpdateEffects(PlayState* play) {
}
static void* sLightningTextures[] = {
gDorfLightning1Tex, gDorfLightning1Tex, gDorfLightning2Tex, gDorfLightning3Tex, gDorfLightning4Tex,
gDorfLightning5Tex, gDorfLightning6Tex, gDorfLightning7Tex, gDorfLightning8Tex, gDorfLightning9Tex,
gDorfLightning10Tex, gDorfLightning11Tex, gDorfLightning12Tex,
gGanondorfLightning1Tex, gGanondorfLightning1Tex, gGanondorfLightning2Tex, gGanondorfLightning3Tex,
gGanondorfLightning4Tex, gGanondorfLightning5Tex, gGanondorfLightning6Tex, gGanondorfLightning7Tex,
gGanondorfLightning8Tex, gGanondorfLightning9Tex, gGanondorfLightning10Tex, gGanondorfLightning11Tex,
gGanondorfLightning12Tex,
};
static u8 sLightningPrimColors[] = {
@ -4817,7 +4819,7 @@ void BossGanon_DrawEffects(PlayState* play) {
if (eff->type == GDF_EFF_WINDOW_SHARD) {
gDPPipeSync(POLY_OPA_DISP++);
if (materialFlag == 0) {
gSPDisplayList(POLY_OPA_DISP++, gDorfWindowShardMaterialDL);
gSPDisplayList(POLY_OPA_DISP++, gGanondorfWindowShardMaterialDL);
materialFlag++;
}
if ((eff->timer & 7) != 0) {
@ -4831,7 +4833,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_RotateX(eff->unk_44, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 10898),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gDorfWindowShardModelDL);
gSPDisplayList(POLY_OPA_DISP++, gGanondorfWindowShardModelDL);
}
}
@ -4843,7 +4845,7 @@ void BossGanon_DrawEffects(PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++);
if (materialFlag == 0) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
materialFlag++;
}
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, eff->alpha);
@ -4853,7 +4855,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_RotateZ(eff->unk_3C, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 10932),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
}
@ -4865,7 +4867,7 @@ void BossGanon_DrawEffects(PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++);
if (materialFlag == 0) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 0);
gSPDisplayList(POLY_XLU_DISP++, gDorfLightBallMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightBallMaterialDL);
materialFlag++;
}
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, eff->alpha);
@ -4877,7 +4879,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_RotateX(M_PI / 2, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 10971),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfSquareDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfSquareDL);
}
}
@ -4903,7 +4905,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_RotateZ(eff->unk_3C, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11023),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfShockDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfShockDL);
}
}
@ -4925,7 +4927,7 @@ void BossGanon_DrawEffects(PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11074),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sLightningTextures[eff->timer]));
gSPDisplayList(POLY_XLU_DISP++, gDorfLightningDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfLightningDL);
}
}
@ -4943,7 +4945,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_Scale(eff->scale, eff->unk_40 * eff->scale, eff->scale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11121),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfImpactDarkDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfImpactDarkDL);
}
}
@ -4961,7 +4963,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_Scale(eff->scale, eff->unk_40 * eff->scale, eff->scale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11165),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfImpactLightDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfImpactLightDL);
}
}
@ -4980,7 +4982,7 @@ void BossGanon_DrawEffects(PlayState* play) {
(eff->scale * 200.0f) / 1500.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11209),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfShockwaveDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfShockwaveDL);
}
}
@ -4999,7 +5001,7 @@ void BossGanon_DrawEffects(PlayState* play) {
Matrix_Scale(eff->scale, eff->scale, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx, "../z_boss_ganon.c", 11250),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gDorfDotDL);
gSPDisplayList(POLY_XLU_DISP++, gGanondorfDotDL);
}
}

View file

@ -8,6 +8,36 @@ struct BossGanon;
typedef void (*BossGanonActionFunc)(struct BossGanon*, PlayState*);
typedef enum {
/* 0 */ GANONDORF_LIMB_NONE,
/* 1 */ GANONDORF_LIMB_ROOT,
/* 2 */ GANONDORF_LIMB_TORSO,
/* 3 */ GANONDORF_LIMB_LEFT_SHOULDER,
/* 4 */ GANONDORF_LIMB_LEFT_UPPER_ARM,
/* 5 */ GANONDORF_LIMB_LEFT_FOREARM,
/* 6 */ GANONDORF_LIMB_LEFT_HAND,
/* 7 */ GANONDORF_LIMB_RIGHT_SHOULDER,
/* 8 */ GANONDORF_LIMB_RIGHT_UPPER_ARM,
/* 9 */ GANONDORF_LIMB_RIGHT_FOREARM,
/* 10 */ GANONDORF_LIMB_RIGHT_HAND,
/* 11 */ GANONDORF_LIMB_JEWEL,
/* 12 */ GANONDORF_LIMB_LEFT_UPPER_LIP,
/* 13 */ GANONDORF_LIMB_MOUTH,
/* 14 */ GANONDORF_LIMB_JAW,
/* 15 */ GANONDORF_LIMB_UPPER_HAIR_END,
/* 16 */ GANONDORF_LIMB_LOWER_HAIR_END,
/* 17 */ GANONDORF_LIMB_RIGHT_UPPER_LIP,
/* 18 */ GANONDORF_LIMB_HEAD,
/* 19 */ GANONDORF_LIMB_PELVIS,
/* 20 */ GANONDORF_LIMB_LEFT_THIGH,
/* 21 */ GANONDORF_LIMB_LEFT_SHIN,
/* 22 */ GANONDORF_LIMB_LEFT_FOOT,
/* 23 */ GANONDORF_LIMB_RIGHT_THIGH,
/* 24 */ GANONDORF_LIMB_RIGHT_SHIN,
/* 25 */ GANONDORF_LIMB_RIGHT_FOOT,
/* 26 */ GANONDORF_LIMB_MAX
} GanondorfLimb;
typedef enum {
/* 0 */ GDF_FWORK_0,
/* 1 */ GDF_FWORK_1,

View file

@ -1,4 +1,5 @@
#include "z_boss_ganon2.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
#include "overlays/actors/ovl_Demo_Gj/z_demo_gj.h"
#include "overlays/actors/ovl_En_Zl3/z_en_zl3.h"
#include "assets/objects/object_ganon/object_ganon.h"
@ -145,7 +146,7 @@ void BossGanon2_Init(Actor* thisx, PlayState* play) {
Collider_InitJntSph(play, &this->unk_444);
Collider_SetJntSph(play, &this->unk_444, &this->actor, &sJntSphInit2, this->unk_864);
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON, false);
SkelAnime_InitFlex(play, &this->skelAnime, &gDorfSkel, NULL, NULL, NULL, 0);
SkelAnime_InitFlex(play, &this->skelAnime, &gGanondorfSkel, NULL, NULL, NULL, 0);
func_808FD5C4(this, play);
this->actor.naviEnemyId = NAVI_ENEMY_GANON;
this->actor.gravity = 0.0f;
@ -218,7 +219,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
player->actor.world.pos.y = 1086.0f;
player->actor.world.pos.z = -186.0f;
player->actor.shape.rot.y = -0x5000;
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_002168, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfBurstOutAnim, 0.0f);
play->envCtx.lightBlend = 0.0f;
// fake, tricks the compiler into allocating more stack
if (zero) {
@ -406,8 +407,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 50) {
this->unk_398 = 0;
this->unk_39C = 12;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_002168, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_002168);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfBurstOutAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfBurstOutAnim);
this->actor.world.pos.x = this->actor.world.pos.z = -200.0f;
this->actor.world.pos.y = 1009.0f;
this->actor.shape.yOffset = 7000.0f;
@ -440,7 +441,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->subCamAt.y = this->actor.world.pos.y + 70.0f;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_002E6C, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfFloatingHeavyBreathingAnim, 0.0f);
this->unk_39C = 14;
this->unk_398 = 0;
this->actor.world.pos.x = -200.0f;
@ -493,12 +494,12 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
Math_ApproachF(&this->subCamAt.y, this->actor.world.pos.y + 77.0f, 0.05f, 5.0f);
if (this->unk_398 >= 50) {
if (this->unk_398 == 50) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_000BFC, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_000BFC);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfShowTriforceStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfShowTriforceStartAnim);
this->unk_314 = 3;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon_anime3_Anim_003F38, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanondorfShowTriforceLoopAnim, 0.0f);
this->unk_194 = 1000.0f;
}
}
@ -508,8 +509,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 140) {
this->unk_39C = 16;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_003754, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_003754);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfTransformStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanondorfTransformStartAnim);
this->unk_339 = 55;
play->envCtx.lightBlend = 1.0f;
Audio_PlayActorSfx2(&this->actor, NA_SE_EN_GANON_CASBREAK);
@ -531,7 +532,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_1B4 = 0.0f;
SkelAnime_Update(&this->skelAnime);
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_0028A8, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanondorfTransformEndAnim, 0.0f);
this->unk_194 = 1000.0f;
}
Math_ApproachF(&this->subCamEye.x, (this->actor.world.pos.x + 200.0f) - 90.0f, 0.1f, 6.3999996f);
@ -555,7 +556,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_337 = 2;
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON2, false);
SkelAnime_Free(&this->skelAnime, play);
SkelAnime_InitFlex(play, &this->skelAnime, &object_ganon2_Skel_025970, NULL, NULL, NULL, 0);
SkelAnime_InitFlex(play, &this->skelAnime, &gGanonSkel, NULL, NULL, NULL, 0);
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON_ANIME3, false);
func_8002DF54(play, &this->actor, 0x54);
this->unk_314 = 3;
@ -577,7 +578,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if (this->unk_398 == 25) {
this->unk_39C = 18;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_010380, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonUncurlAndFlailAnim, 0.0f);
this->skelAnime.playSpeed = 0.0f;
this->subCamEye.x = ((this->actor.world.pos.x + 500.0f) - 350.0f) - 50.0f;
this->subCamEye.y = this->actor.world.pos.y;
@ -640,7 +641,7 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
this->unk_398 = 0;
this->unk_420 = 10.0f;
this->actor.velocity.y = 0.0f;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_010380, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonUncurlAndFlailAnim, 0.0f);
func_808FD4D4(this, play, 0, 3);
func_800A9F6C(0.0f, 0xC8, 0x14, 0x14);
}
@ -673,8 +674,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
}
if (this->unk_398 == 80) {
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON2, false);
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(object_ganon2_Tex_021A90),
160, 180, 128, 40);
TitleCard_InitBossName(play, &play->actorCtx.titleCtx, SEGMENTED_TO_VIRTUAL(gGanonTitleCardTex), 160,
180, 128, 40);
}
this->subCamEye.x = ((this->actor.world.pos.x + 500.0f) - 350.0f) + 100.0f;
this->subCamEye.y = this->actor.world.pos.y;
@ -843,8 +844,8 @@ void func_808FD5F4(BossGanon2* this, PlayState* play) {
if ((this->unk_398 > 40) && (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE)) {
this->unk_39C = 29;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon_anime3_Anim_0147E0, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon_anime3_Anim_0147E0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonRoarAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonRoarAnim);
this->actor.shape.yOffset = 0.0f;
this->actor.world.pos.y = 1086.0f;
this->actor.gravity = -1.0f;
@ -1043,7 +1044,7 @@ void func_808FFDB0(BossGanon2* this, PlayState* play) {
if (Object_IsLoaded(&play->objectCtx, objectIdx)) {
gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[objectIdx].segment);
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00FFE4, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardIdleAnim, -10.0f);
this->actionFunc = func_808FFEBC;
if (this->unk_334 != 0) {
@ -1081,7 +1082,7 @@ void func_808FFEBC(BossGanon2* this, PlayState* play) {
}
void func_808FFF90(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00FFE4, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardIdleAnim, -10.0f);
this->actionFunc = func_808FFFE0;
this->unk_1A2[0] = 40;
}
@ -1106,8 +1107,8 @@ void func_808FFFE0(BossGanon2* this, PlayState* play) {
}
void func_809000A0(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_026510, -2.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_026510);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunStartAnim, -2.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonStunStartAnim);
this->unk_1AC = 0;
this->actionFunc = func_80900104;
}
@ -1120,15 +1121,15 @@ void func_80900104(BossGanon2* this, PlayState* play) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
this->unk_1AC = 1;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_026AF4, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunLoopAnim, 0.0f);
this->unk_1A2[0] = 80;
}
break;
case 1:
if (this->unk_1A2[0] == 0) {
this->unk_1AC = 2;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_027824, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_027824);
Animation_MorphToLoop(&this->skelAnime, &gGanonStunEndAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonStunEndAnim);
}
break;
case 2:
@ -1140,8 +1141,8 @@ void func_80900104(BossGanon2* this, PlayState* play) {
}
void func_80900210(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00DFF0, -3.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00DFF0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDamageAnim, -3.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDamageAnim);
this->actionFunc = func_8090026C;
}
@ -1155,7 +1156,7 @@ void func_8090026C(BossGanon2* this, PlayState* play) {
}
void func_809002CC(BossGanon2* this, PlayState* play) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00E8EC, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardWalkAnim, -10.0f);
this->actionFunc = func_80900344;
this->unk_338 = 0;
this->unk_1A2[0] = 100;
@ -1180,7 +1181,7 @@ void func_80900344(BossGanon2* this, PlayState* play) {
}
if (this->actor.xzDistToPlayer < 200.0f) {
this->unk_338 = 0;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_00E8EC, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonGuardWalkAnim, -10.0f);
} else {
this->skelAnime.playSpeed = ((this->actor.xzDistToPlayer - 300.0f) * 0.005f) + 1.0f;
if (this->skelAnime.playSpeed > 2.0f) {
@ -1195,7 +1196,7 @@ void func_80900344(BossGanon2* this, PlayState* play) {
phi_f0 = 2.0f;
if (this->actor.xzDistToPlayer >= 200.0f) {
this->unk_338 = 1;
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_0353C0, -10.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonWalkAnim, -10.0f);
}
}
@ -1214,12 +1215,12 @@ void func_80900344(BossGanon2* this, PlayState* play) {
void func_80900580(BossGanon2* this, PlayState* play) {
if (this->unk_311 == 0) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00ADD0, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00ADD0);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonLeftSwordSwingAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonLeftSwordSwingAnim);
this->unk_198 = (this->unk_194 - 15.0f) - 5.0f;
} else {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_00CAF8, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_00CAF8);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonRightSwordSwingAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonRightSwordSwingAnim);
this->unk_198 = (this->unk_194 - 15.0f) - 5.0f;
}
@ -1266,8 +1267,8 @@ void func_80900650(BossGanon2* this, PlayState* play) {
}
void func_80900818(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_02A848, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_02A848);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDownedStartAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDownedStartAnim);
this->actionFunc = func_80900890;
this->unk_1AC = 0;
this->unk_39C = 0;
@ -1392,7 +1393,7 @@ void func_80900890(BossGanon2* this, PlayState* play) {
switch (this->unk_1AC) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_034278, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonDownedLoopAnim, 0.0f);
this->unk_1AC = 1;
}
break;
@ -1406,8 +1407,8 @@ void func_80900890(BossGanon2* this, PlayState* play) {
temp_f12 = -200.0f - player->actor.world.pos.z;
if (sqrtf(SQ(temp_f2) + SQ(temp_f12)) <= 784.0f) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_0334F8, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_0334F8);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonGetUpAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonGetUpAnim);
this->unk_1AC = 2;
this->unk_1A2[0] = 40;
Audio_PlayActorSfx2(&this->actor, NA_SE_EN_MGANON_ROAR);
@ -1431,8 +1432,8 @@ void func_80900890(BossGanon2* this, PlayState* play) {
}
void func_80901020(BossGanon2* this, PlayState* play) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_02A848, -5.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_02A848);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDownedStartAnim, -5.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDownedStartAnim);
this->actionFunc = func_8090120C;
this->unk_1AC = 0;
this->unk_39C = 0;
@ -1642,8 +1643,8 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
Play_ChangeCameraStatus(play, this->subCamId, CAM_STAT_ACTIVE);
this->unk_39C = 7;
this->unk_398 = 0;
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_003B1C, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_003B1C);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonFinalBlowAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonFinalBlowAnim);
play->startPlayerCutscene(play, &this->actor, 0x61);
} else {
break;
@ -1709,8 +1710,8 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
case 75:
this->unk_339 = 23;
if (this->unk_398 == 55) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_007288, 0.0f);
this->unk_194 = Animation_GetLastFrame(&object_ganon2_Anim_007288);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDeadStartAnim, 0.0f);
this->unk_194 = Animation_GetLastFrame(&gGanonDeadStartAnim);
func_8002DF54(play, &this->actor, 0x62);
this->unk_39C = 8;
this->unk_398 = 1000;
@ -1734,7 +1735,7 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
play->envCtx.lightBlend = 0.0f;
}
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToPlayOnce(&this->skelAnime, &object_ganon2_Anim_008EB8, 0.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGanonDeadLoopAnim, 0.0f);
this->unk_398 = 0;
this->unk_194 = 1000.0f;
}
@ -1819,7 +1820,7 @@ void func_8090120C(BossGanon2* this, PlayState* play) {
switch (this->unk_1AC) {
case 0:
if (Animation_OnFrame(&this->skelAnime, this->unk_194)) {
Animation_MorphToLoop(&this->skelAnime, &object_ganon2_Anim_034278, 0.0f);
Animation_MorphToLoop(&this->skelAnime, &gGanonDownedLoopAnim, 0.0f);
this->unk_1AC = 1;
}
break;
@ -2515,12 +2516,12 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
OPEN_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5355);
if (limbIndex == 15) {
if (limbIndex == GANON_LIMB_NECK) {
rot->y += this->unk_31A;
rot->z += this->unk_31C;
}
if (limbIndex >= 42) {
if (limbIndex >= GANON_LIMB_TAIL1) {
rot->x += this->unk_2F4[limbIndex] + this->unk_346;
rot->y += this->unk_2FE[limbIndex];
@ -2531,7 +2532,8 @@ s32 BossGanon2_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
}
}
if ((limbIndex == 7) || (limbIndex == 13) || (limbIndex == 33) || (limbIndex == 34)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) || (limbIndex == GANON_LIMB_RIGHT_SWORD) ||
(limbIndex == GANON_LIMB_LEFT_HORN) || (limbIndex == GANON_LIMB_RIGHT_HORN)) {
*dList = NULL;
}
@ -2554,17 +2556,17 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultVec3f(&D_80906D60, &this->unk_234[D_809070CC[limbIndex]]);
}
if (limbIndex == 15) {
if (limbIndex == GANON_LIMB_NECK) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1B8);
} else if (limbIndex == 3) {
} else if (limbIndex == GANON_LIMB_LEFT_SHOULDER) {
Matrix_MultVec3f(&D_80907108, &this->unk_1F4);
} else if (limbIndex == 9) {
} else if (limbIndex == GANON_LIMB_RIGHT_SHOULDER) {
Matrix_MultVec3f(&D_80907114, &this->unk_1E8);
} else if (limbIndex == 38) {
} else if (limbIndex == GANON_LIMB_LEFT_FOOT) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1DC);
} else if (limbIndex == 41) {
} else if (limbIndex == GANON_LIMB_RIGHT_FOOT) {
Matrix_MultVec3f(&D_80906D60, &this->unk_1D0);
} else if (limbIndex == 45) {
} else if (limbIndex == GANON_LIMB_TAIL4) {
Matrix_MultVec3f(&D_80907138, &this->unk_1C4);
}
@ -2574,14 +2576,14 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
func_808FD080(temp_v0, &this->unk_424, &sp4C);
}
if ((limbIndex == 7) || (limbIndex == 13)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) || (limbIndex == GANON_LIMB_RIGHT_SWORD)) {
Matrix_Push();
Matrix_Scale(this->unk_224, this->unk_224, this->unk_224, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5522),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, *dList);
Matrix_Pop();
} else if ((limbIndex == 33) || (limbIndex == 34)) {
} else if ((limbIndex == GANON_LIMB_LEFT_HORN) || (limbIndex == GANON_LIMB_RIGHT_HORN)) {
Matrix_Push();
Matrix_Scale(this->unk_228, this->unk_228, this->unk_228, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5533),
@ -2591,12 +2593,12 @@ void BossGanon2_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
}
if (*dList != NULL) {
if ((limbIndex == 7) && (this->unk_312 == 1)) {
if ((limbIndex == GANON_LIMB_LEFT_SWORD) && (this->unk_312 == 1)) {
Matrix_MultVec3f(&D_809070FC, &this->unk_218);
func_808FD080(0, &this->unk_444, &this->unk_218);
Matrix_MultVec3f(&D_80907120, &this->unk_200);
Matrix_MultVec3f(&D_8090712C, &this->unk_20C);
} else if ((limbIndex == 13) && (this->unk_312 == 2)) {
} else if ((limbIndex == GANON_LIMB_RIGHT_SWORD) && (this->unk_312 == 2)) {
Matrix_MultVec3f(&D_809070FC, &this->unk_218);
func_808FD080(1, &this->unk_444, &this->unk_218);
Matrix_MultVec3f(&D_80907120, &this->unk_200);
@ -2709,15 +2711,15 @@ void BossGanon2_PostLimbDraw2(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s
if (temp_v1 >= 0) {
Matrix_MultVec3f(&D_80906D60, &this->unk_234[temp_v1]);
}
if (limbIndex == 11) {
if (limbIndex == GANONDORF_LIMB_JEWEL) {
OPEN_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5749);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_boss_ganon2.c", 5752),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_ganon_DL_00BE90));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfEyesDL));
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganon2.c", 5754);
} else if (limbIndex == 10) {
} else if (limbIndex == GANONDORF_LIMB_RIGHT_HAND) {
Matrix_MultVec3f(&D_80907164, &this->unk_1B8);
}
}
@ -2762,8 +2764,8 @@ void BossGanon2_Draw(Actor* thisx, PlayState* play) {
switch (this->unk_337) {
case 0:
BossGanon2_SetObjectSegment(this, play, OBJECT_GANON, true);
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(object_ganon_Tex_00A8E0));
gSPSegment(POLY_XLU_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(object_ganon_Tex_00A8E0));
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gGanondorfEmptyEyeTex));
gSPSegment(POLY_XLU_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(gGanondorfEmptyEyeTex));
SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
this->skelAnime.dListCount, NULL, BossGanon2_PostLimbDraw2, this);
break;

View file

@ -8,6 +8,57 @@ struct BossGanon2;
typedef void (*BossGanon2ActionFunc)(struct BossGanon2*, PlayState*);
typedef enum {
/* 0 */ GANON_LIMB_NONE,
/* 1 */ GANON_LIMB_ROOT,
/* 2 */ GANON_LIMB_TORSO,
/* 3 */ GANON_LIMB_LEFT_SHOULDER,
/* 4 */ GANON_LIMB_LEFT_UPPER_ARM,
/* 5 */ GANON_LIMB_LEFT_FOREARM,
/* 6 */ GANON_LIMB_LEFT_WRIST,
/* 7 */ GANON_LIMB_LEFT_SWORD,
/* 8 */ GANON_LIMB_LEFT_HAND,
/* 9 */ GANON_LIMB_RIGHT_SHOULDER,
/* 10 */ GANON_LIMB_RIGHT_UPPER_ARM,
/* 11 */ GANON_LIMB_RIGHT_FOREARM,
/* 12 */ GANON_LIMB_RIGHT_WRIST,
/* 13 */ GANON_LIMB_RIGHT_SWORD,
/* 14 */ GANON_LIMB_RIGHT_HAND,
/* 15 */ GANON_LIMB_NECK,
/* 16 */ GANON_LIMB_JEWEL,
/* 17 */ GANON_LIMB_SNOUT,
/* 18 */ GANON_LIMB_OUTER_TEETH,
/* 19 */ GANON_LIMB_MOUTH,
/* 20 */ GANON_LIMB_INNER_TEETH,
/* 21 */ GANON_LIMB_JAW,
/* 22 */ GANON_LIMB_MIDDLE_HAIR_1,
/* 23 */ GANON_LIMB_MIDDLE_HAIR_2,
/* 24 */ GANON_LIMB_MIDDLE_HAIR_3,
/* 25 */ GANON_LIMB_LEFT_HAIR_1,
/* 26 */ GANON_LIMB_LEFT_HAIR_2,
/* 27 */ GANON_LIMB_LEFT_HAIR_3,
/* 28 */ GANON_LIMB_RIGHT_HAIR_1,
/* 29 */ GANON_LIMB_RIGHT_HAIR_2,
/* 30 */ GANON_LIMB_RIGHT_HAIR_3,
/* 31 */ GANON_LIMB_EYES,
/* 32 */ GANON_LIMB_HEAD,
/* 33 */ GANON_LIMB_LEFT_HORN,
/* 34 */ GANON_LIMB_RIGHT_HORN,
/* 35 */ GANON_LIMB_PELVIS,
/* 36 */ GANON_LIMB_LEFT_THIGH,
/* 37 */ GANON_LIMB_LEFT_SHIN,
/* 38 */ GANON_LIMB_LEFT_FOOT,
/* 39 */ GANON_LIMB_RIGHT_THIGH,
/* 40 */ GANON_LIMB_RIGHT_SHIN,
/* 41 */ GANON_LIMB_RIGHT_FOOT,
/* 42 */ GANON_LIMB_TAIL1,
/* 43 */ GANON_LIMB_TAIL2,
/* 44 */ GANON_LIMB_TAIL3,
/* 45 */ GANON_LIMB_TAIL4,
/* 46 */ GANON_LIMB_TAIL5,
/* 47 */ GANON_LIMB_MAX
} GanonLimb;
typedef struct BossGanon2 {
/* 0x0000 */ Actor actor;
/* 0x014C */ SkelAnime skelAnime;

View file

@ -309,9 +309,9 @@ static s8 D_80907144[] = {
static Vec3f D_80907164 = { 800.0f, 420.0f, 100.0f };
static void* sEyeTextures[] = {
object_ganon2_Tex_01E188,
object_ganon2_Tex_01E988,
object_ganon2_Tex_01EA08,
gGanonEyeOpenTex,
gGanonEyeHalfTex,
gGanonEyeClosedTex,
};
static Vec3f D_8090717C = { 0.0f, -2000.0f, 0.0f };

View file

@ -5,6 +5,7 @@
*/
#include "z_en_viewer.h"
#include "overlays/actors/ovl_Boss_Ganon/z_boss_ganon.h"
#include "overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.h"
#include "assets/objects/object_zl4/object_zl4.h"
#include "assets/objects/gameplay_keep/gameplay_keep.h"
@ -75,8 +76,8 @@ static EnViewerInitData sInitData[] = {
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &object_gndd_Skel_0119E8,
&object_gndd_Anim_0050A8 },
/* ENVIEWER_TYPE_9_GANONDORF */
{ OBJECT_GANON, OBJECT_GANON, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &gDorfSkel,
&object_ganon_Anim_011348 },
{ OBJECT_GANON, OBJECT_GANON, 1, -6, ENVIEWER_SHADOW_NONE, 10, ENVIEWER_DRAW_GANONDORF, &gGanondorfSkel,
&gGanondorfEndingFloatAnim },
};
static EnGanonMant* sGanondorfCape;
@ -504,12 +505,12 @@ s32 EnViewer_Ganondorf3OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dL
}
void EnViewer_Ganondorf9PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
if (limbIndex == 11) {
if (limbIndex == GANONDORF_LIMB_JEWEL) {
OPEN_DISPS(play->state.gfxCtx, "../z_en_viewer.c", 1365);
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_en_viewer.c", 1370),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(object_ganon_DL_00BE90));
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gGanondorfEyesDL));
CLOSE_DISPS(play->state.gfxCtx, "../z_en_viewer.c", 1372);
}
}
@ -551,7 +552,7 @@ void EnViewer_DrawGanondorf(EnViewer* this, PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&object_gndd_Tex_00F778));
}
} else if (type == ENVIEWER_TYPE_9_GANONDORF) {
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&object_ganon_Tex_00A4E0));
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gGanondorfCrazedEyeTex));
}
if (type == ENVIEWER_TYPE_9_GANONDORF) {