Merge branch 'master' into tokeidai

This commit is contained in:
tom-overton
2021-12-26 20:39:32 -08:00
134 changed files with 18620 additions and 3570 deletions
+7
View File
@@ -0,0 +1,7 @@
<Root>
<File Name="code" BaseAddress="0x800A5AC0" RangeStart="0x108830" RangeEnd="0x108870" OutName="eff_shield_particle">
<Array Name="sEffShieldParticleVtx" Count="4" Offset="0x108830">
<Vtx/>
</Array>
</File>
</Root>
+3 -3
View File
@@ -1324,11 +1324,11 @@
<DList Name="gameplay_keep_DL_07D260" Offset="0x7D260" />
<DList Name="gameplay_keep_DL_07D348" Offset="0x7D348" />
<Texture Name="gameplay_keep_Tex_07D350" OutName="tex_07D350" Format="i8" Width="16" Height="32" Offset="0x7D350" />
<DList Name="gameplay_keep_DL_07D590" Offset="0x7D590" />
<DList Name="gGameplayKeepDrawFlameDL" Offset="0x7D590" />
<DList Name="gameplay_keep_DL_07D650" Offset="0x7D650" />
<Texture Name="gameplay_keep_Tex_07D710" OutName="tex_07D710" Format="i4" Width="32" Height="64" Offset="0x7D710" />
<Texture Name="gGameplayKeepFlameRippleTex" OutName="gameplay_keep_flame_ripple" Format="i4" Width="32" Height="64" Offset="0x7D710" />
<Texture Name="gameplay_keep_Tex_07DB10" OutName="tex_07DB10" Format="i4" Width="32" Height="64" Offset="0x7DB10" />
<Texture Name="gameplay_keep_Tex_07DF10" OutName="tex_07DF10" Format="i8" Width="32" Height="64" Offset="0x7DF10" />
<Texture Name="gGameplayKeepFlameOutlineTex" OutName="gameplay_keep_flame_outline" Format="i8" Width="32" Height="64" Offset="0x7DF10" />
<DList Name="gameplay_keep_DL_07E8C0" Offset="0x7E8C0" />
<Texture Name="gameplay_keep_Tex_07EA08" OutName="tex_07EA08" Format="i8" Width="32" Height="64" Offset="0x7EA08" />
<TextureAnimation Name="gameplay_keep_Matanimheader_07F218" Offset="0x7F218" />
+3 -3
View File
@@ -23,9 +23,9 @@
<Texture Name="object_aob_Tex_0004D8" OutName="tex_0004D8" Format="ci8" Width="16" Height="16" Offset="0x4D8" />
<Texture Name="object_aob_Tex_0005D8" OutName="tex_0005D8" Format="ci8" Width="8" Height="8" Offset="0x5D8" />
<Texture Name="object_aob_Tex_000618" OutName="tex_000618" Format="ci8" Width="8" Height="8" Offset="0x618" />
<Texture Name="object_aob_TEx_000658" OutName="tex_000658" Format="rgba16" Width="32" Height="32" Offset="0x658" />
<Texture Name="object_aob_TEx_000E58" OutName="tex_000E58" Format="rgba16" Width="32" Height="32" Offset="0xE58" />
<Texture Name="object_aob_TEx_001658" OutName="tex_001658" Format="rgba16" Width="32" Height="32" Offset="0x1658" />
<Texture Name="object_aob_Tex_000658" OutName="tex_000658" Format="rgba16" Width="32" Height="32" Offset="0x658" />
<Texture Name="object_aob_Tex_000E58" OutName="tex_000E58" Format="rgba16" Width="32" Height="32" Offset="0xE58" />
<Texture Name="object_aob_Tex_001658" OutName="tex_001658" Format="rgba16" Width="32" Height="32" Offset="0x1658" />
<Texture Name="object_aob_Tex_001E58" OutName="tex_001E58" Format="ci8" Width="16" Height="16" Offset="0x1E58" />
<Texture Name="object_aob_Tex_001F58" OutName="tex_001F58" Format="ci8" Width="8" Height="8" Offset="0x1F58" />
<Texture Name="object_aob_Tex_001F98" OutName="tex_001F98" Format="ci8" Width="8" Height="8" Offset="0x1F98" />
+40 -40
View File
@@ -1,46 +1,46 @@
<Root>
<File Name="object_bigpo" Segment="6">
<Animation Name="object_bigpo_Anim_000158" Offset="0x158" />
<Animation Name="object_bigpo_Anim_000454" Offset="0x454" />
<Animation Name="object_bigpo_Anim_000608" Offset="0x608" />
<Animation Name="object_bigpo_Anim_000924" Offset="0x924" />
<Animation Name="object_bigpo_Anim_000F9C" Offset="0xF9C" />
<Animation Name="object_bigpo_Anim_001360" Offset="0x1360" />
<Texture Name="object_bigpo_Tex_001370" OutName="tex_001370" Format="i8" Width="32" Height="64" Offset="0x1370" />
<DList Name="object_bigpo_DL_001BB0" Offset="0x1BB0" />
<Texture Name="object_bigpo_Tex_001C70" OutName="tex_001C70" Format="rgba16" Width="16" Height="16" Offset="0x1C70" />
<Texture Name="object_bigpo_Tex_001E70" OutName="tex_001E70" Format="rgba16" Width="16" Height="16" Offset="0x1E70" />
<Texture Name="object_bigpo_Tex_002070" OutName="tex_002070" Format="rgba16" Width="32" Height="32" Offset="0x2070" />
<Texture Name="object_bigpo_Tex_002870" OutName="tex_002870" Format="rgba16" Width="16" Height="16" Offset="0x2870" />
<Texture Name="object_bigpo_Tex_002A70" OutName="tex_002A70" Format="rgba16" Width="8" Height="8" Offset="0x2A70" />
<Texture Name="object_bigpo_Tex_002AF0" OutName="tex_002AF0" Format="rgba16" Width="16" Height="8" Offset="0x2AF0" />
<Texture Name="object_bigpo_Tex_002BF0" OutName="tex_002BF0" Format="rgba16" Width="16" Height="16" Offset="0x2BF0" />
<Texture Name="object_bigpo_Tex_002DF0" OutName="tex_002DF0" Format="rgba16" Width="16" Height="16" Offset="0x2DF0" />
<Animation Name="gBigpoSwingLampAttackAnim" Offset="0x158" />
<Animation Name="gBigpoShockAnim" Offset="0x454" />
<Animation Name="gBigpoBackpeddleAnim" Offset="0x608" />
<Animation Name="gBigpoFloatAnim" Offset="0x924" />
<Animation Name="gBigpoAwakenSpawnAnim" Offset="0xF9C" />
<Animation Name="gBigpoAwakenStretchAnim" Offset="0x1360" />
<Texture Name="gBigpoSoulFace" OutName="bigpo_soul_face" Format="i8" Width="32" Height="64" Offset="0x1370" />
<DList Name="gBigpoDrawSoulDL" Offset="0x1BB0" />
<Texture Name="gBigpoNecklaceSkullHalfTex" OutName="bigpo_skull_necklace" Format="rgba16" Width="16" Height="16" Offset="0x1C70" />
<Texture Name="gBigpoLanternGlassTex" OutName="bigpo_lantern_glass" Format="rgba16" Width="16" Height="16" Offset="0x1E70" />
<Texture Name="gBigpoTornRobeTex" OutName="bigpo_torn_robe" Format="rgba16" Width="32" Height="32" Offset="0x2070" />
<Texture Name="gBigpoArmSectionTex" OutName="bigpo_arm_section" Format="rgba16" Width="16" Height="16" Offset="0x2870" />
<Texture Name="gBigpoHoodEdge" OutName="bigpo_hood_edge" Format="rgba16" Width="8" Height="8" Offset="0x2A70" />
<Texture Name="gBigpoNecklaceBeadsTex" OutName="bigpo_necklace_beads" Format="rgba16" Width="16" Height="8" Offset="0x2AF0" />
<Texture Name="gBigpoShawlTex" OutName="bigpo_shawl" Format="rgba16" Width="16" Height="16" Offset="0x2BF0" />
<Texture Name="gBigpoGlowingEyeTex" OutName="bigpo_glowing_eye" Format="rgba16" Width="16" Height="16" Offset="0x2DF0" />
<!-- <Blob Name="object_bigpo_Blob_003200" Size="0x350" Offset="0x3200" /> -->
<!-- <Blob Name="object_bigpo_Blob_003790" Size="0x370" Offset="0x3790" /> -->
<DList Name="object_bigpo_DL_0041A0" Offset="0x41A0" />
<DList Name="object_bigpo_DL_0042C8" Offset="0x42C8" />
<DList Name="object_bigpo_DL_0043F8" Offset="0x43F8" />
<DList Name="object_bigpo_DL_004488" Offset="0x4488" />
<DList Name="object_bigpo_DL_004538" Offset="0x4538" />
<DList Name="object_bigpo_DL_0045D8" Offset="0x45D8" />
<DList Name="object_bigpo_DL_004680" Offset="0x4680" />
<DList Name="object_bigpo_DL_004768" Offset="0x4768" />
<DList Name="object_bigpo_DL_004808" Offset="0x4808" />
<DList Name="object_bigpo_DL_004AE8" Offset="0x4AE8" />
<DList Name="object_bigpo_DL_004BD8" Offset="0x4BD8" />
<Texture Name="object_bigpo_Tex_004C98" OutName="tex_004C98" Format="rgba16" Width="16" Height="16" Offset="0x4C98" />
<Texture Name="object_bigpo_Tex_004E98" OutName="tex_004E98" Format="rgba16" Width="8" Height="8" Offset="0x4E98" />
<DList Name="object_bigpo_DL_0058B8" Offset="0x58B8" />
<Limb Name="object_bigpo_Standardlimb_005B88" Type="Standard" Offset="0x5B88" />
<Limb Name="object_bigpo_Standardlimb_005B94" Type="Standard" Offset="0x5B94" />
<Limb Name="object_bigpo_Standardlimb_005BA0" Type="Standard" Offset="0x5BA0" />
<Limb Name="object_bigpo_Standardlimb_005BAC" Type="Standard" Offset="0x5BAC" />
<Limb Name="object_bigpo_Standardlimb_005BB8" Type="Standard" Offset="0x5BB8" />
<Limb Name="object_bigpo_Standardlimb_005BC4" Type="Standard" Offset="0x5BC4" />
<Limb Name="object_bigpo_Standardlimb_005BD0" Type="Standard" Offset="0x5BD0" />
<Limb Name="object_bigpo_Standardlimb_005BDC" Type="Standard" Offset="0x5BDC" />
<Limb Name="object_bigpo_Standardlimb_005BE8" Type="Standard" Offset="0x5BE8" />
<Skeleton Name="object_bigpo_Skel_005C18" Type="Normal" LimbType="Standard" Offset="0x5C18" />
<DList Name="gBigpoDrawLanternFallingDL" Offset="0x41A0" />
<DList Name="gBigpoDrawLanternMainDL" Offset="0x42C8" />
<DList Name="gBigpoDrawLanternPurpleTopDL" Offset="0x43F8" />
<DList Name="gBigpoDrawHandDL" Offset="0x4488" />
<DList Name="gBigpoDrawSmallArmDL" Offset="0x4538" />
<DList Name="gBigpoDrawBigArmDL" Offset="0x45D8" />
<DList Name="gBigpoDrawArmAndGrowthDL" Offset="0x4680" />
<DList Name="gBigpoDrawMediumArmDL" Offset="0x4768" />
<DList Name="gBigpoDrawNecklaceHoodShawlDL" Offset="0x4808" />
<DList Name="gBigpoDrawFaceDL" Offset="0x4AE8" />
<DList Name="gBigpoDrawLowerRobeDL" Offset="0x4BD8" />
<Texture Name="gBigpoCrispyPiecesTex" OutName="bigpo_crispy_pieces" Format="rgba16" Width="16" Height="16" Offset="0x4C98" />
<Texture Name="gBigpoCrispyEyesTex" OutName="bigpo_crispy_eyes" Format="rgba16" Width="8" Height="8" Offset="0x4E98" />
<DList Name="gBigpoDrawCrispyBodyDL" Offset="0x58B8" />
<Limb Name="gBigpoFaceLimb" Type="Standard" Offset="0x5B88" />
<Limb Name="gBigpoLeftArmUpperLimb" Type="Standard" Offset="0x5B94" />
<Limb Name="gBigpoLeftForarmLimb" Type="Standard" Offset="0x5BA0" />
<Limb Name="gBigpoRightArmUpperLimb" Type="Standard" Offset="0x5BAC" />
<Limb Name="gBigpoRightForarmLimb" Type="Standard" Offset="0x5BB8" />
<Limb Name="gBigpoRightHandLimb" Type="Standard" Offset="0x5BC4" />
<Limb Name="gBigpoLanternLimb" Type="Standard" Offset="0x5BD0" />
<Limb Name="gBigpoHatAndCloakLimb" Type="Standard" Offset="0x5BDC" />
<Limb Name="gBigpoLowerRobe" Type="Standard" Offset="0x5BE8" />
<Skeleton Name="gBigpoSkeleton" Type="Normal" LimbType="Standard" Offset="0x5C18" />
</File>
</Root>
+126 -110
View File
@@ -1,114 +1,130 @@
<Root>
<File Name="object_bigslime" Segment="6">
<Animation Name="object_bigslime_Anim_000994" Offset="0x994" />
<Animation Name="object_bigslime_Anim_0010F4" Offset="0x10F4" />
<Animation Name="object_bigslime_Anim_001B08" Offset="0x1B08" />
<Animation Name="object_bigslime_Anim_001E14" Offset="0x1E14" />
<Animation Name="object_bigslime_Anim_001F20" Offset="0x1F20" />
<Animation Name="object_bigslime_Anim_00225C" Offset="0x225C" />
<Animation Name="object_bigslime_Anim_00276C" Offset="0x276C" />
<Animation Name="object_bigslime_Anim_002E0C" Offset="0x2E0C" />
<Animation Name="object_bigslime_Anim_0030E4" Offset="0x30E4" />
<Animation Name="object_bigslime_Anim_00347C" Offset="0x347C" />
<Animation Name="object_bigslime_Anim_0039C4" Offset="0x39C4" />
<Animation Name="object_bigslime_Anim_003F28" Offset="0x3F28" />
<Animation Name="object_bigslime_Anim_004298" Offset="0x4298" />
<Animation Name="object_bigslime_Anim_004680" Offset="0x4680" />
<Animation Name="object_bigslime_Anim_004894" Offset="0x4894" />
<Animation Name="object_bigslime_Anim_004D50" Offset="0x4D50" />
<Animation Name="object_bigslime_Anim_0050B8" Offset="0x50B8" />
<Animation Name="object_bigslime_Anim_0052EC" Offset="0x52EC" />
<Animation Name="object_bigslime_Anim_005694" Offset="0x5694" />
<Animation Name="object_bigslime_Anim_005D54" Offset="0x5D54" />
<Animation Name="object_bigslime_Anim_0066B4" Offset="0x66B4" />
<Animation Name="object_bigslime_Anim_0069FC" Offset="0x69FC" />
<Animation Name="object_bigslime_Anim_0070C4" Offset="0x70C4" />
<Animation Name="object_bigslime_Anim_007790" Offset="0x7790" />
<DList Name="object_bigslime_DL_009D90" Offset="0x9D90" />
<DList Name="object_bigslime_DL_009FF0" Offset="0x9FF0" />
<DList Name="object_bigslime_DL_00A250" Offset="0xA250" />
<DList Name="object_bigslime_DL_00A510" Offset="0xA510" />
<DList Name="object_bigslime_DL_00AAF8" Offset="0xAAF8" />
<DList Name="object_bigslime_DL_00ABB0" Offset="0xABB0" />
<DList Name="object_bigslime_DL_00AC78" Offset="0xAC78" />
<DList Name="object_bigslime_DL_00AD88" Offset="0xAD88" />
<DList Name="object_bigslime_DL_00AE98" Offset="0xAE98" />
<DList Name="object_bigslime_DL_00AF50" Offset="0xAF50" />
<DList Name="object_bigslime_DL_00B030" Offset="0xB030" />
<DList Name="object_bigslime_DL_00B140" Offset="0xB140" />
<DList Name="object_bigslime_DL_00B250" Offset="0xB250" />
<DList Name="object_bigslime_DL_00B4D8" Offset="0xB4D8" />
<DList Name="object_bigslime_DL_00B660" Offset="0xB660" />
<DList Name="object_bigslime_DL_00B770" Offset="0xB770" />
<DList Name="object_bigslime_DL_00B880" Offset="0xB880" />
<DList Name="object_bigslime_DL_00B9A8" Offset="0xB9A8" />
<DList Name="object_bigslime_DL_00BB30" Offset="0xBB30" />
<DList Name="object_bigslime_DL_00BC40" Offset="0xBC40" />
<DList Name="object_bigslime_DL_00BD50" Offset="0xBD50" />
<DList Name="object_bigslime_DL_00BE78" Offset="0xBE78" />
<Texture Name="object_bigslime_TLUT_00C028" OutName="tlut_00C028" Format="rgba16" Width="16" Height="16" Offset="0xC028" />
<Texture Name="object_bigslime_TLUT_00C228" OutName="tlut_00C228" Format="rgba16" Width="16" Height="16" Offset="0xC228" />
<Texture Name="object_bigslime_TLUT_00C428" OutName="tlut_00C428" Format="rgba16" Width="16" Height="16" Offset="0xC428" />
<Texture Name="object_bigslime_Tex_00C628" OutName="tex_00C628" Format="rgba16" Width="8" Height="8" Offset="0xC628" />
<Texture Name="object_bigslime_Tex_00C6A8" OutName="tex_00C6A8" Format="rgba16" Width="16" Height="16" Offset="0xC6A8" />
<Texture Name="object_bigslime_Tex_00C8A8" OutName="tex_00C8A8" Format="rgba16" Width="16" Height="16" Offset="0xC8A8" />
<Texture Name="object_bigslime_Tex_00CAA8" OutName="tex_00CAA8" Format="rgba16" Width="16" Height="32" Offset="0xCAA8" />
<Texture Name="object_bigslime_Tex_00CEA8" OutName="tex_00CEA8" Format="ci8" Width="16" Height="32" Offset="0xCEA8" />
<Texture Name="object_bigslime_Tex_00D0A8" OutName="tex_00D0A8" Format="rgba16" Width="16" Height="16" Offset="0xD0A8" />
<Texture Name="object_bigslime_Tex_00D2A8" OutName="tex_00D2A8" Format="rgba16" Width="16" Height="8" Offset="0xD2A8" />
<Texture Name="object_bigslime_Tex_00D3A8" OutName="tex_00D3A8" Format="rgba16" Width="8" Height="8" Offset="0xD3A8" />
<Texture Name="object_bigslime_Tex_00D428" OutName="tex_00D428" Format="rgba16" Width="32" Height="16" Offset="0xD428" />
<Texture Name="object_bigslime_Tex_00D828" OutName="tex_00D828" Format="ci8" Width="32" Height="32" Offset="0xD828" />
<Texture Name="object_bigslime_Tex_00DC28" OutName="tex_00DC28" Format="ci8" Width="16" Height="32" Offset="0xDC28" />
<Limb Name="object_bigslime_Standardlimb_00DE28" Type="Standard" Offset="0xDE28" />
<Limb Name="object_bigslime_Standardlimb_00DE34" Type="Standard" Offset="0xDE34" />
<Limb Name="object_bigslime_Standardlimb_00DE40" Type="Standard" Offset="0xDE40" />
<Limb Name="object_bigslime_Standardlimb_00DE4C" Type="Standard" Offset="0xDE4C" />
<Limb Name="object_bigslime_Standardlimb_00DE58" Type="Standard" Offset="0xDE58" />
<Limb Name="object_bigslime_Standardlimb_00DE64" Type="Standard" Offset="0xDE64" />
<Limb Name="object_bigslime_Standardlimb_00DE70" Type="Standard" Offset="0xDE70" />
<Limb Name="object_bigslime_Standardlimb_00DE7C" Type="Standard" Offset="0xDE7C" />
<Limb Name="object_bigslime_Standardlimb_00DE88" Type="Standard" Offset="0xDE88" />
<Limb Name="object_bigslime_Standardlimb_00DE94" Type="Standard" Offset="0xDE94" />
<Limb Name="object_bigslime_Standardlimb_00DEA0" Type="Standard" Offset="0xDEA0" />
<Limb Name="object_bigslime_Standardlimb_00DEAC" Type="Standard" Offset="0xDEAC" />
<Limb Name="object_bigslime_Standardlimb_00DEB8" Type="Standard" Offset="0xDEB8" />
<Limb Name="object_bigslime_Standardlimb_00DEC4" Type="Standard" Offset="0xDEC4" />
<Limb Name="object_bigslime_Standardlimb_00DED0" Type="Standard" Offset="0xDED0" />
<Limb Name="object_bigslime_Standardlimb_00DEDC" Type="Standard" Offset="0xDEDC" />
<Limb Name="object_bigslime_Standardlimb_00DEE8" Type="Standard" Offset="0xDEE8" />
<Limb Name="object_bigslime_Standardlimb_00DEF4" Type="Standard" Offset="0xDEF4" />
<Limb Name="object_bigslime_Standardlimb_00DF00" Type="Standard" Offset="0xDF00" />
<Limb Name="object_bigslime_Standardlimb_00DF0C" Type="Standard" Offset="0xDF0C" />
<Limb Name="object_bigslime_Standardlimb_00DF18" Type="Standard" Offset="0xDF18" />
<Limb Name="object_bigslime_Standardlimb_00DF24" Type="Standard" Offset="0xDF24" />
<Limb Name="object_bigslime_Standardlimb_00DF30" Type="Standard" Offset="0xDF30" />
<Skeleton Name="object_bigslime_Skel_00DF98" Type="Flex" LimbType="Standard" Offset="0xDF98" />
<Animation Name="object_bigslime_Anim_00F048" Offset="0xF048" />
<Animation Name="object_bigslime_Anim_00F3F0" Offset="0xF3F0" />
<Animation Name="object_bigslime_Anim_00F990" Offset="0xF990" />
<DList Name="object_bigslime_DL_00F9D0" Offset="0xF9D0" />
<DList Name="object_bigslime_DL_00FB40" Offset="0xFB40" />
<Texture Name="object_bigslime_Tex_00FC28" OutName="tex_00FC28" Format="i4" Width="32" Height="64" Offset="0xFC28" />
<!-- <Blob Name="object_bigslime_zeroes_unk_00010028" Size="0x400" Offset="0x10028" /> -->
<Texture Name="object_bigslime_Tex_010428" OutName="tex_010428" Format="i4" Width="16" Height="16" Offset="0x10428" />
<!-- <Blob Name="object_bigslime_zeroes_unk_000104A8" Size="0x88" Offset="0x104A8" /> -->
<DList Name="object_bigslime_DL_010530" Offset="0x10530" />
<DList Name="object_bigslime_DL_0105E8" Offset="0x105E8" />
<DList Name="object_bigslime_DL_010B80" Offset="0x10B80" />
<TextureAnimation Name="object_bigslime_Matanimheader_010C48" Offset="0x10C48" />
<DList Name="object_bigslime_DL_010DB0" Offset="0x10DB0" />
<TextureAnimation Name="object_bigslime_Matanimheader_010EC8" Offset="0x10EC8" />
<DList Name="object_bigslime_DL_010F20" Offset="0x10F20" />
<DList Name="object_bigslime_DL_010FE0" Offset="0x10FE0" />
<TextureAnimation Name="object_bigslime_Matanimheader_011008" Offset="0x11008" />
<DList Name="object_bigslime_DL_011050" Offset="0x11050" />
<DList Name="object_bigslime_DL_0113B0" Offset="0x113B0" />
<Texture Name="object_bigslime_Tex_011580" OutName="tex_011580" Format="i4" Width="16" Height="16" Offset="0x11580" />
<Texture Name="object_bigslime_Tex_011600" OutName="tex_011600" Format="i8" Width="32" Height="32" Offset="0x11600" />
<Texture Name="object_bigslime_Tex_011A00" OutName="tex_011A00" Format="rgba16" Width="32" Height="32" Offset="0x11A00" />
<Texture Name="object_bigslime_Tex_012200" OutName="tex_012200" Format="i4" Width="64" Height="64" Offset="0x12200" />
<Texture Name="object_bigslime_Tex_012A00" OutName="tex_012A00" Format="i4" Width="64" Height="64" Offset="0x12A00" />
<Texture Name="object_bigslime_Tex_013200" OutName="tex_013200" Format="i4" Width="32" Height="32" Offset="0x13200" />
<Animation Name="gGekkoFullFistPumpAnim" Offset="0x994" />
<Animation Name="gGekkoSurpriseJumpAnim" Offset="0x10F4" />
<Animation Name="gGekkoCallAnim" Offset="0x1B08" />
<Animation Name="gGekkoCrawlAnim" Offset="0x1E14" />
<Animation Name="gGekkoFallInAirAnim" Offset="0x1F20" />
<Animation Name="gGekkoFloorIdleAnim" Offset="0x225C" />
<Animation Name="gGekkoDamagedAnim" Offset="0x276C" />
<Animation Name="gGekkoJumpUpAnim" Offset="0x2E0C" />
<Animation Name="gGekkoRecoverAnim" Offset="0x30E4" />
<Animation Name="gGekkoJabPunchAnim" Offset="0x347C" />
<Animation Name="gGekkoJumpForwardAnim" Offset="0x39C4" />
<Animation Name="gGekkoKickAnim" Offset="0x3F28" />
<Animation Name="gGekkoFallOnGroundAnim" Offset="0x4298" />
<Animation Name="gGekkoStandingIdleAnim" Offset="0x4680" />
<Animation Name="gGekkoJumpOnSnapperAnim" Offset="0x4894" />
<Animation Name="gGekkoQuickFistPumpAnim" Offset="0x4D50" />
<Animation Name="gGekkoSqueezeAnim" Offset="0x50B8" />
<Animation Name="gGekkoLandOnSnapperAnim" Offset="0x52EC" />
<Animation Name="gGekkoWiggleAnim" Offset="0x5694" />
<Animation Name="gGekkoKnockbackAnim" Offset="0x5D54" />
<Animation Name="gGekkoLookAroundAnim" Offset="0x66B4" />
<Animation Name="gGekkoNervousIdleAnim" Offset="0x69FC" />
<Animation Name="gGekkoHookPunchAnim" Offset="0x70C4" />
<Animation Name="gGekkoSwimForwardAnim" Offset="0x7790" />
<DList Name="gGekkoRightEyeDL" Offset="0x9D90" />
<DList Name="gGekkoLeftEyeDL" Offset="0x9FF0" />
<DList Name="gGekkoJawDL" Offset="0xA250" />
<DList Name="gGekkoHeadDL" Offset="0xA510" />
<DList Name="gGekkoRightHandDL" Offset="0xAAF8" />
<DList Name="gGekkoRightWristDL" Offset="0xABB0" />
<DList Name="gGekkoRightForearmDL" Offset="0xAC78" />
<DList Name="gGekkoRightUpperArmDL" Offset="0xAD88" />
<DList Name="gGekkoLeftHandDL" Offset="0xAE98" />
<DList Name="gGekkoLeftWristDL" Offset="0xAF50" />
<DList Name="gGekkoLeftForearmDL" Offset="0xB030" />
<DList Name="gGekkoLeftUpperArmDL" Offset="0xB140" />
<DList Name="gGekkoTorsoDL" Offset="0xB250" />
<DList Name="gGekkoRightFootDL" Offset="0xB4D8" />
<DList Name="gGekkoRightAnkleDL" Offset="0xB660" />
<DList Name="gGekkoRightShinDL" Offset="0xB770" />
<DList Name="gGekkoRightThighDL" Offset="0xB880" />
<DList Name="gGekkoLeftFootDL" Offset="0xB9A8" />
<DList Name="gGekkoLeftAnkleDL" Offset="0xBB30" />
<DList Name="gGekkoLeftShinDL" Offset="0xBC40" />
<DList Name="gGekkoLeftThighDL" Offset="0xBD50" />
<DList Name="gGekkoWaistDL" Offset="0xBE78" />
<Texture Name="gGekkoArmLegTLUT" OutName="gekko_arm_leg_tlut" Format="rgba16" Width="16" Height="16" Offset="0xC028" />
<Texture Name="gGekkoBodyTLUT" OutName="gekko_body_tlut" Format="rgba16" Width="16" Height="16" Offset="0xC228" />
<Texture Name="gGekkoHeadTLUT" OutName="gekko_head_tlut" Format="rgba16" Width="16" Height="16" Offset="0xC428" />
<Texture Name="gGekkoNostrilTex" OutName="gekko_nostril" Format="rgba16" Width="8" Height="8" Offset="0xC628" />
<Texture Name="gGekkoEyeTex" OutName="gekko_eye" Format="rgba16" Width="16" Height="16" Offset="0xC6A8" />
<Texture Name="gGekkoSpots1Tex" OutName="gekko_spots_1" Format="rgba16" Width="16" Height="16" Offset="0xC8A8" />
<Texture Name="gGekkoBellyTex" OutName="gekko_belly" Format="rgba16" Width="16" Height="32" Offset="0xCAA8" />
<Texture Name="gGekkoSpots2Tex" OutName="gekko_spots_2" Format="ci8" Width="16" Height="32" Offset="0xCEA8" />
<Texture Name="gGekkoToothTex" OutName="gekko_tooth" Format="rgba16" Width="16" Height="16" Offset="0xD0A8" />
<Texture Name="gGekkoMouthTex" OutName="gekko_mouth" Format="rgba16" Width="16" Height="8" Offset="0xD2A8" />
<Texture Name="gGekkoEyebrowTex" OutName="gekko_eyebrow" Format="rgba16" Width="8" Height="8" Offset="0xD3A8" />
<Texture Name="gGekkoFinTex" OutName="gekko_fin" Format="rgba16" Width="32" Height="16" Offset="0xD428" />
<Texture Name="gGekkoSpots3Tex" OutName="gekko_spots_3" Format="ci8" Width="32" Height="32" Offset="0xD828" />
<Texture Name="gGekkoSwirlTex" OutName="gekko_swirl" Format="ci8" Width="16" Height="32" Offset="0xDC28" />
<Limb Name="gGekkoRootLimb" Type="Standard" Offset="0xDE28" />
<Limb Name="gGekkoWaistLimb" Type="Standard" Offset="0xDE34" />
<Limb Name="gGekkoLeftThighLimb" Type="Standard" Offset="0xDE40" />
<Limb Name="gGekkoLeftShinLimb" Type="Standard" Offset="0xDE4C" />
<Limb Name="gGekkoLeftAnkleLimb" Type="Standard" Offset="0xDE58" />
<Limb Name="gGekkoLeftFootLimb" Type="Standard" Offset="0xDE64" />
<Limb Name="gGekkoRightThighLimb" Type="Standard" Offset="0xDE70" />
<Limb Name="gGekkoRightShinLimb" Type="Standard" Offset="0xDE7C" />
<Limb Name="gGekkoRightAnkleLimb" Type="Standard" Offset="0xDE88" />
<Limb Name="gGekkoRightFootLimb" Type="Standard" Offset="0xDE94" />
<Limb Name="gGekkoTorsoLimb" Type="Standard" Offset="0xDEA0" />
<Limb Name="gGekkoLeftUpperArmLimb" Type="Standard" Offset="0xDEAC" />
<Limb Name="gGekkoLeftForearmLimb" Type="Standard" Offset="0xDEB8" />
<Limb Name="gGekkoLeftWristLimb" Type="Standard" Offset="0xDEC4" />
<Limb Name="gGekkoLeftHandLimb" Type="Standard" Offset="0xDED0" />
<Limb Name="gGekkoRightUpperArmLimb" Type="Standard" Offset="0xDEDC" />
<Limb Name="gGekkoRightForearmLimb" Type="Standard" Offset="0xDEE8" />
<Limb Name="gGekkoRightWristLimb" Type="Standard" Offset="0xDEF4" />
<Limb Name="gGekkoRightHandLimb" Type="Standard" Offset="0xDF00" />
<Limb Name="gGekkoHeadLimb" Type="Standard" Offset="0xDF0C" />
<Limb Name="gGekkoJawLimb" Type="Standard" Offset="0xDF18" />
<Limb Name="gGekkoLeftEyeLimb" Type="Standard" Offset="0xDF24" />
<Limb Name="gGekkoRightEyeLimb" Type="Standard" Offset="0xDF30" />
<Skeleton Name="gGekkoSkel" Type="Flex" LimbType="Standard" Offset="0xDF98" />
<Animation Name="gGekkoWindupPunchAnim" Offset="0xF048" />
<Animation Name="gGekkoSwimUpAnim" Offset="0xF3F0" />
<Animation Name="gGekkoBoxingStanceAnim" Offset="0xF990" />
<DList Name="gBigslimeBubbleDL" Offset="0xF9D0" />
<DList Name="gBigslimeShockwaveDL" Offset="0xFB40" />
<Texture Name="gBigslimeShockwave1Tex" OutName="bigslime_shockwave_1" Format="i4" Width="32" Height="64" Offset="0xFC28" />
<Blob Name="object_bigslime_zeroes_Blob_010028" Size="0x400" Offset="0x10028" />
<Texture Name="gBigslimeShockwave2Tex" OutName="bigslime_shockwave_2" Format="i4" Width="16" Height="16" Offset="0x10428" />
<Blob Name="object_bigslime_zeroes_Blob_0104A8" Size="0x88" Offset="0x104A8" />
<DList Name="gBigslimeNormalDL" Offset="0x10530" />
<!-- Reads vtx from segment 9 set by sBigslimeDynamicVtx -->
<DList Name="gBigslimeVtxDL" Offset="0x105E8" />
<!-- Reads vtx from segment 9 set by sBigslimeTargetVtx -->
<DList Name="gBigslimeFrozenVtxDL" Offset="0x10B80" />
<TextureAnimation Name="gBigslimeFrozenTexAnim" Offset="0x10C48" />
<DList Name="gMinislimeFrozenDL" Offset="0x10DB0" />
<TextureAnimation Name="gMinislimeFrozenTexAnim" Offset="0x10EC8" />
<DList Name="gBigslimeIceShardDL" Offset="0x10F20" />
<DList Name="gBigslimeIceShardVtxDL" Offset="0x10FE0" />
<TextureAnimation Name="gBigslimeIceShardTexAnim" Offset="0x11008" />
<DList Name="gBigslimeShadowDL" Offset="0x11050" />
<DList Name="gMinislimeNormalDL" Offset="0x113B0" />
<Texture Name="gBigslimeBubbleTex" OutName="bigslime_bubble" Format="i4" Width="16" Height="16" Offset="0x11580" />
<Texture Name="gBigslimeShadowTex" OutName="bigslime_shadow" Format="i8" Width="32" Height="32" Offset="0x11600" />
<!-- Used also for minislime -->
<Texture Name="gBigslimeNormal1Tex" OutName="bigslime_normal_1" Format="rgba16" Width="32" Height="32" Offset="0x11A00" />
<Texture Name="gBigslimeNormal2Tex" OutName="bigslime_normal_2" Format="i4" Width="64" Height="64" Offset="0x12200" />
<Texture Name="gBigslimeFrozen1Tex" OutName="bigslime_frozen_1" Format="i4" Width="64" Height="64" Offset="0x12A00" />
<Texture Name="gBigslimeFrozen2Tex" OutName="bigslime_frozen_2" Format="i4" Width="32" Height="32" Offset="0x13200" />
</File>
</Root>
+10 -3
View File
@@ -56,11 +56,18 @@
<Texture Name="object_cs_Tex_00C0A0" OutName="tex_00C0A0" Format="ci8" Width="8" Height="16" Offset="0xC0A0" />
<Texture Name="object_cs_Tex_00C120" OutName="tex_00C120" Format="i8" Width="16" Height="16" Offset="0xC120" />
<Texture Name="object_cs_Tex_00C220" OutName="tex_00C220" Format="ci8" Width="16" Height="16" Offset="0xC220" />
<!-- <Blob Name="object_cs_Blob_00C320" Size="0x1E00" Offset="0xC320" /> -->
<Blob Name="object_cs_Blob_00C320" Size="0x200" Offset="0xC320" />
<Texture Name="object_cs_Tex_00C520" OutName="tex_00C520" Format="rgba16" Width="32" Height="32" Offset="0xC520" />
<Texture Name="object_cs_Tex_00CD20" OutName="tex_00CD20" Format="rgba16" Width="32" Height="32" Offset="0xCD20" />
<Texture Name="object_cs_Tex_00D520" OutName="tex_00D520" Format="rgba16" Width="32" Height="32" Offset="0xD520" />
<Texture Name="object_cs_Tex_00DD20" OutName="tex_00DD20" Format="i8" Width="32" Height="32" Offset="0xDD20" />
<Texture Name="object_cs_Tex_00E120" OutName="tex_00E120" Format="i8" Width="16" Height="16" Offset="0xE120" />
<!-- <Blob Name="object_cs_Blob_00E220" Size="0x1400" Offset="0xE220" /> -->
<Blob Name="object_cs_Blob_00E220" Size="0x400" Offset="0xE220" />
<Texture Name="object_cs_Tex_00E620" OutName="tex_00E620" Format="i8" Width="32" Height="32" Offset="0xE620" />
<Texture Name="object_cs_Tex_00EA20" OutName="tex_00EA20" Format="i8" Width="32" Height="32" Offset="0xEA20" />
<Texture Name="object_cs_Tex_00EE20" OutName="tex_00EE20" Format="i8" Width="32" Height="32" Offset="0xEE20" />
<Texture Name="object_cs_Tex_00F220" OutName="tex_00F220" Format="i8" Width="32" Height="32" Offset="0xF220" />
<Texture Name="object_cs_Tex_00F620" OutName="tex_00F620" Format="i8" Width="8" Height="8" Offset="0xF620" />
<!-- <Blob Name="object_cs_Blob_00E220" Size="0x1400" Offset="0xE220" /> -->
<TextureAnimation Name="object_cs_Matanimheader_00F6E4" Offset="0xF6E4" />
<Limb Name="object_cs_Standardlimb_00F6EC" Type="Standard" Offset="0xF6EC" />
<Limb Name="object_cs_Standardlimb_00F6F8" Type="Standard" Offset="0xF6F8" />
+1 -1
View File
@@ -13,7 +13,7 @@
<Animation Name="object_dnt_Anim_003438" Offset="0x3438" />
<Animation Name="object_dnt_Anim_0038CC" Offset="0x38CC" />
<Animation Name="object_dnt_Anim_003CC0" Offset="0x3CC0" />
<!-- <Blob Name="object_dnt_Blob_003CD0" Size="0x10" Offset="0x3CD0" /> -->
<Blob Name="object_dnt_Blob_003CD0" Size="0x10" Offset="0x3CD0" />
<Animation Name="object_dnt_Anim_004700" Offset="0x4700" />
<Animation Name="object_dnt_Anim_004AA0" Offset="0x4AA0" />
<Animation Name="object_dnt_Anim_004E38" Offset="0x4E38" />
+11 -9
View File
@@ -1,13 +1,15 @@
<Root>
<File Name="object_gmo" Segment="6">
<Animation Name="object_gmo_Anim_000018" Offset="0x18" />
<DList Name="object_gmo_DL_000B70" Offset="0xB70" />
<DList Name="object_gmo_DL_000E38" Offset="0xE38" />
<Texture Name="object_gmo_TLUT_000EC8" OutName="tlut_000EC8" Format="rgba16" Width="16" Height="16" Offset="0xEC8" />
<Texture Name="object_gmo_Tex_0010C8" OutName="tex_0010C8" Format="ci8" Width="32" Height="32" Offset="0x10C8" />
<!-- <Blob Name="object_gmo_Blob_0014C8" Size="0xC00" Offset="0x14C8" /> -->
<Limb Name="object_gmo_Standardlimb_0020C8" Type="Standard" Offset="0x20C8" />
<Limb Name="object_gmo_Standardlimb_0020D4" Type="Standard" Offset="0x20D4" />
<Skeleton Name="object_gmo_Skel_0020E8" Type="Normal" LimbType="Standard" Offset="0x20E8" />
<Animation Name="gNejironIdleAnim" Offset="0x18" /> <!-- Original name might be "gm_default" -->
<DList Name="gNejironBodyDL" Offset="0xB70" />
<DList Name="gNejironEyesDL" Offset="0xE38" />
<Texture Name="gNejironBodyTLUT" OutName="nejiron_body_palette" Format="rgba16" Width="16" Height="16" Offset="0xEC8" />
<Texture Name="gNejironBodyTex" OutName="nejiron_body" Format="ci8" Width="32" Height="32" Offset="0x10C8" />
<Texture Name="gNejironEyeOpenTex" OutName="nejiron_eye_open" Format="rgba16" Width="16" Height="32" Offset="0x14C8" />
<Texture Name="gNejironEyeHalfTex" OutName="nejiron_eye_half" Format="rgba16" Width="16" Height="32" Offset="0x18C8" />
<Texture Name="gNejironEyeClosedTex" OutName="nejiron_eye_closed" Format="rgba16" Width="16" Height="32" Offset="0x1CC8" />
<Limb Name="gNejironBodyLimb" Type="Standard" Offset="0x20C8" />
<Limb Name="gNejironEyeLimb" Type="Standard" Offset="0x20D4" />
<Skeleton Name="gNejironSkel" Type="Normal" LimbType="Standard" Offset="0x20E8" />
</File>
</Root>
+26 -24
View File
@@ -1,28 +1,30 @@
<Root>
<File Name="object_mag" Segment="6">
<Texture Name="object_mag_Tex_000000" OutName="tex_000000" Format="rgba32" Width="144" Height="64" Offset="0x0" />
<Texture Name="object_mag_Tex_009000" OutName="tex_009000" Format="i8" Width="104" Height="16" Offset="0x9000" />
<Texture Name="object_mag_Tex_009680" OutName="tex_009680" Format="i8" Width="104" Height="16" Offset="0x9680" />
<Texture Name="object_mag_Tex_009D00" OutName="tex_009D00" Format="i8" Width="72" Height="8" Offset="0x9D00" />
<Texture Name="object_mag_Tex_009F40" OutName="tex_009F40" Format="i4" Width="64" Height="64" Offset="0x9F40" />
<Texture Name="object_mag_Tex_00A740" OutName="tex_00A740" Format="i4" Width="64" Height="64" Offset="0xA740" />
<Texture Name="object_mag_Tex_00AF40" OutName="tex_00AF40" Format="i4" Width="64" Height="64" Offset="0xAF40" />
<Texture Name="object_mag_Tex_00B740" OutName="tex_00B740" Format="i4" Width="64" Height="64" Offset="0xB740" />
<Texture Name="object_mag_Tex_00BF40" OutName="tex_00BF40" Format="i4" Width="64" Height="64" Offset="0xBF40" />
<Texture Name="object_mag_Tex_00C740" OutName="tex_00C740" Format="i4" Width="64" Height="64" Offset="0xC740" />
<Texture Name="object_mag_Tex_00CF40" OutName="tex_00CF40" Format="i4" Width="64" Height="64" Offset="0xCF40" />
<Texture Name="object_mag_Tex_00D740" OutName="tex_00D740" Format="i4" Width="64" Height="64" Offset="0xD740" />
<Texture Name="object_mag_Tex_00DF40" OutName="tex_00DF40" Format="i4" Width="64" Height="64" Offset="0xDF40" />
<Texture Name="object_mag_Tex_00E740" OutName="tex_00E740" Format="i4" Width="64" Height="64" Offset="0xE740" />
<Texture Name="object_mag_Tex_00EF40" OutName="tex_00EF40" Format="i4" Width="64" Height="64" Offset="0xEF40" />
<Texture Name="object_mag_Tex_00F740" OutName="tex_00F740" Format="i4" Width="64" Height="64" Offset="0xF740" />
<Texture Name="object_mag_Tex_00FF40" OutName="tex_00FF40" Format="i8" Width="32" Height="32" Offset="0xFF40" />
<Texture Name="object_mag_Tex_010340" OutName="tex_010340" Format="i8" Width="32" Height="32" Offset="0x10340" />
<Texture Name="object_mag_Tex_010740" OutName="tex_010740" Format="i8" Width="32" Height="32" Offset="0x10740" />
<Texture Name="object_mag_Tex_010B40" OutName="tex_010B40" Format="i8" Width="32" Height="32" Offset="0x10B40" />
<Texture Name="object_mag_Tex_010F40" OutName="tex_010F40" Format="ia8" Width="128" Height="16" Offset="0x10F40" />
<Texture Name="object_mag_Tex_011740" OutName="tex_011740" Format="i4" Width="256" Height="9" Offset="0x11740" />
<Texture Name="object_mag_Tex_011BC0" OutName="tex_011BC0" Format="i4" Width="144" Height="9" Offset="0x11BC0" />
<Texture Name="object_mag_Tex_011E48" OutName="tex_011E48" Format="rgba32" Width="128" Height="112" Offset="0x11E48" />
<Texture Name="gTitleScreenZeldaLogoTex" OutName="title_screen_zelda_logo" Format="rgba32" Width="144" Height="64" Offset="0x0"/>
<Texture Name="gTitleScreenMajorasMaskSubtitleTex" OutName="title_screen_majoras_mask_subtitle" Format="i8" Width="104" Height="16" Offset="0x9000"/>
<Texture Name="gTitleScreenMajorasMaskSubtitleMaskTex" OutName="title_screen_majoras_mask_subtitle_mask" Format="i8" Width="104" Height="16" Offset="0x9680"/><!-- Masking the flame effect -->
<Texture Name="gTitleScreenTheLegendOfTextTex" OutName="title_screen_the_legend_of_text" Format="i8" Width="72" Height="8" Offset="0x9D00"/>
<Texture Name="gTitleScreenMaskGlowDim00Tex" OutName="title_screen_mask_glow_dim_0_0" Format="i4" Width="64" Height="64" Offset="0x9F40"/>
<Texture Name="gTitleScreenMaskGlowDim01Tex" OutName="title_screen_mask_glow_dim_0_1" Format="i4" Width="64" Height="64" Offset="0xA740"/>
<Texture Name="gTitleScreenMaskGlowDim10Tex" OutName="title_screen_mask_glow_dim_1_0" Format="i4" Width="64" Height="64" Offset="0xAF40"/>
<Texture Name="gTitleScreenMaskGlowDim11Tex" OutName="title_screen_mask_glow_dim_1_1" Format="i4" Width="64" Height="64" Offset="0xB740"/>
<Texture Name="gTitleScreenZeldaGlow0Tex" OutName="title_screen_zelda_glow_0" Format="i4" Width="64" Height="64" Offset="0xBF40"/>
<Texture Name="gTitleScreenZeldaGlow1Tex" OutName="title_screen_zelda_glow_1" Format="i4" Width="64" Height="64" Offset="0xC740"/>
<Texture Name="gTitleScreenMaskGlowBright00Tex" OutName="title_screen_mask_glow_bright_0_0" Format="i4" Width="64" Height="64" Offset="0xCF40"/>
<Texture Name="gTitleScreenMaskGlowBright01Tex" OutName="title_screen_mask_glow_bright_0_1" Format="i4" Width="64" Height="64" Offset="0xD740"/>
<Texture Name="gTitleScreenMaskGlowBright10Tex" OutName="title_screen_mask_glow_bright_1_0" Format="i4" Width="64" Height="64" Offset="0xDF40"/>
<Texture Name="gTitleScreenMaskGlowBright11Tex" OutName="title_screen_mask_glow_bright_1_1" Format="i4" Width="64" Height="64" Offset="0xE740"/>
<Texture Name="gTitleScreenGlowRight0Tex" OutName="title_screen_glow_right_0" Format="i4" Width="64" Height="64" Offset="0xEF40"/>
<Texture Name="gTitleScreenGlowRight1Tex" OutName="title_screen_glow_right_1" Format="i4" Width="64" Height="64" Offset="0xF740"/>
<Texture Name="gTitleScreenFlame0Tex" OutName="title_screen_flame_0" Format="i8" Width="32" Height="32" Offset="0xFF40"/>
<Texture Name="gTitleScreenFlame1Tex" OutName="title_screen_flame_1" Format="i8" Width="32" Height="32" Offset="0x10340"/>
<Texture Name="gTitleScreenFlame2Tex" OutName="title_screen_flame_2" Format="i8" Width="32" Height="32" Offset="0x10740"/>
<Texture Name="gTitleScreenFlame3Tex" OutName="title_screen_flame_3" Format="i8" Width="32" Height="32" Offset="0x10B40"/>
<Texture Name="gTitleScreenCopyright2000NintendoTex" OutName="title_screen_copyright_2000_nintendo_text" Format="i8" Width="128" Height="16" Offset="0x10F40"/>
<Texture Name="gTitleScreenControllerNotConnectedTextTex" OutName="title_screen_controller_not_connected_text" Format="i4" Width="256" Height="9" Offset="0x11740"/>
<Texture Name="gTitleScreenInsertControllerTextTex" OutName="title_screen_insert_controller_text" Format="i4" Width="144" Height="9" Offset="0x11BC0"/>
<Texture Name="gTitleScreenMajorasMaskTex" OutName="title_screen_majoras_mask" Format="rgba32" Width="128" Height="112" Offset="0x11E48"/>
</File>
</Root>
+4 -4
View File
@@ -1,8 +1,8 @@
<Root>
<File Name="object_tokei_step" Segment="6">
<DList Name="object_tokei_step_DL_000080" Offset="0x80" />
<DList Name="object_tokei_step_DL_000088" Offset="0x88" />
<Texture Name="object_tokei_step_Tex_000120" OutName="tex_000120" Format="rgba16" Width="32" Height="32" Offset="0x120" />
<Collision Name="object_tokei_step_Colheader_000968" Offset="0x968" />
<DList Name="gClocktowerPanelEmptyDL" Offset="0x80" />
<DList Name="gClocktowerPanelDL" Offset="0x88" />
<Texture Name="gClocktowerPanelTex" OutName="clocktower_panel" Format="rgba16" Width="32" Height="32" Offset="0x120" />
<Collision Name="gClocktowerPanelCol" Offset="0x968" />
</File>
</Root>
+1 -1
View File
@@ -54,6 +54,6 @@
<Texture Name="object_warp1_TLUT_0078C0" OutName="tlut_0078C0" Format="rgba16" Width="4" Height="4" Offset="0x78C0" />
<Texture Name="object_warp1_Tex_0078E0" OutName="tex_0078E0" Format="ci4" Width="64" Height="64" Offset="0x78E0" />
<Texture Name="object_warp1_Tex_0080E0" OutName="tex_0080E0" Format="ci4" Width="64" Height="64" Offset="0x80E0" />
<!-- <Blob Name="object_warp1_Blob_0088E0" Size="0x320" Offset="0x88E0" /> -->
<Collision Name="object_warp1_Colheader_008BD4" Offset="0x8BD4" />
</File>
</Root>
+6 -1
View File
@@ -74,7 +74,12 @@
<Texture Name="object_zog_Tex_024150" OutName="tex_024150" Format="rgba16" Width="16" Height="16" Offset="0x24150" />
<Texture Name="object_zog_Tex_024350" OutName="tex_024350" Format="ci8" Width="16" Height="32" Offset="0x24350" />
<Texture Name="object_zog_Tex_024550" OutName="tex_024550" Format="ci8" Width="16" Height="32" Offset="0x24550" />
<!-- <Blob Name="object_zog_Blob_024750" Size="0x2800" Offset="0x24750" /> -->
<Texture Name="object_zog_Tex_024750" OutName="tex_024750" Format="rgba16" Width="32" Height="32" Offset="0x24750" />
<Texture Name="object_zog_Tex_024F50" OutName="tex_024F50" Format="rgba16" Width="32" Height="32" Offset="0x24F50" />
<Texture Name="object_zog_Tex_025750" OutName="tex_025750" Format="rgba16" Width="32" Height="32" Offset="0x25750" />
<Texture Name="object_zog_Tex_025F50" OutName="tex_025F50" Format="rgba16" Width="32" Height="32" Offset="0x25F50" />
<Texture Name="object_zog_Tex_026750" OutName="tex_026750" Format="rgba16" Width="32" Height="32" Offset="0x26750" />
<Blob Name="object_zog_Blob_026F50" Size="0x1150" Offset="0x26F50" />
<DList Name="object_zog_DL_0280A0" Offset="0x280A0" />
<DList Name="object_zog_DL_0280A8" Offset="0x280A8" />
<Texture Name="object_zog_Tex_028610" OutName="tex_028610" Format="rgba16" Width="16" Height="16" Offset="0x28610" />
+22
View File
@@ -0,0 +1,22 @@
<Root>
<File Name="ovl_En_Bigslime" OutName="gBigslimeStaticVtx" BaseAddress="0x808E4FC0" RangeStart="0x8680" RangeEnd="0xAF00">
<Array Name="sBigslimeStaticVtx" Count="162" Offset="0x8680">
<Vtx/>
</Array>
</File>
<File Name="ovl_En_Bigslime" OutName="gBigslimeDynamicState0Vtx" BaseAddress="0x808E4FC0" RangeStart="0x8680" RangeEnd="0xAF00">
<Array Name="sBigslimeDynamicState0Vtx" Count="162" Offset="0x90A0">
<Vtx/>
</Array>
</File>
<File Name="ovl_En_Bigslime" OutName="gBigslimeDynamicState1Vtx" BaseAddress="0x808E4FC0" RangeStart="0x8680" RangeEnd="0xAF00">
<Array Name="sBigslimeDynamicState1Vtx" Count="162" Offset="0x9AC0">
<Vtx/>
</Array>
</File>
<File Name="ovl_En_Bigslime" OutName="gBigslimeTargetVtx" BaseAddress="0x808E4FC0" RangeStart="0x8680" RangeEnd="0xAF00">
<Array Name="sBigslimeTargetVtx" Count="162" Offset="0xA4E0">
<Vtx/>
</Array>
</File>
</Root>
+6
View File
@@ -0,0 +1,6 @@
<Root>
<File Name="ovl_En_Bomjimb" BaseAddress="0x80C00EA0" RangeStart="0x23A0" RangeEnd="0x23C0">
<DList Name="gEnBomjimb_D_80C03240" Offset="0x23A0"/>
<DList Name="gEnBomjimb_D_80C03250" Offset="0x23B0"/>
</File>
</Root>
+51 -66
View File
@@ -167,7 +167,7 @@ s32 PadSetup_Init(OSMesgQueue* mq, u8* outMask, OSContStatus* status);
// void func_800867B4(void);
// void func_800867D4(void);
// void func_800867F4(void);
// void func_80086814(void);
f32 func_80086814(f32 x);
// void func_80086834(void);
// void func_80086880(void);
// void func_800869A4(void);
@@ -381,7 +381,7 @@ void guRotateF(float mf[4][4], f32 a, f32 x, f32 y, f32 z);
void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z);
void __osSetGlobalIntMask(u32 mask);
// void osVoiceInit(void);
// void __osContChannelReset(void);
s32 __osContChannelReset(OSMesgQueue* mq, s32 channel);
// void __osVoiceSetADConverter(void);
s32 osAiSetFrequency(u32 frequency);
s32 __osContRamRead(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer);
@@ -499,52 +499,37 @@ void Item_DropCollectibleRandom(GlobalContext* globalCtx, Actor* fromActor, Vec3
s32 func_800A8150(s32 index);
s32 func_800A817C(s32 index);
s32 func_800A81A4(GlobalContext* globalCtx, s32 a1, s32 a2);
void func_800A81F0(EffectBlure* this, Vec3f* p1, Vec3f* p2);
void func_800A8514(void* effectParams);
void EffectBlure_Initcommon(EffectBlure* params);
void EffectBlure_Init1(EffectBlure* params, EffBlureInit1* init);
void EffectBlure_Init2(EffectBlure* params, EffBlureInit2* init);
void EffectBlure_Destroy(EffectBlure* params);
s32 EffectBlure_Update(EffectBlure* params);
// void func_800A8C78(void);
// void func_800A8DE8(void);
// void func_800A92FC(void);
// void func_800A9330(void);
// void func_800A9804(void);
// void func_800AA190(void);
// void func_800AA460(void);
// void func_800AA498(void);
// void func_800AA700(void);
// void func_800AABE0(void);
void EffectBlure_Draw(EffectBlure* params, GraphicsContext* gfxCtx);
void EffectShieldParticle_Init(EffShieldParticleParams* params, EffShieldParticleInit* init);
void EffectShieldParticle_Destroy(EffShieldParticleParams* params);
s32 EffectShieldParticle_Update(EffShieldParticleParams* params);
void EffectShieldParticle_CalculateColors(EffShieldParticleParams* params, Color_RGBA8* primColor, Color_RGBA8* envColor);
void EffectShieldParticle_Draw(EffShieldParticleParams* params, GraphicsContext* gfxCtx);
void EffectSpark_Init(EffSparkParams* params, EffSparkParams* init);
void EffectSpark_Destroy(EffSparkParams* params);
s32 EffectSpark_Update(EffSparkParams* params);
void EffectSpark_Draw(EffSparkParams* params, GraphicsContext* gfxCtx);
void func_800AE2A0(GlobalContext* globalCtx, Color_RGBA8* arg1, s16 arg2, s16 arg3);
void func_800AE434(GlobalContext* globalCtx, Color_RGBA8* color, s16 sParm3, s16 sParm4);
void EffectBlure_AddVertex(EffectBlure* this, Vec3f* p1, Vec3f* p2);
void EffectBlure_AddSpace(EffectBlure* this);
void EffectBlure_Init1(void* thisx, void* initParamsx);
void EffectBlure_Init2(void* thisx, void* initParamsx);
void EffectBlure_Destroy(void* thisx);
s32 EffectBlure_Update(void* thisx);
void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx);
void EffectShieldParticle_Init(void* thisx, void* initParamsx);
void EffectShieldParticle_Destroy(void* thisx);
s32 EffectShieldParticle_Update(void* thisx);
void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx);
void EffectSpark_Init(void* thisx, void* initParamsx);
void EffectSpark_Destroy(void* thisx);
s32 EffectSpark_Update(void* thisx);
void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx);
void func_800AE2A0(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE434(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE5A0(GlobalContext* globalCtx);
void func_800AE5E4(GlobalContext* globalCtx, Color_RGBA8* arg1, s16 arg2, s16 arg3);
void func_800AE778(GlobalContext* globalCtx, Color_RGBA8* color, s16 param_3, s16 param_4);
void func_800AE5E4(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE778(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3);
void func_800AE8EC(GlobalContext* globalCtx);
void func_800AE930(CollisionContext* colCtx, s32 param_2, Vec3f* param_3, f32 param_4, s16 param_5, CollisionPoly* param_6, s32 param_7);
void func_800AEF44(s32 arg0);
void EffectTireMark_InitParticle(EffTireMarkParticle* particle);
void EffectTireMark_Init(EffTireMarkParams* params, EffTireMarkInit* init);
void EffectTireMark_Destroy(EffTireMarkParams* params);
s32 EffectTireMark_Update(EffTireMarkParams* params);
void EffectTireMark_InitVertices(F3DVertexColor* vertices, EffTireMarkParticle* particle, s32 index, s32 alpha);
void EffectTireMark_Draw(EffTireMarkParams* params, GraphicsContext* gfxCtx);
GlobalContext* Effect_GetContext(void);
void* Effect_GetParams(s32 index);
void Effect_InitCommon(EffCommon* common);
void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 angle, CollisionPoly* colPoly, s32 arg6);
void func_800AEF44(EffectTireMark* this);
void EffectTireMark_Init(void* thisx, void* initParamsx);
void EffectTireMark_Destroy(void* thisx);
s32 EffectTireMark_Update(void* thisx);
void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx);
GlobalContext* Effect_GetGlobalCtx(void);
void* Effect_GetByIndex(s32 index);
void Effect_Init(GlobalContext* globalCtx);
void Effect_Add(GlobalContext* globalCtx, s32* index, s32 type, u8 param_4, u8 param_5, void* initParams);
void Effect_Add(GlobalContext* globalCtx, s32* pIndex, s32 type, u8 arg3, u8 arg4, void* initParams);
void Effect_DrawAll(GraphicsContext* gfxCtx);
void Effect_UpdateAll(GlobalContext* globalCtx);
void Effect_Destroy(GlobalContext* globalCtx, s32 index);
@@ -666,7 +651,7 @@ void func_800B3030(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f*
// void EffectSsDeadDs_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8);
// void func_800B31BC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6);
void EffectSsIceSmoke_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale);
// void EffectSsIceBlock_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5);
void EffectSsIceBlock_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale);
void FlagSet_Update(GameState* gameState);
void FlagSet_Draw(GameState* gameState);
void Overlay_LoadGameState(GameStateOverlay* gameState);
@@ -870,7 +855,7 @@ void func_800BC154(GlobalContext* globalCtx, ActorContext* actorCtx, Actor* acto
// void func_800BC1B4(void);
Actor* func_800BC270(GlobalContext* globalCtx, Actor* actor, f32 arg2, UNK_TYPE4 arg3);
Actor* func_800BC444(GlobalContext* globalCtx, Actor* actor, f32 arg2);
// void func_800BC4EC(void);
s16 func_800BC4EC(Actor* actor, GlobalContext* globalCtx, f32 distance, s16 angle);
s32 func_800BC5B8(GlobalContext* globalCtx, Actor* actor);
s32 func_800BC5EC(GlobalContext* globalCtx, Actor* actor);
void func_800BC620(Vec3f* arg0, Vec3f* arg1, u8 arg2, GlobalContext* globalCtx);
@@ -1625,7 +1610,7 @@ ActorCutscene* ActorCutscene_GetCutscene(s16 index);
s16 ActorCutscene_GetAdditionalCutscene(s16 index);
s16 ActorCutscene_GetLength(s16 index);
// void func_800F2138(void);
// void func_800F2178(void);
s32 func_800F2178(s16 arg0);
s16 ActorCutscene_GetCurrentCamera(s16 index);
// void func_800F21CC(void);
s32 func_800F22C4(s16 param_1, Actor* actor);
@@ -1660,8 +1645,8 @@ UNK_TYPE func_800F41E4(GlobalContext* globalCtx, ActorContext* actorCtx);
void func_800F4A10(GlobalContext* globalCtx);
void func_800F4C0C(GlobalContext* globalCtx);
void func_800F4E20(GlobalContext* globalCtx);
void func_800F4F28(GlobalContext* globalCtx);
void KaleidoSetup_Init(GlobalContext* globalCtx);
void KaleidoSetup_Destroy(GlobalContext* globalCtx);
void Font_LoadChar(GlobalContext* globalCtx, u16 codePointIndex, s32 offset);
void Font_LoadCharNES(GlobalContext* globalCtx, u8 codePointIndex, s32 offset);
void Font_LoadMessageBoxEndIcon(Font* font, u16 icon);
@@ -1709,7 +1694,7 @@ void Kankyo_FadeOutGameOverLights(GlobalContext* globalCtx);
// void func_800FC3DC(void);
void func_800FC444(GraphicsContext* gfxCtx, u8 arg1, u8 arg2, u8 arg3, u8 arg4, UNK_TYPE arg5);
// void func_800FC64C(void);
// void func_800FD2B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
s32 func_800FD2B4(GlobalContext* globalCtx, f32 arg1, f32 arg2, f32 arg3, f32 arg4);
void func_800FD538(Color_RGB8* param_1, Color_RGB8* param_2, f32 param_3, Vec3s* param_4);
void func_800FD59C(GlobalContext* globalCtx, Color_RGB8* pzParm2, f32 fParm3);
void func_800FD5E0(GlobalContext* globalCtx, Color_RGB8* pzParm2, f32 fParm3);
@@ -2903,17 +2888,17 @@ void ShrinkWindow_Draw(GraphicsContext* gfxCtx);
// void func_801631DC(void);
// void func_80163334(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_80163660(void);
// void func_80163700(void);
// void func_80163758(void);
// void func_801637B4(void);
void func_80163804(GlobalContext* globalCtx);
// void func_8016388C(void);
// void func_801638D8(void);
// void func_801639A0(void);
void func_801639EC(GlobalContext* globalCtx);
void func_80163A38(GlobalContext* globalCtx);
// void func_80163A58(void);
// void func_80163C0C(void);
void* KaleidoManager_FaultAddrConvFunc(void* address, void* param);
void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl);
void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl);
void KaleidoManager_Init(GlobalContext* globalCtx);
void KaleidoManager_Destroy();
void* KaleidoManager_GetRamAddr(void* vram);
void KaleidoScopeCall_LoadPlayer(void);
void KaleidoScopeCall_Init(GlobalContext* globalCtx);
void KaleidoScopeCall_Destroy(GlobalContext* globalCtx);
void KaleidoScopeCall_Update(GlobalContext* globalCtx);
void KaleidoScopeCall_Draw(GlobalContext* globalCtx);
// void func_80163C90(void);
// void func_80163D80(void);
// void func_80163DC0(void);
@@ -3005,7 +2990,7 @@ void func_80169E6C(GlobalContext* globalCtx, s32 param_1, s32 param_2);
// void func_80169ECC(void);
void func_80169EFC(GlobalContext* globalCtx);
void func_80169F78(GlobalContext* globalCtx);
// void func_80169FDC(void);
void func_80169FDC(GlobalContext* globalCtx);
// void func_80169FFC(void);
s32 FrameAdvance_IsEnabled(GlobalContext* globalCtx);
// UNK_TYPE4 func_8016A02C(s32 param_1, s32 param_2, s16* param_3);
@@ -3231,7 +3216,7 @@ f32 Rand_ZeroFloat(f32 scale);
f32 randPlusMinusPoint5Scaled(f32 scale);
f32 Math3D_Normalize(Vec3f* vec);
s32 Math3D_PlaneVsLineSegClosestPoint(f32 planeAA, f32 planeAB, f32 planeAC, f32 planeADist, f32 planeBA, f32 planeBB, f32 planeBC, f32 planeBDist, Vec3f* linePointA, Vec3f* linePointB, Vec3f* closestPoint);
// UNK_TYPE4 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6);
s32 func_80179798(Vec3f* param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, Vec3f* param_5, Vec3f* param_6);
// void func_80179A44(void);
void func_80179B34(float fParm1, f32 fParm2, f32 fParm5, f32 fParm6, f32 param_5, f32 param_6, f32 param_7, float* param_8, float* param_9);
// UNK_TYPE4 func_80179B94(f32 fParm1, f32 fParm2, f32 fParm5, f32 param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, Vec3f* param_9);
@@ -3657,8 +3642,8 @@ AudioTask* func_80192BE0(void);
// void func_80194568(void);
// void func_80194668(void);
// void func_801946E4(void);
// void func_80194710(void);
// void func_80194750(void);
void Audio_InvalDCache(void* buf, size_t size);
void Audio_WritebackDCache(void* buf, size_t size);
// void func_80194790(void);
// void func_80194840(void);
// void func_801948B0(void);
+2
View File
@@ -63,6 +63,7 @@
((((void)0, gSaveContext.equips.equipment) & gEquipMasks[equip]) >> gEquipShifts[equip])
#define CUR_UPG_VALUE_VOID(upg) \
((((void)0, gSaveContext.inventory.upgrades) & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
#define INV_CONTENT_VOID(item) ((void)0, gSaveContext.inventory.items)[SLOT(item)]
#define CUR_FORM ((gSaveContext.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.playerForm)
@@ -101,6 +102,7 @@ extern GraphicsContext* __gfxCtx;
s32 __dispPad
#define CLOSE_DISPS(gfxCtx) \
(void)0; \
} \
(void)0
+1 -1
View File
@@ -73,7 +73,7 @@ DECLARE_OVERLAY_SEGMENT(opening)
DECLARE_OVERLAY_SEGMENT(file_choose)
DECLARE_OVERLAY_SEGMENT(daytelop)
DECLARE_OVERLAY_SEGMENT(kaleido_scope)
DECLARE_OVERLAY_SEGMENT(Player_Actor)
DECLARE_OVERLAY_SEGMENT(player_actor)
DECLARE_OVERLAY_SEGMENT(En_Test)
DECLARE_OVERLAY_SEGMENT(En_GirlA)
+20 -29
View File
@@ -382,8 +382,6 @@ extern UNK_PTR D_801AE260[3];
// extern UNK_TYPE4 D_801AE2BC;
// extern UNK_TYPE4 D_801AE2CC;
// extern UNK_TYPE4 D_801AE2DC;
extern F3DVertex sEffectShieldParticleVertices[4];
extern EffInfo sEffInfoTable[5];
extern EffectSsInfo EffectSS2Info;
// extern UNK_TYPE1 D_801AE3B0;
// extern UNK_TYPE1 D_801AE3B4;
@@ -870,8 +868,8 @@ extern ColChkVsFunc sOCVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX];
extern CollisionCheckInfo defaultColChkInfo;
extern ColChkApplyFunc sApplyDamageFuncs[COLSHAPE_MAX];
extern ColChkLineFunc sOCLineCheckFuncs[COLSHAPE_MAX];
extern EffShieldParticleInit shieldParticleInitMetal;
extern EffShieldParticleInit shieldParticleInitWood;
extern EffectShieldParticleInit shieldParticleInitMetal;
extern EffectShieldParticleInit shieldParticleInitWood;
// extern UNK_TYPE4 D_801BB090;
// extern UNK_TYPE1 D_801BB094;
// extern UNK_TYPE1 D_801BB0DC;
@@ -1552,10 +1550,9 @@ extern char D_801D0714[];
// extern UNK_TYPE1 D_801D08E8;
// extern UNK_TYPE1 D_801D0900;
extern ActorInit Player_InitVars;
// extern UNK_TYPE1 D_801D0B70;
extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[2];
// extern UNK_TYPE1 D_801D0B8C;
// extern UNK_TYPE4 D_801D0BA8;
// extern UNK_TYPE4 D_801D0BAC;
extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
// extern UNK_TYPE4 D_801D0BB0;
// extern UNK_TYPE1 D_801D0C80;
// extern UNK_TYPE1 D_801D0CB0;
@@ -1631,10 +1628,10 @@ extern PadMgr* padmgrContext;
// extern UNK_TYPE4 D_801D1538;
extern UNK_PTR D_801D1540;
// extern f32 sFactorialTbl[13];
extern Vec3f D_801D15B0;
extern Vec3s D_801D15BC;
extern Mtx D_801D1DE0;
extern MtxF D_801D1E20;
extern Vec3f gZeroVec3f;
extern Vec3s gZeroVec3s;
extern Mtx gIdentityMtx;
extern MtxF gIdentityMtxF;
// extern u64* initialgspUcodeText;
// extern u64* initialgspUcodeData;
// extern UNK_TYPE1 D_801D1E70;
@@ -3104,15 +3101,7 @@ extern u64 gJpegUCodeData[];
// extern UNK_TYPE1 D_801E3FA0;
// bss
extern EffTables sEffTable;
// extern UNK_TYPE1 D_801E4514;
// extern UNK_TYPE1 D_801E4E08;
// extern UNK_TYPE1 D_801E531C;
// extern UNK_TYPE1 D_801E69E0;
// extern UNK_TYPE1 D_801E9AA0;
// extern UNK_TYPE1 D_801ED4C0;
// extern UNK_TYPE1 D_801ED890;
// extern UNK_TYPE1 D_801ED894;
// extern UNK_TYPE1 D_801ED8A0;
// extern UNK_TYPE1 D_801ED8B0;
// extern UNK_TYPE1 D_801ED8B4;
@@ -3197,12 +3186,12 @@ extern Vec3f D_801EE1E0;
extern Vec3f D_801EE1F0;
// extern UNK_TYPE1 D_801EE1F4;
// extern UNK_TYPE1 D_801EE1F8;
extern EffSparkParams D_801EE200;
extern EffectSparkInit D_801EE200;
extern TriNorm D_801EE6C8;
extern TriNorm D_801EE700;
extern EffSparkParams D_801EE738;
extern EffSparkParams D_801EEC00;
extern EffSparkParams D_801EF0C8;
extern EffectSparkInit D_801EE738;
extern EffectSparkInit D_801EEC00;
extern EffectSparkInit D_801EF0C8;
extern TriNorm D_801EF590;
extern TriNorm D_801EF5C8;
extern TriNorm D_801EF600;
@@ -3227,7 +3216,7 @@ extern GameInfo* gGameInfo;
// extern UNK_TYPE2 D_801F4DCC[8];
// extern UNK_TYPE1 D_801F4DDC;
// extern UNK_TYPE1 D_801F4DE0;
// extern UNK_TYPE2 D_801F4DE2;
extern s16 D_801F4DE2;
extern ActorCutscene* actorCutscenes;
extern s16 actorCutsceneCount;
extern u8 actorCutsceneWaiting[16];
@@ -3342,9 +3331,9 @@ extern ShrinkWindowContext gShrinkWindowContext;
extern ShrinkWindowContext* gShrinkWindowContextPtr;
// extern UNK_TYPE4 D_801F6B50;
// extern UNK_TYPE1 D_801F6B58;
// extern UNK_TYPE1 D_801F6BF0;
// extern UNK_TYPE1 D_801F6C00;
// extern UNK_TYPE1 D_801F6C04;
extern FaultAddrConvClient sKaleidoAreaFaultClient;
extern void (*sKaleidoScopeUpdateFunc)(GlobalContext* globalCtx);
extern void (*sKaleidoScopeDrawFunc)(GlobalContext* globalCtx);
// extern UNK_TYPE1 D_801F6C10;
extern Input D_801F6C18;
// extern UNK_TYPE1 D_801F6C30;
@@ -3887,6 +3876,7 @@ extern Gfx D_04011BD0; // Gold Deku Flower display list
extern SkeletonHeader D_040127E8; // Gold Deku Flower skeleton
extern UNK_TYPE D_04012860;
extern UNK_TYPE D_040128BC;
extern u64 D_04014570[];
extern UNK_TYPE D_04015FA0;
extern UNK_TYPE D_04016360;
extern UNK_TYPE D_0401A4D0;
@@ -3909,7 +3899,7 @@ extern UNK_TYPE D_04025850;
extern UNK_TYPE D_04025DD0;
extern UNK_TYPE D_040281DC;
extern UNK_TYPE D_04028FEC;
extern UNK_TYPE D_04029140;
extern AnimationHeader D_04029140;
extern Gfx D_04029CB0[];
extern Gfx D_04029CF0[];
extern UNK_TYPE D_04029D20;
@@ -3950,6 +3940,7 @@ extern AnimationHeader D_0405140C;
extern UNK_TYPE D_040527F0;
extern UNK_TYPE D_040528B0;
extern Gfx D_04054A90[];
extern u64 D_04054F20[];
extern UNK_TYPE D_04055628;
extern Gfx D_04057B10[];
extern Gfx D_04058BA0[];
@@ -3999,7 +3990,7 @@ extern UNK_TYPE D_04079B10;
extern Gfx D_0407AB10[]; // sun (sparkles when small) displaylist
extern Gfx D_0407AB58[];
extern UNK_TYPE D_0407AFB0;
extern Gfx D_0407D590[];
extern Gfx gGameplayKeepDrawFlameDL[];
extern UNK_TYPE D_0407D650;
extern UNK_TYPE D_0407F218;
extern UNK_TYPE D_040815D0;
+18 -8
View File
@@ -702,6 +702,22 @@ typedef struct {
/* 0x344 */ u32 unk_344;
} InterfaceContext; // size = 0x348
typedef struct {
/* 0x00 */ void* loadedRamAddr;
/* 0x04 */ uintptr_t vromStart;
/* 0x08 */ uintptr_t vromEnd;
/* 0x0C */ void* vramStart;
/* 0x10 */ void* vramEnd;
/* 0x14 */ uintptr_t offset; // loadedRamAddr - vramStart
/* 0x18 */ const char* name;
} KaleidoMgrOverlay; // size = 0x1C
typedef enum {
/* 0x00 */ KALEIDO_OVL_KALEIDO_SCOPE,
/* 0x01 */ KALEIDO_OVL_PLAYER_ACTOR,
/* 0x02 */ KALEID_OVL_MAX
} KaleidoMgrOverlayType;
typedef struct {
/* 0x00 */ u16 unk_0;
/* 0x02 */ u16 unk_2;
@@ -1258,14 +1274,8 @@ struct FireObj {
struct TargetContext {
/* 0x00 */ Vec3f unk0;
/* 0x0C */ Vec3f unkC;
/* 0x18 */ f32 unk18;
/* 0x1C */ f32 unk1C;
/* 0x20 */ f32 unk20;
/* 0x24 */ f32 unk24;
/* 0x28 */ f32 unk28;
/* 0x2C */ f32 unk2C;
/* 0x30 */ f32 unk30;
/* 0x34 */ f32 unk34;
/* 0x18 */ Color_RGBAf unk18;
/* 0x28 */ Color_RGBAf unk28;
/* 0x38 */ Actor* unk38;
/* 0x3C */ Actor* unk3C;
/* 0x40 */ f32 unk40;
+5 -5
View File
@@ -29,11 +29,11 @@ typedef struct {
/* 0x00 */ u16 unk0; // action; // "dousa"
/* 0x02 */ u16 startFrame;
/* 0x04 */ u16 endFrame;
/* 0x06 */ UNK_TYPE1 pad6[0xA];
/* 0x10 */ s32 unk10;
/* 0x14 */ UNK_TYPE1 pad14[0x8];
/* 0x1C */ s32 unk1C;
/* 0x20 */ UNK_TYPE1 pad20[0x10];
/* 0x06 */ u16 unk6;
/* 0x08 */ u16 unk8;
/* 0x0C */ Vec3i unk0C;
/* 0x18 */ Vec3i unk18;
/* 0x24 */ UNK_TYPE1 unk24[0xC];
} CsCmdActorAction; // size = 0x30
typedef struct {
+99 -94
View File
@@ -10,14 +10,6 @@
struct GraphicsContext;
struct GlobalContext;
typedef void(*eff_destroy_func)(void* params);
typedef void(*eff_draw_func)(void* params, struct GraphicsContext* gfxCtx);
typedef void(*eff_init_func)(void* params, void* init);
typedef s32(*eff_update_func)(void* params);
#define SPARK_COUNT 3
#define BLURE_COUNT 25
#define SHIELD_PARTICLE_COUNT 3
@@ -41,37 +33,45 @@ typedef s32(*eff_update_func)(void* params);
#define rgObjBankIdx regs[11]
typedef struct {
/* 0x0 */ u8 active;
/* 0x1 */ u8 unk1;
/* 0x2 */ u8 unk2;
/* 0x3 */ UNK_TYPE1 pad3[0x1];
} EffCommon; // size = 0x4
/* 0x00 */ u8 active;
/* 0x01 */ u8 unk1;
/* 0x02 */ u8 unk2;
} EffectStatus; // size = 0x03
typedef struct {
/* 0x00 */ Vec3f velocity;
/* 0x0C */ Vec3f position;
/* 0x18 */ Vec3s unk18;
/* 0x1E */ Vec3s unk1E;
} EffSparkParticle; // size = 0x24
/* 0x18 */ Vec3s unkVelocity;
/* 0x1E */ Vec3s unkPosition;
} EffectSparkElement; // size = 0x24
typedef struct {
/* 0x000 */ Vec3s position;
/* 0x008 */ s32 numParticles; // Will be calculated as particleFactor1 * particleFactor2 + 2
/* 0x00C */ EffSparkParticle particles[32];
/* 0x48C */ f32 velocity;
/* 0x008 */ s32 numElements; // "table_size"; calculated as uDiv * vDiv + 2
/* 0x00C */ EffectSparkElement elements[32];
/* 0x48C */ f32 speed;
/* 0x490 */ f32 gravity;
/* 0x494 */ u32 particleFactor1;
/* 0x498 */ u32 particleFactor2;
/* 0x494 */ u32 uDiv; // "u_div"
/* 0x498 */ u32 vDiv; // "v_div"
/* 0x49C */ Color_RGBA8 colorStart[4];
/* 0x4AC */ Color_RGBA8 colorEnd[4];
/* 0x4BC */ s32 age;
/* 0x4BC */ s32 timer;
/* 0x4C0 */ s32 duration;
} EffSparkParams; // size = 0x4C4
} EffectSparkInit; // size = 0x4C4
typedef struct {
/* 0x000 */ EffCommon base;
/* 0x004 */ EffSparkParams params;
} EffSpark; // size = 0x4C8
/* 0x000 */ Vec3s position;
/* 0x008 */ s32 numElements; // "table_size"; calculated as uDiv * vDiv + 2
/* 0x00C */ EffectSparkElement elements[32];
/* 0x48C */ f32 speed;
/* 0x490 */ f32 gravity;
/* 0x494 */ u32 uDiv; // "u_div"
/* 0x498 */ u32 vDiv; // "v_div"
/* 0x49C */ Color_RGBA8 colorStart[4];
/* 0x4AC */ Color_RGBA8 colorEnd[4];
/* 0x4BC */ s32 timer;
/* 0x4C0 */ s32 duration;
} EffectSpark; // size = 0x4C4
typedef struct {
/* 0x00 */ s32 state;
@@ -82,13 +82,15 @@ typedef struct {
} EffectBlureElement; // size = 0x18
typedef struct {
/* 0x000 */ UNK_TYPE1 pad0[0x184];
/* 0x184 */ Color_RGBA8 unk184;
/* 0x188 */ Color_RGBA8 unk188;
/* 0x18C */ Color_RGBA8 unk18C;
/* 0x190 */ Color_RGBA8 unk190;
/* 0x194 */ UNK_TYPE1 pad194[0xC];
} EffBlureInit1; // size = 0x1A0
/* 0x000 */ char unk_00[0x184];
/* 0x184 */ u8 p1StartColor[4];
/* 0x188 */ u8 p2StartColor[4];
/* 0x18C */ u8 p1EndColor[4];
/* 0x190 */ u8 p2EndColor[4];
/* 0x194 */ s32 elemDuration;
/* 0x198 */ s32 unkFlag;
/* 0x19C */ s32 calcMode;
} EffectBlureInit1; // size = 0x1A0
typedef struct {
/* 0x00 */ s32 calcMode;
@@ -104,7 +106,7 @@ typedef struct {
/* 0x1B */ u8 mode4Param;
/* 0x1C */ Color_RGBA8 altPrimColor; // used with drawMode 1
/* 0x20 */ Color_RGBA8 altEnvColor; // used with drawMode 1
} EffBlureInit2; // size = 0x24
} EffectBlureInit2; // size = 0x24
typedef struct {
/* 0x000 */ EffectBlureElement elements[16];
@@ -117,31 +119,26 @@ typedef struct {
/* 0x192 */ Color_RGBA8 p2StartColor;
/* 0x196 */ Color_RGBA8 p1EndColor;
/* 0x19A */ Color_RGBA8 p2EndColor;
/* 0x19E */ u8 numElements;
/* 0x19E */ u8 numElements; // "now_edge_num"
/* 0x19F */ u8 elemDuration;
/* 0x1A0 */ u8 unkFlag;
/* 0x1A1 */ u8 drawMode; // 0: simple; 1: simple with alt colors; 2+: smooth
/* 0x1A2 */ Color_RGBA8 altPrimColor;
/* 0x1A6 */ Color_RGBA8 altEnvColor;
/* 0x1A2 */ Color_RGBA8 altPrimColor; // used with drawMode 1
/* 0x1A6 */ Color_RGBA8 altEnvColor; // used with drawMode 1
} EffectBlure; // size = 0x1AC
typedef struct {
/* 0x000 */ EffCommon base;
/* 0x004 */ EffectBlure params;
} EffBlure; // size = 0x1B0
typedef struct {
/* 0x00 */ f32 startSpeed;
/* 0x00 */ f32 initialSpeed;
/* 0x04 */ f32 endXChange;
/* 0x08 */ f32 endX;
/* 0x0C */ f32 startXChange;
/* 0x10 */ f32 startX;
/* 0x14 */ s16 rotationY;
/* 0x16 */ s16 rotationZ;
} EffShieldParticleParticle; // size = 0x18
/* 0x14 */ s16 yaw;
/* 0x16 */ s16 pitch;
} EffectShieldParticleElement; // size = 0x18
typedef struct {
/* 0x00 */ u8 numParticles;
/* 0x00 */ u8 numElements;
/* 0x02 */ Vec3s position;
/* 0x08 */ Color_RGBA8 primColorStart;
/* 0x0C */ Color_RGBA8 envColorStart;
@@ -149,18 +146,17 @@ typedef struct {
/* 0x14 */ Color_RGBA8 envColorMid;
/* 0x18 */ Color_RGBA8 primColorEnd;
/* 0x1C */ Color_RGBA8 envColorEnd;
/* 0x20 */ f32 acceleration;
/* 0x20 */ f32 deceleration;
/* 0x24 */ f32 maxInitialSpeed;
/* 0x28 */ f32 lengthCutoff;
/* 0x2C */ u8 duration;
/* 0x2E */ LightPoint lightPoint;
/* 0x3C */ s32 hasLight;
} EffShieldParticleInit; // size = 0x40
/* 0x3C */ s32 lightDecay; // halves light radius every frame when set to 1
} EffectShieldParticleInit; // size = 0x40
typedef struct {
/* 0x000 */ EffShieldParticleParticle particles[16];
/* 0x180 */ u8 numParticles;
/* 0x181 */ UNK_TYPE1 pad181[0x1];
/* 0x000 */ EffectShieldParticleElement elements[16];
/* 0x180 */ u8 numElements;
/* 0x182 */ Vec3s position;
/* 0x188 */ Color_RGBA8 primColorStart;
/* 0x18C */ Color_RGBA8 envColorStart;
@@ -168,66 +164,75 @@ typedef struct {
/* 0x194 */ Color_RGBA8 envColorMid;
/* 0x198 */ Color_RGBA8 primColorEnd;
/* 0x19C */ Color_RGBA8 envColorEnd;
/* 0x1A0 */ f32 acceleration;
/* 0x1A4 */ UNK_TYPE1 pad1A4[0x4];
/* 0x1A0 */ f32 deceleration;
/* 0x1A4 */ char unk_1A4[0x04];
/* 0x1A8 */ f32 maxInitialSpeed;
/* 0x1AC */ f32 lengthCutoff;
/* 0x1B0 */ u8 duration;
/* 0x1B1 */ u8 age;
/* 0x1B1 */ u8 timer;
/* 0x1B2 */ LightInfo lightInfo;
/* 0x1C0 */ LightNode* light;
/* 0x1C4 */ s32 hasLight;
} EffShieldParticleParams; // size = 0x1C8
/* 0x1C0 */ LightNode* lightNode;
/* 0x1C4 */ s32 lightDecay; // halves light radius every frame when set to 1
} EffectShieldParticle; // size = 0x1C8
typedef struct {
/* 0x000 */ EffCommon base;
/* 0x004 */ EffShieldParticleParams params;
} EffShieldParticle; // size = 0x1CC
typedef struct {
/* 0x00 */ UNK_TYPE2 active;
/* 0x02 */ Vec3s position1;
/* 0x08 */ Vec3s position2;
/* 0x00 */ u16 flags;
/* 0x02 */ Vec3s p1;
/* 0x08 */ Vec3s p2;
/* 0x0E */ s16 life;
/* 0x10 */ UNK_TYPE1 pad10[0x4];
/* 0x14 */ UNK_TYPE4 unk14;
} EffTireMarkParticle; // size = 0x18
/* 0x14 */ CollisionPoly* colPoly;
} EffectTireMarkElement; // size = 0x18
typedef struct {
/* 0x0 */ s16 unk0;
/* 0x2 */ s16 maxLife;
/* 0x2 */ s16 elemDuration;
/* 0x4 */ Color_RGBA8 color;
} EffTireMarkInit; // size = 0x8
} EffectTireMarkInit; // size = 0x8
typedef struct {
/* 0x000 */ EffTireMarkParticle particles[64];
/* 0x000 */ EffectTireMarkElement elements[64];
/* 0x600 */ s16 unk600;
/* 0x602 */ s16 numParticles;
/* 0x604 */ s16 maxLife;
/* 0x602 */ s16 numElements;
/* 0x604 */ s16 elemDuration;
/* 0x606 */ Color_RGBA8 color;
/* 0x60A */ UNK_TYPE1 pad60A[0x2];
} EffTireMarkParams; // size = 0x60C
typedef struct {
/* 0x000 */ EffCommon base;
/* 0x004 */ EffTireMarkParams params;
} EffTireMark; // size = 0x610
typedef struct {
/* 0x00 */ u32 paramsSize;
/* 0x04 */ eff_init_func init;
/* 0x08 */ eff_destroy_func destroy;
/* 0x0C */ eff_update_func update;
/* 0x10 */ eff_draw_func draw;
} EffInfo; // size = 0x14
} EffectTireMark; // size = 0x60C
typedef struct {
/* 0x0000 */ struct GlobalContext* globalCtx;
/* 0x0004 */ EffSpark sparks[SPARK_COUNT];
/* 0x0E5C */ EffBlure blures[BLURE_COUNT];
/* 0x388C */ EffShieldParticle shieldParticles[SHIELD_PARTICLE_COUNT];
/* 0x3DF0 */ EffTireMark tireMarks[TIRE_MARK_COUNT];
} EffTables; // size = 0x98E0
struct {
EffectStatus status;
EffectSpark effect;
} /* 0x0004 */ sparks[SPARK_COUNT];
struct {
EffectStatus status;
EffectBlure effect;
} /* 0x0E5C */ blures[BLURE_COUNT];
struct {
EffectStatus status;
EffectShieldParticle effect;
} /* 0x388C */ shieldParticles[SHIELD_PARTICLE_COUNT];
struct {
EffectStatus status;
EffectTireMark effect;
} /* 0x3DF0 */ tireMarks[TIRE_MARK_COUNT];
} EffectContext; // size = 0x98E0
typedef struct {
/* 0x00 */ u32 size;
/* 0x04 */ void (*init)(void* effect, void* initParams);
/* 0x08 */ void (*destroy)(void* effect);
/* 0x0C */ s32 (*update)(void* effect);
/* 0x10 */ void (*draw)(void* effect, struct GraphicsContext* gfxCtx);
} EffectInfo; // size = 0x14
typedef enum {
/* 0x00 */ EFFECT_SPARK,
/* 0x01 */ EFFECT_BLURE1,
/* 0x02 */ EFFECT_BLURE2,
/* 0x03 */ EFFECT_SHIELD_PARTICLE,
/* 0x04 */ EFFECT_TIRE_MARK
} EffectType;
/* Effect Soft Sprites */
+4 -3
View File
@@ -85,9 +85,10 @@ typedef struct {
/* 0x06 */ s16 yaw; // azimuthal angle
} VecSph; // size = 0x08
#define F32_LERP(v0,v1,t) ((1.0f - (t)) * (v0) + (t) * (v1))
#define F32_LERPIMP(v0, v1, t) (v0 + ((v1 - v0) * t))
#define F32_LERPIMPINV(v0, v1, t) ((v0) + (((v1) - (v0)) / (t)))
#define LERPIMP(v0, v1, t) ((v0) + (((v1) - (v0)) * (t)))
#define F32_LERP(v0, v1, t) ((1.0f - (t)) * (f32)(v0) + (t) * (f32)(v1))
#define F32_LERPIMP(v0, v1, t) ((f32)(v0) + (((f32)(v1) - (f32)(v0)) * (t)))
#define F32_LERPIMPINV(v0, v1, t) ((f32)(v0) + (((f32)(v1) - (f32)(v0)) / (t)))
#define BINANG_LERPIMP(v0, v1, t) ((v0) + (s16)(BINANG_SUB((v1), (v0)) * (t)))
#define BINANG_LERPIMPINV(v0, v1, t) ((v0) + BINANG_SUB((v1), (v0)) / (t))
+1 -1
View File
@@ -67,7 +67,7 @@ typedef struct {
/* 0x0039 */ s8 magic; // "magic_now"
/* 0x003A */ s16 rupees; // "lupy_count"
/* 0x003C */ u16 swordHealth; // "long_sword_hp"
/* 0x003E */ u16 naviTimer; // "navi_timer"
/* 0x003E */ u16 tatlTimer; // "navi_timer"
/* 0x0040 */ u8 magicAcquired; // "magic_mode"
/* 0x0041 */ u8 doubleMagic; // "magic_ability"
/* 0x0042 */ u8 doubleDefense; // "life_ability"
+25 -36
View File
@@ -430,19 +430,17 @@ beginseg
include "build/data/code/code_801E3FA0.bss.o"
include "build/src/code/z_en_item00.o"
include "build/src/code/z_eff_blure.o"
include "build/data/code/z_eff_blure.data.o"
include "build/src/code/z_eff_shield_particle.o"
include "build/data/code/z_eff_shield_particle.data.o"
include "build/src/code/z_eff_spark.o"
include "build/src/code/z_eff_ss_dead.o"
include "build/src/code/z_eff_tire_mark.o"
include "build/src/code/z_effect.o"
include "build/data/code/z_effect.bss.o"
include "build/src/code/z_effect_soft_sprite.o"
include "build/data/code/z_effect_soft_sprite.data.o"
include "build/src/code/z_effect_soft_sprite_old_init.o"
include "build/data/code/z_effect_soft_sprite_old_init.data.o"
include "build/src/code/flg_set.o"
include "build/data/code/flg_set.bss.o"
include "build/src/code/pad_801DC9C0.o"
include "build/src/code/z_DLF.o"
include "build/src/code/z_actor.o"
@@ -567,10 +565,7 @@ beginseg
include "build/data/code/db_camera.bss.o"
include "build/data/code/code_801D0B50.data.o"
include "build/src/code/z_kaleido_manager.o"
include "build/data/code/z_kaleido_manager.data.o"
include "build/data/code/z_kaleido_manager.bss.o"
include "build/src/code/z_kaleido_scope_call.o"
include "build/data/code/z_kaleido_scope_call.bss.o"
include "build/src/code/z_fbdemo_dlftbls.o"
include "build/data/code/code_801D0BB0.data.o"
include "build/src/code/z_fbdemo.o"
@@ -641,7 +636,7 @@ beginseg
include "build/data/code/audio_load.bss.o"
include "build/src/code/audio/code_80192BE0.o"
include "build/data/code/code_80192BE0.data.o"
include "build/src/code/audio/code_80194710.o"
include "build/src/code/audio/audio_dcache.o"
include "build/src/code/audio/code_80194790.o"
include "build/data/code/code_80194790.data.o"
include "build/src/code/audio/audio_playback.o"
@@ -741,12 +736,12 @@ beginseg
endseg
beginseg
name "ovl_Player_Actor"
name "ovl_player_actor"
compress
include "build/src/overlays/actors/ovl_Player_Actor/z_player.o"
include "build/data/ovl_Player_Actor/ovl_Player_Actor.data.o"
include "build/data/ovl_Player_Actor/ovl_Player_Actor.bss.o"
include "build/data/ovl_Player_Actor/ovl_Player_Actor.reloc.o"
include "build/src/overlays/actors/ovl_player_actor/z_player.o"
include "build/data/ovl_player_actor/ovl_player_actor.data.o"
include "build/data/ovl_player_actor/ovl_player_actor.bss.o"
include "build/data/ovl_player_actor/ovl_player_actor.reloc.o"
endseg
beginseg
@@ -863,8 +858,7 @@ beginseg
name "ovl_En_Elf"
compress
include "build/src/overlays/actors/ovl_En_Elf/z_en_elf.o"
include "build/data/ovl_En_Elf/ovl_En_Elf.data.o"
include "build/data/ovl_En_Elf/ovl_En_Elf.reloc.o"
include "build/src/overlays/actors/ovl_En_Elf/ovl_En_Elf_reloc.o"
endseg
beginseg
@@ -1055,9 +1049,11 @@ beginseg
name "ovl_Door_Warp1"
compress
include "build/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.o"
include "build/data/ovl_Door_Warp1/ovl_Door_Warp1.data.o"
include "build/data/ovl_Door_Warp1/ovl_Door_Warp1.bss.o"
#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Door_Warp1/ovl_Door_Warp1_reloc.o"
#else
include "build/data/ovl_Door_Warp1/ovl_Door_Warp1.reloc.o"
#endif
endseg
beginseg
@@ -1280,8 +1276,7 @@ beginseg
name "ovl_En_Bigslime"
compress
include "build/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.o"
include "build/data/ovl_En_Bigslime/ovl_En_Bigslime.data.o"
include "build/data/ovl_En_Bigslime/ovl_En_Bigslime.reloc.o"
include "build/src/overlays/actors/ovl_En_Bigslime/ovl_En_Bigslime_reloc.o"
endseg
beginseg
@@ -1490,8 +1485,7 @@ beginseg
name "ovl_En_Fz"
compress
include "build/src/overlays/actors/ovl_En_Fz/z_en_fz.o"
include "build/data/ovl_En_Fz/ovl_En_Fz.data.o"
include "build/data/ovl_En_Fz/ovl_En_Fz.reloc.o"
include "build/src/overlays/actors/ovl_En_Fz/ovl_En_Fz_reloc.o"
endseg
beginseg
@@ -2418,8 +2412,7 @@ beginseg
name "ovl_En_Aob_01"
compress
include "build/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.o"
include "build/data/ovl_En_Aob_01/ovl_En_Aob_01.data.o"
include "build/data/ovl_En_Aob_01/ovl_En_Aob_01.reloc.o"
include "build/src/overlays/actors/ovl_En_Aob_01/ovl_En_Aob_01_reloc.o"
endseg
beginseg
@@ -2705,8 +2698,11 @@ beginseg
name "ovl_Obj_Iceblock"
compress
include "build/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.o"
include "build/data/ovl_Obj_Iceblock/ovl_Obj_Iceblock.data.o"
#ifdef NON_MATCHING
include "build/src/overlays/actors/ovl_Obj_Iceblock/ovl_Obj_Iceblock_reloc.o"
#else
include "build/data/ovl_Obj_Iceblock/ovl_Obj_Iceblock.reloc.o"
#endif
endseg
beginseg
@@ -4274,8 +4270,7 @@ beginseg
name "ovl_En_Rail_Skb"
compress
include "build/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.o"
include "build/data/ovl_En_Rail_Skb/ovl_En_Rail_Skb.data.o"
include "build/data/ovl_En_Rail_Skb/ovl_En_Rail_Skb.reloc.o"
include "build/src/overlays/actors/ovl_En_Rail_Skb/ovl_En_Rail_Skb_reloc.o"
endseg
beginseg
@@ -4415,9 +4410,7 @@ beginseg
name "ovl_En_Zog"
compress
include "build/src/overlays/actors/ovl_En_Zog/z_en_zog.o"
include "build/data/ovl_En_Zog/ovl_En_Zog.data.o"
include "build/data/ovl_En_Zog/ovl_En_Zog.bss.o"
include "build/data/ovl_En_Zog/ovl_En_Zog.reloc.o"
include "build/src/overlays/actors/ovl_En_Zog/ovl_En_Zog_reloc.o"
endseg
beginseg
@@ -4440,8 +4433,7 @@ beginseg
name "ovl_Bg_Inibs_Movebg"
compress
include "build/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.o"
include "build/data/ovl_Bg_Inibs_Movebg/ovl_Bg_Inibs_Movebg.data.o"
include "build/data/ovl_Bg_Inibs_Movebg/ovl_Bg_Inibs_Movebg.reloc.o"
include "build/src/overlays/actors/ovl_Bg_Inibs_Movebg/ovl_Bg_Inibs_Movebg_reloc.o"
endseg
beginseg
@@ -4896,8 +4888,7 @@ beginseg
name "ovl_En_Talk"
compress
include "build/src/overlays/actors/ovl_En_Talk/z_en_talk.o"
include "build/data/ovl_En_Talk/ovl_En_Talk.data.o"
include "build/data/ovl_En_Talk/ovl_En_Talk.reloc.o"
include "build/src/overlays/actors/ovl_En_Talk/ovl_En_Talk_reloc.o"
endseg
beginseg
@@ -5042,8 +5033,7 @@ beginseg
name "ovl_En_Akindonuts"
compress
include "build/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.o"
include "build/data/ovl_En_Akindonuts/ovl_En_Akindonuts.data.o"
include "build/data/ovl_En_Akindonuts/ovl_En_Akindonuts.reloc.o"
include "build/src/overlays/actors/ovl_En_Akindonuts/ovl_En_Akindonuts_reloc.o"
endseg
beginseg
@@ -5130,8 +5120,7 @@ beginseg
name "ovl_En_Bomjimb"
compress
include "build/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.o"
include "build/data/ovl_En_Bomjimb/ovl_En_Bomjimb.data.o"
include "build/data/ovl_En_Bomjimb/ovl_En_Bomjimb.reloc.o"
include "build/src/overlays/actors/ovl_En_Bomjimb/ovl_En_Bomjimb_reloc.o"
endseg
beginseg
+15
View File
@@ -0,0 +1,15 @@
#include "global.h"
void Audio_InvalDCache(void* buf, size_t size) {
OSIntMask prevMask = osSetIntMask(1);
osInvalDCache(buf, size);
osSetIntMask(prevMask);
}
void Audio_WritebackDCache(void* buf, size_t size) {
OSIntMask prevMask = osSetIntMask(1);
osWritebackDCache(buf, size);
osSetIntMask(prevMask);
}
-5
View File
@@ -1,5 +0,0 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/code_80194710/func_80194710.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/code_80194710/func_80194750.s")
+42 -79
View File
@@ -68,10 +68,12 @@ BgSpecialSceneMaxObjects sCustomDynapolyMem[] = {
{ SCENE_21MITURINMAE, 1000, 600, 512 },
};
// TODO: All these bss variables are localized to one function and can
// likely be made into in-function static bss variables in the future
char D_801ED950[80];
char D_801ED9A0[80];
Vec3f D_801ED9F0[3]; // polyVerts
Vec3f D_801EDA18[3]; // polyVerts //not ok, needs to be inlined to match
Vec3f D_801EDA18[3]; // polyVerts
MtxF D_801EDA40;
Vec3f D_801EDA80[3]; // polyVerts
char D_801EDAA8[80];
@@ -79,8 +81,6 @@ char D_801EDAF8[80];
Vec3f D_801EDB48[3]; // polyVerts
Vec3f D_801EDB70[3];
Plane D_801EDB98;
Sphere16 D_801EDBA8;
TriNorm D_801EDBB0;
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast);
@@ -322,40 +322,34 @@ s32 CollisionPoly_CheckYIntersectApprox1(CollisionPoly* poly, Vec3s* vtxList, f3
* Checks if point (`x`,`z`) is within `checkDist` of `poly`, computing `yIntersect` if true
* Determinant max 0.0f (checks if on or within poly)
*/
#ifdef NON_MATCHING
s32 CollisionPoly_CheckYIntersect(CollisionPoly* poly, Vec3s* vtxList, f32 x, f32 z, f32* yIntersect, f32 checkDist) {
static Vec3f polyVerts[3]; // D_801EDA18
Vec3s* sVerts;
f32 nx;
f32 ny;
f32 nz;
sVerts = &vtxList[COLPOLY_VTX_INDEX(poly->flags_vIA)];
polyVerts[0].x = sVerts->x;
polyVerts[0].y = sVerts->y;
polyVerts[0].z = sVerts->z;
D_801EDA18[0].x = sVerts->x;
D_801EDA18[0].y = sVerts->y;
D_801EDA18[0].z = sVerts->z;
sVerts = &vtxList[COLPOLY_VTX_INDEX(poly->flags_vIB)];
polyVerts[1].x = sVerts->x;
polyVerts[1].y = sVerts->y;
polyVerts[1].z = sVerts->z;
sVerts = &vtxList[poly->vIC];
polyVerts[2].x = sVerts->x;
polyVerts[2].y = sVerts->y;
polyVerts[2].z = sVerts->z;
D_801EDA18[1].x = sVerts->x;
D_801EDA18[1].y = sVerts->y;
D_801EDA18[1].z = sVerts->z;
sVerts = &vtxList[(s32)poly->vIC];
D_801EDA18[2].x = sVerts->x;
D_801EDA18[2].y = sVerts->y;
D_801EDA18[2].z = sVerts->z;
if (!func_8017A304(&polyVerts[0], &polyVerts[1], &polyVerts[2], z, x, checkDist)) {
if (!func_8017A304(&D_801EDA18[0], &D_801EDA18[1], &D_801EDA18[2], z, x, checkDist)) {
return 0;
}
nx = COLPOLY_GET_NORMAL(poly->normal.x);
ny = COLPOLY_GET_NORMAL(poly->normal.y);
nz = COLPOLY_GET_NORMAL(poly->normal.z);
return Math3D_TriChkPointParaYIntersectInsideTri2(&polyVerts[0], &polyVerts[1], &polyVerts[2], nx, ny, nz,
return Math3D_TriChkPointParaYIntersectInsideTri2(&D_801EDA18[0], &D_801EDA18[1], &D_801EDA18[2], nx, ny, nz,
poly->dist, z, x, yIntersect, checkDist);
}
#else
s32 CollisionPoly_CheckYIntersect(CollisionPoly* poly, Vec3s* vtxList, f32 x, f32 z, f32* yIntersect, f32 checkDist);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_CheckYIntersect.s")
#endif
s32 CollisionPoly_CheckYIntersectApprox2(CollisionPoly* poly, Vec3s* vtxList, f32 x, f32 z, f32* yIntersect) {
return CollisionPoly_CheckYIntersectApprox1(poly, vtxList, x, z, yIntersect, 1.0f);
@@ -427,8 +421,6 @@ s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_LineVsPoly.s")
#endif
#ifdef NON_MATCHING
// OK but .bss order issues
s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius) {
static Sphere16 sphere; // D_801EDBA8
static TriNorm tri; // D_801EDBB0
@@ -443,12 +435,7 @@ s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center,
sphere.radius = radius;
return Math3D_ColSphereTri(&sphere, &tri, &intersect);
}
#else
s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_SphVsPoly.s")
#endif
#ifdef NON_MATCHING
/**
* Add poly to StaticLookup table
* Table is sorted by poly's smallest y vertex component
@@ -486,6 +473,8 @@ void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, Coll
while (true) {
// if at the end of the list
if (curNode->next == SS_NULL) {
s32 pad;
newNodeId = SSNodeList_GetNextNodeIdx(&colCtx->polyNodes);
SSNode_SetValue(&colCtx->polyNodes.tbl[newNodeId], &polyId, SS_NULL);
curNode->next = newNodeId;
@@ -507,9 +496,6 @@ void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, Coll
curNode = nextNode;
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/StaticLookup_AddPolyToSSList.s")
#endif
/**
* Add CollisionPoly to StaticLookup list
@@ -871,28 +857,29 @@ s32 BgCheck_SphVsStaticWall(StaticLookup* lookup, CollisionContext* colCtx, u16
* `outPoly` returns the poly collided with
* `outY` returns the y coordinate needed to not collide with `outPoly`
*/
#ifdef NON_MATCHING
s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionContext* colCtx, f32* outY, Vec3f* pos,
f32 checkHeight, CollisionPoly** outPoly, Actor* actor) {
s32 result = false;
// u16 nextId;
CollisionPoly* curPoly;
CollisionPoly* polyList;
f32 ceilingY;
Vec3s* vtxList;
SSNode* curNode;
s32 curPolyId;
f32 ceilingY;
SSNode* curNode;
Vec3s* vtxList;
if (lookup->ceiling.head == SS_NULL) {
return result;
}
curNode = &colCtx->polyNodes.tbl[lookup->ceiling.head];
polyList = colCtx->colHeader->polyList;
vtxList = colCtx->colHeader->vtxList;
curNode = &colCtx->polyNodes.tbl[lookup->ceiling.head];
*outY = pos->y;
while (true) {
f32 intersectDist;
f32 ny;
curPolyId = curNode->polyId;
curPoly = &polyList[curPolyId];
if (COLPOLY_VIA_FLAG_TEST(colCtx->colHeader->polyList[curPolyId].flags_vIA, xpFlags) ||
@@ -908,8 +895,8 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte
}
if (CollisionPoly_CheckYIntersectApprox2(curPoly, vtxList, pos->x, pos->z, &ceilingY)) {
f32 intersectDist = ceilingY - *outY;
f32 ny = COLPOLY_GET_NORMAL(curPoly->normal.y);
intersectDist = ceilingY - *outY;
ny = COLPOLY_GET_NORMAL(curPoly->normal.y);
if (intersectDist > 0 && intersectDist < checkHeight && intersectDist * ny <= 0) {
*outY = ceilingY - checkHeight;
@@ -926,11 +913,6 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte
}
return result;
}
#else
s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionContext* colCtx, f32* outY, Vec3f* pos,
f32 checkHeight, CollisionPoly** outPoly, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_CheckStaticCeiling.s")
#endif
/**
* Tests if line `posA` to `posB` intersects with a static poly in list `ssList`. Uses polyCheckTbl
@@ -1049,7 +1031,6 @@ s32 BgCheck_CheckLineInSubdivision(StaticLineTest* arg0) {
* returns true if any poly intersects the sphere, else returns false
* `outPoly` returns the pointer of the first poly found that intersects
*/
#ifdef NON_MATCHING
s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext* colCtx, Vec3f* center, f32 radius,
CollisionPoly** outPoly, Actor* actor) {
Vec3s* vtxList;
@@ -1057,7 +1038,6 @@ s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext
CollisionPoly* curPoly;
u16 nextId;
s16 curPolyId;
s32 pad;
polyList = colCtx->colHeader->polyList;
vtxList = colCtx->colHeader->vtxList;
@@ -1088,17 +1068,14 @@ s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext
}
if (node->next != SS_NULL) {
node = &colCtx->polyNodes.tbl[node->next];
{ s32 pad; }
continue;
}
break;
}
return false;
}
#else
s32 BgCheck_SphVsFirstStaticPolyList(SSNode* node, u16 xpFlags, CollisionContext* colCtx, Vec3f* center, f32 radius,
CollisionPoly** outPoly, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_SphVsFirstStaticPolyList.s")
#endif
/**
* Get first static poly intersecting sphere `center` `radius` within `lookup`
@@ -1539,16 +1516,12 @@ s32 BgCheck_GetSpecialSceneMaxObjects(GlobalContext* globalCtx, s32* maxNodes, s
/**
* Allocate CollisionContext
*/
#ifdef NON_MATCHING
void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, CollisionHeader* colHeader) {
u32 tblMax;
u32 memSize;
u32 lookupTblMemSize;
SSNodeList* nodeList;
s32 useCustomSubdivisions;
u32 customMemSize;
s32 customNodeListMax;
s32 i;
customNodeListMax = -1;
colCtx->colHeader = colHeader;
@@ -1563,6 +1536,10 @@ void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, Collis
colCtx->subdivAmount.y = 4;
colCtx->subdivAmount.z = 16;
} else {
u32 customMemSize;
s32 useCustomSubdivisions;
s32 i;
if (BgCheck_TryGetCustomMemsize(globalCtx->sceneNum, &customMemSize)) {
colCtx->memSize = customMemSize;
} else {
@@ -1631,10 +1608,6 @@ void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, Collis
DynaPoly_Init(globalCtx, &colCtx->dyna);
DynaPoly_Alloc(globalCtx, &colCtx->dyna);
}
#else
void BgCheck_Allocate(CollisionContext* colCtx, GlobalContext* globalCtx, CollisionHeader* colHeader);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_Allocate.s")
#endif
/**
* Enables CollisionContext wide flags
@@ -2182,7 +2155,6 @@ s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos,
return BgCheck_CheckCeilingImpl(colCtx, COLPOLY_IGNORE_ENTITY, outY, pos, checkHeight, outPoly, outBgId, actor);
}
#ifdef NON_MATCHING
/**
* Tests if a line from `posA` to `posB` intersects with a poly
* returns true if it does, else false
@@ -2202,12 +2174,9 @@ s32 BgCheck_CheckLineImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2,
StaticLineTest checkLine;
Vec3f sectorMin;
Vec3f sectorMax;
s32 k;
s32 temp_lo;
StaticLookup* lookup;
s32 j;
StaticLookup* jLookup;
s32 temp_lo;
s32 pad[2];
lookupTbl = colCtx->lookupTbl;
posBTemp = *posB;
@@ -2247,11 +2216,15 @@ s32 BgCheck_CheckLineImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2,
sectorMax.z = colCtx->subdivLength.z + sectorMin.z;
for (i = subdivMin[2]; i < subdivMax[2] + 1; i++) {
jLookup = iLookup + subdivMin[1] * colCtx->subdivAmount.x;
StaticLookup* jLookup = iLookup + subdivMin[1] * colCtx->subdivAmount.x;
s32 pad;
sectorMin.y = subdivMin[1] * colCtx->subdivLength.y + colCtx->minBounds.y;
sectorMax.y = colCtx->subdivLength.y + sectorMin.y;
for (j = subdivMin[1]; j < subdivMax[1] + 1; j++) {
s32 k;
lookup = jLookup + subdivMin[0];
sectorMin.x = subdivMin[0] * colCtx->subdivLength.x + colCtx->minBounds.x;
sectorMax.x = colCtx->subdivLength.x + sectorMin.x;
@@ -2292,9 +2265,6 @@ s32 BgCheck_CheckLineImpl(CollisionContext* colCtx, u16 xpFlags1, u16 xpFlags2,
}
return result;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_CheckLineImpl.s")
#endif
/**
* Get bccFlags
@@ -3373,8 +3343,6 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_RaycastFloorDyna.s")
#endif
#ifdef NON_MATCHING
// regalloc, minor instruction ordering
/**
* Performs collision detection on a BgActor's wall polys on sphere `pos`, `radius`
* returns true if a collision was detected
@@ -3401,8 +3369,6 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
f32 invNormalXZ;
f32 planeDist;
f32 temp_f18;
f32 zIntersectDist;
f32 xIntersectDist;
f32 zMin;
f32 zMax;
f32 xMin;
@@ -3472,6 +3438,8 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
}
}
if (CollisionPoly_CheckZIntersectApprox(poly, dyna->vtxList, resultPos.x, pos->y, &intersect)) {
s32 pad;
if (fabsf(intersect - resultPos.z) <= radius / temp_f18) {
if ((intersect - resultPos.z) * nz <= 4.0f) {
if (BgCheck_ComputeWallDisplacement(colCtx, poly, &resultPos.x, &resultPos.z, nx, ny, nz,
@@ -3547,7 +3515,8 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
}
if (CollisionPoly_CheckXIntersectApprox(poly, dyna->vtxList, pos->y, resultPos.z, &intersect)) {
xIntersectDist = intersect - resultPos.x;
f32 xIntersectDist = intersect - resultPos.x;
if (fabsf(xIntersectDist) <= radius / temp_f18) {
if (xIntersectDist * nx <= 4.0f) {
if (BgCheck_ComputeWallDisplacement(colCtx, poly, &resultPos.x, &resultPos.z, nx, ny, nz,
@@ -3567,12 +3536,6 @@ s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCo
*outZ = resultPos.z;
return result;
}
#else
s32 BgCheck_SphVsDynaWallInBgActor(CollisionContext* colCtx, u16 xpFlags, DynaCollisionContext* dyna, SSList* ssList,
f32* outX, f32* outZ, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, f32 radius,
s32 bgId, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_SphVsDynaWallInBgActor.s")
#endif
/**
* Performs collision detection on all dyna poly walls using sphere `pos`, `radius`
+32 -32
View File
@@ -27,12 +27,12 @@ Vec3f D_801EE1C0;
Vec3f D_801EE1D0;
Vec3f D_801EE1E0;
Vec3f D_801EE1F0;
EffSparkParams D_801EE200;
EffectSparkInit D_801EE200;
TriNorm D_801EE6C8;
TriNorm D_801EE700;
EffSparkParams D_801EE738;
EffSparkParams D_801EEC00;
EffSparkParams D_801EF0C8;
EffectSparkInit D_801EE738;
EffectSparkInit D_801EEC00;
EffectSparkInit D_801EF0C8;
TriNorm D_801EF590;
TriNorm D_801EF5C8;
TriNorm D_801EF600;
@@ -1382,14 +1382,14 @@ void CollisionCheck_NoBlood(GlobalContext* globalCtx, Collider* collider, Vec3f*
#ifdef NON_MATCHING
// needs in-function static bss
void CollisionCheck_BlueBlood(GlobalContext* globalCtx, Collider* collider, Vec3f* v) {
static EffSparkParams D_801EEC00;
static EffectSparkInit D_801EEC00;
s32 effectIndex;
D_801EEC00.position.x = v->x;
D_801EEC00.position.x = v->y;
D_801EEC00.position.x = v->z;
D_801EEC00.particleFactor1 = 5;
D_801EEC00.particleFactor2 = 5;
D_801EEC00.uDiv = 5;
D_801EEC00.vDiv = 5;
D_801EEC00.colorStart[0].r = 10;
D_801EEC00.colorStart[0].g = 10;
D_801EEC00.colorStart[0].b = 200;
@@ -1422,12 +1422,12 @@ void CollisionCheck_BlueBlood(GlobalContext* globalCtx, Collider* collider, Vec3
D_801EEC00.colorEnd[3].g = 0;
D_801EEC00.colorEnd[3].b = 64;
D_801EEC00.colorEnd[3].a = 0;
D_801EEC00.age = 0;
D_801EEC00.timer = 0;
D_801EEC00.duration = 16;
D_801EEC00.velocity = 8.0f;
D_801EEC00.speed = 8.0f;
D_801EEC00.gravity = -1.0f;
Effect_Add(globalCtx, &effectIndex, 0, 0, 1, &D_801EEC00);
Effect_Add(globalCtx, &effectIndex, EFFECT_SPARK, 0, 1, &D_801EEC00);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/CollisionCheck_BlueBlood.s")
@@ -1440,14 +1440,14 @@ void CollisionCheck_BlueBlood(GlobalContext* globalCtx, Collider* collider, Vec3
#ifdef NON_MATCHING
// needs in-function static bss
void CollisionCheck_GreenBlood(GlobalContext* globalCtx, Collider* collider, Vec3f* v) {
static EffSparkParams D_801EF0C8;
static EffectSparkInit D_801EF0C8;
s32 effectIndex;
D_801EF0C8.position.x = v->x;
D_801EF0C8.position.x = v->y;
D_801EF0C8.position.x = v->z;
D_801EF0C8.particleFactor1 = 5;
D_801EF0C8.particleFactor2 = 5;
D_801EF0C8.uDiv = 5;
D_801EF0C8.vDiv = 5;
D_801EF0C8.colorStart[0].r = 10;
D_801EF0C8.colorStart[0].g = 200;
D_801EF0C8.colorStart[0].b = 10;
@@ -1480,11 +1480,11 @@ void CollisionCheck_GreenBlood(GlobalContext* globalCtx, Collider* collider, Vec
D_801EF0C8.colorEnd[3].g = 64;
D_801EF0C8.colorEnd[3].b = 0;
D_801EF0C8.colorEnd[3].a = 0;
D_801EF0C8.age = 0;
D_801EF0C8.timer = 0;
D_801EF0C8.duration = 16;
D_801EF0C8.velocity = 8.0f;
D_801EF0C8.speed = 8.0f;
D_801EF0C8.gravity = -1.0f;
Effect_Add(globalCtx, &effectIndex, 0, 0, 1, &D_801EF0C8);
Effect_Add(globalCtx, &effectIndex, EFFECT_SPARK, 0, 1, &D_801EF0C8);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/CollisionCheck_GreenBlood.s")
@@ -3751,14 +3751,14 @@ void Collider_UpdateSphere(s32 limb, ColliderSphere* collider) {
#ifdef NON_MATCHING
// needs in-function static bss
void CollisionCheck_SpawnRedBlood(GlobalContext* globalCtx, Vec3f* v) {
static EffSparkParams D_801EE200;
static EffectSparkInit D_801EE200;
s32 effectIndex;
D_801EE200.position.x = v->x;
D_801EE200.position.x = v->y;
D_801EE200.position.x = v->z;
D_801EE200.particleFactor1 = 5;
D_801EE200.particleFactor2 = 5;
D_801EE200.uDiv = 5;
D_801EE200.vDiv = 5;
D_801EE200.colorStart[0].r = 128;
D_801EE200.colorStart[0].g = 0;
D_801EE200.colorStart[0].b = 64;
@@ -3791,12 +3791,12 @@ void CollisionCheck_SpawnRedBlood(GlobalContext* globalCtx, Vec3f* v) {
D_801EE200.colorEnd[3].g = 0;
D_801EE200.colorEnd[3].b = 64;
D_801EE200.colorEnd[3].a = 0;
D_801EE200.age = 0;
D_801EE200.timer = 0;
D_801EE200.duration = 16;
D_801EE200.velocity = 8.0f;
D_801EE200.speed = 8.0f;
D_801EE200.gravity = -1.0f;
Effect_Add(globalCtx, &effectIndex, 0, 0, 1, &D_801EE200);
Effect_Add(globalCtx, &effectIndex, EFFECT_SPARK, 0, 1, &D_801EE200);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/CollisionCheck_SpawnRedBlood.s")
@@ -3809,14 +3809,14 @@ void CollisionCheck_SpawnRedBlood(GlobalContext* globalCtx, Vec3f* v) {
#ifdef NON_MATCHING
// needs in-function static bss
void CollisionCheck_SpawnWaterDroplets(GlobalContext* globalCtx, Vec3f* v) {
static EffSparkParams D_801EE738;
static EffectSparkInit D_801EE738;
s32 effectIndex;
D_801EE738.position.x = v->x;
D_801EE738.position.x = v->y;
D_801EE738.position.x = v->z;
D_801EE738.particleFactor1 = 5;
D_801EE738.particleFactor2 = 5;
D_801EE738.uDiv = 5;
D_801EE738.vDiv = 5;
D_801EE738.colorStart[0].r = 255;
D_801EE738.colorStart[0].g = 255;
D_801EE738.colorStart[0].b = 255;
@@ -3849,12 +3849,12 @@ void CollisionCheck_SpawnWaterDroplets(GlobalContext* globalCtx, Vec3f* v) {
D_801EE738.colorEnd[3].g = 0;
D_801EE738.colorEnd[3].b = 0;
D_801EE738.colorEnd[3].a = 0;
D_801EE738.age = 0;
D_801EE738.timer = 0;
D_801EE738.duration = 16;
D_801EE738.velocity = 8.0f;
D_801EE738.speed = 8.0f;
D_801EE738.gravity = -1.0f;
Effect_Add(globalCtx, &effectIndex, 0, 0, 1, &D_801EE738);
Effect_Add(globalCtx, &effectIndex, EFFECT_SPARK, 0, 1, &D_801EE738);
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_collision_check/CollisionCheck_SpawnWaterDroplets.s")
@@ -3864,7 +3864,7 @@ void CollisionCheck_SpawnWaterDroplets(GlobalContext* globalCtx, Vec3f* v) {
* Spawns streaks of light from hits against solid objects
*/
void CollisionCheck_SpawnShieldParticles(GlobalContext* globalCtx, Vec3f* v) {
static EffShieldParticleInit shieldParticleInitMetal = {
static EffectShieldParticleInit shieldParticleInitMetal = {
16,
{ 0, 0, 0 },
{ 0, 200, 255, 255 },
@@ -3889,7 +3889,7 @@ void CollisionCheck_SpawnShieldParticles(GlobalContext* globalCtx, Vec3f* v) {
shieldParticleInitMetal.lightPoint.y = shieldParticleInitMetal.position.y;
shieldParticleInitMetal.lightPoint.z = shieldParticleInitMetal.position.z;
Effect_Add(globalCtx, &effectIndex, 3, 0, 1, &shieldParticleInitMetal);
Effect_Add(globalCtx, &effectIndex, EFFECT_SHIELD_PARTICLE, 0, 1, &shieldParticleInitMetal);
}
/**
@@ -3919,7 +3919,7 @@ void CollisionCheck_SpawnShieldParticlesMetal2(GlobalContext* globalCtx, Vec3f*
* Spawns streaks of light and makes a wooden sound
*/
void CollisionCheck_SpawnShieldParticlesWood(GlobalContext* globalCtx, Vec3f* v, Vec3f* pos) {
static EffShieldParticleInit shieldParticleInitWood = {
static EffectShieldParticleInit shieldParticleInitWood = {
16,
{ 0, 0, 0 },
{ 0, 200, 255, 255 },
@@ -3944,7 +3944,7 @@ void CollisionCheck_SpawnShieldParticlesWood(GlobalContext* globalCtx, Vec3f* v,
shieldParticleInitWood.lightPoint.y = shieldParticleInitWood.position.y;
shieldParticleInitWood.lightPoint.z = shieldParticleInitWood.position.z;
Effect_Add(globalCtx, &effectIndex, 3, 0, 1, &shieldParticleInitWood);
Effect_Add(globalCtx, &effectIndex, EFFECT_SHIELD_PARTICLE, 0, 1, &shieldParticleInitWood);
func_8019F1C0(pos, NA_SE_IT_REFLECTION_WOOD);
}
+1 -1
View File
@@ -116,7 +116,7 @@ void func_800E992C(GlobalContext* globalCtx, s32 arg1) {
OPEN_DISPS(globalCtx->state.gfxCtx);
func_8012C560(globalCtx->state.gfxCtx);
gSPMatrix(POLY_XLU_DISP++, &D_801D1DE0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, func_800E99B0(globalCtx->state.gfxCtx, arg1));
CLOSE_DISPS(globalCtx->state.gfxCtx);
+975 -36
View File
File diff suppressed because it is too large Load Diff
+201 -5
View File
@@ -1,11 +1,207 @@
#include "global.h"
#include "vt.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_shield_particle/EffectShieldParticle_Init.s")
#include "assets/code/eff_shield_particle/eff_shield_particle.c"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_shield_particle/EffectShieldParticle_Destroy.s")
void EffectShieldParticle_Init(void* thisx, void* initParamsx) {
EffectShieldParticle* this = (EffectShieldParticle*)thisx;
EffectShieldParticleInit* initParams = (EffectShieldParticleInit*)initParamsx;
EffectShieldParticleElement* elem;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_shield_particle/EffectShieldParticle_Update.s")
if ((this != NULL) && (initParams != NULL)) {
this->numElements = initParams->numElements;
if (this->numElements > ARRAY_COUNT(this->elements)) {
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_shield_particle/EffectShieldParticle_CalculateColors.s")
this->position = initParams->position;
this->primColorStart = initParams->primColorStart;
this->envColorStart = initParams->envColorStart;
this->primColorMid = initParams->primColorMid;
this->envColorMid = initParams->envColorMid;
this->primColorEnd = initParams->primColorEnd;
this->envColorEnd = initParams->envColorEnd;
this->deceleration = initParams->deceleration;
this->maxInitialSpeed = initParams->maxInitialSpeed;
this->lengthCutoff = initParams->lengthCutoff;
this->duration = initParams->duration;
this->timer = 0;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_shield_particle/EffectShieldParticle_Draw.s")
for (elem = &this->elements[0]; elem < &this->elements[this->numElements]; elem++) {
elem->initialSpeed = (Rand_ZeroOne() * (this->maxInitialSpeed * 0.5f)) + (this->maxInitialSpeed * 0.5f);
elem->endX = 0.0f;
elem->startXChange = 0.0f;
elem->startX = 0.0f;
elem->endXChange = elem->initialSpeed;
elem->yaw = Rand_ZeroOne() * 65534.0f;
elem->pitch = Rand_ZeroOne() * 65534.0f;
}
this->lightDecay = initParams->lightDecay;
if (this->lightDecay == true) {
this->lightInfo.type = LIGHT_POINT_NOGLOW;
this->lightInfo.params.point = initParams->lightPoint;
this->lightNode =
LightContext_InsertLight(Effect_GetGlobalCtx(), &Effect_GetGlobalCtx()->lightCtx, &this->lightInfo);
} else {
this->lightNode = NULL;
}
}
}
void EffectShieldParticle_Destroy(void* thisx) {
EffectShieldParticle* this = (EffectShieldParticle*)thisx;
if ((this != NULL) && (this->lightDecay == true)) {
if (this->lightNode == Effect_GetGlobalCtx()->lightCtx.listHead) {
Effect_GetGlobalCtx()->lightCtx.listHead = this->lightNode->next;
}
LightContext_RemoveLight(Effect_GetGlobalCtx(), &Effect_GetGlobalCtx()->lightCtx, this->lightNode);
}
}
s32 EffectShieldParticle_Update(void* thisx) {
EffectShieldParticle* this = (EffectShieldParticle*)thisx;
EffectShieldParticleElement* elem;
if (this == NULL) {
return 0;
}
for (elem = &this->elements[0]; elem < &this->elements[this->numElements]; elem++) {
elem->endXChange -= this->deceleration;
if (elem->endXChange < 0.0f) {
elem->endXChange = 0.0f;
}
if (elem->startXChange > 0.0f) {
elem->startXChange -= this->deceleration;
if (elem->startXChange < 0.0f) {
elem->startXChange = 0.0f;
}
}
elem->endX += elem->endXChange;
elem->startX += elem->startXChange;
if ((elem->startXChange == 0.0f) && (this->lengthCutoff < (elem->endX - elem->startX))) {
elem->startXChange = elem->initialSpeed;
}
}
if (this->lightDecay == true) {
this->lightInfo.params.point.radius /= 2;
}
this->timer++;
if (this->duration < this->timer) {
return 1;
}
return 0;
}
void EffectShieldParticle_GetColors(EffectShieldParticle* this, Color_RGBA8* primColor, Color_RGBA8* envColor) {
s32 halfDuration = this->duration * 0.5f;
if (halfDuration == 0) {
primColor->r = this->primColorStart.r;
primColor->g = this->primColorStart.g;
primColor->b = this->primColorStart.b;
primColor->a = this->primColorStart.a;
envColor->r = this->envColorStart.r;
envColor->g = this->envColorStart.g;
envColor->b = this->envColorStart.b;
envColor->a = this->envColorStart.a;
} else if (this->timer < halfDuration) {
f32 ratio = this->timer / (f32)halfDuration;
primColor->r = LERPIMP(this->primColorStart.r, this->primColorMid.r, ratio);
primColor->g = LERPIMP(this->primColorStart.g, this->primColorMid.g, ratio);
primColor->b = LERPIMP(this->primColorStart.b, this->primColorMid.b, ratio);
primColor->a = LERPIMP(this->primColorStart.a, this->primColorMid.a, ratio);
envColor->r = LERPIMP(this->envColorStart.r, this->envColorMid.r, ratio);
envColor->g = LERPIMP(this->envColorStart.g, this->envColorMid.g, ratio);
envColor->b = LERPIMP(this->envColorStart.b, this->envColorMid.b, ratio);
envColor->a = LERPIMP(this->envColorStart.a, this->envColorMid.a, ratio);
} else {
f32 ratio = (this->timer - halfDuration) / (f32)halfDuration;
primColor->r = LERPIMP(this->primColorMid.r, this->primColorEnd.r, ratio);
primColor->g = LERPIMP(this->primColorMid.g, this->primColorEnd.g, ratio);
primColor->b = LERPIMP(this->primColorMid.b, this->primColorEnd.b, ratio);
primColor->a = LERPIMP(this->primColorMid.a, this->primColorEnd.a, ratio);
envColor->r = LERPIMP(this->envColorMid.r, this->envColorEnd.r, ratio);
envColor->g = LERPIMP(this->envColorMid.g, this->envColorEnd.g, ratio);
envColor->b = LERPIMP(this->envColorMid.b, this->envColorEnd.b, ratio);
envColor->a = LERPIMP(this->envColorMid.a, this->envColorEnd.a, ratio);
}
}
void EffectShieldParticle_Draw(void* thisx, GraphicsContext* gfxCtx) {
EffectShieldParticle* this = (EffectShieldParticle*)thisx;
EffectShieldParticleElement* elem;
Color_RGBA8 primColor;
Color_RGBA8 envColor;
OPEN_DISPS(gfxCtx);
if (this != NULL) {
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE);
gDPPipeSync(POLY_XLU_DISP++);
gSPTexture(POLY_XLU_DISP++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPLoadTextureBlock(POLY_XLU_DISP++, D_04054F20, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
gDPSetCombineLERP(POLY_XLU_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, 0, TEXEL0, 0, 0, 0,
0, COMBINED, 0, 0, 0, COMBINED);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
gSPSetGeometryMode(POLY_XLU_DISP++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
EffectShieldParticle_GetColors(this, &primColor, &envColor);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, primColor.r, primColor.g, primColor.b, primColor.a);
gDPSetEnvColor(POLY_XLU_DISP++, envColor.r, envColor.g, envColor.b, envColor.a);
gDPPipeSync(POLY_XLU_DISP++);
for (elem = &this->elements[0]; elem < &this->elements[this->numElements]; elem++) {
Mtx* mtx;
MtxF sp104;
MtxF spC4;
MtxF sp84;
f32 temp1 = (elem->endX + elem->startX) * 0.5f;
f32 temp2 = elem->endX - elem->startX;
f32 temp3 = (temp2 * (1.0f / 64.0f)) / 0.02f;
if (temp3 < 1.0f) {
temp3 = 1.0f;
}
SkinMatrix_SetTranslate(&spC4, this->position.x, this->position.y, this->position.z);
SkinMatrix_SetRotateRPY(&sp104, 0, elem->yaw, 0);
SkinMatrix_MtxFMtxFMult(&spC4, &sp104, &sp84);
SkinMatrix_SetRotateRPY(&sp104, 0, 0, elem->pitch);
SkinMatrix_MtxFMtxFMult(&sp84, &sp104, &spC4);
SkinMatrix_SetTranslate(&sp104, temp1, 0.0f, 0.0f);
SkinMatrix_MtxFMtxFMult(&spC4, &sp104, &sp84);
SkinMatrix_SetScale(&sp104, temp3 * 0.02f, 0.02f, 0.02f);
SkinMatrix_MtxFMtxFMult(&sp84, &sp104, &spC4);
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &spC4);
if (mtx == NULL) {
break;
}
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPVertex(POLY_XLU_DISP++, sEffShieldParticleVtx, 4, 0);
gSP2Triangles(POLY_XLU_DISP++, 0, 1, 2, 0, 0, 3, 1, 0);
}
}
CLOSE_DISPS(gfxCtx);
}
+260 -4
View File
@@ -1,9 +1,265 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_spark/EffectSpark_Init.s")
void EffectSpark_Init(void* thisx, void* initParamsx) {
EffectSpark* this = (EffectSpark*)thisx;
EffectSparkInit* initParams = (EffectSparkInit*)initParamsx;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_spark/EffectSpark_Destroy.s")
f32 velocityNorm;
s32 i;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_spark/EffectSpark_Update.s")
if ((this != NULL) && (initParams != NULL)) {
if ((initParams->uDiv == 0) || (initParams->vDiv == 0)) {
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_spark/EffectSpark_Draw.s")
this->position = initParams->position;
this->speed = initParams->speed;
this->gravity = initParams->gravity;
this->uDiv = initParams->uDiv;
this->vDiv = initParams->vDiv;
this->colorStart[0].r = initParams->colorStart[0].r;
this->colorStart[0].g = initParams->colorStart[0].g;
this->colorStart[0].b = initParams->colorStart[0].b;
this->colorStart[0].a = initParams->colorStart[0].a;
this->colorStart[1].r = initParams->colorStart[1].r;
this->colorStart[1].g = initParams->colorStart[1].g;
this->colorStart[1].b = initParams->colorStart[1].b;
this->colorStart[1].a = initParams->colorStart[1].a;
this->colorStart[2].r = initParams->colorStart[2].r;
this->colorStart[2].g = initParams->colorStart[2].g;
this->colorStart[2].b = initParams->colorStart[2].b;
this->colorStart[2].a = initParams->colorStart[2].a;
this->colorStart[3].r = initParams->colorStart[3].r;
this->colorStart[3].g = initParams->colorStart[3].g;
this->colorStart[3].b = initParams->colorStart[3].b;
this->colorStart[3].a = initParams->colorStart[3].a;
this->colorEnd[0].r = initParams->colorEnd[0].r;
this->colorEnd[0].g = initParams->colorEnd[0].g;
this->colorEnd[0].b = initParams->colorEnd[0].b;
this->colorEnd[0].a = initParams->colorEnd[0].a;
this->colorEnd[1].r = initParams->colorEnd[1].r;
this->colorEnd[1].g = initParams->colorEnd[1].g;
this->colorEnd[1].b = initParams->colorEnd[1].b;
this->colorEnd[1].a = initParams->colorEnd[1].a;
this->colorEnd[2].r = initParams->colorEnd[2].r;
this->colorEnd[2].g = initParams->colorEnd[2].g;
this->colorEnd[2].b = initParams->colorEnd[2].b;
this->colorEnd[2].a = initParams->colorEnd[2].a;
this->colorEnd[3].r = initParams->colorEnd[3].r;
this->colorEnd[3].g = initParams->colorEnd[3].g;
this->colorEnd[3].b = initParams->colorEnd[3].b;
this->colorEnd[3].a = initParams->colorEnd[3].a;
this->duration = initParams->duration;
this->numElements = (this->uDiv * this->vDiv) + 2;
if (this->numElements > ARRAY_COUNT(this->elements)) {
return;
}
for (i = 0; i < this->numElements; i++) {
EffectSparkElement* elem = &this->elements[i];
elem->position.x = this->position.x;
elem->position.y = this->position.y;
elem->position.z = this->position.z;
elem->velocity.x = Rand_ZeroOne() - 0.5f;
elem->velocity.y = Rand_ZeroOne() - 0.5f;
elem->velocity.z = Rand_ZeroOne() - 0.5f;
velocityNorm = sqrtf(SQXYZ(elem->velocity));
if (!(fabsf(velocityNorm) < 0.008f)) {
elem->velocity.x *= this->speed * (1.0f / velocityNorm);
elem->velocity.y *= this->speed * (1.0f / velocityNorm);
elem->velocity.z *= this->speed * (1.0f / velocityNorm);
} else {
elem->velocity.x = elem->velocity.z = 0.0f;
elem->velocity.y = this->speed;
}
elem->unkVelocity.x = 30000.0f - Rand_ZeroOne() * 15000.0f;
elem->unkVelocity.y = 30000.0f - Rand_ZeroOne() * 15000.0f;
elem->unkVelocity.z = 30000.0f - Rand_ZeroOne() * 15000.0f;
elem->unkPosition.x = Rand_ZeroOne() * 65534.0f;
elem->unkPosition.y = Rand_ZeroOne() * 65534.0f;
elem->unkPosition.z = Rand_ZeroOne() * 65534.0f;
}
this->timer = 0;
}
}
void EffectSpark_Destroy(void* thisx) {
}
s32 EffectSpark_Update(void* thisx) {
EffectSpark* this = (EffectSpark*)thisx;
EffectSparkElement* elem;
s32 i;
for (i = 0; i < this->numElements; i++) {
elem = &this->elements[i];
elem->position.x += elem->velocity.x;
elem->position.y += elem->velocity.y;
elem->position.z += elem->velocity.z;
elem->velocity.y += this->gravity;
elem->unkPosition.x += elem->unkVelocity.x;
elem->unkPosition.y += elem->unkVelocity.y;
elem->unkPosition.z += elem->unkVelocity.z;
}
this->timer++;
if (this->duration < this->timer) {
return 1;
} else {
return 0;
}
}
void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
Vtx* vertices;
EffectSpark* this = (EffectSpark*)thisx;
GlobalContext* globalCtx = Effect_GetGlobalCtx();
s32 i;
s32 j;
u8 sp1D3;
u8 sp1D2;
u8 sp1D1;
u8 sp1D0;
u8 sp1CF;
u8 sp1CE;
u8 sp1CD;
u8 sp1CC;
u8 sp1CB;
u8 sp1CA;
u8 sp1C9;
u8 sp1C8;
u8 sp1C7;
u8 sp1C6;
u8 sp1C5;
u8 sp1C4;
f32 ratio;
OPEN_DISPS(gfxCtx);
if (this != NULL) {
gSPMatrix(POLY_XLU_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0x26);
gDPSetCycleType(POLY_XLU_DISP++, G_CYC_2CYCLE);
gDPPipeSync(POLY_XLU_DISP++);
gSPTexture(POLY_XLU_DISP++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPLoadTextureBlock(POLY_XLU_DISP++, D_04054F20, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
gDPSetCombineMode(POLY_XLU_DISP++, G_CC_SHADEDECALA, G_CC_PASS2);
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
gSPClearGeometryMode(POLY_XLU_DISP++, G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
gSPSetGeometryMode(POLY_XLU_DISP++, G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH);
gDPPipeSync(POLY_XLU_DISP++);
vertices = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[4])));
if (vertices == NULL) {
goto end;
}
j = 0;
ratio = (f32)this->timer / (f32)this->duration;
sp1D3 = F32_LERPIMP(this->colorStart[0].r, this->colorEnd[0].r, ratio);
sp1D2 = F32_LERPIMP(this->colorStart[0].g, this->colorEnd[0].g, ratio);
sp1D1 = F32_LERPIMP(this->colorStart[0].b, this->colorEnd[0].b, ratio);
sp1D0 = F32_LERPIMP(this->colorStart[0].a, this->colorEnd[0].a, ratio);
sp1CF = F32_LERPIMP(this->colorStart[1].r, this->colorEnd[1].r, ratio);
sp1CE = F32_LERPIMP(this->colorStart[1].g, this->colorEnd[1].g, ratio);
sp1CD = F32_LERPIMP(this->colorStart[1].b, this->colorEnd[1].b, ratio);
sp1CC = F32_LERPIMP(this->colorStart[1].a, this->colorEnd[1].a, ratio);
sp1CB = F32_LERPIMP(this->colorStart[2].r, this->colorEnd[2].r, ratio);
sp1CA = F32_LERPIMP(this->colorStart[2].g, this->colorEnd[2].g, ratio);
sp1C9 = F32_LERPIMP(this->colorStart[2].b, this->colorEnd[2].b, ratio);
sp1C8 = F32_LERPIMP(this->colorStart[2].a, this->colorEnd[2].a, ratio);
sp1C7 = F32_LERPIMP(this->colorStart[3].r, this->colorEnd[3].r, ratio);
sp1C6 = F32_LERPIMP(this->colorStart[3].g, this->colorEnd[3].g, ratio);
sp1C5 = F32_LERPIMP(this->colorStart[3].b, this->colorEnd[3].b, ratio);
sp1C4 = F32_LERPIMP(this->colorStart[3].a, this->colorEnd[3].a, ratio);
for (i = 0; i < this->numElements; i++) {
MtxF sp12C;
MtxF spEC;
MtxF spAC;
MtxF sp6C;
EffectSparkElement* elem = &this->elements[i];
Mtx* mtx;
f32 temp;
SkinMatrix_SetTranslate(&spEC, elem->position.x, elem->position.y, elem->position.z);
temp = ((Rand_ZeroOne() * 2.5f) + 1.5f) / 64.0f;
SkinMatrix_SetScale(&spAC, temp, temp, 1.0f);
SkinMatrix_MtxFMtxFMult(&spEC, &globalCtx->billboardMtxF, &sp6C);
SkinMatrix_MtxFMtxFMult(&sp6C, &spAC, &sp12C);
vertices[j].v.ob[0] = -32;
vertices[j].v.ob[1] = -32;
vertices[j].v.ob[2] = 0;
vertices[j].v.cn[0] = sp1D3;
vertices[j].v.cn[1] = sp1D2;
vertices[j].v.cn[2] = sp1D1;
vertices[j].v.cn[3] = sp1D0;
vertices[j].v.tc[0] = 0;
vertices[j].v.tc[1] = 1024;
vertices[j].v.flag = 0;
vertices[j + 1].v.ob[0] = 32;
vertices[j + 1].v.ob[1] = 32;
vertices[j + 1].v.ob[2] = 0;
vertices[j + 1].v.cn[0] = sp1CF;
vertices[j + 1].v.cn[1] = sp1CE;
vertices[j + 1].v.cn[2] = sp1CD;
vertices[j + 1].v.cn[3] = sp1CC;
vertices[j + 1].v.tc[0] = 1024;
vertices[j + 1].v.tc[1] = 0;
vertices[j + 1].v.flag = 0;
vertices[j + 2].v.ob[0] = -32;
vertices[j + 2].v.ob[1] = 32;
vertices[j + 2].v.ob[2] = 0;
vertices[j + 2].v.cn[0] = sp1CB;
vertices[j + 2].v.cn[1] = sp1CA;
vertices[j + 2].v.cn[2] = sp1C9;
vertices[j + 2].v.cn[3] = sp1C8;
vertices[j + 2].v.tc[0] = 0;
vertices[j + 2].v.tc[1] = 0;
vertices[j + 2].v.flag = 0;
vertices[j + 3].v.ob[0] = 32;
vertices[j + 3].v.ob[1] = -32;
vertices[j + 3].v.ob[2] = 0;
vertices[j + 3].v.cn[0] = sp1C7;
vertices[j + 3].v.cn[1] = sp1C6;
vertices[j + 3].v.cn[2] = sp1C5;
vertices[j + 3].v.cn[3] = sp1C4;
vertices[j + 3].v.tc[0] = 1024;
vertices[j + 3].v.tc[1] = 1024;
vertices[j + 3].v.flag = 0;
j += 4;
mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &sp12C);
if (mtx == NULL) {
goto end;
}
gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPVertex(POLY_XLU_DISP++, &vertices[4 * i], 4, 0);
gSP2Triangles(POLY_XLU_DISP++, 2, 0, 3, 0, 2, 3, 1, 0);
}
gDPPipeSync(POLY_XLU_DISP++);
}
end:
CLOSE_DISPS(gfxCtx);
}
+104 -6
View File
@@ -1,13 +1,111 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE2A0.s")
void func_800AE2A0(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3) {
f32 cos;
Gfx* displayListHead;
f32 absCos;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE434.s")
OPEN_DISPS(globalCtx->state.gfxCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE5A0.s")
displayListHead = POLY_OPA_DISP;
cos = Math_CosS((0x8000 / arg3) * arg2);
absCos = fabsf(cos);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE5E4.s")
gDPPipeSync(displayListHead++);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE778.s")
if (color == NULL) {
gDPSetFogColor(displayListHead++, 255, 0, 0, 0);
} else {
gDPSetFogColor(displayListHead++, color->r, color->g, color->b, color->a);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_ss_dead/func_800AE8EC.s")
gSPFogPosition(displayListHead++, 0, (s16)(absCos * 3000.0f) + 1500);
POLY_OPA_DISP = displayListHead;
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
void func_800AE434(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3) {
Gfx* displayListHead;
f32 cos;
OPEN_DISPS(globalCtx->state.gfxCtx);
cos = Math_CosS((0x4000 / arg3) * arg2);
displayListHead = POLY_OPA_DISP;
gDPPipeSync(displayListHead++);
gDPSetFogColor(displayListHead++, color->r, color->g, color->b, color->a);
gSPFogPosition(displayListHead++, 0, (s16)(2800.0f * fabsf(cos)) + 1700);
POLY_OPA_DISP = displayListHead;
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
void func_800AE5A0(GlobalContext* globalCtx) {
s32 pad;
OPEN_DISPS(globalCtx->state.gfxCtx);
gDPPipeSync(POLY_OPA_DISP++);
POLY_OPA_DISP = func_801660B8(globalCtx, POLY_OPA_DISP);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
void func_800AE5E4(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3) {
f32 cos;
Gfx* displayListHead;
f32 absCos;
OPEN_DISPS(globalCtx->state.gfxCtx);
displayListHead = POLY_XLU_DISP;
cos = Math_CosS((0x8000 / arg3) * arg2);
absCos = fabsf(cos);
gDPPipeSync(displayListHead++);
if (color == NULL) {
gDPSetFogColor(displayListHead++, 255, 0, 0, 0);
} else {
gDPSetFogColor(displayListHead++, color->r, color->g, color->b, color->a);
}
gSPFogPosition(displayListHead++, 0, (s16)(absCos * 3000.0f) + 1500);
POLY_XLU_DISP = displayListHead;
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
void func_800AE778(GlobalContext* globalCtx, Color_RGBA8* color, s16 arg2, s16 arg3) {
f32 cos;
Gfx* displayListHead;
OPEN_DISPS(globalCtx->state.gfxCtx);
displayListHead = POLY_XLU_DISP;
cos = Math_CosS((0x4000 / arg3) * arg2);
gDPPipeSync(displayListHead++);
gDPSetFogColor(displayListHead++, color->r, color->g, color->b, color->a);
gSPFogPosition(displayListHead++, 0, (s16)(2800.0f * fabsf(cos)) + 1700);
POLY_XLU_DISP = displayListHead;
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
void func_800AE8EC(GlobalContext* globalCtx) {
s32 pad;
OPEN_DISPS(globalCtx->state.gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
POLY_XLU_DISP = func_801660B8(globalCtx, POLY_XLU_DISP);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
+278 -8
View File
@@ -1,17 +1,287 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/func_800AE930.s")
void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f32 arg3, s16 arg4,
CollisionPoly* colPoly, s32 arg6) {
Vec3s spB8;
Vec3s spB0;
EffectTireMarkElement* spAC;
EffectTireMarkElement* spA8;
u32 spA4;
u32 spA0;
Vec3s* vtxList = colCtx->colHeader->vtxList;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/func_800AEF44.s")
if ((arg6 != 50) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) {
func_800AEF44(this);
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_InitParticle.s")
spB8.x = (Math_SinS(arg4 - 0x4000) * arg3) + pos->x;
spB8.z = (Math_CosS(arg4 - 0x4000) * arg3) + pos->z;
spB8.y = func_800BFD84(colPoly, spB8.x, spB8.z) + 2.0f;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_Init.s")
spB0.x = (Math_SinS(arg4 + 0x4000) * arg3) + pos->x;
spB0.z = (Math_CosS(arg4 + 0x4000) * arg3) + pos->z;
spB0.y = func_800BFD84(colPoly, spB0.x, spB0.z) + 2.0f;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_Destroy.s")
spAC = &this->elements[this->numElements - 1];
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_Update.s")
if ((this->numElements != 0) && (spAC->colPoly != NULL) && (colPoly != spAC->colPoly) &&
(func_800BFDEC(spAC->colPoly, colPoly, &spA4, &spA0) == 2)) {
Vec3f sp90;
Vec3f sp84;
Vec3f sp78;
Vec3f sp6C;
Vec3f sp60;
Vec3f sp54;
Vec3f sp48;
Vec3f sp3C;
Vec3f sp30;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_InitVertices.s")
sp84.x = vtxList[spA4].x;
sp84.y = vtxList[spA4].y;
sp84.z = vtxList[spA4].z;
sp90.x = vtxList[spA0].x;
sp90.y = vtxList[spA0].y;
sp90.z = vtxList[spA0].z;
sp54.x = spAC->p1.x;
sp54.y = spAC->p1.y;
sp54.z = spAC->p1.z;
sp60.x = spB0.x;
sp60.y = spB0.y;
sp60.z = spB0.z;
sp3C.x = spAC->p2.x;
sp3C.y = spAC->p2.y;
sp3C.z = spAC->p2.z;
sp48.x = spB8.x;
sp48.y = spB8.y;
sp48.z = spB8.z;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_eff_tire_mark/EffectTireMark_Draw.s")
if ((func_80179798(&sp84, &sp90, &sp54, &sp60, &sp6C, &sp30) != 0) &&
(func_80179798(&sp84, &sp90, &sp3C, &sp48, &sp78, &sp30) != 0)) {
if (!(spAC->flags & 2)) {
spAC->flags |= 1;
}
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
spA8->p1.x = sp6C.x;
spA8->p1.y = sp6C.y;
spA8->p1.z = sp6C.z;
spA8->p2.x = sp78.x;
spA8->p2.y = sp78.y;
spA8->p2.z = sp78.z;
spA8->life = this->elemDuration;
spA8->colPoly = NULL;
this->numElements++;
spAC = &this->elements[this->numElements - 1];
if (!(spAC->flags & 2)) {
spAC->flags |= 1;
}
if (spA8) {} // Necessary to match
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
spA8->p1 = spB0;
spA8->p2 = spB8;
spA8->life = this->elemDuration;
spA8->colPoly = colPoly;
this->numElements++;
return;
}
if (!(spAC->flags & 2)) {
spAC->flags |= 1;
}
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
spA8->p1 = spB0;
spA8->p2 = spB8;
spA8->life = this->elemDuration;
spA8->colPoly = colPoly;
this->numElements++;
return;
}
if (!(spAC->flags & 2)) {
spAC->flags |= 1;
}
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
spA8->p1 = spB0;
spA8->p2 = spB8;
spA8->life = this->elemDuration;
spA8->colPoly = colPoly;
this->numElements++;
}
void func_800AEF44(EffectTireMark* this) {
EffectTireMarkElement* elem = &this->elements[this->numElements - 1];
elem->flags |= 2;
}
void EffectTireMark_InitElement(EffectTireMarkElement* elem) {
elem->flags = 0;
elem->life = 0;
elem->colPoly = NULL;
elem->p1.x = elem->p1.y = elem->p1.z = elem->p2.x = elem->p2.y = elem->p2.z = 0;
}
void EffectTireMark_Init(void* thisx, void* initParamsx) {
EffectTireMark* this = (EffectTireMark*)thisx;
EffectTireMarkInit* initParams = (EffectTireMarkInit*)initParamsx;
s32 i;
for (i = 0; i < ARRAY_COUNT(this->elements); i++) {
EffectTireMark_InitElement(&this->elements[i]);
}
this->unk600 = initParams->unk0;
this->numElements = 0;
if (initParams->elemDuration > 62) {
this->elemDuration = 62;
} else {
this->elemDuration = initParams->elemDuration;
}
this->color = initParams->color;
}
void EffectTireMark_Destroy(void* thisx) {
}
s32 EffectTireMark_Update(void* thisx) {
EffectTireMark* this = (EffectTireMark*)thisx;
s32 i;
s32 j;
if (this->numElements == 0) {
return 0;
}
for (i = 0; i < this->numElements; i++) {
this->elements[i].life--;
}
if (this->elements[0].life <= 0) {
for (j = 0; j < ARRAY_COUNT(this->elements) - 1; j++) {
this->elements[j] = this->elements[j + 1];
}
EffectTireMark_InitElement(&this->elements[j]);
this->numElements--;
if (this->numElements < 0) {
this->numElements = 0;
}
return 0;
}
return 0;
}
void EffectTireMark_SetVertices(Vtx* vtx, EffectTireMarkElement* elem, s32 i, s32 alpha) {
s32 i1 = i * 2;
s32 i2 = i * 2 + 1;
vtx[i1].v.ob[0] = elem->p1.x;
vtx[i1].v.ob[1] = elem->p1.y;
vtx[i1].v.ob[2] = elem->p1.z;
vtx[i1].v.tc[0] = 2048;
vtx[i1].v.tc[1] = 0;
vtx[i1].v.cn[0] = 255;
vtx[i1].v.cn[1] = 255;
vtx[i1].v.cn[2] = 255;
vtx[i1].v.cn[3] = alpha;
vtx[i2].v.ob[0] = elem->p2.x;
vtx[i2].v.ob[1] = elem->p2.y;
vtx[i2].v.ob[2] = elem->p2.z;
vtx[i2].v.tc[0] = 2048;
vtx[i2].v.tc[1] = 1024;
vtx[i2].v.cn[0] = 255;
vtx[i2].v.cn[1] = 255;
vtx[i2].v.cn[2] = 255;
vtx[i2].v.cn[3] = alpha;
}
void EffectTireMark_Draw(void* thisx, GraphicsContext* gfxCtx) {
EffectTireMark* this = (EffectTireMark*)thisx;
EffectTireMarkElement* elem;
Vtx* vtx;
s32 pad;
f32 sp34;
s32 i;
sp34 = 1.0f / this->elemDuration;
OPEN_DISPS(gfxCtx);
if (this->numElements >= 2) {
vtx = GRAPH_ALLOC(gfxCtx, ALIGN16(this->numElements * sizeof(Vtx[2])));
if (vtx != NULL) {
gSPMatrix(POLY_OPA_DISP++, &gIdentityMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP++, 0x2C);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
gDPLoadTextureBlock(POLY_OPA_DISP++, D_04014570, G_IM_FMT_I, G_IM_SIZ_8b, 64, 32, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_WRAP, 6, 5, G_TX_NOLOD, G_TX_NOLOD);
gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0,
COMBINED);
gSPSetGeometryMode(POLY_OPA_DISP++, G_SHADE | G_SHADING_SMOOTH);
gSPClearGeometryMode(POLY_OPA_DISP++, G_CULL_BACK | G_LIGHTING);
EffectTireMark_SetVertices(vtx, &this->elements[0], 0, 255);
vtx[0].v.tc[0] = 0;
vtx[0].v.tc[1] = 0;
vtx[1].v.tc[0] = 0;
vtx[1].v.tc[1] = 1024;
for (i = 1; i < this->numElements; i++) {
elem = &this->elements[i];
EffectTireMark_SetVertices(vtx, elem, i, 255);
if ((elem - 1)->flags & 1) {
if (!(elem->flags & 1)) {
vtx[i * 2 + 0].v.tc[0] = 0;
vtx[i * 2 + 0].v.tc[1] = 0;
vtx[i * 2 + 1].v.tc[0] = 0;
vtx[i * 2 + 1].v.tc[1] = 1024;
dummy_label:;
} else if ((i >= 2) && !((elem - 2)->flags & 1)) {
vtx[i * 2 - 2].v.tc[0] = 0;
vtx[i * 2 - 2].v.tc[1] = 0;
vtx[i * 2 - 1].v.tc[0] = 0;
vtx[i * 2 - 1].v.tc[1] = 1024;
}
if (i == (this->numElements - 1)) {
vtx[i * 2 + 0].v.tc[0] = 0;
vtx[i * 2 + 0].v.tc[1] = 0;
vtx[i * 2 + 1].v.tc[0] = 0;
vtx[i * 2 + 1].v.tc[1] = 1024;
}
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, this->color.r, this->color.g, this->color.b,
(s32)((f32)this->color.a * (f32)elem->life * sp34));
gSPVertex(POLY_OPA_DISP++, &vtx[i * 2 - 2], 4, 0);
gSP2Triangles(POLY_OPA_DISP++, 0, 1, 3, 0, 0, 3, 2, 0);
}
}
}
}
CLOSE_DISPS(gfxCtx);
}
+116 -116
View File
@@ -1,55 +1,57 @@
#include "global.h"
EffInfo sEffInfoTable[] = {
EffectContext sEffectContext;
EffectInfo sEffectInfoTable[] = {
{
sizeof(EffSparkParams),
(eff_init_func)EffectSpark_Init,
(eff_destroy_func)EffectSpark_Destroy,
(eff_update_func)EffectSpark_Update,
(eff_draw_func)EffectSpark_Draw,
sizeof(EffectSpark),
EffectSpark_Init,
EffectSpark_Destroy,
EffectSpark_Update,
EffectSpark_Draw,
},
{
sizeof(EffectBlure),
(eff_init_func)EffectBlure_Init1,
(eff_destroy_func)EffectBlure_Destroy,
(eff_update_func)EffectBlure_Update,
(eff_draw_func)EffectBlure_Draw,
EffectBlure_Init1,
EffectBlure_Destroy,
EffectBlure_Update,
EffectBlure_Draw,
},
{
sizeof(EffectBlure),
(eff_init_func)EffectBlure_Init2,
(eff_destroy_func)EffectBlure_Destroy,
(eff_update_func)EffectBlure_Update,
(eff_draw_func)EffectBlure_Draw,
EffectBlure_Init2,
EffectBlure_Destroy,
EffectBlure_Update,
EffectBlure_Draw,
},
{
sizeof(EffShieldParticleParams),
(eff_init_func)EffectShieldParticle_Init,
(eff_destroy_func)EffectShieldParticle_Destroy,
(eff_update_func)EffectShieldParticle_Update,
(eff_draw_func)EffectShieldParticle_Draw,
sizeof(EffectShieldParticle),
EffectShieldParticle_Init,
EffectShieldParticle_Destroy,
EffectShieldParticle_Update,
EffectShieldParticle_Draw,
},
{
sizeof(EffTireMarkParams),
(eff_init_func)EffectTireMark_Init,
(eff_destroy_func)EffectTireMark_Destroy,
(eff_update_func)EffectTireMark_Update,
(eff_draw_func)EffectTireMark_Draw,
sizeof(EffectTireMark),
EffectTireMark_Init,
EffectTireMark_Destroy,
EffectTireMark_Update,
EffectTireMark_Draw,
},
};
GlobalContext* Effect_GetContext(void) {
return sEffTable.globalCtx;
GlobalContext* Effect_GetGlobalCtx(void) {
return sEffectContext.globalCtx;
}
void* Effect_GetParams(s32 index) {
void* Effect_GetByIndex(s32 index) {
if (index == TOTAL_EFFECT_COUNT) {
return NULL;
}
if (index < SPARK_COUNT) {
if (sEffTable.sparks[index].base.active == 1) {
return &sEffTable.sparks[index].params;
if (sEffectContext.sparks[index].status.active == true) {
return &sEffectContext.sparks[index].effect;
} else {
return NULL;
}
@@ -57,8 +59,8 @@ void* Effect_GetParams(s32 index) {
index -= SPARK_COUNT;
if (index < BLURE_COUNT) {
if (sEffTable.blures[index].base.active == 1) {
return &sEffTable.blures[index].params;
if (sEffectContext.blures[index].status.active == true) {
return &sEffectContext.blures[index].effect;
} else {
return NULL;
}
@@ -66,8 +68,8 @@ void* Effect_GetParams(s32 index) {
index -= BLURE_COUNT;
if (index < SHIELD_PARTICLE_COUNT) {
if (sEffTable.shieldParticles[index].base.active == 1) {
return &sEffTable.shieldParticles[index].params;
if (sEffectContext.shieldParticles[index].status.active == true) {
return &sEffectContext.shieldParticles[index].effect;
} else {
return NULL;
}
@@ -75,8 +77,8 @@ void* Effect_GetParams(s32 index) {
index -= SHIELD_PARTICLE_COUNT;
if (index < TIRE_MARK_COUNT) {
if (sEffTable.tireMarks[index].base.active == 1) {
return &sEffTable.tireMarks[index].params;
if (sEffectContext.tireMarks[index].status.active == true) {
return &sEffectContext.tireMarks[index].effect;
} else {
return NULL;
}
@@ -85,89 +87,87 @@ void* Effect_GetParams(s32 index) {
return NULL;
}
void Effect_InitCommon(EffCommon* common) {
common->active = 0;
common->unk1 = 0;
common->unk2 = 0;
void Effect_InitStatus(EffectStatus* status) {
status->active = false;
status->unk1 = 0;
status->unk2 = 0;
}
void Effect_Init(GlobalContext* globalCtx) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
Effect_InitCommon(&sEffTable.sparks[i].base);
Effect_InitStatus(&sEffectContext.sparks[i].status);
}
for (i = 0; i < BLURE_COUNT; i++) {
Effect_InitCommon(&sEffTable.blures[i].base);
Effect_InitStatus(&sEffectContext.blures[i].status);
}
//! @bug This is probably supposed to loop over shieldParticles, not blures again
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
Effect_InitCommon(&sEffTable.blures[i].base);
//! @bug This is probably supposed to initialize shieldParticles, not blures again
Effect_InitStatus(&sEffectContext.blures[i].status);
}
for (i = 0; i < TIRE_MARK_COUNT; i++) {
Effect_InitCommon(&sEffTable.tireMarks[i].base);
Effect_InitStatus(&sEffectContext.tireMarks[i].status);
}
sEffTable.globalCtx = globalCtx;
sEffectContext.globalCtx = globalCtx;
}
void Effect_Add(GlobalContext* globalCtx, s32* index, s32 type, u8 param_4, u8 param_5, void* initParams) {
void Effect_Add(GlobalContext* globalCtx, s32* pIndex, s32 type, u8 arg3, u8 arg4, void* initParams) {
u32 slotFound;
s32 i;
void* params;
EffCommon* common;
void* effect = NULL;
EffectStatus* status = NULL;
params = NULL;
*index = TOTAL_EFFECT_COUNT;
common = NULL;
*pIndex = TOTAL_EFFECT_COUNT;
if (FrameAdvance_IsEnabled(globalCtx) != true) {
slotFound = 0;
slotFound = false;
switch (type) {
case 0:
case EFFECT_SPARK:
for (i = 0; i < SPARK_COUNT; i++) {
if (sEffTable.sparks[i].base.active == 0) {
slotFound = 1;
*index = i;
params = &sEffTable.sparks[i].params;
common = &sEffTable.sparks[i].base;
if (sEffectContext.sparks[i].status.active == false) {
slotFound = true;
*pIndex = i;
effect = &sEffectContext.sparks[i].effect;
status = &sEffectContext.sparks[i].status;
break;
}
}
break;
case 1:
case 2:
case EFFECT_BLURE1:
case EFFECT_BLURE2:
for (i = 0; i < BLURE_COUNT; i++) {
if (sEffTable.blures[i].base.active == 0) {
slotFound = 1;
*index = i + 3;
params = &sEffTable.blures[i].params;
common = &sEffTable.blures[i].base;
if (sEffectContext.blures[i].status.active == false) {
slotFound = true;
*pIndex = i + SPARK_COUNT;
effect = &sEffectContext.blures[i].effect;
status = &sEffectContext.blures[i].status;
break;
}
}
break;
case 3:
case EFFECT_SHIELD_PARTICLE:
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (sEffTable.shieldParticles[i].base.active == 0) {
slotFound = 1;
*index = i + 28;
params = &sEffTable.shieldParticles[i].params;
common = &sEffTable.shieldParticles[i].base;
if (sEffectContext.shieldParticles[i].status.active == false) {
slotFound = true;
*pIndex = i + SPARK_COUNT + BLURE_COUNT;
effect = &sEffectContext.shieldParticles[i].effect;
status = &sEffectContext.shieldParticles[i].status;
break;
}
}
break;
case 4:
case EFFECT_TIRE_MARK:
for (i = 0; i < TIRE_MARK_COUNT; i++) {
if (sEffTable.tireMarks[i].base.active == 0) {
slotFound = 1;
*index = i + 31;
params = &sEffTable.tireMarks[i].params;
common = &sEffTable.tireMarks[i].base;
if (sEffectContext.tireMarks[i].status.active == false) {
slotFound = true;
*pIndex = i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT;
effect = &sEffectContext.tireMarks[i].effect;
status = &sEffectContext.tireMarks[i].status;
break;
}
}
@@ -175,10 +175,10 @@ void Effect_Add(GlobalContext* globalCtx, s32* index, s32 type, u8 param_4, u8 p
}
if (slotFound) {
sEffInfoTable[type].init(params, initParams);
common->unk2 = param_4;
common->unk1 = param_5;
common->active = 1;
sEffectInfoTable[type].init(effect, initParams);
status->unk2 = arg3;
status->unk1 = arg4;
status->active = true;
}
}
}
@@ -188,8 +188,8 @@ void Effect_DrawAll(GraphicsContext* gfxCtx) {
for (i = 0; i < SPARK_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.sparks[i].base.active) {
sEffInfoTable[0].draw(&sEffTable.sparks[i].params, gfxCtx);
if (sEffectContext.sparks[i].status.active) {
sEffectInfoTable[EFFECT_SPARK].draw(&sEffectContext.sparks[i].effect, gfxCtx);
}
}
@@ -197,22 +197,22 @@ void Effect_DrawAll(GraphicsContext* gfxCtx) {
if (1) {
if (gfxCtx) {}
} // necessary to match
if (sEffTable.blures[i].base.active) {
sEffInfoTable[1].draw(&sEffTable.blures[i].params, gfxCtx);
if (sEffectContext.blures[i].status.active) {
sEffectInfoTable[EFFECT_BLURE1].draw(&sEffectContext.blures[i].effect, gfxCtx);
}
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.shieldParticles[i].base.active) {
sEffInfoTable[3].draw(&sEffTable.shieldParticles[i].params, gfxCtx);
if (sEffectContext.shieldParticles[i].status.active) {
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].draw(&sEffectContext.shieldParticles[i].effect, gfxCtx);
}
}
if (1) {} // necessary to match
for (i = 0; i < TIRE_MARK_COUNT; i++) {
if (sEffTable.tireMarks[i].base.active) {
sEffInfoTable[4].draw(&sEffTable.tireMarks[i].params, gfxCtx);
if (sEffectContext.tireMarks[i].status.active) {
sEffectInfoTable[EFFECT_TIRE_MARK].draw(&sEffectContext.tireMarks[i].effect, gfxCtx);
}
}
}
@@ -222,8 +222,8 @@ void Effect_UpdateAll(GlobalContext* globalCtx) {
for (i = 0; i < SPARK_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.sparks[i].base.active) {
if (sEffInfoTable[0].update(&sEffTable.sparks[i].params) == 1) {
if (sEffectContext.sparks[i].status.active) {
if (sEffectInfoTable[EFFECT_SPARK].update(&sEffectContext.sparks[i].effect) == 1) {
Effect_Destroy(globalCtx, i);
}
}
@@ -231,27 +231,27 @@ void Effect_UpdateAll(GlobalContext* globalCtx) {
for (i = 0; i < BLURE_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.blures[i].base.active) {
if (sEffInfoTable[1].update(&sEffTable.blures[i].params) == 1) {
Effect_Destroy(globalCtx, i + 3);
if (sEffectContext.blures[i].status.active) {
if (sEffectInfoTable[EFFECT_BLURE1].update(&sEffectContext.blures[i].effect) == 1) {
Effect_Destroy(globalCtx, i + SPARK_COUNT);
}
}
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.shieldParticles[i].base.active) {
if (sEffInfoTable[3].update(&sEffTable.shieldParticles[i].params) == 1) {
Effect_Destroy(globalCtx, i + 28);
if (sEffectContext.shieldParticles[i].status.active) {
if (sEffectInfoTable[EFFECT_SHIELD_PARTICLE].update(&sEffectContext.shieldParticles[i].effect) == 1) {
Effect_Destroy(globalCtx, i + SPARK_COUNT + BLURE_COUNT);
}
}
}
for (i = 0; i < TIRE_MARK_COUNT; i++) {
if (1) {} // necessary to match
if (sEffTable.tireMarks[i].base.active) {
if (sEffInfoTable[4].update(&sEffTable.tireMarks[i].params) == 1) {
Effect_Destroy(globalCtx, i + 31);
if (sEffectContext.tireMarks[i].status.active) {
if (sEffectInfoTable[EFFECT_TIRE_MARK].update(&sEffectContext.tireMarks[i].effect) == 1) {
Effect_Destroy(globalCtx, i + SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT);
}
}
}
@@ -263,29 +263,29 @@ void Effect_Destroy(GlobalContext* globalCtx, s32 index) {
}
if (index < SPARK_COUNT) {
sEffTable.sparks[index].base.active = 0;
sEffInfoTable[0].destroy(&sEffTable.sparks[index].params);
sEffectContext.sparks[index].status.active = false;
sEffectInfoTable[EFFECT_SPARK].destroy(&sEffectContext.sparks[index].effect);
return;
}
index -= SPARK_COUNT;
if (index < BLURE_COUNT) {
sEffTable.blures[index].base.active = 0;
sEffInfoTable[1].destroy(&sEffTable.blures[index].params);
sEffectContext.blures[index].status.active = false;
sEffectInfoTable[EFFECT_BLURE1].destroy(&sEffectContext.blures[index].effect);
return;
}
index -= BLURE_COUNT;
if (index < SHIELD_PARTICLE_COUNT) {
sEffTable.shieldParticles[index].base.active = 0;
sEffInfoTable[3].destroy(&sEffTable.shieldParticles[index].params);
sEffectContext.shieldParticles[index].status.active = false;
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].destroy(&sEffectContext.shieldParticles[index].effect);
return;
}
index -= SHIELD_PARTICLE_COUNT;
if (index < TIRE_MARK_COUNT) {
sEffTable.tireMarks[index].base.active = 0;
sEffInfoTable[4].destroy(&sEffTable.tireMarks[index].params);
sEffectContext.tireMarks[index].status.active = false;
sEffectInfoTable[EFFECT_TIRE_MARK].destroy(&sEffectContext.tireMarks[index].effect);
return;
}
}
@@ -294,22 +294,22 @@ void Effect_DestroyAll(GlobalContext* globalCtx) {
s32 i;
for (i = 0; i < SPARK_COUNT; i++) {
sEffTable.sparks[i].base.active = 0;
sEffInfoTable[0].destroy(&sEffTable.sparks[i].params);
sEffectContext.sparks[i].status.active = false;
sEffectInfoTable[EFFECT_SPARK].destroy(&sEffectContext.sparks[i].effect);
}
for (i = 0; i < BLURE_COUNT; i++) {
sEffTable.blures[i].base.active = 0;
sEffInfoTable[1].destroy(&sEffTable.blures[i].params);
sEffectContext.blures[i].status.active = false;
sEffectInfoTable[EFFECT_BLURE1].destroy(&sEffectContext.blures[i].effect);
}
for (i = 0; i < SHIELD_PARTICLE_COUNT; i++) {
sEffTable.shieldParticles[i].base.active = 0;
sEffInfoTable[3].destroy(&sEffTable.shieldParticles[i].params);
sEffectContext.shieldParticles[i].status.active = false;
sEffectInfoTable[EFFECT_SHIELD_PARTICLE].destroy(&sEffectContext.shieldParticles[i].effect);
}
for (i = 0; i < TIRE_MARK_COUNT; i++) {
sEffTable.tireMarks[i].base.active = 0;
sEffInfoTable[4].destroy(&sEffTable.tireMarks[i].params);
sEffectContext.tireMarks[i].status.active = false;
sEffectInfoTable[EFFECT_TIRE_MARK].destroy(&sEffectContext.tireMarks[i].effect);
}
}
+2 -2
View File
@@ -590,7 +590,7 @@ extern Vec3f D_801AE3E0;
void func_800B2364(GlobalContext* globalCtx, Vec3f* pos, Gfx* dList) {
Vec3f posVec = D_801AE3E0;
EffectSsHahen_Spawn(globalCtx, pos, &D_801D15B0, &posVec, 1, 5, 1, 10, dList);
EffectSsHahen_Spawn(globalCtx, pos, &gZeroVec3f, &posVec, 1, 5, 1, 10, dList);
}
// EffectSsStick Spawn Functions
@@ -1032,7 +1032,7 @@ void EffectSsDeadDs_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity,
}
void func_800B31BC(GlobalContext* globalCtx, Vec3f* pos, s16 scale, s16 scaleStep, s16 alpha, s32 life) {
EffectSsDeadDs_Spawn(globalCtx, pos, &D_801D15B0, &D_801D15B0, scale, scaleStep, alpha, life);
EffectSsDeadDs_Spawn(globalCtx, pos, &gZeroVec3f, &gZeroVec3f, scale, scaleStep, alpha, life);
}
// EffectSsIceSmoke Spawn Functions
+2 -1
View File
@@ -1,5 +1,6 @@
#include "global.h"
#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h"
#include "objects/gameplay_keep/gameplay_keep.h"
typedef enum {
FIRE_STATE_0,
@@ -162,7 +163,7 @@ void FireObj_Draw(GlobalContext* globalCtx, FireObj* fire) {
Matrix_Scale(fire->xScale, fire->yScale, 1.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_0407D590);
gSPDisplayList(POLY_XLU_DISP++, gGameplayKeepDrawFlameDL);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
}
+1 -1
View File
@@ -44,7 +44,7 @@ void GameOver_Update(GlobalContext* globalCtx) {
}
gSaveContext.unk_3DC0 = 2000;
gSaveContext.naviTimer = 0;
gSaveContext.tatlTimer = 0;
gSaveContext.seqIndex = (u8)NA_BGM_DISABLED;
gSaveContext.nightSeqIndex = 0xFF;
gSaveContext.eventInf[0] = 0;
+96 -7
View File
@@ -1,15 +1,104 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/D_801DF9C0.s")
#define KALEIDO_OVERLAY(name) \
{ \
NULL, SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \
SEGMENT_END(ovl_##name), 0, #name, \
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_80163700.s")
KaleidoMgrOverlay gKaleidoMgrOverlayTable[] = {
KALEIDO_OVERLAY(kaleido_scope),
KALEIDO_OVERLAY(player_actor),
};
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_80163758.s")
void* sKaleidoAreaPtr = NULL;
KaleidoMgrOverlay* gKaleidoMgrCurOvl = NULL;
FaultAddrConvClient sKaleidoAreaFaultClient;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_801637B4.s")
void* KaleidoManager_FaultAddrConvFunc(void* address, void* param) {
u8* ptr = address;
KaleidoMgrOverlay* ovl = &gKaleidoMgrCurOvl[0];
u8* ramStart;
u8* ramEnd;
size_t size;
uintptr_t offset;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_80163804.s")
if (ovl != NULL) {
size = (u8*)ovl->vramEnd - (u8*)ovl->vramStart;
ramStart = ovl->loadedRamAddr;
ramEnd = ramStart + size;
offset = (u8*)ovl->vramStart - ramStart;
if (ramStart != NULL) {
if (ptr >= ramStart && ptr < ramEnd) {
return ptr + offset;
}
}
}
return NULL;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_8016388C.s")
void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) {
ovl->loadedRamAddr = sKaleidoAreaPtr;
Load2_LoadOverlay(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
ovl->offset = (uintptr_t)ovl->loadedRamAddr - (uintptr_t)ovl->vramStart;
gKaleidoMgrCurOvl = ovl;
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_manager/func_801638D8.s")
void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl) {
if (ovl->loadedRamAddr != NULL) {
ovl->offset = 0;
bzero(ovl->loadedRamAddr, (uintptr_t)ovl->vramEnd - (uintptr_t)ovl->vramStart);
ovl->loadedRamAddr = NULL;
gKaleidoMgrCurOvl = NULL;
}
}
void KaleidoManager_Init(GlobalContext* globalCtx) {
s32 largestSize = 0;
s32 size;
u32 i;
for (i = 0; i < ARRAY_COUNT(gKaleidoMgrOverlayTable); i++) {
size = (uintptr_t)gKaleidoMgrOverlayTable[i].vramEnd - (uintptr_t)gKaleidoMgrOverlayTable[i].vramStart;
if (size > largestSize) {
largestSize = size;
}
}
sKaleidoAreaPtr = THA_AllocEndAlign16(&globalCtx->state.heap, largestSize);
gKaleidoMgrCurOvl = NULL;
Fault_AddAddrConvClient(&sKaleidoAreaFaultClient, KaleidoManager_FaultAddrConvFunc, NULL);
}
void KaleidoManager_Destroy() {
Fault_RemoveAddrConvClient(&sKaleidoAreaFaultClient);
if (gKaleidoMgrCurOvl != NULL) {
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
gKaleidoMgrCurOvl = NULL;
}
sKaleidoAreaPtr = NULL;
}
void* KaleidoManager_GetRamAddr(void* vram) {
if (gKaleidoMgrCurOvl == NULL) {
s32 pad[2];
KaleidoMgrOverlay* ovl = &gKaleidoMgrOverlayTable[0];
do {
if (((uintptr_t)vram >= (uintptr_t)ovl->vramStart) && ((uintptr_t)ovl->vramEnd >= (uintptr_t)vram)) {
KaleidoManager_LoadOvl(ovl);
return (void*)((uintptr_t)vram + ovl->offset);
}
ovl++;
} while (ovl != (KaleidoMgrOverlay*)&sKaleidoAreaPtr);
return NULL;
} else if (((uintptr_t)vram < (uintptr_t)gKaleidoMgrCurOvl->vramStart) ||
((uintptr_t)vram >= (uintptr_t)gKaleidoMgrCurOvl->vramEnd)) {
return NULL;
}
return (void*)((uintptr_t)vram + gKaleidoMgrCurOvl->offset);
}
+78 -5
View File
@@ -1,11 +1,84 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/func_801639A0.s")
void (*sKaleidoScopeUpdateFunc)(GlobalContext* globalCtx);
void (*sKaleidoScopeDrawFunc)(GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/func_801639EC.s")
extern void KaleidoScope_Update(GlobalContext* globalCtx);
extern void KaleidoScope_Draw(GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/func_80163A38.s")
void KaleidoScopeCall_LoadPlayer() {
KaleidoMgrOverlay* playerActorOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_PLAYER_ACTOR];
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/func_80163A58.s")
if (gKaleidoMgrCurOvl != playerActorOvl) {
if (gKaleidoMgrCurOvl != NULL) {
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/func_80163C0C.s")
KaleidoManager_LoadOvl(playerActorOvl);
}
}
void KaleidoScopeCall_Init(GlobalContext* globalCtx) {
sKaleidoScopeUpdateFunc = KaleidoManager_GetRamAddr(KaleidoScope_Update);
sKaleidoScopeDrawFunc = KaleidoManager_GetRamAddr(KaleidoScope_Draw);
KaleidoSetup_Init(globalCtx);
}
void KaleidoScopeCall_Destroy(GlobalContext* globalCtx) {
KaleidoSetup_Destroy(globalCtx);
}
void KaleidoScopeCall_Update(GlobalContext* globalCtx) {
PauseContext* pauseCtx = &globalCtx->pauseCtx;
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
if ((globalCtx->pauseCtx.state != 0) || (globalCtx->pauseCtx.debugState != 0)) {
if (pauseCtx->state == 1 || pauseCtx->state == 19) {
if (ShrinkWindow_GetLetterboxMagnitude() == 0) {
R_PAUSE_MENU_MODE = 1;
pauseCtx->unk_200 = 0;
pauseCtx->unk_208 = 0;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1;
}
} else if (pauseCtx->state == 8) {
R_PAUSE_MENU_MODE = 1;
pauseCtx->unk_200 = 0;
pauseCtx->unk_208 = 0;
pauseCtx->state = (pauseCtx->state & 0xFFFF) + 1;
} else if ((pauseCtx->state == 2) || (pauseCtx->state == 9) || (pauseCtx->state == 20)) {
if (R_PAUSE_MENU_MODE == 3) {
pauseCtx->state++;
}
} else if (pauseCtx->state != 0) {
if (gKaleidoMgrCurOvl != kaleidoScopeOvl) {
if (gKaleidoMgrCurOvl != NULL) {
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
KaleidoManager_LoadOvl(kaleidoScopeOvl);
}
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
sKaleidoScopeUpdateFunc(globalCtx);
if ((globalCtx->pauseCtx.state == 0) && (globalCtx->pauseCtx.debugState == 0)) {
KaleidoManager_ClearOvl(kaleidoScopeOvl);
KaleidoScopeCall_LoadPlayer();
}
}
}
}
}
void KaleidoScopeCall_Draw(GlobalContext* globalCtx) {
KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
if (R_PAUSE_MENU_MODE == 3) {
if (((globalCtx->pauseCtx.state >= 4) && (globalCtx->pauseCtx.state <= 7)) ||
((globalCtx->pauseCtx.state >= 11) && (globalCtx->pauseCtx.state <= 26))) {
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
sKaleidoScopeDrawFunc(globalCtx);
}
}
}
}
+2 -2
View File
@@ -4,6 +4,6 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_setup/func_800F4C0C.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_setup/func_800F4E20.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_setup/KaleidoSetup_Init.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_setup/func_800F4F28.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_setup/KaleidoSetup_Destroy.s")
+2 -2
View File
@@ -18,14 +18,14 @@ void Room_DrawType0Mesh(GlobalContext* globalCtx, Room* room, u32 flags) {
func_800BCBF4(&D_801C1D10, globalCtx);
gSPSegment(gfxCtx->polyOpa.p++, 0x03, room->segment);
func_8012C268(globalCtx);
gSPMatrix(gfxCtx->polyOpa.p++, &D_801D1DE0, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(gfxCtx->polyOpa.p++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
if (flags & 2) {
func_800BCC68(&D_801C1D10, globalCtx);
gSPSegment(gfxCtx->polyXlu.p++, 0x03, room->segment);
func_8012C2DC(globalCtx->state.gfxCtx);
gSPMatrix(gfxCtx->polyXlu.p++, &D_801D1DE0, G_MTX_MODELVIEW | G_MTX_LOAD);
gSPMatrix(gfxCtx->polyXlu.p++, &gIdentityMtx, G_MTX_MODELVIEW | G_MTX_LOAD);
}
mesh = &room->mesh->type0;
+25 -1
View File
@@ -1,3 +1,27 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/boot/contchannelreset/__osContChannelReset.s")
s32 __osContChannelReset(OSMesgQueue* mq, s32 channel) {
s32 i;
s32 ret;
u8* bufptr = (u8*)&__osPfsPifRam;
__osSiGetAccess();
__osPfsPifRam.pifstatus = 1;
for (i = 0; i < channel; i++) {
*bufptr++ = 0;
}
*bufptr++ = 0xFD;
*bufptr = CONT_CMD_END;
__osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
__osSiRelAccess();
return ret;
}
+35 -1
View File
@@ -1,3 +1,37 @@
#include "global.h"
#include "PR/pfs.h"
#pragma GLOBAL_ASM("asm/non_matchings/boot/pfsfreeblocks/osPfsFreeBlocks.s")
s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes) {
s32 j;
s32 pages = 0;
__OSInode inode;
s32 ret = 0;
u8 bank;
s32 offset;
if (!(pfs->status & PFS_INITIALIZED)) {
return PFS_ERR_INVALID;
}
ret = __osCheckId(pfs);
if (ret != 0) {
return ret;
}
for (bank = PFS_ID_BANK_256K; bank < pfs->banks; bank++) {
ret = __osPfsRWInode(pfs, &inode, PFS_READ, bank);
if (ret != 0) {
return ret;
}
offset = ((bank > PFS_ID_BANK_256K) ? 1 : pfs->inodeStartPage);
for (j = offset; j < PFS_INODE_SIZE_PER_PAGE; j++) {
if (inode.inodePage[j].ipage == PFS_PAGE_NOT_USED) {
pages++;
}
}
}
*leftoverBytes = pages * PFS_ONE_PAGE * BLOCKSIZE;
return 0;
}
@@ -133,7 +133,7 @@ void BgGoronOyu_SpawnParticles(BgGoronOyu* this, GlobalContext* globalCtx) {
if (BgCheck_EntityRaycastFloor2(globalCtx, &globalCtx->colCtx, &poly, &pos1) < this->waterBoxPos.y) {
pos1.y = this->waterBoxPos.y + 10.0f;
EffectSsIceSmoke_Spawn(globalCtx, &pos1, &vel1, &D_801D15B0, scale);
EffectSsIceSmoke_Spawn(globalCtx, &pos1, &vel1, &gZeroVec3f, scale);
}
pos2.x = (Rand_ZeroOne() * this->waterBoxXLength) + this->waterBoxPos.x;
pos2.y = this->waterBoxPos.y + 100.0f;
@@ -145,7 +145,7 @@ void BgGoronOyu_SpawnParticles(BgGoronOyu* this, GlobalContext* globalCtx) {
if (BgCheck_EntityRaycastFloor2(globalCtx, &globalCtx->colCtx, &poly, &pos2) < this->waterBoxPos.y) {
pos2.y = this->waterBoxPos.y + 10.0f;
EffectSsIceSmoke_Spawn(globalCtx, &pos2, &vel2, &D_801D15B0, scale);
EffectSsIceSmoke_Spawn(globalCtx, &pos2, &vel2, &gZeroVec3f, scale);
}
}
}
@@ -362,7 +362,7 @@ void func_80A9B554(BgHakuginPost* this, GlobalContext* globalCtx, BgHakuginPostU
spA0.x = Math_SinS(val) * temp_f20 + spB8.x;
spA0.y = (Rand_ZeroOne() * 1.2f - 0.1f) * spE4 + spB8.y;
spA0.z = Math_CosS(val) * temp_f20 + spB8.z;
func_800B0E48(globalCtx, &spA0, &D_801D15B0, &D_80A9D8EC, &D_80A9D8E4, &D_80A9D8E8,
func_800B0E48(globalCtx, &spA0, &gZeroVec3f, &D_80A9D8EC, &D_80A9D8E4, &D_80A9D8E8,
(Rand_Next() >> 0x1A) + 0x82, (Rand_Next() >> 0x1A) + 0x6E);
}
@@ -14,7 +14,6 @@ void BgInibsMovebg_Init(Actor* thisx, GlobalContext* globalCtx);
void BgInibsMovebg_Destroy(Actor* thisx, GlobalContext* globalCtx);
void BgInibsMovebg_Draw(Actor* thisx, GlobalContext* globalCtx);
#if 0
const ActorInit Bg_Inibs_Movebg_InitVars = {
ACTOR_BG_INIBS_MOVEBG,
ACTORCAT_BG,
@@ -27,17 +26,56 @@ const ActorInit Bg_Inibs_Movebg_InitVars = {
(ActorFunc)BgInibsMovebg_Draw,
};
// static InitChainEntry sInitChain[] = {
static InitChainEntry D_80B96578[] = {
extern Gfx D_06001C10[];
extern Gfx D_06001DC0[];
extern AnimatedMaterial D_06002598;
extern Gfx D_06006140[];
extern Gfx D_060062D8[];
extern AnimatedMaterial D_06006858;
Gfx* D_80B96560[] = { D_060062D8, D_06001DC0 };
Gfx* D_80B96568[] = { D_06006140, D_06001C10 };
AnimatedMaterial* D_80B96570[] = { &D_06006858, &D_06002598 };
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 1000, ICHAIN_STOP),
};
#endif
void BgInibsMovebg_Init(Actor* thisx, GlobalContext* globalCtx) {
BgInibsMovebg* this = THIS;
extern InitChainEntry D_80B96578[];
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, 1);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Inibs_Movebg/BgInibsMovebg_Init.s")
this->unk_15C = D_80B96560[BGINIBSMOVEBG_GET_F(thisx)];
this->unk_160 = D_80B96568[BGINIBSMOVEBG_GET_F(thisx)];
this->unk_164 = D_80B96570[BGINIBSMOVEBG_GET_F(thisx)];
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Inibs_Movebg/BgInibsMovebg_Destroy.s")
void BgInibsMovebg_Destroy(Actor* thisx, GlobalContext* globalCtx) {
BgInibsMovebg* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Inibs_Movebg/BgInibsMovebg_Draw.s")
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
}
void BgInibsMovebg_Draw(Actor* thisx, GlobalContext* globalCtx) {
BgInibsMovebg* this = THIS;
AnimatedMaterial* animMat;
Gfx* dl1;
Gfx* dl2;
animMat = this->unk_164;
if (animMat != NULL) {
AnimatedMat_Draw(globalCtx, Lib_SegmentedToVirtual(this->unk_164));
}
dl1 = this->unk_15C;
if (dl1 != NULL) {
func_800BDFC0(globalCtx, this->unk_15C);
}
dl2 = this->unk_160;
if (dl2 != NULL) {
func_800BE03C(globalCtx, this->unk_160);
}
}
@@ -5,9 +5,13 @@
struct BgInibsMovebg;
#define BGINIBSMOVEBG_GET_F(thisx) ((u16)((thisx)->params) & 0xF)
typedef struct BgInibsMovebg {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x24];
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ Gfx* unk_15C;
/* 0x160 */ Gfx* unk_160;
/* 0x164 */ AnimatedMaterial* unk_164;
} BgInibsMovebg; // size = 0x168
extern const ActorInit Bg_Inibs_Movebg_InitVars;
@@ -149,7 +149,7 @@ void BgKin2Fence_SpawnEyeSparkles(BgKin2Fence* this, GlobalContext* globalCtx, s
for (i = 0; i < 2; i++) {
Matrix_MultiplyVector3fByState(&eyeSparkleSpawnPositions[mask][i], &sp58);
EffectSsKiraKira_SpawnDispersed(globalCtx, &sp58, &D_801D15B0, &D_801D15B0, &primColor, &envColor, 6000, -10);
EffectSsKiraKira_SpawnDispersed(globalCtx, &sp58, &gZeroVec3f, &gZeroVec3f, &primColor, &envColor, 6000, -10);
}
}
+4 -4
View File
@@ -555,8 +555,8 @@ void func_809DA460(Boss02Effects* effects, Vec3f* vec) {
if ((effects->unk_24 == 0) || (effects->unk_24 == 3)) {
effects->unk_24 = 4;
effects->unk_00 = *vec;
Math_Vec3f_Copy(&effects->unk_0C, &D_801D15B0);
Math_Vec3f_Copy(&effects->unk_18, &D_801D15B0);
Math_Vec3f_Copy(&effects->unk_0C, &gZeroVec3f);
Math_Vec3f_Copy(&effects->unk_18, &gZeroVec3f);
effects->unk_2C = 0xFF;
effects->unk_34 = 0.0f;
break;
@@ -1820,7 +1820,7 @@ void func_809DD934(Boss02* this, GlobalContext* globalCtx) {
if (D_809E0434 != NULL) {
D_809E0434->unk_203 = 0;
D_809E0434->unk_204 = 1.0f;
D_809E0434->actor.world.pos.y = 60.0f;
D_809E0434->dyna.actor.world.pos.y = 60.0f;
}
player->actor.world.pos.x *= 10.0f;
@@ -1892,7 +1892,7 @@ void func_809DD934(Boss02* this, GlobalContext* globalCtx) {
if (D_809E0434 != 0) {
D_809E0434->unk_203 = 1;
D_809E0434->unk_204 = 0.1f;
D_809E0434->actor.world.pos.y = 3155.0f;
D_809E0434->dyna.actor.world.pos.y = 3155.0f;
}
player->actor.world.pos.x *= 0.1f;
+4 -1
View File
@@ -10,7 +10,10 @@ typedef void (*DmHinaActionFunc)(struct DmHina*, GlobalContext*);
typedef struct DmHina {
/* 0x0000 */ Actor actor;
/* 0x0144 */ DmHinaActionFunc actionFunc;
/* 0x0148 */ char unk_148[0x3C];
/* 0x0148 */ char unk_148[0x10];
/* 0x0158 */ f32 unk_158;
/* 0x015C */ f32 unk_15C;
/* 0x0160 */ char unk_160[0x24];
} DmHina; // size = 0x184
extern const ActorInit Dm_Hina_InitVars;
File diff suppressed because it is too large Load Diff
@@ -2,19 +2,58 @@
#define Z_DOOR_WARP1_H
#include "global.h"
#include "overlays/actors/ovl_Dm_Hina/z_dm_hina.h"
struct DoorWarp1;
typedef void (*DoorWarp1ActionFunc)(struct DoorWarp1*, GlobalContext*);
#define DOORWARP1_GET_FF(thisx) ((thisx)->params & 0xFF)
#define DOORWARP1_GET_FF00_1(thisx) (((thisx)->params >> 8) & 0xFF)
#define DOORWARP1_GET_FF00_2(thisx) ((thisx)->params & 0xFF00)
#define DOORWARP1_GET_FF00_3(thisx) ((thisx)->params >> 8)
enum {
/* 0 */ ENDOORWARP1_FF_0,
/* 1 */ ENDOORWARP1_FF_1,
/* 2 */ ENDOORWARP1_FF_2,
/* 3 */ ENDOORWARP1_FF_3,
/* 4 */ ENDOORWARP1_FF_4,
/* 5 */ ENDOORWARP1_FF_5,
/* 6 */ ENDOORWARP1_FF_6,
};
typedef struct DoorWarp1 {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x94];
/* 0x0000 */ DynaPolyActor dyna;
/* 0x015C */ SkelAnime skelAnime;
/* 0x01A0 */ DmHina* unk_1A0;
/* 0x01A4 */ f32 unk_1A4;
/* 0x01A8 */ f32 unk_1A8;
/* 0x01AC */ f32 unk_1AC;
/* 0x01B0 */ f32 unk_1B0;
/* 0x01B4 */ f32 unk_1B4;
/* 0x01B8 */ f32 unk_1B8;
/* 0x01BC */ f32 unk_1BC;
/* 0x01C0 */ f32 unk_1C0;
/* 0x01C4 */ s16 unk_1C4;
/* 0x01C6 */ s16 unk_1C6;
/* 0x01C8 */ s16 unk_1C8;
/* 0x01CA */ s16 unk_1CA;
/* 0x01CC */ s16 unk_1CC;
/* 0x01CE */ s16 unk_1CE;
/* 0x01D0 */ u16 unk_1D0;
/* 0x01D2 */ s8 unk_1D2;
/* 0x01D3 */ u8 unk_1D3;
/* 0x01D4 */ u8 unk_1D4;
/* 0x01D8 */ DoorWarp1ActionFunc actionFunc;
/* 0x01DC */ char unk_1DC[0x27];
/* 0x01DC */ LightNode* unk_1DC;
/* 0x01E0 */ LightInfo unk_1E0;
/* 0x01F0 */ LightNode* unk_1F0;
/* 0x01F4 */ LightInfo unk_1F4;
/* 0x0202 */ u8 unk_202;
/* 0x0203 */ u8 unk_203;
/* 0x0204 */ f32 unk_204;
/* 0x0208 */ char unk_208[0x4];
/* 0x0208 */ u8 unk_208;
} DoorWarp1; // size = 0x20C
extern const ActorInit Door_Warp1_InitVars;
File diff suppressed because it is too large Load Diff
@@ -6,12 +6,48 @@
struct EnAkindonuts;
typedef void (*EnAkindonutsActionFunc)(struct EnAkindonuts*, GlobalContext*);
typedef void (*EnAkindonutsUnkFunc)(struct EnAkindonuts*, GlobalContext*);
#define ENAKINDONUTS_GET_3(thisx) ((thisx)->params & 3)
#define ENAKINDONUTS_GET_4(thisx) (((thisx)->params & 4) >> 2)
#define ENAKINDONUTS_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
enum {
/* 1 */ ENAKINDONUTS_3_1 = 1,
/* 2 */ ENAKINDONUTS_3_2,
};
typedef struct EnAkindonuts {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x194];
/* 0x0144 */ SkelAnime skelAnime;
/* 0x0188 */ Vec3s jointTable[28];
/* 0x0230 */ Vec3s morphTable[28];
/* 0x02D8 */ EnAkindonutsActionFunc actionFunc;
/* 0x02DC */ char unk_2DC[0x90];
/* 0x02DC */ EnAkindonutsUnkFunc unk_2DC;
/* 0x02E0 */ ColliderCylinder collider;
/* 0x032C */ u16 unk_32C;
/* 0x0330 */ Path* path;
/* 0x0334 */ s32 unk_334;
/* 0x0338 */ s16 unk_338;
/* 0x033A */ s16 unk_33A;
/* 0x033C */ u16 unk_33C;
/* 0x033E */ s16 unk_33E;
/* 0x0340 */ f32 unk_340;
/* 0x0344 */ f32 unk_344;
/* 0x0348 */ f32 unk_348;
/* 0x034C */ f32 unk_34C;
/* 0x0350 */ s16 unk_350;
/* 0x0352 */ s16 unk_352;
/* 0x0354 */ UNK_TYPE1 unk354[0x2];
/* 0x0356 */ s16 unk_356;
/* 0x0358 */ f32 unk_358;
/* 0x035C */ s16 unk_35C;
/* 0x035E */ s16 unk_35E;
/* 0x0360 */ s16 cutscene;
/* 0x0362 */ s16 unk_362;
/* 0x0364 */ s16 unk_364;
/* 0x0366 */ s8 unk_366;
/* 0x0368 */ s16 unk_368;
} EnAkindonuts; // size = 0x36C
extern const ActorInit En_Akindonuts_InitVars;
File diff suppressed because it is too large Load Diff
@@ -7,10 +7,38 @@ struct EnAob01;
typedef void (*EnAob01ActionFunc)(struct EnAob01*, GlobalContext*);
#define ENAOB01_GET_7E00_1(thisx) ((thisx)->params & 0x7E00)
#define ENAOB01_GET_7E00_2(thisx) (((thisx)->params & 0x7E00) >> 9)
typedef struct EnAob01 {
/* 0x0000 */ Actor actor;
/* 0x0144 */ EnAob01ActionFunc actionFunc;
/* 0x0148 */ char unk_148[0x2FC];
/* 0x000 */ Actor actor;
/* 0x144 */ EnAob01ActionFunc actionFunc;
/* 0x148 */ SkelAnime skelAnime;
/* 0x18C */ ColliderCylinder collider;
/* 0x1D8 */ Path* unk_1D8[14];
/* 0x210 */ u16 unk_210;
/* 0x212 */ Vec3s jointTable[16];
/* 0x272 */ Vec3s morphTable[16];
/* 0x2D2 */ u16 unk_2D2;
/* 0x2D4 */ Vec3s unk_2D4;
/* 0x2DA */ Vec3s unk_2DA;
/* 0x2E0 */ Vec3s unk_2E0;
/* 0x2E6 */ Vec3s unk_2E6;
/* 0x2EC */ Vec3s unk_2EC;
/* 0x2F2 */ Vec3s unk_2F2;
/* 0x2F8 */ s16 unk_2F8[16];
/* 0x318 */ s16 unk_318[16];
/* 0x338 */ UNK_TYPE1 unk338[0xB6];
/* 0x3EE */ s16 unk_3EE;
/* 0x3F0 */ s16 unk_3F0;
/* 0x3F4 */ Actor* unk_3F4;
/* 0x3F8 */ Actor* unk_3F8[14];
/* 0x430 */ s16 unk_430;
/* 0x432 */ s16 unk_432;
/* 0x434 */ s32 unk_434;
/* 0x438 */ UNK_TYPE1 unk438[4];
/* 0x43C */ s32 unk_43C;
/* 0x440 */ s16 unk_440;
} EnAob01; // size = 0x444
extern const ActorInit En_Aob_01_InitVars;
+7 -10
View File
@@ -5,6 +5,8 @@
*/
#include "z_en_baguo.h"
#include "objects/object_gmo/object_gmo.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00000005
@@ -106,16 +108,11 @@ static DamageTable sDamageTable = {
/* Powder Keg */ DMG_ENTRY(1, NEJIRON_DMGEFF_KILL),
};
extern Gfx D_060014C8;
extern Gfx D_060018C8;
extern Gfx D_06001CC8;
extern SkeletonHeader D_060020E8;
void EnBaguo_Init(Actor* thisx, GlobalContext* globalCtx) {
EnBaguo* this = THIS;
ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 0.0f);
SkelAnime_Init(globalCtx, &this->skelAnime, &D_060020E8, NULL, this->jointTable, this->morphTable, 3);
SkelAnime_Init(globalCtx, &this->skelAnime, &gNejironSkel, NULL, this->jointTable, this->morphTable, 3);
this->actor.hintId = 0xB;
this->maxDistanceFromHome = 240.0f;
this->maxDistanceFromHome += this->actor.world.rot.z * 40.0f;
@@ -203,8 +200,8 @@ void EnBaguo_Idle(EnBaguo* this, GlobalContext* globalCtx) {
yaw = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
absoluteYaw = ABS_ALT(yaw);
Math_Vec3f_Copy(&this->targetRotation, &D_801D15B0);
Math_Vec3f_Copy(&this->currentRotation, &D_801D15B0);
Math_Vec3f_Copy(&this->targetRotation, &gZeroVec3f);
Math_Vec3f_Copy(&this->currentRotation, &gZeroVec3f);
if (absoluteYaw < 0x2000) {
this->targetRotation.x = 2000.0f;
} else {
@@ -390,7 +387,7 @@ void EnBaguo_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
}
void EnBaguo_DrawBody(Actor* thisx, GlobalContext* globalCtx) {
static TexturePtr sEyeTextures[] = { &D_060014C8, &D_060018C8, &D_06001CC8 };
static TexturePtr sEyeTextures[] = { &gNejironEyeOpenTex, &gNejironEyeHalfTex, &gNejironEyeClosedTex };
EnBaguo* this = THIS;
Gfx* gfx;
s32 eyeIndex;
@@ -483,7 +480,7 @@ void EnBaguo_DrawRockParticles(EnBaguo* this, GlobalContext* globalCtx) {
Matrix_Scale(particle->scale, particle->scale, particle->scale, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 1, 255, 255, 255, 255);
gSPDisplayList(POLY_OPA_DISP++, &D_0401FA40);
gSPDisplayList(POLY_OPA_DISP++, &gameplay_keep_DL_01FA40);
}
}
CLOSE_DISPS(gfxCtx);
+30 -36
View File
@@ -5,6 +5,8 @@
*/
#include "z_en_bigpo.h"
#include "objects/object_bigpo/object_bigpo.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00001215
@@ -32,6 +34,7 @@ void EnBigpo_SpawnCutsceneStage6(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_SpawnCutsceneStage7(EnBigpo* this);
void EnBigpo_SpawnCutsceneStage8(EnBigpo* this, GlobalContext* globalCtx);
s32 EnBigpo_ApplyDamage(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_LowerCutsceneSubCamera(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_WellWaitForProximity(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_WaitCutsceneQueue(EnBigpo* this, GlobalContext* globalCtx);
@@ -48,7 +51,6 @@ void EnBigpo_SpinAttack(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_SetupSpinDown(EnBigpo* this);
void EnBigpo_SpinningDown(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_CheckHealth(EnBigpo* this, GlobalContext* globalCtx);
s32 EnBigpo_ApplyDamage(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_SetupDeath(EnBigpo* this);
void EnBigpo_BurnAwayDeath(EnBigpo* this, GlobalContext* globalCtx);
void EnBigpo_SetupLanternDrop(EnBigpo* this, GlobalContext* globalCtx);
@@ -80,17 +82,6 @@ void EnBigpo_DrawLantern(Actor* thisx, GlobalContext* globalCtx);
void EnBigpo_DrawCircleFlames(Actor* thisx, GlobalContext* globalCtx);
void EnBigpo_RevealedFire(Actor* thisx, GlobalContext* globalCtx);
extern AnimationHeader D_06001360;
extern SkeletonHeader D_06005C18;
extern AnimationHeader D_06000924;
extern AnimationHeader D_06000924;
extern AnimationHeader D_06000454;
extern Gfx D_060041A0;
extern Gfx D_06001BB0;
extern Gfx D_060058B8;
extern Gfx D_060042C8;
extern Gfx D_060043F8;
extern const ActorInit En_Bigpo_InitVars;
const ActorInit En_Bigpo_InitVars = {
@@ -203,7 +194,7 @@ void EnBigpo_Init(Actor* thisx, GlobalContext* globalCtx2) {
return;
}
SkelAnime_Init(globalCtx, &this->skelAnime, &D_06005C18, &D_06000924, this->jointTable, this->morphTable,
SkelAnime_Init(globalCtx, &this->skelAnime, &gBigpoSkeleton, &gBigpoFloatAnim, this->jointTable, this->morphTable,
ENBIGPO_LIMBCOUNT);
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo(&thisx->colChkInfo, &sDamageTable, &sColChkInfoInit);
@@ -244,7 +235,7 @@ void EnBigpo_Destroy(Actor* thisx, GlobalContext* globalCtx) {
if ((this->actor.params != ENBIGPO_POSSIBLEFIRE) && (this->actor.params != ENBIGPO_CHOSENFIRE) &&
(this->actor.params != ENBIGPO_REVEALEDFIRE) && (this->actor.params != ENBIGPO_UNK5)) {
// if NOT a fire type, *ENBIGPO_REGULAR and ENBIGPO_SUMMONED combat types only)
// if NOT a fire type, *ENBIGPO_REGULAR and ENBIGPO_SUMMONED (combat types only)
if (1) {}
globalCtx2 = globalCtx;
for (fireCount = 0; fireCount < ARRAY_COUNT(this->fires); fireCount++) {
@@ -254,7 +245,7 @@ void EnBigpo_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
}
void func_80B61914(EnBigpo* this) {
void EnBigpo_RotateSpawnCutsceneFires(EnBigpo* this) {
EnBigpoFireEffect* firePtr;
s32 i;
@@ -275,7 +266,9 @@ void EnBigpo_UpdateSpin(EnBigpo* this) {
}
}
// Lowers the position/eye of the camera during the Big Poe spawn cutscene
/*
* Lowers the position/eye of the camera during the Big Poe spawn cutscene
*/
void EnBigpo_LowerCutsceneSubCamera(EnBigpo* this, GlobalContext* globalContext) {
Camera* subCam;
@@ -330,7 +323,7 @@ void EnBigpo_SpawnCutsceneStage1(EnBigpo* this, GlobalContext* globalCtx) {
this->actor.draw = EnBigpo_DrawCircleFlames;
this->actor.shape.rot.y = BINANG_ROT180(this->actor.yawTowardsPlayer);
func_80B61914(this);
EnBigpo_RotateSpawnCutsceneFires(this);
for (i = 0; i < ARRAY_COUNT(this->fires); i++) {
this->fires[i].pos.y = this->actor.world.pos.y;
@@ -383,7 +376,7 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, GlobalContext* globalCtx) {
this->actor.velocity.y += 0.25f;
}
this->actor.shape.rot.y += this->rotVelocity;
func_80B61914(this);
EnBigpo_RotateSpawnCutsceneFires(this);
if (1) {}
for (i = 0; i < ARRAY_COUNT(this->fires); i++) {
@@ -402,7 +395,7 @@ void EnBigpo_SpawnCutsceneStage4(EnBigpo* this, GlobalContext* globalCtx) {
* big poe starts to visibly appear
*/
void EnBigpo_SpawnCutsceneStage5(EnBigpo* this) {
Animation_PlayLoop(&this->skelAnime, &D_06001360);
Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim);
this->actor.draw = EnBigpo_DrawMainBigpo;
Actor_SetScale(&this->actor, 0.014f);
Audio_PlayActorSound2(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
@@ -420,7 +413,7 @@ void EnBigpo_SpawnCutsceneStage6(EnBigpo* this, GlobalContext* globalCtx) {
SkelAnime_Update(&this->skelAnime);
this->actor.shape.rot.y += this->rotVelocity;
alphaPlus = this->mainColor.a + 10; // decrease transparency
func_80B61914(this);
EnBigpo_RotateSpawnCutsceneFires(this);
if (alphaPlus >= 90) {
this->rotVelocity -= 0x80;
this->actor.velocity.y -= 0.25f;
@@ -516,7 +509,7 @@ void EnBigpo_SetupWarpIn(EnBigpo* this, GlobalContext* globalCtx) {
s16 randomYaw = (Rand_Next() >> 0x14) + this->actor.yawTowardsPlayer;
Audio_PlayActorSound2(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
Animation_PlayLoop(&this->skelAnime, &D_06001360);
Animation_PlayLoop(&this->skelAnime, &gBigpoAwakenStretchAnim);
this->rotVelocity = 0x2000;
this->actor.world.pos.x = (Math_SinS(randomYaw) * distance) + player->actor.world.pos.x;
this->actor.world.pos.z = (Math_CosS(randomYaw) * distance) + player->actor.world.pos.z;
@@ -543,7 +536,7 @@ void EnBigpo_WarpingIn(EnBigpo* this, GlobalContext* globalCtx) {
}
void EnBigpo_SetupIdleFlying(EnBigpo* this) {
Animation_MorphToLoop(&this->skelAnime, &D_06000924, -5.0f);
Animation_MorphToLoop(&this->skelAnime, &gBigpoFloatAnim, -5.0f);
// if poe missed attack, idle 4 seconds, otherwise its reappearing: attack immediately
this->idleTimer = (this->actionFunc == EnBigpo_SpinningDown) ? 80 : 0;
this->hoverHeightCycleTimer = 40;
@@ -654,7 +647,7 @@ void EnBigpo_SpinningDown(EnBigpo* this, GlobalContext* globalCtx) {
* called by EnBigpo_ApplyDamage
*/
void EnBigpo_HitStun(EnBigpo* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &D_06000454, -6.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gBigpoShockAnim, -6.0f);
func_800BCB70(&this->actor, 0x4000, 0xFF, 0, 0x10);
this->collider.base.acFlags &= ~AC_ON;
func_800BE504(&this->actor, &this->collider);
@@ -714,13 +707,13 @@ void EnBigpo_BurnAwayDeath(EnBigpo* this, GlobalContext* globalCtx) {
// not sure what we're turning this into, but its based on the timer
modifiedTimer = ((f32)((this->idleTimer * 10) + 80) * 1.4000001f);
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &D_801D15B0, modifiedTimer, 0, 2);
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &gZeroVec3f, modifiedTimer, 0, 2);
tempVec.x = (2.0f * this->actor.world.pos.x) - tempVec.x;
tempVec.z = (2.0f * this->actor.world.pos.z) - tempVec.z;
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &D_801D15B0, modifiedTimer, 0, 2);
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &gZeroVec3f, modifiedTimer, 0, 2);
tempVec.x = this->actor.world.pos.x;
tempVec.z = this->actor.world.pos.z;
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &D_801D15B0, modifiedTimer, 0, 2);
func_800B3030(globalCtx, &tempVec, &D_80B6506C, &gZeroVec3f, modifiedTimer, 0, 2);
} else if (this->idleTimer >= 28) {
EnBigpo_SetupLanternDrop(this, globalCtx);
@@ -764,7 +757,8 @@ void EnBigpo_LanternFalling(EnBigpo* this, GlobalContext* globalCtx) {
Actor_SetSwitchFlag(globalCtx, this->switchFlags);
}
EffectSsHahen_SpawnBurst(globalCtx, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10, &D_060041A0);
EffectSsHahen_SpawnBurst(globalCtx, &this->actor.world.pos, 6.0f, 0, 1, 1, 15, OBJECT_BIGPO, 10,
gBigpoDrawLanternFallingDL);
EnBigpo_SpawnScoopSoul(this);
}
}
@@ -1252,7 +1246,7 @@ void EnBigpo_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
if ((this->actionFunc == EnBigpo_BurnAwayDeath) && (this->idleTimer >= 2) && (limbIndex == 8)) {
gSPMatrix((*gfx)++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList((*gfx)++, &D_060058B8);
gSPDisplayList((*gfx)++, &gBigpoDrawCrispyBodyDL);
}
if (limbIndex == 7) {
@@ -1305,7 +1299,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, GlobalContext* globalCtx) {
// fully visible OR fully transparent
dispHead = POLY_OPA_DISP;
gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]);
gSPSegment(&dispHead[1], 0x0C, &D_801AEFA0);
gSPSegment(&dispHead[1], 0x0C, &D_801AEFA0); // empty display list for no transparency
gSPSegment(&dispHead[2], 0x08,
Gfx_EnvColor(globalCtx->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b,
this->mainColor.a));
@@ -1315,7 +1309,7 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, GlobalContext* globalCtx) {
} else {
dispHead = POLY_XLU_DISP;
gSPDisplayList(dispHead, &sSetupDL[6 * 0x19]);
gSPSegment(&dispHead[1], 0x0C, &D_801AEF88);
gSPSegment(&dispHead[1], 0x0C, &D_801AEF88); // transparency display list
gSPSegment(&dispHead[2], 0x08,
Gfx_EnvColor(globalCtx->state.gfxCtx, this->mainColor.r, this->mainColor.g, this->mainColor.b,
this->mainColor.a));
@@ -1360,7 +1354,7 @@ void EnBigpo_DrawScoopSoul(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, &D_06001BB0);
gSPDisplayList(POLY_XLU_DISP++, &gBigpoDrawSoulDL);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
@@ -1384,7 +1378,7 @@ void EnBigpo_DrawLantern(Actor* thisx, GlobalContext* globalCtx) {
magnitude2 = (magnitude > 1.0f) ? (20.0f / magnitude) : (20.0f);
Math_Vec3f_Scale(&vec1, magnitude2);
} else {
Math_Vec3f_Copy(&vec1, &D_801D15B0);
Math_Vec3f_Copy(&vec1, &gZeroVec3f);
}
{
@@ -1412,9 +1406,9 @@ void EnBigpo_DrawLantern(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(&dispHead[3], Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(&dispHead[4], &D_060042C8);
gSPDisplayList(&dispHead[4], &gBigpoDrawLanternMainDL);
gSPDisplayList(&dispHead[5], &D_060043F8);
gSPDisplayList(&dispHead[5], &gBigpoDrawLanternPurpleTopDL);
// fully transparent OR fully invisible
if ((this->mainColor.a == 255) || (this->mainColor.a == 0)) {
@@ -1461,7 +1455,7 @@ void EnBigpo_DrawCircleFlames(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, &D_0407D590); // flame displaylist
gSPDisplayList(POLY_XLU_DISP++, &gGameplayKeepDrawFlameDL);
}
CLOSE_DISPS(globalCtx->state.gfxCtx);
@@ -1488,7 +1482,7 @@ void EnBigpo_RevealedFire(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, &D_0407D590); // flame displaylist
gSPDisplayList(POLY_XLU_DISP++, &gGameplayKeepDrawFlameDL);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
File diff suppressed because it is too large Load Diff
@@ -63,7 +63,7 @@ typedef struct EnBigslime {
u8 minislimeCounter;
u8 numGekkoMeleeAttacks; // The Gekko will melee-attack link at 1-3 times at each position while engulfed in bigslime
};
/* 0x02B4 */ u8 iceShardAlpha;
/* 0x02B4 */ u8 shockwaveAlpha;
/* 0x02B5 */ u8 gekkoDrawEffect;
/* 0x02B6 */ s16 gekkoYaw;
/* 0x02B8 */ s16 cutscene;
@@ -95,16 +95,16 @@ typedef struct EnBigslime {
};
/* 0x02C2 */ s16 ceilingDropTimer; // Bigslime is still during this timer and shakes before dropping
/* 0x02C4 */ s16 numGekkoPosGrabPlayer; // The Gekko will melee-attack link at 6 positions while engulfed in bigslime
/* 0x02C6 */ s16 camId;
/* 0x02C8 */ s16 cameraYawGrabPlayer;
/* 0x02C6 */ s16 subCamId;
/* 0x02C8 */ s16 subCamYawGrabPlayer;
/* 0x02CA */ s16 rotation; // is always 0, used in Matrix_RotateY
/* 0x02CC */ s16 itemDropTimer; // items only drop when zero, Set to 40 then decrements, prevents itemDrop spam
/* 0x02CE */ Vec3s gekkoRot;
/* 0x02D4 */ Vec3f gekkoPosOffset; // Used when Bigslime grabs link
/* 0x02E0 */ Vec3f gekkoProjectedPos;
/* 0x02EC */ union {
Vec3f iceShardRefPos;
Vec3f eyeDistToFrog; // Used to zoom into frogs as Gekko despawns/Frog spawns
Vec3f frozenPos;
Vec3f subCamDistToFrog; // Used to zoom into frogs as Gekko despawns/Frog spawns
};
/* 0x02F8 */ Vec3f limbPos[12];
/* 0x0388 */ f32 unk_388; // used as arg to func_800BE680
@@ -114,14 +114,14 @@ typedef struct EnBigslime {
/* 0x0398 */ f32 vtxSurfacePerturbation[BIGSLIME_NUM_VTX];
/* 0x0620 */ f32 vtxScaleX;
/* 0x0624 */ f32 vtxScaleZ;
/* 0x0628 */ f32 iceShardScale;
/* 0x0628 */ f32 shockwaveScale;
/* 0x062C */ ColliderCylinder gekkoCollider;
/* 0x0678 */ ColliderCylinder bigslimeCollider[BIGSLIME_NUM_RING_FACES];
/* 0x0A14 */ EnMinislime* minislime[MINISLIME_NUM_SPAWN];
/* 0x0A44 */ EnMinislime* minislimeToThrow;
/* 0x0A48 */ AnimatedMaterial* bigslimeFrozenTex;
/* 0x0A4C */ AnimatedMaterial* minislimeFrozenTex;
/* 0x0A50 */ AnimatedMaterial* iceShardTex;
/* 0x0A48 */ AnimatedMaterial* bigslimeFrozenTexAnim;
/* 0x0A4C */ AnimatedMaterial* minislimeFrozenTexAnim;
/* 0x0A50 */ AnimatedMaterial* iceShardTexAnim;
/* 0x0A54 */ EnBigslimeIceShardEffect iceShardEffect[BIGSLIME_NUM_ICE_SHARD]; // 312 = 162 (bigslime) + 10 * 15 (minislime)
} EnBigslime; // size = 0x3634
+846 -40
View File
@@ -5,6 +5,8 @@
*/
#include "z_en_bomjimb.h"
#include "overlays/actors/ovl_En_Niw/z_en_niw.h"
#include "objects/object_cs/object_cs.h"
#define FLAGS 0x00000009
@@ -15,19 +17,29 @@ void EnBomjimb_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnBomjimb_Update(Actor* thisx, GlobalContext* globalCtx);
void EnBomjimb_Draw(Actor* thisx, GlobalContext* globalCtx);
void func_80C01494(EnBomjimb* this);
void func_80C014E4(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C01984(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C01A24(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C01B40(EnBomjimb* this);
void func_80C01B74(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C01C18(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C01CD0(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C0201C(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02108(EnBomjimb* this);
void func_80C0217C(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C0250C(EnBomjimb* this);
void func_80C02570(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C0267C(EnBomjimb* this);
void func_80C02704(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02740(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02A14(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02BCC(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02CA4(EnBomjimb* this, GlobalContext* globalCtx);
void func_80C02DAC(EnBomjimb* this, GlobalContext* globalCtx);
#if 0
static Actor* D_80C03170 = NULL;
const ActorInit En_Bomjimb_InitVars = {
ACTOR_EN_BOMJIMB,
ACTORCAT_NPC,
@@ -40,79 +52,873 @@ const ActorInit En_Bomjimb_InitVars = {
(ActorFunc)EnBomjimb_Draw,
};
// static ColliderCylinderInit sCylinderInit = {
static ColliderCylinderInit D_80C03194 = {
{ COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
{ ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
static ColliderCylinderInit sCylinderInit = {
{
COLTYPE_NONE,
AT_NONE,
AC_ON | AC_TYPE_PLAYER,
OC1_ON | OC1_TYPE_ALL,
OC2_TYPE_2,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0x00000000, 0x00, 0x00 },
{ 0xF7CFFFFF, 0x00, 0x00 },
TOUCH_NONE | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 20, 30, 0, { 0, 0, 0 } },
};
#endif
void EnBomjimb_Init(Actor* thisx, GlobalContext* globalCtx) {
EnBomjimb* this = THIS;
extern ColliderCylinderInit D_80C03194;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 19.0f);
this->actor.gravity = -2.0f;
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_cs_Skel_00F82C, &object_cs_Anim_0064B8, this->jointTable,
this->morphTable, 21);
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
this->actor.targetMode = 6;
Actor_SetScale(&this->actor, 0.01f);
extern UNK_TYPE D_060064B8;
this->unk_2C6 = ENBOMJIMB_GET_F0(&this->actor);
this->unk_2B2 = ENBOMJIMB_GET_FF00(&this->actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/EnBomjimb_Init.s")
if (this->unk_2C6 != ENBOMJIMB_F0_0) {
this->unk_2C8 = ENBOMJIMB_GET_F(&this->actor) + 1;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/EnBomjimb_Destroy.s")
if (this->unk_2C8 < ENBOMJIMB_F_0) {
this->unk_2C8 = ENBOMJIMB_F_0;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C0113C.s")
if (this->unk_2C6 < ENBOMJIMB_F0_0) {
this->unk_2C6 = ENBOMJIMB_F0_0;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C011CC.s")
if ((gSaveContext.weekEventReg[73] & 0x10) || (gSaveContext.weekEventReg[85] & 2)) {
switch (this->unk_2C8) {
case ENBOMJIMB_F_0:
if (gSaveContext.weekEventReg[11] & 1) {
Actor_MarkForDeath(&this->actor);
return;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C012E0.s")
case ENBOMJIMB_F_1:
if (gSaveContext.weekEventReg[11] & 2) {
Actor_MarkForDeath(&this->actor);
return;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C012FC.s")
case ENBOMJIMB_F_2:
if (gSaveContext.weekEventReg[11] & 4) {
Actor_MarkForDeath(&this->actor);
return;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C013B4.s")
case ENBOMJIMB_F_3:
if (gSaveContext.weekEventReg[11] & 8) {
Actor_MarkForDeath(&this->actor);
return;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C013F0.s")
case ENBOMJIMB_F_4:
if (gSaveContext.weekEventReg[11] & 0x10) {
Actor_MarkForDeath(&this->actor);
return;
}
break;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01494.s")
if ((!(gSaveContext.weekEventReg[73] & 0x10) && !(gSaveContext.weekEventReg[85] & 2)) ||
(gSaveContext.weekEventReg[75] & 0x40)) {
Actor_MarkForDeath(&this->actor);
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C014E4.s")
Math_Vec3f_Copy(&this->unk_2A0, &this->actor.home.pos);
if ((this->unk_2C6 == ENBOMJIMB_F0_0) || (this->unk_2C6 == ENBOMJIMB_F0_1) || (this->unk_2C6 != ENBOMJIMB_F0_2)) {
func_80C01494(this);
} else {
func_80C01984(this, globalCtx);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01984.s")
void EnBomjimb_Destroy(Actor* thisx, GlobalContext* globalCtx) {
EnBomjimb* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01A24.s")
Collider_DestroyCylinder(globalCtx, &this->collider);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01B40.s")
void func_80C0113C(EnBomjimb* this, s32 arg1, f32 arg2) {
static AnimationHeader* sAnimations[] = {
&object_cs_Anim_0064B8, &object_cs_Anim_00FAF4, &object_cs_Anim_0057C8, &object_cs_Anim_0053F4,
&object_cs_Anim_002044, &object_cs_Anim_01007C, &object_cs_Anim_00349C, &object_cs_Anim_004960,
&object_cs_Anim_005128, &object_cs_Anim_004C1C, &object_cs_Anim_002930, &object_cs_Anim_001A1C,
&object_cs_Anim_003EE4, &object_cs_Anim_00478C, &object_cs_Anim_00433C, &object_cs_Anim_0060E8,
&object_cs_Anim_001708, &object_cs_Anim_005DC4, &object_cs_Anim_0026B0, &object_cs_Anim_0036B0,
&object_cs_Anim_0031C4, &object_cs_Anim_010B68,
};
static u8 D_80C03218[] = {
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 0, 0,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01B74.s")
this->unk_2DC = arg1;
this->unk_2B8 = Animation_GetLastFrame(sAnimations[arg1]);
Animation_Change(&this->skelAnime, sAnimations[this->unk_2DC], arg2, 0.0f, this->unk_2B8, D_80C03218[this->unk_2DC],
-4.0f);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01C18.s")
void func_80C011CC(EnBomjimb* this) {
if ((this->unk_2DC == 5) &&
(Animation_OnFrame(&this->skelAnime, 9.0f) || Animation_OnFrame(&this->skelAnime, 10.0f) ||
Animation_OnFrame(&this->skelAnime, 17.0f) || Animation_OnFrame(&this->skelAnime, 18.0f))) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01CD0.s")
if ((this->unk_2DC == 19) &&
(Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 6.0f))) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_BOMBERS_WALK);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C01FD4.s")
if ((this->unk_2DC == 18) && Animation_OnFrame(&this->skelAnime, 15.0f)) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C0201C.s")
if ((this->unk_2DC == 7) && Animation_OnFrame(&this->skelAnime, 8.0f)) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_BOMBERS_LAND);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02108.s")
void func_80C012E0(EnBomjimb* this) {
this->unk_2C0 = 0;
this->unk_2AE = 0;
this->unk_2B0 = 0;
this->unk_2CC = 0;
this->unk_290 = 0;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C0217C.s")
s32 func_80C012FC(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C0250C.s")
if (!func_801690CC(globalCtx) && (this->actor.xzDistToPlayer < 40.0f) &&
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 50.0f) && (globalCtx->msgCtx.unk11F10 == 0)) {
this->actor.speedXZ = 0.0f;
func_80C02740(this, globalCtx);
return true;
}
return false;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02570.s")
s32 func_80C013B4(EnBomjimb* this) {
if (this->collider.base.acFlags & AC_HIT) {
func_80C0267C(this);
return true;
}
return false;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C0267C.s")
s32 func_80C013F0(EnBomjimb* this, GlobalContext* globalCtx) {
Actor* sp1C;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02704.s")
if (this->collider.base.ocFlags1 & OC1_HIT) {
sp1C = this->collider.base.oc;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02740.s")
if ((sp1C->id == ACTOR_OBJ_KIBAKO) && (D_80C03170 == NULL) && (sp1C->update != NULL) &&
!Actor_HasParent(sp1C, globalCtx)) {
D_80C03170 = sp1C;
this->unk_2E4 = sp1C;
func_80C01C18(this, globalCtx);
return true;
}
}
return false;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02A14.s")
void func_80C01494(EnBomjimb* this) {
func_80C012E0(this);
Math_Vec3f_Copy(&this->unk_2A0, &this->actor.world.pos);
this->unk_2CA = 3;
this->actionFunc = func_80C014E4;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02BCC.s")
void func_80C014E4(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
f32 curFrame = this->skelAnime.curFrame;
CollisionPoly* colPoly;
s16 abs;
f32 x;
f32 z;
f32 phi_f0;
Vec3f sp60;
Vec3f sp54;
Vec3f sp48;
s32 sp44;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02CA4.s")
if (func_80C012FC(this, globalCtx) || func_80C013B4(this) || func_80C013F0(this, globalCtx)) {
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02DAC.s")
switch (this->unk_2CC) {
case 0:
if (this->unk_2AE == 0) {
Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
sp48.x += randPlusMinusPoint5Scaled(150.0f);
sp48.z += randPlusMinusPoint5Scaled(150.0f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/EnBomjimb_Update.s")
abs = ABS_ALT(BINANG_SUB(this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp48)));
if ((abs < 0x4000) && !BgCheck_EntityLineTest1(&globalCtx->colCtx, &this->actor.world.pos, &sp48, &sp60,
&colPoly, 1, 0, 0, 1, &sp44)) {
func_80C0113C(this, 5, 1.0f);
Math_Vec3f_Copy(&this->unk_294, &sp48);
this->unk_2B0 = Rand_S16Offset(30, 50);
this->unk_2CC++;
}
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/func_80C02FA8.s")
case 1:
if (curFrame >= 0.0f) {
this->unk_2D6 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_294);
Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2D6, 10, 2000, 20);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Bomjimb/EnBomjimb_Draw.s")
if ((s16)ABS_ALT(BINANG_SUB(this->actor.world.rot.y, this->unk_2D6)) < 0x100) {
Math_Vec3f_Copy(&sp54, &this->actor.world.pos);
sp54.x += Math_SinS(this->actor.world.rot.y) * 60.0f;
sp54.z += Math_CosS(this->actor.world.rot.y) * 60.0f;
if (BgCheck_EntityLineTest1(&globalCtx->colCtx, &this->actor.world.pos, &sp54, &sp60, &colPoly, 1, 0, 0,
1, &sp44)) {
this->unk_2AE = 0;
if (Rand_ZeroOne() < 0.5f) {
func_80C0113C(this, 20, 1.0f);
} else {
func_80C0113C(this, 0, 1.0f);
}
this->unk_2CC = 0;
this->unk_2B4 = 0.0f;
break;
}
}
x = this->unk_294.x - this->actor.world.pos.x;
z = this->unk_294.z - this->actor.world.pos.z;
if ((this->unk_2B0 == 0) || (sqrtf(SQ(x) + SQ(z)) < 4.0f)) {
this->unk_2AE = Rand_S16Offset(20, 20);
if (!(this->unk_2AE & 1)) {
func_80C0113C(this, 20, 1.0f);
} else {
func_80C0113C(this, 0, 1.0f);
}
this->unk_2CC = 0;
this->unk_2B4 = 0.0f;
} else if (curFrame >= 0.0f) {
Math_ApproachF(&this->actor.world.pos.x, this->unk_294.x, 0.3f, this->unk_2B4);
Math_ApproachF(&this->actor.world.pos.z, this->unk_294.z, 0.3f, this->unk_2B4);
Math_ApproachF(&this->unk_2B4, 1.0f, 0.3f, 0.5f);
}
break;
}
if (player->stateFlags3 != 0x1000000) {
phi_f0 = 200.0f;
abs = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y));
if (abs > 0x2890) {
phi_f0 = 150.0f;
}
if (this->actor.xzDistToPlayer < phi_f0) {
func_80C02108(this);
}
}
}
void func_80C01984(EnBomjimb* this, GlobalContext* globalCtx) {
func_80C012E0(this);
this->unk_2E4 =
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_NIW, this->actor.world.pos.x,
this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, this->actor.world.rot.y, 0, 2);
if (this->unk_2E4 != NULL) {
func_80C0113C(this, 11, 1.0f);
}
this->unk_2CA = 0;
this->actionFunc = func_80C01A24;
}
void func_80C01A24(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
this->actor.gravity = -0.1f;
if (this->collider.base.acFlags & AC_HIT) {
this->collider.base.acFlags &= ~AC_HIT;
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
((EnNiw*)this->unk_2E4)->unk2BC.z = 90000.0f;
}
this->actor.speedXZ = 0.0f;
this->unk_2E4 = NULL;
this->actor.gravity = -2.0f;
func_80C02108(this);
return;
}
if ((this->actor.xzDistToPlayer < 200.0f) && (fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 40.0f)) {
this->unk_2C0 = 1;
}
if (this->unk_2C0 != 0) {
Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.5f, 2.0f);
}
if ((this->unk_2C0 != 0) && !(this->actor.bgCheckFlags & 1)) {
func_80C01B40(this);
}
}
void func_80C01B40(EnBomjimb* this) {
func_80C012E0(this);
this->unk_2CA = 0;
this->actionFunc = func_80C01B74;
}
void func_80C01B74(EnBomjimb* this, GlobalContext* globalCtx) {
Math_ApproachF(&this->actor.speedXZ, 6.0f, 0.5f, 2.0f);
if ((this->collider.base.acFlags & AC_HIT) || (this->actor.bgCheckFlags & 1)) {
this->collider.base.acFlags &= ~AC_HIT;
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
((EnNiw*)this->unk_2E4)->unk2BC.z = 90000.0f;
}
this->actor.speedXZ = 0.0f;
this->unk_2E4 = NULL;
this->actor.gravity = -2.0f;
func_80C02108(this);
}
}
void func_80C01C18(EnBomjimb* this, GlobalContext* globalCtx) {
func_80C012E0(this);
if (this->unk_2E4 != NULL) {
if (this->unk_2E4->update != NULL) {
this->unk_2E4->velocity.y = 8.0f;
this->unk_2E4->shape.rot.z = BINANG_SUB(4000, ((s16)(globalCtx->gameplayFrames & 2) * 4000));
this->unk_294.x = this->unk_2E4->world.pos.x;
this->unk_294.y = this->actor.world.pos.y;
this->unk_294.z = this->unk_2E4->world.pos.z;
}
}
this->actor.speedXZ = 0.0f;
this->unk_2CA = 2;
this->actionFunc = func_80C01CD0;
}
void func_80C01CD0(EnBomjimb* this, GlobalContext* globalCtx) {
f32 sp3C = this->skelAnime.curFrame;
s32 pad[2];
if ((this->unk_2E4 != NULL) && ((this->unk_2E4->update == NULL) || Actor_HasParent(this->unk_2E4, globalCtx))) {
this->actor.draw = EnBomjimb_Draw;
D_80C03170 = NULL;
this->unk_2E4 = NULL;
func_80C02108(this);
return;
}
if (this->unk_2DC != 7) {
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_294), 1, 3000,
0);
Math_ApproachF(&this->actor.world.pos.x, this->unk_294.x, 0.3f, 2.0f);
Math_ApproachF(&this->actor.world.pos.z, this->unk_294.z, 0.3f, 2.0f);
if (sqrtf(SQ(this->actor.world.pos.x - this->unk_294.x) + SQ(this->actor.world.pos.z - this->unk_294.z)) <
3.0f) {
func_80C0113C(this, 7, 1.0f);
Math_Vec3f_Copy(&this->actor.world.pos, &this->unk_294);
}
} else if (this->unk_2B8 <= sp3C) {
this->actor.draw = NULL;
}
if ((this->unk_2C0 == 0) && (this->unk_2E4->bgCheckFlags & 1)) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_PUT_DOWN_WOODBOX);
this->unk_2C0 = 1;
}
if (this->unk_2AE == 0) {
if (this->actor.draw == NULL) {
this->unk_2AE = Rand_S16Offset(20, 30);
this->unk_2E4->shape.rot.z = 1000;
return;
}
this->unk_2AE = 10;
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
if ((globalCtx->gameplayFrames % 16) == 0) {
this->unk_2E4->shape.rot.z = -this->unk_2E4->shape.rot.z;
this->unk_2E4->shape.rot.z *= 0.1f;
}
if (fabsf(this->unk_2E4->shape.rot.z) < 100.0f) {
this->unk_2E4->shape.rot.z = 0;
}
}
return;
}
if (this->actor.draw == 0) {
this->unk_2E4->shape.rot.z = -this->unk_2E4->shape.rot.z;
this->unk_2E4->shape.rot.z *= 0.1f;
if (fabsf(this->unk_2E4->shape.rot.z) < 100.0f) {
this->unk_2E4->shape.rot.z = 0;
}
}
}
void func_80C01FD4(EnBomjimb* this) {
this->actor.textId = 0x72D;
func_80C0113C(this, 9, 1.0f);
this->unk_2CA = 4;
this->actionFunc = func_80C0201C;
}
void func_80C0201C(EnBomjimb* this, GlobalContext* globalCtx) {
s16 abs = ABS_ALT(BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.world.rot.y));
this->unk_290 = 0;
if ((this->actor.xzDistToPlayer < 200.0f) && (abs < 0x61A8)) {
this->unk_290 = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
if (this->unk_290 > 10000) {
this->unk_290 = 10000;
} else if (this->unk_290 < -10000) {
this->unk_290 = -10000;
}
}
if (func_800B84D0(&this->actor, globalCtx)) {
this->unk_2CA = 10;
this->actionFunc = func_80C02A14;
} else {
func_800B8614(&this->actor, globalCtx, 40.0f);
}
}
void func_80C02108(EnBomjimb* this) {
func_80C0113C(this, 6, 1.0f);
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
func_80C012E0(this);
Math_Vec3f_Copy(&this->unk_2A0, &this->actor.world.pos);
this->unk_2D4 = 0;
this->unk_2CA = 5;
this->actionFunc = func_80C0217C;
}
void func_80C0217C(EnBomjimb* this, GlobalContext* globalCtx) {
Vec3f sp74;
CollisionPoly* sp70;
Vec3f sp64;
s32 sp60;
s32 sp5C = this->actor.floorBgId;
CollisionPoly* sp58 = this->actor.floorPoly;
Player* player = GET_PLAYER(globalCtx);
s32 sp50 = false;
if (func_80C012FC(this, globalCtx) || func_80C013B4(this) || func_80C013F0(this, globalCtx)) {
return;
}
if (player->stateFlags3 == 0x1000000) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 3000, 0);
func_80C01494(this);
return;
}
if (this->unk_2DC == 6) {
f32 curFrame = this->skelAnime.curFrame;
if (this->unk_2B8 <= curFrame) {
func_80C0113C(this, 19, 2.0f);
}
return;
}
Math_ApproachF(&this->actor.speedXZ, 8.0f, 0.5f, 2.0f);
Math_Vec3f_Copy(&sp74, &this->actor.world.pos);
sp74.x += Math_SinS(this->actor.world.rot.y) * 50.0f;
sp74.y += 20.0f;
sp74.z += Math_CosS(this->actor.world.rot.y) * 50.0f;
if (BgCheck_EntityLineTest1(&globalCtx->colCtx, &this->actor.world.pos, &sp74, &sp64, &sp70, 1, 0, 0, 1, &sp60)) {
s16 temp = BINANG_SUB((this->actor.world.rot.y - this->actor.yawTowardsPlayer), 0x8000);
this->unk_2D6 = temp;
if (temp < 0) {
this->unk_2D6 += BINANG_ADD((s32)Rand_ZeroFloat(0x200), 0x4000);
if (this->unk_2D0 != 0) {
this->unk_2D6 += BINANG_ADD((s32)Rand_ZeroFloat(0x200), 0x4000);
}
this->unk_2D0 = 1;
} else {
this->unk_2D6 -= BINANG_ADD((s32)Rand_ZeroFloat(0x200), 0x4000);
if (this->unk_2D0 != 0) {
this->unk_2D6 -= BINANG_ADD((s32)Rand_ZeroFloat(0x200), 0x4000);
}
this->unk_2D0 = 1;
}
sp50 = true;
}
if (!sp50) {
this->unk_2D0 = 0;
if (this->actor.xzDistToPlayer < 60.0f) {
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
}
}
this->actor.world.rot.y = this->unk_2D6 + this->unk_2D4;
if (SurfaceType_GetSceneExitIndex(&globalCtx->colCtx, sp58, sp5C)) {
s16 temp = BINANG_SUB(this->actor.world.rot.y, this->actor.yawTowardsPlayer - 0x8000);
if (temp < 0) {
this->unk_2D4 -= 0x1000;
} else {
this->unk_2D4 += 0x1000;
}
this->actor.world.rot.y = this->unk_2D6 + this->unk_2D4;
return;
}
this->unk_2D4 = 0;
if (!sp50 && (this->actor.xzDistToPlayer > 200.0f)) {
func_80C0250C(this);
}
}
void func_80C0250C(EnBomjimb* this) {
func_80C0113C(this, 15, 1.0f);
this->unk_2D4 = 0;
this->actor.speedXZ = 0.0f;
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
func_80C012E0(this);
this->unk_2CA = 6;
this->actionFunc = func_80C02570;
}
void func_80C02570(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if (func_80C012FC(this, globalCtx) || func_80C013B4(this) || func_80C013F0(this, globalCtx)) {
return;
}
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 5000, 0);
if (this->actor.xzDistToPlayer < 200.0f) {
this->unk_2D6 = BINANG_ROT180(this->actor.yawTowardsPlayer);
func_80C0113C(this, 19, 2.0f);
this->actionFunc = func_80C0217C;
} else if ((player->stateFlags3 == 0x1000000) || (this->actor.xzDistToPlayer > 410.0f)) {
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 3000, 0);
func_80C01494(this);
}
}
void func_80C0267C(EnBomjimb* this) {
func_80C012E0(this);
func_80C0113C(this, 8, 1.0f);
this->actor.speedXZ = 0.0f;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->unk_2AE = 40;
this->unk_2C2 = 0;
this->unk_2C4 = (s32)Rand_ZeroFloat(60.0f) + 20;
this->unk_2CA = 7;
this->actionFunc = func_80C02704;
}
void func_80C02704(EnBomjimb* this, GlobalContext* globalCtx) {
if (!func_80C012FC(this, globalCtx) && (this->unk_2AE == 0)) {
func_80C0250C(this);
}
}
void func_80C02740(EnBomjimb* this, GlobalContext* globalCtx) {
static u16 D_80C03230[] = {
0x0721, 0x0722, 0x0723, 0x0724, 0x072C,
};
Player* player = GET_PLAYER(globalCtx);
s16 idx;
func_80C012E0(this);
func_80C0113C(this, 21, 1.0f);
if ((player->transformation != PLAYER_FORM_DEKU) && (player->transformation != PLAYER_FORM_HUMAN)) {
func_80C0113C(this, 17, 1.0f);
func_801518B0(globalCtx, 0x72E, &this->actor);
player->stateFlags1 |= 0x10000000;
player->actor.freezeTimer = 3;
func_80C012E0(this);
this->unk_2CA = 9;
this->actionFunc = func_80C02BCC;
return;
}
if (((player->transformation == PLAYER_FORM_DEKU) && !(gSaveContext.weekEventReg[73] & 0x10)) ||
((player->transformation == PLAYER_FORM_HUMAN) && !(gSaveContext.weekEventReg[85] & 2))) {
func_80C0113C(this, 17, 1.0f);
func_801518B0(globalCtx, 0x72E, &this->actor);
player->stateFlags1 |= 0x10000000;
player->actor.freezeTimer = 3;
func_80C012E0(this);
this->unk_2CA = 9;
this->actionFunc = func_80C02BCC;
return;
}
idx = gSaveContext.unk_FE6;
func_801518B0(globalCtx, D_80C03230[idx], &this->actor);
idx = gSaveContext.unk_FE6;
gSaveContext.unk_FE7[idx] = this->unk_2C8 + 1;
gSaveContext.unk_FE6++;
if (gSaveContext.unk_FE6 > 4) {
func_801A3098(0x922);
} else {
Audio_PlayActorSound2(&this->actor, NA_SE_SY_PIECE_OF_HEART);
}
switch (this->unk_2C8) {
case ENBOMJIMB_F_0:
gSaveContext.weekEventReg[76] |= 1;
gSaveContext.weekEventReg[11] |= 1;
break;
case ENBOMJIMB_F_1:
gSaveContext.weekEventReg[76] |= 2;
gSaveContext.weekEventReg[11] |= 2;
break;
case ENBOMJIMB_F_2:
gSaveContext.weekEventReg[76] |= 4;
gSaveContext.weekEventReg[11] |= 4;
break;
case ENBOMJIMB_F_3:
gSaveContext.weekEventReg[76] |= 8;
gSaveContext.weekEventReg[11] |= 8;
break;
case ENBOMJIMB_F_4:
gSaveContext.weekEventReg[76] |= 0x10;
gSaveContext.weekEventReg[11] |= 0x10;
break;
}
if (!func_801690CC(globalCtx)) {
Player* player = GET_PLAYER(globalCtx);
player->stateFlags1 |= 0x10000000;
player->actor.freezeTimer = 3;
}
this->unk_2CA = 8;
this->actionFunc = func_80C02A14;
}
void func_80C02A14(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
f32 curFrame = this->skelAnime.curFrame;
if (this->unk_2DC == 21) {
player->actor.freezeTimer = 3;
if (this->unk_2B8 <= curFrame) {
func_80C0113C(this, 9, 1.0f);
}
return;
}
if ((this->unk_2CA == 8) && (this->unk_2DC == 9)) {
player->actor.freezeTimer = 3;
if (this->unk_2E0 == 0) {
if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_HUMAN_BOUND);
this->unk_2E0 = 1;
}
}
}
if ((this->unk_2DC == 15) && (this->unk_2CA == 8)) {
player->actor.freezeTimer = 3;
}
if ((func_80152498(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
func_801477B4(globalCtx);
if ((this->unk_2CA == 8) && (gSaveContext.unk_FE6 >= 5)) {
func_80C02CA4(this, globalCtx);
} else {
if (this->unk_2CA == 8) {
player->stateFlags1 &= ~0x10000000;
}
func_80C01FD4(this);
}
}
}
void func_80C02BCC(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
Math_SmoothStepToS(&this->actor.world.rot.y, this->actor.yawTowardsPlayer, 1, 5000, 0);
if (this->unk_2C0 == 0) {
player->actor.freezeTimer = 3;
if ((func_80152498(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
func_801477B4(globalCtx);
this->unk_2C0 = 1;
player->stateFlags1 &= ~0x10000000;
}
} else if (this->actor.xzDistToPlayer > 200.0f) {
func_80C01494(this);
}
}
void func_80C02CA4(EnBomjimb* this, GlobalContext* globalCtx) {
if (BREG(13) == 0) {
globalCtx->nextEntranceIndex = globalCtx->setupExitList[this->unk_2B2];
gSaveContext.nextCutsceneIndex = 0;
Scene_SetExitFade(globalCtx);
globalCtx->sceneLoadFlag = 0x14;
} else {
globalCtx->nextEntranceIndex = Entrance_CreateIndexFromSpawn(5);
gSaveContext.nextCutsceneIndex = 0;
globalCtx->sceneLoadFlag = 0x14;
globalCtx->unk_1887F = 0x56;
gSaveContext.nextTransition = 3;
}
gSaveContext.weekEventReg[75] |= 0x40;
gSaveContext.weekEventReg[83] |= 4;
this->actionFunc = func_80C02DAC;
}
void func_80C02DAC(EnBomjimb* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
player->actor.freezeTimer = 3;
}
void EnBomjimb_Update(Actor* thisx, GlobalContext* globalCtx2) {
GlobalContext* globalCtx = globalCtx2;
EnBomjimb* this = THIS;
if (this->unk_2B0 != 0) {
this->unk_2B0--;
}
if (this->unk_2AE != 0) {
this->unk_2AE--;
}
if (this->unk_2AC != 0) {
this->unk_2AC--;
}
SkelAnime_Update(&this->skelAnime);
this->actor.shape.rot.y = this->actor.world.rot.y;
func_80C011CC(this);
Actor_SetHeight(&this->actor, 20.0f);
this->actionFunc(this, globalCtx);
Actor_SetVelocityAndMoveYRotationAndGravity(&this->actor);
if (this->unk_2CA == 0) {
if ((this->unk_2E4 != NULL) && (this->unk_2E4->update != NULL)) {
Math_Vec3f_Copy(&this->unk_2E4->world.pos, &this->actor.world.pos);
if (this->actor.bgCheckFlags & 1) {
this->unk_2E4->world.pos.y = this->actor.world.pos.y + 35.0f;
} else {
this->unk_2E4->world.pos.y = this->actor.world.pos.y + 25.0f;
}
}
}
Math_SmoothStepToS(&this->unk_28A, this->unk_290, 1, 5000, 0);
if (this->unk_2C4 == 0) {
this->unk_2C2++;
if (this->unk_2C2 > 2) {
this->unk_2C2 = 0;
this->unk_2C4 = (s16)Rand_ZeroFloat(60.0f) + 20;
}
}
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
if (this->unk_2CA != 2) {
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
}
}
s32 EnBomjimb_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
Actor* thisx) {
EnBomjimb* this = THIS;
if (limbIndex == 15) {
*dList = NULL;
}
if (limbIndex == 17) {
rot->x += this->unk_28A;
rot->z += this->unk_288;
}
if ((limbIndex == 19) && (this->unk_2C8 != ENBOMJIMB_F_0)) {
*dList = NULL;
}
if ((limbIndex == 20) && (this->unk_2C8 == ENBOMJIMB_F_0)) {
*dList = NULL;
}
return false;
}
#include "overlays/ovl_En_Bomjimb/ovl_En_Bomjimb.c"
void EnBomjimb_Draw(Actor* thisx, GlobalContext* globalCtx) {
static Gfx* D_80C03260[] = {
gEnBomjimb_D_80C03240, gEnBomjimb_D_80C03250, gEnBomjimb_D_80C03250,
gEnBomjimb_D_80C03250, gEnBomjimb_D_80C03250,
};
static TexturePtr D_80C03274[] = {
&object_cs_Tex_00C520,
&object_cs_Tex_00CD20,
&object_cs_Tex_00D520,
};
static TexturePtr D_80C03280[] = {
&object_cs_Tex_00E620, &object_cs_Tex_00EA20, &object_cs_Tex_00EE20,
&object_cs_Tex_00DD20, &object_cs_Tex_00F220,
};
EnBomjimb* this = THIS;
OPEN_DISPS(globalCtx->state.gfxCtx);
func_8012C28C(globalCtx->state.gfxCtx);
func_8012C2DC(globalCtx->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C03274[this->unk_2C2]));
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C03280[this->unk_2C8]));
gSPSegment(POLY_OPA_DISP++, 0x0A, Lib_SegmentedToVirtual(D_80C03260[this->unk_2C8]));
Scene_SetRenderModeXlu(globalCtx, 0, 1);
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnBomjimb_OverrideLimbDraw, NULL, &this->actor);
CLOSE_DISPS(globalCtx->state.gfxCtx);
}
@@ -7,11 +7,58 @@ struct EnBomjimb;
typedef void (*EnBomjimbActionFunc)(struct EnBomjimb*, GlobalContext*);
#define ENBOMJIMB_GET_F(thisx) ((thisx)->params & 0xF)
#define ENBOMJIMB_GET_F0(thisx) (((thisx)->params >> 4) & 0xF)
#define ENBOMJIMB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
enum {
/* 0 */ ENBOMJIMB_F_0,
/* 1 */ ENBOMJIMB_F_1,
/* 2 */ ENBOMJIMB_F_2,
/* 3 */ ENBOMJIMB_F_3,
/* 4 */ ENBOMJIMB_F_4,
};
enum {
/* 0 */ ENBOMJIMB_F0_0,
/* 1 */ ENBOMJIMB_F0_1,
/* 2 */ ENBOMJIMB_F0_2,
};
typedef struct EnBomjimb {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x140];
/* 0x0284 */ EnBomjimbActionFunc actionFunc;
/* 0x0288 */ char unk_288[0xAC];
/* 0x000 */ Actor actor;
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ Vec3s jointTable[21];
/* 0x206 */ Vec3s morphTable[21];
/* 0x284 */ EnBomjimbActionFunc actionFunc;
/* 0x288 */ s16 unk_288;
/* 0x28A */ s16 unk_28A;
/* 0x28C */ UNK_TYPE1 unk28C[4];
/* 0x290 */ s16 unk_290;
/* 0x294 */ Vec3f unk_294;
/* 0x2A0 */ Vec3f unk_2A0;
/* 0x2AC */ s16 unk_2AC;
/* 0x2AE */ s16 unk_2AE;
/* 0x2B0 */ s16 unk_2B0;
/* 0x2B2 */ s16 unk_2B2;
/* 0x2B4 */ f32 unk_2B4;
/* 0x2B8 */ f32 unk_2B8;
/* 0x2BC */ UNK_TYPE1 unk2BC[4];
/* 0x2C0 */ s16 unk_2C0;
/* 0x2C2 */ s16 unk_2C2;
/* 0x2C4 */ s16 unk_2C4;
/* 0x2C6 */ s16 unk_2C6;
/* 0x2C8 */ s16 unk_2C8;
/* 0x2CA */ s16 unk_2CA;
/* 0x2CC */ s16 unk_2CC;
/* 0x2D0 */ s32 unk_2D0;
/* 0x2D4 */ s16 unk_2D4;
/* 0x2D6 */ s16 unk_2D6;
/* 0x2D8 */ UNK_TYPE1 unk2D8[4];
/* 0x2DC */ s32 unk_2DC;
/* 0x2E0 */ u8 unk_2E0;
/* 0x2E4 */ Actor* unk_2E4;
/* 0x2E8 */ ColliderCylinder collider;
} EnBomjimb; // size = 0x334
extern const ActorInit En_Bomjimb_InitVars;
+1 -1
View File
@@ -591,7 +591,7 @@ s32 func_80B3F598(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
}
if (limbIndex == 11) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &this->unk_1E4);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &this->unk_1E4);
}
if (limbIndex == 10) {
@@ -547,7 +547,7 @@ void func_808BE4D4(EnDekunuts* this, GlobalContext* globalCtx) {
sp40.x = this->actor.world.pos.x;
sp40.y = this->actor.world.pos.y + 18.0f;
sp40.z = this->actor.world.pos.z;
EffectSsDeadDb_Spawn(globalCtx, &sp40, &D_801D15B0, &D_801D15B0, &D_808BEF90, &D_808BEF94, 200, 0, 13);
EffectSsDeadDb_Spawn(globalCtx, &sp40, &gZeroVec3f, &gZeroVec3f, &D_808BEF90, &D_808BEF94, 200, 0, 13);
Audio_PlaySoundAtPosition(globalCtx, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
sp40.y = this->actor.world.pos.y + 10.0f;
EffectSsHahen_SpawnBurst(globalCtx, &sp40, 3.0f, 0, 12, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
@@ -278,7 +278,7 @@ static InitChainEntry sInitChain[] = {
void EnDinofos_Init(Actor* thisx, GlobalContext* globalCtx) {
static s32 D_8089E364 = 0;
static EffBlureInit2 D_8089E368 = {
static EffectBlureInit2 D_8089E368 = {
0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 8,
0, 2, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
};
@@ -288,7 +288,7 @@ void EnDinofos_Init(Actor* thisx, GlobalContext* globalCtx) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, func_800B42F8, 90.0f);
Effect_Add(globalCtx, &this->unk_2A0, 2, 0, 0, &D_8089E368);
Effect_Add(globalCtx, &this->unk_2A0, EFFECT_BLURE2, 0, 0, &D_8089E368);
Collider_InitAndSetJntSph(globalCtx, &this->colliderJntSph, &this->actor, &sJntSphInit,
this->colliderJntSphElement);
Collider_InitAndSetQuad(globalCtx, &this->colliderQuad, &this->actor, &sQuadInit);
@@ -936,7 +936,7 @@ void func_8089C56C(EnDinofos* this, GlobalContext* globalCtx) {
Math_ScaledStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 0x800);
this->actor.world.rot.y = this->actor.shape.rot.y;
if (SkelAnime_Update(&this->skelAnime)) {
func_800A8514(Effect_GetParams(this->unk_2A0));
EffectBlure_AddSpace(Effect_GetByIndex(this->unk_2A0));
this->colliderQuad.base.atFlags &= ~AT_ON;
func_8089A9B0(this, globalCtx);
} else if (Animation_OnFrame(&this->skelAnime, 7.0f)) {
@@ -1454,7 +1454,7 @@ void func_8089DC84(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
Matrix_MultiplyVector3fByState(&D_8089E398, &sp5C);
Collider_SetQuadVertices(&this->colliderQuad, &sp5C, &sp68, &sp74, &sp80);
if (this->colliderQuad.base.atFlags & AT_ON) {
func_800A81F0(Effect_GetParams(this->unk_2A0), &sp68, &sp5C);
EffectBlure_AddVertex(Effect_GetByIndex(this->unk_2A0), &sp68, &sp5C);
}
this->unk_292 = this->unk_290;
}
@@ -1475,7 +1475,7 @@ void func_8089DC84(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
sp4C.x -= sp48->mf[3][0];
sp4C.y -= sp48->mf[3][1];
sp4C.z -= sp48->mf[3][2];
EffectSsDFire_Spawn(globalCtx, &this->unk_34C, &sp4C, &D_801D15B0, 30, 22, 255 - (sp58 * 20), 20, 3, 8);
EffectSsDFire_Spawn(globalCtx, &this->unk_34C, &sp4C, &gZeroVec3f, 30, 22, 255 - (sp58 * 20), 20, 3, 8);
this->unk_292 = this->unk_290;
}
}
+3 -3
View File
@@ -47,7 +47,7 @@ void func_80A4FDD0(EnDnbParticle* particle, EnDnb* this, s16* alloc, s32 idx) {
particle->unk_00 = sp1C;
particle->unk_0C = sp1C;
particle->unk_24 = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp1C);
particle->unk_18 = D_801D15BC;
particle->unk_18 = gZeroVec3s;
}
s32 func_80A4FEBC(EnDnbParticle* particle, f32 arg1) {
@@ -76,7 +76,7 @@ void func_80A4FFE8(EnDnbParticle* particle, s16 arg1) {
particle->unk_1E.x = (Rand_ZeroOne() - 0.5f) * 400.0f;
particle->unk_1E.y = (Rand_ZeroOne() - 0.5f) * 400.0f;
particle->unk_1E.z = (Rand_ZeroOne() - 0.5f) * 400.0f;
particle->unk_18 = D_801D15BC;
particle->unk_18 = gZeroVec3s;
particle->unk_30 = 40.0f;
particle->unk_2C = 0.0f;
particle->unk_26 = arg1;
@@ -86,7 +86,7 @@ void func_80A4FFE8(EnDnbParticle* particle, s16 arg1) {
s32 func_80A500F8(EnDnb* this) {
static Vec3f D_80A50CB0 = { 0.0f, 0.0f, 1000.0f };
Actor* actor = &this->dyna.actor;
Vec3f spA8 = D_801D15B0;
Vec3f spA8 = gZeroVec3f;
Vec3f sp9C;
s32 i;
f32 temp_f20;
+2 -2
View File
@@ -283,7 +283,7 @@ s32 func_80A51A78(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
void func_80A51AA4(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnDnk* this = THIS;
MtxF sp5C;
Vec3f sp50 = D_801D15B0;
Vec3f sp50 = gZeroVec3f;
Vec3f sp44;
Vec3s sp3C;
@@ -359,7 +359,7 @@ s32 func_80A51D78(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* p
void func_80A51DA4(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnDnk* this = THIS;
MtxF sp5C;
Vec3f sp50 = D_801D15B0;
Vec3f sp50 = gZeroVec3f;
Vec3f sp44;
Vec3s sp3C;
+2 -1
View File
@@ -6,6 +6,7 @@
#include "z_en_dno.h"
#include "overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00000039
@@ -1015,7 +1016,7 @@ void EnDno_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0, -frames * 20, 0x20, 0x80));
gDPSetPrimColor(&gfxXlu[2], 0x80, 0x80, 255, 255, 0, 255);
gDPSetEnvColor(&gfxXlu[3], 255, 0, 0, 0);
gSPDisplayList(&gfxXlu[4], D_0407D590);
gSPDisplayList(&gfxXlu[4], gGameplayKeepDrawFlameDL);
POLY_XLU_DISP = gfxXlu + 5;
+1 -1
View File
@@ -435,7 +435,7 @@ s32 func_80B3D974(s16 arg0, s16 arg1, Vec3f* arg2, Vec3s* arg3, s32 arg4, s32 ar
Vec3s sp6C;
MtxF sp2C;
Matrix_MultiplyVector3fByState(&D_801D15B0, &sp74);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &sp74);
Matrix_CopyCurrentState(&sp2C);
func_8018219C(&sp2C, &sp6C, 0);
*arg2 = sp74;
+7 -7
View File
@@ -284,11 +284,11 @@ s32 func_8092CCEC(EnDns* this, GlobalContext* globalCtx) {
Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
Math_Vec3f_Copy(&sp3C, &player->actor.world.pos);
this->unk_2D6 = Math_Vec3f_Yaw(&D_801D15B0, &sp3C);
this->unk_2D4 = Math_Vec3f_Yaw(&D_801D15B0, &sp30);
this->unk_2EC = Math_Vec3f_DistXZ(&sp30, &D_801D15B0);
sp2E = Math_Vec3f_Yaw(&D_801D15B0, &sp3C);
sp2E -= Math_Vec3f_Yaw(&D_801D15B0, &sp30);
this->unk_2D6 = Math_Vec3f_Yaw(&gZeroVec3f, &sp3C);
this->unk_2D4 = Math_Vec3f_Yaw(&gZeroVec3f, &sp30);
this->unk_2EC = Math_Vec3f_DistXZ(&sp30, &gZeroVec3f);
sp2E = Math_Vec3f_Yaw(&gZeroVec3f, &sp3C);
sp2E -= Math_Vec3f_Yaw(&gZeroVec3f, &sp30);
this->unk_2D8 = (Rand_ZeroOne() * 182.0f) + 182.0f;
this->unk_2D8 = (sp2E > 0) ? this->unk_2D8 : -this->unk_2D8;
this->unk_2D0 = 0x28;
@@ -413,7 +413,7 @@ void EnDns_DoNothing(EnDns* this, GlobalContext* globalCtx) {
void func_8092D330(EnDns* this, GlobalContext* globalCtx) {
s32 pad;
Vec3f sp30 = D_801D15B0;
Vec3f sp30 = gZeroVec3f;
s16 temp = this->unk_2D6 - this->unk_2D4;
if (ABS_ALT(temp) < 0xC16) {
@@ -549,7 +549,7 @@ s32 func_8092D954(s16 arg0, s16 arg1, Vec3f* arg2, Vec3s* arg3, s32 arg4, s32 ar
Vec3s sp6C;
MtxF sp2C;
Matrix_MultiplyVector3fByState(&D_801D15B0, &sp74);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &sp74);
Matrix_CopyCurrentState(&sp2C);
func_8018219C(&sp2C, &sp6C, 0);
*arg2 = sp74;
@@ -288,7 +288,7 @@ static InitChainEntry sInitChain[] = {
};
void EnDodongo_Init(Actor* thisx, GlobalContext* globalCtx) {
static EffBlureInit2 D_80879308 = {
static EffectBlureInit2 D_80879308 = {
2, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 8,
0, 0, 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
};
@@ -315,7 +315,7 @@ void EnDodongo_Init(Actor* thisx, GlobalContext* globalCtx) {
this->collider2.elements[i].info.bumper.dmgFlags = 0x77C34FE6;
}
Effect_Add(globalCtx, &this->unk_338, 2, 0, 0, &D_80879308);
Effect_Add(globalCtx, &this->unk_338, EFFECT_BLURE2, 0, 0, &D_80879308);
if (this->actor.params == 0) {
Actor_SetScale(&this->actor, 3.0f / 160.0f);
this->unk_334 = 1.0f;
@@ -384,7 +384,7 @@ void func_80876930(EnDodongo* this, GlobalContext* globalCtx, Vec3f* arg2) {
sp88.z = randPlusMinusPoint5Scaled(temp3) + arg2->z;
D_8087933C.x = randPlusMinusPoint5Scaled(2.0f);
D_8087933C.z = randPlusMinusPoint5Scaled(2.0f);
func_800B0DE0(globalCtx, &sp88, &D_801D15B0, &D_8087933C, sp80, sp7C, temp1, temp2);
func_800B0DE0(globalCtx, &sp88, &gZeroVec3f, &D_8087933C, sp80, sp7C, temp1, temp2);
}
}
@@ -780,13 +780,13 @@ void func_80877E60(EnDodongo* this, GlobalContext* globalCtx) {
sp5E = this->unk_334 * 50.0f;
sp5C = this->unk_334 * 5.0f;
Math_Vec3f_Copy(&sp64, &this->unk_348[0]);
func_800B0DE0(globalCtx, &sp64, &D_801D15B0, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
sp64.x -= Math_CosS(this->actor.shape.rot.y) * 6.0f * this->unk_334;
sp64.z += Math_SinS(this->actor.shape.rot.y) * 6.0f * this->unk_334;
func_800B0DE0(globalCtx, &sp64, &D_801D15B0, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
sp64.x = (2.0f * this->unk_348[0].x) - sp64.x;
sp64.z = (2.0f * this->unk_348[0].z) - sp64.z;
func_800B0DE0(globalCtx, &sp64, &D_801D15B0, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
}
}
@@ -1099,7 +1099,7 @@ void EnDodongo_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
}
if ((limbIndex == 30) && (this->actionFunc == func_80878424) && (this->timer != this->unk_304)) {
func_800A81F0(Effect_GetParams(this->unk_338), &this->unk_320, &this->unk_348[4]);
EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->unk_348[4]);
this->unk_304 = this->timer;
}
}
File diff suppressed because it is too large Load Diff
+37 -3
View File
@@ -6,12 +6,46 @@
struct EnElf;
typedef void (*EnElfActionFunc)(struct EnElf*, GlobalContext*);
typedef void (*EnElfUnkFunc)(struct EnElf*, GlobalContext*);
#define ENELF_GET_F(thisx) ((thisx)->params & 0xF)
#define ENELF_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
typedef struct EnElf {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x120];
/* 0x0264 */ u16 unk264;
/* 0x0266 */ char unk_266[0xA];
/* 0x0144 */ SkelAnime skelAnime;
/* 0x0188 */ Vec3s jointTable[7];
/* 0x01B2 */ Vec3s morphTable[7];
/* 0x01DC */ Color_RGBAf innerColor;
/* 0x01EC */ Color_RGBAf outerColor;
/* 0x01FC */ LightInfo lightInfoGlow;
/* 0x020C */ LightNode* lightNodeGlow;
/* 0x0210 */ LightInfo lightInfoNoGlow;
/* 0x0220 */ LightNode* lightNodeNoGlow;
/* 0x0224 */ Vec3f unk_224;
/* 0x0230 */ Actor* elfMsg;
/* 0x0234 */ Actor* unk_234;
/* 0x0238 */ f32 unk_238;
/* 0x023C */ f32 unk_23C;
/* 0x0240 */ f32 unk_240;
/* 0x0244 */ s16 unk_244;
/* 0x0246 */ s16 unk_246;
/* 0x0248 */ s16 unk_248;
/* 0x024A */ s16 unk_24A;
/* 0x024C */ s16 unk_24C;
/* 0x0250 */ f32 unk_250;
/* 0x0254 */ f32 unk_254;
/* 0x0258 */ s16 unk_258;
/* 0x025A */ u16 timer;
/* 0x025C */ s16 unk_25C;
/* 0x025E */ s16 disappearTimer;
/* 0x0260 */ s16 unk_260;
/* 0x0262 */ u16 fairyFlags;
/* 0x0264 */ u16 unk_264;
/* 0x0266 */ u16 unk_266;
/* 0x0268 */ u8 unk_268;
/* 0x0269 */ u8 unk_269;
/* 0x026C */ EnElfUnkFunc unk_26C;
/* 0x0270 */ EnElfActionFunc actionFunc;
} EnElf; // size = 0x274
@@ -1069,11 +1069,11 @@ void EnFish2_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
}
if (limbIndex == 14) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &this->unk_318);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &this->unk_318);
}
if (limbIndex == 17) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &this->unk_300);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &this->unk_300);
}
Collider_UpdateSpheres(limbIndex, &this->collider);
@@ -461,10 +461,10 @@ void func_808D14DC(EnFloormas* this, GlobalContext* globalCtx) {
sp28.x = Math_SinS(this->actor.shape.rot.y + 0x6000) * 7.0f;
sp28.z = Math_CosS(this->actor.shape.rot.y + 0x6000) * 7.0f;
func_800B1210(globalCtx, &sp34, &sp28, &D_801D15B0, 0x1C2, 0x64);
func_800B1210(globalCtx, &sp34, &sp28, &gZeroVec3f, 0x1C2, 0x64);
sp28.x = Math_SinS(this->actor.shape.rot.y - 0x6000) * 7.0f;
sp28.z = Math_CosS(this->actor.shape.rot.y - 0x6000) * 7.0f;
func_800B1210(globalCtx, &sp34, &sp28, &D_801D15B0, 0x1C2, 0x64);
func_800B1210(globalCtx, &sp34, &sp28, &gZeroVec3f, 0x1C2, 0x64);
func_800B9010(&this->actor, NA_SE_EN_FLOORMASTER_SLIDING - SFX_FLAG);
}
@@ -682,7 +682,7 @@ void func_808D1ED4(EnFloormas* this, GlobalContext* globalCtx) {
sp34.x = this->actor.world.pos.x;
sp34.y = this->actor.world.pos.y + 15.0f;
sp34.z = this->actor.world.pos.z;
func_800B3030(globalCtx, &sp34, &D_801D15B0, &D_801D15B0, 150, -10, 2);
func_800B3030(globalCtx, &sp34, &gZeroVec3f, &gZeroVec3f, 150, -10, 2);
Audio_PlaySoundAtPosition(globalCtx, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
this->actionFunc = func_808D1F7C;
}
File diff suppressed because it is too large Load Diff
+62 -2
View File
@@ -5,10 +5,70 @@
struct EnFz;
typedef void (*EnFzActionFunc)(struct EnFz*, GlobalContext*);
typedef void (*EnFzUnkFunc)(struct EnFz*);
#define ENFZ_GET_F(thisx) ((thisx)->params & 0xF)
#define ENFZ_GET_3000(thisx) (((thisx)->params & 0x3000) >> 0xC)
#define ENFZ_GET_4000(thisx) ((thisx)->params & 0x4000)
#define ENFZ_GET_8000(thisx) ((thisx)->params & 0x8000)
enum {
/* 0 */ ENFZ_F_0,
/* 1 */ ENFZ_F_1,
/* 2 */ ENFZ_F_2,
/* 3 */ ENFZ_F_3,
};
typedef struct {
/* 0x00 */ u8 unk_00;
/* 0x01 */ u8 unk_01;
/* 0x04 */ Vec3f unk_04;
/* 0x10 */ Vec3f unk_10;
/* 0x1C */ Vec3f unk_1C;
/* 0x28 */ UNK_TYPE1 unk_28[0x4];
/* 0x2C */ s16 unk_2C;
/* 0x2E */ s16 unk_2E;
/* 0x30 */ f32 unk_30;
/* 0x34 */ f32 unk_34;
/* 0x38 */ u8 unk_38;
} EnFzStruct; // size = 0x3C
typedef struct EnFz {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0xA98];
} EnFz; // size = 0xBDC
/* 0x144 */ EnFzActionFunc actionFunc;
/* 0x148 */ ColliderCylinder collider1;
/* 0x194 */ ColliderCylinder collider2;
/* 0x1E0 */ ColliderCylinder collider3;
/* 0x22C */ Vec3f unk_22C;
/* 0x238 */ f32 unk_238;
/* 0x23C */ EnFzStruct unk_23C[40];
/* 0xB9C */ f32 unk_B9C;
/* 0xBA0 */ f32 unk_BA0;
/* 0xBA4 */ s16 unk_BA4;
/* 0xBA8 */ f32 unk_BA8;
/* 0xBAC */ f32 unk_BAC;
/* 0xBB0 */ f32 unk_BB0;
/* 0xBB4 */ f32 unk_BB4;
/* 0xBB8 */ f32 unk_BB8;
/* 0xBBC */ f32 unk_BBC;
/* 0xBC0 */ u32 unk_BC0;
/* 0xBC4 */ s16 unk_BC4;
/* 0xBC6 */ s16 unk_BC6;
/* 0xBC8 */ s16 unk_BC8;
/* 0xBCA */ s16 unk_BCA;
/* 0xBCC */ u8 unk_BCC;
/* 0xBCD */ u8 unk_BCD;
/* 0xBCE */ u8 unk_BCE;
/* 0xBCF */ u8 unk_BCF;
/* 0xBD0 */ s16 unk_BD0;
/* 0xBD2 */ s16 unk_BD2;
/* 0xBD4 */ UNK_TYPE1 unkBD4[2];
/* 0xBD6 */ u8 unk_BD6;
/* 0xBD7 */ u8 unk_BD7;
/* 0xBD8 */ u8 unk_BD8;
/* 0xBD9 */ u8 unk_BD9;
} EnFz; /* size = 0xBDC */
extern const ActorInit En_Fz_InitVars;
@@ -352,9 +352,9 @@ void EnGiant_PlaySound(EnGiant* this) {
void EnGiant_UpdatePosition(EnGiant* this, GlobalContext* globalCtx, u32 actionIndex) {
CsCmdActorAction* actorAction = globalCtx->csCtx.npcActions[actionIndex];
f32 floatUnk10 = actorAction->unk10;
f32 floatUnk10 = actorAction->unk0C.y;
s32 pad[2];
f32 floatUnk1C = actorAction->unk1C;
f32 floatUnk1C = actorAction->unk18.y;
f32 functionTemp;
functionTemp = func_800F5A8C(actorAction->endFrame, actorAction->startFrame, globalCtx->csCtx.frames, globalCtx);
+3 -3
View File
@@ -1408,7 +1408,7 @@ s32 func_8095097C(EnGm* this, GlobalContext* globalCtx) {
func_8013AF00(sp7C, 3, this->unk_234->count + 3);
if (!(this->unk_3A4 & 8)) {
sp58 = D_801D15B0;
sp58 = gZeroVec3f;
func_8013B6B0(this->unk_234, &this->unk_244, &this->unk_254, this->unk_24C, this->unk_248, &this->unk_250, sp7C,
&sp58, this->unk_3C4);
func_8013B878(globalCtx, this->unk_234, this->unk_250, &sp58);
@@ -1427,7 +1427,7 @@ s32 func_8095097C(EnGm* this, GlobalContext* globalCtx) {
sp58 = this->actor.world.pos;
}
this->unk_238 = D_801D15B0;
this->unk_238 = gZeroVec3f;
if (func_8013B6B0(this->unk_234, &this->unk_244, &this->unk_254, this->unk_24C, this->unk_248, &this->unk_250, sp7C,
&this->unk_238, this->unk_3C4)) {
@@ -1705,7 +1705,7 @@ void func_809514BC(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
CLOSE_DISPS(globalCtx->state.gfxCtx);
if (limbIndex == 9) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &sp30);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &sp30);
Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp30);
}
}
@@ -1481,7 +1481,7 @@ void EnGoroiwa_Update(Actor* thisx, GlobalContext* globalCtx) {
sp50.y = this->actor.floorHeight;
sp50.z = this->actor.world.pos.z;
sp4C = (((Rand_ZeroOne() * 36.0f) + 250.0f) * this->actor.scale.x) + 10.0f;
func_800AE930(&globalCtx->colCtx, Effect_GetParams(this->unk_248), &sp50, sp4C,
func_800AE930(&globalCtx->colCtx, Effect_GetByIndex(this->unk_248), &sp50, sp4C,
this->actor.world.rot.y, this->actor.floorPoly, this->actor.floorBgId);
}
sp48 = false;
@@ -1491,7 +1491,7 @@ void EnGoroiwa_Update(Actor* thisx, GlobalContext* globalCtx) {
}
if (sp48) {
func_800AEF44(Effect_GetParams(this->unk_248));
func_800AEF44(Effect_GetByIndex(this->unk_248));
}
this->actionFunc(this, globalCtx);
@@ -221,7 +221,6 @@ extern Gfx D_06000720[];
extern Gfx D_06000080[];
extern s32 D_801BDA9C;
extern Vec3s D_801D15BC;
const ActorInit En_Invadepoh_InitVars = {
ACTOR_EN_INVADEPOH,
@@ -2568,7 +2567,7 @@ void func_80B48620(Actor* thisx, GlobalContext* globalCtx) {
this->actor.update = func_80B4873C;
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06013928, &D_06009E58, this->jointTable, this->morphTable,
23);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 6, D_80B4EB00, 2, &D_801D15BC, 5000, 0.05f, 0.3f, 0.12f);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 6, D_80B4EB00, 2, &gZeroVec3s, 5000, 0.05f, 0.3f, 0.12f);
Animation_PlayLoop(&this->skelAnime, &D_06009E58);
func_80B482D4(this);
}
@@ -2636,7 +2635,7 @@ void func_80B48948(EnInvadepoh* this) {
this->actionTimer = Rand_S16Offset(150, 150);
if (rand < 0.5f) {
this->rand = 0;
Math_Vec3s_Copy(&substruct->unk26, &D_801D15BC);
Math_Vec3s_Copy(&substruct->unk26, &gZeroVec3s);
substruct->unk30 = 0.1f;
substruct->unk2C = 1000;
} else if (rand < 0.75f) {
@@ -2702,7 +2701,7 @@ void func_80B48AD4(EnInvadepoh* this, GlobalContext* globalCtx) {
if (temp_v1_3 != this->rand) {
this->rand = temp_v1_3;
if (this->rand == 0) {
Math_Vec3s_Copy(&substruct->unk26, &D_801D15BC);
Math_Vec3s_Copy(&substruct->unk26, &gZeroVec3s);
substruct->unk30 = 0.07f;
} else if (this->rand == 1) {
substruct->unk26.x = Rand_S16Offset(1000, 1000);
@@ -2772,7 +2771,7 @@ void func_80B48FB0(Actor* thisx, GlobalContext* globalCtx) {
this->actor.textId = 0x3330;
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06013928, &D_06009E58, this->jointTable, this->morphTable,
23);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 6, D_80B4EB00, 2, &D_801D15BC, 100, 0.03, 0.3, 0.03);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 6, D_80B4EB00, 2, &gZeroVec3s, 100, 0.03, 0.3, 0.03);
func_80B444F4(this, globalCtx);
EnInvadepoh_SetPathPointToWorldPos(this, 0);
func_800B4AEC(globalCtx, &this->actor, 50.0f);
@@ -3124,7 +3123,7 @@ void func_80B49F88(Actor* thisx, GlobalContext* globalCtx) {
func_80B44F58();
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06013928, &D_06014088, this->jointTable, this->morphTable,
23);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 1, &D_801D15BC, 100, 0.03, 0.3, 0.03);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 1, &gZeroVec3s, 100, 0.03, 0.3, 0.03);
func_80B44540(this, globalCtx);
func_80B44570(this);
func_80B44C24(this, globalCtx);
@@ -3355,7 +3354,7 @@ void func_80B4A9C8(Actor* thisx, GlobalContext* globalCtx) {
func_80B44F58();
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06013928, &D_06014088, this->jointTable, this->morphTable,
23);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 1, &D_801D15BC, 100, 0.03f, 0.3f, 0.03f);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 1, &gZeroVec3s, 100, 0.03f, 0.3f, 0.03f);
func_80B44620(this, globalCtx);
if ((sp38 < CLOCK_TIME(2, 15)) || (sp38 >= CLOCK_TIME(6, 0))) {
this->pathIndex = 0;
@@ -3532,7 +3531,7 @@ void func_80B4B0C4(Actor* thisx, GlobalContext* globalCtx) {
23);
Animation_MorphToLoop(&this->skelAnime, &D_06009E58, 0.0f);
substruct = &this->behaviorInfo;
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 3, &D_801D15BC, 2000, 0.08f, 0.3f, 0.03f);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 3, &gZeroVec3s, 2000, 0.08f, 0.3f, 0.03f);
substruct->unk30 = 0.08f;
substruct->unk2C = 0x7D0;
func_800B4AEC(globalCtx, &this->actor, 50.0f);
@@ -3685,7 +3684,7 @@ void func_80B4B8BC(Actor* thisx, GlobalContext* globalCtx) {
Actor_SetObjectSegment(globalCtx, &this->actor);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_060080F0, &D_060021C8, this->jointTable, this->morphTable,
13);
func_80B45C04(&this->behaviorInfo, 0, 0, 0, 0, &D_801D15BC, 3000, 0.1f, 0.0f, 0.0f);
func_80B45C04(&this->behaviorInfo, 0, 0, 0, 0, &gZeroVec3s, 3000, 0.1f, 0.0f, 0.0f);
func_80B44664(this, globalCtx);
EnInvadepoh_SetPathPointToWorldPos(this, 0);
func_800B4AEC(globalCtx, &this->actor, 50.0f);
@@ -3919,7 +3918,7 @@ void func_80B4C3A0(Actor* thisx, GlobalContext* globalCtx) {
func_80B44FEC();
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06015C28, &D_06016720, this->jointTable, this->morphTable,
22);
func_80B45C04(&this->behaviorInfo, D_80B4EBDC, 1, D_80B4EC08, 0, &D_801D15BC, 100, 0.03f, 0.3f, 0.03f);
func_80B45C04(&this->behaviorInfo, D_80B4EBDC, 1, D_80B4EC08, 0, &gZeroVec3s, 100, 0.03f, 0.3f, 0.03f);
this->actor.textId = 0x33CD;
if (currentTime < 0xD5A0) {
this->unk304 = -0x8000;
@@ -4140,7 +4139,7 @@ void func_80B4CE54(Actor* thisx, GlobalContext* globalCtx) {
func_80B44F58();
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06013928, &D_06014088, this->jointTable, this->morphTable,
23);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 3, &D_801D15BC, 100, 0.03f, 0.3f, 0.03f);
func_80B45C04(&this->behaviorInfo, D_80B4EA90, 1, D_80B4EB00, 3, &gZeroVec3s, 100, 0.03f, 0.3f, 0.03f);
func_80B446D0(this, globalCtx);
this->actor.world.rot.y = this->actor.shape.rot.y;
func_80B44700(this);
@@ -1157,8 +1157,7 @@ void EnKakasi_LimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec
EnKakasi* this = (EnKakasi*)actor;
if (limbIndex == 4) {
// what is D_801D15B0 ? we didn't have to define it, we store the output though
Matrix_MultiplyVector3fByState(&D_801D15B0, &this->unk1BC);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &this->unk1BC);
}
}
+2 -2
View File
@@ -401,7 +401,7 @@ s32 func_80B41528(GlobalContext* globalCtx) {
}
void func_80B415A8(GlobalContext* globalCtx, Vec3f* arg1) {
static EffShieldParticleInit D_80B43298 = {
static EffectShieldParticleInit D_80B43298 = {
16,
{ 0, 0, 0 },
{ 0, 200, 255, 255 },
@@ -426,7 +426,7 @@ void func_80B415A8(GlobalContext* globalCtx, Vec3f* arg1) {
D_80B43298.lightPoint.y = D_80B43298.position.y;
D_80B43298.lightPoint.z = D_80B43298.position.z;
Effect_Add(globalCtx, &effectIndex, 3, 0, 1, &D_80B43298);
Effect_Add(globalCtx, &effectIndex, EFFECT_SHIELD_PARTICLE, 0, 1, &D_80B43298);
}
void func_80B4163C(EnKgy* this, GlobalContext* globalCtx) {
@@ -215,7 +215,7 @@ void EnMinislime_AddIceSmokeEffect(EnMinislime* this, GlobalContext* globalCtx)
vel.x = randPlusMinusPoint5Scaled(1.5f);
vel.z = randPlusMinusPoint5Scaled(1.5f);
vel.y = 2.0f;
EffectSsIceSmoke_Spawn(globalCtx, &pos, &vel, &D_801D15B0, 500);
EffectSsIceSmoke_Spawn(globalCtx, &pos, &vel, &gZeroVec3f, 500);
}
void EnMinislime_SetupDisappear(EnMinislime* this) {
@@ -219,7 +219,7 @@ s32 func_80A68C5C(Vec3f* arg0, Vec3f* arg1) {
f32 temp_f0 = Math3D_Vec3fMagnitude(arg0);
if (temp_f0 < 0.005f) {
Math_Vec3f_Copy(arg0, &D_801D15B0);
Math_Vec3f_Copy(arg0, &gZeroVec3f);
return false;
} else {
arg1->x = arg0->x * (1.0f / temp_f0);
@@ -1095,7 +1095,7 @@ void func_80A6B0D8(EnMushi2* this, GlobalContext* globalCtx) {
sp48.x = (this->unk_328.x * -0.6f) + (this->unk_31C.x * 0.1f);
sp48.y = (this->unk_328.y * -0.6f) + (this->unk_31C.y * 0.1f);
sp48.z = (this->unk_328.z * -0.6f) + (this->unk_31C.z * 0.1f);
func_800B0E48(globalCtx, &this->actor.world.pos, &sp48, &D_801D15B0, &D_80A6B984[sp44], &D_80A6B98C[sp44],
func_800B0E48(globalCtx, &this->actor.world.pos, &sp48, &gZeroVec3f, &D_80A6B984[sp44], &D_80A6B98C[sp44],
(Rand_ZeroOne() * 5.0f) + 8.0f, (Rand_ZeroOne() * 5.0f) + 8.0f);
}
@@ -7,6 +7,7 @@
#include "z_en_pametfrog.h"
#include "overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.h"
#include "overlays/effects/ovl_Effect_Ss_Hahen/z_eff_ss_hahen.h"
#include "objects/object_bigslime/object_bigslime.h"
#define FLAGS 0x00000035
@@ -65,28 +66,6 @@ void EnPametfrog_SnapperSpawn(EnPametfrog* this, GlobalContext* globalCtx);
void EnPametfrog_SetupTransitionGekkoSnapper(EnPametfrog* this, GlobalContext* globalCtx);
void EnPametfrog_TransitionGekkoSnapper(EnPametfrog* this, GlobalContext* globalCtx);
extern AnimationHeader D_06000994; // Begin Rear on Snapper
extern AnimationHeader D_06001B08; // Call Snapper
extern AnimationHeader D_06001E14; // Crawl on Wall
extern AnimationHeader D_06001F20; // Falling
extern AnimationHeader D_060030E4; // Get up from Back
extern AnimationHeader D_0600347C; // Jab Punch
extern AnimationHeader D_060039C4; // Jump on Ground
extern AnimationHeader D_06003F28; // Kick
extern AnimationHeader D_06004298; // Fall on Back
extern AnimationHeader D_06004680; // Idle
extern AnimationHeader D_06004894; // Jump on Snapper
extern AnimationHeader D_06004D50; // Continue Rear on Snapper
extern AnimationHeader D_060050B8; // Squeeze Body
extern AnimationHeader D_060052EC; // Land on Snapper
extern AnimationHeader D_06005694; // Wiggle
extern AnimationHeader D_06005D54; // Head Knockback
extern AnimationHeader D_060066B4; // Look Around
extern AnimationHeader D_060070C4; // Hook Punch
extern FlexSkeletonHeader D_0600DF98;
extern AnimationHeader D_0600F048; // Windup Punch
extern AnimationHeader D_0600F990; // Melee Ready Stance
const ActorInit En_Pametfrog_InitVars = {
ACTOR_EN_PAMETFROG,
ACTORCAT_BOSS,
@@ -207,7 +186,8 @@ void EnPametfrog_Init(Actor* thisx, GlobalContext* globalCtx) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 55.0f);
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInit);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_0600DF98, &D_0600F990, this->jointTable, this->morphTable, 24);
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGekkoSkel, &gGekkoBoxingStanceAnim, this->jointTable,
this->morphTable, GEKKO_LIMB_MAX);
Collider_InitAndSetJntSph(globalCtx, &this->collider, &this->actor, &sJntSphInit, this->colElement);
this->params = CLAMP(this->actor.params, 1, 4);
if (Actor_GetRoomCleared(globalCtx, globalCtx->roomCtx.currRoom.num)) {
@@ -250,7 +230,7 @@ u8 EnPametfrog_Vec3fNormalize(Vec3f* vec) {
}
}
void EnPametfrog_ChangeColliderFreeze(EnPametfrog* this) {
void EnPametfrog_Freeze(EnPametfrog* this) {
this->drawEffect = GEKKO_DRAW_EFFECT_FROZEN;
this->collider.base.colType = COLTYPE_HIT3;
this->collider.elements->info.elemType = ELEMTYPE_UNK0;
@@ -259,14 +239,14 @@ void EnPametfrog_ChangeColliderFreeze(EnPametfrog* this) {
this->unk_2C4 = 1.0f;
}
void EnPametfrog_ChangeColliderThaw(EnPametfrog* this, GlobalContext* globalCtx) {
void EnPametfrog_Thaw(EnPametfrog* this, GlobalContext* globalCtx) {
this->freezeTimer = 0;
if (this->drawEffect == GEKKO_DRAW_EFFECT_FROZEN) {
this->drawEffect = GEKKO_DRAW_EFFECT_NONE;
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
this->collider.base.colType = COLTYPE_HIT6;
this->collider.elements->info.elemType = ELEMTYPE_UNK1;
this->unk_2C4 = 0.0f;
func_800BF7CC(globalCtx, &this->actor, this->limbPos, 12, 2, 0.3f, 0.2f);
func_800BF7CC(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f);
}
}
@@ -407,7 +387,7 @@ void EnPametfrog_JumpOnGround(EnPametfrog* this, GlobalContext* globalCtx) {
void EnPametfrog_ApplyMagicArrowEffects(EnPametfrog* this, GlobalContext* globalCtx) {
if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_FIRE) {
this->drawEffect = GEKKO_DRAW_EFFECT_NONE;
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
this->unk_2C4 = 3.0f;
this->unk_2C8 = 0.75f;
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_LIGHT) {
@@ -418,7 +398,7 @@ void EnPametfrog_ApplyMagicArrowEffects(EnPametfrog* this, GlobalContext* global
this->collider.elements[0].info.bumper.hitPos.x, this->collider.elements[0].info.bumper.hitPos.y,
this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ICE) {
EnPametfrog_ChangeColliderFreeze(this);
EnPametfrog_Freeze(this);
}
}
@@ -439,11 +419,11 @@ void EnPametfrog_ApplyStun(EnPametfrog* this) {
void EnPametfrog_SetupRearOnSnapper(EnPametfrog* this) {
if (this->actionFunc == EnPametfrog_RearOnSnapperRise) {
Animation_PlayOnce(&this->skelAnime, &D_06005694);
Animation_PlayOnce(&this->skelAnime, &gGekkoWiggleAnim);
} else if (this->actionFunc == EnPametfrog_RearOnSnapperWave) {
Animation_PlayOnce(&this->skelAnime, &D_060052EC);
Animation_PlayOnce(&this->skelAnime, &gGekkoLandOnSnapperAnim);
} else {
Animation_PlayOnce(&this->skelAnime, &D_06004680);
Animation_PlayOnce(&this->skelAnime, &gGekkoStandingIdleAnim);
}
this->actor.flags &= ~1;
@@ -458,9 +438,9 @@ void EnPametfrog_RearOnSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
if (SkelAnime_Update(&this->skelAnime)) {
if (Rand_ZeroOne() < 0.5f) {
Animation_PlayOnce(&this->skelAnime, &D_06004D50);
Animation_PlayOnce(&this->skelAnime, &gGekkoQuickFistPumpAnim);
} else {
Animation_PlayOnce(&this->skelAnime, &D_06004680);
Animation_PlayOnce(&this->skelAnime, &gGekkoStandingIdleAnim);
}
}
@@ -478,7 +458,7 @@ void EnPametfrog_RearOnSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupRearOnSnapperWave(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &D_06004894);
Animation_PlayOnce(&this->skelAnime, &gGekkoJumpOnSnapperAnim);
this->timer = 15;
this->actionFunc = EnPametfrog_RearOnSnapperWave;
}
@@ -493,7 +473,7 @@ void EnPametfrog_RearOnSnapperWave(EnPametfrog* this, GlobalContext* globalCtx)
}
void EnPametfrog_SetupRearOnSnapperRise(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &D_060050B8);
Animation_PlayOnce(&this->skelAnime, &gGekkoSqueezeAnim);
this->timer = 10;
this->actor.params = GEKKO_REAR_ON_SNAPPER;
this->actor.shape.rot.x = 0;
@@ -517,7 +497,7 @@ void EnPametfrog_SetupFallOffSnapper(EnPametfrog* this, GlobalContext* globalCtx
Vec3f eye;
s16 yaw;
Animation_PlayOnce(&this->skelAnime, &D_06001F20);
Animation_PlayOnce(&this->skelAnime, &gGekkoFallInAirAnim);
this->actor.params = GEKKO_FALL_OFF_SNAPPER;
this->actor.speedXZ = 7.0f;
this->actor.velocity.y = 15.0f;
@@ -554,7 +534,7 @@ void EnPametfrog_FallOffSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupJumpToWall(EnPametfrog* this) {
Animation_Change(&this->skelAnime, &D_060039C4, 2.0f, 0.0f, 0.0f, 0, -2.0f);
Animation_Change(&this->skelAnime, &gGekkoJumpForwardAnim, 2.0f, 0.0f, 0.0f, 0, -2.0f);
this->actor.shape.rot.x = 0;
this->actor.shape.rot.z = 0;
this->actor.bgCheckFlags &= ~8;
@@ -578,14 +558,14 @@ void EnPametfrog_JumpToWall(EnPametfrog* this, GlobalContext* globalCtx) {
void EnPametfrog_SetupWallCrawl(EnPametfrog* this) {
if (this->actionFunc == EnPametfrog_JumpToWall) {
Animation_PlayLoop(&this->skelAnime, &D_06001E14);
Animation_PlayLoop(&this->skelAnime, &gGekkoCrawlAnim);
this->collider.base.acFlags |= AC_ON;
this->unk_2D0.x = 0.0f;
this->unk_2D0.z = 0.0f;
this->actor.gravity = 0.0f;
this->actor.world.pos.y = this->actor.focus.pos.y;
this->unk_2D0.y = 1.0f;
Math_Vec3f_Copy(&this->actor.colChkInfo.displacement, &D_801D15B0);
Math_Vec3f_Copy(&this->actor.colChkInfo.displacement, &gZeroVec3f);
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
this->unk_2DC.x = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.x);
this->unk_2DC.y = COLPOLY_GET_NORMAL(this->actor.wallPoly->normal.y);
@@ -721,7 +701,8 @@ void EnPametfrog_WallPause(EnPametfrog* this, GlobalContext* globalCtx) {
void EnPametfrog_SetupClimbDownWall(EnPametfrog* this) {
s16 yaw;
Animation_Change(&this->skelAnime, &D_060039C4, 0.0f, 0.0f, Animation_GetLastFrame(&D_060039C4), 2, 0.0f);
Animation_Change(&this->skelAnime, &gGekkoJumpForwardAnim, 0.0f, 0.0f,
Animation_GetLastFrame(&gGekkoJumpForwardAnim), 2, 0.0f);
this->actor.shape.rot.y = Actor_YawBetweenActors(&this->actor, this->actor.child);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.shape.rot.x = 0;
@@ -755,7 +736,7 @@ void EnPametfrog_ClimbDownWall(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupRunToSnapper(EnPametfrog* this) {
Animation_Change(&this->skelAnime, &D_060039C4, 2.0f, 0.0f, 0.0f, 0, -2.0f);
Animation_Change(&this->skelAnime, &gGekkoJumpForwardAnim, 2.0f, 0.0f, 0.0f, 0, -2.0f);
this->actor.params = GEKKO_RETURN_TO_SNAPPER;
this->actionFunc = EnPametfrog_RunToSnapper;
}
@@ -778,7 +759,7 @@ void EnPametfrog_RunToSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupJumpOnSnapper(EnPametfrog* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &D_06004680, 6.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoStandingIdleAnim, 6.0f);
this->timer = 6;
this->collider.base.ocFlags1 &= ~OC1_ON;
this->collider.base.acFlags &= ~AC_ON;
@@ -810,7 +791,7 @@ void EnPametfrog_JumpOnSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupLandOnSnapper(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &D_06000994);
Animation_PlayOnce(&this->skelAnime, &gGekkoFullFistPumpAnim);
this->actor.shape.rot.y = this->actor.child->shape.rot.y;
this->actor.params = GEKKO_ON_SNAPPER;
this->actionFunc = EnPametfrog_LandOnSnapper;
@@ -828,7 +809,7 @@ void EnPametfrog_SetupFallInAir(EnPametfrog* this, GlobalContext* globalCtx) {
Vec3f eye;
f32 xzDist;
Animation_PlayOnce(&this->skelAnime, &D_06001F20);
Animation_PlayOnce(&this->skelAnime, &gGekkoFallInAirAnim);
if (this->actor.colChkInfo.health > 0) {
this->actor.params = GEKKO_RETURN_TO_SNAPPER;
}
@@ -889,13 +870,13 @@ void EnPametfrog_FallInAir(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupFallOnGround(EnPametfrog* this, GlobalContext* globalCtx) {
Animation_PlayOnce(&this->skelAnime, &D_06004298);
Animation_PlayOnce(&this->skelAnime, &gGekkoFallOnGroundAnim);
this->actor.shape.rot.x = 0;
this->actor.shape.rot.y += this->spinYaw;
this->actor.shape.rot.z = 0;
this->spinYaw = 0;
this->timer = 5;
EnPametfrog_ChangeColliderThaw(this, globalCtx);
EnPametfrog_Thaw(this, globalCtx);
EnPametfrog_JumpWaterEffects(this, globalCtx);
Audio_PlayActorSound2(&this->actor, NA_SE_EV_WALK_WATER);
this->actionFunc = EnPametfrog_FallOnGround;
@@ -903,14 +884,14 @@ void EnPametfrog_SetupFallOnGround(EnPametfrog* this, GlobalContext* globalCtx)
void EnPametfrog_FallOnGround(EnPametfrog* this, GlobalContext* globalCtx) {
if (SkelAnime_Update(&this->skelAnime)) {
if (this->skelAnime.animation == &D_06004298) {
if (this->skelAnime.animation == &gGekkoFallOnGroundAnim) {
if (this->actor.colChkInfo.health == 0) {
this->timer--;
if (this->timer == 0) {
EnPametfrog_SetupDefeatGekko(this, globalCtx);
}
} else {
Animation_PlayOnce(&this->skelAnime, &D_060030E4);
Animation_PlayOnce(&this->skelAnime, &gGekkoRecoverAnim);
}
} else {
EnPametfrog_SetupRunToSnapper(this);
@@ -982,7 +963,7 @@ void EnPametfrog_SetupSpawnFrog(EnPametfrog* this, GlobalContext* globalCtx) {
vec1.y = this->actor.world.pos.y + 25.0f;
vec1.z = (Math_CosS(yaw) * 20.0f) + this->actor.world.pos.z;
this->collider.base.ocFlags1 &= ~OC1_ON;
func_800B0DE0(globalCtx, &vec1, &D_801D15B0, &D_801D15B0, &primColor, &envColor, 800, 50);
func_800B0DE0(globalCtx, &vec1, &gZeroVec3f, &gZeroVec3f, &primColor, &envColor, 800, 50);
Audio_PlaySoundAtPosition(globalCtx, &this->actor.world.pos, 40, NA_SE_EN_NPC_APPEAR);
Actor_SetRoomClearedTemp(globalCtx, globalCtx->roomCtx.currRoom.num);
@@ -1043,7 +1024,7 @@ void EnPametfrog_PlayCutscene(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupLookAround(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &D_060066B4);
Animation_PlayOnce(&this->skelAnime, &gGekkoLookAroundAnim);
this->collider.base.atFlags &= ~AT_ON;
this->actor.speedXZ = 0.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
@@ -1064,7 +1045,7 @@ void EnPametfrog_LookAround(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupJumpToLink(EnPametfrog* this) {
Animation_PlayLoop(&this->skelAnime, &D_060039C4);
Animation_PlayLoop(&this->skelAnime, &gGekkoJumpForwardAnim);
this->collider.base.acFlags |= AC_ON;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = EnPametfrog_JumpToLink;
@@ -1089,17 +1070,17 @@ void EnPametfrog_JumpToLink(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupMeleeAttack(EnPametfrog* this) {
Animation_PlayOnce(&this->skelAnime, &D_0600F990);
Animation_PlayOnce(&this->skelAnime, &gGekkoBoxingStanceAnim);
this->timer = 7;
this->actor.speedXZ = 0.0f;
this->actionFunc = EnPametfrog_MeleeAttack;
}
static AnimationHeader* sAttackAnimations[] = {
&D_0600347C, // Jab Punch
&D_060070C4, // Hook Punch
&D_06003F28, // Kick
&D_0600F048, // Windup Punch
&gGekkoJabPunchAnim,
&gGekkoHookPunchAnim,
&gGekkoKickAnim,
&gGekkoWindupPunchAnim,
};
void EnPametfrog_MeleeAttack(EnPametfrog* this, GlobalContext* globalCtx) {
@@ -1109,18 +1090,18 @@ void EnPametfrog_MeleeAttack(EnPametfrog* this, GlobalContext* globalCtx) {
if (this->timer == 0) {
EnPametfrog_SetupLookAround(this);
} else if (this->timer == 6) {
Animation_PlayOnce(&this->skelAnime, &D_0600F990);
Animation_PlayOnce(&this->skelAnime, &gGekkoBoxingStanceAnim);
} else {
Animation_PlayOnce(&this->skelAnime, sAttackAnimations[(s32)Rand_ZeroFloat(4.0f) % 4]);
}
}
if ((this->skelAnime.animation == &D_0600347C && Animation_OnFrame(&this->skelAnime, 2.0f)) ||
(this->skelAnime.animation == &D_060070C4 && Animation_OnFrame(&this->skelAnime, 9.0f)) ||
(this->skelAnime.animation == &D_06003F28 && Animation_OnFrame(&this->skelAnime, 2.0f)) ||
((this->skelAnime.animation == &D_0600F048) && Animation_OnFrame(&this->skelAnime, 27.0f))) {
if ((this->skelAnime.animation == &gGekkoJabPunchAnim && Animation_OnFrame(&this->skelAnime, 2.0f)) ||
(this->skelAnime.animation == &gGekkoHookPunchAnim && Animation_OnFrame(&this->skelAnime, 9.0f)) ||
(this->skelAnime.animation == &gGekkoKickAnim && Animation_OnFrame(&this->skelAnime, 2.0f)) ||
((this->skelAnime.animation == &gGekkoWindupPunchAnim) && Animation_OnFrame(&this->skelAnime, 27.0f))) {
this->collider.base.atFlags |= AT_ON;
if (this->skelAnime.animation == &D_06003F28) {
if (this->skelAnime.animation == &gGekkoKickAnim) {
Audio_PlayActorSound2(&this->actor, NA_SE_EN_FROG_KICK);
} else {
Audio_PlayActorSound2(&this->actor, NA_SE_EN_FROG_PUNCH1);
@@ -1131,7 +1112,7 @@ void EnPametfrog_MeleeAttack(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupDamage(EnPametfrog* this) {
Animation_MorphToPlayOnce(&this->skelAnime, &D_06005D54, -3.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoKnockbackAnim, -3.0f);
this->timer = 20;
this->collider.base.atFlags &= ~AT_ON;
this->collider.base.acFlags &= ~AC_ON;
@@ -1157,7 +1138,7 @@ void EnPametfrog_Damage(EnPametfrog* this, GlobalContext* globalCtx) {
}
void EnPametfrog_SetupStun(EnPametfrog* this) {
if (this->skelAnime.animation == &D_060039C4) {
if (this->skelAnime.animation == &gGekkoJumpForwardAnim) {
this->skelAnime.curFrame = 0.0f;
SkelAnime_Update(&this->skelAnime);
}
@@ -1175,10 +1156,10 @@ void EnPametfrog_SetupStun(EnPametfrog* this) {
void EnPametfrog_Stun(EnPametfrog* this, GlobalContext* globalCtx) {
this->freezeTimer--;
if (this->freezeTimer == 0) {
EnPametfrog_ChangeColliderThaw(this, globalCtx);
EnPametfrog_Thaw(this, globalCtx);
EnPametfrog_SetupJumpToLink(this);
} else if (this->freezeTimer == 78) {
EnPametfrog_ChangeColliderThaw(this, globalCtx);
EnPametfrog_Thaw(this, globalCtx);
this->actor.colorFilterTimer = 0;
EnPametfrog_SetupCutscene(this);
}
@@ -1189,7 +1170,7 @@ void EnPametfrog_SetupCallSnapper(EnPametfrog* this, GlobalContext* globalCtx) {
Vec3f at;
s16 yawDiff;
Animation_MorphToPlayOnce(&this->skelAnime, &D_06001B08, 3.0f);
Animation_MorphToPlayOnce(&this->skelAnime, &gGekkoCallAnim, 3.0f);
Audio_PlayActorSound2(&this->actor, NA_SE_EN_FROG_GREET);
this->actor.flags &= ~1;
this->actor.colChkInfo.health = 6;
@@ -1298,14 +1279,14 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, GlobalContext* globalCtx)
EnPametfrog_ApplyStun(this);
EnPametfrog_SetupStun(this);
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_ICE) {
EnPametfrog_ChangeColliderFreeze(this);
EnPametfrog_Freeze(this);
this->freezeTimer = 80;
func_800BCB70(&this->actor, 0x4000, 0xFF, 0, 0x50);
EnPametfrog_SetupStun(this);
} else {
EnPametfrog_ChangeColliderThaw(this, globalCtx);
EnPametfrog_Thaw(this, globalCtx);
if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_FIRE) {
this->drawEffect = GEKKO_DRAW_EFFECT_NONE;
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
this->unk_2C8 = 0.75f;
this->unk_2C4 = 4.0f;
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_LIGHT) {
@@ -1388,19 +1369,19 @@ void EnPametfrog_Update(Actor* thisx, GlobalContext* globalCtx) {
}
}
/* index -1: Limb Not used
* index 0: GEKKO_LIMB_WAIST
* index 1: GEKKO_LIMB_L_SHIN
* index 2: GEKKO_LIMB_L_FOOT
* index 3: GEKKO_LIMB_R_SHIN
* index 4: GEKKO_LIMB_R_FOOT
* index 5: GEKKO_LIMB_L_UPPER_ARM
* index 6: GEKKO_LIMB_L_FOREARM
* index 7: GEKKO_LIMB_L_HAND
* index 8: GEKKO_LIMB_R_UPPER_ARM
* index 9: GEKKO_LIMB_R_FOREARM
* index 10: GEKKO_LIMB_R_HAND
* index 11: GEKKO_LIMB_JAW
/* value -1: Limb Not used
* value 0: GEKKO_LIMB_WAIST
* value 1: GEKKO_LIMB_L_SHIN
* value 2: GEKKO_LIMB_L_FOOT
* value 3: GEKKO_LIMB_R_SHIN
* value 4: GEKKO_LIMB_R_FOOT
* value 5: GEKKO_LIMB_L_UPPER_ARM
* value 6: GEKKO_LIMB_L_FOREARM
* value 7: GEKKO_LIMB_L_HAND
* value 8: GEKKO_LIMB_R_UPPER_ARM
* value 9: GEKKO_LIMB_R_FOREARM
* value 10: GEKKO_LIMB_R_HAND
* value 11: GEKKO_LIMB_JAW
*/
static s8 limbPosIndex[] = {
-1, -1, 0, -1, 1, -1, 2, -1, 3, -1, 4, -1, 5, 6, -1, 7, 8, 9, -1, 10, -1, 11, -1, -1,
@@ -21,7 +21,7 @@ typedef enum {
} EnPametfrogState;
typedef enum {
/* 00 */ GEKKO_DRAW_EFFECT_NONE, // May be GEKKO_DRAW_EFFECT_THAW
/* 00 */ GEKKO_DRAW_EFFECT_THAW,
/* 10 */ GEKKO_DRAW_EFFECT_FROZEN = 10,
/* 20 */ GEKKO_DRAW_EFFECT_LIGHT_ORBS = 20,
/* 30 */ GEKKO_DRAW_EFFECT_ELECTRIC_STUN = 30,
+5 -5
View File
@@ -1449,7 +1449,7 @@ s32 func_80AF9E7C(EnPm* this, GlobalContext* globalCtx) {
func_8013AF00(sp7C, 3, this->unk_234->count + 3);
if (!(this->unk_356 & 8)) {
sp58 = D_801D15B0;
sp58 = gZeroVec3f;
func_8013B6B0(this->unk_234, &this->unk_244, &this->unk_254, this->unk_24C, this->unk_248, &this->unk_250, sp7C,
&sp58, this->unk_374);
func_8013B878(globalCtx, this->unk_234, this->unk_250, &sp58);
@@ -1468,7 +1468,7 @@ s32 func_80AF9E7C(EnPm* this, GlobalContext* globalCtx) {
sp58 = this->actor.world.pos;
}
this->unk_238 = D_801D15B0;
this->unk_238 = gZeroVec3f;
if (func_8013B6B0(this->unk_234, &this->unk_244, &this->unk_254, this->unk_24C, this->unk_248, &this->unk_250, sp7C,
&this->unk_238, this->unk_374)) {
@@ -1827,7 +1827,7 @@ void func_80AFAA44(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
switch (limbIndex) {
case 15:
if (ActorCutscene_GetCurrentIndex() == -1) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &this->actor.focus.pos);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &this->actor.focus.pos);
Math_Vec3s_Copy(&this->actor.focus.rot, &this->actor.world.rot);
}
if ((this->unk_356 & 0x8000) && !(gSaveContext.weekEventReg[90] & 4)) {
@@ -1843,10 +1843,10 @@ void func_80AFAA44(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
case 8:
if ((this->unk_258 == 9) || (this->unk_258 == 20) || (this->unk_258 == 21) || (this->unk_258 == 22)) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &sp2C);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &sp2C);
Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp2C);
} else if (this->unk_258 == 24) {
Matrix_MultiplyVector3fByState(&D_801D15B0, &sp2C);
Matrix_MultiplyVector3fByState(&gZeroVec3f, &sp2C);
Math_Vec3f_ToVec3s(&this->colliderSphere.dim.worldSphere.center, &sp2C);
}
func_80AF8890(this, gfx, 2);
@@ -5,6 +5,7 @@
*/
#include "z_en_po_sisters.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#define FLAGS 0x00005015
@@ -725,7 +726,7 @@ void func_80B1BE4C(EnPoSisters* this, s32 arg1) {
sp34.x = this->actor.world.pos.x;
sp34.y = this->actor.world.pos.y + 45.0f;
sp34.z = this->actor.world.pos.z;
func_800B3030(arg1, &sp34, &D_801D15B0, &D_801D15B0, 150, 0, 3);
func_800B3030(arg1, &sp34, &gZeroVec3f, &gZeroVec3f, 150, 0, 3);
}
Lights_PointSetColorAndRadius(&this->lightInfo, 0, 0, 0, 0);
this->actionFunc = func_80B1BF2C;
@@ -1189,7 +1190,7 @@ void EnPoSisters_Draw(Actor* thisx, GlobalContext* globalCtx) {
Matrix_Scale(phi_f20, phi_f20, phi_f20, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_0407D590);
gSPDisplayList(POLY_XLU_DISP++, gGameplayKeepDrawFlameDL);
}
func_800BE680(globalCtx, &this->actor, this->unk_28C, ARRAY_COUNT(this->unk_28C),
+4 -4
View File
@@ -203,7 +203,7 @@ void func_80B2C910(Vec3f* vec, GlobalContext* globalCtx) {
}
Math_Vec3f_ScaleAndStore(&sp20, temp_f0, vec);
} else {
Math_Vec3f_Copy(vec, &D_801D15B0);
Math_Vec3f_Copy(vec, &gZeroVec3f);
}
}
@@ -426,13 +426,13 @@ void func_80B2D300(EnPoh* this, GlobalContext* globalCtx) {
sp44.z = (Math_CosS(sp38) * 23.0f) + this->actor.world.pos.z;
}
sp36 = (this->unk_18E * 10) + 80;
func_800B3030(globalCtx, &sp44, &D_80B2F710, &D_801D15B0, sp36, 0, 2);
func_800B3030(globalCtx, &sp44, &D_80B2F710, &gZeroVec3f, sp36, 0, 2);
sp44.x = (2.0f * this->actor.world.pos.x) - sp44.x;
sp44.z = (2.0f * this->actor.world.pos.z) - sp44.z;
func_800B3030(globalCtx, &sp44, &D_80B2F710, &D_801D15B0, sp36, 0, 2);
func_800B3030(globalCtx, &sp44, &D_80B2F710, &gZeroVec3f, sp36, 0, 2);
sp44.x = this->actor.world.pos.x;
sp44.z = this->actor.world.pos.z;
func_800B3030(globalCtx, &sp44, &D_80B2F710, &D_801D15B0, sp36, 0, 2);
func_800B3030(globalCtx, &sp44, &D_80B2F710, &gZeroVec3f, sp36, 0, 2);
} else if (this->unk_18E == 28) {
func_80B2DC50(this, globalCtx);
} else if (this->unk_18E > 18) {
@@ -10,7 +10,14 @@ typedef void (*EnRacedogActionFunc)(struct EnRacedog*, GlobalContext*);
typedef struct EnRacedog {
/* 0x0000 */ Actor actor;
/* 0x0144 */ EnRacedogActionFunc actionFunc;
/* 0x0148 */ char unk_148[0x180];
/* 0x0148 */ char unk_148[0xA0];
/* 0x01E8 */ s32 unk_1E8;
/* 0x01EC */ char unk_1EC[0xA4];
/* 0x0290 */ s16 unk_290;
/* 0x0292 */ s16 unk_292;
/* 0x0294 */ char unk_294[0x8];
/* 0x029C */ s16 unk_29C;
/* 0x029E */ char unk_29E[0x2A];
} EnRacedog; // size = 0x2C8
extern const ActorInit En_Racedog_InitVars;
File diff suppressed because it is too large Load Diff
@@ -6,12 +6,40 @@
struct EnRailSkb;
typedef void (*EnRailSkbActionFunc)(struct EnRailSkb*, GlobalContext*);
typedef void (*EnRailSkbUnkFunc)(struct EnRailSkb*);
#define ENRAILSKB_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
#define ENRAILSKB_GET_FF(thisx) ((thisx)->params & 0xFF)
typedef struct EnRailSkb {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0xE4];
/* 0x0228 */ EnRailSkbActionFunc actionFunc;
/* 0x022C */ char unk_22C[0x1D8];
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderJntSph collider;
/* 0x164 */ ColliderJntSphElement colliderElements[2];
/* 0x1E4 */ SkelAnime skelAnime;
/* 0x228 */ EnRailSkbActionFunc actionFunc;
/* 0x22C */ ObjHakaisi* unk_22C;
/* 0x230 */ Vec3s* unk_230;
/* 0x234 */ Vec3f unk_234[14];
/* 0x2DC */ s32 unk_2DC;
/* 0x2E0 */ s32 unk_2E0;
/* 0x2E4 */ s32 unk_2E4;
/* 0x2E8 */ s32 unk_2E8;
/* 0x2EC */ f32 unk_2EC;
/* 0x2F0 */ f32 unk_2F0;
/* 0x2F4 */ Vec3s jointTable[20];
/* 0x36C */ Vec3s morphTable[20];
/* 0x3E4 */ UNK_TYPE1 unk3E4[0xC];
/* 0x3F0 */ s16 unk_3F0;
/* 0x3F2 */ s16 unk_3F2;
/* 0x3F4 */ s16 unk_3F4;
/* 0x3F6 */ s16 unk_3F6;
/* 0x3F8 */ s16 unk_3F8;
/* 0x3FA */ s16 unk_3FA;
/* 0x3FC */ s16 unk_3FC;
/* 0x3FE */ s16 unk_3FE;
/* 0x400 */ u16 unk_400;
/* 0x402 */ u8 unk_402;
/* 0x403 */ u8 unk_403;
} EnRailSkb; // size = 0x404
extern const ActorInit En_Rail_Skb_InitVars;
@@ -611,7 +611,7 @@ void func_80BA6800(EnRailgibud* this, GlobalContext* globalCtx, s32 arg2) {
void func_80BA6974(GlobalContext* globalCtx, Vec3f* vec, f32 arg2, s32 arg3, s16 arg4, s16 arg5) {
Vec3f sp8C;
Vec3f sp80 = { 0.0f, 0.3f, 0.0f };
Vec3f sp74 = D_801D15B0;
Vec3f sp74 = gZeroVec3f;
s32 i;
s32 pad;
+1 -1
View File
@@ -720,7 +720,7 @@ void func_808FB42C(EnRr* this, GlobalContext* globalCtx) {
sp74.x = this->actor.world.pos.x;
sp74.y = this->actor.world.pos.y + 20.0f;
sp74.z = this->actor.world.pos.z;
func_800B3030(globalCtx, &sp74, &D_801D15B0, &D_801D15B0, 100, 0, 0);
func_800B3030(globalCtx, &sp74, &gZeroVec3f, &gZeroVec3f, 100, 0, 0);
Audio_PlaySoundAtPosition(globalCtx, &sp74, 11, NA_SE_EN_EXTINCT);
} else {
temp_f20 = this->actor.scale.y * 66.66667f;
@@ -331,7 +331,7 @@ void func_80BAAB78(EnSuttari* this, GlobalContext* globalCtx) {
case 0:
if (gSaveContext.weekEventReg[0x51] & 1) {
this->textId = 0x1455;
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk264 |= 8;
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk_264 |= 8;
this->flags2 |= 1;
} else {
this->textId = 0x1450;
@@ -353,7 +353,7 @@ void func_80BAAB78(EnSuttari* this, GlobalContext* globalCtx) {
case 0x1453:
this->flags1 |= 0x400;
gSaveContext.weekEventReg[0x51] |= 1;
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk264 |= 8;
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk_264 |= 8;
this->flags2 |= 1;
this->textId = 0x1454;
break;
@@ -411,7 +411,7 @@ void func_80BAAFDC(EnSuttari* this, GlobalContext* globalCtx) {
Matrix_MultiplyVector3fByState(&effectVelOffset, &effectVel);
Matrix_StatePop();
if (this->unk3F0 == 0) {
EffectSsSolderSrchBall_Spawn(globalCtx, &effectPos, &effectVel, &D_801D15B0, 50, &this->unk3F0, 1);
EffectSsSolderSrchBall_Spawn(globalCtx, &effectPos, &effectVel, &gZeroVec3f, 50, &this->unk3F0, 1);
}
if (this->unk3F0 == 1) {
play_sound(NA_SE_SY_FOUND);
@@ -443,7 +443,7 @@ void func_80BAB1A0(EnSuttari* this, GlobalContext* globalCtx) {
Matrix_MultiplyVector3fByState(&effectVelOffset, &effectVel);
Matrix_StatePop();
if (this->unk3F0 == 0) {
EffectSsSolderSrchBall_Spawn(globalCtx, &effectPos, &effectVel, &D_801D15B0, 50, &this->unk3F0, 1);
EffectSsSolderSrchBall_Spawn(globalCtx, &effectPos, &effectVel, &gZeroVec3f, 50, &this->unk3F0, 1);
}
if (this->unk3F0 == 1) {
play_sound(NA_SE_SY_FOUND);
@@ -755,7 +755,7 @@ s32 func_80BABFD4(EnSuttari* this, GlobalContext* globalCtx) {
func_8013AF00(sp7C, 3, this->unk404->count + 3);
if (this->unk42C == 0) {
sp58 = D_801D15B0;
sp58 = gZeroVec3f;
func_8013B6B0(this->unk404, &this->unk414, &this->unk424, this->unk41C, this->unk418, &this->unk420, sp7C,
&sp58, this->unk42A);
func_8013B878(globalCtx, this->unk404, this->unk420, &sp58);
@@ -771,7 +771,7 @@ s32 func_80BABFD4(EnSuttari* this, GlobalContext* globalCtx) {
sp50 = this->unk420;
sp58 = this->actor.world.pos;
}
this->unk408 = D_801D15B0;
this->unk408 = gZeroVec3f;
if (func_8013B6B0(this->unk404, &this->unk414, &this->unk424, this->unk41C, this->unk418, &this->unk420, sp7C,
&this->unk408, this->unk42A)) {
this->unk430 = 1;
@@ -1318,7 +1318,7 @@ void func_80BADA9C(EnSuttari* this, GlobalContext* globalCtx) {
}
this->flags1 &= ~0x400;
if (this->flags2 & 1) {
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk264 |= 0x10;
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk_264 |= 0x10;
this->flags2 &= ~1;
}
globalCtx->msgCtx.unk11F22 = 0x43;
+3 -3
View File
@@ -174,11 +174,11 @@ void func_808D8940(EnSw* this, GlobalContext* globalCtx) {
sp94.x = 0.0f;
sp94.y = (Rand_ZeroOne() * 0.2f) + 0.1f;
sp94.z = Rand_ZeroOne() + 1.0f;
Lib_Vec3f_TranslateAndRotateY(&D_801D15B0, temp_s0, &sp94, &spAC);
Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, temp_s0, &sp94, &spAC);
sp94.x = 0.0f;
sp94.y = 0.7f;
sp94.z = 2.0f;
Lib_Vec3f_TranslateAndRotateY(&D_801D15B0, temp_s0, &sp94, &spB8);
Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, temp_s0, &sp94, &spB8);
spA0.x = this->actor.world.pos.x + (2.0f * spB8.x);
spA0.z = this->actor.world.pos.z + (2.0f * spB8.z);
func_800B0EB0(globalCtx, &spA0, &spB8, &spAC, &D_808DBAA4, &D_808DBAA8, 60, 30, temp_f4);
@@ -1148,7 +1148,7 @@ void func_808DB2E0(EnSw* this, GlobalContext* globalCtx) {
Audio_PlayActorSound2(&this->actor, NA_SE_EN_STALTURA_BOUND);
} else {
func_800BC154(globalCtx, &globalCtx->actorCtx, &this->actor, 5);
Math_Vec3f_Copy(&this->actor.velocity, &D_801D15B0);
Math_Vec3f_Copy(&this->actor.velocity, &gZeroVec3f);
this->unk_410 &= ~(0x10 | 0x1);
this->actionFunc = func_808DB100;
}
+34 -8
View File
@@ -13,11 +13,9 @@
void EnTalk_Init(Actor* thisx, GlobalContext* globalCtx);
void EnTalk_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnTalk_Update(Actor* thisx, GlobalContext* globalCtx);
void func_80BDE058(EnTalk* this, GlobalContext* globalCtx);
void func_80BDE090(EnTalk* this, GlobalContext* globalCtx);
#if 0
const ActorInit En_Talk_InitVars = {
ACTOR_EN_TALK,
ACTORCAT_ITEMACTION,
@@ -30,14 +28,42 @@ const ActorInit En_Talk_InitVars = {
(ActorFunc)NULL,
};
#endif
void EnTalk_Init(Actor* thisx, GlobalContext* globalCtx) {
EnTalk* this = THIS;
s8 targetMode = this->actor.home.rot.x - 0x1;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Talk/EnTalk_Init.s")
if (targetMode >= 0 && targetMode < 7) {
this->actor.targetMode = targetMode;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Talk/EnTalk_Destroy.s")
Actor_SetScale(&this->actor, 1.0f);
this->actionFunc = func_80BDE090;
this->actor.textId = ENTALK_GET_TEXT_ID(&this->actor);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Talk/func_80BDE058.s")
void EnTalk_Destroy(Actor* thisx, GlobalContext* globalCtx) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Talk/func_80BDE090.s")
void func_80BDE058(EnTalk* this, GlobalContext* globalCtx) {
if (func_800B867C(&this->actor, globalCtx)) {
this->actionFunc = func_80BDE090;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Talk/EnTalk_Update.s")
void func_80BDE090(EnTalk* this, GlobalContext* globalCtx) {
if (func_800B84D0(&this->actor, globalCtx)) {
this->actionFunc = func_80BDE058;
return;
}
if ((this->actor.xzDistToPlayer < 40.0f && Actor_IsLinkFacingActor(&this->actor, 0x3000, globalCtx)) ||
this->actor.isTargeted) {
func_800B8614(&this->actor, globalCtx, 120.0f);
}
}
void EnTalk_Update(Actor* thisx, GlobalContext* globalCtx) {
EnTalk* this = THIS;
this->actionFunc(this, globalCtx);
}
@@ -3,6 +3,8 @@
#include "global.h"
#define ENTALK_GET_TEXT_ID(thisx) (((thisx)->params & 0x3F) + 0x1C00)
struct EnTalk;
typedef void (*EnTalkActionFunc)(struct EnTalk*, GlobalContext*);

Some files were not shown because too many files have changed in this diff Show More