Merge branch 'master' into parameter

This commit is contained in:
engineer124
2022-10-12 15:08:49 -04:00
25 changed files with 2472 additions and 459 deletions
+34 -24
View File
@@ -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>
+93 -75
View File
@@ -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>
+28 -10
View File
@@ -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>
+1 -1
View 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>
+17
View 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>
+1
View File
@@ -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);
+4 -8
View File
@@ -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
+175 -16
View File
@@ -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);
}
+84 -83
View File
@@ -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);
+13 -8
View File
@@ -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