mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-27 07:07:09 +00:00
Fully document object_goma (#872)
This commit is contained in:
parent
70ec8c42fc
commit
d95639b993
3 changed files with 331 additions and 117 deletions
|
@ -3,37 +3,160 @@
|
||||||
<!-- Skeleton -->
|
<!-- Skeleton -->
|
||||||
<Skeleton Name="gGohmaSkel" Type="Normal" LimbType="Standard" Offset="0x1DCF8"/>
|
<Skeleton Name="gGohmaSkel" Type="Normal" LimbType="Standard" Offset="0x1DCF8"/>
|
||||||
|
|
||||||
|
<!-- Limbs -->
|
||||||
|
<Limb Name="gGohmaRoot1Limb" LimbType="Standard" Offset="0x1D7A8"/>
|
||||||
|
<Limb Name="gGohmaRoot2Limb" LimbType="Standard" Offset="0x1D7B4"/>
|
||||||
|
<Limb Name="gGohmaBodyLimb" LimbType="Standard" Offset="0x1D7C0"/>
|
||||||
|
<Limb Name="gGohmaBodyShellLimb" LimbType="Standard" Offset="0x1D7CC"/>
|
||||||
|
<Limb Name="gGohmaEyeLimb" LimbType="Standard" Offset="0x1D7D8"/>
|
||||||
|
<Limb Name="gGohmaTailRootLimb" LimbType="Standard" Offset="0x1D7E4"/>
|
||||||
|
<Limb Name="gGohmaTail1RootLimb" LimbType="Standard" Offset="0x1D7F0"/>
|
||||||
|
<Limb Name="gGohmaTail2RootLimb" LimbType="Standard" Offset="0x1D7FC"/>
|
||||||
|
<Limb Name="gGohmaTail3RootLimb" LimbType="Standard" Offset="0x1D808"/>
|
||||||
|
<Limb Name="gGohmaTail4RootLimb" LimbType="Standard" Offset="0x1D814"/>
|
||||||
|
<Limb Name="gGohmaTail4Limb" LimbType="Standard" Offset="0x1D820"/>
|
||||||
|
<Limb Name="gGohmaTail3Limb" LimbType="Standard" Offset="0x1D82C"/>
|
||||||
|
<Limb Name="gGohmaTail2Limb" LimbType="Standard" Offset="0x1D838"/>
|
||||||
|
<Limb Name="gGohmaTail1Limb" LimbType="Standard" Offset="0x1D844"/>
|
||||||
|
<Limb Name="gGohmaRightLegRootLimb" LimbType="Standard" Offset="0x1D850"/>
|
||||||
|
<Limb Name="gGohmaRightThighRootLimb" LimbType="Standard" Offset="0x1D85C"/>
|
||||||
|
<Limb Name="gGohmaRightLegLowerRootLimb" LimbType="Standard" Offset="0x1D868"/>
|
||||||
|
<Limb Name="gGohmaRightFeetRootLimb" LimbType="Standard" Offset="0x1D874"/>
|
||||||
|
<Limb Name="gGohmaRightFeetBackRoot1Limb" LimbType="Standard" Offset="0x1D880"/>
|
||||||
|
<Limb Name="gGohmaRightFeetBackRoot2Limb" LimbType="Standard" Offset="0x1D88C"/>
|
||||||
|
<Limb Name="gGohmaRightFeetBackLimb" LimbType="Standard" Offset="0x1D898"/>
|
||||||
|
<Limb Name="gGohmaRightFeetLimb" LimbType="Standard" Offset="0x1D8A4"/>
|
||||||
|
<Limb Name="gGohmaRightShinLimb" LimbType="Standard" Offset="0x1D8B0"/>
|
||||||
|
<Limb Name="gGohmaRightKneeRoot1Limb" LimbType="Standard" Offset="0x1D8BC"/>
|
||||||
|
<Limb Name="gGohmaRightKneeRoot2Limb" LimbType="Standard" Offset="0x1D8C8"/>
|
||||||
|
<Limb Name="gGohmaRightKneeLimb" LimbType="Standard" Offset="0x1D8D4"/>
|
||||||
|
<Limb Name="gGohmaRightThighShellRoot1Limb" LimbType="Standard" Offset="0x1D8E0"/>
|
||||||
|
<Limb Name="gGohmaRightThighShellRoot2Limb" LimbType="Standard" Offset="0x1D8EC"/>
|
||||||
|
<Limb Name="gGohmaRightThighShellLimb" LimbType="Standard" Offset="0x1D8F8"/>
|
||||||
|
<Limb Name="gGohmaRightThighLimb" LimbType="Standard" Offset="0x1D904"/>
|
||||||
|
<Limb Name="gGohmaEyeLidBottomRoot1Limb" LimbType="Standard" Offset="0x1D910"/>
|
||||||
|
<Limb Name="gGohmaEyeLidBottomRoot2Limb" LimbType="Standard" Offset="0x1D91C"/>
|
||||||
|
<Limb Name="gGohmaEyeLidBottomLimb" LimbType="Standard" Offset="0x1D928"/>
|
||||||
|
<Limb Name="gGohmaEyeLidTopRoot1Limb" LimbType="Standard" Offset="0x1D934"/>
|
||||||
|
<Limb Name="gGohmaEyeLidTopRoot2Limb" LimbType="Standard" Offset="0x1D940"/>
|
||||||
|
<Limb Name="gGohmaEyeLidTopLimb" LimbType="Standard" Offset="0x1D94C"/>
|
||||||
|
<Limb Name="gGohmaIrisRoot1Limb" LimbType="Standard" Offset="0x1D958"/>
|
||||||
|
<Limb Name="gGohmaIrisRoot2Limb" LimbType="Standard" Offset="0x1D964"/>
|
||||||
|
<Limb Name="gGohmaIrisLimb" LimbType="Standard" Offset="0x1D970"/>
|
||||||
|
<Limb Name="gGohmaMandiblesRoot1Limb" LimbType="Standard" Offset="0x1D97C"/>
|
||||||
|
<Limb Name="gGohmaMandiblesRoot2Limb" LimbType="Standard" Offset="0x1D988"/>
|
||||||
|
<Limb Name="gGohmaMandiblesBodyLimb" LimbType="Standard" Offset="0x1D994"/>
|
||||||
|
<Limb Name="gGohmaLeftMandiblesRootLimb" LimbType="Standard" Offset="0x1D9A0"/>
|
||||||
|
<Limb Name="gGohmaLeftMandibles1RootLimb" LimbType="Standard" Offset="0x1D9AC"/>
|
||||||
|
<Limb Name="gGohmaLeftMandibles2RootLimb" LimbType="Standard" Offset="0x1D9B8"/>
|
||||||
|
<Limb Name="gGohmaLeftMandibles2Limb" LimbType="Standard" Offset="0x1D9C4"/>
|
||||||
|
<Limb Name="gGohmaLeftMandibles1Limb" LimbType="Standard" Offset="0x1D9D0"/>
|
||||||
|
<Limb Name="gGohmaRightMandiblesRootLimb" LimbType="Standard" Offset="0x1D9DC"/>
|
||||||
|
<Limb Name="gGohmaRightMandibles1RootLimb" LimbType="Standard" Offset="0x1D9E8"/>
|
||||||
|
<Limb Name="gGohmaRightMandibles2RootLimb" LimbType="Standard" Offset="0x1D9F4"/>
|
||||||
|
<Limb Name="gGohmaRightMandibles2Limb" LimbType="Standard" Offset="0x1DA00"/>
|
||||||
|
<Limb Name="gGohmaRightMandibles1Limb" LimbType="Standard" Offset="0x1DA0C"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaRootLimb" LimbType="Standard" Offset="0x1DA18"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaBodyRootLimb" LimbType="Standard" Offset="0x1DA24"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaShellRootLimb" LimbType="Standard" Offset="0x1DA30"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaClawRootLimb" LimbType="Standard" Offset="0x1DA3C"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaClawLimb" LimbType="Standard" Offset="0x1DA48"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaShellLimb" LimbType="Standard" Offset="0x1DA54"/>
|
||||||
|
<Limb Name="gGohmaLeftAntennaBodyLimb" LimbType="Standard" Offset="0x1DA60"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaRootLimb" LimbType="Standard" Offset="0x1DA6C"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaBodyRootLimb" LimbType="Standard" Offset="0x1DA78"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaShellRootLimb" LimbType="Standard" Offset="0x1DA84"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaClawRootLimb" LimbType="Standard" Offset="0x1DA90"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaClawLimb" LimbType="Standard" Offset="0x1DA9C"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaShellLimb" LimbType="Standard" Offset="0x1DAA8"/>
|
||||||
|
<Limb Name="gGohmaRightAntennaBodyLimb" LimbType="Standard" Offset="0x1DAB4"/>
|
||||||
|
<Limb Name="gGohmaLeftLegRootLimb" LimbType="Standard" Offset="0x1DAC0"/>
|
||||||
|
<Limb Name="gGohmaLeftThighRootLimb" LimbType="Standard" Offset="0x1DACC"/>
|
||||||
|
<Limb Name="gGohmaLeftLegLowerRootLimb" LimbType="Standard" Offset="0x1DAD8"/>
|
||||||
|
<Limb Name="gGohmaLeftFeetRootLimb" LimbType="Standard" Offset="0x1DAE4"/>
|
||||||
|
<Limb Name="gGohmaLeftFeetBackRoot1Limb" LimbType="Standard" Offset="0x1DAF0"/>
|
||||||
|
<Limb Name="gGohmaLeftFeetBackRoot2Limb" LimbType="Standard" Offset="0x1DAFC"/>
|
||||||
|
<Limb Name="gGohmaLeftFeetBackLimb" LimbType="Standard" Offset="0x1DB08"/>
|
||||||
|
<Limb Name="gGohmaLeftFeetLimb" LimbType="Standard" Offset="0x1DB14"/>
|
||||||
|
<Limb Name="gGohmaLeftShinLimb" LimbType="Standard" Offset="0x1DB20"/>
|
||||||
|
<Limb Name="gGohmaLeftKneeRoot1Limb" LimbType="Standard" Offset="0x1DB2C"/>
|
||||||
|
<Limb Name="gGohmaLeftKneeRoot2Limb" LimbType="Standard" Offset="0x1DB38"/>
|
||||||
|
<Limb Name="gGohmaLeftKneeLimb" LimbType="Standard" Offset="0x1DB44"/>
|
||||||
|
<Limb Name="gGohmaLeftThighShellRoot1Limb" LimbType="Standard" Offset="0x1DB50"/>
|
||||||
|
<Limb Name="gGohmaLeftThighShellRoot2Limb" LimbType="Standard" Offset="0x1DB5C"/>
|
||||||
|
<Limb Name="gGohmaLeftThighShellLimb" LimbType="Standard" Offset="0x1DB68"/>
|
||||||
|
<Limb Name="gGohmaLeftThighLimb" LimbType="Standard" Offset="0x1DB74"/>
|
||||||
|
<Limb Name="gGohmaBodyShellBackRoot1Limb" LimbType="Standard" Offset="0x1DB80"/>
|
||||||
|
<Limb Name="gGohmaBodyShellBackRoot2Limb" LimbType="Standard" Offset="0x1DB8C"/>
|
||||||
|
<Limb Name="gGohmaBodyShellBackLimb" LimbType="Standard" Offset="0x1DB98"/>
|
||||||
|
|
||||||
|
<!-- Display Lists-->
|
||||||
|
<DList Name="gGohmaBodyDL" Offset="0x13A60"/>
|
||||||
|
<DList Name="gGohmaBodyShellDL" Offset="0x14298"/>
|
||||||
|
<DList Name="gGohmaEyeDL" Offset="0x14A10"/>
|
||||||
|
<DList Name="gGohmaTail4DL" Offset="0x17D80"/>
|
||||||
|
<DList Name="gGohmaTail3DL" Offset="0x17B08"/>
|
||||||
|
<DList Name="gGohmaTail2DL" Offset="0x17960"/>
|
||||||
|
<DList Name="gGohmaTail1DL" Offset="0x17768"/>
|
||||||
|
<DList Name="gGohmaRightFeetBackDL" Offset="0x15F28"/>
|
||||||
|
<DList Name="gGohmaRightFeetDL" Offset="0x15168"/>
|
||||||
|
<DList Name="gGohmaRightShinDL" Offset="0x17500"/>
|
||||||
|
<DList Name="gGohmaRightKneeDL" Offset="0x15B28"/>
|
||||||
|
<DList Name="gGohmaRightThighShellDL" Offset="0x147D0"/>
|
||||||
|
<DList Name="gGohmaRightThighDL" Offset="0x167A0"/>
|
||||||
|
<DList Name="gGohmaEyeLidBottomDL" Offset="0x16DA0"/>
|
||||||
|
<DList Name="gGohmaEyeLidTopDL" Offset="0x16AB8"/>
|
||||||
|
<DList Name="gGohmaIrisDL" Offset="0x15338"/>
|
||||||
|
<DList Name="gGohmaMandiblesBodyDL" Offset="0x16FE8"/>
|
||||||
|
<DList Name="gGohmaLeftMandibles2DL" Offset="0x13750"/>
|
||||||
|
<DList Name="gGohmaLeftMandibles1DL" Offset="0x135F0"/>
|
||||||
|
<DList Name="gGohmaRightMandibles2DL" Offset="0x13480"/>
|
||||||
|
<DList Name="gGohmaRightMandibles1DL" Offset="0x13320"/>
|
||||||
|
<DList Name="gGohmaLeftAntennaClawDL" Offset="0x18008"/>
|
||||||
|
<DList Name="gGohmaLeftAntennaShellDL" Offset="0x12AF8"/>
|
||||||
|
<DList Name="gGohmaLeftAntennaBodyDL" Offset="0x12770"/>
|
||||||
|
<DList Name="gGohmaRightAntennaClawDL" Offset="0x18290"/>
|
||||||
|
<DList Name="gGohmaRightAntennaShellDL" Offset="0x13128"/>
|
||||||
|
<DList Name="gGohmaRightAntennaBodyDL" Offset="0x12D70"/>
|
||||||
|
<DList Name="gGohmaLeftFeetBackDL" Offset="0x15D48"/>
|
||||||
|
<DList Name="gGohmaLeftFeetDL" Offset="0x14DC0"/>
|
||||||
|
<DList Name="gGohmaLeftShinDL" Offset="0x17268"/>
|
||||||
|
<DList Name="gGohmaLeftKneeDL" Offset="0x156D8"/>
|
||||||
|
<DList Name="gGohmaLeftThighShellDL" Offset="0x14640"/>
|
||||||
|
<DList Name="gGohmaLeftThighDL" Offset="0x16348"/>
|
||||||
|
<DList Name="gGohmaBodyShellBackDL" Offset="0x144B0"/>
|
||||||
|
|
||||||
<!-- Animations -->
|
<!-- Animations -->
|
||||||
<Animation Name="gGohmaAnim_000AE8" Offset="0xAE8"/> <!-- standing up, wiggle (first encounter?) -->
|
<Animation Name="gGohmaStandAnim" Offset="0xAE8"/>
|
||||||
<Animation Name="gGohmaAnim_00193C" Offset="0x193C"/> <!-- stretched, looking up (would make more sense with 0x8000 x rot?) -->
|
<Animation Name="gGohmaHangAnim" Offset="0x193C"/> <!-- hang from the ceiling -->
|
||||||
<Animation Name="gGohmaAnim_002360" Offset="0x2360"/> <!-- running -->
|
<Animation Name="gGohmaWalkAnim" Offset="0x2360"/>
|
||||||
<Animation Name="gGohmaAnim_0029F0" Offset="0x29F0"/> <!-- standing up, shaking -->
|
<Animation Name="gGohmaPrepareEggsAnim" Offset="0x29F0"/> <!-- hanging, shaking -->
|
||||||
<Animation Name="gGohmaAnim_004318" Offset="0x4318"/> <!-- attack (or land?) -->
|
<Animation Name="gGohmaAttackAnim" Offset="0x4318"/>
|
||||||
<Animation Name="gGohmaAnim_004A20" Offset="0x4A20"/> <!-- briefly look up (rotX 0x8000?) -->
|
<Animation Name="gGohmaRestAfterAttackAnim" Offset="0x4A20"/>
|
||||||
<Animation Name="gGohmaAnim_005330" Offset="0x5330"/> <!-- get up and close eye -->
|
<Animation Name="gGohmaRecoverAfterAttackAnim" Offset="0x5330"/>
|
||||||
<Animation Name="gGohmaAnim_0058C0" Offset="0x58C0"/> <!-- lying on ground, shook (when hit?) -->
|
<Animation Name="gGohmaCrashAnim" Offset="0x58C0"/> <!-- when struck down from the ceiling -->
|
||||||
<Animation Name="gGohmaAnim_005F28" Offset="0x5F28"/> <!-- briefly crouch, eye halfclosed -->
|
<Animation Name="gGohmaLandAnim" Offset="0x5F28"/> <!-- when jumping down from the ceiling -->
|
||||||
<Animation Name="gGohmaAnim_0066DC" Offset="0x66DC"/> <!-- running, head facing down -->
|
<Animation Name="gGohmaClimbAnim" Offset="0x66DC"/> <!-- when climbing a wall -->
|
||||||
<Animation Name="gGohmaAnim_006E60" Offset="0x6E60"/> <!-- lying on ground, shook, rolling eye (when hit?) -->
|
<Animation Name="gGohmaDamageAnim" Offset="0x6E60"/>
|
||||||
<Animation Name="gGohmaAnim_00B2FC" Offset="0xB2FC"/> <!-- get up, shake, fall, get up, fall (death animation?) -->
|
<Animation Name="gGohmaDeathAnim" Offset="0xB2FC"/>
|
||||||
<Animation Name="gGohmaAnim_00C468" Offset="0xC468"/> <!-- open eye, stretch/get up, blink, "attack posture" (first encounter?) -->
|
<Animation Name="gGohmaPrepareAttackAnim" Offset="0xC468"/>
|
||||||
<Animation Name="gGohmaAnim_00CCD8" Offset="0xCCD8"/> <!-- on ground, eye and limbs shaking a bit -->
|
<Animation Name="gGohmaStunnedAnim" Offset="0xCCD8"/>
|
||||||
<Animation Name="gGohmaAnim_00F70C" Offset="0xF70C"/> <!-- blink, get up, take "attack posture" -->
|
<Animation Name="gGohmaInitialLandingAnim" Offset="0xF70C"/> <!-- when landing in the pre-fight cutscene -->
|
||||||
<Animation Name="gGohmaAnim_010918" Offset="0x10918"/> <!-- standing up, roll eye -->
|
<Animation Name="gGohmaEyeRollAnim" Offset="0x10918"/>
|
||||||
<Animation Name="gGohmaAnim_0113BC" Offset="0x113BC"/> <!-- eye half closed, standing up, kind of briefly crouch and agitate limbs -->
|
<Animation Name="gGohmaLayEggsAnim" Offset="0x113BC"/>
|
||||||
<Animation Name="gGohmaAnim_012678" Offset="0x12678"/> <!-- eye half closed, one step ahead, one step back (menacing) -->
|
<Animation Name="gGohmaIdleCrouchedAnim" Offset="0x12678"/>
|
||||||
<Animation Name="gGohmaAnim_01EB4C" Offset="0x1EB4C"/> <!-- eye half closed, walk (cautiously?) -->
|
<Animation Name="gGohmaWalkCrouchedAnim" Offset="0x1EB4C"/>
|
||||||
|
|
||||||
<!-- Unused animations -->
|
<!-- Unused animations -->
|
||||||
<Animation Name="gGohmaAnim_0039D0" Offset="0x39D0"/> <!-- unused attack animation -->
|
<Animation Name="gGohmaViolentAttackAnim" Offset="0x39D0"/>
|
||||||
|
|
||||||
<!-- Limb textures -->
|
<!-- Limb textures -->
|
||||||
<Texture Name="gGohmaTex_0183A8" OutName="gohma_tex_0183A8" Format="rgba16" Width="16" Height="16" Offset="0x183A8"/>
|
<Texture Name="gGohmaBodyTex" OutName="gohma_body" Format="rgba16" Width="16" Height="16" Offset="0x183A8"/>
|
||||||
<Texture Name="gGohmaTex_0185A8" OutName="gohma_tex_0185A8" Format="rgba16" Width="16" Height="16" Offset="0x185A8"/>
|
<Texture Name="gGohmaShellUndersideTex" OutName="gohma_shell_underside" Format="rgba16" Width="16" Height="16" Offset="0x185A8"/>
|
||||||
<Texture Name="gGohmaTex_0187A8" OutName="gohma_tex_0187A8" Format="rgba16" Width="16" Height="16" Offset="0x187A8"/>
|
<Texture Name="gGohmaDarkShellTex" OutName="gohma_dark_shell" Format="rgba16" Width="16" Height="16" Offset="0x187A8"/>
|
||||||
<Texture Name="gGohmaTex_0189A8" OutName="gohma_tex_0189A8" Format="rgba16" Width="32" Height="32" Offset="0x189A8"/>
|
<Texture Name="gGohmaShellTex" OutName="gohma_shell" Format="rgba16" Width="32" Height="32" Offset="0x189A8"/>
|
||||||
<Texture Name="gGohmaTex_0191A8" OutName="gohma_tex_0191A8" Format="rgba16" Width="16" Height="16" Offset="0x191A8"/>
|
<Texture Name="gGohmaEyeTex" OutName="gohma_eye" Format="rgba16" Width="16" Height="16" Offset="0x191A8"/>
|
||||||
<Texture Name="gGohmaTex_0193A8" OutName="gohma_tex_0193A8" Format="rgba16" Width="32" Height="32" Offset="0x193A8"/>
|
<Texture Name="gGohmaIrisTex" OutName="gohma_iris" Format="rgba16" Width="32" Height="32" Offset="0x193A8"/>
|
||||||
|
|
||||||
<!-- Boss title card -->
|
<!-- Boss title card -->
|
||||||
<Texture Name="gGohmaTitleCardTex" OutName="gohma_title_card" Format="i8" Width="128" Height="120" Offset="0x19BA8"/>
|
<Texture Name="gGohmaTitleCardTex" OutName="gohma_title_card" Format="i8" Width="128" Height="120" Offset="0x19BA8"/>
|
||||||
|
@ -41,5 +164,6 @@
|
||||||
<!-- Door -->
|
<!-- Door -->
|
||||||
<DList Name="gGohmaDoorDL" Offset="0x1EC20"/>
|
<DList Name="gGohmaDoorDL" Offset="0x1EC20"/>
|
||||||
<Collision Name="gGohmaDoorCol" Offset="0x1EDD0"/>
|
<Collision Name="gGohmaDoorCol" Offset="0x1EDD0"/>
|
||||||
|
<Texture Name="gGohmaDoorTex" OutName="door" Format="rgba16" Width="32" Height="32" Offset="0x1EE00"/>
|
||||||
</File>
|
</File>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
|
@ -72,7 +72,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 5, { { 0, 0, 1200 }, 20 }, 100 },
|
{ BOSSGOMA_LIMB_EYE, { { 0, 0, 1200 }, 20 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -83,7 +83,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 11, { { 0, 0, 0 }, 20 }, 100 },
|
{ BOSSGOMA_LIMB_TAIL4, { { 0, 0, 0 }, 20 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -94,7 +94,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 12, { { 0, 0, 0 }, 15 }, 100 },
|
{ BOSSGOMA_LIMB_TAIL3, { { 0, 0, 0 }, 15 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 13, { { 0, 0, 0 }, 12 }, 100 },
|
{ BOSSGOMA_LIMB_TAIL2, { { 0, 0, 0 }, 12 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 14, { { 0, 0, 0 }, 25 }, 100 },
|
{ BOSSGOMA_LIMB_TAIL1, { { 0, 0, 0 }, 25 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -127,7 +127,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 22, { { 0, 0, 0 }, 30 }, 100 },
|
{ BOSSGOMA_LIMB_R_FEET, { { 0, 0, 0 }, 30 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -138,7 +138,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 23, { { 0, 0, 0 }, 15 }, 100 },
|
{ BOSSGOMA_LIMB_R_SHIN, { { 0, 0, 0 }, 15 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -149,7 +149,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 29, { { 0, 0, 0 }, 15 }, 100 },
|
{ BOSSGOMA_LIMB_R_THIGH_SHELL, { { 0, 0, 0 }, 15 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -160,7 +160,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 57, { { 0, 0, 0 }, 20 }, 100 },
|
{ BOSSGOMA_LIMB_L_ANTENNA_CLAW, { { 0, 0, 0 }, 20 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -171,7 +171,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 64, { { 0, 0, 0 }, 20 }, 100 },
|
{ BOSSGOMA_LIMB_R_ANTENNA_CLAW, { { 0, 0, 0 }, 20 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -182,7 +182,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 74, { { 0, 0, 0 }, 30 }, 100 },
|
{ BOSSGOMA_LIMB_L_FEET, { { 0, 0, 0 }, 30 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -193,7 +193,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 75, { { 0, 0, 0 }, 15 }, 100 },
|
{ BOSSGOMA_LIMB_L_SHIN, { { 0, 0, 0 }, 15 }, 100 },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
@ -204,7 +204,7 @@ static ColliderJntSphElementInit sColliderJntSphElementInit[13] = {
|
||||||
BUMP_ON,
|
BUMP_ON,
|
||||||
OCELEM_ON,
|
OCELEM_ON,
|
||||||
},
|
},
|
||||||
{ 81, { { 0, 0, 0 }, 15 }, 100 },
|
{ BOSSGOMA_LIMB_L_THIGH_SHELL, { { 0, 0, 0 }, 15 }, 100 },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -322,13 +322,13 @@ void BossGoma_ClearPixels32x32Rgba16(s16* rgba16image, u8* clearPixelTable, s16
|
||||||
* Clear pixels from Gohma's textures
|
* Clear pixels from Gohma's textures
|
||||||
*/
|
*/
|
||||||
void BossGoma_ClearPixels(u8* clearPixelTable, s16 i) {
|
void BossGoma_ClearPixels(u8* clearPixelTable, s16 i) {
|
||||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0183A8), clearPixelTable, i);
|
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaBodyTex), clearPixelTable, i);
|
||||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0185A8), clearPixelTable, i);
|
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaShellUndersideTex), clearPixelTable, i);
|
||||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0187A8), clearPixelTable, i);
|
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaDarkShellTex), clearPixelTable, i);
|
||||||
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0191A8), clearPixelTable, i);
|
BossGoma_ClearPixels16x16Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaEyeTex), clearPixelTable, i);
|
||||||
|
|
||||||
BossGoma_ClearPixels32x32Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0189A8), clearPixelTable, i);
|
BossGoma_ClearPixels32x32Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaShellTex), clearPixelTable, i);
|
||||||
BossGoma_ClearPixels32x32Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaTex_0193A8), clearPixelTable, i);
|
BossGoma_ClearPixels32x32Rgba16(SEGMENTED_TO_VIRTUAL(gGohmaIrisTex), clearPixelTable, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static InitChainEntry sInitChain[] = {
|
static InitChainEntry sInitChain[] = {
|
||||||
|
@ -343,8 +343,8 @@ void BossGoma_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
Actor_ProcessInitChain(&this->actor, sInitChain);
|
Actor_ProcessInitChain(&this->actor, sInitChain);
|
||||||
ActorShape_Init(&this->actor.shape, 4000.0f, ActorShadow_DrawCircle, 150.0f);
|
ActorShape_Init(&this->actor.shape, 4000.0f, ActorShadow_DrawCircle, 150.0f);
|
||||||
SkelAnime_Init(globalCtx, &this->skelanime, &gGohmaSkel, &gGohmaAnim_012678, NULL, NULL, 0);
|
SkelAnime_Init(globalCtx, &this->skelanime, &gGohmaSkel, &gGohmaIdleCrouchedAnim, NULL, NULL, 0);
|
||||||
Animation_PlayLoop(&this->skelanime, &gGohmaAnim_012678);
|
Animation_PlayLoop(&this->skelanime, &gGohmaIdleCrouchedAnim);
|
||||||
this->actor.shape.rot.x = -0x8000; // upside-down
|
this->actor.shape.rot.x = -0x8000; // upside-down
|
||||||
this->eyeIrisScaleX = 1.0f;
|
this->eyeIrisScaleX = 1.0f;
|
||||||
this->eyeIrisScaleY = 1.0f;
|
this->eyeIrisScaleY = 1.0f;
|
||||||
|
@ -395,7 +395,7 @@ void BossGoma_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
* When Gohma is hit and its health drops to 0
|
* When Gohma is hit and its health drops to 0
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupDefeated(BossGoma* this, GlobalContext* globalCtx) {
|
void BossGoma_SetupDefeated(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00B2FC, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_00B2FC),
|
Animation_Change(&this->skelanime, &gGohmaDeathAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaDeathAnim),
|
||||||
ANIMMODE_ONCE, -2.0f);
|
ANIMMODE_ONCE, -2.0f);
|
||||||
this->actionFunc = BossGoma_Defeated;
|
this->actionFunc = BossGoma_Defeated;
|
||||||
this->disableGameplayLogic = true;
|
this->disableGameplayLogic = true;
|
||||||
|
@ -414,9 +414,9 @@ void BossGoma_SetupDefeated(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
* Initial action setup, with Gohma waiting on the ceiling for the fight to start.
|
* Initial action setup, with Gohma waiting on the ceiling for the fight to start.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupEncounter(BossGoma* this, GlobalContext* globalCtx) {
|
void BossGoma_SetupEncounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
f32 lastFrame = Animation_GetLastFrame(&gGohmaAnim_002360);
|
f32 lastFrame = Animation_GetLastFrame(&gGohmaWalkAnim);
|
||||||
|
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_002360, 1.0f, 0.0f, lastFrame, ANIMMODE_LOOP, -15.0f);
|
Animation_Change(&this->skelanime, &gGohmaWalkAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_LOOP, -15.0f);
|
||||||
this->actionFunc = BossGoma_Encounter;
|
this->actionFunc = BossGoma_Encounter;
|
||||||
this->actionState = 0;
|
this->actionState = 0;
|
||||||
this->disableGameplayLogic = true;
|
this->disableGameplayLogic = true;
|
||||||
|
@ -428,10 +428,10 @@ void BossGoma_SetupEncounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
* On the floor and not doing anything for 20-30 frames, before going back to BossGoma_FloorMain
|
* On the floor and not doing anything for 20-30 frames, before going back to BossGoma_FloorMain
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorIdle(BossGoma* this) {
|
void BossGoma_SetupFloorIdle(BossGoma* this) {
|
||||||
f32 lastFrame = Animation_GetLastFrame(&gGohmaAnim_012678);
|
f32 lastFrame = Animation_GetLastFrame(&gGohmaIdleCrouchedAnim);
|
||||||
|
|
||||||
this->framesUntilNextAction = Rand_S16Offset(20, 30);
|
this->framesUntilNextAction = Rand_S16Offset(20, 30);
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_012678, 1.0f, 0.0f, lastFrame, ANIMMODE_LOOP, -5.0f);
|
Animation_Change(&this->skelanime, &gGohmaIdleCrouchedAnim, 1.0f, 0.0f, lastFrame, ANIMMODE_LOOP, -5.0f);
|
||||||
this->actionFunc = BossGoma_FloorIdle;
|
this->actionFunc = BossGoma_FloorIdle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +440,7 @@ void BossGoma_SetupFloorIdle(BossGoma* this) {
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupCeilingIdle(BossGoma* this) {
|
void BossGoma_SetupCeilingIdle(BossGoma* this) {
|
||||||
this->framesUntilNextAction = Rand_S16Offset(20, 30);
|
this->framesUntilNextAction = Rand_S16Offset(20, 30);
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00193C, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_00193C),
|
Animation_Change(&this->skelanime, &gGohmaHangAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaHangAnim),
|
||||||
ANIMMODE_LOOP, -5.0f);
|
ANIMMODE_LOOP, -5.0f);
|
||||||
this->actionFunc = BossGoma_CeilingIdle;
|
this->actionFunc = BossGoma_CeilingIdle;
|
||||||
}
|
}
|
||||||
|
@ -449,7 +449,7 @@ void BossGoma_SetupCeilingIdle(BossGoma* this) {
|
||||||
* When the player killed all children gohmas
|
* When the player killed all children gohmas
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFallJump(BossGoma* this) {
|
void BossGoma_SetupFallJump(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_005F28, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -5.0f);
|
Animation_Change(&this->skelanime, &gGohmaLandAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -5.0f);
|
||||||
this->actionFunc = BossGoma_FallJump;
|
this->actionFunc = BossGoma_FallJump;
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
this->actor.velocity.y = 0.0f;
|
this->actor.velocity.y = 0.0f;
|
||||||
|
@ -460,7 +460,7 @@ void BossGoma_SetupFallJump(BossGoma* this) {
|
||||||
* When the player successfully hits Gohma on the ceiling
|
* When the player successfully hits Gohma on the ceiling
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFallStruckDown(BossGoma* this) {
|
void BossGoma_SetupFallStruckDown(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_0058C0, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -5.0f);
|
Animation_Change(&this->skelanime, &gGohmaCrashAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -5.0f);
|
||||||
this->actionFunc = BossGoma_FallStruckDown;
|
this->actionFunc = BossGoma_FallStruckDown;
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
this->actor.velocity.y = 0.0f;
|
this->actor.velocity.y = 0.0f;
|
||||||
|
@ -468,21 +468,21 @@ void BossGoma_SetupFallStruckDown(BossGoma* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BossGoma_SetupCeilingSpawnGohmas(BossGoma* this) {
|
void BossGoma_SetupCeilingSpawnGohmas(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_0113BC, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_0113BC),
|
Animation_Change(&this->skelanime, &gGohmaLayEggsAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaLayEggsAnim),
|
||||||
ANIMMODE_LOOP, -15.0f);
|
ANIMMODE_LOOP, -15.0f);
|
||||||
this->actionFunc = BossGoma_CeilingSpawnGohmas;
|
this->actionFunc = BossGoma_CeilingSpawnGohmas;
|
||||||
this->spawnGohmasActionTimer = 0;
|
this->spawnGohmasActionTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BossGoma_SetupCeilingPrepareSpawnGohmas(BossGoma* this) {
|
void BossGoma_SetupCeilingPrepareSpawnGohmas(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_0029F0, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_0029F0),
|
Animation_Change(&this->skelanime, &gGohmaPrepareEggsAnim, 1.0f, 0.0f,
|
||||||
ANIMMODE_LOOP, -10.0f);
|
Animation_GetLastFrame(&gGohmaPrepareEggsAnim), ANIMMODE_LOOP, -10.0f);
|
||||||
this->actionFunc = BossGoma_CeilingPrepareSpawnGohmas;
|
this->actionFunc = BossGoma_CeilingPrepareSpawnGohmas;
|
||||||
this->framesUntilNextAction = 70;
|
this->framesUntilNextAction = 70;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BossGoma_SetupWallClimb(BossGoma* this) {
|
void BossGoma_SetupWallClimb(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_0066DC, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_0066DC),
|
Animation_Change(&this->skelanime, &gGohmaClimbAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaClimbAnim),
|
||||||
ANIMMODE_LOOP, -10.0f);
|
ANIMMODE_LOOP, -10.0f);
|
||||||
this->actionFunc = BossGoma_WallClimb;
|
this->actionFunc = BossGoma_WallClimb;
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
|
@ -494,7 +494,7 @@ void BossGoma_SetupWallClimb(BossGoma* this) {
|
||||||
* Gohma either reached the ceiling after climbing a wall, or is waiting for the player to kill the (children) Gohmas.
|
* Gohma either reached the ceiling after climbing a wall, or is waiting for the player to kill the (children) Gohmas.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupCeilingMoveToCenter(BossGoma* this) {
|
void BossGoma_SetupCeilingMoveToCenter(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_002360, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_002360),
|
Animation_Change(&this->skelanime, &gGohmaWalkAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaWalkAnim),
|
||||||
ANIMMODE_LOOP, -5.0f);
|
ANIMMODE_LOOP, -5.0f);
|
||||||
this->actionFunc = BossGoma_CeilingMoveToCenter;
|
this->actionFunc = BossGoma_CeilingMoveToCenter;
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
|
@ -507,8 +507,8 @@ void BossGoma_SetupCeilingMoveToCenter(BossGoma* this) {
|
||||||
* Root action when on the floor, leads to attacking or climbing.
|
* Root action when on the floor, leads to attacking or climbing.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorMain(BossGoma* this) {
|
void BossGoma_SetupFloorMain(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_01EB4C, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_01EB4C),
|
Animation_Change(&this->skelanime, &gGohmaWalkCrouchedAnim, 1.0f, 0.0f,
|
||||||
ANIMMODE_LOOP, -5.0f);
|
Animation_GetLastFrame(&gGohmaWalkCrouchedAnim), ANIMMODE_LOOP, -5.0f);
|
||||||
this->actionFunc = BossGoma_FloorMain;
|
this->actionFunc = BossGoma_FloorMain;
|
||||||
this->framesUntilNextAction = Rand_S16Offset(70, 110);
|
this->framesUntilNextAction = Rand_S16Offset(70, 110);
|
||||||
}
|
}
|
||||||
|
@ -517,28 +517,28 @@ void BossGoma_SetupFloorMain(BossGoma* this) {
|
||||||
* Gohma jumped to the floor on its own, after the player has killed its children Gohmas.
|
* Gohma jumped to the floor on its own, after the player has killed its children Gohmas.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorLand(BossGoma* this) {
|
void BossGoma_SetupFloorLand(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_005F28, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_005F28),
|
Animation_Change(&this->skelanime, &gGohmaLandAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaLandAnim),
|
||||||
ANIMMODE_ONCE, -2.0f);
|
ANIMMODE_ONCE, -2.0f);
|
||||||
this->actionFunc = BossGoma_FloorLand;
|
this->actionFunc = BossGoma_FloorLand;
|
||||||
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaAnim_005F28);
|
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaLandAnim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gohma was shot by the player down from the ceiling.
|
* Gohma was shot by the player down from the ceiling.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorLandStruckDown(BossGoma* this) {
|
void BossGoma_SetupFloorLandStruckDown(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_0058C0, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_0058C0),
|
Animation_Change(&this->skelanime, &gGohmaCrashAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaCrashAnim),
|
||||||
ANIMMODE_ONCE, -2.0f);
|
ANIMMODE_ONCE, -2.0f);
|
||||||
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaAnim_0058C0);
|
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaCrashAnim);
|
||||||
this->actionFunc = BossGoma_FloorLandStruckDown;
|
this->actionFunc = BossGoma_FloorLandStruckDown;
|
||||||
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaAnim_0058C0);
|
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaCrashAnim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gohma is vulnerable, from being struck down from the ceiling or on the ground.
|
* Gohma is vulnerable, from being struck down from the ceiling or on the ground.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorStunned(BossGoma* this) {
|
void BossGoma_SetupFloorStunned(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00CCD8, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_00CCD8),
|
Animation_Change(&this->skelanime, &gGohmaStunnedAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaStunnedAnim),
|
||||||
ANIMMODE_LOOP, -2.0f);
|
ANIMMODE_LOOP, -2.0f);
|
||||||
this->actionFunc = BossGoma_FloorStunned;
|
this->actionFunc = BossGoma_FloorStunned;
|
||||||
}
|
}
|
||||||
|
@ -547,8 +547,8 @@ void BossGoma_SetupFloorStunned(BossGoma* this) {
|
||||||
* Take an attack posture, when the player is close enough.
|
* Take an attack posture, when the player is close enough.
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorAttackPosture(BossGoma* this) {
|
void BossGoma_SetupFloorAttackPosture(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00C468, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_00C468),
|
Animation_Change(&this->skelanime, &gGohmaPrepareAttackAnim, 1.0f, 0.0f,
|
||||||
ANIMMODE_ONCE, -10.0f);
|
Animation_GetLastFrame(&gGohmaPrepareAttackAnim), ANIMMODE_ONCE, -10.0f);
|
||||||
this->actionFunc = BossGoma_FloorAttackPosture;
|
this->actionFunc = BossGoma_FloorAttackPosture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,14 +556,14 @@ void BossGoma_SetupFloorAttackPosture(BossGoma* this) {
|
||||||
* Leads to BossGoma_FloorAttack after 1 frame
|
* Leads to BossGoma_FloorAttack after 1 frame
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorPrepareAttack(BossGoma* this) {
|
void BossGoma_SetupFloorPrepareAttack(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_000AE8, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_000AE8),
|
Animation_Change(&this->skelanime, &gGohmaStandAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaStandAnim),
|
||||||
ANIMMODE_LOOP, -10.0f);
|
ANIMMODE_LOOP, -10.0f);
|
||||||
this->actionFunc = BossGoma_FloorPrepareAttack;
|
this->actionFunc = BossGoma_FloorPrepareAttack;
|
||||||
this->framesUntilNextAction = 0;
|
this->framesUntilNextAction = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BossGoma_SetupFloorAttack(BossGoma* this) {
|
void BossGoma_SetupFloorAttack(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_004318, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_004318),
|
Animation_Change(&this->skelanime, &gGohmaAttackAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAttackAnim),
|
||||||
ANIMMODE_ONCE, -10.0f);
|
ANIMMODE_ONCE, -10.0f);
|
||||||
this->actionFunc = BossGoma_FloorAttack;
|
this->actionFunc = BossGoma_FloorAttack;
|
||||||
this->actionState = 0;
|
this->actionState = 0;
|
||||||
|
@ -576,7 +576,7 @@ void BossGoma_SetupFloorAttack(BossGoma* this) {
|
||||||
* as the stun duration
|
* as the stun duration
|
||||||
*/
|
*/
|
||||||
void BossGoma_SetupFloorDamaged(BossGoma* this) {
|
void BossGoma_SetupFloorDamaged(BossGoma* this) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_006E60, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_006E60),
|
Animation_Change(&this->skelanime, &gGohmaDamageAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaDamageAnim),
|
||||||
ANIMMODE_ONCE, -2.0f);
|
ANIMMODE_ONCE, -2.0f);
|
||||||
this->actionFunc = BossGoma_FloorDamaged;
|
this->actionFunc = BossGoma_FloorDamaged;
|
||||||
}
|
}
|
||||||
|
@ -633,9 +633,9 @@ void BossGoma_SetupEncounterState4(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
this->subCameraId = Gameplay_CreateSubCamera(globalCtx);
|
this->subCameraId = Gameplay_CreateSubCamera(globalCtx);
|
||||||
Gameplay_ChangeCameraStatus(globalCtx, 0, 3);
|
Gameplay_ChangeCameraStatus(globalCtx, 0, 3);
|
||||||
Gameplay_ChangeCameraStatus(globalCtx, this->subCameraId, 7);
|
Gameplay_ChangeCameraStatus(globalCtx, this->subCameraId, 7);
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_010918, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaAnim_010918),
|
Animation_Change(&this->skelanime, &gGohmaEyeRollAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaEyeRollAnim),
|
||||||
ANIMMODE_ONCE, 0.0f);
|
ANIMMODE_ONCE, 0.0f);
|
||||||
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaAnim_010918);
|
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaEyeRollAnim);
|
||||||
|
|
||||||
// room center (todo: defines for hardcoded positions relative to room center)
|
// room center (todo: defines for hardcoded positions relative to room center)
|
||||||
this->actor.world.pos.x = -150.0f;
|
this->actor.world.pos.x = -150.0f;
|
||||||
|
@ -821,8 +821,8 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
|
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
|
||||||
this->actionState = 5;
|
this->actionState = 5;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_002360, 2.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaWalkAnim, 2.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_002360), ANIMMODE_LOOP, -5.0f);
|
Animation_GetLastFrame(&gGohmaWalkAnim), ANIMMODE_LOOP, -5.0f);
|
||||||
this->framesUntilNextAction = 30;
|
this->framesUntilNextAction = 30;
|
||||||
this->subCameraFollowSpeed = 0.0f;
|
this->subCameraFollowSpeed = 0.0f;
|
||||||
}
|
}
|
||||||
|
@ -851,8 +851,8 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->framesUntilNextAction == 0) {
|
if (this->framesUntilNextAction == 0) {
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00193C, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaHangAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gGohmaHangAnim),
|
||||||
Animation_GetLastFrame(&gGohmaAnim_00193C), ANIMMODE_LOOP, -5.0f);
|
ANIMMODE_LOOP, -5.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->framesUntilNextAction == 0) {
|
if (this->framesUntilNextAction == 0) {
|
||||||
|
@ -860,8 +860,8 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
this->actor.velocity.y = 0.0f;
|
this->actor.velocity.y = 0.0f;
|
||||||
this->actor.gravity = -2.0f;
|
this->actor.gravity = -2.0f;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00F70C, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaInitialLandingAnim, 1.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_00F70C), ANIMMODE_ONCE, -5.0f);
|
Animation_GetLastFrame(&gGohmaInitialLandingAnim), ANIMMODE_ONCE, -5.0f);
|
||||||
player->actor.world.pos.x = 0.0f;
|
player->actor.world.pos.x = 0.0f;
|
||||||
player->actor.world.pos.z = -30.0f;
|
player->actor.world.pos.z = -30.0f;
|
||||||
}
|
}
|
||||||
|
@ -884,9 +884,9 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
if (this->actor.bgCheckFlags & 1) {
|
if (this->actor.bgCheckFlags & 1) {
|
||||||
this->actionState = 130;
|
this->actionState = 130;
|
||||||
this->actor.velocity.y = 0.0f;
|
this->actor.velocity.y = 0.0f;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_00F70C, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaInitialLandingAnim, 1.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_00F70C), ANIMMODE_ONCE, -2.0f);
|
Animation_GetLastFrame(&gGohmaInitialLandingAnim), ANIMMODE_ONCE, -2.0f);
|
||||||
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaAnim_00F70C);
|
this->currentAnimFrameCount = Animation_GetLastFrame(&gGohmaInitialLandingAnim);
|
||||||
BossGoma_PlayEffectsAndSfx(this, globalCtx, 0, 5);
|
BossGoma_PlayEffectsAndSfx(this, globalCtx, 0, 5);
|
||||||
this->framesUntilNextAction = 15;
|
this->framesUntilNextAction = 15;
|
||||||
func_800A9F6C(0.0f, 0xC8, 0x14, 0x14);
|
func_800A9F6C(0.0f, 0xC8, 0x14, 0x14);
|
||||||
|
@ -927,8 +927,8 @@ void BossGoma_Encounter(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
|
if (Animation_OnFrame(&this->skelanime, this->currentAnimFrameCount)) {
|
||||||
this->actionState = 140;
|
this->actionState = 140;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_000AE8, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaStandAnim, 1.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_000AE8), ANIMMODE_LOOP, -10.0f);
|
Animation_GetLastFrame(&gGohmaStandAnim), ANIMMODE_LOOP, -10.0f);
|
||||||
this->framesUntilNextAction = 20;
|
this->framesUntilNextAction = 20;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1025,7 +1025,7 @@ void BossGoma_Defeated(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
//! @bug this 0-indexes into this->defeatedLimbPositions which is initialized with
|
//! @bug this 0-indexes into this->defeatedLimbPositions which is initialized with
|
||||||
// this->defeatedLimbPositions[limb], but limb is 1-indexed in skelanime callbacks, this means effects
|
// this->defeatedLimbPositions[limb], but limb is 1-indexed in skelanime callbacks, this means effects
|
||||||
// should spawn at this->defeatedLimbPositions[0] too, which is uninitialized, so map origin?
|
// should spawn at this->defeatedLimbPositions[0] too, which is uninitialized, so map origin?
|
||||||
j = (s16)(Rand_ZeroOne() * 85);
|
j = (s16)(Rand_ZeroOne() * (BOSSGOMA_LIMB_MAX - 1));
|
||||||
if (this->defeatedLimbPositions[j].y < 10000.0f) {
|
if (this->defeatedLimbPositions[j].y < 10000.0f) {
|
||||||
pos.x = Rand_CenteredFloat(20.0f) + this->defeatedLimbPositions[j].x;
|
pos.x = Rand_CenteredFloat(20.0f) + this->defeatedLimbPositions[j].x;
|
||||||
pos.y = Rand_CenteredFloat(10.0f) + this->defeatedLimbPositions[j].y;
|
pos.y = Rand_CenteredFloat(10.0f) + this->defeatedLimbPositions[j].y;
|
||||||
|
@ -1036,7 +1036,7 @@ void BossGoma_Defeated(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
for (i = 0; i < 15; i++) {
|
for (i = 0; i < 15; i++) {
|
||||||
//! @bug same as above
|
//! @bug same as above
|
||||||
j = (s16)(Rand_ZeroOne() * 85);
|
j = (s16)(Rand_ZeroOne() * (BOSSGOMA_LIMB_MAX - 1));
|
||||||
if (this->defeatedLimbPositions[j].y < 10000.0f) {
|
if (this->defeatedLimbPositions[j].y < 10000.0f) {
|
||||||
pos.x = Rand_CenteredFloat(20.0f) + this->defeatedLimbPositions[j].x;
|
pos.x = Rand_CenteredFloat(20.0f) + this->defeatedLimbPositions[j].x;
|
||||||
pos.y = Rand_CenteredFloat(10.0f) + this->defeatedLimbPositions[j].y;
|
pos.y = Rand_CenteredFloat(10.0f) + this->defeatedLimbPositions[j].y;
|
||||||
|
@ -1259,7 +1259,7 @@ void BossGoma_FloorAttackPosture(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
Math_ApproachS(&this->actor.world.rot.y, Actor_WorldYawTowardActor(&this->actor, &PLAYER->actor), 3, 0xBB8);
|
Math_ApproachS(&this->actor.world.rot.y, Actor_WorldYawTowardActor(&this->actor, &PLAYER->actor), 3, 0xBB8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaAnim_00C468))) {
|
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaPrepareAttackAnim))) {
|
||||||
if (this->actor.xzDistToPlayer < 250.0f) {
|
if (this->actor.xzDistToPlayer < 250.0f) {
|
||||||
BossGoma_SetupFloorPrepareAttack(this);
|
BossGoma_SetupFloorPrepareAttack(this);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1309,10 +1309,10 @@ void BossGoma_FloorAttack(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
func_80033E88(&this->actor, globalCtx, 5, 15);
|
func_80033E88(&this->actor, globalCtx, 5, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaAnim_004318))) {
|
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaAttackAnim))) {
|
||||||
this->actionState = 1;
|
this->actionState = 1;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_004A20, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaRestAfterAttackAnim, 1.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_004A20), ANIMMODE_LOOP, -1.0f);
|
Animation_GetLastFrame(&gGohmaRestAfterAttackAnim), ANIMMODE_LOOP, -1.0f);
|
||||||
|
|
||||||
if (this->framesUntilNextAction == 0) {
|
if (this->framesUntilNextAction == 0) {
|
||||||
this->timer = (s16)(Rand_ZeroOne() * 30.0f) + 30;
|
this->timer = (s16)(Rand_ZeroOne() * 30.0f) + 30;
|
||||||
|
@ -1327,13 +1327,13 @@ void BossGoma_FloorAttack(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
if (this->timer == 0) {
|
if (this->timer == 0) {
|
||||||
this->actionState = 2;
|
this->actionState = 2;
|
||||||
Animation_Change(&this->skelanime, &gGohmaAnim_005330, 1.0f, 0.0f,
|
Animation_Change(&this->skelanime, &gGohmaRecoverAfterAttackAnim, 1.0f, 0.0f,
|
||||||
Animation_GetLastFrame(&gGohmaAnim_005330), ANIMMODE_ONCE, -5.0f);
|
Animation_GetLastFrame(&gGohmaRecoverAfterAttackAnim), ANIMMODE_ONCE, -5.0f);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaAnim_005330))) {
|
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaRecoverAfterAttackAnim))) {
|
||||||
BossGoma_SetupFloorIdle(this);
|
BossGoma_SetupFloorIdle(this);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1349,7 +1349,7 @@ void BossGoma_FloorAttack(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
void BossGoma_FloorDamaged(BossGoma* this, GlobalContext* globalCtx) {
|
void BossGoma_FloorDamaged(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
SkelAnime_Update(&this->skelanime);
|
SkelAnime_Update(&this->skelanime);
|
||||||
|
|
||||||
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaAnim_006E60))) {
|
if (Animation_OnFrame(&this->skelanime, Animation_GetLastFrame(&gGohmaDamageAnim))) {
|
||||||
BossGoma_SetupFloorStunned(this);
|
BossGoma_SetupFloorStunned(this);
|
||||||
this->patienceTimer = 0;
|
this->patienceTimer = 0;
|
||||||
}
|
}
|
||||||
|
@ -1468,19 +1468,19 @@ void BossGoma_CeilingSpawnGohmas(BossGoma* this, GlobalContext* globalCtx) {
|
||||||
|
|
||||||
switch (this->spawnGohmasActionTimer) {
|
switch (this->spawnGohmasActionTimer) {
|
||||||
case 24:
|
case 24:
|
||||||
// limb 14, the tail limb closest to the body
|
// BOSSGOMA_LIMB_TAIL1, the tail limb closest to the body
|
||||||
this->tailLimbsScaleTimers[3] = 10;
|
this->tailLimbsScaleTimers[3] = 10;
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
// limb 13
|
// BOSSGOMA_LIMB_TAIL2
|
||||||
this->tailLimbsScaleTimers[2] = 10;
|
this->tailLimbsScaleTimers[2] = 10;
|
||||||
break;
|
break;
|
||||||
case 40:
|
case 40:
|
||||||
// limb 12
|
// BOSSGOMA_LIMB_TAIL3
|
||||||
this->tailLimbsScaleTimers[1] = 10;
|
this->tailLimbsScaleTimers[1] = 10;
|
||||||
break;
|
break;
|
||||||
case 48:
|
case 48:
|
||||||
// limb 11, the furthest from the body
|
// BOSSGOMA_LIMB_TAIL4, the furthest from the body
|
||||||
this->tailLimbsScaleTimers[0] = 10;
|
this->tailLimbsScaleTimers[0] = 10;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1958,7 +1958,7 @@ s32 BossGoma_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (limbIndex) {
|
switch (limbIndex) {
|
||||||
case 5: // eye (lens)
|
case BOSSGOMA_LIMB_EYE:
|
||||||
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
|
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
|
||||||
*dList = NULL;
|
*dList = NULL;
|
||||||
} else if (this->invincibilityFrames != 0) {
|
} else if (this->invincibilityFrames != 0) {
|
||||||
|
@ -1970,20 +1970,20 @@ s32 BossGoma_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 32: // eyelid (bottom)
|
case BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT2:
|
||||||
rot->x += this->eyeLidBottomRotX;
|
rot->x += this->eyeLidBottomRotX;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 35: // eyelid (top)
|
case BOSSGOMA_LIMB_EYE_LID_TOP_ROOT2:
|
||||||
rot->x += this->eyeLidTopRotX;
|
rot->x += this->eyeLidTopRotX;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38: // eye (iris) (parent of 39)
|
case BOSSGOMA_LIMB_IRIS_ROOT2:
|
||||||
rot->x += this->eyeIrisRotX;
|
rot->x += this->eyeIrisRotX;
|
||||||
rot->y += this->eyeIrisRotY;
|
rot->y += this->eyeIrisRotY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 39: // eye (iris)
|
case BOSSGOMA_LIMB_IRIS:
|
||||||
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
|
if (this->eyeState == EYESTATE_IRIS_FOLLOW_BONUS_IFRAMES && this->eyeLidBottomRotX < -0xA8C) {
|
||||||
*dList = NULL;
|
*dList = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2008,17 +2008,17 @@ s32 BossGoma_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// tail parts
|
case BOSSGOMA_LIMB_TAIL4:
|
||||||
case 11:
|
case BOSSGOMA_LIMB_TAIL3:
|
||||||
case 12:
|
case BOSSGOMA_LIMB_TAIL2:
|
||||||
case 13:
|
case BOSSGOMA_LIMB_TAIL1:
|
||||||
case 14:
|
|
||||||
Matrix_JointPosition(pos, rot);
|
Matrix_JointPosition(pos, rot);
|
||||||
|
|
||||||
if (*dList != NULL) {
|
if (*dList != NULL) {
|
||||||
Matrix_Push();
|
Matrix_Push();
|
||||||
Matrix_Scale(this->tailLimbsScale[limbIndex - 11], this->tailLimbsScale[limbIndex - 11],
|
Matrix_Scale(this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
|
||||||
this->tailLimbsScale[limbIndex - 11], MTXMODE_APPLY);
|
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4],
|
||||||
|
this->tailLimbsScale[limbIndex - BOSSGOMA_LIMB_TAIL4], MTXMODE_APPLY);
|
||||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_boss_goma.c", 4836),
|
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_boss_goma.c", 4836),
|
||||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||||
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
||||||
|
@ -2046,15 +2046,15 @@ void BossGoma_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
|
||||||
s32 pad;
|
s32 pad;
|
||||||
MtxF mtx;
|
MtxF mtx;
|
||||||
|
|
||||||
if (limbIndex == 11) { // tail end/last part
|
if (limbIndex == BOSSGOMA_LIMB_TAIL4) { // tail end/last part
|
||||||
Matrix_MultVec3f(&tailZero, &this->lastTailLimbWorldPos);
|
Matrix_MultVec3f(&tailZero, &this->lastTailLimbWorldPos);
|
||||||
} else if (limbIndex == 14) { // tail start/first part
|
} else if (limbIndex == BOSSGOMA_LIMB_TAIL1) { // tail start/first part
|
||||||
Matrix_MultVec3f(&tailZero, &this->firstTailLimbWorldPos);
|
Matrix_MultVec3f(&tailZero, &this->firstTailLimbWorldPos);
|
||||||
} else if (limbIndex == 5) { // eye (lens)
|
} else if (limbIndex == BOSSGOMA_LIMB_EYE) {
|
||||||
Matrix_MultVec3f(&focusEyeLocalPos, &this->actor.focus.pos);
|
Matrix_MultVec3f(&focusEyeLocalPos, &this->actor.focus.pos);
|
||||||
} else if (limbIndex == 21) { // back of right claw/hand
|
} else if (limbIndex == BOSSGOMA_LIMB_R_FEET_BACK) {
|
||||||
Matrix_MultVec3f(&clawBackLocalPos, &this->rightHandBackLimbWorldPos);
|
Matrix_MultVec3f(&clawBackLocalPos, &this->rightHandBackLimbWorldPos);
|
||||||
} else if (limbIndex == 73) { // back of left claw/hand
|
} else if (limbIndex == BOSSGOMA_LIMB_L_FEET_BACK) {
|
||||||
Matrix_MultVec3f(&clawBackLocalPos, &this->leftHandBackLimbWorldPos);
|
Matrix_MultVec3f(&clawBackLocalPos, &this->leftHandBackLimbWorldPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,96 @@ struct BossGoma;
|
||||||
|
|
||||||
typedef void (*BossGomaActionFunc)(struct BossGoma*, GlobalContext*);
|
typedef void (*BossGomaActionFunc)(struct BossGoma*, GlobalContext*);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0 */ BOSSGOMA_LIMB_NONE,
|
||||||
|
/* 1 */ BOSSGOMA_LIMB_ROOT1,
|
||||||
|
/* 2 */ BOSSGOMA_LIMB_ROOT2,
|
||||||
|
/* 3 */ BOSSGOMA_LIMB_BODY,
|
||||||
|
/* 4 */ BOSSGOMA_LIMB_BODY_SHELL,
|
||||||
|
/* 5 */ BOSSGOMA_LIMB_EYE,
|
||||||
|
/* 6 */ BOSSGOMA_LIMB_TAIL_ROOT,
|
||||||
|
/* 7 */ BOSSGOMA_LIMB_TAIL1_ROOT,
|
||||||
|
/* 8 */ BOSSGOMA_LIMB_TAIL2_ROOT,
|
||||||
|
/* 9 */ BOSSGOMA_LIMB_TAIL3_ROOT,
|
||||||
|
/* 10 */ BOSSGOMA_LIMB_TAIL4_ROOT,
|
||||||
|
/* 11 */ BOSSGOMA_LIMB_TAIL4,
|
||||||
|
/* 12 */ BOSSGOMA_LIMB_TAIL3,
|
||||||
|
/* 13 */ BOSSGOMA_LIMB_TAIL2,
|
||||||
|
/* 14 */ BOSSGOMA_LIMB_TAIL1,
|
||||||
|
/* 15 */ BOSSGOMA_LIMB_R_LEG_ROOT,
|
||||||
|
/* 16 */ BOSSGOMA_LIMB_R_THIGH_ROOT,
|
||||||
|
/* 17 */ BOSSGOMA_LIMB_R_LEG_LOWER_ROOT,
|
||||||
|
/* 18 */ BOSSGOMA_LIMB_R_FEET_ROOT,
|
||||||
|
/* 19 */ BOSSGOMA_LIMB_R_FEET_BACK_ROOT1,
|
||||||
|
/* 20 */ BOSSGOMA_LIMB_R_FEET_BACK_ROOT2,
|
||||||
|
/* 21 */ BOSSGOMA_LIMB_R_FEET_BACK,
|
||||||
|
/* 22 */ BOSSGOMA_LIMB_R_FEET,
|
||||||
|
/* 23 */ BOSSGOMA_LIMB_R_SHIN,
|
||||||
|
/* 24 */ BOSSGOMA_LIMB_R_KNEE_ROOT1,
|
||||||
|
/* 25 */ BOSSGOMA_LIMB_R_KNEE_ROOT2,
|
||||||
|
/* 26 */ BOSSGOMA_LIMB_R_KNEE,
|
||||||
|
/* 27 */ BOSSGOMA_LIMB_R_THIGH_SHELL_ROOT1,
|
||||||
|
/* 28 */ BOSSGOMA_LIMB_R_THIGH_SHELL_ROOT2,
|
||||||
|
/* 29 */ BOSSGOMA_LIMB_R_THIGH_SHELL,
|
||||||
|
/* 30 */ BOSSGOMA_LIMB_R_THIGH,
|
||||||
|
/* 31 */ BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT1,
|
||||||
|
/* 32 */ BOSSGOMA_LIMB_EYE_LID_BOTTOM_ROOT2,
|
||||||
|
/* 33 */ BOSSGOMA_LIMB_EYE_LID_BOTTOM,
|
||||||
|
/* 34 */ BOSSGOMA_LIMB_EYE_LID_TOP_ROOT1,
|
||||||
|
/* 35 */ BOSSGOMA_LIMB_EYE_LID_TOP_ROOT2,
|
||||||
|
/* 36 */ BOSSGOMA_LIMB_EYE_LID_TOP,
|
||||||
|
/* 37 */ BOSSGOMA_LIMB_IRIS_ROOT1,
|
||||||
|
/* 38 */ BOSSGOMA_LIMB_IRIS_ROOT2,
|
||||||
|
/* 39 */ BOSSGOMA_LIMB_IRIS,
|
||||||
|
/* 40 */ BOSSGOMA_LIMB_MANDIBLES_ROOT1,
|
||||||
|
/* 41 */ BOSSGOMA_LIMB_MANDIBLES_ROOT2,
|
||||||
|
/* 42 */ BOSSGOMA_LIMB_MANDIBLES_BODY,
|
||||||
|
/* 43 */ BOSSGOMA_LIMB_L_MANDIBLES_ROOT,
|
||||||
|
/* 44 */ BOSSGOMA_LIMB_L_MANDIBLES1_ROOT,
|
||||||
|
/* 45 */ BOSSGOMA_LIMB_L_MANDIBLES2_ROOT,
|
||||||
|
/* 46 */ BOSSGOMA_LIMB_L_MANDIBLES2,
|
||||||
|
/* 47 */ BOSSGOMA_LIMB_L_MANDIBLES1,
|
||||||
|
/* 48 */ BOSSGOMA_LIMB_R_MANDIBLES_ROOT,
|
||||||
|
/* 49 */ BOSSGOMA_LIMB_R_MANDIBLES1_ROOT,
|
||||||
|
/* 50 */ BOSSGOMA_LIMB_R_MANDIBLES2_ROOT,
|
||||||
|
/* 51 */ BOSSGOMA_LIMB_R_MANDIBLES2,
|
||||||
|
/* 52 */ BOSSGOMA_LIMB_R_MANDIBLES1,
|
||||||
|
/* 53 */ BOSSGOMA_LIMB_L_ANTENNA_ROOT,
|
||||||
|
/* 54 */ BOSSGOMA_LIMB_L_ANTENNA_BODY_ROOT,
|
||||||
|
/* 55 */ BOSSGOMA_LIMB_L_ANTENNA_SHELL_ROOT,
|
||||||
|
/* 56 */ BOSSGOMA_LIMB_L_ANTENNA_CLAW_ROOT,
|
||||||
|
/* 57 */ BOSSGOMA_LIMB_L_ANTENNA_CLAW,
|
||||||
|
/* 58 */ BOSSGOMA_LIMB_L_ANTENNA_SHELL,
|
||||||
|
/* 59 */ BOSSGOMA_LIMB_L_ANTENNA_BODY,
|
||||||
|
/* 60 */ BOSSGOMA_LIMB_R_ANTENNA_ROOT,
|
||||||
|
/* 61 */ BOSSGOMA_LIMB_R_ANTENNA_BODY_ROOT,
|
||||||
|
/* 62 */ BOSSGOMA_LIMB_R_ANTENNA_SHELL_ROOT,
|
||||||
|
/* 63 */ BOSSGOMA_LIMB_R_ANTENNA_CLAW_ROOT,
|
||||||
|
/* 64 */ BOSSGOMA_LIMB_R_ANTENNA_CLAW,
|
||||||
|
/* 65 */ BOSSGOMA_LIMB_R_ANTENNA_SHELL,
|
||||||
|
/* 66 */ BOSSGOMA_LIMB_R_ANTENNA_BODY,
|
||||||
|
/* 67 */ BOSSGOMA_LIMB_L_LEG_ROOT,
|
||||||
|
/* 68 */ BOSSGOMA_LIMB_L_THIGH_ROOT,
|
||||||
|
/* 69 */ BOSSGOMA_LIMB_L_LEG_LOWER_ROOT,
|
||||||
|
/* 70 */ BOSSGOMA_LIMB_L_FEET_ROOT,
|
||||||
|
/* 71 */ BOSSGOMA_LIMB_L_FEET_BACK_ROOT1,
|
||||||
|
/* 72 */ BOSSGOMA_LIMB_L_FEET_BACK_ROOT2,
|
||||||
|
/* 73 */ BOSSGOMA_LIMB_L_FEET_BACK,
|
||||||
|
/* 74 */ BOSSGOMA_LIMB_L_FEET,
|
||||||
|
/* 75 */ BOSSGOMA_LIMB_L_SHIN,
|
||||||
|
/* 76 */ BOSSGOMA_LIMB_L_KNEE_ROOT1,
|
||||||
|
/* 77 */ BOSSGOMA_LIMB_L_KNEE_ROOT2,
|
||||||
|
/* 78 */ BOSSGOMA_LIMB_L_KNEE,
|
||||||
|
/* 79 */ BOSSGOMA_LIMB_L_THIGH_SHELL_ROOT1,
|
||||||
|
/* 80 */ BOSSGOMA_LIMB_L_THIGH_SHELL_ROOT2,
|
||||||
|
/* 81 */ BOSSGOMA_LIMB_L_THIGH_SHELL,
|
||||||
|
/* 82 */ BOSSGOMA_LIMB_L_THIGH,
|
||||||
|
/* 83 */ BOSSGOMA_LIMB_BODY_SHELL_BACK_ROOT1,
|
||||||
|
/* 84 */ BOSSGOMA_LIMB_BODY_SHELL_BACK_ROOT2,
|
||||||
|
/* 85 */ BOSSGOMA_LIMB_BODY_SHELL_BACK,
|
||||||
|
/* 86 */ BOSSGOMA_LIMB_MAX
|
||||||
|
} BossGomaLimb;
|
||||||
|
|
||||||
typedef struct BossGoma {
|
typedef struct BossGoma {
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x0000 */ Actor actor;
|
||||||
/* 0x014C */ SkelAnime skelanime;
|
/* 0x014C */ SkelAnime skelanime;
|
||||||
|
|
Loading…
Reference in a new issue