mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Merge branch 'master' into parameter
This commit is contained in:
@@ -1,28 +1,38 @@
|
||||
<Root>
|
||||
<!-- Object for Bee -->
|
||||
<File Name="object_bee" Segment="6">
|
||||
<Animation Name="object_bee_Anim_00005C" Offset="0x5C" />
|
||||
<DList Name="object_bee_DL_000550" Offset="0x550" />
|
||||
<DList Name="object_bee_DL_000780" Offset="0x780" />
|
||||
<DList Name="object_bee_DL_000848" Offset="0x848" />
|
||||
<DList Name="object_bee_DL_000918" Offset="0x918" />
|
||||
<DList Name="object_bee_DL_0009D0" Offset="0x9D0" />
|
||||
<Texture Name="object_bee_TLUT_000A88" OutName="tlut_000A88" Format="rgba16" Width="4" Height="4" Offset="0xA88" />
|
||||
<Texture Name="object_bee_TLUT_000AA8" OutName="tlut_000AA8" Format="rgba16" Width="4" Height="4" Offset="0xAA8" />
|
||||
<Texture Name="object_bee_TLUT_000AC8" OutName="tlut_000AC8" Format="rgba16" Width="4" Height="4" Offset="0xAC8" />
|
||||
<Texture Name="object_bee_TLUT_000AE8" OutName="tlut_000AE8" Format="rgba16" Width="4" Height="4" Offset="0xAE8" />
|
||||
<Texture Name="object_bee_Tex_000B08" OutName="tex_000B08" Format="ci4" Width="32" Height="32" Offset="0xB08" />
|
||||
<Texture Name="object_bee_Tex_000D08" OutName="tex_000D08" Format="ci4" Width="32" Height="32" Offset="0xD08" />
|
||||
<Texture Name="object_bee_Tex_000F08" OutName="tex_000F08" Format="ci4" Width="32" Height="32" Offset="0xF08" />
|
||||
<Texture Name="object_bee_Tex_001108" OutName="tex_001108" Format="ci4" Width="32" Height="32" Offset="0x1108" />
|
||||
<Limb Name="object_bee_Standardlimb_001308" Type="Standard" EnumName="OBJECT_BEE_LIMB_01" Offset="0x1308" />
|
||||
<Limb Name="object_bee_Standardlimb_001314" Type="Standard" EnumName="OBJECT_BEE_LIMB_02" Offset="0x1314" />
|
||||
<Limb Name="object_bee_Standardlimb_001320" Type="Standard" EnumName="OBJECT_BEE_LIMB_03" Offset="0x1320" />
|
||||
<Limb Name="object_bee_Standardlimb_00132C" Type="Standard" EnumName="OBJECT_BEE_LIMB_04" Offset="0x132C" />
|
||||
<Limb Name="object_bee_Standardlimb_001338" Type="Standard" EnumName="OBJECT_BEE_LIMB_05" Offset="0x1338" />
|
||||
<Limb Name="object_bee_Standardlimb_001344" Type="Standard" EnumName="OBJECT_BEE_LIMB_06" Offset="0x1344" />
|
||||
<Limb Name="object_bee_Standardlimb_001350" Type="Standard" EnumName="OBJECT_BEE_LIMB_07" Offset="0x1350" />
|
||||
<Limb Name="object_bee_Standardlimb_00135C" Type="Standard" EnumName="OBJECT_BEE_LIMB_08" Offset="0x135C" />
|
||||
<Limb Name="object_bee_Standardlimb_001368" Type="Standard" EnumName="OBJECT_BEE_LIMB_09" Offset="0x1368" />
|
||||
<Skeleton Name="object_bee_Skel_001398" Type="Normal" LimbType="Standard" LimbNone="OBJECT_BEE_LIMB_NONE" LimbMax="OBJECT_BEE_LIMB_MAX" EnumName="ObjectBeeLimb" Offset="0x1398" />
|
||||
<!-- Bee Animations -->
|
||||
<Animation Name="gBeeFlyingAnim" Offset="0x5C" />
|
||||
|
||||
<!-- Bee Limb DisplayLists -->
|
||||
<DList Name="gBeeBodyDL" Offset="0x550" />
|
||||
<DList Name="gBeeHeadDL" Offset="0x780" />
|
||||
<DList Name="gBeeAntennaeDL" Offset="0x848" />
|
||||
<DList Name="gBeeRightWingDL" Offset="0x918" />
|
||||
<DList Name="gBeeLeftWingDL" Offset="0x9D0" />
|
||||
|
||||
<!-- Bee Textures -->
|
||||
<Texture Name="gBeeWingTLUT" OutName="bee_wing_tlut" Format="rgba16" Width="4" Height="4" Offset="0xA88" />
|
||||
<Texture Name="gBeeHeadTLUT" OutName="bee_head_tlut" Format="rgba16" Width="4" Height="4" Offset="0xAA8" />
|
||||
<Texture Name="gBeeBodyTLUT" OutName="bee_body_tlut" Format="rgba16" Width="4" Height="4" Offset="0xAC8" />
|
||||
<Texture Name="gBeeAntennaeTLUT" OutName="bee_antennae_tlut" Format="rgba16" Width="4" Height="4" Offset="0xAE8" />
|
||||
<Texture Name="gBeeWingTex" OutName="bee_wing" Format="ci4" Width="32" Height="32" Offset="0xB08" />
|
||||
<Texture Name="gBeeHeadTex" OutName="bee_head" Format="ci4" Width="32" Height="32" Offset="0xD08" />
|
||||
<Texture Name="gBeeBodyTex" OutName="bee_body" Format="ci4" Width="32" Height="32" Offset="0xF08" />
|
||||
<Texture Name="gBeeAntennaeTex" OutName="bee_antennae" Format="ci4" Width="32" Height="32" Offset="0x1108" />
|
||||
|
||||
<!-- Bee Limbs -->
|
||||
<Limb Name="gBeeRootLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_ROOT" Offset="0x1308" />
|
||||
<Limb Name="gBeeWingsRootLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_WINGS_ROOT" Offset="0x1314" />
|
||||
<Limb Name="gBeeLeftWingRootLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_LEFT_WING_ROOT" Offset="0x1320" />
|
||||
<Limb Name="gBeeLeftWingLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_LEFT_WING" Offset="0x132C" />
|
||||
<Limb Name="gBeeRightWingRootLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_RIGHT_WING_ROOT" Offset="0x1338" />
|
||||
<Limb Name="gBeeRightWingLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_RIGHT_WING" Offset="0x1344" />
|
||||
<Limb Name="gBeeBodyLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_BODY" Offset="0x1350" />
|
||||
<Limb Name="gBeeAntennaeLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_ANTENNAE" Offset="0x135C" />
|
||||
<Limb Name="gBeeHeadLimb" Type="Standard" EnumName="OBJECT_BEE_LIMB_HEAD" Offset="0x1368" />
|
||||
|
||||
<!-- Bee Skeleton -->
|
||||
<Skeleton Name="gBeeSkel" Type="Normal" LimbType="Standard" LimbNone="OBJECT_BEE_LIMB_NONE" LimbMax="OBJECT_BEE_LIMB_MAX" EnumName="ObjectBeeLimb" Offset="0x1398" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -1,81 +1,99 @@
|
||||
<Root>
|
||||
<!-- Assest for the giant turtle and wave he creates -->
|
||||
<File Name="object_kamejima" Segment="6">
|
||||
<Array Name="object_kamejima_Vtx_000000" Count="20" Offset="0x0">
|
||||
<!-- Turtle Wave -->
|
||||
<Array Name="gTurtleWaveVtx" Count="20" Offset="0x0">
|
||||
<Vtx/>
|
||||
</Array>
|
||||
<DList Name="object_kamejima_DL_000140" Offset="0x140" />
|
||||
<Texture Name="object_kamejima_Tex_0002D8" OutName="tex_0002D8" Format="i8" Width="32" Height="64" Offset="0x2D8" />
|
||||
<Texture Name="object_kamejima_Tex_000AD8" OutName="tex_000AD8" Format="i8" Width="64" Height="64" Offset="0xAD8" />
|
||||
<TextureAnimation Name="object_kamejima_Matanimheader_001AF0" Offset="0x1AF0" />
|
||||
<Collision Name="object_kamejima_Colheader_002328" Offset="0x2328" />
|
||||
<!-- <Blob Name="object_kamejima_Blob_002354" Size="0x1C" Offset="0x2354" /> -->
|
||||
<Collision Name="object_kamejima_Colheader_002470" Offset="0x2470" />
|
||||
<Collision Name="object_kamejima_Colheader_002E04" Offset="0x2E04" />
|
||||
<Animation Name="object_kamejima_Anim_003980" Offset="0x3980" />
|
||||
<Animation Name="object_kamejima_Anim_0047B8" Offset="0x47B8" />
|
||||
<Animation Name="object_kamejima_Anim_0048B0" Offset="0x48B0" />
|
||||
<DList Name="object_kamejima_DL_004E70" Offset="0x4E70" />
|
||||
<Texture Name="object_kamejima_TLUT_005248" OutName="tlut_005248" Format="rgba16" Width="16" Height="16" Offset="0x5248" />
|
||||
<Texture Name="object_kamejima_Tex_005448" OutName="tex_005448" Format="ci8" Width="32" Height="32" Offset="0x5448" />
|
||||
<Texture Name="object_kamejima_Tex_005848" OutName="tex_005848" Format="ci8" Width="64" Height="32" Offset="0x5848" />
|
||||
<!-- <Blob Name="object_kamejima_Blob_006050" Size="0x10" Offset="0x6050" /> -->
|
||||
<Animation Name="object_kamejima_Anim_006980" Offset="0x6980" />
|
||||
<DList Name="object_kamejima_DL_008760" Offset="0x8760" />
|
||||
<DList Name="object_kamejima_DL_008E18" Offset="0x8E18" />
|
||||
<DList Name="object_kamejima_DL_0090E8" Offset="0x90E8" />
|
||||
<DList Name="object_kamejima_DL_009278" Offset="0x9278" />
|
||||
<DList Name="object_kamejima_DL_0093E8" Offset="0x93E8" />
|
||||
<DList Name="object_kamejima_DL_0096B8" Offset="0x96B8" />
|
||||
<DList Name="object_kamejima_DL_009848" Offset="0x9848" />
|
||||
<DList Name="object_kamejima_DL_0099B8" Offset="0x99B8" />
|
||||
<DList Name="object_kamejima_DL_009C38" Offset="0x9C38" />
|
||||
<DList Name="object_kamejima_DL_009E38" Offset="0x9E38" />
|
||||
<DList Name="object_kamejima_DL_009F18" Offset="0x9F18" />
|
||||
<DList Name="object_kamejima_DL_00A118" Offset="0xA118" />
|
||||
<DList Name="object_kamejima_DL_00A4B8" Offset="0xA4B8" />
|
||||
<DList Name="object_kamejima_DL_00A7C8" Offset="0xA7C8" />
|
||||
<Texture Name="object_kamejima_TLUT_00AAD8" OutName="tlut_00AAD8" Format="rgba16" Width="16" Height="16" Offset="0xAAD8" />
|
||||
<Texture Name="object_kamejima_TLUT_00ACD8" OutName="tlut_00ACD8" Format="rgba16" Width="16" Height="16" Offset="0xACD8" />
|
||||
<Texture Name="object_kamejima_Tex_00AED8" OutName="tex_00AED8" Format="ci8" Width="32" Height="32" Offset="0xAED8" />
|
||||
<Texture Name="object_kamejima_Tex_00B2D8" OutName="tex_00B2D8" Format="ci8" Width="16" Height="16" Offset="0xB2D8" />
|
||||
<Texture Name="object_kamejima_Tex_00B3D8" OutName="tex_00B3D8" Format="ci8" Width="16" Height="32" Offset="0xB3D8" />
|
||||
<Texture Name="object_kamejima_Tex_00B5D8" OutName="tex_00B5D8" Format="ci8" Width="64" Height="32" Offset="0xB5D8" />
|
||||
<Texture Name="object_kamejima_Tex_00BDD8" OutName="tex_00BDD8" Format="ci8" Width="16" Height="16" Offset="0xBDD8" />
|
||||
<!-- <Blob Name="object_kamejima_Blob_00BED8" Size="0x1800" Offset="0xBED8" /> -->
|
||||
<Texture Name="object_kamejima_Tex_00D6D8" OutName="tex_00D6D8" Format="ci8" Width="16" Height="16" Offset="0xD6D8" />
|
||||
<Texture Name="object_kamejima_Tex_00D7D8" OutName="tex_00D7D8" Format="ci8" Width="32" Height="64" Offset="0xD7D8" />
|
||||
<Texture Name="object_kamejima_Tex_00DFD8" OutName="tex_00DFD8" Format="ci8" Width="32" Height="32" Offset="0xDFD8" />
|
||||
<Texture Name="object_kamejima_Tex_00E3D8" OutName="tex_00E3D8" Format="ci8" Width="16" Height="32" Offset="0xE3D8" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E5D8" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_01" Offset="0xE5D8" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E5E4" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_02" Offset="0xE5E4" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E5F0" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_03" Offset="0xE5F0" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E5FC" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_04" Offset="0xE5FC" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E608" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_05" Offset="0xE608" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E614" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_06" Offset="0xE614" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E620" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_07" Offset="0xE620" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E62C" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_08" Offset="0xE62C" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E638" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_09" Offset="0xE638" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E644" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0A" Offset="0xE644" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E650" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0B" Offset="0xE650" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E65C" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0C" Offset="0xE65C" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E668" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0D" Offset="0xE668" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E674" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0E" Offset="0xE674" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E680" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_0F" Offset="0xE680" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E68C" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_10" Offset="0xE68C" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E698" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_11" Offset="0xE698" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6A4" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_12" Offset="0xE6A4" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6B0" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_13" Offset="0xE6B0" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6BC" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_14" Offset="0xE6BC" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6C8" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_15" Offset="0xE6C8" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6D4" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_16" Offset="0xE6D4" />
|
||||
<Limb Name="object_kamejima_Standardlimb_00E6E0" Type="Standard" EnumName="OBJECT_KAMEJIMA_LIMB_17" Offset="0xE6E0" />
|
||||
<Skeleton Name="object_kamejima_Skel_00E748" Type="Flex" LimbType="Standard" LimbNone="OBJECT_KAMEJIMA_LIMB_NONE" LimbMax="OBJECT_KAMEJIMA_LIMB_MAX" EnumName="ObjectKamejimaLimb" Offset="0xE748" />
|
||||
<Animation Name="object_kamejima_Anim_00EF98" Offset="0xEF98" />
|
||||
<Animation Name="object_kamejima_Anim_0100CC" Offset="0x100CC" />
|
||||
<Animation Name="object_kamejima_Anim_010918" Offset="0x10918" />
|
||||
<Animation Name="object_kamejima_Anim_0119D4" Offset="0x119D4" />
|
||||
<Animation Name="object_kamejima_Anim_012260" Offset="0x12260" />
|
||||
<Animation Name="object_kamejima_Anim_013264" Offset="0x13264" />
|
||||
<Animation Name="object_kamejima_Anim_014E8C" Offset="0x14E8C" />
|
||||
<DList Name="gTurtleWaveDL" Offset="0x140" />
|
||||
<Texture Name="gTurtleWaveUnusedTex" OutName="turtle_wave_unused" Format="i8" Width="32" Height="64" Offset="0x2D8" />
|
||||
<Texture Name="gTurtleWaveTex" OutName="turtle_wave" Format="i8" Width="64" Height="64" Offset="0xAD8" />
|
||||
<TextureAnimation Name="gTurtleWaveTexAnim" Offset="0x1AF0" />
|
||||
|
||||
|
||||
<!-- Turtle -->
|
||||
<Collision Name="gTurtleZoraCapeAsleepCol" Offset="0x2328" />
|
||||
<TextureAnimation Name="gTurtleEmptyTexAnim" Offset="0x2360"/>
|
||||
<Collision Name="gTurtleZoraCapeAwakeCol" Offset="0x2470" />
|
||||
<Collision Name="gTurtleUnusedCol" Offset="0x2E04" />
|
||||
|
||||
<Animation Name="gTurtleGlitchy1Anim" Offset="0x3980" />
|
||||
<Animation Name="gTurtleCoughAnim" Offset="0x47B8" />
|
||||
<Animation Name="gTurtleIdleAnim" Offset="0x48B0" />
|
||||
|
||||
<DList Name="gTurtleAsleepDL" Offset="0x4E70" /> <!-- When asleep, the turtle looks like a giant rock -->
|
||||
|
||||
<Texture Name="gTurtleAsleepTLUT" OutName="turtle_asleep_tlut" Format="rgba16" Width="16" Height="16" Offset="0x5248" />
|
||||
<Texture Name="gTurtleAsleepGrassTex" OutName="turtle_asleep_grass" Format="ci8" Width="32" Height="32" Offset="0x5448" />
|
||||
<Texture Name="gTurtleAsleepGrassDirtTex" OutName="turtle_asleep_grass_dirt" Format="ci8" Width="64" Height="32" Offset="0x5848" />
|
||||
|
||||
<Animation Name="gTurtleSwimAnim" Offset="0x6980" />
|
||||
|
||||
<DList Name="gTurtleShellDL" Offset="0x8760" />
|
||||
<DList Name="gTurtleFrontLeftUpperFlipperDL" Offset="0x8E18" />
|
||||
<DList Name="gTurtleFrontLeftLowerFlipperDL" Offset="0x90E8" />
|
||||
<DList Name="gTurtleFrontLeftEndFlipperDL" Offset="0x9278" />
|
||||
<DList Name="gTurtleFrontRightUpperFlipperDL" Offset="0x93E8" />
|
||||
<DList Name="gTurtleFrontRightLowerFlipperDL" Offset="0x96B8" />
|
||||
<DList Name="gTurtleFrontRightEndFlipperDL" Offset="0x9848" />
|
||||
<DList Name="gTurtleBackRightFlipperDL" Offset="0x99B8" />
|
||||
<DList Name="gTurtleBackLeftFlipperDL" Offset="0x9C38" />
|
||||
<DList Name="gTurtleTailDL" Offset="0x9E38" />
|
||||
<DList Name="gTurtleNeckDL" Offset="0x9F18" />
|
||||
<DList Name="gTurtleHeadDL" Offset="0xA118" />
|
||||
<DList Name="gTurtleUpperMouthDL" Offset="0xA4B8" />
|
||||
<DList Name="gTurtleLowerMouthDL" Offset="0xA7C8" />
|
||||
|
||||
<Texture Name="gTurtleSkinTLUT" OutName="turtle_skin_tlut" Format="rgba16" Width="16" Height="16" Offset="0xAAD8" />
|
||||
<Texture Name="gTurtleTLUT" OutName="turtle_tlut" Format="rgba16" Width="16" Height="16" Offset="0xACD8" />
|
||||
<Texture Name="gTurtleNostrilTex" OutName="turtle_nostril" Format="ci8" Width="32" Height="32" Offset="0xAED8" />
|
||||
<Texture Name="gTurtleInsideUpperMouthTex" OutName="turtle_inside_upper_mouth" Format="ci8" Width="16" Height="16" Offset="0xB2D8" />
|
||||
<Texture Name="gTurtleInsideLowerMouthTex" OutName="turtle_inside_lower_mouth" Format="ci8" Width="16" Height="32" Offset="0xB3D8"/>
|
||||
<Texture Name="gTurtleSpottedSkinTex" OutName="turtle_spotted_skin" Format="ci8" Width="64" Height="32" Offset="0xB5D8"/>
|
||||
<Texture Name="gTurtleSkinTex" OutName="turtle_skin" Format="ci8" Width="16" Height="16" Offset="0xBDD8" />
|
||||
<Texture Name="gTurtleEyeOpenStraightTex" OutName="turtle_eye_open_straight" Format="ci8" Width="32" Height="32" Offset="0xBED8" TlutOffset="0xAAD8"/>
|
||||
<Texture Name="gTurtleEyeHalfStraightTex" OutName="turtle_eye_half_straight" Format="ci8" Width="32" Height="32" Offset="0xC2D8" TlutOffset="0xAAD8"/>
|
||||
<Texture Name="gTurtleEyeClosedTex" OutName="turtle_eye_closed" Format="ci8" Width="32" Height="32" Offset="0xC6D8" TlutOffset="0xAAD8"/>
|
||||
<Texture Name="gTurtleEyeHalfLeftTex" OutName="turtle_eye_half_left" Format="ci8" Width="32" Height="32" Offset="0xCAD8" TlutOffset="0xAAD8"/>
|
||||
<Texture Name="gTurtleEyeOpenRightTex" OutName="turtle_eye_half_right" Format="ci8" Width="32" Height="32" Offset="0xCED8" TlutOffset="0xAAD8"/>
|
||||
<Texture Name="gTurtleEyeOpenLeftTex" OutName="turtle_eye_half_left_2" Format="ci8" Width="32" Height="32" Offset="0xD2D8" TlutOffset="0xAAD8"/>
|
||||
|
||||
<Texture Name="gTurtleHeadTex" OutName="turtle_head" Format="ci8" Width="16" Height="16" Offset="0xD6D8"/>
|
||||
<Texture Name="gTurtleShellGrassTex" OutName="turtle_shell_grass" Format="ci8" Width="32" Height="64" Offset="0xD7D8" />
|
||||
<Texture Name="gTurtleShellScutesTex" OutName="turtle_shell_scutes" Format="ci8" Width="32" Height="32" Offset="0xDFD8"/>
|
||||
<Texture Name="gTurtleShellBottomTex" OutName="turtle_shell_bottom" Format="ci8" Width="16" Height="32" Offset="0xE3D8"/>
|
||||
|
||||
<Limb Name="gTurtleRootLimb" Type="Standard" EnumName="TURTLE_LIMB_ROOT" Offset="0xE5D8" />
|
||||
<Limb Name="gTurtleShellLimb" Type="Standard" EnumName="TURTLE_LIMB_SHELL" Offset="0xE5E4" />
|
||||
<Limb Name="gTurtleNeckHeadRootLimb" Type="Standard" EnumName="TURTLE_LIMB_NECK_HEAD_ROOT" Offset="0xE5F0" />
|
||||
<Limb Name="gTurtleNeckLimb" Type="Standard" EnumName="TURTLE_LIMB_NECK" Offset="0xE5FC" />
|
||||
<Limb Name="gTurtleHeadLimb" Type="Standard" EnumName="TURTLE_LIMB_HEAD" Offset="0xE608" />
|
||||
<Limb Name="gTurtleUpperMouthLimb" Type="Standard" EnumName="TURTLE_LIMB_UPPER_MOUTH" Offset="0xE614" />
|
||||
<Limb Name="gTurtleLowerMouthRootLimb" Type="Standard" EnumName="TURTLE_LIMB_LOWER_MOUTH_ROOT" Offset="0xE620" />
|
||||
<Limb Name="gTurtleLowerMouthLimb" Type="Standard" EnumName="TURTLE_LIMB_LOWER_MOUTH" Offset="0xE62C" />
|
||||
<Limb Name="gTurtleBackLeftFlipperRootLimb" Type="Standard" EnumName="TURTLE_LIMB_BACK_LEFT_FLIPPER_ROOT" Offset="0xE638" />
|
||||
<Limb Name="gTurtleBackLeftFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_BACK_LEFT_FLIPPER" Offset="0xE644" />
|
||||
<Limb Name="gTurtleBackRightFlipperRootLimb" Type="Standard" EnumName="TURTLE_LIMB_BACK_RIGHT_FLIPPER_ROOT" Offset="0xE650" />
|
||||
<Limb Name="gTurtleBackRightFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_BACK_RIGHT_FLIPPER" Offset="0xE65C" />
|
||||
<Limb Name="gTurtleTailRootLimb" Type="Standard" EnumName="TURTLE_TAIL_ROOT_LIMB" Offset="0xE668" />
|
||||
<Limb Name="gTurtleTailLimb" Type="Standard" EnumName="TURTLE_TAIL_LIMB" Offset="0xE674" />
|
||||
<Limb Name="gTurtleTailEndRootLimb" Type="Standard" EnumName="TURTLE_TAIL_END_ROOT_LIMB" Offset="0xE680" />
|
||||
<Limb Name="gTurtleFrontLeftFlipperRootLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_LEFT_FLIPPER_ROOT" Offset="0xE68C" />
|
||||
<Limb Name="gTurtleFrontLeftUpperFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_LEFT_UPPER_FLIPPER" Offset="0xE698" />
|
||||
<Limb Name="gTurtleFrontLeftLowerFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_LEFT_LOWER_FLIPPER" Offset="0xE6A4" />
|
||||
<Limb Name="gTurtleFrontLeftEndFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_LEFT_END_FLIPPER" Offset="0xE6B0" />
|
||||
<Limb Name="gTurtleFrontRightFlipperRootLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_RIGHT_FLIPPER_ROOT" Offset="0xE6BC" />
|
||||
<Limb Name="gTurtleFrontRightUpperFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_RIGHT_UPPER_FLIPPER" Offset="0xE6C8" />
|
||||
<Limb Name="gTurtleFrontRightLowerFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_RIGHT_LOWER_FLIPPER" Offset="0xE6D4" />
|
||||
<Limb Name="gTurtleFrontRightEndFlipperLimb" Type="Standard" EnumName="TURTLE_LIMB_FRONT_RIGHT_END_FLIPPER" Offset="0xE6E0" />
|
||||
<Skeleton Name="gTurtleSkel" Type="Flex" LimbType="Standard" LimbNone="TURTLE_LIMB_NONE" LimbMax="TURTLE_LIMB_MAX" EnumName="TurtleLimb" Offset="0xE748" />
|
||||
|
||||
<Animation Name="gTurtleGlitchy2Anim" Offset="0xEF98" />
|
||||
<Animation Name="gTurtleSpeak1Anim" Offset="0x100CC" />
|
||||
<Animation Name="gTurtleGlitchyRaiseHeadAnim" Offset="0x10918" />
|
||||
<Animation Name="gTurtleSpeak2Anim" Offset="0x119D4" />
|
||||
<Animation Name="gTurtleFloatAnim" Offset="0x12260" />
|
||||
<Animation Name="gTurtleGlitchyLookAroundAnim" Offset="0x13264" />
|
||||
<Animation Name="gTurtleYawnAnim" Offset="0x14E8C" />
|
||||
</File>
|
||||
</Root>
|
||||
|
||||
@@ -1,33 +1,51 @@
|
||||
<Root>
|
||||
<!--
|
||||
Assets for Ocean Spider House's bombable wall, Skullkid's painting, fireplace grate on the path to the Heart
|
||||
Piece, bookshelves and chests of drawers.
|
||||
-->
|
||||
<File Name="object_kin2_obj" Segment="6">
|
||||
<DList Name="object_kin2_obj_DL_000120" Offset="0x120" />
|
||||
<DList Name="gOceanSpiderHouseEmpty1DL" Offset="0x120" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseBombableWallDebrisDL" Offset="0x128" />
|
||||
<DList Name="gOceanSpiderHouseBombableWallCrackDL" Offset="0x2C0" />
|
||||
<DList Name="gOceanSpiderHouseBombableWallDL" Offset="0x360" />
|
||||
<Collision Name="gOceanSpiderHouseBombableWallCol" Offset="0x490" />
|
||||
<DList Name="object_kin2_obj_DL_000650" Offset="0x650" />
|
||||
<DList Name="object_kin2_obj_DL_000658" Offset="0x658" />
|
||||
<Collision Name="object_kin2_obj_Colheader_000798" Offset="0x798" />
|
||||
<DList Name="object_kin2_obj_DL_000820" Offset="0x820" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseEmpty2DL" Offset="0x650" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseSkullkidPaintingDL" Offset="0x658" />
|
||||
<Collision Name="gOceanSpiderHouseSkullkidPaintingCol" Offset="0x798" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseEmpty3DL" Offset="0x820" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseFireplaceGrateDL" Offset="0x828" />
|
||||
<Collision Name="object_kin2_obj_Colheader_000908" Offset="0x908" />
|
||||
<DList Name="object_kin2_obj_DL_000CA0" Offset="0xCA0" />
|
||||
<Collision Name="gOceanSpiderHouseFireplaceGrateCol" Offset="0x908" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseEmpty4DL" Offset="0xCA0" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseBookshelfDL" Offset="0xCA8" />
|
||||
<Collision Name="gOceanSpiderHouseBookshelfCol" Offset="0xF80" />
|
||||
<DList Name="object_kin2_obj_DL_0010F0" Offset="0x10F0" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseEmpty5DL" Offset="0x10F0" />
|
||||
|
||||
<DList Name="gOceanSpiderHouseChestOfDrawersDL" Offset="0x10F8" />
|
||||
<Collision Name="gOceanSpiderHouseChestOfDrawersCol" Offset="0x1328" />
|
||||
<!-- <Blob Name="object_kin2_obj_Blob_001354" Size="0x2C" Offset="0x1354" /> -->
|
||||
|
||||
<Texture Name="gOceanSpiderHouseUnused1TLUT" OutName="ocean_spider_house_unused_tlut_1" Format="rgba16" Width="4" Height="4" Offset="0x1360" />
|
||||
<Texture Name="gOceanSpiderHouseTLUT" OutName="ocean_spider_house_tlut" Format="rgba16" Width="4" Height="4" Offset="0x1380" />
|
||||
<!-- <Blob Name="object_kin2_obj_Blob_0013A0" Size="0x20" Offset="0x13A0" /> -->
|
||||
<Texture Name="gOceanSpiderHouseUnused2TLUT" OutName="ocean_spider_house_unused_tlut_2" Format="rgba16" Width="4" Height="4" Offset="0x13A0" />
|
||||
|
||||
<Texture Name="gOceanSpiderHouseBombableWallCrackTex" OutName="ocean_spider_house_bombable_wall_crack" Format="ia8" Width="64" Height="64" Offset="0x13C0" />
|
||||
<Texture Name="gOceanSpiderHouseBookshelfWoodTex" OutName="ocean_spider_house_bookshelf_wood" Format="rgba16" Width="32" Height="32" Offset="0x23C0" />
|
||||
<Texture Name="gOceanSpiderHouseFireplaceGrateTex" OutName="ocean_spider_house_fireplace_grate" Format="rgba16" Width="32" Height="32" Offset="0x2BC0" />
|
||||
<Texture Name="gOceanSpiderHouseSkullkidPaintingTex" OutName="ocean_spider_house_skullkid_painting" Format="ci4" Width="64" Height="64" Offset="0x33C0" />
|
||||
|
||||
<Texture Name="gOceanSpiderHouseChestOfDrawersFrontTex" OutName="ocean_spider_house_chest_of_drawers_front" Format="rgba16" Width="32" Height="64" Offset="0x3BC0" />
|
||||
<Texture Name="gOceanSpiderHouseChestOfDrawersBackTex" OutName="ocean_spider_house_chest_of_drawers_back" Format="rgba16" Width="32" Height="64" Offset="0x4BC0" />
|
||||
<Texture Name="gOceanSpiderHouseChestOfDrawersTopTex" OutName="ocean_spider_house_chest_of_drawers_top" Format="rgba16" Width="32" Height="32" Offset="0x5BC0" />
|
||||
|
||||
<Texture Name="gOceanSpiderHouseBookshelfBooksTex" OutName="ocean_spider_house_bookshelf_books" Format="rgba16" Width="32" Height="64" Offset="0x63C0" />
|
||||
|
||||
<Texture Name="gOceanSpiderHouseBombableWallDebrisTex1" OutName="ocean_spider_house_debris_1" Format="rgba16" Width="32" Height="32" Offset="0x73C0" />
|
||||
<Texture Name="gOceanSpiderHouseBombableWallDebrisTex2" OutName="ocean_spider_house_debris_2" Format="i4" Width="64" Height="64" Offset="0x7BC0" />
|
||||
</File>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<File Name="object_umajump" Segment="6">
|
||||
<Texture Name="object_umajump_Tex_000000" OutName="tex_000000" Format="rgba16" Width="16" Height="64" Offset="0x0" />
|
||||
<Texture Name="object_umajump_Tex_000800" OutName="tex_000800" Format="rgba16" Width="16" Height="64" Offset="0x800" />
|
||||
<DList Name="object_umajump_DL_001220" Offset="0x1220" />
|
||||
<DList Name="gHorseJumpFenceDL" Offset="0x1220" />
|
||||
<Collision Name="object_umajump_Colheader_001438" Offset="0x1438" />
|
||||
<Collision Name="object_umajump_Colheader_001558" Offset="0x1558" />
|
||||
</File>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<Root>
|
||||
<File Name="ovl_Dm_Char08" BaseAddress="0x80AAF050" RangeStart="0x2320" RangeEnd="0x266C">
|
||||
<Array Name="sTurtleGreatBayTempleColPolygons" Count="19" Offset="0x2350">
|
||||
<CollisionPoly/>
|
||||
</Array>
|
||||
<Array Name="sTurtleGreatBayTempleColPolygons2" Count="19" Offset="0x2480">
|
||||
<CollisionPoly/>
|
||||
</Array>
|
||||
<Array Name="sTurtleGreatBayTempleColVertices" Count="12" Offset="0x25B0">
|
||||
<Vector Type="s16" Dimensions="3" />
|
||||
</Array>
|
||||
<Array Name="sTurtleGreatBayTempleColVertices2" Count="12" Offset="0x25F8">
|
||||
<Vector Type="s16" Dimensions="3" />
|
||||
</Array>
|
||||
<Collision Name="sTurtleGreatBayTempleCol" Offset="0x2640"/>
|
||||
</File>
|
||||
</Root>
|
||||
@@ -882,6 +882,7 @@ void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
|
||||
void func_800C6554(PlayState* play, DynaCollisionContext* dyna);
|
||||
void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgId);
|
||||
void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength);
|
||||
void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex);
|
||||
|
||||
@@ -1286,8 +1286,7 @@ beginseg
|
||||
name "ovl_Bg_Umajump"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.o"
|
||||
include "build/data/ovl_Bg_Umajump/ovl_Bg_Umajump.data.o"
|
||||
include "build/data/ovl_Bg_Umajump/ovl_Bg_Umajump.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_Bg_Umajump/ovl_Bg_Umajump_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
@@ -3108,8 +3107,7 @@ beginseg
|
||||
name "ovl_Dm_Char08"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.o"
|
||||
include "build/data/ovl_Dm_Char08/ovl_Dm_Char08.data.o"
|
||||
include "build/data/ovl_Dm_Char08/ovl_Dm_Char08.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_Dm_Char08/ovl_Dm_Char08_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
@@ -3947,8 +3945,7 @@ beginseg
|
||||
name "ovl_Bg_Kin2_Picture"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.o"
|
||||
include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.data.o"
|
||||
include "build/data/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_Bg_Kin2_Picture/ovl_Bg_Kin2_Picture_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
@@ -4365,8 +4362,7 @@ beginseg
|
||||
name "ovl_En_Stone_heishi"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.o"
|
||||
include "build/data/ovl_En_Stone_heishi/ovl_En_Stone_heishi.data.o"
|
||||
include "build/data/ovl_En_Stone_heishi/ovl_En_Stone_heishi.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Stone_heishi/ovl_En_Stone_heishi_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
||||
@@ -150,7 +150,7 @@ void BgKin2Fence_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_kin2_obj_Colheader_000908);
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseFireplaceGrateCol);
|
||||
Collider_InitJntSph(play, &this->collider);
|
||||
Collider_SetJntSph(play, &this->collider, &this->dyna.actor, &sJntSphInit, this->colliderElements);
|
||||
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include "z_bg_kin2_picture.h"
|
||||
#include "assets/objects/object_kin2_obj/object_kin2_obj.h"
|
||||
|
||||
#define FLAGS 0x00000000
|
||||
|
||||
@@ -15,13 +16,17 @@ void BgKin2Picture_Destroy(Actor* thisx, PlayState* play);
|
||||
void BgKin2Picture_Update(Actor* thisx, PlayState* play);
|
||||
void BgKin2Picture_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80B6F4D4(BgKin2Picture* this, PlayState* play);
|
||||
void func_80B6F5B8(BgKin2Picture* this, PlayState* play);
|
||||
void func_80B6F640(BgKin2Picture* this, PlayState* play);
|
||||
void func_80B6F72C(BgKin2Picture* this, PlayState* play);
|
||||
void func_80B6F90C(BgKin2Picture* this, PlayState* play);
|
||||
void BgKin2Picture_SetupWait(BgKin2Picture* this);
|
||||
void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play);
|
||||
void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this);
|
||||
void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play);
|
||||
void BgKin2Picture_SetupShiver(BgKin2Picture* this);
|
||||
void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play);
|
||||
void BgKin2Picture_SetupFall(BgKin2Picture* this);
|
||||
void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play);
|
||||
void BgKin2Picture_SetupDoNothing(BgKin2Picture* this);
|
||||
void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play);
|
||||
|
||||
#if 0
|
||||
const ActorInit Bg_Kin2_Picture_InitVars = {
|
||||
ACTOR_BG_KIN2_PICTURE,
|
||||
ACTORCAT_PROP,
|
||||
@@ -34,73 +39,307 @@ const ActorInit Bg_Kin2_Picture_InitVars = {
|
||||
(ActorFunc)BgKin2Picture_Draw,
|
||||
};
|
||||
|
||||
// static ColliderTrisElementInit sTrisElementsInit[2] = {
|
||||
static ColliderTrisElementInit D_80B6F990[2] = {
|
||||
static ColliderTrisElementInit sTrisElementsInit[] = {
|
||||
{
|
||||
{ ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
|
||||
{ { { -20.0f, 53.29999923706055f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
|
||||
{
|
||||
ELEMTYPE_UNK4,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0x000138B0, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
OCELEM_NONE,
|
||||
},
|
||||
{ { { -20.0f, 53.3f, 9.0f }, { -20.0f, 3.0f, 9.0f }, { 20.0f, 3.0f, 9.0f } } },
|
||||
},
|
||||
{
|
||||
{ ELEMTYPE_UNK4, { 0x00000000, 0x00, 0x00 }, { 0x000138B0, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
|
||||
{ { { -20.0f, 53.29999923706055f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.29999923706055f, 9.0f } } },
|
||||
{
|
||||
ELEMTYPE_UNK4,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0x000138B0, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
OCELEM_NONE,
|
||||
},
|
||||
{ { { -20.0f, 53.3f, 9.0f }, { 20.0f, 3.0f, 9.0f }, { 20.0f, 53.3f, 9.0f } } },
|
||||
},
|
||||
};
|
||||
|
||||
// static ColliderTrisInit sTrisInit = {
|
||||
static ColliderTrisInit D_80B6FA08 = {
|
||||
{ COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_NONE, COLSHAPE_TRIS, },
|
||||
ARRAY_COUNT(sTrisElementsInit), D_80B6F990, // sTrisElementsInit,
|
||||
static ColliderTrisInit sTrisInit = {
|
||||
{
|
||||
COLTYPE_NONE,
|
||||
AT_NONE,
|
||||
AC_ON | AC_TYPE_PLAYER,
|
||||
OC1_NONE,
|
||||
OC2_NONE,
|
||||
COLSHAPE_TRIS,
|
||||
},
|
||||
ARRAY_COUNT(sTrisElementsInit),
|
||||
sTrisElementsInit,
|
||||
};
|
||||
|
||||
// static InitChainEntry sInitChain[] = {
|
||||
static InitChainEntry D_80B6FA24[] = {
|
||||
ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE),
|
||||
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
||||
static Vec3f sDustBasePos = { 0.0f, 23.0f, 0.0f };
|
||||
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_CONTINUE), ICHAIN_F32_DIV1000(terminalVelocity, -20000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE), ICHAIN_F32(uncullZoneScale, 100, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneDownward, 100, ICHAIN_CONTINUE), ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#endif
|
||||
s32 BgKin2Picture_IsSkulltulaCollected(PlayState* play, s32 skulltulaParams) {
|
||||
s32 flag = -1;
|
||||
|
||||
extern ColliderTrisElementInit D_80B6F990[2];
|
||||
extern ColliderTrisInit D_80B6FA08;
|
||||
extern InitChainEntry D_80B6FA24[];
|
||||
if ((u8)skulltulaParams & 3) {
|
||||
flag = BG_KIN2_PICTURE_GET_3FC(skulltulaParams);
|
||||
}
|
||||
|
||||
extern UNK_TYPE D_06000658;
|
||||
extern UNK_TYPE D_06000798;
|
||||
return (flag >= 0) && Flags_GetTreasure(play, flag);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFA0.s")
|
||||
void BgKin2Picture_SpawnSkulltula(BgKin2Picture* this, PlayState* play2) {
|
||||
PlayState* play = play2;
|
||||
s32 skulltulaSpawnParams;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6EFEC.s")
|
||||
if (!BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor)) { // Gold Skulltula is still here.
|
||||
skulltulaSpawnParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
|
||||
if (!BgKin2Picture_IsSkulltulaCollected(play, skulltulaSpawnParams) &&
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_SW, this->dyna.actor.home.pos.x,
|
||||
this->dyna.actor.home.pos.y + 23.0f, this->dyna.actor.home.pos.z, 0,
|
||||
this->dyna.actor.home.rot.y, 0, skulltulaSpawnParams)) {
|
||||
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F098.s")
|
||||
#define DUST_COUNT 20
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Init.s")
|
||||
void BgKin2Picture_SpawnDust(BgKin2Picture* this, PlayState* play) {
|
||||
f32 offset;
|
||||
Vec3f basePos;
|
||||
Vec3f pos;
|
||||
Vec3f velocity;
|
||||
Vec3f accel;
|
||||
s32 angle;
|
||||
s32 scale;
|
||||
s16 scaleStep;
|
||||
s32 baseAngle;
|
||||
s32 i;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Destroy.s")
|
||||
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x,
|
||||
this->dyna.actor.world.pos.y +
|
||||
(this->dyna.actor.shape.yOffset * this->dyna.actor.scale.y),
|
||||
this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
|
||||
Matrix_MultVec3f(&sDustBasePos, &basePos);
|
||||
pos.y = basePos.y - 7.0f;
|
||||
velocity.y = 0.0f;
|
||||
accel.y = 0.2f;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4C0.s")
|
||||
for (i = 0, baseAngle = 0; i < DUST_COUNT; i++, baseAngle += (0x10000 / DUST_COUNT)) {
|
||||
angle = (s32)(Rand_ZeroOne() * (0x10000 / DUST_COUNT)) + baseAngle;
|
||||
offset = (Rand_ZeroOne() * 14.0f) + 4.0f;
|
||||
pos.x = Math_SinS(angle) * offset;
|
||||
pos.z = Math_CosS(angle) * offset;
|
||||
velocity.x = (Rand_ZeroOne() - 0.5f) + (pos.x * (1.0f / 6.0f));
|
||||
velocity.z = (Rand_ZeroOne() - 0.5f) + (pos.z * (1.0f / 6.0f));
|
||||
pos.x += basePos.x;
|
||||
pos.z += basePos.z;
|
||||
accel.x = velocity.x * -0.09f;
|
||||
accel.z = velocity.z * -0.09f;
|
||||
scale = (s32)(Rand_ZeroOne() * 10.0f) + 10;
|
||||
scaleStep = (s32)(Rand_ZeroOne() * 10.0f) + 15;
|
||||
func_800B1210(play, &pos, &velocity, &accel, scale, scaleStep);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F4D4.s")
|
||||
void BgKin2Picture_Init(Actor* thisx, PlayState* play) {
|
||||
s32 pad;
|
||||
BgKin2Picture* this = THIS;
|
||||
s32 skulltulaParams;
|
||||
Vec3f vertices[3];
|
||||
s32 i;
|
||||
s32 j;
|
||||
ColliderTrisElementInit* element;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5A4.s")
|
||||
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseSkullkidPaintingCol);
|
||||
func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
Collider_InitTris(play, &this->colliderTris);
|
||||
Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderElement);
|
||||
Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
|
||||
this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F5B8.s")
|
||||
for (i = 0; i < ARRAY_COUNT(sTrisElementsInit); i++) {
|
||||
for (j = 0; j < ARRAY_COUNT(vertices); j++) {
|
||||
element = &sTrisInit.elements[i];
|
||||
Matrix_MultVec3f(&element->dim.vtx[j], &vertices[j]);
|
||||
}
|
||||
Collider_SetTrisVertices(&this->colliderTris, i, &vertices[0], &vertices[1], &vertices[2]);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F61C.s")
|
||||
Actor_SetFocus(&this->dyna.actor, 23.0f);
|
||||
skulltulaParams = BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(&this->dyna.actor);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F640.s")
|
||||
if (BG_KIN2_PICTURE_SKULLTULA_COLLECTED(&this->dyna.actor) ||
|
||||
BgKin2Picture_IsSkulltulaCollected(play, skulltulaParams)) {
|
||||
this->skulltulaNoiseTimer = -1;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F708.s")
|
||||
BgKin2Picture_SetupWait(this);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F72C.s")
|
||||
void BgKin2Picture_Destroy(Actor* thisx, PlayState* play) {
|
||||
BgKin2Picture* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F8F8.s")
|
||||
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
Collider_DestroyTris(play, &this->colliderTris);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/func_80B6F90C.s")
|
||||
void BgKin2Picture_SetupWait(BgKin2Picture* this) {
|
||||
this->actionFunc = BgKin2Picture_Wait;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Update.s")
|
||||
void BgKin2Picture_Wait(BgKin2Picture* this, PlayState* play) {
|
||||
// hit by projectile
|
||||
if (this->colliderTris.base.acFlags & AC_HIT) {
|
||||
this->colliderTris.base.acFlags &= ~AC_HIT;
|
||||
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||
BgKin2Picture_SetupPlayCutscene(this);
|
||||
} else { // Gold Skulltula can be heard behind Skullkid's painting.
|
||||
if (this->skulltulaNoiseTimer >= 0) {
|
||||
if (this->skulltulaNoiseTimer == 0) {
|
||||
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EN_STALGOLD_ROLL);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Kin2_Picture/BgKin2Picture_Draw.s")
|
||||
if (Rand_ZeroOne() < 0.1f) {
|
||||
this->skulltulaNoiseTimer = Rand_S16Offset(40, 80);
|
||||
} else {
|
||||
this->skulltulaNoiseTimer = 8;
|
||||
}
|
||||
} else {
|
||||
this->skulltulaNoiseTimer--;
|
||||
}
|
||||
}
|
||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base);
|
||||
}
|
||||
}
|
||||
|
||||
void BgKin2Picture_SetupPlayCutscene(BgKin2Picture* this) {
|
||||
this->actionFunc = BgKin2Picture_PlayCutscene;
|
||||
}
|
||||
|
||||
void BgKin2Picture_PlayCutscene(BgKin2Picture* this, PlayState* play) {
|
||||
if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
|
||||
ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
|
||||
this->cutsceneStarted = true;
|
||||
BgKin2Picture_SetupShiver(this);
|
||||
} else {
|
||||
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||
}
|
||||
}
|
||||
|
||||
void BgKin2Picture_SetupShiver(BgKin2Picture* this) {
|
||||
this->paintingTimer = 13;
|
||||
this->xOffsetAngle = 0;
|
||||
this->yOffsetAngle = 0;
|
||||
this->actionFunc = BgKin2Picture_Shiver;
|
||||
}
|
||||
|
||||
void BgKin2Picture_Shiver(BgKin2Picture* this, PlayState* play) {
|
||||
s32 pad;
|
||||
Vec3f basePosOffset;
|
||||
Vec3f posOffset;
|
||||
|
||||
this->paintingTimer--;
|
||||
if (this->paintingTimer <= 0) {
|
||||
Math_Vec3f_Copy(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos);
|
||||
BgKin2Picture_SetupFall(this);
|
||||
} else {
|
||||
this->xOffsetAngle += 0x7BAC;
|
||||
this->yOffsetAngle += 0x4E20;
|
||||
basePosOffset.x = Math_CosS(this->xOffsetAngle);
|
||||
basePosOffset.y = Math_CosS(this->yOffsetAngle) * 0.2f;
|
||||
basePosOffset.z = 0.0f;
|
||||
Matrix_RotateYS(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
|
||||
Matrix_MultVec3f(&basePosOffset, &posOffset);
|
||||
Math_Vec3f_Sum(&this->dyna.actor.home.pos, &posOffset, &this->dyna.actor.world.pos);
|
||||
}
|
||||
}
|
||||
|
||||
void BgKin2Picture_SetupFall(BgKin2Picture* this) {
|
||||
this->landTimer = 0;
|
||||
this->step = 0;
|
||||
this->paintingTimer = 4;
|
||||
this->actionFunc = BgKin2Picture_Fall;
|
||||
}
|
||||
|
||||
void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) {
|
||||
if (this->paintingTimer > 0) {
|
||||
this->paintingTimer--;
|
||||
|
||||
if (this->paintingTimer == 0) {
|
||||
BgKin2Picture_SpawnSkulltula(this, play);
|
||||
}
|
||||
}
|
||||
|
||||
Actor_MoveWithGravity(&this->dyna.actor);
|
||||
Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
|
||||
if (this->dyna.actor.bgCheckFlags & 1) {
|
||||
Math_StepToS(&this->step, 0x7D0, 0x78);
|
||||
|
||||
if (this->landTimer < 3) {
|
||||
this->landTimer++;
|
||||
|
||||
if (this->dyna.actor.velocity.y <= 0.01f) {
|
||||
this->dyna.actor.velocity.y *= -0.7f;
|
||||
|
||||
if (this->dyna.actor.velocity.y > 6.0f) {
|
||||
this->dyna.actor.velocity.y = 6.0f;
|
||||
}
|
||||
|
||||
if (this->landTimer < 3) {
|
||||
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SMALL_WOODPLATE_BOUND_0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Actor_SetFocus(&this->dyna.actor, 23.0f);
|
||||
|
||||
if (!this->hasSpawnedDust && (this->dyna.actor.shape.rot.x > 0x3300)) {
|
||||
BgKin2Picture_SpawnDust(this, play);
|
||||
this->hasSpawnedDust = true;
|
||||
}
|
||||
|
||||
if (Math_ScaledStepToS(&this->dyna.actor.shape.rot.x, 0x4000, this->step)) { // facing the floor
|
||||
this->dyna.actor.shape.yOffset = 40.0f;
|
||||
|
||||
if (this->cutsceneStarted) {
|
||||
ActorCutscene_Stop(this->dyna.actor.cutscene);
|
||||
}
|
||||
|
||||
func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN);
|
||||
BgKin2Picture_SetupDoNothing(this);
|
||||
} else {
|
||||
this->dyna.actor.shape.yOffset = Math_SinS(this->dyna.actor.shape.rot.x) * 40.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void BgKin2Picture_SetupDoNothing(BgKin2Picture* this) {
|
||||
this->actionFunc = BgKin2Picture_DoNothing;
|
||||
}
|
||||
|
||||
void BgKin2Picture_DoNothing(BgKin2Picture* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void BgKin2Picture_Update(Actor* thisx, PlayState* play) {
|
||||
BgKin2Picture* this = THIS;
|
||||
|
||||
this->actionFunc(this, play);
|
||||
}
|
||||
|
||||
void BgKin2Picture_Draw(Actor* thisx, PlayState* play) {
|
||||
BgKin2Picture* this = THIS;
|
||||
|
||||
Gfx_DrawDListOpa(play, gOceanSpiderHouseSkullkidPaintingDL);
|
||||
}
|
||||
|
||||
@@ -3,17 +3,27 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define BG_KIN2_PICTURE_SKULLTULA_COLLECTED(thisx) (((thisx)->params >> 5) & 1)
|
||||
#define BG_KIN2_PICTURE_GET_3FC(thisx) ((u8)(((thisx & 0x3FC)) >> 2))
|
||||
#define BG_KIN2_PICTURE_SKULLTULA_SPAWN_PARAM(thisx) ((((thisx)->params & 0x1F) << 2) | 0xFF03)
|
||||
|
||||
struct BgKin2Picture;
|
||||
|
||||
typedef void (*BgKin2PictureActionFunc)(struct BgKin2Picture*, PlayState*);
|
||||
|
||||
typedef struct BgKin2Picture {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0xF0];
|
||||
/* 0x000 */ DynaPolyActor dyna;
|
||||
/* 0x15C */ ColliderTris colliderTris;
|
||||
/* 0x17C */ ColliderTrisElement colliderElement[2];
|
||||
/* 0x234 */ BgKin2PictureActionFunc actionFunc;
|
||||
/* 0x238 */ char unk_238[0xC];
|
||||
/* 0x238 */ s16 step;
|
||||
/* 0x23A */ s8 paintingTimer; // Used for when painting is shaking and for timing Gold Skulltula spawn.
|
||||
/* 0x23B */ s8 landTimer;
|
||||
/* 0x23C */ s16 xOffsetAngle;
|
||||
/* 0x23E */ s16 yOffsetAngle;
|
||||
/* 0x240 */ s8 cutsceneStarted;
|
||||
/* 0x241 */ s8 hasSpawnedDust;
|
||||
/* 0x242 */ s8 skulltulaNoiseTimer;
|
||||
} BgKin2Picture; // size = 0x244
|
||||
|
||||
extern const ActorInit Bg_Kin2_Picture_InitVars;
|
||||
|
||||
#endif // Z_BG_KIN2_PICTURE_H
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include "z_bg_umajump.h"
|
||||
#include "assets/objects/object_umajump/object_umajump.h"
|
||||
|
||||
#define FLAGS 0x00000000
|
||||
|
||||
@@ -13,8 +14,10 @@
|
||||
void BgUmajump_Init(Actor* thisx, PlayState* play);
|
||||
void BgUmajump_Destroy(Actor* thisx, PlayState* play);
|
||||
void BgUmajump_Update(Actor* thisx, PlayState* play);
|
||||
void BgUmajump_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_8091A5A0(Actor* thisx, PlayState* play);
|
||||
|
||||
#if 0
|
||||
const ActorInit Bg_Umajump_InitVars = {
|
||||
ACTOR_BG_UMAJUMP,
|
||||
ACTORCAT_PROP,
|
||||
@@ -27,34 +30,190 @@ const ActorInit Bg_Umajump_InitVars = {
|
||||
(ActorFunc)NULL,
|
||||
};
|
||||
|
||||
// static InitChainEntry sInitChain[] = {
|
||||
static InitChainEntry D_8091A810[] = {
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_F32(uncullZoneScale, 1200, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneDownward, 300, ICHAIN_CONTINUE),
|
||||
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#endif
|
||||
void func_80919F30(BgUmajump* this, PlayState* play) {
|
||||
if (this->rotationTimer >= 90) {
|
||||
this->rotationTimer = 0;
|
||||
}
|
||||
|
||||
extern InitChainEntry D_8091A810[];
|
||||
this->rotationTimer++;
|
||||
this->dyna.actor.shape.yOffset =
|
||||
Math_SinS((this->rotationTimer / 90.0f) * 0x10000) * (20.0f / this->dyna.actor.scale.y);
|
||||
}
|
||||
|
||||
extern UNK_TYPE D_06001220;
|
||||
extern UNK_TYPE D_06001558;
|
||||
void BgUmajump_StopCutscene(BgUmajump* this, PlayState* play) {
|
||||
if ((play->csCtx.frames >= 6) && !this->hasSoundPlayed) {
|
||||
this->hasSoundPlayed = true;
|
||||
play_sound(NA_SE_EV_KID_HORSE_NEIGH);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_80919F30.s")
|
||||
if (play->csCtx.state == CS_STATE_0) {
|
||||
ActorCutscene_Stop(this->dyna.actor.cutscene);
|
||||
this->dyna.actor.update = Actor_Noop;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_80919FC8.s")
|
||||
void BgUmajump_PlayCutscene(BgUmajump* this, PlayState* play) {
|
||||
if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
|
||||
ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
|
||||
gSaveContext.save.weekEventReg[89] |= 0x20;
|
||||
this->actionFunc = BgUmajump_StopCutscene;
|
||||
} else {
|
||||
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A044.s")
|
||||
void BgUmajump_CheckDistance(BgUmajump* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A0B8.s")
|
||||
if ((this->horse != NULL) && (player != NULL) &&
|
||||
(Math3D_XZDistance(this->horse->world.pos.x, this->horse->world.pos.z, player->actor.world.pos.x,
|
||||
player->actor.world.pos.z) < 1400.0f)) {
|
||||
this->actionFunc = BgUmajump_PlayCutscene;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Init.s")
|
||||
void BgUmajump_Init(Actor* thisx, PlayState* play) {
|
||||
BgUmajump* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Destroy.s")
|
||||
Actor_ProcessInitChain(thisx, sInitChain);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/BgUmajump_Update.s")
|
||||
this->actionFunc = NULL;
|
||||
this->horse = NULL;
|
||||
this->hasSoundPlayed = false;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A5A0.s")
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Umajump/func_8091A7B0.s")
|
||||
this->objectIndex = BG_UMAJUMP_GET_OBJECT_INDEX(thisx);
|
||||
thisx->params = BG_UMAJUMP_GET_FF(thisx);
|
||||
|
||||
if ((thisx->params == BG_UMAJUMP_TYPE_2)) {
|
||||
if ((((play->sceneId == SCENE_F01) && !(gSaveContext.save.weekEventReg[89] & 0x20)) &&
|
||||
!CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) &&
|
||||
(thisx->cutscene != -1)) {
|
||||
this->actionFunc = BgUmajump_CheckDistance;
|
||||
thisx->update = func_8091A5A0;
|
||||
thisx->flags |= ACTOR_FLAG_10;
|
||||
this->horse = SubS_FindActor(play, this->horse, ACTORCAT_BG, ACTOR_EN_HORSE);
|
||||
} else {
|
||||
thisx->update = Actor_Noop;
|
||||
}
|
||||
} else {
|
||||
this->objectIndex = Object_GetIndex(&play->objectCtx, OBJECT_UMAJUMP);
|
||||
|
||||
if (this->objectIndex < 0) {
|
||||
Actor_MarkForDeath(thisx);
|
||||
}
|
||||
|
||||
if ((thisx->params == BG_UMAJUMP_TYPE_3) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, thisx->world.pos.x, thisx->world.pos.y,
|
||||
thisx->world.pos.z, thisx->shape.rot.x, thisx->shape.rot.y, thisx->shape.rot.z, 0x3E);
|
||||
Actor_MarkForDeath(thisx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BgUmajump_Destroy(Actor* thisx, PlayState* play) {
|
||||
BgUmajump* this = THIS;
|
||||
|
||||
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
}
|
||||
|
||||
void BgUmajump_Update(Actor* thisx, PlayState* play) {
|
||||
BgUmajump* this = THIS;
|
||||
|
||||
if (Object_IsLoaded(&play->objectCtx, this->objectIndex)) {
|
||||
this->dyna.actor.objBankIndex = this->objectIndex;
|
||||
this->dyna.actor.draw = BgUmajump_Draw;
|
||||
|
||||
Actor_SetObjectDependency(play, &this->dyna.actor);
|
||||
|
||||
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
|
||||
if (gSaveContext.save.weekEventReg[22] & 1) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
}
|
||||
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) {
|
||||
if (!(gSaveContext.save.weekEventReg[22] & 1)) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
}
|
||||
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_4) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_3)) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
} else {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001438);
|
||||
}
|
||||
|
||||
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_1) {
|
||||
this->rotationTimer = 0;
|
||||
this->actionFunc = func_80919F30;
|
||||
this->dyna.actor.update = func_8091A5A0;
|
||||
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_3) {
|
||||
this->dyna.actor.update = func_8091A5A0;
|
||||
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_5) || (this->dyna.actor.params == BG_UMAJUMP_TYPE_6)) {
|
||||
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
|
||||
if ((this->dyna.bgId == BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1)) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
}
|
||||
} else if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_6) && (this->dyna.bgId == BGACTOR_NEG_ONE) &&
|
||||
(!(gSaveContext.save.weekEventReg[22] & 1) ||
|
||||
((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) &&
|
||||
((gSaveContext.save.time >= CLOCK_TIME(5, 30)) &&
|
||||
(gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
}
|
||||
func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
this->dyna.actor.update = func_8091A5A0;
|
||||
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_4) {
|
||||
func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
this->dyna.actor.update = Actor_Noop;
|
||||
} else {
|
||||
this->dyna.actor.update = Actor_Noop;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_8091A5A0(Actor* thisx, PlayState* play) {
|
||||
BgUmajump* this = THIS;
|
||||
|
||||
if (this->actionFunc != NULL) {
|
||||
this->actionFunc(this, play);
|
||||
}
|
||||
|
||||
if ((this->dyna.actor.params == BG_UMAJUMP_TYPE_3) && CHECK_QUEST_ITEM(QUEST_SONG_EPONA)) {
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
|
||||
this->dyna.actor.world.pos.z, this->dyna.actor.shape.rot.x, this->dyna.actor.shape.rot.y,
|
||||
this->dyna.actor.shape.rot.z, 0x3E);
|
||||
Actor_MarkForDeath(&this->dyna.actor);
|
||||
}
|
||||
|
||||
if (this->dyna.actor.params == BG_UMAJUMP_TYPE_5) {
|
||||
if ((this->dyna.bgId == BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1)) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
} else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && !(gSaveContext.save.weekEventReg[22] & 1)) {
|
||||
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
}
|
||||
} else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_6) {
|
||||
if ((this->dyna.bgId == BGACTOR_NEG_ONE) &&
|
||||
(!(gSaveContext.save.weekEventReg[22] & 1) ||
|
||||
((gSaveContext.save.day == 2) && (gSaveContext.save.isNight == true) &&
|
||||
(gSaveContext.save.time >= CLOCK_TIME(5, 30)) && (gSaveContext.save.time <= CLOCK_TIME(6, 0))))) {
|
||||
DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558);
|
||||
} else if ((this->dyna.bgId != BGACTOR_NEG_ONE) && (gSaveContext.save.weekEventReg[22] & 1) &&
|
||||
((gSaveContext.save.day != 2) || (gSaveContext.save.isNight != true) ||
|
||||
(gSaveContext.save.time < CLOCK_TIME(5, 30)) || (gSaveContext.save.time > CLOCK_TIME(6, 0)))) {
|
||||
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BgUmajump_Draw(Actor* thisx, PlayState* play) {
|
||||
BgUmajump* this = THIS;
|
||||
|
||||
if (this->dyna.bgId != BGACTOR_NEG_ONE) {
|
||||
Gfx_DrawDListOpa(play, gHorseJumpFenceDL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,31 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define BG_UMAJUMP_GET_OBJECT_INDEX(thisx) (((thisx)->params >> 8) & 0xFF)
|
||||
#define BG_UMAJUMP_GET_FF(thisx) ((thisx)->params & 0xFF)
|
||||
|
||||
typedef enum {
|
||||
BG_UMAJUMP_TYPE_1 = 1,
|
||||
BG_UMAJUMP_TYPE_2,
|
||||
BG_UMAJUMP_TYPE_3,
|
||||
BG_UMAJUMP_TYPE_4,
|
||||
BG_UMAJUMP_TYPE_5,
|
||||
BG_UMAJUMP_TYPE_6,
|
||||
} BgUmaJumpType;
|
||||
|
||||
struct BgUmajump;
|
||||
|
||||
typedef void (*BgUmajumpActionFunc)(struct BgUmajump*, PlayState*);
|
||||
|
||||
typedef struct BgUmajump {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x28];
|
||||
/* 0x000 */ DynaPolyActor dyna;
|
||||
/* 0x15C */ BgUmajumpActionFunc actionFunc;
|
||||
/* 0x160 */ union {
|
||||
s32 objectIndex;
|
||||
s32 rotationTimer; // y rotation
|
||||
};
|
||||
/* 0x164 */ s32 hasSoundPlayed;
|
||||
/* 0x168 */ Actor* horse;
|
||||
} BgUmajump; // size = 0x16C
|
||||
|
||||
extern const ActorInit Bg_Umajump_InitVars;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,10 +8,36 @@ struct DmChar08;
|
||||
typedef void (*DmChar08ActionFunc)(struct DmChar08*, PlayState*);
|
||||
|
||||
typedef struct DmChar08 {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x5C];
|
||||
/* 0x000 */ DynaPolyActor dyna;
|
||||
/* 0x15C */ SkelAnime skelAnime;
|
||||
/* 0x1A0 */ DmChar08ActionFunc actionFunc;
|
||||
/* 0x1A4 */ char unk_1A4[0x68];
|
||||
/* 0x1A4 */ Actor* palmTree1;
|
||||
/* 0x1A8 */ Actor* palmTree2;
|
||||
/* 0x1AC */ Vec3f tree1Pos;
|
||||
/* 0x1B8 */ Vec3f tree2Pos;
|
||||
/* 0x1C4 */ Vec3f bubblePos;
|
||||
/* 0x1D0 */ Vec3f focusPos;
|
||||
/* 0x1DC */ UNK_TYPE1 unk_1DC[8];
|
||||
/* 0x1E4 */ f32 targetYPos;
|
||||
/* 0x1E8 */ UNK_TYPE1 unk_1E8[8];
|
||||
/* 0x1F0 */ f32 unk_1F0;
|
||||
/* 0x1F4 */ s16 unk_1F4;
|
||||
/* 0x1F6 */ s16 unk_1F6;
|
||||
/* 0x1F6 */ s16 blinkTimer;
|
||||
/* 0x1FA */ s16 unk_1FA;
|
||||
/* 0x1FC */ u16 unk_1FC;
|
||||
/* 0x1FE */ u8 bubbleCount;
|
||||
/* 0x1FF */ u8 unk_1FF;
|
||||
/* 0x200 */ u8 eyeMode;
|
||||
/* 0x201 */ u8 eyeIndex;
|
||||
/* 0x202 */ u8 animIndex;
|
||||
/* 0x203 */ u8 unk_203;
|
||||
/* 0x204 */ UNK_TYPE1 unk_204;
|
||||
/* 0x205 */ u8 alpha;
|
||||
/* 0x206 */ u8 unk_206;
|
||||
/* 0x207 */ u8 unk_207;
|
||||
/* 0x208 */ u8 unk_208;
|
||||
/* 0x209 */ u8 dynapolyInitialized;
|
||||
} DmChar08; // size = 0x20C
|
||||
|
||||
extern const ActorInit Dm_Char08_InitVars;
|
||||
|
||||
@@ -31,7 +31,7 @@ const ActorInit Dm_Char09_InitVars = {
|
||||
};
|
||||
|
||||
static AnimationInfo sAnimationInfo[] = {
|
||||
{ &object_bee_Anim_00005C, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
{ &gBeeFlyingAnim, 1.0f, 0.0f, -1.0f, ANIMMODE_LOOP, 0.0f },
|
||||
};
|
||||
|
||||
void DmChar09_ChangeAnim(SkelAnime* skelAnime, AnimationInfo* animationInfo, u16 animIndex) {
|
||||
@@ -53,8 +53,8 @@ void DmChar09_Init(Actor* thisx, PlayState* play) {
|
||||
DmChar09* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &object_bee_Skel_001398, &object_bee_Anim_00005C, this->jointTable,
|
||||
this->morphTable, OBJECT_BEE_LIMB_MAX);
|
||||
SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->jointTable, this->morphTable,
|
||||
OBJECT_BEE_LIMB_MAX);
|
||||
DmChar09_ChangeAnim(&this->skelAnime, sAnimationInfo, 0);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->unk_228 = Rand_ZeroOne() * 65535.0f;
|
||||
|
||||
@@ -56,7 +56,7 @@ void EffKamejimaWave_Init(Actor* thisx, PlayState* play) {
|
||||
this->actionFunc = func_80BCEC6C;
|
||||
sVtxAlpha = 255;
|
||||
}
|
||||
D_80BCF1C4 = Lib_SegmentedToVirtual(object_kamejima_Matanimheader_001AF0);
|
||||
D_80BCF1C4 = Lib_SegmentedToVirtual(gTurtleWaveTexAnim);
|
||||
}
|
||||
|
||||
void EffKamejimaWave_Destroy(Actor* thisx, PlayState* play) {
|
||||
@@ -137,7 +137,7 @@ void EffKamejimaWave_Update(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
void EffKamejimaWave_SetVtxAlpha(u8 alpha) {
|
||||
Vtx* vtx = Lib_SegmentedToVirtual(&object_kamejima_Vtx_000000);
|
||||
Vtx* vtx = Lib_SegmentedToVirtual(&gTurtleWaveVtx);
|
||||
|
||||
vtx[2].v.cn[3] = alpha;
|
||||
vtx[6].v.cn[3] = alpha;
|
||||
@@ -165,7 +165,7 @@ void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) {
|
||||
AnimatedMat_Draw(play, D_80BCF1C4);
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, primColor.r, primColor.g, primColor.b, 255);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, envColor.r, envColor.g, envColor.b, 255);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_kamejima_DL_000140);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gTurtleWaveDL);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx);
|
||||
}
|
||||
|
||||
@@ -15,12 +15,12 @@ void EnBee_Destroy(Actor* thisx, PlayState* play);
|
||||
void EnBee_Update(Actor* thisx, PlayState* play);
|
||||
void EnBee_Draw(Actor* thisx, PlayState* play);
|
||||
|
||||
void func_80B5A9E8(EnBee* this, PlayState* play);
|
||||
void func_80B5AC3C(EnBee* this, PlayState* play);
|
||||
void func_80B5A854(EnBee* this);
|
||||
void func_80B5ABC4(EnBee* this);
|
||||
void EnBee_SetupFlyIdle(EnBee* this);
|
||||
void EnBee_FlyIdle(EnBee* this, PlayState* play);
|
||||
void EnBee_SetupAttack(EnBee* this);
|
||||
void EnBee_Attack(EnBee* this, PlayState* play);
|
||||
|
||||
s32 D_80B5B1F0 = 0;
|
||||
s32 sNumLoadedBees = 0;
|
||||
|
||||
const ActorInit En_Bee_InitVars = {
|
||||
ACTOR_EN_BEE,
|
||||
@@ -94,14 +94,14 @@ void EnBee_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
this->actor.colChkInfo.mass = 10;
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 19.0f);
|
||||
SkelAnime_Init(play, &this->skelAnime, &object_bee_Skel_001398, &object_bee_Anim_00005C, this->morphTable,
|
||||
this->jointTable, OBJECT_BEE_LIMB_MAX);
|
||||
SkelAnime_Init(play, &this->skelAnime, &gBeeSkel, &gBeeFlyingAnim, this->morphTable, this->jointTable,
|
||||
OBJECT_BEE_LIMB_MAX);
|
||||
this->actor.colChkInfo.health = 1;
|
||||
this->actor.colChkInfo.damageTable = &sDamageTable;
|
||||
this->actor.targetMode = 6;
|
||||
Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
|
||||
this->unk_218 = D_80B5B1F0;
|
||||
D_80B5B1F0++;
|
||||
this->instanceId = sNumLoadedBees;
|
||||
sNumLoadedBees++;
|
||||
this->actor.shape.shadowScale = 12.0f;
|
||||
|
||||
if (ActorCutscene_GetCurrentIndex() != -1) {
|
||||
@@ -109,7 +109,7 @@ void EnBee_Init(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
this->actor.hintId = TATL_HINT_ID_GIANT_BEE;
|
||||
func_80B5A854(this);
|
||||
EnBee_SetupFlyIdle(this);
|
||||
}
|
||||
|
||||
void EnBee_Destroy(Actor* thisx, PlayState* play) {
|
||||
@@ -118,121 +118,122 @@ void EnBee_Destroy(Actor* thisx, PlayState* play) {
|
||||
Collider_DestroyCylinder(play, &this->collider);
|
||||
}
|
||||
|
||||
void func_80B5A854(EnBee* this) {
|
||||
void EnBee_SetupFlyIdle(EnBee* this) {
|
||||
s32 pad;
|
||||
Vec3f sp48;
|
||||
s16 sp46;
|
||||
Vec3f tempPos;
|
||||
s16 yawOffset;
|
||||
|
||||
Animation_Change(&this->skelAnime, &object_bee_Anim_00005C, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_bee_Anim_00005C), 0, -10.0f);
|
||||
Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
|
||||
Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f);
|
||||
Math_Vec3f_Copy(&tempPos, &this->actor.home.pos);
|
||||
|
||||
sp46 = (this->unk_218 * 0x700) + 0x2000;
|
||||
sp48.x += Math_SinS(sp46) * 50.0f;
|
||||
sp48.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
|
||||
sp48.z += Math_CosS(sp46) * 50.0f;
|
||||
yawOffset = (this->instanceId * 0x700) + 0x2000;
|
||||
tempPos.x += Math_SinS(yawOffset) * 50.0f;
|
||||
tempPos.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
|
||||
tempPos.z += Math_CosS(yawOffset) * 50.0f;
|
||||
|
||||
Math_Vec3f_Copy(&this->unk_21C[0], &sp48);
|
||||
Math_Vec3f_Copy(&sp48, &this->actor.home.pos);
|
||||
Math_Vec3f_Copy(&this->targetPos[0], &tempPos);
|
||||
Math_Vec3f_Copy(&tempPos, &this->actor.home.pos);
|
||||
|
||||
sp48.x += Math_SinS(sp46 - 0x4000) * 50.0f;
|
||||
sp48.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
|
||||
sp48.z += Math_CosS(sp46 - 0x4000) * 50.0f;
|
||||
tempPos.x += Math_SinS(yawOffset - 0x4000) * 50.0f;
|
||||
tempPos.y = Rand_ZeroFloat(50.0f) + (this->actor.floorHeight + 30.0f);
|
||||
tempPos.z += Math_CosS(yawOffset - 0x4000) * 50.0f;
|
||||
|
||||
Math_Vec3f_Copy(&this->unk_21C[1], &sp48);
|
||||
Math_Vec3f_Copy(&this->targetPos[1], &tempPos);
|
||||
|
||||
this->unk_204 = Rand_S16Offset(0x14, 0x1E);
|
||||
this->unk_208 = 0;
|
||||
this->actionFunc = func_80B5A9E8;
|
||||
this->attackDelayTimer = Rand_S16Offset(20, 30);
|
||||
this->isHostile = false;
|
||||
this->actionFunc = EnBee_FlyIdle;
|
||||
}
|
||||
|
||||
void func_80B5A9E8(EnBee* this, PlayState* play) {
|
||||
Vec3f sp3C;
|
||||
void EnBee_FlyIdle(EnBee* this, PlayState* play) {
|
||||
Vec3f nextPos;
|
||||
s32 pad[2];
|
||||
|
||||
if ((this->actor.category != ACTORCAT_ENEMY) && (ActorCutscene_GetCurrentIndex() == -1)) {
|
||||
func_800BC154(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
|
||||
}
|
||||
|
||||
Math_Vec3f_Copy(&sp3C, &this->unk_21C[this->unk_214]);
|
||||
sp3C.x += Math_SinS(this->unk_20C) * 30.0f;
|
||||
sp3C.z += Math_CosS(this->unk_20C) * 30.0f;
|
||||
Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]);
|
||||
nextPos.x += Math_SinS(this->targetYaw) * 30.0f;
|
||||
nextPos.z += Math_CosS(this->targetYaw) * 30.0f;
|
||||
|
||||
if (!(this->unk_218 & 1)) {
|
||||
this->unk_20C += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
|
||||
if ((this->instanceId % 2) == 0) {
|
||||
this->targetYaw += (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
|
||||
} else {
|
||||
this->unk_20C -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
|
||||
this->targetYaw -= (s16)((s32)randPlusMinusPoint5Scaled(1000.0f) + 4000);
|
||||
}
|
||||
|
||||
this->unk_210 += 1000;
|
||||
this->actor.velocity.y = Math_SinS(this->unk_210);
|
||||
this->flightHoverOffset += 1000;
|
||||
this->actor.velocity.y = Math_SinS(this->flightHoverOffset);
|
||||
|
||||
if (this->unk_20C > 0x10000) {
|
||||
this->unk_20C = 0;
|
||||
this->unk_214++;
|
||||
this->unk_214 &= 1;
|
||||
if (this->targetYaw > 0x10000) {
|
||||
this->targetYaw = 0;
|
||||
this->posIndex++;
|
||||
this->posIndex &= 1;
|
||||
}
|
||||
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp3C), 1, 0x7D0, 0);
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &nextPos), 1, 0x7D0, 0);
|
||||
Math_ApproachF(&this->actor.speedXZ, 3.0f, 0.3f, 1.0f);
|
||||
|
||||
if ((this->unk_204 == 0) && (this->actor.params != 0)) {
|
||||
func_80B5ABC4(this);
|
||||
if ((this->attackDelayTimer == 0) && (this->actor.params != BEE_BEHAVIOR_IDLE)) {
|
||||
EnBee_SetupAttack(this);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B5ABC4(EnBee* this) {
|
||||
Animation_Change(&this->skelAnime, &object_bee_Anim_00005C, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_bee_Anim_00005C), 0, -10.0f);
|
||||
this->unk_208 = 1;
|
||||
this->actionFunc = func_80B5AC3C;
|
||||
void EnBee_SetupAttack(EnBee* this) {
|
||||
Animation_Change(&this->skelAnime, &gBeeFlyingAnim, 1.0f, 0.0f, Animation_GetLastFrame(&gBeeFlyingAnim), 0, -10.0f);
|
||||
this->isHostile = true;
|
||||
this->actionFunc = EnBee_Attack;
|
||||
}
|
||||
|
||||
void func_80B5AC3C(EnBee* this, PlayState* play) {
|
||||
void EnBee_Attack(EnBee* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
Vec3f sp88;
|
||||
f32 rnd;
|
||||
f32 phi_fs1;
|
||||
Vec3f nextPos;
|
||||
f32 rand;
|
||||
f32 yawOffset;
|
||||
s32 i;
|
||||
|
||||
Math_Vec3f_Copy(&sp88, &player->actor.world.pos);
|
||||
phi_fs1 = (this->unk_218 * 0x700) + 0x2000;
|
||||
Math_Vec3f_Copy(&nextPos, &player->actor.world.pos);
|
||||
yawOffset = (this->instanceId * 0x700) + 0x2000;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
rnd = randPlusMinusPoint5Scaled(20.0f);
|
||||
sp88.x += Math_SinS((this->actor.yawTowardsPlayer + ((f32)this->unk_20C)) + phi_fs1) * (rnd + 30.0f);
|
||||
sp88.y = (Math_SinS(this->unk_210) * 10.0f) + (player->actor.floorHeight + 40.0f);
|
||||
rnd = randPlusMinusPoint5Scaled(20.0f);
|
||||
sp88.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->unk_20C + phi_fs1) * (rnd + 30.0f);
|
||||
Math_Vec3f_Copy(&this->unk_21C[i], &sp88);
|
||||
phi_fs1 -= 16384.0f;
|
||||
rand = randPlusMinusPoint5Scaled(20.0f);
|
||||
nextPos.x += Math_SinS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
|
||||
nextPos.y = (Math_SinS(this->flightHoverOffset) * 10.0f) + (player->actor.floorHeight + 40.0f);
|
||||
rand = randPlusMinusPoint5Scaled(20.0f);
|
||||
|
||||
nextPos.z += Math_CosS((f32)this->actor.yawTowardsPlayer + this->targetYaw + yawOffset) * (rand + 30.0f);
|
||||
Math_Vec3f_Copy(&this->targetPos[i], &nextPos);
|
||||
yawOffset -= 0x4000;
|
||||
}
|
||||
|
||||
Math_Vec3f_Copy(&sp88, &this->unk_21C[this->unk_214]);
|
||||
Math_Vec3f_Copy(&nextPos, &this->targetPos[this->posIndex]);
|
||||
|
||||
if (!(this->unk_218 & 1)) {
|
||||
this->unk_20C += (this->unk_218 * 0x700) + (s32)randPlusMinusPoint5Scaled((this->unk_218 * 0x700) * 0.5f);
|
||||
if ((this->instanceId % 2) == 0) {
|
||||
this->targetYaw +=
|
||||
(this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
|
||||
} else {
|
||||
this->unk_20C -= (this->unk_218 * 0x700) + (s32)randPlusMinusPoint5Scaled((this->unk_218 * 0x700) * 0.5f);
|
||||
this->targetYaw -=
|
||||
(this->instanceId * 0x700) + (s32)randPlusMinusPoint5Scaled((this->instanceId * 0x700) * 0.5f);
|
||||
}
|
||||
|
||||
this->unk_210 += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000;
|
||||
this->flightHoverOffset += (s32)randPlusMinusPoint5Scaled(500.0f) + 1000;
|
||||
|
||||
if (this->unk_20C > 0x10000) {
|
||||
this->unk_20C = 0;
|
||||
this->unk_214++;
|
||||
this->unk_214 &= 1;
|
||||
if (this->targetYaw > 0x10000) {
|
||||
this->targetYaw = 0;
|
||||
this->posIndex++;
|
||||
this->posIndex &= 1;
|
||||
}
|
||||
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &sp88), 1, 0x1388, 0);
|
||||
Math_ApproachF(&this->actor.world.pos.y, sp88.y, 0.3f, 3.0f);
|
||||
Math_SmoothStepToS(&this->actor.world.rot.y, Math_Vec3f_Yaw(&this->actor.world.pos, &nextPos), 1, 0x1388, 0);
|
||||
Math_ApproachF(&this->actor.world.pos.y, nextPos.y, 0.3f, 3.0f);
|
||||
Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.3f, 1.0f);
|
||||
}
|
||||
|
||||
void func_80B5AF80(EnBee* this, PlayState* play) {
|
||||
if ((this->unk_206 == 0) && (this->collider.base.atFlags & AC_HIT)) {
|
||||
void EnBee_UpdateDamage(EnBee* this, PlayState* play) {
|
||||
if ((this->sfxHitTimer == 0) && (this->collider.base.atFlags & AT_HIT)) {
|
||||
AudioSfx_StopByPosAndId(&this->actor.projectedPos, NA_SE_EN_BEE_FLY - SFX_FLAG);
|
||||
this->unk_206 = 5;
|
||||
this->sfxHitTimer = 5;
|
||||
}
|
||||
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
@@ -253,16 +254,16 @@ void EnBee_Update(Actor* thisx, PlayState* play) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
|
||||
if (this->actor.category == ACTORCAT_ENEMY) {
|
||||
if (this->unk_204 != 0) {
|
||||
this->unk_204--;
|
||||
if (this->attackDelayTimer != 0) {
|
||||
this->attackDelayTimer--;
|
||||
}
|
||||
if (this->unk_206 != 0) {
|
||||
this->unk_206--;
|
||||
if (this->sfxHitTimer != 0) {
|
||||
this->sfxHitTimer--;
|
||||
}
|
||||
}
|
||||
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_BEE_FLY - SFX_FLAG);
|
||||
func_80B5AF80(this, play);
|
||||
EnBee_UpdateDamage(this, play);
|
||||
Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot);
|
||||
Actor_SetFocus(&this->actor, 0.0f);
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
|
||||
@@ -8,20 +8,25 @@ struct EnBee;
|
||||
|
||||
typedef void (*EnBeeActionFunc)(struct EnBee*, PlayState*);
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ BEE_BEHAVIOR_IDLE = 0,
|
||||
/* 1 */ BEE_BEHAVIOR_ATTACK,
|
||||
} BeeBehaviorType;
|
||||
|
||||
typedef struct EnBee {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ Vec3s morphTable[OBJECT_BEE_LIMB_MAX];
|
||||
/* 0x1C4 */ Vec3s jointTable[OBJECT_BEE_LIMB_MAX];
|
||||
/* 0x200 */ EnBeeActionFunc actionFunc;
|
||||
/* 0x204 */ s16 unk_204;
|
||||
/* 0x206 */ s16 unk_206;
|
||||
/* 0x208 */ s16 unk_208;
|
||||
/* 0x20C */ s32 unk_20C;
|
||||
/* 0x210 */ s32 unk_210;
|
||||
/* 0x214 */ s32 unk_214;
|
||||
/* 0x218 */ s32 unk_218;
|
||||
/* 0x21C */ Vec3f unk_21C[2];
|
||||
/* 0x204 */ s16 attackDelayTimer;
|
||||
/* 0x206 */ s16 sfxHitTimer;
|
||||
/* 0x208 */ s16 isHostile; // set and not used
|
||||
/* 0x20C */ s32 targetYaw;
|
||||
/* 0x210 */ s32 flightHoverOffset;
|
||||
/* 0x214 */ s32 posIndex;
|
||||
/* 0x218 */ s32 instanceId;
|
||||
/* 0x21C */ Vec3f targetPos[2];
|
||||
/* 0x234 */ UNK_TYPE1 pad234[8];
|
||||
/* 0x23C */ ColliderCylinder collider;
|
||||
} EnBee; // size = 0x288
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,6 +2,7 @@
|
||||
#define Z_EN_STONE_HEISHI_H
|
||||
|
||||
#include "global.h"
|
||||
#include "assets/objects/object_sdn/object_sdn.h"
|
||||
|
||||
struct EnStoneheishi;
|
||||
|
||||
@@ -9,9 +10,22 @@ typedef void (*EnStoneheishiActionFunc)(struct EnStoneheishi*, PlayState*);
|
||||
|
||||
typedef struct EnStoneheishi {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x110];
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ Vec3s jointTable[SOLDIER_LIMB_MAX];
|
||||
/* 0x1EE */ Vec3s morphTable[SOLDIER_LIMB_MAX];
|
||||
/* 0x254 */ EnStoneheishiActionFunc actionFunc;
|
||||
/* 0x258 */ char unk_258[0x6C];
|
||||
/* 0x258 */ Vec3s headRot;
|
||||
/* 0x25E */ Vec3s targetHeadRot;
|
||||
/* 0x264 */ s32 animIndex;
|
||||
/* 0x268 */ s16 timer;
|
||||
/* 0x26A */ s16 drinkBottleState;
|
||||
/* 0x26C */ f32 endFrame;
|
||||
/* 0x270 */ s16 action;
|
||||
/* 0x272 */ s16 textIdIndex;
|
||||
/* 0x274 */ s16 textIdSet;
|
||||
/* 0x276 */ u8 bottleDisplay;
|
||||
/* 0x277 */ u8 playerGivesBluePotion;
|
||||
/* 0x278 */ ColliderCylinder collider;
|
||||
} EnStoneheishi; // size = 0x2C4
|
||||
|
||||
extern const ActorInit En_Stone_heishi_InitVars;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user