// // Generated By: dol2asm // Translation Unit: Z2Audience // #include "Z2AudioLib/Z2Audience.h" #include "Z2AudioLib/Z2Calc.h" #include "Z2AudioLib/Z2SoundInfo.h" #include "JSystem/JAudio2/JAISound.h" #include "JSystem/JAudio2/JASHeapCtrl.h" #include "JSystem/J3DU/J3DUD.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JMath/JMATrigonometric.h" #include "dol2asm.h" // // Types: // struct Z2Param { static f32 DISTANCE_MAX; static f32 MAX_VOLUME_DISTANCE; static f32 DOLBY_CENTER_VALUE; static f32 DOLBY_FLONT_DISTANCE_MAX; static f32 DOLBY_BEHIND_DISTANCE_MAX; static f32 DISTANCE_FX_PARAM; static f32 SONIC_SPEED; static f32 MIN_DISTANCE_VOLUME; }; // // Forward References: // extern "C" void func_802BBCDC(); extern "C" void func_802BBD18(); extern "C" void func_802BBD94(); extern "C" void __ct__16Z2AudibleChannelFv(); extern "C" void calc__9Z2AudibleFv(); extern "C" void getOuterParams__9Z2AudibleFi(); extern "C" void setOuterParams__9Z2AudibleFRC14JASSoundParamsRC14JASSoundParamsi(); extern "C" void getChannel__9Z2AudibleFi(); extern "C" void getDistVolBit__9Z2AudibleFv(); extern "C" void __ct__19Z2Audience3DSettingFv(); extern "C" void init__19Z2Audience3DSettingFv(); extern "C" void initVolumeDist__19Z2Audience3DSettingFv(); extern "C" void updateVolumeDist__19Z2Audience3DSettingFf(); extern "C" void initDolbyDist__19Z2Audience3DSettingFv(); extern "C" void updateDolbyDist__19Z2Audience3DSettingFff(); extern "C" void __ct__13Z2AudioCameraFv(); extern "C" void init__13Z2AudioCameraFv(); extern "C" void setCameraState__13Z2AudioCameraFPA4_CfR3Vecb(); extern "C" void setCameraState__13Z2AudioCameraFPA4_fR3VecR3Vecffbb(); extern "C" void convertAbsToRel__13Z2AudioCameraFP9Z2Audiblei(); extern "C" void convertAbsToRel__13Z2AudioCameraCFR3VecP3Vec(); extern "C" void isInSight__13Z2AudioCameraCFR3Vec(); extern "C" void __ct__9Z2SpotMicFv(); extern "C" void clearMicState__9Z2SpotMicFi(); extern "C" void calcVolumeFactor__9Z2SpotMicFi(); extern "C" void setMicState__9Z2SpotMicFP13Z2AudioCamerai(); extern "C" void calcMicDist__9Z2SpotMicFP9Z2Audible(); extern "C" void calcMicPriority__9Z2SpotMicFf(); extern "C" void calcMicVolume__9Z2SpotMicFfif(); extern "C" void __ct__10Z2AudienceFv(); extern "C" void __dt__10Z2AudienceFv(); extern "C" void func_802BD288(void* _this); extern "C" void setAudioCamera__10Z2AudienceFPA4_fR3VecR3Vecffbib(); extern "C" void func_802BD338(); extern "C" void deleteAudible__10Z2AudienceFP10JAIAudible(); extern "C" void __dt__9Z2AudibleFv(); extern "C" void calcPriority__10Z2AudienceFP10JAIAudible(); extern "C" void calcOffMicSound__10Z2AudienceFf(); extern "C" void mixChannelOut__10Z2AudienceFRC14JASSoundParamsP10JAIAudiblei(); extern "C" void setTargetVolume__10Z2AudienceFfi(); extern "C" void convertAbsToRel__10Z2AudienceFR3VecP3Veci(); extern "C" void calcRelPosVolume__10Z2AudienceFRC3Vecfi(); extern "C" void calcRelPosPan__10Z2AudienceFRC3Veci(); extern "C" void calcRelPosDolby__10Z2AudienceFRC3Veci(); extern "C" void calcVolume___10Z2AudienceCFfi(); extern "C" void calcDeltaPriority___10Z2AudienceCFfib(); extern "C" void func_802BDCB0(); extern "C" void calcFxMix___10Z2AudienceCFfi(); extern "C" void calcPitch___10Z2AudienceCFP16Z2AudibleChannelPC9Z2AudiblePC13Z2AudioCamera(); extern "C" void getMaxChannels__10Z2AudienceFv(); extern "C" void __sinit_Z2Audience_cpp(); extern "C" extern u8 struct_80451358[8]; // // External References: // extern "C" void __ct__17JASGenericMemPoolFv(); extern "C" void __dt__17JASGenericMemPoolFv(); extern "C" void alloc__17JASGenericMemPoolFUl(); extern "C" void free__17JASGenericMemPoolFPvUl(); extern "C" void clamp__14JASSoundParamsFv(); extern "C" void combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams(); extern "C" void __dt__10JAIAudibleFv(); extern "C" void __dt__11JAIAudienceFv(); extern "C" void linearTransform__6Z2CalcFfffffb(); extern "C" void getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign(); extern "C" void getAudibleSwFull__11Z2SoundInfoF10JAISoundID(); extern "C" void __dl__FPv(); extern "C" void __register_global_object(); extern "C" void __construct_array(); extern "C" void __cvt_fp2unsigned(); extern "C" void _savegpr_25(); extern "C" void _savegpr_26(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _savegpr_29(); extern "C" void _restgpr_25(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" extern void* __vt__10JAIAudible[5 + 1 /* padding */]; extern "C" extern void* __vt__11JAIAudience[8]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" f32 DISTANCE_MAX__7Z2Param; extern "C" f32 MAX_VOLUME_DISTANCE__7Z2Param; extern "C" f32 DOLBY_CENTER_VALUE__7Z2Param; extern "C" f32 DOLBY_FLONT_DISTANCE_MAX__7Z2Param; extern "C" f32 DOLBY_BEHIND_DISTANCE_MAX__7Z2Param; extern "C" f32 DISTANCE_FX_PARAM__7Z2Param; extern "C" f32 SONIC_SPEED__7Z2Param; extern "C" extern u8 data_80450B4C[4]; extern "C" f32 MIN_DISTANCE_VOLUME__7Z2Param; extern "C" extern u8 __OSReport_disable; // // Declarations: // /* 802BBCDC-802BBD18 2B661C 003C+00 1/1 0/0 0/0 .text * calc__15Z2AudibleAbsPosFRCQ29JGeometry8TVec3 */ void Z2AudibleAbsPos::calc(JGeometry::TVec3 const& param_0) { field_0xc.sub(param_0, field_0x0); field_0x0.set(param_0); } /* ############################################################################################## */ /* 80455AA0-80455AA4 0040A0 0004+00 19/19 0/0 0/0 .sdata2 @848 */ SECTION_SDATA2 static u8 lit_848[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 802BBD18-802BBD94 2B6658 007C+00 1/1 0/0 0/0 .text * init__15Z2AudibleAbsPosFPQ29JGeometry8TVec3RCQ29JGeometry8TVec3PCQ29JGeometry8TVec3 */ // Matches with literals #ifdef NONMATCHING void Z2AudibleAbsPos::init(JGeometry::TVec3* param_0, JGeometry::TVec3 const& param_1, JGeometry::TVec3 const* param_2) { param_0->set(param_1); if (param_2 != NULL) { field_0x0.set(*param_2); field_0xc.sub(param_1, field_0x0); return; } field_0x0.set(param_1); field_0xc.zero(); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2AudibleAbsPos::init(JGeometry::TVec3* param_0, JGeometry::TVec3 const& param_1, JGeometry::TVec3 const* param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/func_802BBD18.s" } #pragma pop #endif /* ############################################################################################## */ /* 803CAC98-803CACB8 027DB8 0020+00 2/2 0/0 0/0 .data __vt__10Z2Audience */ SECTION_DATA extern void* __vt__10Z2Audience[8] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__10Z2AudienceFv, (void*)func_802BD338, (void*)getMaxChannels__10Z2AudienceFv, (void*)deleteAudible__10Z2AudienceFP10JAIAudible, (void*)calcPriority__10Z2AudienceFP10JAIAudible, (void*)mixChannelOut__10Z2AudienceFRC14JASSoundParamsP10JAIAudiblei, }; /* 803CACB8-803CACD0 027DD8 0014+04 2/2 0/0 0/0 .data __vt__9Z2Audible */ SECTION_DATA extern void* __vt__9Z2Audible[5 + 1 /* padding */] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__9Z2AudibleFv, (void*)getOuterParams__9Z2AudibleFi, (void*)calc__9Z2AudibleFv, /* padding */ NULL, }; /* 80455AA4-80455AA8 0040A4 0004+00 16/16 0/0 0/0 .sdata2 @894 */ SECTION_SDATA2 static f32 lit_894 = 1.0f; /* 80455AA8-80455AAC 0040A8 0004+00 10/10 0/0 0/0 .sdata2 @895 */ SECTION_SDATA2 static f32 lit_895 = 0.5f; /* 80455AAC-80455AB0 0040AC 0004+00 5/5 0/0 0/0 .sdata2 @896 */ SECTION_SDATA2 static f32 lit_896 = -1.0f; /* 802BBD94-802BBE74 2B66D4 00E0+00 1/1 0/0 0/0 .text * __ct__9Z2AudibleFRCQ29JGeometry8TVec3PCQ29JGeometry8TVec3Ulb */ // Matches with literals #ifdef NONMATCHING Z2Audible::Z2Audible(JGeometry::TVec3 const& param_0, JGeometry::TVec3 const* param_1, u32 param_2, bool param_3) { field_0x10.field_0x0.raw = 0xffffffff; field_0x14.init(&mPos, param_0, param_1); for (int i = 0; i < 1; i++) { if ((param_2 & (1 << i)) == 0) { field_0x2c[i].init(); } } for (int i = 0; i < 1; i = i + 1) { field_0x64[i] = 0.0f; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2Audible::Z2Audible(JGeometry::TVec3 const& param_0, JGeometry::TVec3 const* param_1, u32 param_2, bool param_3) { nofralloc #include "asm/Z2AudioLib/Z2Audience/func_802BBD94.s" } #pragma pop #endif /* 802BBE74-802BBE98 2B67B4 0024+00 1/1 0/0 0/0 .text __ct__16Z2AudibleChannelFv */ // Matches with literals #ifdef NONMATCHING Z2AudibleChannel::Z2AudibleChannel() { } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2AudibleChannel::Z2AudibleChannel() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__ct__16Z2AudibleChannelFv.s" } #pragma pop #endif /* 802BBE98-802BBED0 2B67D8 0038+00 1/0 0/0 0/0 .text calc__9Z2AudibleFv */ void Z2Audible::calc() { if (isDoppler()) { field_0x14.calc(mPos); } } /* 802BBED0-802BBEE4 2B6810 0014+00 1/0 0/0 0/0 .text getOuterParams__9Z2AudibleFi */ JASSoundParams* Z2Audible::getOuterParams(int param_0) { return &field_0x2c[param_0].field_0x0; } /* ############################################################################################## */ /* 80455AB0-80455AB4 0040B0 0004+00 4/4 0/0 0/0 .sdata2 @998 */ SECTION_SDATA2 static f32 lit_998 = 3.0f; /* 80455AB4-80455AB8 0040B4 0004+00 1/1 0/0 0/0 .sdata2 @999 */ SECTION_SDATA2 static f32 lit_999 = 15.0f; /* 80455AB8-80455ABC 0040B8 0004+00 4/4 0/0 0/0 .sdata2 @1000 */ SECTION_SDATA2 static f32 lit_1000 = 3.0f / 10.0f; /* 80455ABC-80455AC0 0040BC 0004+00 1/1 0/0 0/0 .sdata2 @1001 */ SECTION_SDATA2 static f32 lit_1001 = 0.0010000000474974513f; /* 80455AC0-80455AC4 0040C0 0004+00 2/2 0/0 0/0 .sdata2 @1002 */ SECTION_SDATA2 static f32 lit_1002 = 1.0f / 10.0f; /* 80455AC4-80455AC8 0040C4 0004+00 1/1 0/0 0/0 .sdata2 @1003 */ SECTION_SDATA2 static f32 lit_1003 = 1.0f / 30.0f; /* 80455AC8-80455AD0 0040C8 0004+04 1/1 0/0 0/0 .sdata2 @1004 */ SECTION_SDATA2 static f32 lit_1004[1 + 1 /* padding */] = { 1.0f / 3.0f, /* padding */ 0.0f, }; /* 80455AD0-80455AD8 0040D0 0008+00 4/4 0/0 0/0 .sdata2 @1008 */ SECTION_SDATA2 static f64 lit_1008 = 4503599627370496.0 /* cast u32 to float */; /* 802BBEE4-802BC204 2B6824 0320+00 1/1 0/0 0/0 .text * setOuterParams__9Z2AudibleFRC14JASSoundParamsRC14JASSoundParamsi */ // regalloc #ifdef NONMATCHING void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams const& param_1, int param_2) { Z2AudibleChannel* this_01 = &field_0x2c[param_2]; u32 iStack_94 = (field_0x10.field_0x0.b.f1 & 0xf00) >> 8; if (iStack_94 == 0) { this_01->field_0x0.combine(param_0, param_1); return; } if (this_01->field_0x28 < 0.0f) { this_01->field_0x28 = 1.0f; this_01->mPan = param_1.mPan; this_01->mDolby = param_1.mDolby; this_01->field_0x0.combine(param_0, param_1); return; } JASSoundParams local_b0; local_b0.mFxMix = param_1.mFxMix; local_b0.mPitch = param_1.mPitch; JGeometry::TVec2 local_b8; local_b8.x = param_1.mPan - this_01->mPan; local_b8.y = param_1.mDolby - this_01->mDolby; f32 dVar9 = param_1.mVolume * local_b8.length(); f32 dVar10 = 1.0f; f32 dVar12 = Z2Calc::linearTransform(iStack_94, 0.0f, 15.0f, 1.0f, 0.3f, true); if (param_1.mVolume > dVar12 && dVar9 > 0.0010000000474974513f) { dVar10 = Z2Calc::getParamByExp(dVar9, 0.3f, 0.0010000000474974513f, 0.1f, dVar12, 1.0f, Z2Calc::CURVE_SIGN_1); if (dVar10 < 0.0f) { dVar10 = 0.0f; } } dVar10 -= this_01->field_0x28; f32 dVar11; if (dVar10 > 0.0f) { dVar11 = J3DUD::JMAAbs(dVar10); dVar11 = Z2Calc::getParamByExp(dVar11, 1.0f, 0.0f, 0.1f, 0.1f, 0.5f, Z2Calc::CURVE_SIGN_1); } else { dVar11 = J3DUD::JMAAbs(dVar10); dVar11 = Z2Calc::getParamByExp(dVar11, -1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 0.5f, Z2Calc::CURVE_SIGN_1); } f32 fVar1 = this_01->field_0x28 + (dVar10 * dVar11); if (fVar1 < 0.0f) { fVar1 = 0.0f; } else if (fVar1 > 1.0f) { fVar1 = 1.0f; } local_b0.mVolume = param_1.mVolume * fVar1; this_01->field_0x28 = fVar1; f32 dVar8 = J3DUD::JMAAbs(local_b8.x); f32 dVar13 = Z2Calc::getParamByExp(local_b0.mVolume * dVar8, 1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 1.0 / 3.0f, Z2Calc::CURVE_SIGN_1); f32 dVar14 = J3DUD::JMAAbs(local_b8.y); dVar14 = Z2Calc::getParamByExp(local_b0.mVolume * dVar14, 1.0f, 0.0f, 0.1f, 1.0f / 30.0f, 1.0f / 3.0f, Z2Calc::CURVE_SIGN_1); if (dVar13 > 1.0f / 3.0f) { dVar13 = 1.0f / 3.0f; } if (dVar14 > 1.0f / 3.0f) { dVar14 = 1.0f / 3.0f; } local_b0.mPan = this_01->mPan + (local_b8.x * dVar13); local_b0.mDolby = this_01->mDolby + (local_b8.y * dVar14); local_b0.clamp(); this_01->field_0x0.combine(param_0, local_b0); this_01->mPan = local_b0.mPan; this_01->mDolby = local_b0.mDolby; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audible::setOuterParams(JASSoundParams const& param_0, JASSoundParams const& param_1, int param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/setOuterParams__9Z2AudibleFRC14JASSoundParamsRC14JASSoundParamsi.s" } #pragma pop #endif /* 802BC204-802BC218 2B6B44 0014+00 4/4 0/0 0/0 .text getChannel__9Z2AudibleFi */ Z2AudibleChannel* Z2Audible::getChannel(int param_0) { return &field_0x2c[param_0]; } /* 802BC218-802BC248 2B6B58 0030+00 3/3 0/0 0/0 .text getDistVolBit__9Z2AudibleFv */ u32 Z2Audible::getDistVolBit() { u16 uVar1 = getAudibleParam()->field_0x0.half.f1; if (uVar1 != 0) { if ((uVar1 & 7) != 0) { return uVar1 & 7; } if ((uVar1 & 0x70) != 0) { return ((int)(uVar1 & 0x70) >> 4) + 7; } } return 0; } /* 802BC248-802BC284 2B6B88 003C+00 1/1 0/0 0/0 .text __ct__19Z2Audience3DSettingFv */ Z2Audience3DSetting::Z2Audience3DSetting() { mVolumeDistInit = false; mDolbyDistInit = false; init(); } /* ############################################################################################## */ /* 80455AD8-80455ADC 0040D8 0004+00 4/4 0/0 0/0 .sdata2 @1036 */ SECTION_SDATA2 static f32 lit_1036 = 1.5f; /* 802BC284-802BC308 2B6BC4 0084+00 1/1 0/0 0/0 .text init__19Z2Audience3DSettingFv */ // Matches with literals #ifdef NONMATCHING void Z2Audience3DSetting::init() { field_0x40 = Z2Param::MIN_DISTANCE_VOLUME; field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX; field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX; field_0x54 = Z2Param::DISTANCE_FX_PARAM; field_0x50 = 0.0f; field_0x4c = Z2Param::DOLBY_CENTER_VALUE; field_0x58 = 0.5f; field_0x64 = 0xff; field_0x5c = Z2Param::SONIC_SPEED; field_0x60 = 1.5f; initVolumeDist(); initDolbyDist(); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience3DSetting::init() { nofralloc #include "asm/Z2AudioLib/Z2Audience/init__19Z2Audience3DSettingFv.s" } #pragma pop #endif /* ############################################################################################## */ /* 80455ADC-80455AE0 0040DC 0004+00 2/2 0/0 0/0 .sdata2 @1058 */ SECTION_SDATA2 static f32 lit_1058 = 1.25f; /* 80455AE0-80455AE4 0040E0 0004+00 3/3 0/0 0/0 .sdata2 @1059 */ SECTION_SDATA2 static f32 lit_1059 = 2.0f; /* 80455AE4-80455AE8 0040E4 0004+00 2/2 0/0 0/0 .sdata2 @1060 */ SECTION_SDATA2 static f32 lit_1060 = 4.0f; /* 80455AE8-80455AEC 0040E8 0004+00 2/2 0/0 0/0 .sdata2 @1061 */ SECTION_SDATA2 static f32 lit_1061 = 6.0f; /* 80455AEC-80455AF0 0040EC 0004+00 2/2 0/0 0/0 .sdata2 @1062 */ SECTION_SDATA2 static f32 lit_1062 = 8.0f; /* 80455AF0-80455AF4 0040F0 0004+00 2/2 0/0 0/0 .sdata2 @1063 */ SECTION_SDATA2 static f32 lit_1063 = 9.0f / 10.0f; /* 80455AF4-80455AF8 0040F4 0004+00 2/2 0/0 0/0 .sdata2 @1064 */ SECTION_SDATA2 static f32 lit_1064 = 4.0f / 5.0f; /* 80455AF8-80455AFC 0040F8 0004+00 2/2 0/0 0/0 .sdata2 @1065 */ SECTION_SDATA2 static f32 lit_1065 = 7.0f / 10.0f; /* 80455AFC-80455B00 0040FC 0004+00 2/2 0/0 0/0 .sdata2 @1066 */ SECTION_SDATA2 static f32 lit_1066 = 3.0f / 5.0f; /* 80455B00-80455B04 004100 0004+00 2/2 0/0 0/0 .sdata2 @1067 */ SECTION_SDATA2 static f32 lit_1067 = 2.0f / 5.0f; /* 802BC308-802BC4D0 2B6C48 01C8+00 2/2 0/0 0/0 .text initVolumeDist__19Z2Audience3DSettingFv */ // Matches with literals #ifdef NONMATCHING void Z2Audience3DSetting::initVolumeDist() { if (mVolumeDistInit) return; field_0x0[0] = Z2Param::DISTANCE_MAX; field_0x3c = Z2Param::MAX_VOLUME_DISTANCE; calcVolumeFactorAll(); calcPriorityFactorAll(); calcFxMixFactorAll(); mVolumeDistInit = true; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience3DSetting::initVolumeDist() { nofralloc #include "asm/Z2AudioLib/Z2Audience/initVolumeDist__19Z2Audience3DSettingFv.s" } #pragma pop #endif /* ############################################################################################## */ /* 80451350-80451354 000850 0004+00 2/2 0/0 0/0 .sbss cNearFarRatio */ static f32 cNearFarRatio; /* 802BC4D0-802BC6A4 2B6E10 01D4+00 1/1 0/0 0/0 .text updateVolumeDist__19Z2Audience3DSettingFf */ // Matches with literals #ifdef NONMATCHING void Z2Audience3DSetting::updateVolumeDist(f32 param_0) { field_0x0[0] = param_0; if (param_0 > Z2Param::DISTANCE_MAX) { field_0x3c = cNearFarRatio * param_0; } else { field_0x3c = Z2Param::MAX_VOLUME_DISTANCE; } calcVolumeFactorAll(); calcPriorityFactorAll(); calcFxMixFactorAll(); mVolumeDistInit = false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience3DSetting::updateVolumeDist(f32 param_0) { nofralloc #include "asm/Z2AudioLib/Z2Audience/updateVolumeDist__19Z2Audience3DSettingFf.s" } #pragma pop #endif /* 802BC6A4-802BC6F8 2B6FE4 0054+00 1/1 0/0 0/0 .text initDolbyDist__19Z2Audience3DSettingFv */ // matches with literals #ifdef NONMATCHING void Z2Audience3DSetting::initDolbyDist() { if (!mDolbyDistInit) { field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX; field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX; field_0x68 = -field_0x4c / field_0x44; field_0x6c = (1.0f - field_0x4c) / field_0x48; mDolbyDistInit = true; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience3DSetting::initDolbyDist() { nofralloc #include "asm/Z2AudioLib/Z2Audience/initDolbyDist__19Z2Audience3DSettingFv.s" } #pragma pop #endif /* 802BC6F8-802BC758 2B7038 0060+00 1/1 0/0 0/0 .text updateDolbyDist__19Z2Audience3DSettingFff */ // Matches with literals #ifdef NONMATCHING void Z2Audience3DSetting::updateDolbyDist(f32 param_0, f32 param_1) { if (param_0 > -1.0f * Z2Param::DOLBY_FLONT_DISTANCE_MAX) { field_0x44 = -1.0f * param_0; } else { field_0x44 = Z2Param::DOLBY_FLONT_DISTANCE_MAX; } if (param_1 < 2.0f * field_0x44) { param_1 = 2.0f * field_0x44; } if (param_1 > Z2Param::DOLBY_BEHIND_DISTANCE_MAX) { field_0x48 = param_1; } else { field_0x48 = Z2Param::DOLBY_BEHIND_DISTANCE_MAX; } mDolbyDistInit = false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience3DSetting::updateDolbyDist(f32 param_0, f32 param_1) { nofralloc #include "asm/Z2AudioLib/Z2Audience/updateDolbyDist__19Z2Audience3DSettingFff.s" } #pragma pop #endif /* 802BC758-802BC788 2B7098 0030+00 1/1 0/0 0/0 .text __ct__13Z2AudioCameraFv */ // Matches with literals #ifdef NONMATCHING Z2AudioCamera::Z2AudioCamera() { mFovySin = 1.0f; mVolCenterZ = 0.0f; mTargetVolume = 0.0f; mDolbyCenterZ = 0.0f; mCamDist = 0.0f; field_0x68 = 0.0f; field_0x6c = 0.0f; mSetMainCamera = 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2AudioCamera::Z2AudioCamera() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__ct__13Z2AudioCameraFv.s" } #pragma pop #endif /* 802BC788-802BC7DC 2B70C8 0054+00 1/1 0/0 0/0 .text init__13Z2AudioCameraFv */ void Z2AudioCamera::init() { JGeometry::TPosition3f32 aTStack_38; aTStack_38.identity(); JGeometry::TVec3 VStack_44; VStack_44.set(100000.0f, 100000.0f, 100000.0f); setCameraState(aTStack_38, *(Vec*)&VStack_44, true); } /* 802BC7DC-802BC8AC 2B711C 00D0+00 2/2 0/0 0/0 .text setCameraState__13Z2AudioCameraFPA4_CfR3Vecb */ // Matches with literals #ifdef NONMATCHING void Z2AudioCamera::setCameraState(f32 const (*param_0)[4], Vec& param_1, bool param_2) { field_0x0.set(param_0); if (param_2) { mPos.set(*(JGeometry::TVec3*)¶m_1); field_0x48.set(mPos); mVel.zero(); } else { field_0x48.set(mPos); mPos.set(*(JGeometry::TVec3*)¶m_1); mVel.sub(mPos, field_0x48); } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2AudioCamera::setCameraState(f32 const (*param_0)[4], Vec& param_1, bool param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/setCameraState__13Z2AudioCameraFPA4_CfR3Vecb.s" } #pragma pop #endif /* ############################################################################################## */ /* 8039C220-8039C230 028880 000C+04 1/1 0/0 0/0 .rodata @1193 */ SECTION_RODATA static u8 const lit_1193[12 + 4 /* padding */] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* padding */ 0x00, 0x00, 0x00, 0x00, }; COMPILER_STRIP_GATE(0x8039C220, &lit_1193); /* 80455B08-80455B0C 004108 0004+00 1/1 0/0 0/0 .sdata2 @1267 */ SECTION_SDATA2 static f32 lit_1267 = -22.755556106567383f; /* 80455B0C-80455B10 00410C 0004+00 1/1 0/0 0/0 .sdata2 @1268 */ SECTION_SDATA2 static f32 lit_1268 = 22.755556106567383f; /* 80455B10-80455B14 004110 0004+00 1/1 0/0 0/0 .sdata2 @1269 */ SECTION_SDATA2 static f32 lit_1269 = 50.0f; /* 80455B14-80455B18 004114 0004+00 1/1 0/0 0/0 .sdata2 @1270 */ SECTION_SDATA2 static f32 lit_1270 = 2.1445069313049316f; /* 80455B18-80455B1C 004118 0004+00 2/2 0/0 0/0 .sdata2 @1271 */ SECTION_SDATA2 static f32 lit_1271 = 32.0f; /* 80455B1C-80455B20 00411C 0004+00 1/1 0/0 0/0 .sdata2 @1272 */ SECTION_SDATA2 static f32 lit_1272 = -100.0f; /* 80455B20-80455B24 004120 0004+00 1/1 0/0 0/0 .sdata2 @1273 */ SECTION_SDATA2 static f32 lit_1273 = 0.01745329238474369f; /* 802BC8AC-802BCBEC 2B71EC 0340+00 1/1 0/0 0/0 .text * setCameraState__13Z2AudioCameraFPA4_fR3VecR3Vecffbb */ // Matches with literals #ifdef NONMATCHING void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& param_1, Vec& param_2, f32 param_3, f32 param_4, bool param_5, bool param_6) { JGeometry::TVec3 aTStack_c0; VECSubtract(¶m_2, ¶m_1, aTStack_c0); mCamDist = aTStack_c0.length(); f32 dVar10 = 0.5f * param_3; mFovySin = JMASinDegree(dVar10); f32 fVar8 = JMACosDegree(dVar10); field_0x6c = mFovySin / fVar8; field_0x68 = field_0x6c * param_4; f32 dVar11; if (param_3 >= 50.0f) { mVolCenterZ = 0.0f; dVar11 = mCamDist; } else { dVar11 = 2.1445069313049316f * (mCamDist * field_0x6c); mVolCenterZ = mCamDist - dVar11; if (mVolCenterZ < 32.0f * FLT_EPSILON) { mVolCenterZ = 0.0f; } } if (mSetMainCamera && mTargetVolume > 0.0f) { if (dVar11 > (double)(Z2Param::DISTANCE_MAX * (1.0f - mTargetVolume))) { Z2GetAudience()->getSetting()->updateVolumeDist(dVar11 / (1.0f - mTargetVolume)); } else { Z2GetAudience()->getSetting()->initVolumeDist(); } } if (param_5 || aTStack_c0.y >= 0.0f) { mDolbyCenterZ = -100.0f; if (mSetMainCamera) { Z2GetAudience()->getSetting()->updateDolbyDist(mCamDist, mCamDist); } } else { JGeometry::TVec3 aTStack_cc = {0.0f, 0.0f, 0.0f}; aTStack_cc.x = param_0[0][0]; aTStack_cc.y = param_0[0][1]; aTStack_cc.z = param_0[0][2]; Mtx rotMtx; MTXRotAxisRad(rotMtx, aTStack_cc, 0.01745329238474369f * (-1.0f * dVar10)); JGeometry::TVec3 aTStack_d8; MTXMultVec(rotMtx, aTStack_c0, aTStack_d8); aTStack_d8.scale(aTStack_c0.y / aTStack_d8.y); mDolbyCenterZ = fVar8 * aTStack_d8.length(); if (mSetMainCamera) { Z2GetAudience()->getSetting()->updateDolbyDist(mCamDist - mDolbyCenterZ, mCamDist + mDolbyCenterZ); } } setCameraState(param_0, param_1, param_6); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2AudioCamera::setCameraState(f32 (*param_0)[4], Vec& param_1, Vec& param_2, f32 param_3, f32 param_4, bool param_5, bool param_6) { nofralloc #include "asm/Z2AudioLib/Z2Audience/setCameraState__13Z2AudioCameraFPA4_fR3VecR3Vecffbb.s" } #pragma pop #endif /* 802BCBEC-802BCC7C 2B752C 0090+00 2/2 0/0 0/0 .text * convertAbsToRel__13Z2AudioCameraFP9Z2Audiblei */ void Z2AudioCamera::convertAbsToRel(Z2Audible* param_0, int param_1) { Z2AudibleChannel* iVar2 = param_0->getChannel(param_1); if (iVar2 == NULL) { return; } Z2AudibleRelPos* relPos = &iVar2->field_0x14; MTXMultVec(field_0x0, param_0->mPos, relPos->field_0x00); relPos->field_0xC = relPos->field_0x00.length(); JGeometry::TVec3 aTStack_38; JGeometry::setTVec3f(*(Vec*)&relPos->field_0x00, *(Vec*)&aTStack_38); aTStack_38.z += mVolCenterZ; relPos->field_0x10 = aTStack_38.length(); } /* 802BCC7C-802BCCC0 2B75BC 0044+00 2/2 0/0 0/0 .text convertAbsToRel__13Z2AudioCameraCFR3VecP3Vec */ bool Z2AudioCamera::convertAbsToRel(Vec& param_0, Vec* param_1) const { MTXMultVec(field_0x0, ¶m_0, param_1); return isInSight(*param_1); } /* 802BCCC0-802BCD28 2B7600 0068+00 1/1 0/0 0/0 .text isInSight__13Z2AudioCameraCFR3Vec */ // Matches with literals #ifdef NONMATCHING bool Z2AudioCamera::isInSight(Vec& param_0) const { if (param_0.z >= 0.0f) { return false; } f32 zabs = J3DUD::JMAAbs(param_0.z); f32 xabs = J3DUD::JMAAbs(param_0.x); if (xabs > field_0x68 * zabs) { return false; } f32 yabs = J3DUD::JMAAbs(param_0.y); if (yabs > field_0x6c * zabs) { return false; } return true; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool Z2AudioCamera::isInSight(Vec& param_0) const { nofralloc #include "asm/Z2AudioLib/Z2Audience/isInSight__13Z2AudioCameraCFR3Vec.s" } #pragma pop #endif /* ############################################################################################## */ /* 80455B24-80455B28 004124 0004+00 1/1 0/0 0/0 .sdata2 @1334 */ SECTION_SDATA2 static f32 lit_1334 = 200.0f; /* 80455B28-80455B2C 004128 0004+00 1/1 0/0 0/0 .sdata2 @1335 */ SECTION_SDATA2 static f32 lit_1335 = 400.0f; /* 80455B2C-80455B30 00412C 0004+00 2/2 0/0 0/0 .sdata2 @1336 */ SECTION_SDATA2 static f32 lit_1336 = 1.0f / 5.0f; /* 80455B30-80455B34 004130 0004+00 1/1 0/0 0/0 .sdata2 @1337 */ SECTION_SDATA2 static f32 lit_1337 = 255.0f; /* 802BCD28-802BCDA8 2B7668 0080+00 1/1 0/0 0/0 .text __ct__9Z2SpotMicFv */ // Matches with literals #ifdef NONMATCHING Z2SpotMic::Z2SpotMic() { field_0x0 = 200.0f; field_0x4 = 400.0f; field_0x8 = 0.0f; field_0xc = 0.2f; mPosPtr = NULL; mIgnoreIfOut = true; mMicOn = true; field_0x1c = 255.0f / (field_0x4 - field_0x0); clearMicState(0); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2SpotMic::Z2SpotMic() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__ct__9Z2SpotMicFv.s" } #pragma pop #endif /* 802BCDA8-802BCDE8 2B76E8 0040+00 2/2 0/0 0/0 .text clearMicState__9Z2SpotMicFi */ void Z2SpotMic::clearMicState(int param_0) { field_0x10[param_0] = NULL; field_0x18[param_0] = field_0xc; field_0x26[param_0] = 0; calcVolumeFactor(param_0); } /* 802BCDE8-802BCE14 2B7728 002C+00 2/2 0/0 0/0 .text calcVolumeFactor__9Z2SpotMicFi */ void Z2SpotMic::calcVolumeFactor(int param_0) { field_0x20[param_0] = (field_0x8 - field_0x18[param_0]) / (field_0x4 - field_0x0); } /* 802BCE14-802BCF5C 2B7754 0148+00 1/1 0/0 0/0 .text setMicState__9Z2SpotMicFP13Z2AudioCamerai */ // Matches with literals #ifdef NONMATCHING void Z2SpotMic::setMicState(Z2AudioCamera* param_0, int param_1) { if (mMicOn && mPosPtr != 0 && param_0 != NULL) { clearMicState(param_1); JGeometry::TVec3 aVStack_58; field_0x26[param_1] = param_0->convertAbsToRel(*mPosPtr, aVStack_58); if (!mIgnoreIfOut || field_0x26[param_1]) { field_0x10[param_1] = param_0; aVStack_58.z = aVStack_58[0].z + param_0->getVolCenterZ(); f32 dVar10 = aVStack_58.length(); f32 dVar11 = Z2GetAudience()->getSetting()->field_0x0[0]; f32 dVar12 = Z2GetAudience()->getSetting()->field_0x3c; if (dVar10 > dVar11) { field_0x18[param_1] = field_0xc; } else { if (dVar10 < dVar12) { field_0x18[param_1] = 1.0f; } else { field_0x18[param_1] = JGeometry::TUtil::clamp( 1.0f + ((field_0xc - 1.0f) / (dVar11 - dVar12)) * (dVar10 - dVar12), 0.0f, 1.0f); } } calcVolumeFactor(param_1); } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2SpotMic::setMicState(Z2AudioCamera* param_0, int param_1) { nofralloc #include "asm/Z2AudioLib/Z2Audience/setMicState__9Z2SpotMicFP13Z2AudioCamerai.s" } #pragma pop #endif /* 802BCF5C-802BCFE4 2B789C 0088+00 2/2 0/0 0/0 .text calcMicDist__9Z2SpotMicFP9Z2Audible */ // Matches with literals #ifdef NONMATCHING f32 Z2SpotMic::calcMicDist(Z2Audible* param_0) { if (!mMicOn) { return 0.0f; } if (mPosPtr == NULL) { return 0.0f; } if (param_0 == NULL) { return 0.0f; } JGeometry::TVec3 aTStack_1c; JGeometry::TVec3 aTStack_28; JGeometry::setTVec3f(*mPosPtr, *(Vec*)&aTStack_28); aTStack_1c.sub(param_0->getPos(), aTStack_28); return aTStack_1c.length(); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2SpotMic::calcMicDist(Z2Audible* param_0) { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcMicDist__9Z2SpotMicFP9Z2Audible.s" } #pragma pop #endif /* 802BCFE4-802BD03C 2B7924 0058+00 1/1 0/0 0/0 .text calcMicPriority__9Z2SpotMicFf */ u32 Z2SpotMic::calcMicPriority(f32 param_0) { if (param_0 > field_0x4) { return Z2GetAudience()->getSetting()->field_0x64; } if (param_0 < field_0x0) { return 0; } return field_0x1c * (param_0 - field_0x0); } /* 802BD03C-802BD130 2B797C 00F4+00 1/1 0/0 0/0 .text calcMicVolume__9Z2SpotMicFfif */ // Matches with literals #ifdef NONMATCHING f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { if (mMicOn == NULL) { return param_2; } if (mPosPtr == NULL) { return param_2; } if (field_0x10[param_1] == NULL) { return param_2; } if (mIgnoreIfOut && field_0x26[param_1] == 0) { return param_2; } if (param_0 > field_0x4) { return -1.0f; } if (param_2 >= field_0x18[param_1]) { return param_2; } if (param_0 < field_0x0) { return field_0x18[param_1]; } f32 dVar7 = JGeometry::TUtil::clamp( field_0x18[param_1] + field_0x20[param_1] * (param_0 - field_0x0), field_0x8, field_0x18[param_1]); if (param_2 < dVar7) { param_2 = dVar7; } return param_2; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2SpotMic::calcMicVolume(f32 param_0, int param_1, f32 param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcMicVolume__9Z2SpotMicFfif.s" } #pragma pop #endif /* 802BD130-802BD1FC 2B7A70 00CC+00 0/0 1/1 0/0 .text __ct__10Z2AudienceFv */ // Matches with literals #ifdef NONMATCHING Z2Audience::Z2Audience() : JASGlobalInstance(true), field_0x4(1.0f), field_0x8(0x7f) { mNumPlayers = 1; mUsingOffMicVol = false; mAudioCamera[0].init(); mAudioCamera[0].setMainCamera(); mLinkMic = mSpotMic; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2Audience::Z2Audience() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__ct__10Z2AudienceFv.s" } #pragma pop #endif /* 802BD1FC-802BD288 2B7B3C 008C+00 1/0 1/1 0/0 .text __dt__10Z2AudienceFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void __dt__10Z2AudienceFv() { // asm Z2Audience::~Z2Audience() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__dt__10Z2AudienceFv.s" } #pragma pop /* 802BD288-802BD2DC 2B7BC8 0054+00 2/2 1/1 0/0 .text __dt__22JASMemPool<9Z2Audible>Fv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off extern "C" asm void func_802BD288(void* _this) { nofralloc #include "asm/Z2AudioLib/Z2Audience/func_802BD288.s" } #pragma pop /* 802BD2DC-802BD338 2B7C1C 005C+00 0/0 1/1 0/0 .text * setAudioCamera__10Z2AudienceFPA4_fR3VecR3Vecffbib */ void Z2Audience::setAudioCamera(f32 (*param_0)[4], Vec& param_1, Vec& param_2, f32 param_3, f32 param_4, bool param_5, int param_6, bool param_7) { mAudioCamera[param_6].setCameraState(param_0, param_1, param_2, param_3, param_4, param_5, param_7); mLinkMic->setMicState(&mAudioCamera[param_6], param_6); } /* ############################################################################################## */ /* 804341D8-804341E4 060EF8 000C+00 2/2 0/0 0/0 .bss @1539 */ static u8 lit_1539[12]; /* 804341E4-804341F8 060F04 0010+04 2/2 1/1 0/0 .bss * memPool_$localstatic3$getMemPool___30JASPoolAllocObject<9Z2Audible>Fv */ extern u8 data_804341E4[16 + 4 /* padding */]; u8 data_804341E4[16 + 4 /* padding */]; /* 80451354-80451358 000854 0004+00 2/2 1/1 0/0 .sbss None */ extern u8 data_80451354[4]; u8 data_80451354[4]; /* 802BD338-802BD4D4 2B7C78 019C+00 1/0 0/0 0/0 .text * newAudible__10Z2AudienceFRCQ29JGeometry8TVec310JAISoundIDPCQ29JGeometry8TVec3Ul */ // Matches with literals #ifdef NONMATCHING JAIAudible* Z2Audience::newAudible(JGeometry::TVec3 const& param_0, JAISoundID param_1, JGeometry::TVec3 const* param_2, u32 param_3) { JAUAudibleParam local_34; u32 uVar4 = param_3 | ~((1 << mNumPlayers) + -1); if (uVar4 == 0xffffffff) { return NULL; } local_34.field_0x0.raw = Z2GetSoundInfo()->getAudibleSwFull(param_1); bool x = ((local_34.field_0x0.bytes.b0 >> 4) & 0xf) != 0; Z2Audible* this_01 = (Z2Audible*)new JASPoolAllocObject(); this_01 = new (this_01) Z2Audible(param_0, param_2, uVar4, x); if (this_01 == NULL) { return NULL; } this_01->setAudibleParam(local_34); for (int iVar5 = 0; iVar5 < mNumPlayers; iVar5++) { Z2AudibleChannel* iVar2 = this_01->getChannel(iVar5); if (iVar2 != NULL) { u32 local_38 = this_01->getDistVolBit(); mAudioCamera[iVar5].convertAbsToRel(this_01, iVar5); calcDeltaPriority_(iVar2->field_0x14.field_0x10, local_38, false); } } for (int iVar5 = 0; iVar5 < 1; iVar5++) { if (mSpotMic[iVar5].isOn()) { this_01->field_0x64[iVar5] = mSpotMic[iVar5].calcMicDist(this_01); } } return this_01; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm JAIAudible* Z2Audience::newAudible(JGeometry::TVec3 const& param_0, JAISoundID param_1, JGeometry::TVec3 const* param_2, u32 param_3) { nofralloc #include "asm/Z2AudioLib/Z2Audience/func_802BD338.s" } #pragma pop #endif /* 802BD4D4-802BD510 2B7E14 003C+00 1/0 0/0 0/0 .text deleteAudible__10Z2AudienceFP10JAIAudible */ void Z2Audience::deleteAudible(JAIAudible* param_0) { delete param_0; } /* 802BD510-802BD5B8 2B7E50 00A8+00 1/0 0/0 0/0 .text __dt__9Z2AudibleFv */ // Matches with static objects #ifdef NONMATCHING Z2Audible::~Z2Audible() { } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm Z2Audible::~Z2Audible() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__dt__9Z2AudibleFv.s" } #pragma pop #endif /* 802BD5B8-802BD704 2B7EF8 014C+00 1/0 0/0 0/0 .text calcPriority__10Z2AudienceFP10JAIAudible */ u32 Z2Audience::calcPriority(JAIAudible* param_0) { Z2Audible* z2Audible = (Z2Audible*)param_0; if (!z2Audible->getAudibleParam()->field_0x0.bytes.b0_4) { for (int i = 0; i < mNumPlayers; i++) { mAudioCamera[i].convertAbsToRel(z2Audible, i); } return 0; } u32 deltaPriority[1]; u32 rv = 0xffffffff; for (int i = 0; i < mNumPlayers; i++) { Z2AudibleChannel* iVar4 = (z2Audible)->getChannel(i); if (iVar4 != NULL) { mAudioCamera[i].convertAbsToRel(z2Audible, i); u32 distvolBit = z2Audible->getDistVolBit(); const JAUAudibleParam* puVar1 = z2Audible->getAudibleParam(); deltaPriority[i] = calcDeltaPriority_(iVar4->field_0x14.field_0x10, distvolBit, puVar1->field_0x0.bytes.b0_7); if (deltaPriority[i] < rv) { rv = deltaPriority[i]; } } } for (int i = 0; i < 1; i++) { if (mSpotMic[i].isOn()) { z2Audible->field_0x64[i] = mSpotMic[i].calcMicDist(z2Audible); u32 micPriority = mSpotMic[i].calcMicPriority(z2Audible->field_0x64[i]); if (micPriority < rv) { rv = micPriority; } } } return rv; } /* 802BD704-802BD71C 2B8044 0018+00 1/1 1/1 0/0 .text calcOffMicSound__10Z2AudienceFf */ f32 Z2Audience::calcOffMicSound(f32 param_0) { if (mUsingOffMicVol == 0) { return param_0; } return param_0 * field_0x4; } /* 802BD71C-802BD90C 2B805C 01F0+00 1/0 0/0 0/0 .text * mixChannelOut__10Z2AudienceFRC14JASSoundParamsP10JAIAudiblei */ // Matches with literals #ifdef NONMATCHING void Z2Audience::mixChannelOut(JASSoundParams const& param_0, JAIAudible* param_1, int param_2) { Z2Audible* z2Audible = (Z2Audible*)param_1; Z2AudibleChannel* pZVar5 = z2Audible->getChannel(param_2); if (pZVar5 == NULL) { return; } JASSoundParams local_60; u32 iVar6 = z2Audible->getDistVolBit(); if (z2Audible->getAudibleParam()->field_0x0.bytes.b0_5) { local_60.mVolume = calcVolume_(pZVar5->field_0x14.field_0x10, iVar6); f32 dVar9 = mLinkMic->calcMicVolume(z2Audible->field_0x64[0], param_2, local_60.mVolume); if (dVar9 < 0.0f) { dVar9 = calcOffMicSound(local_60.mVolume); } local_60.mVolume = dVar9; JAUAudibleParam* puVar7 = z2Audible->getAudibleParam(); if ((puVar7->field_0x0.bytes.b1_2_7 & 8) && (local_60.mVolume <= 0.2f)) { local_60.mVolume = 0.2f; } } else { local_60.mVolume = 1.0f; } if (z2Audible->getAudibleParam()->field_0x0.bytes.b1_1 && mNumPlayers == 1) { local_60.mDolby = calcRelPosDolby(*(Vec*)&pZVar5->field_0x14.field_0x00, param_2); } else { local_60.mDolby = 0.5f; } if (z2Audible->getAudibleParam()->field_0x0.bytes.b1_0) { if (mNumPlayers > 2) { f32 fVar1; if (param_2 & 1) { fVar1 = 1.0f; } else { fVar1 = 0.0f; } local_60.mPan = fVar1; } else { local_60.mPan = calcRelPosPan(*(Vec*)&pZVar5->field_0x14.field_0x00, param_2); } } else { local_60.mPan = 0.5f; } local_60.mPitch = calcPitch_(pZVar5, z2Audible, &mAudioCamera[param_2]); f32 dVar9; if (z2Audible->getAudibleParam()->field_0x0.bytes.b0_6) { dVar9 = calcFxMix_(pZVar5->field_0x14.field_0xC, iVar6); } else { dVar9 = 0.0f; } local_60.mFxMix = dVar9; local_60.clamp(); z2Audible->setOuterParams(param_0, local_60, param_2); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience::mixChannelOut(JASSoundParams const& param_0, JAIAudible* param_1, int param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/mixChannelOut__10Z2AudienceFRC14JASSoundParamsP10JAIAudiblei.s" } #pragma pop #endif /* 802BD90C-802BD92C 2B824C 0020+00 0/0 1/1 0/0 .text setTargetVolume__10Z2AudienceFfi */ // Matches with literals #ifdef NONMATCHING void Z2Audience::setTargetVolume(f32 volume, int index) { mAudioCamera[index].setTargetVolume(volume); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void Z2Audience::setTargetVolume(f32 param_0, int param_1) { nofralloc #include "asm/Z2AudioLib/Z2Audience/setTargetVolume__10Z2AudienceFfi.s" } #pragma pop #endif /* 802BD92C-802BD95C 2B826C 0030+00 0/0 4/4 0/0 .text convertAbsToRel__10Z2AudienceFR3VecP3Veci */ bool Z2Audience::convertAbsToRel(Vec& param_0, Vec* param_1, int param_2) { return mAudioCamera[param_2].convertAbsToRel(param_0, param_1); } /* 802BD95C-802BDA44 2B829C 00E8+00 0/0 3/3 0/0 .text calcRelPosVolume__10Z2AudienceFRC3Vecfi */ // Mathces with literals #ifdef NONMATCHING f32 Z2Audience::calcRelPosVolume(Vec const& param_0, f32 param_1, int param_2) { JGeometry::TVec3 aTStack_3c; JGeometry::setTVec3f(param_0, *(Vec*)&aTStack_3c); aTStack_3c.z += mAudioCamera[param_2].getVolCenterZ(); aTStack_3c.y *= 1.5f; f32 this_00 = aTStack_3c.length(); if (this_00 > mSetting.field_0x0[0] * param_1) { return mSetting.field_0x40; } if (this_00 < mSetting.field_0x3c) { return 1.0f; } return JGeometry::TUtil::clamp( 1.0f + ((mSetting.field_0x40 - 1.0f) / ((mSetting.field_0x0[0] * param_1) - mSetting.field_0x3c)) * (this_00 - mSetting.field_0x3c), 0.0f, 1.0f); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2Audience::calcRelPosVolume(Vec const& param_0, f32 param_1, int param_2) { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcRelPosVolume__10Z2AudienceFRC3Vecfi.s" } #pragma pop #endif /* 802BDA44-802BDB44 2B8384 0100+00 1/1 3/3 0/0 .text calcRelPosPan__10Z2AudienceFRC3Veci */ // Matches with literals #ifdef NONMATCHING f32 Z2Audience::calcRelPosPan(Vec const& param_0, int param_1) { Vec local_54 = param_0; local_54.y = 0.0f; f32 dVar6 = VECMag(&local_54); if (dVar6 < 0.1f) { return 0.5f; } dVar6 = (0.5f + mSetting.field_0x58 * (local_54.x / dVar6)); if (local_54.z <= 0.0f) { f32 dVar7 = mAudioCamera[param_1].getFovySin(); if (dVar6 < 0.5f) { dVar6 = Z2Calc::getParamByExp( dVar6, 0.0f, 0.5f, dVar7, 0.0f, 0.5f, Z2Calc::CURVE_SIGN_1); } else { dVar6 = Z2Calc::getParamByExp( dVar6, 0.5f, 1.0f, dVar7, 0.5f, 1.0f, Z2Calc::CURVE_SIGN_0); } } if (dVar6 > 1.0f) { return 1.0f; } if (dVar6 < 0.0f) { return 0.0f; } return dVar6; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2Audience::calcRelPosPan(Vec const& param_0, int param_1) { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcRelPosPan__10Z2AudienceFRC3Veci.s" } #pragma pop #endif /* 802BDB44-802BDBDC 2B8484 0098+00 1/1 3/3 0/0 .text calcRelPosDolby__10Z2AudienceFRC3Veci */ // Matches with literals #ifdef NONMATCHING f32 Z2Audience::calcRelPosDolby(Vec const& param_0, int param_1) { f32 fVar1 = param_0.z + mAudioCamera[param_1].getDolbyCenterZ(); if (fVar1 > mSetting.field_0x48) { return 1.0f; } if (fVar1 < mSetting.field_0x44) { return 0.0f; } if (fVar1 < 0.0f) { return Z2Calc::getParamByExp( fVar1, mSetting.field_0x44, 0.0f, 0.3f, 0.0f, mSetting.field_0x4c, Z2Calc::CURVE_SIGN_1); } return Z2Calc::getParamByExp( fVar1, 0.0f, mSetting.field_0x48, 0.3f, mSetting.field_0x4c, 1.0f, Z2Calc::CURVE_SIGN_0); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2Audience::calcRelPosDolby(Vec const& param_0, int param_1) { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcRelPosDolby__10Z2AudienceFRC3Veci.s" } #pragma pop #endif /* 802BDBDC-802BDC44 2B851C 0068+00 1/1 0/0 0/0 .text calcVolume___10Z2AudienceCFfi */ // Matches with literals #ifdef NONMATCHING f32 Z2Audience::calcVolume_(f32 param_0, int param_1) const { if (param_0 > mSetting.field_0x0[param_1]) { return mSetting.field_0x40; } if (param_0 < mSetting.field_0x3c) { return 1.0f; } f32 volume = 1.0f + mSetting.field_0x70[param_1] * (param_0 - mSetting.field_0x3c); if (volume < 0.0f) { return 0.0f; } if (volume > 1.0f) { return 1.0f; } return volume; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2Audience::calcVolume_(f32 param_0, int param_1) const { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcVolume___10Z2AudienceCFfi.s" } #pragma pop #endif /* 802BDC44-802BDCB0 2B8584 006C+00 2/2 0/0 0/0 .text calcDeltaPriority___10Z2AudienceCFfib */ u32 Z2Audience::calcDeltaPriority_(f32 param_0, int param_1, bool param_2) const { if (param_0 > mSetting.field_0x0[param_1]) { if (param_2) { return -1; } return mSetting.field_0x64; } if (param_0 < mSetting.field_0x3c) { return 0; } return mSetting.field_0xac[param_1] * (param_0 - mSetting.field_0x3c); } /* 802BDCB0-802BDD00 2B85F0 0050+00 1/1 0/0 0/0 .text * calcPitchDoppler___10Z2AudienceCFRCQ29JGeometry8TVec3RCQ29JGeometry8TVec3RCQ29JGeometry8TVec3f */ f32 Z2Audience::calcPitchDoppler_(JGeometry::TVec3 const& param_0, JGeometry::TVec3 const& param_1, JGeometry::TVec3 const& param_2, f32 param_3) const { f32 dVar8 = param_0.dot(param_1); f32 dVar7 = param_0.dot(param_2); return (mSetting.field_0x5c + param_3 * dVar8) / (mSetting.field_0x5c + param_3 * dVar7); } /* 802BDD00-802BDD48 2B8640 0048+00 1/1 0/0 0/0 .text calcFxMix___10Z2AudienceCFfi */ f32 Z2Audience::calcFxMix_(f32 param_0, int param_1) const { if (param_0 > mSetting.field_0x0[param_1]) { return mSetting.field_0x54; } if (param_0 < mSetting.field_0x3c) { return mSetting.field_0x50; } return mSetting.field_0x50 + mSetting.field_0xe8[param_1] * (param_0 - mSetting.field_0x3c); } /* ############################################################################################## */ /* 80455B34-80455B38 004134 0004+00 1/1 0/0 0/0 .sdata2 @1988 */ SECTION_SDATA2 static f32 lit_1988 = 1.0f / 15.0f; /* 802BDD48-802BDED4 2B8688 018C+00 1/1 0/0 0/0 .text * calcPitch___10Z2AudienceCFP16Z2AudibleChannelPC9Z2AudiblePC13Z2AudioCamera */ // Matches with literals #ifdef NONMATCHING f32 Z2Audience::calcPitch_(Z2AudibleChannel* param_0, Z2Audible const* param_1, Z2AudioCamera const* param_2) const { JAUAudibleParam audParam = *param_1->getAudibleParam(); if ((*(u8*)&audParam.field_0x0.raw >> 4) & 0xf) { JGeometry::TVec3 aTStack_4c; aTStack_4c.normalize(param_0->field_0x14.field_0x00); JAUAudibleParam audParam = *param_1->getAudibleParam(); f32 dVar7 = audParam.getDopplerPower(); dVar7 = calcPitchDoppler_(aTStack_4c, *param_2->getVel(), *param_1->getVel(), dVar7); if (param_0->field_0x34 > 0.0f) { if (param_0->field_0x34 > (dVar7 * mSetting.field_0x60)) { return param_0->field_0x34; } if (dVar7 > (param_0->field_0x34 * mSetting.field_0x60)) { return param_0->field_0x34; } param_0->field_0x34 = dVar7; return dVar7; } if (dVar7 > 0.0f) { param_0->field_0x34 = dVar7; return dVar7; } return 1.0f; } return 1.0f; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm f32 Z2Audience::calcPitch_(Z2AudibleChannel* param_0, Z2Audible const* param_1, Z2AudioCamera const* param_2) const { nofralloc #include "asm/Z2AudioLib/Z2Audience/calcPitch___10Z2AudienceCFP16Z2AudibleChannelPC9Z2AudiblePC13Z2AudioCamera.s" } #pragma pop #endif /* 802BDED4-802BDEDC 2B8814 0008+00 1/0 0/0 0/0 .text getMaxChannels__10Z2AudienceFv */ int Z2Audience::getMaxChannels() { return mNumPlayers; } /* 802BDEDC-802BDEF0 2B881C 0014+00 0/0 1/0 0/0 .text __sinit_Z2Audience_cpp */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void __sinit_Z2Audience_cpp() { nofralloc #include "asm/Z2AudioLib/Z2Audience/__sinit_Z2Audience_cpp.s" } #pragma pop #pragma push #pragma force_active on REGISTER_CTORS(0x802BDEDC, __sinit_Z2Audience_cpp); #pragma pop /* ############################################################################################## */ /* 80451358-80451360 -00001 0008+00 0/0 1/1 0/0 .sbss None */ /* 80451358 0001+00 data_80451358 None */ /* 80451359 0007+00 data_80451359 None */ extern u8 struct_80451358[8]; u8 struct_80451358[8];