merge master

This commit is contained in:
engineer124
2022-10-02 19:56:28 -04:00
89 changed files with 8018 additions and 3543 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -51,10 +51,10 @@
<Texture Name="gKotakeSkinTex" OutName="kotake_skin" Format="ci8" Width="16" Height="8" Offset="0xA678" />
<Texture Name="gKotakeMouthTex" OutName="kotake_mouth" Format="ci8" Width="8" Height="8" Offset="0xA6F8" />
<Texture Name="gKotakeHairTex" OutName="kotake_hair" Format="rgba16" Width="8" Height="32" Offset="0xA738" />
<Texture Name="gKotakeBraidEndTex" OutName="kotake_BRAID_end" Format="rgba16" Width="8" Height="8" Offset="0xA938" />
<Texture Name="gKotakeBraidEndTex" OutName="kotake_braid_end" Format="rgba16" Width="8" Height="8" Offset="0xA938" />
<Texture Name="gKotakeEarTex" OutName="kotake_ear" Format="ci8" Width="8" Height="8" Offset="0xA9B8" />
<Texture Name="gKotakeCollarNeckTex" OutName="kotake_collar_neck" Format="rgba16" Width="4" Height="8" Offset="0xA9F8" />
<Texture Name="gKotakeFingersTex" OutName="kotake_finger" Format="ci8" Width="8" Height="16" Offset="0xAA38" />
<Texture Name="gKotakeFingerTex" OutName="kotake_finger" Format="ci8" Width="8" Height="16" Offset="0xAA38" />
<Texture Name="gKotakeBroomHandleTex" OutName="kotake_broom_handle" Format="rgba16" Width="8" Height="8" Offset="0xAAB8" />->
<Texture Name="gKotakeBroomHeadTex" OutName="kotake_broom_head" Format="rgba16" Width="16" Height="32" Offset="0xAB38" />
<Texture Name="gKotakeJewelHolderTex" OutName="kotake_jewel_holder" Format="rgba16" Width="16" Height="8" Offset="0xAF38" />
+113 -104
View File
@@ -1,108 +1,117 @@
<Root>
<!-- Assets for Koume -->
<File Name="object_tru" Segment="6">
<DList Name="object_tru_DL_000390" Offset="0x390" />
<DList Name="object_tru_DL_0004C8" Offset="0x4C8" />
<Texture Name="object_tru_Tex_000560" OutName="tex_000560" Format="rgba16" Width="16" Height="32" Offset="0x560" />
<Texture Name="object_tru_Tex_000960" OutName="tex_000960" Format="rgba16" Width="32" Height="32" Offset="0x960" />
<Texture Name="object_tru_Tex_001160" OutName="tex_001160" Format="rgba16" Width="32" Height="32" Offset="0x1160" />
<DList Name="object_tru_DL_001F90" Offset="0x1F90" />
<DList Name="object_tru_DL_0020C8" Offset="0x20C8" />
<DList Name="object_tru_DL_002160" Offset="0x2160" />
<Texture Name="object_tru_Tex_002168" OutName="tex_002168" Format="i4" Width="16" Height="16" Offset="0x2168" />
<Animation Name="object_tru_Anim_002BD8" Offset="0x2BD8" />
<Animation Name="object_tru_Anim_003698" Offset="0x3698" />
<Animation Name="object_tru_Anim_00446C" Offset="0x446C" />
<Animation Name="object_tru_Anim_007FA0" Offset="0x7FA0" />
<Animation Name="object_tru_Anim_009348" Offset="0x9348" />
<DList Name="object_tru_DL_00B730" Offset="0xB730" />
<DList Name="object_tru_DL_00B940" Offset="0xB940" />
<DList Name="object_tru_DL_00BA88" Offset="0xBA88" />
<DList Name="object_tru_DL_00BBB8" Offset="0xBBB8" />
<DList Name="object_tru_DL_00C630" Offset="0xC630" />
<DList Name="object_tru_DL_00C730" Offset="0xC730" />
<DList Name="object_tru_DL_00C810" Offset="0xC810" />
<DList Name="object_tru_DL_00C860" Offset="0xC860" />
<DList Name="object_tru_DL_00C960" Offset="0xC960" />
<DList Name="object_tru_DL_00CA40" Offset="0xCA40" />
<DList Name="object_tru_DL_00CB50" Offset="0xCB50" />
<DList Name="object_tru_DL_00CCC0" Offset="0xCCC0" />
<DList Name="object_tru_DL_00CFA8" Offset="0xCFA8" />
<DList Name="object_tru_DL_00D0C0" Offset="0xD0C0" />
<DList Name="object_tru_DL_00D1D0" Offset="0xD1D0" />
<DList Name="object_tru_DL_00D2E0" Offset="0xD2E0" />
<DList Name="object_tru_DL_00D450" Offset="0xD450" />
<DList Name="object_tru_DL_00D738" Offset="0xD738" />
<DList Name="object_tru_DL_00DA38" Offset="0xDA38" />
<DList Name="object_tru_DL_00DB50" Offset="0xDB50" />
<DList Name="object_tru_DL_00DC40" Offset="0xDC40" />
<DList Name="object_tru_DL_00DC88" Offset="0xDC88" />
<DList Name="object_tru_DL_00DD38" Offset="0xDD38" />
<DList Name="object_tru_DL_00DDD0" Offset="0xDDD0" />
<DList Name="object_tru_DL_00DE18" Offset="0xDE18" />
<DList Name="object_tru_DL_00DEC8" Offset="0xDEC8" />
<Animation Name="object_tru_Anim_00EEDC" Offset="0xEEDC" />
<Animation Name="object_tru_Anim_00F9A0" Offset="0xF9A0" />
<Animation Name="object_tru_Anim_0108AC" Offset="0x108AC" />
<Animation Name="object_tru_Anim_011F88" Offset="0x11F88" />
<Animation Name="object_tru_Anim_014728" Offset="0x14728" />
<Animation Name="object_tru_Anim_015068" Offset="0x15068" />
<Animation Name="object_tru_Anim_015CA0" Offset="0x15CA0" />
<Animation Name="object_tru_Anim_016B4C" Offset="0x16B4C" />
<Texture Name="object_tru_TLUT_016B60" OutName="tlut_016B60" Format="rgba16" Width="16" Height="16" Offset="0x16B60" />
<Texture Name="object_tru_TLUT_016D60" OutName="tlut_016D60" Format="rgba16" Width="16" Height="16" Offset="0x16D60" />
<Texture Name="object_tru_TLUT_016F60" OutName="tlut_016F60" Format="rgba16" Width="16" Height="16" Offset="0x16F60" />
<Texture Name="object_tru_TLUT_017160" OutName="tlut_017160" Format="rgba16" Width="16" Height="16" Offset="0x17160" />
<Texture Name="object_tru_TLUT_017360" OutName="tlut_017360" Format="rgba16" Width="16" Height="16" Offset="0x17360" />
<Texture Name="object_tru_TLUT_017560" OutName="tlut_017560" Format="rgba16" Width="16" Height="16" Offset="0x17560" />
<Texture Name="object_tru_Tex_017760" OutName="tex_017760" Format="rgba16" Width="32" Height="32" Offset="0x17760" />
<Texture Name="object_tru_Tex_017F60" OutName="tex_017F60" Format="rgba16" Width="16" Height="16" Offset="0x17F60" />
<Texture Name="object_tru_Tex_018160" OutName="tex_018160" Format="rgba16" Width="16" Height="16" Offset="0x18160" />
<Texture Name="object_tru_Tex_018360" OutName="tex_018360" Format="rgba16" Width="16" Height="16" Offset="0x18360" />
<Texture Name="object_tru_Tex_018560" OutName="tex_018560" Format="ci8" Width="16" Height="8" Offset="0x18560" />
<Texture Name="object_tru_Tex_0185E0" OutName="tex_0185E0" Format="ci8" Width="8" Height="8" Offset="0x185E0" />
<Texture Name="object_tru_Tex_018620" OutName="tex_018620" Format="rgba16" Width="8" Height="32" Offset="0x18620" />
<Texture Name="object_tru_Tex_018820" OutName="tex_018820" Format="rgba16" Width="8" Height="8" Offset="0x18820" />
<Texture Name="object_tru_Tex_0188A0" OutName="tex_0188A0" Format="ci8" Width="8" Height="8" Offset="0x188A0" />
<Texture Name="object_tru_Tex_0188E0" OutName="tex_0188E0" Format="rgba16" Width="4" Height="8" Offset="0x188E0" />
<Texture Name="object_tru_Tex_018920" OutName="tex_018920" Format="ci8" Width="8" Height="16" Offset="0x18920" />
<Texture Name="object_tru_Tex_0189A0" OutName="tex_0189A0" Format="rgba16" Width="8" Height="8" Offset="0x189A0" />
<Texture Name="object_tru_Tex_018A20" OutName="tex_018A20" Format="rgba16" Width="16" Height="32" Offset="0x18A20" />
<Texture Name="object_tru_Tex_018E20" OutName="tex_018E20" Format="rgba16" Width="16" Height="8" Offset="0x18E20" />
<Texture Name="object_tru_Tex_018F20" OutName="tex_018F20" Format="ci8" Width="8" Height="8" Offset="0x18F20" />
<Texture Name="object_tru_Tex_018F60" OutName="tex_018F60" Format="ci8" Width="8" Height="8" Offset="0x18F60" />
<Texture Name="object_tru_Tex_018FA0" OutName="tex_018FA0" Format="rgba16" Width="32" Height="32" Offset="0x18FA0" />
<Texture Name="object_tru_Tex_0197A0" OutName="tex_0197A0" Format="rgba16" Width="32" Height="32" Offset="0x197A0" />
<Texture Name="object_tru_Tex_019FA0" OutName="tex_019FA0" Format="rgba16" Width="32" Height="32" Offset="0x19FA0" />
<Texture Name="object_tru_Tex_01A7A0" OutName="tex_01A7A0" Format="rgba16" Width="8" Height="8" Offset="0x1A7A0" />
<DList Name="object_tru_DL_01A820" Offset="0x1A820" />
<DList Name="object_tru_DL_01A830" Offset="0x1A830" />
<Limb Name="object_tru_Standardlimb_01A8C0" Type="Standard" EnumName="OBJECT_TRU_LIMB_01" Offset="0x1A8C0" />
<Limb Name="object_tru_Standardlimb_01A8CC" Type="Standard" EnumName="OBJECT_TRU_LIMB_02" Offset="0x1A8CC" />
<Limb Name="object_tru_Standardlimb_01A8D8" Type="Standard" EnumName="OBJECT_TRU_LIMB_03" Offset="0x1A8D8" />
<Limb Name="object_tru_Standardlimb_01A8E4" Type="Standard" EnumName="OBJECT_TRU_LIMB_04" Offset="0x1A8E4" />
<Limb Name="object_tru_Standardlimb_01A8F0" Type="Standard" EnumName="OBJECT_TRU_LIMB_05" Offset="0x1A8F0" />
<Limb Name="object_tru_Standardlimb_01A8FC" Type="Standard" EnumName="OBJECT_TRU_LIMB_06" Offset="0x1A8FC" />
<Limb Name="object_tru_Standardlimb_01A908" Type="Standard" EnumName="OBJECT_TRU_LIMB_07" Offset="0x1A908" />
<Limb Name="object_tru_Standardlimb_01A914" Type="Standard" EnumName="OBJECT_TRU_LIMB_08" Offset="0x1A914" />
<Limb Name="object_tru_Standardlimb_01A920" Type="Standard" EnumName="OBJECT_TRU_LIMB_09" Offset="0x1A920" />
<Limb Name="object_tru_Standardlimb_01A92C" Type="Standard" EnumName="OBJECT_TRU_LIMB_0A" Offset="0x1A92C" />
<Limb Name="object_tru_Standardlimb_01A938" Type="Standard" EnumName="OBJECT_TRU_LIMB_0B" Offset="0x1A938" />
<Limb Name="object_tru_Standardlimb_01A944" Type="Standard" EnumName="OBJECT_TRU_LIMB_0C" Offset="0x1A944" />
<Limb Name="object_tru_Standardlimb_01A950" Type="Standard" EnumName="OBJECT_TRU_LIMB_0D" Offset="0x1A950" />
<Limb Name="object_tru_Standardlimb_01A95C" Type="Standard" EnumName="OBJECT_TRU_LIMB_0E" Offset="0x1A95C" />
<Limb Name="object_tru_Standardlimb_01A968" Type="Standard" EnumName="OBJECT_TRU_LIMB_0F" Offset="0x1A968" />
<Limb Name="object_tru_Standardlimb_01A974" Type="Standard" EnumName="OBJECT_TRU_LIMB_10" Offset="0x1A974" />
<Limb Name="object_tru_Standardlimb_01A980" Type="Standard" EnumName="OBJECT_TRU_LIMB_11" Offset="0x1A980" />
<Limb Name="object_tru_Standardlimb_01A98C" Type="Standard" EnumName="OBJECT_TRU_LIMB_12" Offset="0x1A98C" />
<Limb Name="object_tru_Standardlimb_01A998" Type="Standard" EnumName="OBJECT_TRU_LIMB_13" Offset="0x1A998" />
<Limb Name="object_tru_Standardlimb_01A9A4" Type="Standard" EnumName="OBJECT_TRU_LIMB_14" Offset="0x1A9A4" />
<Limb Name="object_tru_Standardlimb_01A9B0" Type="Standard" EnumName="OBJECT_TRU_LIMB_15" Offset="0x1A9B0" />
<Limb Name="object_tru_Standardlimb_01A9BC" Type="Standard" EnumName="OBJECT_TRU_LIMB_16" Offset="0x1A9BC" />
<Limb Name="object_tru_Standardlimb_01A9C8" Type="Standard" EnumName="OBJECT_TRU_LIMB_17" Offset="0x1A9C8" />
<Limb Name="object_tru_Standardlimb_01A9D4" Type="Standard" EnumName="OBJECT_TRU_LIMB_18" Offset="0x1A9D4" />
<Limb Name="object_tru_Standardlimb_01A9E0" Type="Standard" EnumName="OBJECT_TRU_LIMB_19" Offset="0x1A9E0" />
<Limb Name="object_tru_Standardlimb_01A9EC" Type="Standard" EnumName="OBJECT_TRU_LIMB_1A" Offset="0x1A9EC" />
<Skeleton Name="object_tru_Skel_01AA60" Type="Flex" LimbType="Standard" LimbNone="OBJECT_TRU_LIMB_NONE" LimbMax="OBJECT_TRU_LIMB_MAX" EnumName="ObjectTruLimb" Offset="0x1AA60" />
<Animation Name="object_tru_Anim_01B5C4" Offset="0x1B5C4" />
<DList Name="gKoumeTargetDL" Offset="0x390" />
<DList Name="gKoumeChainDL" Offset="0x4C8" />
<Texture Name="gKoumeChainTex" OutName="koume_chain" Format="rgba16" Width="16" Height="32" Offset="0x560" />
<Texture Name="gKoumeTargetSideTex" OutName="koume_target_side" Format="rgba16" Width="32" Height="32" Offset="0x960" />
<Texture Name="gKoumeTargetFaceTex" OutName="koume_target_face" Format="rgba16" Width="32" Height="32" Offset="0x1160" />
<DList Name="gKoumeBottleDL" Offset="0x1F90" />
<DList Name="gKoumePotionDL" Offset="0x20C8" />
<DList Name="gKoumeEmptyDL" Offset="0x2160" />
<Texture Name="gKoumeBottleTex" OutName="koume_bottle" Format="i4" Width="16" Height="16" Offset="0x2168" />
<Animation Name="gKoumeFlyAnim" Offset="0x2BD8" />
<Animation Name="gKoumeTakeOffAnim" Offset="0x3698" />
<Animation Name="gKoumeHoverAnim" Offset="0x446C" />
<Animation Name="gKoumeDrinkAnim" Offset="0x7FA0" />
<Animation Name="gKoumeInjuredRaiseHeadAnim" Offset="0x9348" />
<DList Name="gKoumePelvisDL" Offset="0xB730" />
<DList Name="gKoumeTorsoDL" Offset="0xB940" />
<DList Name="gKoumeNeckDL" Offset="0xBA88" />
<DList Name="gKoumeHeadDL" Offset="0xBBB8" />
<DList Name="gKoumeLeftBraidStartDL" Offset="0xC630" />
<DList Name="gKoumeLeftBraidEndDL" Offset="0xC730" />
<DList Name="gKoumeTeethDL" Offset="0xC810" />
<DList Name="gKoumeRightBraidStartDL" Offset="0xC860" />
<DList Name="gKoumeRightBraidEndDL" Offset="0xC960" />
<DList Name="gKoumeRightSleeveStartDL" Offset="0xCA40" />
<DList Name="gKoumeRightSleeveFrontDL" Offset="0xCB50" />
<DList Name="gKoumeRightHandDL" Offset="0xCCC0" />
<DList Name="gKoumeRightSleeveMidDL" Offset="0xCFA8" />
<DList Name="gKoumeRightSleeveEndDL" Offset="0xD0C0" />
<DList Name="gKoumeLeftSleeveStartDL" Offset="0xD1D0" />
<DList Name="gKoumeLeftSleeveFrontDL" Offset="0xD2E0" />
<DList Name="gKoumeLeftHandDL" Offset="0xD450" />
<DList Name="gKoumeBroomDL" Offset="0xD738" />
<DList Name="gKoumeLeftSleeveMidDL" Offset="0xDA38" />
<DList Name="gKoumeLeftSleeveEndDL" Offset="0xDB50" />
<DList Name="gKoumeRightThighDL" Offset="0xDC40" /> <!-- Renders a single triangle instead of a normal-looking limb -->
<DList Name="gKoumeRightShinDL" Offset="0xDC88" />
<DList Name="gKoumeRightFootDL" Offset="0xDD38" />
<DList Name="gKoumeLeftThighDL" Offset="0xDDD0" /> <!-- Renders a single triangle instead of a normal-looking limb -->
<DList Name="gKoumeLeftShinDL" Offset="0xDE18" />
<DList Name="gKoumeLeftFootDL" Offset="0xDEC8" />
<Animation Name="gKoumeInjuredTalkAnim" Offset="0xEEDC" />
<Animation Name="gKoumeInjuredLyingDownAnim" Offset="0xF9A0" />
<Animation Name="gKoumeTryGetUpAnim" Offset="0x108AC" />
<Animation Name="gKoumeHealedAnim" Offset="0x11F88" />
<Animation Name="gKoumeTakeAnim" Offset="0x14728" />
<Animation Name="gKoumeIdleAnim" Offset="0x15068" />
<Animation Name="gKoumeInjuredHeadUpAnim" Offset="0x15CA0" />
<Animation Name="gKoumeFinishedDrinkingAnim" Offset="0x16B4C" />
<Texture Name="gKoumeSkinTLUT" OutName="koume_skin_tlut" Format="rgba16" Width="16" Height="16" Offset="0x16B60" />
<Texture Name="gKoumeMouthTLUT" OutName="koume_mouth_tlut" Format="rgba16" Width="16" Height="16" Offset="0x16D60" />
<Texture Name="gKoumeEarTLUT" OutName="koume_ear_tlut" Format="rgba16" Width="16" Height="16" Offset="0x16F60" />
<Texture Name="gKoumeFingerTLUT" OutName="koume_finger_tlut" Format="rgba16" Width="16" Height="16" Offset="0x17160" />
<Texture Name="gKoumeNeckTLUT" OutName="koume_neck_tlut" Format="rgba16" Width="16" Height="16" Offset="0x17360" />
<Texture Name="gKoumeNostrilsTLUT" OutName="koume_nostrils_tlut" Format="rgba16" Width="16" Height="16" Offset="0x17560" />
<Texture Name="gKoumeGerudoFabricTex" OutName="koume_gerudo_fabric" Format="rgba16" Width="32" Height="32" Offset="0x17760" />
<Texture Name="gKoumeRobeTex" OutName="koume_robe" Format="rgba16" Width="16" Height="16" Offset="0x17F60" />
<Texture Name="gKoumeRobePatternTex" OutName="koume_robe_pattern" Format="rgba16" Width="16" Height="16" Offset="0x18160" />
<Texture Name="gKoumeRobeTrimTex" OutName="koume_robe_trim" Format="rgba16" Width="16" Height="16" Offset="0x18360" />
<Texture Name="gKoumeSkinTex" OutName="koume_skin" Format="ci8" Width="16" Height="8" Offset="0x18560" />
<Texture Name="gKoumeMouthTex" OutName="koume_mouth" Format="ci8" Width="8" Height="8" Offset="0x185E0" />
<Texture Name="gKoumeHairTex" OutName="koume_hair" Format="rgba16" Width="8" Height="32" Offset="0x18620" />
<Texture Name="gKoumeBraidEndTex" OutName="koume_braid_end" Format="rgba16" Width="8" Height="8" Offset="0x18820" />
<Texture Name="gKoumeEarTex" OutName="koume_ear" Format="ci8" Width="8" Height="8" Offset="0x188A0" />
<Texture Name="gKoumeCollarNeckTex" OutName="koume_collar_neck" Format="rgba16" Width="4" Height="8" Offset="0x188E0" />
<Texture Name="gKoumeFingerTex" OutName="koume_finger" Format="ci8" Width="8" Height="16" Offset="0x18920" />
<Texture Name="gKoumeBroomHandleTex" OutName="koume_broom_handle" Format="rgba16" Width="8" Height="8" Offset="0x189A0" />
<Texture Name="gKoumeBroomHeadTex" OutName="koume_broom_head" Format="rgba16" Width="16" Height="32" Offset="0x18A20" />
<Texture Name="gKoumeJewelHolderTex" OutName="koume_jewel_holder" Format="rgba16" Width="16" Height="8" Offset="0x18E20" />
<Texture Name="gKoumeNeckTex" OutName="koume_neck" Format="ci8" Width="8" Height="8" Offset="0x18F20" />
<Texture Name="gKoumeNostrilsTex" OutName="koume_nostrils" Format="ci8" Width="8" Height="8" Offset="0x18F60" />
<Texture Name="gKoumeEyeOpenTex" OutName="koume_eye_open" Format="rgba16" Width="32" Height="32" Offset="0x18FA0" />
<Texture Name="gKoumeEyeHalfTex" OutName="koume_eye_half" Format="rgba16" Width="32" Height="32" Offset="0x197A0" />
<Texture Name="gKoumeEyeClosedTex" OutName="koume_eye_closed" Format="rgba16" Width="32" Height="32" Offset="0x19FA0" />
<Texture Name="gKoumeJewelTex" OutName="koume_jewel" Format="rgba16" Width="8" Height="8" Offset="0x1A7A0" />
<DList Name="gKoumeDustMaterialDL" Offset="0x1A820" />
<DList Name="gKoumeDustModelDL" Offset="0x1A830" />
<Limb Name="gKoumePelvisLimb" Type="Standard" EnumName="KOUME_LIMB_PELVIS" Offset="0x1A8C0" />
<Limb Name="gKoumeLeftThighLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_THIGH" Offset="0x1A8CC" />
<Limb Name="gKoumeLeftShinLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_SHIN" Offset="0x1A8D8" />
<Limb Name="gKoumeLeftFootLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_FOOT" Offset="0x1A8E4" />
<Limb Name="gKoumeRightThighLimb" Type="Standard" EnumName="KOUME_LIMB_RIGH_THIGH" Offset="0x1A8F0" />
<Limb Name="gKoumeRightShinLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_SHIN" Offset="0x1A8FC" />
<Limb Name="gKoumeRightFootLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_FOOT" Offset="0x1A908" />
<Limb Name="gKoumeTorsoLimb" Type="Standard" EnumName="KOUME_LIMB_TORSO_LIMB" Offset="0x1A914" />
<Limb Name="gKoumeLeftSleeveStartLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_SLEEVE_START" Offset="0x1A920" />
<Limb Name="gKoumeLeftSleeveMidLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_SLEEVE_MID" Offset="0x1A92C" />
<Limb Name="gKoumeLeftSleeveEndLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_SLEEVE_END" Offset="0x1A938" />
<Limb Name="gKoumeLeftSleeveFrontLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_SLEEVE_FRONT" Offset="0x1A944" />
<Limb Name="gKoumeLeftHandLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_HAND" Offset="0x1A950" />
<Limb Name="gKoumeBroomLimb" Type="Standard" EnumName="KOUME_LIMB_BROOM" Offset="0x1A95C" />
<Limb Name="gKoumeRightSleeveStartLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_SLEEVE_START" Offset="0x1A968" />
<Limb Name="gKoumeRightSleeveMidLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_SLEEVE_MID" Offset="0x1A974" />
<Limb Name="gKoumeRightSleeveEndLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_SLEEVE_END" Offset="0x1A980" />
<Limb Name="gKoumeRightSleeveFrontLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_SLEEVE_FRONT" Offset="0x1A98C" />
<Limb Name="gKoumeRightHandLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_HAND" Offset="0x1A998" />
<Limb Name="gKoumeNeckLimb" Type="Standard" EnumName="KOUME_LIMB_NECK" Offset="0x1A9A4" />
<Limb Name="gKoumeHeadLimb" Type="Standard" EnumName="KOUME_LIMB_HEAD" Offset="0x1A9B0" />
<Limb Name="gKoumeRightBraidStartLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_BRAID_START" Offset="0x1A9BC" />
<Limb Name="gKoumeRightBraidEndLimb" Type="Standard" EnumName="KOUME_LIMB_RIGHT_BRAID_END" Offset="0x1A9C8" />
<Limb Name="gKoumeTeethLimb" Type="Standard" EnumName="KOUME_LIMB_TEETH" Offset="0x1A9D4" />
<Limb Name="gKoumeLeftBraidStartLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_BRAID_START" Offset="0x1A9E0" />
<Limb Name="gKoumeLeftBraidEndLimb" Type="Standard" EnumName="KOUME_LIMB_LEFT_BRAID_END" Offset="0x1A9EC" />
<Skeleton Name="gKoumeSkel" Type="Flex" LimbType="Standard" LimbNone="KOUME_LIMB_NONE" LimbMax="KOUME_LIMB_MAX" EnumName="KoumeLimb" Offset="0x1AA60" />
<Animation Name="gKoumeShakeAnim" Offset="0x1B5C4" />
</File>
</Root>
+144 -98
View File
@@ -1,102 +1,148 @@
<Root>
<!-- Assets for Wizrobe, its platforms, and its magical attacks. -->
<File Name="object_wiz" Segment="6">
<Animation Name="object_wiz_Anim_0007B0" Offset="0x7B0" />
<Texture Name="object_wiz_Tex_0007C0" OutName="tex_0007C0" Format="i4" Width="32" Height="64" Offset="0x7C0" />
<Texture Name="object_wiz_Tex_000BC0" OutName="tex_000BC0" Format="i4" Width="32" Height="32" Offset="0xBC0" />
<Texture Name="object_wiz_Tex_000DC0" OutName="tex_000DC0" Format="i4" Width="16" Height="16" Offset="0xDC0" />
<DList Name="object_wiz_DL_000E70" Offset="0xE70" />
<DList Name="object_wiz_DL_000F28" Offset="0xF28" />
<DList Name="object_wiz_DL_000FD8" Offset="0xFD8" />
<DList Name="object_wiz_DL_0010E0" Offset="0x10E0" />
<DList Name="gWizzrobePlatform" Offset="0x10E8" />
<Texture Name="object_wiz_Tex_001198" OutName="tex_001198" Format="rgba16" Width="16" Height="32" Offset="0x1198" />
<!-- <Blob Name="object_wiz_Blob_0015A0" Size="0x10" Offset="0x15A0" /> -->
<Collision Name="object_wiz_Colheader_001690" Offset="0x1690" />
<DList Name="object_wiz_DL_001860" Offset="0x1860" />
<Texture Name="object_wiz_Tex_0019F0" OutName="tex_0019F0" Format="i4" Width="32" Height="32" Offset="0x19F0" />
<Texture Name="object_wiz_Tex_001BF0" OutName="tex_001BF0" Format="i4" Width="16" Height="32" Offset="0x1BF0" />
<Texture Name="object_wiz_Tex_001CF0" OutName="tex_001CF0" Format="i8" Width="32" Height="32" Offset="0x1CF0" />
<TextureAnimation Name="object_wiz_Matanimheader_00211C" Offset="0x211C" />
<Animation Name="object_wiz_Anim_002218" Offset="0x2218" />
<Animation Name="object_wiz_Anim_002458" Offset="0x2458" />
<Animation Name="object_wiz_Anim_0025F0" Offset="0x25F0" />
<DList Name="object_wiz_DL_002630" Offset="0x2630" />
<Texture Name="object_wiz_Tex_002700" OutName="tex_002700" Format="i4" Width="32" Height="32" Offset="0x2700" />
<Texture Name="object_wiz_Tex_002900" OutName="tex_002900" Format="i4" Width="32" Height="32" Offset="0x2900" />
<TextureAnimation Name="object_wiz_Matanimheader_002B08" Offset="0x2B08" />
<DList Name="object_wiz_DL_002B40" Offset="0x2B40" />
<Texture Name="object_wiz_Tex_002BD0" OutName="tex_002BD0" Format="i4" Width="32" Height="32" Offset="0x2BD0" />
<TextureAnimation Name="object_wiz_Matanimheader_002DF4" Offset="0x2DF4" />
<Texture Name="object_wiz_Tex_002E00" OutName="tex_002E00" Format="i4" Width="32" Height="32" Offset="0x2E00" />
<DList Name="object_wiz_DL_003120" Offset="0x3120" />
<Texture Name="object_wiz_Tex_0031E0" OutName="tex_0031E0" Format="i4" Width="32" Height="64" Offset="0x31E0" />
<DList Name="object_wiz_DL_003640" Offset="0x3640" />
<Texture Name="object_wiz_Tex_003700" OutName="tex_003700" Format="i8" Width="32" Height="32" Offset="0x3700" />
<Texture Name="object_wiz_Tex_003B00" OutName="tex_003B00" Format="i4" Width="32" Height="64" Offset="0x3B00" />
<DList Name="object_wiz_DL_003FC0" Offset="0x3FC0" />
<Texture Name="object_wiz_Tex_0040B0" OutName="tex_0040B0" Format="i8" Width="64" Height="64" Offset="0x40B0" />
<!-- <Blob Name="object_wiz_Blob_0050B0" Size="0x40" Offset="0x50B0" /> -->
<DList Name="object_wiz_DL_005190" Offset="0x5190" />
<Texture Name="object_wiz_Tex_005230" OutName="tex_005230" Format="i4" Width="32" Height="64" Offset="0x5230" />
<Texture Name="object_wiz_Tex_005630" OutName="tex_005630" Format="i4" Width="16" Height="16" Offset="0x5630" />
<DList Name="object_wiz_DL_005750" Offset="0x5750" />
<DList Name="gWizzrobePlatformCenter" Offset="0x5870" />
<DList Name="object_wiz_DL_005938" Offset="0x5938" />
<Texture Name="object_wiz_Tex_005940" OutName="tex_005940" Format="i4" Width="32" Height="32" Offset="0x5940" />
<Texture Name="object_wiz_Tex_005B40" OutName="tex_005B40" Format="i4" Width="16" Height="32" Offset="0x5B40" />
<TextureAnimation Name="gWizzrobePlatformTexAnim" Offset="0x5C64" />
<Animation Name="object_wiz_Anim_0060E8" Offset="0x60E8" />
<Animation Name="object_wiz_Anim_0066C0" Offset="0x66C0" />
<DList Name="object_wiz_DL_008640" Offset="0x8640" />
<DList Name="object_wiz_DL_0086F0" Offset="0x86F0" />
<DList Name="object_wiz_DL_008790" Offset="0x8790" />
<DList Name="object_wiz_DL_008868" Offset="0x8868" />
<DList Name="object_wiz_DL_008938" Offset="0x8938" />
<DList Name="object_wiz_DL_0089D8" Offset="0x89D8" />
<DList Name="object_wiz_DL_008AB0" Offset="0x8AB0" />
<DList Name="object_wiz_DL_008B80" Offset="0x8B80" />
<DList Name="object_wiz_DL_008C10" Offset="0x8C10" />
<DList Name="object_wiz_DL_008CE8" Offset="0x8CE8" />
<DList Name="object_wiz_DL_008F18" Offset="0x8F18" />
<DList Name="object_wiz_DL_0091D8" Offset="0x91D8" />
<DList Name="object_wiz_DL_009560" Offset="0x9560" />
<DList Name="object_wiz_DL_009608" Offset="0x9608" />
<DList Name="object_wiz_DL_0096E0" Offset="0x96E0" />
<DList Name="object_wiz_DL_0097B8" Offset="0x97B8" />
<DList Name="object_wiz_DL_009918" Offset="0x9918" />
<DList Name="object_wiz_DL_0099C0" Offset="0x99C0" />
<DList Name="object_wiz_DL_009A98" Offset="0x9A98" />
<Texture Name="object_wiz_Tex_009B70" OutName="tex_009B70" Format="rgba16" Width="8" Height="8" Offset="0x9B70" />
<Texture Name="object_wiz_Tex_009BF0" OutName="tex_009BF0" Format="rgba16" Width="32" Height="32" Offset="0x9BF0" />
<Texture Name="object_wiz_Tex_00A3F0" OutName="tex_00A3F0" Format="rgba16" Width="8" Height="16" Offset="0xA3F0" />
<Texture Name="object_wiz_Tex_00A4F0" OutName="tex_00A4F0" Format="rgba16" Width="16" Height="16" Offset="0xA4F0" />
<Texture Name="object_wiz_Tex_00A6F0" OutName="tex_00A6F0" Format="rgba16" Width="16" Height="16" Offset="0xA6F0" />
<Texture Name="object_wiz_Tex_00A8F0" OutName="tex_00A8F0" Format="rgba16" Width="8" Height="8" Offset="0xA8F0" />
<Texture Name="object_wiz_Tex_00A970" OutName="tex_00A970" Format="rgba16" Width="8" Height="16" Offset="0xA970" />
<Texture Name="object_wiz_Tex_00AA70" OutName="tex_00AA70" Format="rgba16" Width="16" Height="4" Offset="0xAA70" />
<Texture Name="object_wiz_Tex_00AAF0" OutName="tex_00AAF0" Format="rgba16" Width="16" Height="16" Offset="0xAAF0" />
<Texture Name="object_wiz_Tex_00ACF0" OutName="tex_00ACF0" Format="rgba16" Width="16" Height="16" Offset="0xACF0" />
<Texture Name="object_wiz_Tex_00AEF0" OutName="tex_00AEF0" Format="rgba16" Width="16" Height="16" Offset="0xAEF0" />
<Texture Name="object_wiz_Tex_00B0F0" OutName="tex_00B0F0" Format="rgba16" Width="16" Height="8" Offset="0xB0F0" />
<Limb Name="object_wiz_Standardlimb_00B1F0" Type="Standard" EnumName="OBJECT_WIZ_LIMB_01" Offset="0xB1F0" />
<Limb Name="object_wiz_Standardlimb_00B1FC" Type="Standard" EnumName="OBJECT_WIZ_LIMB_02" Offset="0xB1FC" />
<Limb Name="object_wiz_Standardlimb_00B208" Type="Standard" EnumName="OBJECT_WIZ_LIMB_03" Offset="0xB208" />
<Limb Name="object_wiz_Standardlimb_00B214" Type="Standard" EnumName="OBJECT_WIZ_LIMB_04" Offset="0xB214" />
<Limb Name="object_wiz_Standardlimb_00B220" Type="Standard" EnumName="OBJECT_WIZ_LIMB_05" Offset="0xB220" />
<Limb Name="object_wiz_Standardlimb_00B22C" Type="Standard" EnumName="OBJECT_WIZ_LIMB_06" Offset="0xB22C" />
<Limb Name="object_wiz_Standardlimb_00B238" Type="Standard" EnumName="OBJECT_WIZ_LIMB_07" Offset="0xB238" />
<Limb Name="object_wiz_Standardlimb_00B244" Type="Standard" EnumName="OBJECT_WIZ_LIMB_08" Offset="0xB244" />
<Limb Name="object_wiz_Standardlimb_00B250" Type="Standard" EnumName="OBJECT_WIZ_LIMB_09" Offset="0xB250" />
<Limb Name="object_wiz_Standardlimb_00B25C" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0A" Offset="0xB25C" />
<Limb Name="object_wiz_Standardlimb_00B268" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0B" Offset="0xB268" />
<Limb Name="object_wiz_Standardlimb_00B274" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0C" Offset="0xB274" />
<Limb Name="object_wiz_Standardlimb_00B280" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0D" Offset="0xB280" />
<Limb Name="object_wiz_Standardlimb_00B28C" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0E" Offset="0xB28C" />
<Limb Name="object_wiz_Standardlimb_00B298" Type="Standard" EnumName="OBJECT_WIZ_LIMB_0F" Offset="0xB298" />
<Limb Name="object_wiz_Standardlimb_00B2A4" Type="Standard" EnumName="OBJECT_WIZ_LIMB_10" Offset="0xB2A4" />
<Limb Name="object_wiz_Standardlimb_00B2B0" Type="Standard" EnumName="OBJECT_WIZ_LIMB_11" Offset="0xB2B0" />
<Limb Name="object_wiz_Standardlimb_00B2BC" Type="Standard" EnumName="OBJECT_WIZ_LIMB_12" Offset="0xB2BC" />
<Limb Name="object_wiz_Standardlimb_00B2C8" Type="Standard" EnumName="OBJECT_WIZ_LIMB_13" Offset="0xB2C8" />
<Skeleton Name="object_wiz_Skel_00B320" Type="Flex" LimbType="Standard" LimbNone="OBJECT_WIZ_LIMB_NONE" LimbMax="OBJECT_WIZ_LIMB_MAX" EnumName="ObjectWizLimb" Offset="0xB320" />
<!-- Wizrobe Animation -->
<Animation Name="gWizrobeAttackAnim" Offset="0x7B0" /> <!-- Original name is "wiz_atack" -->
<!-- Assets for the smoke that rises from the ice pool -->
<Texture Name="gWizrobeIceSmokeTex" OutName="wizrobe_ice_smoke" Format="i4" Width="32" Height="64" Offset="0x7C0" />
<Texture Name="gWizrobeIceSmokeMaskTex" OutName="wizrobe_ice_smoke_mask" Format="i4" Width="32" Height="32" Offset="0xBC0" />
<Texture Name="gWizrobeUnusedTex" OutName="wizrobe_unused" Format="i4" Width="16" Height="16" Offset="0xDC0" />
<DList Name="gWizrobeIceSmokeMaterialDL" Offset="0xE70" />
<DList Name="gWizrobeUnusedIceSmokeMaterialDL" Offset="0xF28" />
<DList Name="gWizrobeIceSmokeModelDL" Offset="0xFD8" /> <!-- Original name might have been "wiz_coolball_modelT" or "wiz_icesmoke" -->
<!-- Assets for the Wizrobe platform -->
<DList Name="gWizrobePlatformEmptyDL" Offset="0x10E0" /> <!-- Empty, probably was the transparent version of the following DL -->
<DList Name="gWizrobePlatformDL" Offset="0x10E8" /> <!-- Original name is "wiz_daiza_model" ("pedestal") -->
<Texture Name="gWizrobePlatformTex" OutName="wizrobe_platform" Format="rgba16" Width="16" Height="32" Offset="0x1198" />
<TextureAnimation Name="gWizrobePlatformEmptyTexAnim" Offset="0x15A0" />
<Collision Name="gWizrobePlatformCol" Offset="0x1690" />
<!-- Assets for the light that appears from the platform when the Wizrobe appears -->
<DList Name="gWizrobePlatformLightDL" Offset="0x1860" /> <!-- Original name is "wiz_daizalight_model" -->
<Texture Name="gWizrobePlatformLightMaskTex" OutName="wizrobe_platform_light_mask" Format="i4" Width="32" Height="32" Offset="0x19F0" />
<Texture Name="gWizrobePlatformLightBaseTex" OutName="wizrobe_platform_light_base" Format="i4" Width="16" Height="32" Offset="0x1BF0" />
<Texture Name="gWizrobePlatformLightRaysTex" OutName="wizrobe_platform_light_rays" Format="i8" Width="32" Height="32" Offset="0x1CF0" />
<TextureAnimation Name="gWizrobePlatformLightTexAnim" Offset="0x211C" />
<!-- Wizrobe Animations -->
<Animation Name="gWizrobeDamageAnim" Offset="0x2218" /> <!-- Original name is "wiz_damage" -->
<Animation Name="gWizrobeDanceAnim" Offset="0x2458" /> <!-- Original name is "wiz_dance" -->
<Animation Name="gWizrobeRunAnim" Offset="0x25F0" /> <!-- Original name is "wiz_dash" -->
<!-- Assets for the small flames during the Fire Wizrobe fight -->
<DList Name="gWizrobeSmallFlameDL" Offset="0x2630" /> <!-- Original name is "wiz_fire_model" -->
<Texture Name="gWizrobeSmallFlameTex" OutName="wizrobe_small_flame" Format="i4" Width="32" Height="32" Offset="0x2700" />
<Texture Name="gWizrobeSmallFlameMaskTex" OutName="wizrobe_small_flame_mask" Format="i4" Width="32" Height="32" Offset="0x2900" />
<!-- An unused texture animation that scrolls textures. It works okay with the small flames, so that was likely its original purpose. -->
<TextureAnimation Name="gWizrobeUnusedScrollTexAnim" Offset="0x2B08" />
<!-- Assets for the Wizrobe's magic projectile -->
<DList Name="gWizrobeMagicProjectileDL" Offset="0x2B40" /> <!-- Original name is "wiz_fireball_model" -->
<Texture Name="gWizrobeMagicProjectileTex" OutName="wizrobe_magic_projectile" Format="i4" Width="32" Height="32" Offset="0x2BD0" />
<!-- An unused texture animation that changes. Based on its placement, it may have been originally used with the magic projectile. -->
<TextureAnimation Name="gWizrobeUnusedColorChangingTexAnim" Offset="0x2DF4" />
<!-- Assets for the pool of fire that forms when the Fire Wizrobe's projectile hits something -->
<Texture Name="gWizrobeFirePoolTex" OutName="wizrobe_fire_pool" Format="i4" Width="32" Height="32" Offset="0x2E00" />
<DList Name="gWizrobeFirePoolDL" Offset="0x3120" /> <!-- Original name is "wiz_firefloor_modelT" -->
<!-- Assets for the smoke that comes off the Fire Wizrobe's fire -->
<Texture Name="gWizrobeFireSmokeTex" OutName="wizrobe_fire_smoke" Format="i4" Width="32" Height="64" Offset="0x31E0" />
<DList Name="gWizrobeFireSmokeDL" Offset="0x3640" /> <!-- Original name is "wiz_firesmoke_modelT" -->
<!-- Assets for the big flame during the Fire Wizrobe fight-->
<Texture Name="gWizrobeBigFlameTex" OutName="wizrobe_big_flame" Format="i8" Width="32" Height="32" Offset="0x3700" />
<Texture Name="gWizrobeBigFlameMaskTex" OutName="wizrobe_big_flame_mask" Format="i4" Width="32" Height="64" Offset="0x3B00" />
<DList Name="gWizrobeBigFlameDL" Offset="0x3FC0" /> <!-- Original name is "wiz_firewall_modelT" -->
<!-- Texture for the ice pool -->
<Texture Name="gWizrobeIcePoolTex" OutName="wizrobe_ice_pool" Format="i8" Width="64" Height="64" Offset="0x40B0" />
<!-- Unused vertices. Based on its placement, this may have been originally used with the ice pool. -->
<Array Name="gWizrobeUnusedVtx" Count="4" Offset="0x50B0">
<Vtx/>
</Array>
<!-- DisplayList for the ice pool -->
<DList Name="gWizrobeIcePoolDL" Offset="0x5190" /> <!-- Original name is "wiz_icefloor03_modelT" -->
<!-- Assets for the gleam on top of the ice pool-->
<Texture Name="gWizrobeIcePoolShineTex" OutName="wizrobe_ice_pool_shine" Format="i4" Width="32" Height="64" Offset="0x5230" />
<Texture Name="gWizrobeIcePoolShineMaskTex" OutName="wizrobe_ice_pool_shine_mask" Format="i4" Width="16" Height="16" Offset="0x5630" />
<DList Name="gWizrobeIcePoolShineDL" Offset="0x5750" /> <!-- Original name is "wiz_icefloor03_pika_modelT" ("pika" = onomatopoeic for "sparkle, glisten") -->
<!-- Assets for the glowing light in the center of the Wizrobe platform -->
<DList Name="gWizrobePlatformCenterDL" Offset="0x5870" /> <!-- Original name is "wiz_lighthole_modelT" -->
<DList Name="gWizrobePlatformCenterEmptyDL" Offset="0x5938" /> <!-- Empty, was probably the opaque version of the previous DL -->
<Texture Name="gWizrobePlatformCenterMaskTex" OutName="wizrobe_platform_center_mask" Format="i4" Width="32" Height="32" Offset="0x5940" />
<Texture Name="gWizrobePlatformCenterTex" OutName="wizrobe_platform_center" Format="i4" Width="16" Height="32" Offset="0x5B40" />
<TextureAnimation Name="gWizrobePlatformCenterTexAnim" Offset="0x5C64" />
<!-- Wizrobe Animations -->
<Animation Name="gWizrobeWindUpAnim" Offset="0x60E8" /> <!-- Original name is "wiz_preatack" -->
<Animation Name="gWizrobeIdleAnim" Offset="0x66C0" /> <!-- Original name is "wiz_wait" -->
<!-- Wizrobe Limb DisplayLists -->
<DList Name="gWizrobePelvisDL" Offset="0x8640" />
<DList Name="gWizrobeRightThighDL" Offset="0x86F0" />
<DList Name="gWizrobeRightShinDL" Offset="0x8790" />
<DList Name="gWizrobeRightFootDL" Offset="0x8868" />
<DList Name="gWizrobeLeftThighDL" Offset="0x8938" />
<DList Name="gWizrobeLeftShinDL" Offset="0x89D8" />
<DList Name="gWizrobeLeftFootDL" Offset="0x8AB0" />
<DList Name="gWizrobeLoinclothDL" Offset="0x8B80" />
<DList Name="gWizrobeTorsoDL" Offset="0x8C10" />
<DList Name="gWizrobeNeckDL" Offset="0x8CE8" /> <!-- Also includes the nose and ears for some reason. -->
<DList Name="gWizrobeJawDL" Offset="0x8F18" />
<DList Name="gWizrobeHeadDL" Offset="0x91D8" />
<DList Name="gWizrobeRightUpperArmDL" Offset="0x9560" />
<DList Name="gWizrobeRightForearmDL" Offset="0x9608" />
<DList Name="gWizrobeRightHandDL" Offset="0x96E0" />
<DList Name="gWizrobeStaffDL" Offset="0x97B8" />
<DList Name="gWizrobeLeftUpperArmDL" Offset="0x9918" />
<DList Name="gWizrobeLeftForearmDL" Offset="0x99C0" />
<DList Name="gWizrobeLeftHandDL" Offset="0x9A98" />
<!-- Wizrobe Textures -->
<Texture Name="gWizrobeFaceSkinTex" OutName="wizrobe_face_skin" Format="rgba16" Width="8" Height="8" Offset="0x9B70" />
<Texture Name="gWizrobeRobeTex" OutName="wizrobe_robe" Format="rgba16" Width="32" Height="32" Offset="0x9BF0" />
<Texture Name="gWizrobeHairTex" OutName="wizrobe_hair" Format="rgba16" Width="8" Height="16" Offset="0xA3F0" />
<Texture Name="gWizrobeEyeOrbitTex" OutName="wizrobe_eye_orbit" Format="rgba16" Width="16" Height="16" Offset="0xA4F0" />
<Texture Name="gWizrobeEyeTex" OutName="wizrobe_eye" Format="rgba16" Width="16" Height="16" Offset="0xA6F0" />
<Texture Name="gWizrobeLowerLipTex" OutName="wizrobe_lower_lip" Format="rgba16" Width="8" Height="8" Offset="0xA8F0" />
<Texture Name="gWizrobeNoseTex" OutName="wizrobe_nose" Format="rgba16" Width="8" Height="16" Offset="0xA970" />
<Texture Name="gWizrobeEarTex" OutName="wizrobe_ear" Format="rgba16" Width="16" Height="4" Offset="0xAA70" />
<Texture Name="gWizrobeStaffTipTex" OutName="wizrobe_staff_tip" Format="rgba16" Width="16" Height="16" Offset="0xAAF0" />
<Texture Name="gWizrobeStaffTex" OutName="wizrobe_staff" Format="rgba16" Width="16" Height="16" Offset="0xACF0" />
<Texture Name="gWizrobeBandTex" OutName="wizrobe_band" Format="rgba16" Width="16" Height="16" Offset="0xAEF0" />
<Texture Name="gWizrobeFootTex" OutName="wizrobe_foot" Format="rgba16" Width="16" Height="8" Offset="0xB0F0" />
<!-- Wizrobe Limbs -->
<Limb Name="gWizrobePelvisLimb" Type="Standard" EnumName="WIZROBE_LIMB_PELVIS" Offset="0xB1F0" />
<Limb Name="gWizrobeTorsoLimb" Type="Standard" EnumName="WIZROBE_LIMB_TORSO" Offset="0xB1FC" />
<Limb Name="gWizrobeLeftUpperArmLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_UPPER_ARM" Offset="0xB208" />
<Limb Name="gWizrobeLeftForearmLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_FOREARM" Offset="0xB214" />
<Limb Name="gWizrobeLeftHandLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_HAND" Offset="0xB220" />
<Limb Name="gWizrobeRightUpperArmLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_UPPER_ARM" Offset="0xB22C" />
<Limb Name="gWizrobeRightForearmLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_FOREARM" Offset="0xB238" />
<Limb Name="gWizrobeRightHandLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_HAND" Offset="0xB244" />
<Limb Name="gWizrobeStaffLimb" Type="Standard" EnumName="WIZROBE_LIMB_STAFF" Offset="0xB250" />
<Limb Name="gWizrobeNeckLimb" Type="Standard" EnumName="WIZROBE_LIMB_NECK" Offset="0xB25C" />
<Limb Name="gWizrobeHeadLimb" Type="Standard" EnumName="WIZROBE_LIMB_HEAD" Offset="0xB268" />
<Limb Name="gWizrobeJawLimb" Type="Standard" EnumName="WIZROBE_LIMB_JAW" Offset="0xB274" />
<Limb Name="gWizrobeLoinclothLimb" Type="Standard" EnumName="WIZROBE_LIMB_LOINCLOTH" Offset="0xB280" />
<Limb Name="gWizrobeLeftThighLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_THIGH" Offset="0xB28C" />
<Limb Name="gWizrobeLeftShinLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_SHIN" Offset="0xB298" />
<Limb Name="gWizrobeLeftFootLimb" Type="Standard" EnumName="WIZROBE_LIMB_LEFT_FOOT" Offset="0xB2A4" />
<Limb Name="gWizrobeRightThighLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_THIGH" Offset="0xB2B0" />
<Limb Name="gWizrobeRightShinLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_SHIN" Offset="0xB2BC" />
<Limb Name="gWizrobeRightFootLimb" Type="Standard" EnumName="WIZROBE_LIMB_RIGHT_FOOT" Offset="0xB2C8" />
<!-- Wizrobe Skeleton -->
<Skeleton Name="gWizrobeSkel" Type="Flex" LimbType="Standard" LimbNone="WIZROBE_LIMB_NONE" LimbMax="WIZROBE_LIMB_MAX" EnumName="WizrobeLimb" Offset="0xB320" />
</File>
</Root>
+60 -31
View File
@@ -53,6 +53,7 @@
#define A_INIT 0x01
#define A_CONTINUE 0x00
#define A_LOOP 0x02
#define A_ADPCM_SHORT 0x04
#define A_OUT 0x02
#define A_LEFT 0x02
#define A_RIGHT 0x00
@@ -331,13 +332,20 @@ typedef short ENVMIX_STATE[40];
_a->words.w1 = (unsigned int)(a2); \
}
#define aClearBuffer(pkt, d, c) \
{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
_a->words.w1 = (unsigned int)(c); \
}
/*
* Clears DMEM by writing zeros.
*
* @param pkt pointer to an Acmd buffer
* @param dmem DMEM address to clear
* @param size number of bytes to clear (rounded up to the next multiple of 16)
*/
#define aClearBuffer(pkt, dmem, size) \
{ \
Acmd* _a = (Acmd*)pkt; \
\
_a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(dmem, 0, 24); \
_a->words.w1 = (uintptr_t)(size); \
}
#define aEnvMixer(pkt, dmemi, count, swapLR, x0, x1, x2, x3, m, bits) \
{ \
@@ -368,14 +376,21 @@ typedef short ENVMIX_STATE[40];
_a->words.w1 = _SHIFTL(dmemi, 16, 16) | _SHIFTL(dmemo, 0, 16); \
}
#define aLoadBuffer(pkt, s, d, c) \
{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
_SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
_a->words.w1 = (unsigned int)(s); \
}
/*
* Loads a buffer to DMEM from any physical source address, KSEG0, or KSEG1
*
* @param pkt pointer to an Acmd buffer
* @param addrSrc Any physical source address, KSEG0, or KSEG1
* @param dmemDest DMEM destination address
* @param size number of bytes to copy (rounded down to the next multiple of 16)
*/
#define aLoadBuffer(pkt, addrSrc, dmemDest, size) \
{ \
Acmd* _a = (Acmd*)pkt; \
\
_a->words.w0 = (_SHIFTL(A_LOADBUFF, 24, 8) | _SHIFTL((size) >> 4, 16, 8) | _SHIFTL(dmemDest, 0, 16)); \
_a->words.w1 = (uintptr_t)(addrSrc); \
}
#define aMix(pkt, f, g, i, o) \
{ \
@@ -404,14 +419,21 @@ typedef short ENVMIX_STATE[40];
_a->words.w1 = (unsigned int)(s); \
}
#define aSaveBuffer(pkt, s, d, c) \
{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
_SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
_a->words.w1 = (unsigned int)(d); \
}
/*
* Stores a buffer from DMEM to any physical source address, KSEG0, or KSEG1
*
* @param pkt pointer to an Acmd buffer
* @param dmemSrc DMEM source address
* @param addrDest Any physical source address, KSEG0, or KSEG1
* @param size number of bytes to copy (rounded down to the next multiple of 16)
*/
#define aSaveBuffer(pkt, dmemSrc, addrDest, size) \
{ \
Acmd* _a = (Acmd*)pkt; \
\
_a->words.w0 = (_SHIFTL(A_SAVEBUFF, 24, 8) | _SHIFTL((size) >> 4, 16, 8) | _SHIFTL(dmemSrc, 0, 16)); \
_a->words.w1 = (uintptr_t)(addrDest); \
}
#define aSegment(pkt, s, b) \
{ \
@@ -501,14 +523,21 @@ typedef short ENVMIX_STATE[40];
_a->words.w1 = (unsigned int)(addr); \
}
#define aDuplicate(pkt, count, dmemi, dmemo, a4) \
{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
_SHIFTL(count, 16, 8) | _SHIFTL(dmemi, 0, 16)); \
_a->words.w1 = _SHIFTL(dmemo, 16, 16) | _SHIFTL(a4, 0, 16); \
}
/*
* Duplicates 128 bytes of data a specified number of times.
*
* @param pkt pointer to an Acmd buffer
* @param numCopies number of times to duplicate 128 bytes from src
* @param dmemSrc DMEM source address
* @param dmemDest DMEM destination address for the duplicates, size 128 * numCopies
*/
#define aDuplicate(pkt, numCopies, dmemSrc, dmemDest) \
{ \
Acmd* _a = (Acmd*)pkt; \
\
_a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | _SHIFTL(numCopies, 16, 8) | _SHIFTL(dmemSrc, 0, 16)); \
_a->words.w1 = _SHIFTL(dmemDest, 16, 16) | _SHIFTL(0x80, 0, 16); \
}
#define aAddMixer(pkt, count, dmemi, dmemo, a4) \
{ \
+3 -85
View File
@@ -558,7 +558,7 @@ void EffectSsHitmark_SpawnFixedScale(PlayState* play, s32 type, Vec3f* pos);
void EffectSsHitmark_SpawnCustomScale(PlayState* play, s32 type, s16 scale, Vec3f* pos);
void EffectSsFhgFlash_SpawnShock(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, u8 params);
// void EffectSsKFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE1 param_6);
void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 unused, s16* linkDetected, s16 drawFlag);
void EffectSsSolderSrchBall_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16* playerDetected, s16 params);
void EffectSsKakera_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, s16 objId, Gfx* dList);
// void EffectSsIcePiece_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6);
// void EffectSsIcePiece_SpawnBurst(void);
@@ -2238,35 +2238,6 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a);
void SkinMatrix_MulYRotation(MtxF* mf, s16 a);
void SkinMatrix_SetZRotation(MtxF* mf, s16 a);
void View_ViewportToVp(Vp* dest, Viewport* src);
void View_Init(View* view, GraphicsContext* gfxCtx);
void View_SetViewOrientation(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
void func_8013F050(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
void View_SetScale(View* view, f32 scale);
void View_GetScale(View* view, f32* scale);
void func_8013F0D0(View* view, f32 fovy, f32 zNear, f32 zFar);
void func_8013F100(View* view, f32* fovy, f32* zNear, f32* zFar);
void func_8013F120(View* view, f32 fovy, f32 zNear, f32 zFar);
void func_8013F15C(View* view, f32* fovy, f32* zNear, f32* zFar);
void View_SetViewport(View* view, Viewport* viewport);
void View_GetViewport(View* view, Viewport* viewport);
void View_WriteScissor(Gfx** gfx, s32 ulx, s32 uly, s32 lrx, s32 lry);
void View_SyncAndWriteScissor(View* view, Gfx** gfx);
void View_SetScissorForLetterbox(View* view);
s32 View_SetDistortionDirRot(View* view, f32 dirRotX, f32 dirRotY, f32 dirRotZ);
s32 View_SetDistortionScale(View* view, f32 scaleX, f32 scaleY, f32 scaleZ);
s32 View_SetDistortionSpeed(View* view, f32 speed);
s32 View_InitDistortion(View* view);
s32 View_ClearDistortion(View* view);
s32 View_SetDistortion(View* view, Vec3f dirRot, Vec3f scale, f32 speed);
s32 View_StepDistortion(View* view, Mtx* projectionMtx);
void View_RenderView(View* view, s32 uParm2);
s32 View_RenderToPerspectiveMatrix(View* view);
s32 View_RenderToOrthographicMatrix(View* view);
s32 func_8013FBC8(View* view);
s32 func_8013FD74(View* view);
s32 func_80140024(View* view);
s32 func_801400CC(View* view, Gfx** gfxp);
void func_80140260(OSViMode* vimode);
// void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6, s32 param_7, s32 param_8, UNK_TYPE4 param_9, s32 param_10, s16 param_11, u32 param_12, UNK_TYPE4 param_13);
// void func_80140730(void);
@@ -2376,18 +2347,6 @@ void Message_FindCreditsMessage(PlayState* play, u16 textId);
void func_8015E7EC(PlayState* play, UNK_PTR puParm2);
// void func_8015F8A8(UNK_TYPE4 ctxt);
void ShrinkWindow_SetLetterboxTarget(s32 target);
s32 ShrinkWindow_GetLetterboxTarget(void);
void ShrinkWindow_SetLetterboxMagnitude(s32 magnitude);
s32 ShrinkWindow_GetLetterboxMagnitude(void);
void ShrinkWindow_SetPillarboxTarget(s32 target);
s32 ShrinkWindow_GetPillarboxTarget(void);
void ShrinkWindow_SetPillarboxMagnitude(s32 magnitude);
s32 ShrinkWindow_GetPillarboxMagnitude(void);
void ShrinkWindow_Init(void);
void ShrinkWindow_Destroy(void);
void ShrinkWindow_Update(s32 framerateDivisor);
void ShrinkWindow_Draw(GraphicsContext* gfxCtx);
// void func_80161180(void);
s32 func_8016119C(Camera* camera, DbCameraUnkStruct* arg1);
// void func_8016122C(void);
@@ -2915,48 +2874,7 @@ s32 osFlashWriteBuffer(OSIoMesg* mb, s32 priority, void* dramAddr, OSMesgQueue*
s32 osFlashWriteArray(u32 pageNum);
s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 pageNum, void* dramAddr, u32 pageCount, OSMesgQueue* mq);
// void func_801877D0(void);
// void func_80187B64(void);
// void func_80187BEC(void);
// void func_80187DE8(void);
// void func_80187E58(void);
// void func_80187F00(void);
// void func_80187FB0(void);
// void func_80187FE8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188034(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188078(void);
// void func_801880C4(void);
// void func_801880E8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188124(void);
// void func_8018814C(void);
// void func_80188174(void);
// void func_801881A8(void);
// void func_801881C4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_801881F8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188264(void);
// void func_80188288(void);
// void func_801882A0(void);
// void func_80188304(void);
// void func_801884A0(void);
// void func_80188698(void);
// void func_8018883C(void);
// void func_801888E4(void);
// void func_801889A4(void);
// void func_80188A50(void);
// void func_80188AFC(void);
// void func_80188C48(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188CB4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_80188D28(void);
// void func_80188D68(void);
// void func_80188DDC(void);
// void func_80188FBC(void);
// void func_80189064(void);
// void func_80189620(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7);
// void func_8018A4B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
// void func_8018A768(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6);
// void func_8018A808(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6);
// void func_8018ACC4(void);
// void func_8018AE34(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6);
Acmd* AudioSynth_Update(Acmd* cmdStart, s32* numAbiCmds, s16* aiStart, s32 aiBufLen);
void AudioHeap_DiscardFont(s32 fontId);
void* AudioHeap_WritebackDCache(void* addr, size_t size);
@@ -3123,7 +3041,7 @@ void AudioSfx_LowerSfxSettingsReverb(Vec3f* pos, s8 isReverbLowered);
// void func_8019F7D8(void);
// void func_8019F830(void);
void func_8019F88C(Vec3f* arg0, u16 sfxId, UNK_TYPE arg2);
// void func_8019F900(void);
void func_8019F900(Vec3f* pos, u8 chargeLevel);
// void func_8019FA18(void);
void func_8019FAD8(Vec3f* param_1, u16 sfxId, f32 param_3);
void func_8019FB0C(Vec3f* arg0, u16 sfxId, f32 arg2, s32 arg3);
+10 -26
View File
@@ -1557,11 +1557,11 @@ extern f32 gPitchFrequencies[];
extern u8 gDefaultShortNoteVelocityTable[];
extern u8 gDefaultShortNoteGateTimeTable[];
extern EnvelopePoint gDefaultEnvelope[];
extern NoteSubEu gZeroNoteSub;
extern NoteSubEu gDefaultNoteSub;
extern u16 gHeadsetPanQuantization[];
extern u16 gHeadsetPanQuantization[];
extern s16 D_801D58A8[];
extern NoteSampleState gZeroedSampleState;
extern NoteSampleState gDefaultSampleState;
extern u16 gHaasEffectDelaySize[];
extern u16 gHaasEffectDelaySize[];
extern s16 gInvalidAdpcmCodeBook[];
extern f32 gHeadsetPanVolume[];
extern f32 gStereoPanVolume[];
extern f32 gDefaultPanVolume[];
@@ -1721,21 +1721,7 @@ extern s8 gSfxDefaultReverb;
extern u8 gAudioSpecId;
// extern UNK_TYPE1 D_801DB4D8;
// extern UNK_TYPE4 D_801DB4DC;
// extern UNK_TYPE1 D_801DB4E0;
// extern UNK_TYPE1 D_801DB528;
// extern UNK_TYPE1 D_801DB570;
// extern UNK_TYPE1 D_801DB5B8;
// extern UNK_TYPE1 D_801DB600;
// extern UNK_TYPE1 D_801DB648;
// extern UNK_TYPE1 D_801DB690;
// extern UNK_TYPE1 D_801DB6D8;
// extern UNK_TYPE1 D_801DB720;
// extern UNK_TYPE1 D_801DB750;
// extern UNK_TYPE1 D_801DB798;
// extern UNK_TYPE1 D_801DB870;
// extern UNK_TYPE1 D_801DB8B8;
// extern UNK_TYPE1 D_801DB900;
extern UNK_PTR D_801DB930;
extern ReverbSettings* gReverbSettingsTable[];
extern AudioSpec gAudioSpecs[21];
// rodata
@@ -3181,8 +3167,6 @@ extern s16 D_801F4E7A;
// extern UNK_TYPE1 D_801F6B1E;
// extern UNK_TYPE1 D_801F6B20;
// extern UNK_TYPE1 D_801F6B22;
extern ShrinkWindowContext gShrinkWindowContext;
extern ShrinkWindowContext* gShrinkWindowContextPtr;
// extern UNK_TYPE4 D_801F6B50;
// extern UNK_TYPE1 D_801F6B58;
extern void (*sKaleidoScopeUpdateFunc)(PlayState* play);
@@ -3485,10 +3469,10 @@ extern ActiveSequence gActiveSeqs[];
// extern UNK_TYPE1 D_80200BCE;
// extern UNK_TYPE1 D_80200BD0;
extern AudioContext gAudioContext; // at 0x80200C70
extern void (*D_80208E68)(void);
extern u32 (*D_80208E6C)(s8 value, SequenceChannel* channel);
extern s32 (*D_80208E70)(Sample*, s32, s8, s32);
extern Acmd* (*D_80208E74)(Acmd*, s32, s32);
extern void (*gCustomAudioUpdateFunction)(void);
extern u32 (*gCustomAudioSeqFunction)(s8 value, SequenceChannel* channel);
extern s32 (*gCustomAudioReverbFunction)(Sample*, s32, s8, s32);
extern Acmd* (*gCustomAudioSynthFunction)(Acmd*, s32, s32);
// post-code buffers
extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE];
-7
View File
@@ -287,13 +287,6 @@ typedef struct {
/* 0x10 */ OSTime resetTime;
} NmiBuff; // size >= 0x18
typedef struct {
/* 0x0 */ s8 letterboxTarget;
/* 0x1 */ s8 letterboxMagnitude;
/* 0x2 */ s8 pillarboxTarget;
/* 0x3 */ s8 pillarboxMagnitude;
} ShrinkWindowContext; // size = 0x4
typedef void(*osCreateThread_func)(void*);
typedef enum {
+173 -139
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -257,7 +257,6 @@ typedef struct {
/* 0x18 */ u8 unk18; // Always 1?
} EffectSsOverlay; // size = 0x1C
//! TODO: Review reuse of vec/gfx/actor fields across all effects
typedef struct EffectSs {
/* 0x00 */ Vec3f pos;
/* 0x0C */ Vec3f velocity;
+23
View File
@@ -0,0 +1,23 @@
#ifndef Z64SHRINK_WINDOW_H
#define Z64SHRINK_WINDOW_H
#include "PR/ultratypes.h"
struct GraphicsContext;
void ShrinkWindow_Letterbox_SetSizeTarget(s32 target);
s32 ShrinkWindow_Letterbox_GetSizeTarget(void);
void ShrinkWindow_Letterbox_SetSize(s32 size);
s32 ShrinkWindow_Letterbox_GetSize(void);
void ShrinkWindow_Pillarbox_SetSizeTarget(s32 target);
s32 ShrinkWindow_Pillarbox_GetSizeTarget(void);
void ShrinkWindow_Pillarbox_SetSize(s32 size);
s32 ShrinkWindow_Pillarbox_GetSize(void);
void ShrinkWindow_Init(void);
void ShrinkWindow_Destroy(void);
void ShrinkWindow_Update(s32 framerateDivisor);
void ShrinkWindow_Draw(GraphicsContext* gfxCtx);
#endif
+38 -3
View File
@@ -33,16 +33,27 @@ typedef struct View {
/* 0x0E0 */ Mtx unkE0;
/* 0x120 */ Mtx* projectionPtr;
/* 0x124 */ Mtx* viewingPtr;
/* 0x128 */ Vec3f distortionDirRot;
/* 0x128 */ Vec3f distortionOrientation;
/* 0x134 */ Vec3f distortionScale;
/* 0x140 */ f32 distortionSpeed;
/* 0x144 */ Vec3f curDistortionDirRot;
/* 0x144 */ Vec3f curDistortionOrientation;
/* 0x150 */ Vec3f curDistortionScale;
/* 0x15C */ u16 normal; // used to normalize the projection matrix
/* 0x15C */ u16 perspNorm; // used to normalize the projection matrix
/* 0x160 */ u32 flags; // bit 3: Render to an orthographic perspective
/* 0x164 */ s32 unk164;
} View; // size = 0x168
#define VIEW_VIEWING (1 << 0)
#define VIEW_VIEWPORT (1 << 1)
#define VIEW_PROJECTION_PERSPECTIVE (1 << 2)
#define VIEW_PROJECTION_ORTHO (1 << 3)
#define VIEW_ALL (VIEW_VIEWING | VIEW_VIEWPORT | VIEW_PROJECTION_PERSPECTIVE | VIEW_PROJECTION_ORTHO)
#define VIEW_FORCE_VIEWING (VIEW_VIEWING << 4)
#define VIEW_FORCE_VIEWPORT (VIEW_VIEWPORT << 4)
#define VIEW_FORCE_PROJECTION_PERSPECTIVE (VIEW_PROJECTION_PERSPECTIVE << 4)
#define VIEW_FORCE_PROJECTION_ORTHO (VIEW_PROJECTION_ORTHO << 4)
#define SET_FULLSCREEN_VIEWPORT(view) \
{ \
Viewport viewport; \
@@ -54,4 +65,28 @@ typedef struct View {
} \
(void)0
void View_Init(View* view, struct GraphicsContext* gfxCtx);
void View_LookAt(View* view, Vec3f* eye, Vec3f* at, Vec3f* up);
void View_SetScale(View* view, f32 scale);
void View_GetScale(View* view, f32* scale);
void View_SetPerspective(View* view, f32 fovy, f32 zNear, f32 zFar);
void View_GetPerspective(View* view, f32* fovy, f32* zNear, f32* zFar);
void View_SetOrtho(View* view, f32 fovy, f32 zNear, f32 zFar);
void View_GetOrtho(View* view, f32* fovy, f32* zNear, f32* zFar);
void View_SetViewport(View* view, Viewport* viewport);
void View_GetViewport(View* view, Viewport* viewport);
s32 View_SetDistortionOrientation(View* view, f32 rotX, f32 rotY, f32 rotZ);
s32 View_SetDistortionScale(View* view, f32 scaleX, f32 scaleY, f32 scaleZ);
s32 View_SetDistortionSpeed(View* view, f32 speed);
s32 View_InitDistortion(View* view);
s32 View_ClearDistortion(View* view);
s32 View_SetDistortion(View* view, Vec3f orientation, Vec3f scale, f32 speed);
void View_Apply(View* view, s32 mask);
s32 View_ApplyOrthoToOverlay(View* view);
s32 View_ApplyPerspectiveToOverlay(View* view);
s32 View_UpdateViewingMatrix(View* view);
s32 View_ApplyTo(View* view, Gfx** gfxp);
#endif
+5 -11
View File
@@ -608,7 +608,6 @@ beginseg
pad_text
include "build/src/code/audio/audio_data.o"
include "build/src/code/audio/audio_synthesis.o"
include "build/data/code/audio_synthesis.data.o"
include "build/src/code/audio/audio_heap.o"
include "build/data/code/audio_heap.bss.o"
include "build/src/code/audio/audio_load.o"
@@ -984,8 +983,7 @@ beginseg
name "ovl_En_M_Thunder"
compress
include "build/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.o"
include "build/data/ovl_En_M_Thunder/ovl_En_M_Thunder.data.o"
include "build/data/ovl_En_M_Thunder/ovl_En_M_Thunder.reloc.o"
include "build/src/overlays/actors/ovl_En_M_Thunder/ovl_En_M_Thunder_reloc.o"
endseg
beginseg
@@ -1870,8 +1868,7 @@ beginseg
name "ovl_Effect_Ss_Solder_Srch_Ball"
compress
include "build/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.o"
include "build/data/ovl_Effect_Ss_Solder_Srch_Ball/ovl_Effect_Ss_Solder_Srch_Ball.data.o"
include "build/data/ovl_Effect_Ss_Solder_Srch_Ball/ovl_Effect_Ss_Solder_Srch_Ball.reloc.o"
include "build/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/ovl_Effect_Ss_Solder_Srch_Ball_reloc.o"
endseg
beginseg
@@ -2715,8 +2712,7 @@ beginseg
name "ovl_En_Wiz"
compress
include "build/src/overlays/actors/ovl_En_Wiz/z_en_wiz.o"
include "build/data/ovl_En_Wiz/ovl_En_Wiz.data.o"
include "build/data/ovl_En_Wiz/ovl_En_Wiz.reloc.o"
include "build/src/overlays/actors/ovl_En_Wiz/ovl_En_Wiz_reloc.o"
endseg
beginseg
@@ -3200,8 +3196,7 @@ beginseg
name "ovl_En_Door_Etc"
compress
include "build/src/overlays/actors/ovl_En_Door_Etc/z_en_door_etc.o"
include "build/data/ovl_En_Door_Etc/ovl_En_Door_Etc.data.o"
include "build/data/ovl_En_Door_Etc/ovl_En_Door_Etc.reloc.o"
include "build/src/overlays/actors/ovl_En_Door_Etc/ovl_En_Door_Etc_reloc.o"
endseg
beginseg
@@ -5033,8 +5028,7 @@ beginseg
name "ovl_Dm_Tag"
compress
include "build/src/overlays/actors/ovl_Dm_Tag/z_dm_tag.o"
include "build/data/ovl_Dm_Tag/ovl_Dm_Tag.data.o"
include "build/data/ovl_Dm_Tag/ovl_Dm_Tag.reloc.o"
include "build/src/overlays/actors/ovl_Dm_Tag/ovl_Dm_Tag_reloc.o"
endseg
beginseg
+85 -8
View File
@@ -857,22 +857,99 @@ EnvelopePoint gDefaultEnvelope[] = {
{ ADSR_DISABLE, 0 },
};
NoteSubEu gZeroNoteSub = { 0 };
NoteSampleState gZeroedSampleState = { 0 };
NoteSubEu gDefaultNoteSub = {
{ 1, 1, 0, 0, 0, 0, 0, 0 }, { 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
NoteSampleState gDefaultSampleState = {
{ true, true, false, false, false, false, false, false },
{ 0 },
0, // gain
0, // haasEffectLeftDelaySize
0, // haasEffectRightDelaySize
0, // targetReverbVol
0, // harmonicIndexCurAndPrev
0, // combFilterSize
0, // targetVolLeft
0, // targetVolRight
0, // frequencyFixedPoint
0, // combFilterGain
NULL, // tunedSample
NULL, // filter
0, // unk_18
0, // surroundEffectIndex
0, // unk_1A
};
u16 gHeadsetPanQuantization[64] = {
60, 58, 56, 54, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18,
16, 14, 12, 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
u16 gHaasEffectDelaySize[64] = {
30 * SAMPLE_SIZE,
29 * SAMPLE_SIZE,
28 * SAMPLE_SIZE,
27 * SAMPLE_SIZE,
26 * SAMPLE_SIZE,
25 * SAMPLE_SIZE,
24 * SAMPLE_SIZE,
23 * SAMPLE_SIZE,
22 * SAMPLE_SIZE,
21 * SAMPLE_SIZE,
20 * SAMPLE_SIZE,
19 * SAMPLE_SIZE,
18 * SAMPLE_SIZE,
17 * SAMPLE_SIZE,
16 * SAMPLE_SIZE,
15 * SAMPLE_SIZE,
14 * SAMPLE_SIZE,
13 * SAMPLE_SIZE,
12 * SAMPLE_SIZE,
11 * SAMPLE_SIZE,
10 * SAMPLE_SIZE,
9 * SAMPLE_SIZE,
8 * SAMPLE_SIZE,
7 * SAMPLE_SIZE,
6 * SAMPLE_SIZE,
5 * SAMPLE_SIZE,
4 * SAMPLE_SIZE,
3 * SAMPLE_SIZE,
2 * SAMPLE_SIZE,
1 * SAMPLE_SIZE,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
};
s32 D_801D58A4 = 0;
// clang-format off
s16 D_801D58A8[] = {
s16 gInvalidAdpcmCodeBook[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
+142 -122
View File
@@ -10,7 +10,7 @@ void AudioHeap_DiscardSampleCaches(void);
void AudioHeap_DiscardSampleBank(s32 sampleBankId);
void AudioHeap_ApplySampleBankCacheInternal(s32 apply, s32 sampleBankId);
void AudioHeap_DiscardSampleBanks(void);
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 flags);
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirstInit);
#define gTatumsPerBeat (gAudioTatumInit[1])
@@ -421,7 +421,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (loadStatusEntry0 == LOAD_STATUS_MAYBE_DISCARDABLE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
gAudioContext.notes[i].sampleState.bitField0.enabled) {
break;
}
}
@@ -435,7 +435,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (loadStatusEntry1 == LOAD_STATUS_MAYBE_DISCARDABLE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
gAudioContext.notes[i].sampleState.bitField0.enabled) {
break;
}
}
@@ -491,7 +491,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (loadStatusEntry0 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[0].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
gAudioContext.notes[i].sampleState.bitField0.enabled) {
break;
}
}
@@ -504,7 +504,7 @@ void* AudioHeap_AllocCached(s32 tableType, size_t size, s32 cache, s32 id) {
if (loadStatusEntry1 == LOAD_STATUS_COMPLETE) {
for (i = 0; i < gAudioContext.numNotes; i++) {
if ((gAudioContext.notes[i].playbackState.fontId == temporaryCache->entries[1].id) &&
gAudioContext.notes[i].noteSubEu.bitField0.enabled) {
gAudioContext.notes[i].sampleState.bitField0.enabled) {
break;
}
}
@@ -814,7 +814,7 @@ void AudioHeap_UpdateReverb(SynthesisReverb* reverb) {
void AudioHeap_UpdateReverbs(void) {
s32 count;
s32 i;
s32 reverbIndex;
s32 j;
if (gAudioContext.audioBufferParameters.specUnk4 == 2) {
@@ -823,9 +823,9 @@ void AudioHeap_UpdateReverbs(void) {
count = 1;
}
for (i = 0; i < gAudioContext.numSynthesisReverbs; i++) {
for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
for (j = 0; j < count; j++) {
AudioHeap_UpdateReverb(&gAudioContext.synthesisReverbs[i]);
AudioHeap_UpdateReverb(&gAudioContext.synthesisReverbs[reverbIndex]);
}
}
}
@@ -837,7 +837,7 @@ void AudioHeap_ClearAiBuffers(void) {
s32 curAiBufferIndex = gAudioContext.curAiBufferIndex;
s32 i;
gAudioContext.aiBufNumSamples[curAiBufferIndex] = gAudioContext.audioBufferParameters.minAiBufNumSamples;
gAudioContext.aiBufNumSamples[curAiBufferIndex] = gAudioContext.audioBufferParameters.numSamplesPerFrameMin;
for (i = 0; i < AIBUF_LEN; i++) {
gAudioContext.aiBuffers[curAiBufferIndex][i] = 0;
@@ -870,7 +870,7 @@ s32 AudioHeap_ResetStep(void) {
AudioHeap_UpdateReverbs();
} else {
for (i = 0; i < gAudioContext.numNotes; i++) {
if (gAudioContext.notes[i].noteSubEu.bitField0.enabled &&
if (gAudioContext.notes[i].sampleState.bitField0.enabled &&
gAudioContext.notes[i].playbackState.adsr.action.s.state != ADSR_STATE_DISABLED) {
gAudioContext.notes[i].playbackState.adsr.fadeOutVel =
gAudioContext.audioBufferParameters.updatesPerFrameInv;
@@ -907,7 +907,7 @@ s32 AudioHeap_ResetStep(void) {
AudioHeap_Init();
gAudioContext.resetStatus = 0;
for (i = 0; i < ARRAY_COUNT(gAudioContext.aiBufNumSamples); i++) {
gAudioContext.aiBufNumSamples[i] = gAudioContext.audioBufferParameters.maxAiBufNumSamples;
gAudioContext.aiBufNumSamples[i] = gAudioContext.audioBufferParameters.numSamplesPerFrameMax;
for (j = 0; j < AIBUF_LEN; j++) {
gAudioContext.aiBuffers[i][j] = 0;
}
@@ -930,8 +930,8 @@ void AudioHeap_Init(void) {
size_t cachePoolSize;
size_t miscPoolSize;
u32 intMask;
s32 reverbIndex;
s32 i;
s32 j;
s32 pad2;
AudioSpec* spec = &gAudioSpecs[gAudioContext.audioResetSpecIdToLoad]; // Audio Specifications
@@ -942,19 +942,22 @@ void AudioHeap_Init(void) {
gAudioContext.audioBufferParameters.aiSamplingFreq =
osAiSetFrequency(gAudioContext.audioBufferParameters.samplingFreq);
gAudioContext.audioBufferParameters.samplesPerFrameTarget =
gAudioContext.audioBufferParameters.numSamplesPerFrameTarget =
ALIGN16(gAudioContext.audioBufferParameters.samplingFreq / gAudioContext.refreshRate);
gAudioContext.audioBufferParameters.minAiBufNumSamples =
gAudioContext.audioBufferParameters.samplesPerFrameTarget - 0x10;
gAudioContext.audioBufferParameters.maxAiBufNumSamples =
gAudioContext.audioBufferParameters.samplesPerFrameTarget + 0x10;
gAudioContext.audioBufferParameters.numSamplesPerFrameMin =
gAudioContext.audioBufferParameters.numSamplesPerFrameTarget - 0x10;
gAudioContext.audioBufferParameters.numSamplesPerFrameMax =
gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10;
gAudioContext.audioBufferParameters.updatesPerFrame =
((gAudioContext.audioBufferParameters.samplesPerFrameTarget + 0x10) / 0xD0) + 1;
gAudioContext.audioBufferParameters.samplesPerUpdate = (gAudioContext.audioBufferParameters.samplesPerFrameTarget /
gAudioContext.audioBufferParameters.updatesPerFrame) &
~7;
gAudioContext.audioBufferParameters.samplesPerUpdateMax = gAudioContext.audioBufferParameters.samplesPerUpdate + 8;
gAudioContext.audioBufferParameters.samplesPerUpdateMin = gAudioContext.audioBufferParameters.samplesPerUpdate - 8;
((gAudioContext.audioBufferParameters.numSamplesPerFrameTarget + 0x10) / 0xD0) + 1;
gAudioContext.audioBufferParameters.numSamplesPerUpdate =
(gAudioContext.audioBufferParameters.numSamplesPerFrameTarget /
gAudioContext.audioBufferParameters.updatesPerFrame) &
~7;
gAudioContext.audioBufferParameters.numSamplesPerUpdateMax =
gAudioContext.audioBufferParameters.numSamplesPerUpdate + 8;
gAudioContext.audioBufferParameters.numSamplesPerUpdateMin =
gAudioContext.audioBufferParameters.numSamplesPerUpdate - 8;
gAudioContext.audioBufferParameters.resampleRate = 32000.0f / (s32)gAudioContext.audioBufferParameters.samplingFreq;
gAudioContext.audioBufferParameters.updatesPerFrameInvScaled =
(1.0f / 256.0f) / gAudioContext.audioBufferParameters.updatesPerFrame;
@@ -984,13 +987,13 @@ void AudioHeap_Init(void) {
gAudioContext.unk_2870 /= gAudioContext.tempoInternalToExternal;
gAudioContext.audioBufferParameters.specUnk4 = spec->unk_04;
gAudioContext.audioBufferParameters.samplesPerFrameTarget *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.maxAiBufNumSamples *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.minAiBufNumSamples *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.numSamplesPerFrameTarget *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.numSamplesPerFrameMax *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.numSamplesPerFrameMin *= gAudioContext.audioBufferParameters.specUnk4;
gAudioContext.audioBufferParameters.updatesPerFrame *= gAudioContext.audioBufferParameters.specUnk4;
if (gAudioContext.audioBufferParameters.specUnk4 >= 2) {
gAudioContext.audioBufferParameters.maxAiBufNumSamples -= 0x10;
gAudioContext.audioBufferParameters.numSamplesPerFrameMax -= 0x10;
}
// Determine the maximum allowable number of audio command list entries for the rsp microcode
@@ -1037,13 +1040,13 @@ void AudioHeap_Init(void) {
gAudioContext.notes = AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.numNotes * sizeof(Note));
AudioPlayback_NoteInitAll();
AudioPlayback_InitNoteFreeList();
gAudioContext.noteSubsEu =
gAudioContext.sampleStateList =
AudioHeap_AllocZeroed(&gAudioContext.miscPool, gAudioContext.audioBufferParameters.updatesPerFrame *
gAudioContext.numNotes * sizeof(NoteSubEu));
gAudioContext.numNotes * sizeof(NoteSampleState));
// Initialize audio binary interface command list buffer
for (j = 0; j < ARRAY_COUNT(gAudioContext.abiCmdBufs); j++) {
gAudioContext.abiCmdBufs[j] =
for (i = 0; i < ARRAY_COUNT(gAudioContext.abiCmdBufs); i++) {
gAudioContext.abiCmdBufs[i] =
AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, gAudioContext.maxAudioCmds * sizeof(Acmd));
}
@@ -1052,20 +1055,20 @@ void AudioHeap_Init(void) {
AudioHeap_InitAdsrDecayTable();
// Initialize reverbs
for (i = 0; i < ARRAY_COUNT(gAudioContext.synthesisReverbs); i++) {
gAudioContext.synthesisReverbs[i].useReverb = 0;
for (reverbIndex = 0; reverbIndex < ARRAY_COUNT(gAudioContext.synthesisReverbs); reverbIndex++) {
gAudioContext.synthesisReverbs[reverbIndex].useReverb = 0;
}
gAudioContext.numSynthesisReverbs = spec->numReverbs;
for (i = 0; i < gAudioContext.numSynthesisReverbs; i++) {
AudioHeap_InitReverb(i, &spec->reverbSettings[i], 1);
for (reverbIndex = 0; reverbIndex < gAudioContext.numSynthesisReverbs; reverbIndex++) {
AudioHeap_InitReverb(reverbIndex, &spec->reverbSettings[reverbIndex], true);
}
// Initialize sequence players
AudioSeq_InitSequencePlayers();
for (j = 0; j < gAudioContext.audioBufferParameters.numSequencePlayers; j++) {
AudioSeq_InitSequencePlayerChannels(j);
AudioSeq_ResetSequencePlayer(&gAudioContext.seqPlayers[j]);
for (i = 0; i < gAudioContext.audioBufferParameters.numSequencePlayers; i++) {
AudioSeq_InitSequencePlayerChannels(i);
AudioSeq_ResetSequencePlayer(&gAudioContext.seqPlayers[i]);
}
// Initialize two additional caches on the audio heap to store individual audio samples
@@ -1529,149 +1532,165 @@ void AudioHeap_DiscardSampleBanks(void) {
}
}
void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 flags) {
s32 windowSize;
void AudioHeap_SetReverbData(s32 reverbIndex, u32 dataType, s32 data, s32 isFirstInit) {
s32 delayNumSamples;
SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
switch (dataType) {
case 0:
AudioHeap_InitReverb(reverbIndex, (ReverbSettings*)data, 0);
case REVERB_DATA_TYPE_SETTINGS:
AudioHeap_InitReverb(reverbIndex, (ReverbSettings*)data, false);
break;
case 1:
case REVERB_DATA_TYPE_DELAY:
if (data < 4) {
data = 4;
}
windowSize = data * 64;
if (windowSize < 0x100) {
windowSize = 0x100;
delayNumSamples = data * 64;
if (delayNumSamples < (16 * SAMPLES_PER_FRAME)) {
delayNumSamples = 16 * SAMPLES_PER_FRAME;
}
windowSize /= reverb->downsampleRate;
delayNumSamples /= reverb->downsampleRate;
if (flags == 0) {
if (reverb->unk_1E >= (data / reverb->downsampleRate)) {
if ((reverb->nextRingBufPos >= windowSize) || (reverb->unk_24 >= windowSize)) {
reverb->nextRingBufPos = 0;
reverb->unk_24 = 0;
}
} else {
if (!isFirstInit) {
if (reverb->delayNumSamplesAfterDownsampling < (data / reverb->downsampleRate)) {
break;
}
if ((reverb->nextReverbBufPos >= delayNumSamples) || (reverb->delayNumSamplesUnk >= delayNumSamples)) {
reverb->nextReverbBufPos = 0;
reverb->delayNumSamplesUnk = 0;
}
}
reverb->windowSize = windowSize;
reverb->delayNumSamples = delayNumSamples;
if ((reverb->downsampleRate != 1) || reverb->unk_18) {
reverb->unk_0E = 0x8000 / reverb->downsampleRate;
if (reverb->unk_30 == NULL) {
reverb->unk_30 = AudioHeap_AllocZeroed(&gAudioContext.miscPool, 0x20);
reverb->unk_34 = AudioHeap_AllocZeroed(&gAudioContext.miscPool, 0x20);
reverb->unk_38 = AudioHeap_AllocZeroed(&gAudioContext.miscPool, 0x20);
reverb->unk_3C = AudioHeap_AllocZeroed(&gAudioContext.miscPool, 0x20);
if (reverb->unk_3C == NULL) {
if ((reverb->downsampleRate != 1) || reverb->resampleEffectOn) {
reverb->downsamplePitch = 0x8000 / reverb->downsampleRate;
if (reverb->leftLoadResampleBuf == NULL) {
reverb->leftLoadResampleBuf =
AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
reverb->rightLoadResampleBuf =
AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
reverb->leftSaveResampleBuf =
AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
reverb->rightSaveResampleBuf =
AudioHeap_AllocZeroed(&gAudioContext.miscPool, sizeof(RESAMPLE_STATE));
if (reverb->rightSaveResampleBuf == NULL) {
reverb->downsampleRate = 1;
}
}
}
break;
case 2:
gAudioContext.synthesisReverbs[reverbIndex].unk_0C = data;
case REVERB_DATA_TYPE_DECAY:
gAudioContext.synthesisReverbs[reverbIndex].decayRatio = data;
break;
case 3:
gAudioContext.synthesisReverbs[reverbIndex].unk_16 = data;
case REVERB_DATA_TYPE_SUB_VOLUME:
gAudioContext.synthesisReverbs[reverbIndex].subVolume = data;
break;
case 4:
gAudioContext.synthesisReverbs[reverbIndex].unk_0A = data;
case REVERB_DATA_TYPE_VOLUME:
gAudioContext.synthesisReverbs[reverbIndex].volume = data;
break;
case 5:
case REVERB_DATA_TYPE_LEAK_RIGHT:
gAudioContext.synthesisReverbs[reverbIndex].leakRtl = data;
break;
case 6:
case REVERB_DATA_TYPE_LEAK_LEFT:
gAudioContext.synthesisReverbs[reverbIndex].leakLtr = data;
break;
case 7:
case REVERB_DATA_TYPE_FILTER_LEFT:
if (data != 0) {
if ((flags != 0) || (reverb->unk_278 == 0)) {
reverb->filterLeftState = AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, 0x40);
reverb->unk_278 = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, 0x10);
if (isFirstInit || (reverb->filterLeftInit == NULL)) {
reverb->filterLeftState = AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool,
2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
reverb->filterLeftInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
}
reverb->filterLeft = reverb->unk_278;
if (reverb->filterLeft != 0) {
reverb->filterLeft = reverb->filterLeftInit;
if (reverb->filterLeft != NULL) {
AudioHeap_LoadLowPassFilter(reverb->filterLeft, data);
}
} else {
reverb->filterLeft = 0;
reverb->filterLeft = NULL;
if (flags != 0) {
reverb->unk_278 = 0;
if (isFirstInit) {
reverb->filterLeftInit = NULL;
}
}
break;
case 8:
case REVERB_DATA_TYPE_FILTER_RIGHT:
if (data != 0) {
if ((flags != 0) || (reverb->unk_27C == 0)) {
reverb->filterRightState = AudioHeap_AllocDmaMemoryZeroed(&gAudioContext.miscPool, 0x40);
reverb->unk_27C = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, 0x10);
if (isFirstInit || (reverb->filterRightInit == NULL)) {
reverb->filterRightState = AudioHeap_AllocDmaMemoryZeroed(
&gAudioContext.miscPool, 2 * (FILTER_BUF_PART1 + FILTER_BUF_PART2));
reverb->filterRightInit = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
}
reverb->filterRight = reverb->unk_27C;
if (reverb->unk_27C != 0) {
AudioHeap_LoadLowPassFilter(reverb->unk_27C, data);
reverb->filterRight = reverb->filterRightInit;
if (reverb->filterRight != NULL) {
AudioHeap_LoadLowPassFilter(reverb->filterRight, data);
}
} else {
reverb->filterRight = 0;
if (flags != 0) {
reverb->unk_27C = 0;
reverb->filterRight = NULL;
if (isFirstInit) {
reverb->filterRightInit = NULL;
}
}
break;
case 9:
reverb->unk_19 = data;
case REVERB_DATA_TYPE_9:
reverb->resampleEffectExtraSamples = data;
if (data == 0) {
reverb->unk_18 = false;
reverb->resampleEffectOn = false;
} else {
reverb->unk_18 = true;
reverb->resampleEffectOn = true;
}
break;
default:
break;
}
}
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 flags) {
void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 isFirstInit) {
SynthesisReverb* reverb = &gAudioContext.synthesisReverbs[reverbIndex];
if (flags != 0) {
reverb->unk_1E = settings->windowSize / settings->downsampleRate;
reverb->unk_30 = 0;
} else if (reverb->unk_1E < (settings->windowSize / settings->downsampleRate)) {
if (isFirstInit) {
reverb->delayNumSamplesAfterDownsampling = settings->delayNumSamples / settings->downsampleRate;
reverb->leftLoadResampleBuf = NULL;
} else if (reverb->delayNumSamplesAfterDownsampling < (settings->delayNumSamples / settings->downsampleRate)) {
return;
}
reverb->downsampleRate = settings->downsampleRate;
reverb->unk_18 = false;
reverb->unk_19 = 0;
reverb->unk_1A = 0;
reverb->unk_1C = 0;
AudioHeap_SetReverbData(reverbIndex, 1, settings->windowSize, flags);
reverb->unk_0C = settings->unk_4;
reverb->unk_0A = settings->unk_A;
reverb->unk_14 = settings->unk_6 << 6;
reverb->unk_16 = settings->unk_8;
reverb->resampleEffectOn = false;
reverb->resampleEffectExtraSamples = 0;
reverb->resampleEffectLoadUnk = 0;
reverb->resampleEffectSaveUnk = 0;
AudioHeap_SetReverbData(reverbIndex, REVERB_DATA_TYPE_DELAY, settings->delayNumSamples, isFirstInit);
reverb->decayRatio = settings->decayRatio;
reverb->volume = settings->volume;
reverb->subDelay = settings->subDelay * 64;
reverb->subVolume = settings->subVolume;
reverb->leakRtl = settings->leakRtl;
reverb->leakLtr = settings->leakLtr;
reverb->unk_05 = settings->unk_10;
reverb->unk_08 = settings->unk_12;
reverb->useReverb = 8;
reverb->mixReverbIndex = settings->mixReverbIndex;
reverb->mixReverbStrength = settings->mixReverbStrength;
reverb->useReverb = 8; // used as a boolean
if (flags != 0) {
reverb->leftRingBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->windowSize * 2);
reverb->rightRingBuf = AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->windowSize * 2);
if (isFirstInit) {
reverb->leftReverbBuf =
AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
reverb->rightReverbBuf =
AudioHeap_AllocZeroedAttemptExternal(&gAudioContext.miscPool, reverb->delayNumSamples * 2);
reverb->resampleFlags = 1;
reverb->nextRingBufPos = 0;
reverb->unk_24 = 0;
reverb->nextReverbBufPos = 0;
reverb->delayNumSamplesUnk = 0;
reverb->curFrame = 0;
reverb->framesToIgnore = 2;
}
@@ -1681,12 +1700,13 @@ void AudioHeap_InitReverb(s32 reverbIndex, ReverbSettings* settings, s32 flags)
reverb->tunedSample.tuning = 1.0f;
reverb->sample.codec = CODEC_REVERB;
reverb->sample.medium = MEDIUM_RAM;
reverb->sample.size = reverb->windowSize * 2;
reverb->sample.sampleAddr = (u8*)reverb->leftRingBuf;
reverb->sample.size = reverb->delayNumSamples * SAMPLE_SIZE;
reverb->sample.sampleAddr = (u8*)reverb->leftReverbBuf;
reverb->loop.start = 0;
reverb->loop.count = 1;
reverb->loop.end = reverb->windowSize;
reverb->loop.loopEnd = reverb->delayNumSamples;
AudioHeap_SetReverbData(reverbIndex, 7, settings->lowPassFilterCutoffLeft, flags);
AudioHeap_SetReverbData(reverbIndex, 8, settings->lowPassFilterCutoffRight, flags);
AudioHeap_SetReverbData(reverbIndex, REVERB_DATA_TYPE_FILTER_LEFT, settings->lowPassFilterCutoffLeft, isFirstInit);
AudioHeap_SetReverbData(reverbIndex, REVERB_DATA_TYPE_FILTER_RIGHT, settings->lowPassFilterCutoffRight,
isFirstInit);
}
+177 -5
View File
@@ -1,12 +1,184 @@
#include "global.h"
const s16 gAudioTatumInit[] = {
0x1C00, // unused
0x30, // gTatumsPerBeat
0x1C00, // unused
TATUMS_PER_BEAT, // gTatumsPerBeat
};
// TODO: Extract from table?
#define NUM_SOUNDFONTS 41
#define SFX_SEQ_SIZE 0xC6A0
#define AMBIENCE_SEQ_SIZE 0xFC0
#define SOUNDFONT_0_SIZE 0x81C0
#define SOUNDFONT_1_SIZE 0x36D0
#define SOUNDFONT_2_SIZE 0xCE0
// Sizes of everything on the init pool
#define AI_BUFFERS_SIZE (AIBUF_SIZE * ARRAY_COUNT(gAudioContext.aiBuffers))
#define SOUNDFONT_LIST_SIZE (NUM_SOUNDFONTS * sizeof(SoundFont))
// 0x19BD0
#define PERMANENT_POOL_SIZE \
(SFX_SEQ_SIZE + AMBIENCE_SEQ_SIZE + SOUNDFONT_0_SIZE + SOUNDFONT_1_SIZE + SOUNDFONT_2_SIZE + 0x430)
const AudioHeapInitSizes gAudioHeapInitSizes = {
0x137F00, // heapSize
0x1C480, // initPoolSize
0x1A000, // permanentPoolSize
ALIGN16(sizeof(gAudioHeap) - 0x100), // audio heap size
ALIGN16(PERMANENT_POOL_SIZE + AI_BUFFERS_SIZE + SOUNDFONT_LIST_SIZE + 0x40), // init pool size
ALIGN16(PERMANENT_POOL_SIZE), // permanent pool size
};
#define REVERB_INDEX_0_SETTINGS \
{ 1, 0x30, 0x3000, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x3000, 0, 0 }
ReverbSettings reverbSettings0[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x20, 0x0800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 0, 0 },
};
ReverbSettings reverbSettings1[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x1800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 11, 11 },
};
ReverbSettings reverbSettings2[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x38, 0x2800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 7, 7 },
};
ReverbSettings reverbSettings3[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x6800, 0, 0, 0x7FFF, 0x1400, 0x1400, REVERB_INDEX_NONE, 0x3000, 6, 6 },
{ 2, 0x50, 0x6000, 0, 0, 0x7FFF, 0xD000, 0x3000, REVERB_INDEX_NONE, 0x3000, 0, 0 },
};
ReverbSettings reverbSettings4[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x40, 0x5000, 0, 0, 0x7FFF, 0x1800, 0x1800, REVERB_INDEX_NONE, 0x3000, 7, 7 },
};
ReverbSettings reverbSettings5[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x40, 0x5C00, 0, 0, 0x7FFF, 0x2000, 0x2000, REVERB_INDEX_NONE, 0x3000, 4, 4 },
};
ReverbSettings reverbSettings6[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x6000, 0, 0, 0x7FFF, 0x1000, 0x1000, REVERB_INDEX_NONE, 0x3000, 10, 10 },
};
ReverbSettings reverbSettings7[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x6800, 0, 0, 0x7FFF, 0x1400, 0x1400, REVERB_INDEX_NONE, 0x3000, 6, 6 },
};
ReverbSettings reverbSettings8[2] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x50, 0x5000, 0, 0, 0x7FFF, 0xD000, 0x3000, REVERB_INDEX_NONE, 0x3000, 0, 0 },
};
ReverbSettings reverbSettings9[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x20, 0x0000, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 0, 0 },
};
ReverbSettings reverbSettingsA[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x1800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 11, 11 },
};
ReverbSettings reverbSettingsB[3] = {
REVERB_INDEX_0_SETTINGS,
};
ReverbSettings reverbSettingsC[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x40, 0x5000, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x3000, 0, 0 },
};
ReverbSettings reverbSettingsD[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x6800, 0, 0, 0x7FFF, 0x1400, 0x1400, REVERB_INDEX_NONE, 0x3000, 6, 6 },
{ 2, 0x50, 0x6000, 0, 0, 0x7FFF, 0xD000, 0x3000, REVERB_INDEX_NONE, 0x3000, 0, 0 },
};
ReverbSettings reverbSettingsE[3] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x30, 0x1800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 11, 11 },
{ 1, 0x40, 0x5000, 0, 0, 0x7FFF, 0x1800, 0x1800, REVERB_INDEX_NONE, 0x3000, 7, 7 },
};
ReverbSettings reverbSettingsF[2] = {
REVERB_INDEX_0_SETTINGS,
{ 1, 0x50, 0x1800, 0, 0, 0x7FFF, 0x0000, 0x0000, REVERB_INDEX_NONE, 0x0000, 11, 11 },
};
ReverbSettings* gReverbSettingsTable[] = {
reverbSettings0, reverbSettings1, reverbSettings2, reverbSettings4, reverbSettings5,
reverbSettings6, reverbSettings7, reverbSettings8, reverbSettings9, reverbSettings3,
};
AudioSpec gAudioSpecs[21] = {
/* 0x0 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x1 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x2 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x3 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x4 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x5 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x6 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x7 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x8 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x9 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0xA */
{ 32000, 1, 28, 3, 0, 0, 2, reverbSettingsA, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x2800, 0x2D00, 0, 0,
0xDC800 },
/* 0xB */
{ 32000, 1, 28, 3, 0, 0, 2, reverbSettingsA, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0xC */
{ 32000, 1, 28, 5, 0, 0, 2, reverbSettingsA, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xCC800 },
/* 0xD */
{ 32000, 1, 24, 5, 0, 0, 3, reverbSettingsD, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0xE */
{ 32000, 1, 24, 5, 0, 0, 3, reverbSettingsE, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0xF */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettingsF, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4000, 0x2D00, 0, 0,
0xDC800 },
/* 0x10 */
{ 32000, 1, 22, 5, 0, 0, 2, reverbSettings0, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x11 */
{ 32000, 1, 22, 5, 0, 0, 2, reverbSettings8, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x12 */
{ 32000, 1, 16, 5, 0, 0, 2, reverbSettings0, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x13 */
{ 22050, 1, 24, 5, 0, 0, 2, reverbSettings0, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x4100, 0x2D00, 0, 0,
0xDC800 },
/* 0x14 */
{ 32000, 1, 24, 5, 0, 0, 2, reverbSettings2, 0x500, 0x200, 0x7FFF, 0xAF0, 0x2D80, 0, 0x3600, 0x2600, 0, 0,
0xDC800 },
};
+3 -3
View File
@@ -1218,9 +1218,9 @@ void AudioLoad_Init(void* heap, size_t heapSize) {
s32 i;
s32 j;
D_80208E68 = NULL;
D_80208E70 = NULL;
D_80208E74 = NULL;
gCustomAudioUpdateFunction = NULL;
gCustomAudioReverbFunction = NULL;
gCustomAudioSynthFunction = NULL;
for (i = 0; i < ARRAY_COUNT(gAudioContext.unk_29A8); i++) {
gAudioContext.unk_29A8[i] = NULL;
+103 -99
View File
@@ -1,10 +1,10 @@
#include "global.h"
void AudioPlayback_NoteSetResamplingRate(NoteSubEu* noteSubEu, f32 resamplingRateInput);
void AudioPlayback_NoteSetResamplingRate(NoteSampleState* sampleState, f32 resamplingRateInput);
void AudioPlayback_AudioListPushFront(AudioListItem* list, AudioListItem* item);
void AudioPlayback_NoteInitForLayer(Note* note, SequenceLayer* layer);
void AudioPlayback_InitNoteSub(Note* note, NoteSubEu* noteSubEu, NoteSubAttributes* subAttrs) {
void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, NoteSubAttributes* subAttrs) {
f32 volLeft;
f32 volRight;
s32 halfPanIndex;
@@ -13,45 +13,45 @@ void AudioPlayback_InitNoteSub(Note* note, NoteSubEu* noteSubEu, NoteSubAttribut
u8 strongRight;
f32 vel;
u8 pan;
u8 reverbVol;
u8 targetReverbVol;
StereoData stereoData;
s32 stereoHeadsetEffects = note->playbackState.stereoHeadsetEffects;
vel = subAttrs->velocity;
pan = subAttrs->pan;
reverbVol = subAttrs->reverbVol;
stereoData = subAttrs->stereo.s;
targetReverbVol = subAttrs->targetReverbVol;
stereoData = subAttrs->stereoData;
noteSubEu->bitField0 = note->noteSubEu.bitField0;
noteSubEu->bitField1 = note->noteSubEu.bitField1;
noteSubEu->waveSampleAddr = note->noteSubEu.waveSampleAddr;
noteSubEu->harmonicIndexCurAndPrev = note->noteSubEu.harmonicIndexCurAndPrev;
sampleState->bitField0 = note->sampleState.bitField0;
sampleState->bitField1 = note->sampleState.bitField1;
sampleState->waveSampleAddr = note->sampleState.waveSampleAddr;
sampleState->harmonicIndexCurAndPrev = note->sampleState.harmonicIndexCurAndPrev;
AudioPlayback_NoteSetResamplingRate(noteSubEu, subAttrs->frequency);
AudioPlayback_NoteSetResamplingRate(sampleState, subAttrs->frequency);
pan &= 0x7F;
noteSubEu->bitField0.stereoStrongRight = false;
noteSubEu->bitField0.stereoStrongLeft = false;
noteSubEu->bitField0.stereoHeadsetEffects = stereoData.stereoHeadsetEffects;
noteSubEu->bitField0.usesHeadsetPanEffects = stereoData.usesHeadsetPanEffects;
sampleState->bitField0.strongRight = false;
sampleState->bitField0.strongLeft = false;
sampleState->bitField0.strongReverbRight = stereoData.strongReverbRight;
sampleState->bitField0.strongReverbLeft = stereoData.strongReverbLeft;
if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_HEADSET)) {
halfPanIndex = pan >> 1;
if (halfPanIndex > 0x3F) {
halfPanIndex = 0x3F;
}
noteSubEu->headsetPanLeft = gHeadsetPanQuantization[halfPanIndex];
noteSubEu->headsetPanRight = gHeadsetPanQuantization[0x3F - halfPanIndex];
noteSubEu->bitField1.usesHeadsetPanEffects2 = true;
sampleState->haasEffectRightDelaySize = gHaasEffectDelaySize[halfPanIndex];
sampleState->haasEffectLeftDelaySize = gHaasEffectDelaySize[0x3F - halfPanIndex];
sampleState->bitField1.useHaasEffect = true;
volLeft = gHeadsetPanVolume[pan];
volRight = gHeadsetPanVolume[0x7F - pan];
} else if (stereoHeadsetEffects && (gAudioContext.soundMode == SOUNDMODE_STEREO)) {
strongLeft = strongRight = false;
noteSubEu->headsetPanRight = 0;
noteSubEu->headsetPanLeft = 0;
noteSubEu->bitField1.usesHeadsetPanEffects2 = false;
sampleState->haasEffectLeftDelaySize = 0;
sampleState->haasEffectRightDelaySize = 0;
sampleState->bitField1.useHaasEffect = false;
volLeft = gStereoPanVolume[pan];
volRight = gStereoPanVolume[0x7F - pan];
@@ -62,37 +62,37 @@ void AudioPlayback_InitNoteSub(Note* note, NoteSubEu* noteSubEu, NoteSubAttribut
}
// case 0:
noteSubEu->bitField0.stereoStrongRight = strongRight;
noteSubEu->bitField0.stereoStrongLeft = strongLeft;
sampleState->bitField0.strongRight = strongRight;
sampleState->bitField0.strongLeft = strongLeft;
switch (stereoData.bit2) {
switch (stereoData.type) {
case 0:
break;
case 1:
noteSubEu->bitField0.stereoStrongRight = stereoData.strongRight;
noteSubEu->bitField0.stereoStrongLeft = stereoData.strongLeft;
sampleState->bitField0.strongRight = stereoData.strongRight;
sampleState->bitField0.strongLeft = stereoData.strongLeft;
break;
case 2:
noteSubEu->bitField0.stereoStrongRight = stereoData.strongRight | strongRight;
noteSubEu->bitField0.stereoStrongLeft = stereoData.strongLeft | strongLeft;
sampleState->bitField0.strongRight = stereoData.strongRight | strongRight;
sampleState->bitField0.strongLeft = stereoData.strongLeft | strongLeft;
break;
case 3:
noteSubEu->bitField0.stereoStrongRight = stereoData.strongRight ^ strongRight;
noteSubEu->bitField0.stereoStrongLeft = stereoData.strongLeft ^ strongLeft;
sampleState->bitField0.strongRight = stereoData.strongRight ^ strongRight;
sampleState->bitField0.strongLeft = stereoData.strongLeft ^ strongLeft;
break;
}
} else if (gAudioContext.soundMode == SOUNDMODE_MONO) {
noteSubEu->bitField0.stereoHeadsetEffects = false;
noteSubEu->bitField0.usesHeadsetPanEffects = false;
sampleState->bitField0.strongReverbRight = false;
sampleState->bitField0.strongReverbLeft = false;
volLeft = 0.707f; // approx 1/sqrt(2)
volRight = 0.707f;
} else {
noteSubEu->bitField0.stereoStrongRight = stereoData.strongRight;
noteSubEu->bitField0.stereoStrongLeft = stereoData.strongLeft;
sampleState->bitField0.strongRight = stereoData.strongRight;
sampleState->bitField0.strongLeft = stereoData.strongLeft;
volLeft = gDefaultPanVolume[pan];
volRight = gDefaultPanVolume[0x7F - pan];
}
@@ -100,33 +100,33 @@ void AudioPlayback_InitNoteSub(Note* note, NoteSubEu* noteSubEu, NoteSubAttribut
vel = 0.0f > vel ? 0.0f : vel;
vel = 1.0f < vel ? 1.0f : vel;
noteSubEu->targetVolLeft = (s32)((vel * volLeft) * (0x1000 - 0.001f));
noteSubEu->targetVolRight = (s32)((vel * volRight) * (0x1000 - 0.001f));
sampleState->targetVolLeft = (s32)((vel * volLeft) * (0x1000 - 0.001f));
sampleState->targetVolRight = (s32)((vel * volRight) * (0x1000 - 0.001f));
noteSubEu->gain = subAttrs->gain;
noteSubEu->filter = subAttrs->filter;
noteSubEu->unk_07 = subAttrs->unk_14;
noteSubEu->unk_0E = subAttrs->unk_16;
noteSubEu->reverbVol = reverbVol;
noteSubEu->unk_19 = subAttrs->unk_3;
sampleState->gain = subAttrs->gain;
sampleState->filter = subAttrs->filter;
sampleState->combFilterSize = subAttrs->combFilterSize;
sampleState->combFilterGain = subAttrs->combFilterGain;
sampleState->targetReverbVol = targetReverbVol;
sampleState->surroundEffectIndex = subAttrs->surroundEffectIndex;
}
void AudioPlayback_NoteSetResamplingRate(NoteSubEu* noteSubEu, f32 resamplingRateInput) {
void AudioPlayback_NoteSetResamplingRate(NoteSampleState* sampleState, f32 resamplingRateInput) {
f32 resamplingRate = 0.0f;
if (resamplingRateInput < 2.0f) {
noteSubEu->bitField1.hasTwoParts = false;
sampleState->bitField1.hasTwoParts = false;
resamplingRate = CLAMP_MAX(resamplingRateInput, 1.99998f);
} else {
noteSubEu->bitField1.hasTwoParts = true;
sampleState->bitField1.hasTwoParts = true;
if (resamplingRateInput > 3.99996f) {
resamplingRate = 1.99998f;
} else {
resamplingRate = resamplingRateInput * 0.5f;
}
}
noteSubEu->resamplingRateFixedPoint = (s32)(resamplingRate * 32768.0f);
sampleState->frequencyFixedPoint = (s32)(resamplingRate * 32768.0f);
}
void AudioPlayback_NoteInit(Note* note) {
@@ -140,17 +140,17 @@ void AudioPlayback_NoteInit(Note* note) {
note->playbackState.status = PLAYBACK_STATUS_0;
note->playbackState.adsr.action.s.state = ADSR_STATE_INITIAL;
note->noteSubEu = gDefaultNoteSub;
note->sampleState = gDefaultSampleState;
}
void AudioPlayback_NoteDisable(Note* note) {
if (note->noteSubEu.bitField0.needsInit == true) {
note->noteSubEu.bitField0.needsInit = false;
if (note->sampleState.bitField0.needsInit == true) {
note->sampleState.bitField0.needsInit = false;
}
note->playbackState.priority = 0;
note->noteSubEu.bitField0.enabled = false;
note->sampleState.bitField0.enabled = false;
note->playbackState.status = PLAYBACK_STATUS_0;
note->noteSubEu.bitField0.finished = false;
note->sampleState.bitField0.finished = false;
note->playbackState.parentLayer = NO_LAYER;
note->playbackState.prevParentLayer = NO_LAYER;
note->playbackState.adsr.action.s.state = ADSR_STATE_DISABLED;
@@ -161,8 +161,8 @@ void AudioPlayback_ProcessNotes(void) {
s32 pad;
s32 playbackStatus;
NoteAttributes* attrs;
NoteSubEu* noteSubEu2;
NoteSubEu* noteSubEu;
NoteSampleState* sampleState;
NoteSampleState* noteSampleState;
Note* note;
NotePlaybackState* playbackState;
NoteSubAttributes subAttrs;
@@ -172,7 +172,7 @@ void AudioPlayback_ProcessNotes(void) {
for (i = 0; i < gAudioContext.numNotes; i++) {
note = &gAudioContext.notes[i];
noteSubEu2 = &gAudioContext.noteSubsEu[gAudioContext.noteSubEuOffset + i];
sampleState = &gAudioContext.sampleStateList[gAudioContext.sampleStateOffset + i];
playbackState = &note->playbackState;
if (playbackState->parentLayer != NO_LAYER) {
if ((u32)playbackState->parentLayer < 0x7FFFFFFF) {
@@ -211,10 +211,12 @@ void AudioPlayback_ProcessNotes(void) {
out:
if (playbackState->priority != 0) {
//! FAKE:
if (1) {}
noteSubEu = &note->noteSubEu;
if ((playbackState->status >= 1) || noteSubEu->bitField0.finished) {
if ((playbackState->adsr.action.s.state == ADSR_STATE_DISABLED) || noteSubEu->bitField0.finished) {
noteSampleState = &note->sampleState;
if ((playbackState->status >= 1) || noteSampleState->bitField0.finished) {
if ((playbackState->adsr.action.s.state == ADSR_STATE_DISABLED) ||
noteSampleState->bitField0.finished) {
if (playbackState->wantedParentLayer != NO_LAYER) {
AudioPlayback_NoteDisable(note);
if (playbackState->wantedParentLayer->channel != NULL) {
@@ -260,14 +262,14 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.frequency = attrs->freqScale;
subAttrs.velocity = attrs->velocity;
subAttrs.pan = attrs->pan;
subAttrs.reverbVol = attrs->reverb;
subAttrs.stereo = attrs->stereo;
subAttrs.targetReverbVol = attrs->targetReverbVol;
subAttrs.stereoData = attrs->stereoData;
subAttrs.gain = attrs->gain;
subAttrs.filter = attrs->filter;
subAttrs.unk_14 = attrs->unk_4;
subAttrs.unk_16 = attrs->unk_6;
subAttrs.unk_3 = attrs->unk_3;
bookOffset = noteSubEu->bitField1.bookOffset;
subAttrs.combFilterSize = attrs->combFilterSize;
subAttrs.combFilterGain = attrs->combFilterGain;
subAttrs.surroundEffectIndex = attrs->surroundEffectIndex;
bookOffset = noteSampleState->bitField1.bookOffset;
} else {
SequenceLayer* layer = playbackState->parentLayer;
SequenceChannel* channel = playbackState->parentLayer->channel;
@@ -276,34 +278,35 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.velocity = layer->noteVelocity;
subAttrs.pan = layer->notePan;
if (layer->unk_08 == 0x80) {
subAttrs.unk_3 = channel->unk_10;
if (layer->surroundEffectIndex == 0x80) {
subAttrs.surroundEffectIndex = channel->surroundEffectIndex;
} else {
subAttrs.unk_3 = layer->unk_08;
subAttrs.surroundEffectIndex = layer->surroundEffectIndex;
}
if (layer->stereo.s.bit2 == 0) {
subAttrs.stereo = channel->stereo;
if (layer->stereoData.type == 0) {
subAttrs.stereoData = channel->stereoData;
} else {
subAttrs.stereo = layer->stereo;
subAttrs.stereoData = layer->stereoData;
}
if (layer->unk_0A.s.bit_2 == 1) {
subAttrs.reverbVol = channel->reverb;
subAttrs.targetReverbVol = channel->targetReverbVol;
} else {
subAttrs.reverbVol = layer->unk_09;
subAttrs.targetReverbVol = layer->targetReverbVol;
}
if (layer->unk_0A.s.bit_9 == 1) {
subAttrs.gain = channel->gain;
} else {
subAttrs.gain = 0;
//! FAKE:
if (1) {}
}
subAttrs.filter = channel->filter;
subAttrs.unk_14 = channel->unk_0F;
subAttrs.unk_16 = channel->unk_20;
subAttrs.combFilterSize = channel->combFilterSize;
subAttrs.combFilterGain = channel->combFilterGain;
bookOffset = channel->bookOffset & 0x7;
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) {
@@ -315,8 +318,8 @@ void AudioPlayback_ProcessNotes(void) {
subAttrs.frequency *= playbackState->vibratoFreqScale * playbackState->portamentoFreqScale;
subAttrs.frequency *= gAudioContext.audioBufferParameters.resampleRate;
subAttrs.velocity *= scale;
AudioPlayback_InitNoteSub(note, noteSubEu2, &subAttrs);
noteSubEu->bitField1.bookOffset = bookOffset;
AudioPlayback_InitSampleState(note, sampleState, &subAttrs);
noteSampleState->bitField1.bookOffset = bookOffset;
skip:;
}
}
@@ -500,15 +503,15 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
channel = layer->channel;
if (layer->unk_0A.s.bit_2 == 1) {
attrs->reverb = channel->reverb;
attrs->targetReverbVol = channel->targetReverbVol;
} else {
attrs->reverb = layer->unk_09;
attrs->targetReverbVol = layer->targetReverbVol;
}
if (layer->unk_08 == 0x80) {
attrs->unk_3 = channel->unk_10;
if (layer->surroundEffectIndex == 0x80) {
attrs->surroundEffectIndex = channel->surroundEffectIndex;
} else {
attrs->unk_3 = layer->unk_08;
attrs->surroundEffectIndex = layer->surroundEffectIndex;
}
if (layer->unk_0A.s.bit_9 == 1) {
@@ -526,20 +529,20 @@ void AudioPlayback_SeqLayerDecayRelease(SequenceLayer* layer, s32 target) {
attrs->filter = attrs->filterBuf;
}
attrs->unk_6 = channel->unk_20;
attrs->unk_4 = channel->unk_0F;
attrs->combFilterGain = channel->combFilterGain;
attrs->combFilterSize = channel->combFilterSize;
if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_3)) {
note->noteSubEu.bitField0.finished = true;
note->sampleState.bitField0.finished = true;
}
if (layer->stereo.asByte == 0) {
attrs->stereo = channel->stereo;
if (layer->stereoData.asByte == 0) {
attrs->stereoData = channel->stereoData;
} else {
attrs->stereo = layer->stereo;
attrs->stereoData = layer->stereoData;
}
note->playbackState.priority = channel->someOtherPriority;
} else {
attrs->stereo = layer->stereo;
attrs->stereoData = layer->stereoData;
note->playbackState.priority = 1;
}
@@ -620,7 +623,7 @@ s32 AudioPlayback_BuildSyntheticWave(Note* note, SequenceLayer* layer, s32 waveI
// Save the pointer to the synthethic wave
// waveId index starts at 128, there are WAVE_SAMPLE_COUNT samples to read from
note->noteSubEu.waveSampleAddr = &gWaveSamples[waveId - 128][harmonicIndex * WAVE_SAMPLE_COUNT];
note->sampleState.waveSampleAddr = &gWaveSamples[waveId - 128][harmonicIndex * WAVE_SAMPLE_COUNT];
return harmonicIndex;
}
@@ -638,7 +641,7 @@ void AudioPlayback_InitSyntheticWave(Note* note, SequenceLayer* layer) {
curHarmonicIndex = AudioPlayback_BuildSyntheticWave(note, layer, waveId);
if (curHarmonicIndex != prevHarmonicIndex) {
note->noteSubEu.harmonicIndexCurAndPrev = (curHarmonicIndex << 2) + prevHarmonicIndex;
note->sampleState.harmonicIndexCurAndPrev = (curHarmonicIndex << 2) + prevHarmonicIndex;
}
}
@@ -808,7 +811,7 @@ void AudioPlayback_NoteInitForLayer(Note* note, SequenceLayer* layer) {
s16 instId;
SequenceChannel* channel = layer->channel;
NotePlaybackState* playbackState = &note->playbackState;
NoteSubEu* noteSubEu = &note->noteSubEu;
NoteSampleState* noteSampleState = &note->sampleState;
playbackState->prevParentLayer = NO_LAYER;
playbackState->parentLayer = layer;
@@ -825,28 +828,28 @@ void AudioPlayback_NoteInitForLayer(Note* note, SequenceLayer* layer) {
if (instId == 0xFF) {
instId = channel->instOrWave;
}
noteSubEu->tunedSample = layer->tunedSample;
noteSampleState->tunedSample = layer->tunedSample;
if (instId >= 0x80 && instId < 0xC0) {
noteSubEu->bitField1.isSyntheticWave = true;
noteSampleState->bitField1.isSyntheticWave = true;
} else {
noteSubEu->bitField1.isSyntheticWave = false;
noteSampleState->bitField1.isSyntheticWave = false;
}
if (noteSubEu->bitField1.isSyntheticWave) {
if (noteSampleState->bitField1.isSyntheticWave) {
AudioPlayback_BuildSyntheticWave(note, layer, instId);
} else if (channel->startSamplePos == 1) {
playbackState->startSamplePos = noteSubEu->tunedSample->sample->loop->start;
playbackState->startSamplePos = noteSampleState->tunedSample->sample->loop->start;
} else {
playbackState->startSamplePos = channel->startSamplePos;
if (playbackState->startSamplePos >= noteSubEu->tunedSample->sample->loop->end) {
if (playbackState->startSamplePos >= noteSampleState->tunedSample->sample->loop->loopEnd) {
playbackState->startSamplePos = 0;
}
}
playbackState->fontId = channel->fontId;
playbackState->stereoHeadsetEffects = channel->stereoHeadsetEffects;
noteSubEu->bitField1.reverbIndex = channel->reverbIndex & 3;
noteSampleState->bitField1.reverbIndex = channel->reverbIndex & 3;
}
void func_801963E8(Note* note, SequenceLayer* layer) {
@@ -987,7 +990,7 @@ void AudioPlayback_NoteInitAll(void) {
for (i = 0; i < gAudioContext.numNotes; i++) {
note = &gAudioContext.notes[i];
note->noteSubEu = gZeroNoteSub;
note->sampleState = gZeroedSampleState;
note->playbackState.priority = 0;
note->playbackState.status = PLAYBACK_STATUS_0;
note->playbackState.parentLayer = NO_LAYER;
@@ -1002,7 +1005,8 @@ void AudioPlayback_NoteInitAll(void) {
note->playbackState.portamento.speed = 0;
note->playbackState.stereoHeadsetEffects = false;
note->playbackState.startSamplePos = 0;
note->synthesisState.synthesisBuffers = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, 0x2E0);
note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, 0x10);
note->synthesisState.synthesisBuffers =
AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, sizeof(NoteSynthesisBuffers));
note->playbackState.attributes.filterBuf = AudioHeap_AllocDmaMemory(&gAudioContext.miscPool, FILTER_SIZE);
}
}
+25 -24
View File
@@ -282,17 +282,17 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->transposition = 0;
channel->largeNotes = false;
channel->bookOffset = 0;
channel->stereo.asByte = 0;
channel->stereoData.asByte = 0;
channel->changes.asByte = 0xFF;
channel->scriptState.depth = 0;
channel->newPan = 0x40;
channel->panChannelWeight = 0x80;
channel->unk_10 = 0xFF;
channel->surroundEffectIndex = 0xFF;
channel->velocityRandomVariance = 0;
channel->gateTimeRandomVariance = 0;
channel->noteUnused = NULL;
channel->reverbIndex = 0;
channel->reverb = 0;
channel->targetReverbVol = 0;
channel->gain = 0;
channel->notePriority = 3;
channel->someOtherPriority = 1;
@@ -308,8 +308,8 @@ void AudioSeq_InitSequenceChannel(SequenceChannel* channel) {
channel->vibrato.vibratoExtentChangeDelay = 0;
channel->vibrato.vibratoDelay = 0;
channel->filter = NULL;
channel->unk_20 = 0;
channel->unk_0F = 0;
channel->combFilterGain = 0;
channel->combFilterSize = 0;
channel->volume = 1.0f;
channel->volumeScale = 1.0f;
channel->freqScale = 1.0f;
@@ -345,7 +345,7 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
layer->channel = channel;
layer->adsr = channel->adsr;
layer->adsr.decayIndex = 0;
layer->unk_09 = channel->reverb;
layer->targetReverbVol = channel->targetReverbVol;
layer->enabled = true;
layer->finished = false;
layer->stopSomething = false;
@@ -355,8 +355,8 @@ s32 AudioSeq_SeqChannelSetLayer(SequenceChannel* channel, s32 layerIndex) {
layer->bit1 = false;
layer->notePropertiesNeedInit = false;
layer->gateTime = 0x80;
layer->unk_08 = 0x80;
layer->stereo.asByte = 0;
layer->surroundEffectIndex = 0x80;
layer->stereoData.asByte = 0;
layer->portamento.mode = PORTAMENTO_MODE_OFF;
layer->scriptState.depth = 0;
layer->pan = 0x40;
@@ -782,7 +782,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
case 0xCD: // layer: stereo effects
layer->stereo.asByte = AudioSeq_ScriptReadU8(state);
layer->stereoData.asByte = AudioSeq_ScriptReadU8(state);
break;
case 0xCE: // layer: bend pitch
@@ -796,7 +796,7 @@ s32 AudioSeq_SeqLayerProcessScriptStep2(SequenceLayer* layer) {
break;
case 0xF1: // layer:
layer->unk_08 = AudioSeq_ScriptReadU8(state);
layer->surroundEffectIndex = AudioSeq_ScriptReadU8(state);
break;
default:
@@ -991,13 +991,14 @@ s32 AudioSeq_SeqLayerProcessScriptStep4(SequenceLayer* layer, s32 cmd) {
if (layer->delay == 0) {
if (layer->tunedSample != NULL) {
time = layer->tunedSample->sample->loop->end;
time = layer->tunedSample->sample->loop->loopEnd;
} else {
time = 0.0f;
}
time *= seqPlayer->tempo;
time *= gAudioContext.unk_2870;
time /= layer->freqScale;
//! FAKE:
if (1) {}
if (time > 0x7FFE) {
time = 0x7FFE;
@@ -1416,9 +1417,9 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->vibrato.vibratoDelay = cmd * 16;
break;
case 0xD4: // channel: set reverb
case 0xD4: // channel: set reverb volume
cmd = (u8)cmdArgs[0];
channel->reverb = cmd;
channel->targetReverbVol = cmd;
break;
case 0xC6: // channel: set soundFont
@@ -1491,7 +1492,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
} else {
channel->stereoHeadsetEffects = false;
}
channel->stereo.asByte = cmd & 0x7F;
channel->stereoData.asByte = cmd & 0x7F;
break;
case 0xD1: // channel: set note allocation policy
@@ -1537,7 +1538,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
data += 4;
channel->newPan = data[-3];
channel->panChannelWeight = data[-2];
channel->reverb = data[-1];
channel->targetReverbVol = data[-1];
channel->reverbIndex = data[0];
//! @bug: Not marking reverb state as changed
channel->changes.s.pan = true;
@@ -1551,7 +1552,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->transposition = (s8)AudioSeq_ScriptReadU8(scriptState);
channel->newPan = AudioSeq_ScriptReadU8(scriptState);
channel->panChannelWeight = AudioSeq_ScriptReadU8(scriptState);
channel->reverb = AudioSeq_ScriptReadU8(scriptState);
channel->targetReverbVol = AudioSeq_ScriptReadU8(scriptState);
channel->reverbIndex = AudioSeq_ScriptReadU8(scriptState);
//! @bug: Not marking reverb state as changed
channel->changes.s.pan = true;
@@ -1569,8 +1570,8 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
channel->adsr.sustain = 0;
channel->velocityRandomVariance = 0;
channel->gateTimeRandomVariance = 0;
channel->unk_0F = 0;
channel->unk_20 = 0;
channel->combFilterSize = 0;
channel->combFilterGain = 0;
channel->bookOffset = 0;
channel->startSamplePos = 0;
channel->unk_E0 = 0;
@@ -1651,8 +1652,8 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xBB: // channel:
channel->unk_0F = cmdArgs[0];
channel->unk_20 = cmdArgs[1];
channel->combFilterSize = cmdArgs[0];
channel->combFilterGain = cmdArgs[1];
break;
case 0xBC: // channel: add large
@@ -1667,8 +1668,8 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
if (cmdArgs[0] < 5) {
if (1) {}
if (gAudioContext.unk_29A8[cmdArgs[0]] != NULL) {
D_80208E6C = gAudioContext.unk_29A8[cmdArgs[0]];
scriptState->value = D_80208E6C(scriptState->value, channel);
gCustomAudioSeqFunction = gAudioContext.unk_29A8[cmdArgs[0]];
scriptState->value = gCustomAudioSeqFunction(scriptState->value, channel);
}
}
break;
@@ -1693,7 +1694,7 @@ void AudioSeq_SequenceChannelProcessScript(SequenceChannel* channel) {
break;
case 0xA4: // channel:
channel->unk_10 = cmdArgs[0];
channel->surroundEffectIndex = cmdArgs[0];
break;
case 0xA5: // channel:
@@ -2197,7 +2198,7 @@ void AudioSeq_ProcessSequences(s32 arg0) {
SequencePlayer* seqPlayer;
u32 i;
gAudioContext.noteSubEuOffset =
gAudioContext.sampleStateOffset =
(gAudioContext.audioBufferParameters.updatesPerFrame - arg0 - 1) * gAudioContext.numNotes;
for (i = 0; i < (u32)gAudioContext.audioBufferParameters.numSequencePlayers; i++) {

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