tp/libs/Z2AudioLib/Z2SeMgr.cpp

1383 lines
47 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: Z2SeMgr
//
#include "Z2AudioLib/Z2SeMgr.h"
#include "Z2AudioLib/Z2Audience.h"
#include "Z2AudioLib/Z2SoundMgr.h"
#include "Z2AudioLib/Z2SpeechMgr2.h"
#include "Z2AudioLib/Z2StatusMgr.h"
#include "dol2asm.h"
#include "global.h"
//
// Types:
//
struct Z2CreatureLink {
static u8 mLinkPtr[4 + 4 /* padding */];
};
//
// Forward References:
//
extern "C" void __ct__7Z2SeMgrFv();
extern "C" void __ct__12Z2MultiSeObjFv();
extern "C" void initSe__7Z2SeMgrFv();
extern "C" void resetModY__7Z2SeMgrFv();
extern "C" void modHeightAtCamera__7Z2SeMgrFPPC3Vec();
extern "C" void incrCrowdSize__7Z2SeMgrFv();
extern "C" void decrCrowdSize__7Z2SeMgrFv();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStop__7Z2SeMgrF10JAISoundIDUl();
extern "C" void seStopAll__7Z2SeMgrFUl();
extern "C" void seMoveVolumeAll__7Z2SeMgrFfUl();
extern "C" void messageSePlay__7Z2SeMgrFUsP3VecSc();
extern "C" void talkInSe__7Z2SeMgrFv();
extern "C" void talkOutSe__7Z2SeMgrFv();
extern "C" void menuInSe__7Z2SeMgrFv();
extern "C" void setLevObjSE__7Z2SeMgrFUlP3VecSc();
extern "C" void setMultiTriggerSE__7Z2SeMgrFUlP3VecSc();
extern "C" void processSeFramework__7Z2SeMgrFv();
extern "C" void isLevelSe__7Z2SeMgrF10JAISoundID();
extern "C" void isSoundCulling__7Z2SeMgrF10JAISoundID();
extern "C" void __ct__12Z2MultiSeMgrFv();
extern "C" void __dt__12Z2MultiSeMgrFv();
extern "C" void registMultiSePos__12Z2MultiSeMgrFP3Vec();
extern "C" void resetMultiSePos__12Z2MultiSeMgrFv();
extern "C" void getPanPower__12Z2MultiSeMgrFv();
extern "C" void getDolbyPower__12Z2MultiSeMgrFv();
//
// External References:
//
extern "C" void __dt__14JAISoundHandleFv();
extern "C" void __dt__12Z2MultiSeObjFv();
extern "C" void stop__16JAISeCategoryMgrFUl();
extern "C" void releaseSound__14JAISoundHandleFv();
extern "C" void stop__8JAISoundFUl();
extern "C" void getHandleSoundID__15JAISoundHandlesF10JAISoundID();
extern "C" void getFreeHandle__15JAISoundHandlesFv();
extern "C" void moveVolume__18JAISoundParamsMoveFfUl();
extern "C" void movePitch__18JAISoundParamsMoveFfUl();
extern "C" void moveFxMix__18JAISoundParamsMoveFfUl();
extern "C" void movePan__18JAISoundParamsMoveFfUl();
extern "C" void moveDolby__18JAISoundParamsMoveFfUl();
extern "C" void __ct__14JAISoundHandleFv();
extern "C" void linearTransform__6Z2CalcFfffffb();
extern "C" void getParamByExp__6Z2CalcFffffffQ26Z2Calc9CurveSign();
extern "C" void stopSoundID__10Z2SoundMgrF10JAISoundID();
extern "C" void multiVolumeSoundID__10Z2SoundMgrF10JAISoundIDf();
extern "C" void setPortData__14Z2SoundStarterFP14JAISoundHandleUlUsSc();
extern "C" void bgmStart__8Z2SeqMgrFUlUll();
extern "C" void menuIn__11Z2StatusMgrFv();
extern "C" void menuOut__11Z2StatusMgrFv();
extern "C" void isMovieDemo__11Z2StatusMgrFv();
extern "C" void calcOffMicSound__10Z2AudienceFf();
extern "C" void convertAbsToRel__10Z2AudienceFR3VecP3Veci();
extern "C" void calcRelPosVolume__10Z2AudienceFRC3Vecfi();
extern "C" void calcRelPosPan__10Z2AudienceFRC3Veci();
extern "C" void calcRelPosDolby__10Z2AudienceFRC3Veci();
extern "C" void playOneShotVoice__12Z2SpeechMgr2FUcUsP3VecSc();
extern "C" void __dl__FPv();
extern "C" void __construct_array();
extern "C" void __cvt_fp2unsigned();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" f32 VOL_SE_SYSTEM_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_LINK_VOICE_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_LINK_MOTION_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_LINK_FOOTNOTE_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_CHAR_VOICE_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_CHAR_MOVE_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_OBJECT_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_ATMOSPHERE_DEFAULT__7Z2Param;
extern "C" f32 VOL_SE_SYSTEM_TALKING__7Z2Param;
extern "C" f32 VOL_SE_LINK_VOICE_TALKING__7Z2Param;
extern "C" f32 VOL_SE_LINK_MOTION_TALKING__7Z2Param;
extern "C" f32 VOL_SE_LINK_FOOTNOTE_TALKING__7Z2Param;
extern "C" f32 VOL_SE_CHAR_VOICE_TALKING__7Z2Param;
extern "C" f32 VOL_SE_CHAR_MOVE_TALKING__7Z2Param;
extern "C" f32 VOL_SE_OBJECT_TALKING__7Z2Param;
extern "C" f32 VOL_SE_ATMOSPHERE_TALKING__7Z2Param;
extern "C" f32 VOL_SE_SYSTEM_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_LINK_VOICE_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_LINK_MOTION_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_LINK_FOOTNOTE_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_CHAR_VOICE_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_CHAR_MOVE_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_OBJECT_PAUSING__7Z2Param;
extern "C" f32 VOL_SE_ATMOSPHERE_PAUSING__7Z2Param;
extern "C" extern u8 data_80450B44[4];
extern "C" extern u8 data_80450B60[4];
extern "C" extern u8 data_80450B70[4];
extern "C" extern u8 data_80450B74[4];
extern "C" extern u8 data_80450B7C[4];
extern "C" extern u8 data_80450B80[4];
extern "C" extern u8 data_80450B84[4];
extern "C" u8 mLinkPtr__14Z2CreatureLink[4 + 4 /* padding */];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 802AB64C-802AB710 2A5F8C 00C4+00 0/0 1/1 0/0 .text __ct__7Z2SeMgrFv */
Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), mSoundHandles(mSoundHandle, 0x18) {
field_0x3c0 = 0;
field_0x3c1 = 0;
field_0x3c2 = 0;
field_0x3c3 = 0;
field_0x3c4 = 0;
field_0x3c5 = 0;
field_0x3c9 = 0;
field_0x3ca = 0;
field_0x3cb = 0;
mCrowdSize = 0;
}
Z2MultiSeObj::Z2MultiSeObj() {
mSoundID = 0xFFFFFFFF;
field_0x20 = 0;
}
/* 802AB750-802AB80C 2A6090 00BC+00 0/0 1/1 0/0 .text initSe__7Z2SeMgrFv */
void Z2SeMgr::initSe() {
for (u8 i = 0; i < 10; i++) {
mLevelObjSe[i].resetMultiSePos();
mLevelObjSe[i].mSoundID = 0xffffffff;
mLevelObjSe[i].field_0x20 = 0;
}
mLevelObjectSeCount = 0;
for (u8 i = 0; i < 10; i++) {
mMultiTriggerSe[i].resetMultiSePos();
mMultiTriggerSe[i].mSoundID = 0xffffffff;
mMultiTriggerSe[i].field_0x20 = 0;
}
mMultiTriggerSeCount = 0;
resetModY();
}
void Z2SeMgr::resetModY() {
for (int i = 0; i < 8; i++) {
mModY[i] = NULL;
}
}
/* 802AB830-802AB93C 2A6170 010C+00 1/1 0/0 0/0 .text modHeightAtCamera__7Z2SeMgrFPPC3Vec
*/
void Z2SeMgr::modHeightAtCamera(Vec const** param_0) {
if (*param_0 != NULL) {
int idx = 9999;
for (int i = 0; i < 8; i++) {
if (mModY[i] == *param_0) {
idx = i;
break;
}
}
if (idx == 9999) {
int i;
for (i = 0; i < 8; i++) {
if (mModY[i] == NULL) {
idx = i;
mModY[i] = *param_0;
break;
}
}
if (i == 8) {
return;
}
}
field_0x340[idx] = **param_0;
Vec cam_pos = Z2GetAudience()->getAudioCamPos();
if (field_0x340[idx].y > cam_pos.y) {
field_0x340[idx].y = cam_pos.y;
}
*param_0 = &field_0x340[idx];
}
}
void Z2SeMgr::incrCrowdSize() {
mCrowdSize++;
if (mCrowdSize > 100)
mCrowdSize = 100;
}
void Z2SeMgr::decrCrowdSize() {
mCrowdSize--;
//! @bug probably copypasta from incrCrowdSize(), but semantically it's still correct:
//! mCrowdSize is a u8, so an underflow would result in mCrowdSize > 100, triggering the clamp.
if (mCrowdSize > 100)
mCrowdSize = 0;
}
/* ############################################################################################## */
/* 80455870-80455874 003E70 0004+00 1/1 0/0 0/0 .sdata2 @4038 */
SECTION_SDATA2 static f32 lit_4038 = 10000.0f;
/* 80455874-80455878 003E74 0004+00 2/2 0/0 0/0 .sdata2 @4039 */
SECTION_SDATA2 static f32 lit_4039 = 100.0f;
/* 80455878-8045587C 003E78 0004+00 11/11 0/0 0/0 .sdata2 @4040 */
SECTION_SDATA2 static u8 lit_4040[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 8045587C-80455880 003E7C 0004+00 2/2 0/0 0/0 .sdata2 @4041 */
SECTION_SDATA2 static f32 lit_4041 = 1.0f / 5.0f;
/* 80455880-80455884 003E80 0004+00 8/8 0/0 0/0 .sdata2 @4042 */
SECTION_SDATA2 static f32 lit_4042 = 1.0f;
/* 80455884-80455888 003E84 0004+00 3/3 0/0 0/0 .sdata2 @4043 */
SECTION_SDATA2 static f32 lit_4043 = 7.0f / 10.0f;
/* 80455888-8045588C 003E88 0004+00 1/1 0/0 0/0 .sdata2 @4044 */
SECTION_SDATA2 static f32 lit_4044 = 1.25f;
/* 8045588C-80455890 003E8C 0004+00 2/2 0/0 0/0 .sdata2 @4045 */
SECTION_SDATA2 static f32 lit_4045 = 2.0f / 5.0f;
/* 80455890-80455894 003E90 0004+00 1/1 0/0 0/0 .sdata2 @4046 */
SECTION_SDATA2 static f32 lit_4046 = 1.5f;
/* 80455894-80455898 003E94 0004+00 1/1 0/0 0/0 .sdata2 @4047 */
SECTION_SDATA2 static f32 lit_4047 = 35.0f;
/* 80455898-8045589C 003E98 0004+00 1/1 0/0 0/0 .sdata2 @4048 */
SECTION_SDATA2 static f32 lit_4048 = 261.0f;
/* 8045589C-804558A0 003E9C 0004+00 1/1 0/0 0/0 .sdata2 @4049 */
SECTION_SDATA2 static f32 lit_4049 = 1.0f / 20.0f;
/* 804558A0-804558A4 003EA0 0004+00 1/1 0/0 0/0 .sdata2 @4050 */
SECTION_SDATA2 static f32 lit_4050 = 7.0f / 5.0f;
/* 804558A4-804558A8 003EA4 0004+00 1/1 0/0 0/0 .sdata2 @4051 */
SECTION_SDATA2 static f32 lit_4051 = 47.0f;
/* 804558A8-804558AC 003EA8 0004+00 5/5 0/0 0/0 .sdata2 @4052 */
SECTION_SDATA2 static f32 lit_4052 = 0.5f;
/* 804558AC-804558B0 003EAC 0004+00 2/2 0/0 0/0 .sdata2 @4053 */
SECTION_SDATA2 static f32 lit_4053 = 9.0f / 10.0f;
/* 804558B0-804558B4 003EB0 0004+00 1/1 0/0 0/0 .sdata2 @4054 */
SECTION_SDATA2 static f32 lit_4054 = 41.0f;
/* 804558B4-804558B8 003EB4 0004+00 2/2 0/0 0/0 .sdata2 @4055 */
SECTION_SDATA2 static f32 lit_4055 = 3.0f / 10.0f;
/* 804558B8-804558BC 003EB8 0004+00 3/3 0/0 0/0 .sdata2 @4056 */
SECTION_SDATA2 static f32 lit_4056 = -1.0f;
/* 804558BC-804558C0 003EBC 0004+00 2/2 0/0 0/0 .sdata2 @4057 */
SECTION_SDATA2 static f32 lit_4057 = 400.0f;
/* 804558C0-804558C4 003EC0 0004+00 2/2 0/0 0/0 .sdata2 @4058 */
SECTION_SDATA2 static f32 lit_4058 = 4.0f / 5.0f;
/* 804558C4-804558C8 003EC4 0004+00 2/2 0/0 0/0 .sdata2 @4059 */
SECTION_SDATA2 static f32 lit_4059 = 11.0f / 10.0f;
/* 804558C8-804558CC 003EC8 0004+00 1/1 0/0 0/0 .sdata2 @4060 */
SECTION_SDATA2 static f32 lit_4060 = 15.0f;
/* 804558CC-804558D0 003ECC 0004+00 1/1 0/0 0/0 .sdata2 @4061 */
SECTION_SDATA2 static f32 lit_4061 = 60.0f;
/* 804558D0-804558D4 003ED0 0004+00 2/2 0/0 0/0 .sdata2 @4062 */
SECTION_SDATA2 static f32 lit_4062 = 127.0f;
/* 804558D4-804558D8 003ED4 0004+00 2/2 0/0 0/0 .sdata2 @4063 */
SECTION_SDATA2 static f32 lit_4063 = 6.0f / 5.0f;
/* 804558D8-804558E0 003ED8 0008+00 2/2 0/0 0/0 .sdata2 @4067 */
SECTION_SDATA2 static f64 lit_4067 = 4503599627370496.0 /* cast u32 to float */;
/* 804558E0-804558E8 003EE0 0008+00 2/2 0/0 0/0 .sdata2 @4070 */
SECTION_SDATA2 static f64 lit_4070 = 4503601774854144.0 /* cast s32 to float */;
/* 802AB984-802AC50C 2A62C4 0B88+00 1/1 196/196 549/549 .text
* seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
#ifdef NONMATCHING
// something is wrong with the switch, also isMovieDemo needs to not get inlined
bool Z2SeMgr::seStart(JAISoundID i_soundID, Vec const* i_pos, u32 param_2, s8 i_reverb,
f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u8 param_8) {
if (i_soundID == 0xffffffff) {
return false;
}
if (param_8 != 1) {
switch (i_soundID) {
case Z2SE_OBJ_L8_STAIR_ON:
case Z2SE_OBJ_L8_STAIR_MV_UP:
case Z2SE_OBJ_L8_STAIR_MV_DW:
case Z2SE_OBJ_L8_STAIR_ST_UP:
case Z2SE_OBJ_L8_STAIR_ST_DW:
case Z2SE_OBJ_L8_L_BALL_SW_ON:
case Z2SE_OBJ_L8_L_LIFT_ON:
case Z2SE_OBJ_GANON_BARRIER_APPR:
setMultiTriggerSE(i_soundID, const_cast<Vec*>(i_pos), i_reverb);
return false;
}
}
switch (i_soundID) {
case Z2SE_QUIT_GAME:
Z2GetStatusMgr()->menuOut();
break;
case Z2SE_OBJ_DOOR_STEEL_BAR:
seStop(Z2SE_OBJ_DOOR_STEEL_BAR, 0);
break;
case JA_SE_OBJ_STN_DOOR_MOVE_U:
seStop(JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case JA_SE_OBJ_STN_DOOR_STOP_D:
seStop(JA_SE_OBJ_STN_DOOR_STOP_D, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case JA_SE_OBJ_STN_DOOR_MOVE_D:
case JA_SE_OBJ_STN_DOOR_STOP_U:
seStop(JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
seStop(JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2:
case Z2SE_OBJ_WOOD_DR_OP_MDN:
case Z2SE_OBJ_WOOD_DR_OP_MDN_FX:
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_CLOSE_STOP:
seStop(Z2SE_OBJ_WOOD_DOOR_CLOSE_STOP, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
case Z2SE_OBJ_WOOD_DOOR_ROLLOPEN:
case Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE:
case Z2SE_OBJ_WOOD_DOOR_OPEN_STOP:
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
case Z2SE_SY_DUMMY:
case Z2SE_OBJ_LUPY_BOUND:
case Z2SE_OBJ_MAGIC_POT_BOUND:
case Z2SE_OBJ_ARROW_BOUND:
if (param_2 >= 100) {
param_2 = 100;
}
if (param_2 == 0) {
return false;
}
param_2 = param_2 * param_2;
i_volume = param_2 / 10000.0f;
break;
case Z2SE_OBJ_BOMB_BOUND:
if (i_volume >= 100.0f) {
i_volume = 100.0f;
}
if (i_volume <= 0.0f) {
return false;
}
i_volume = (i_volume * i_volume) / 10000.0f;
break;
case Z2SE_OBJ_KEY_BOUND:
if (param_2 == 0) {
return false;
}
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.2f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_MAGIC_METER_DEC:
if (mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_DEC) != NULL
|| mSoundHandles.getHandleSoundID(Z2SE_MAGIC_METER_FINISH) != NULL)
{
return false;
}
break;
case Z2SE_MAGIC_METER_FINISH:
seStop(Z2SE_MAGIC_METER_DEC, 0);
break;
case Z2SE_ITEM_RING_IN:
case Z2SE_SY_MENU_IN:
case Z2SE_SY_MAP_OPEN_L:
Z2GetStatusMgr()->menuIn();
break;
case Z2SE_ITEM_RING_OUT:
case Z2SE_SY_MENU_OUT:
case Z2SE_SY_CONTINUE_OK:
case Z2SE_SY_MAP_CLOSE_L:
Z2GetStatusMgr()->menuOut();
break;
case Z2SE_OBJ_BOARD_BOUND:
case Z2SE_OBJ_BOARD_PUT:
if (param_2 < 90) {
i_volume = 0.7f;
i_pitch = 1.25f;
} else if (param_2 < 60) {
i_volume = 0.4f;
i_pitch = 1.5f;
}
break;
case Z2SE_SY_TALK_START:
case Z2SE_SY_TALK_END:
if (Z2GetSceneMgr()->getCurrentSceneNum() != 0) {
return false;
}
break;
case Z2SE_SY_TALK_NEXT:
if (Z2GetSceneMgr()->isMovieDemo()) {
i_soundID = Z2SE_SY_DEMO_MESSAGE_NEXT;
}
break;
case Z2SE_SY_TALK_WIN_CLOSE:
if (Z2GetSceneMgr()->getCurrentSceneNum() == 1) {
i_soundID = Z2SE_SY_TALK_END;
} else if (Z2GetSceneMgr()->isMovieDemo()) {
i_soundID = Z2SE_SY_DEMO_MESSAGE_END;
}
break;
case Z2SE_HP_GAUGE_INC:
if (!Z2GetStatusMgr()->isHeartGuageOn() || !Z2GetSceneMgr()->isSceneExist()) {
return false;
}
break;
case Z2SE_OBJ_CHANDELIER_SWING:
if (i_pos->y > Z2GetAudience()->getAudioCamPos().y) {
return false;
}
break;
case Z2SE_OBJ_CHANDLV5_SWING:
i_volume = Z2Calc::getParamByExp(param_2, 353.0f, 261.0f, 0.4f, 0.05f, 1.0f,
Z2Calc::CURVE_SIGN_2);
break;
case Z2SE_OBJ_IRONBALL_HIT:
if (param_2 > 150) {
i_volume = 1.4f;
} else {
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 47.0f, 0.4f, 0.5f, 0.9f,
Z2Calc::CURVE_SIGN_2);
}
break;
case Z2SE_OBJ_IRONBALL_HIT_SNOW:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_2);
break;
case Z2SE_OBJ_IRONBALL_HIT_ICE:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 41.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_2);
break;
case Z2SE_OBJ_L8_B_FOG_FLY:
if (i_pos->y > Z2GetAudience()->getAudioCamPos().y) {
return false;
}
break;
case Z2SE_OBJ_BLN_BREAK_S:
case Z2SE_OBJ_BLN_BREAK_M:
case Z2SE_OBJ_BLN_BREAK_L:
if (param_2 > 10) {
param_2 = 10;
}
seStart(param_2 + 0x8C, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
break;
case Z2SE_OBJ_AMATA_ACTION:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 400.0f, 0.4f, 0.8f, 1.1f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_TOY_BONE_BOUND:
i_volume = Z2Calc::getParamByExp(param_2, 15.0f, 60.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_FN_ROPE_CREAK_ADD:
param_2 = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.2f, 0.0f, 127.0f,
Z2Calc::CURVE_SIGN_0);
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.2f, 0.2f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 127.0f, 0.0f, 0.2f, 0.8f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_DARK_GATE_RIPPLE:
if (Z2GetSceneMgr()->getCurrentSceneNum() == 3) {
i_soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF;
} else if (Z2GetSceneMgr()->getCurrentSceneNum() == 30
&& Z2GetSceneMgr()->getCurrentRoomNum() == 7) {
i_soundID = Z2SE_OBJ_DARK_GATE_RIPPLE_WLF;
}
break;
}
if (isLevelSe(i_soundID)) {
return seStartLevel(i_soundID, i_pos, param_2, i_reverb, i_pitch,
i_volume, i_pan, i_dolby, param_8);
}
if (isSoundCulling(i_soundID)) {
return false;
}
JAISoundHandle* handle = mSoundHandles.getFreeHandle();
if (handle == NULL) {
return false;
}
return Z2GetSoundStarter()->startSound(i_soundID, handle, (JGeometry::TVec3<f32>*)i_pos,
param_2, i_reverb / 127.0f,
i_pitch, i_volume, i_pan, i_dolby, 0);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool Z2SeMgr::seStart(JAISoundID param_0, Vec const* param_1, u32 param_2, s8 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7, u8 param_8) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 803C9D98-803C9DF8 -00001 0060+00 1/1 0/0 0/0 .data @4619 */
SECTION_DATA static void* lit_4619[24] = {
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF78),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF84),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF90),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xF9C),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFA8),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFB4),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFC0),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFCC),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFD8),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1028),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFE4),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFF0),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0xFFC),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1008),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1014),
(void*)(((char*)seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc) + 0x1020),
};
/* 804558E8-804558EC 003EE8 0004+00 1/1 0/0 0/0 .sdata2 @4586 */
SECTION_SDATA2 static f32 lit_4586 = 25.0f;
/* 804558EC-804558F0 003EEC 0004+00 1/1 0/0 0/0 .sdata2 @4587 */
SECTION_SDATA2 static f32 lit_4587 = 1.0f / 10.0f;
/* 804558F0-804558F4 003EF0 0004+00 1/1 0/0 0/0 .sdata2 @4588 */
SECTION_SDATA2 static f32 lit_4588 = 10.0f;
/* 804558F4-804558F8 003EF4 0004+00 1/1 0/0 0/0 .sdata2 @4589 */
SECTION_SDATA2 static f32 lit_4589 = 2.0f;
/* 804558F8-80455900 003EF8 0004+04 2/2 0/0 0/0 .sdata2 @4590 */
SECTION_SDATA2 static f32 lit_4590[1 + 1 /* padding */] = {
13.0f / 10.0f,
/* padding */
0.0f,
};
/* 80455900-80455908 003F00 0008+00 1/1 0/0 0/0 .sdata2 @4591 */
SECTION_SDATA2 static f64 lit_4591 = 0.7;
/* 80455908-80455910 003F08 0008+00 1/1 0/0 0/0 .sdata2 @4592 */
SECTION_SDATA2 static f64 lit_4592 = 0.0006;
/* 80455910-80455918 003F10 0008+00 1/1 0/0 0/0 .sdata2 @4593 */
SECTION_SDATA2 static f64 lit_4593 = 1.0;
/* 80455918-80455920 003F18 0008+00 1/1 0/0 0/0 .sdata2 @4594 */
SECTION_SDATA2 static f64 lit_4594 = 0.0015;
/* 80455920-80455928 003F20 0008+00 1/1 0/0 0/0 .sdata2 @4595 */
SECTION_SDATA2 static f64 lit_4595 = 0.005;
/* 80455928-80455930 003F28 0008+00 1/1 0/0 0/0 .sdata2 @4596 */
SECTION_SDATA2 static f64 lit_4596 = 0.3;
/* 80455930-80455938 003F30 0008+00 1/1 0/0 0/0 .sdata2 @4597 */
SECTION_SDATA2 static f64 lit_4597 = 0.001;
/* 80455938-8045593C 003F38 0004+00 1/1 0/0 0/0 .sdata2 @4598 */
SECTION_SDATA2 static f32 lit_4598 = 4000.0f;
/* 8045593C-80455940 003F3C 0004+00 1/1 0/0 0/0 .sdata2 @4599 */
SECTION_SDATA2 static f32 lit_4599 = 3500.0f;
/* 80455940-80455944 003F40 0004+00 1/1 0/0 0/0 .sdata2 @4600 */
SECTION_SDATA2 static f32 lit_4600 = 26.0f;
/* 80455944-80455948 003F44 0004+00 1/1 0/0 0/0 .sdata2 @4601 */
SECTION_SDATA2 static f32 lit_4601 = 3.0f / 5.0f;
/* 80455948-8045594C 003F48 0004+00 1/1 0/0 0/0 .sdata2 @4602 */
SECTION_SDATA2 static f32 lit_4602 = 64.0f;
/* 8045594C-80455950 003F4C 0004+00 1/1 0/0 0/0 .sdata2 @4603 */
SECTION_SDATA2 static f32 lit_4603 = 4500.0f;
/* 80455950-80455954 003F50 0004+00 1/1 0/0 0/0 .sdata2 @4604 */
SECTION_SDATA2 static f32 lit_4604 = 40.0f;
/* 80455954-80455958 003F54 0004+00 1/1 0/0 0/0 .sdata2 @4605 */
SECTION_SDATA2 static f32 lit_4605 = 120.0f;
/* 80455958-80455960 003F58 0004+04 1/1 0/0 0/0 .sdata2 @4606 */
SECTION_SDATA2 static f32 lit_4606[1 + 1 /* padding */] = {
5.0f,
/* padding */
0.0f,
};
/* 80455960-80455968 003F60 0008+00 1/1 0/0 0/0 .sdata2 @4607 */
SECTION_SDATA2 static f64 lit_4607 = 0.5;
/* 80455968-80455970 003F68 0008+00 1/1 0/0 0/0 .sdata2 @4608 */
SECTION_SDATA2 static f64 lit_4608 = 3.0;
/* 80455970-80455978 003F70 0008+00 1/1 0/0 0/0 .sdata2 @4609 */
SECTION_SDATA2 static u8 lit_4609[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80455978-8045597C 003F78 0004+00 1/1 0/0 0/0 .sdata2 @4610 */
SECTION_SDATA2 static f32 lit_4610 = 2000.0f;
/* 8045597C-80455980 003F7C 0004+00 1/1 0/0 0/0 .sdata2 @4611 */
SECTION_SDATA2 static f32 lit_4611 = 5000.0f;
/* 80455980-80455984 003F80 0004+00 1/1 0/0 0/0 .sdata2 @4612 */
SECTION_SDATA2 static f32 lit_4612 = 9.0f / 20.0f;
/* 80455984-80455988 003F84 0004+00 1/1 0/0 0/0 .sdata2 @4613 */
SECTION_SDATA2 static f32 lit_4613 = 50.0f;
/* 80455988-8045598C 003F88 0004+00 1/1 0/0 0/0 .sdata2 @4614 */
SECTION_SDATA2 static f32 lit_4614 = 600.0f;
/* 8045598C-80455990 003F8C 0004+00 1/1 0/0 0/0 .sdata2 @4615 */
SECTION_SDATA2 static f32 lit_4615 = 90.0f;
/* 802AC50C-802AD8B0 2A6E4C 13A4+00 3/2 19/19 199/199 .text
* seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool Z2SeMgr::seStartLevel(JAISoundID param_0, Vec const* param_1, u32 param_2, s8 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7, u8 param_8) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc.s"
}
#pragma pop
/* 802AD8B0-802AD94C 2A81F0 009C+00 1/1 0/0 4/4 .text seStop__7Z2SeMgrF10JAISoundIDUl */
void Z2SeMgr::seStop(JAISoundID i_soundID, u32 i_count) {
if (i_soundID != -1) {
for (u8 i = 0; i < 24; i++) {
if (mSoundHandles[i] && mSoundHandles[i]->getID() == i_soundID) {
mSoundHandles[i]->stop(i_count);
mSoundHandles[i].releaseSound();
}
}
}
}
/* 802AD94C-802AD9F4 2A828C 00A8+00 0/0 1/1 0/0 .text seStopAll__7Z2SeMgrFUl */
void Z2SeMgr::seStopAll(u32 i_count) {
JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr();
se_mgr->getCategory(0)->stop(i_count);
se_mgr->getCategory(1)->stop(i_count);
se_mgr->getCategory(2)->stop(i_count);
se_mgr->getCategory(3)->stop(i_count);
se_mgr->getCategory(4)->stop(i_count);
se_mgr->getCategory(5)->stop(i_count);
se_mgr->getCategory(6)->stop(i_count);
se_mgr->getCategory(7)->stop(i_count);
se_mgr->getCategory(8)->stop(i_count);
se_mgr->getCategory(9)->stop(i_count);
}
/* 802AD9F4-802ADB14 2A8334 0120+00 3/3 5/5 1/1 .text seMoveVolumeAll__7Z2SeMgrFfUl */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::seMoveVolumeAll(f32 i_volume, u32 i_count) {
if (Z2GetStatusMgr()->getDemoStatus() == 13) {
i_volume = 0.0f;
}
JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr();
se_mgr->getCategory(1)->getParams()
->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT * i_volume, i_count);
se_mgr->getCategory(2)->getParams()
->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT * i_volume, i_count);
se_mgr->getCategory(3)->getParams()
->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT * i_volume, i_count);
se_mgr->getCategory(4)->getParams()
->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * i_volume, i_count);
se_mgr->getCategory(5)->getParams()
->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * i_volume, i_count);
se_mgr->getCategory(6)->getParams()
->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT * i_volume, i_count);
se_mgr->getCategory(7)->getParams()
->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT * i_volume, i_count);
se_mgr->getCategory(8)->getParams()
->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT * i_volume, i_count);
if (Z2GetStatusMgr()->getDemoStatus() != 12) {
se_mgr->getCategory(9)->getParams()
->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT * i_volume, i_count);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::seMoveVolumeAll(f32 param_0, u32 param_1) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/seMoveVolumeAll__7Z2SeMgrFfUl.s"
}
#pragma pop
#endif
/* 802ADB14-802ADB50 2A8454 003C+00 0/0 1/1 0/0 .text messageSePlay__7Z2SeMgrFUsP3VecSc
*/
void Z2SeMgr::messageSePlay(u16 param_0, Vec* param_1, s8 param_2) {
Z2GetSpeechMgr2()->playOneShotVoice(0, param_0, param_1, param_2);
}
/* 802ADB50-802ADC54 2A8490 0104+00 0/0 1/1 0/0 .text talkInSe__7Z2SeMgrFv */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::talkInSe() {
if (Z2GetSceneMgr()->isInGame()) {
if (Z2GetStatusMgr()->getDemoStatus() == 13) {
seMoveVolumeAll(0.0f, 0);
}
JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr();
se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_TALKING, 2);
se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_TALKING, 2);
se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_TALKING, 2);
se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_TALKING, 2);
se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2);
se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2);
se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_TALKING, 2);
se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_TALKING, 2);
se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_TALKING, 2);
if (Z2GetStatusMgr()->getDemoStatus() != 12) {
se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_TALKING, 2);
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::talkInSe() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/talkInSe__7Z2SeMgrFv.s"
}
#pragma pop
#endif
/* 802ADC54-802ADD58 2A8594 0104+00 0/0 2/2 0/0 .text talkOutSe__7Z2SeMgrFv */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::talkOutSe() {
if (Z2GetSceneMgr()->isInGame()) {
if (Z2GetStatusMgr()->getDemoStatus() == 13) {
seMoveVolumeAll(0.0f, 0);
}
JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr();
se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_DEFAULT, 2);
se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_DEFAULT, 2);
se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_DEFAULT, 2);
se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_DEFAULT, 2);
se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2);
se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2);
se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_DEFAULT, 2);
se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_DEFAULT, 2);
se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_DEFAULT, 2);
if (Z2GetStatusMgr()->getDemoStatus() != 12) {
se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_DEFAULT, 2);
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::talkOutSe() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/talkOutSe__7Z2SeMgrFv.s"
}
#pragma pop
#endif
/* 802ADD58-802ADE5C 2A8698 0104+00 0/0 1/1 0/0 .text menuInSe__7Z2SeMgrFv */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::menuInSe() {
if (Z2GetSceneMgr()->isInGame()) {
if (Z2GetStatusMgr()->getDemoStatus() == 13) {
seMoveVolumeAll(0.0f, 0);
}
JAISeMgr* se_mgr = Z2GetSoundMgr()->getSeMgr();
se_mgr->getCategory(0)->getParams()->moveVolume(Z2Param::VOL_SE_SYSTEM_PAUSING, 2);
se_mgr->getCategory(1)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_VOICE_PAUSING, 2);
se_mgr->getCategory(2)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_MOTION_PAUSING, 2);
se_mgr->getCategory(3)->getParams()->moveVolume(Z2Param::VOL_SE_LINK_FOOTNOTE_PAUSING, 2);
se_mgr->getCategory(4)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2);
se_mgr->getCategory(5)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2);
se_mgr->getCategory(6)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_MOVE_PAUSING, 2);
se_mgr->getCategory(7)->getParams()->moveVolume(Z2Param::VOL_SE_CHAR_VOICE_PAUSING, 2);
se_mgr->getCategory(8)->getParams()->moveVolume(Z2Param::VOL_SE_OBJECT_PAUSING, 2);
if (Z2GetStatusMgr()->getDemoStatus() != 12) {
se_mgr->getCategory(9)->getParams()->moveVolume(Z2Param::VOL_SE_ATMOSPHERE_PAUSING, 2);
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::menuInSe() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/menuInSe__7Z2SeMgrFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8039B9F0-8039B9FC 028050 000C+00 1/1 0/0 0/0 .rodata @5054 */
SECTION_RODATA static u8 const lit_5054[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x8039B9F0, &lit_5054);
/* 80455990-80455994 003F90 0004+00 1/1 0/0 0/0 .sdata2 @5085 */
SECTION_SDATA2 static f32 lit_5085 = 4.0f;
/* 802ADE5C-802ADFF4 2A879C 0198+00 1/1 0/0 0/0 .text setLevObjSE__7Z2SeMgrFUlP3VecSc */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::setLevObjSE(u32 i_soundID, Vec* i_pos, s8 param_2) {
u8 i = 0;
for (; i < mLevelObjectSeCount; i++) {
if (mLevelObjSe[i].mSoundID == i_soundID) {
break;
}
}
if (i == mLevelObjectSeCount) {
if (mLevelObjectSeCount == 10) {
return;
}
mLevelObjSe[i].mSoundID = i_soundID;
mLevelObjectSeCount++;
}
f32 volume_scale = 1.0f;
Vec pos = {0.0f, 0.0f, -50.0f};
if (i_pos != NULL) {
pos = *i_pos;
} else {
// fake match, should be something like pos = Z2GetAudience()->getAudioCamPos();
Vec tmp;
JGeometry::setTVec3f(*(Vec*)Z2GetAudience()->mAudioCamera[0].getPos(), tmp);
pos = tmp;
}
switch (i_soundID) {
case Z2SE_OBJ_FIRE_BURNING:
volume_scale = 0.7f;
break;
case Z2SE_EN_ZZ_MV:
volume_scale = 4.0f;
break;
case Z2SE_FAIRY_S_LV:
case Z2SE_OBJ_L8_L_BALL_SW:
break;
}
mLevelObjSe[i].mVolumeScale = volume_scale;
mLevelObjSe[i].registMultiSePos((Vec*)&pos);
if (mLevelObjSe[i].field_0x20 < param_2) {
mLevelObjSe[i].field_0x20 = param_2;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::setLevObjSE(u32 param_0, Vec* param_1, s8 param_2) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/setLevObjSE__7Z2SeMgrFUlP3VecSc.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8039B9FC-8039BA08 02805C 000C+00 1/1 0/0 0/0 .rodata @5100 */
SECTION_RODATA static u8 const lit_5100[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x8039B9FC, &lit_5100);
/* 80455994-80455998 003F94 0004+00 1/1 0/0 0/0 .sdata2 @5134 */
SECTION_SDATA2 static f32 lit_5134 = 3.0f;
/* 802ADFF4-802AE184 2A8934 0190+00 1/1 0/0 0/0 .text setMultiTriggerSE__7Z2SeMgrFUlP3VecSc */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::setMultiTriggerSE(u32 i_soundID, Vec* i_pos, s8 param_2) {
u8 i = 0;
for (; i < mMultiTriggerSeCount; i++) {
if (mMultiTriggerSe[i].mSoundID == i_soundID) {
break;
}
}
if (i == mMultiTriggerSeCount) {
if (mMultiTriggerSeCount == 10) {
return;
}
mMultiTriggerSe[i].mSoundID = i_soundID;
mMultiTriggerSeCount++;
}
f32 volume_scale = 1.0f;
Vec pos = {0.0f, 0.0f, -50.0f};
if (i_pos != NULL) {
pos = *i_pos;
} else {
// fake match, should be something like pos = Z2GetAudience()->getAudioCamPos();
Vec tmp;
JGeometry::setTVec3f(*(Vec*)Z2GetAudience()->mAudioCamera[0].getPos(), tmp);
pos = tmp;
}
switch (i_soundID) {
case Z2SE_OBJ_L8_STAIR_ON:
case Z2SE_OBJ_L8_STAIR_MV_UP:
case Z2SE_OBJ_L8_STAIR_MV_DW:
case Z2SE_OBJ_L8_STAIR_ST_UP:
case Z2SE_OBJ_L8_STAIR_ST_DW:
case Z2SE_OBJ_L8_L_LIFT_ON:
volume_scale = 3.0f;
break;
case Z2SE_OBJ_L8_L_BALL_SW_ON:
volume_scale = 1.3f;
break;
}
mMultiTriggerSe[i].mVolumeScale = volume_scale;
mMultiTriggerSe[i].registMultiSePos((Vec*)&pos);
if (mMultiTriggerSe[i].field_0x20 < param_2) {
mMultiTriggerSe[i].field_0x20 = param_2;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::setMultiTriggerSE(u32 param_0, Vec* param_1, s8 param_2) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/setMultiTriggerSE__7Z2SeMgrFUlP3VecSc.s"
}
#pragma pop
#endif
/* 802AE184-802AE524 2A8AC4 03A0+00 0/0 1/1 0/0 .text processSeFramework__7Z2SeMgrFv */
#ifdef NONMATCHING
// matches with literals
void Z2SeMgr::processSeFramework() {
if (Z2GetSceneMgr()->isSceneExist() && mCrowdSize != 0) {
seStartLevel(Z2SE_ENV_PEOPLE_CROWD, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
for (u8 i = 0; i < mLevelObjectSeCount; i++) {
f32 volume = mLevelObjSe[i].getMaxVolume();
seStartLevel(mLevelObjSe[i].mSoundID, NULL, 0, mLevelObjSe[i].field_0x20, 1.0f,
volume, mLevelObjSe[i].getPanPower(), mLevelObjSe[i].getDolbyPower(), 1);
}
for (u8 i = 0; i < 10; i++) {
mLevelObjSe[i].resetMultiSePos();
mLevelObjSe[i].mSoundID = -1;
mLevelObjSe[i].field_0x20 = 0;
}
mLevelObjectSeCount = 0;
for (u8 i = 0; i < mMultiTriggerSeCount; i++) {
f32 volume = mMultiTriggerSe[i].getMaxVolume();
seStartLevel(mMultiTriggerSe[i].mSoundID, NULL, 0, mMultiTriggerSe[i].field_0x20, 1.0f,
volume, mMultiTriggerSe[i].getPanPower(),
mMultiTriggerSe[i].getDolbyPower(), 1);
}
for (u8 i = 0; i < 10; i++) {
mMultiTriggerSe[i].resetMultiSePos();
mMultiTriggerSe[i].mSoundID = -1;
mMultiTriggerSe[i].field_0x20 = 0;
}
mMultiTriggerSeCount = 0;
field_0x3c9 = 0;
field_0x3ca = 0;
field_0x3cb = 0;
if (field_0x3c2 != 0) {
field_0x3c2--;
} else {
field_0x3c2 = 0;
}
if (field_0x3c3 != 0) {
field_0x3c3--;
} else {
field_0x3c3 = 0;
}
if (field_0x3c4 != 0) {
field_0x3c4--;
} else {
field_0x3c4 = 0;
}
if (field_0x3c5 != 0) {
field_0x3c5--;
} else {
field_0x3c5 = 0;
}
if (field_0x3c0 != 0) {
field_0x3c0--;
} else {
field_0x3c0 = 0;
}
if (field_0x3c1 != 0) {
field_0x3c1--;
} else {
field_0x3c1 = 0;
}
if (field_0x3c6 != 0) {
field_0x3c6--;
} else {
field_0x3c6 = 0;
}
if (field_0x3c7 != 0) {
field_0x3c7--;
} else {
field_0x3c7 = 0;
}
if (field_0x3c8 != 0) {
field_0x3c8--;
} else {
field_0x3c8 = 0;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void Z2SeMgr::processSeFramework() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/processSeFramework__7Z2SeMgrFv.s"
}
#pragma pop
#endif
/* 802AE524-802AE5B0 2A8E64 008C+00 1/1 0/0 0/0 .text isLevelSe__7Z2SeMgrF10JAISoundID */
bool Z2SeMgr::isLevelSe(JAISoundID i_soundID) {
switch (i_soundID) {
case JA_SE_LK_MOVE_ROCK:
case JA_SE_LK_MOVE_WBLOCK:
case Z2SE_OBJ_FIRE_BURNING:
case JA_SE_MAGMA_L:
case JA_SE_MAGMA_R:
case JA_SE_MAGMA_SR:
case JA_SE_FIREBLAST_NOISE:
case JA_SE_ATM_WIND_HOT:
return true;
default:
return false;
}
}
/* 802AE5B0-802AEB04 2A8EF0 0554+00 2/2 3/3 0/0 .text isSoundCulling__7Z2SeMgrF10JAISoundID */
#ifdef NONMATCHING
// matches with literals
bool Z2SeMgr::isSoundCulling(JAISoundID i_soundID) {
if (Z2GetSeqMgr()->isItemGetDemo()) {
switch (i_soundID) {
case Z2SE_HP_GAUGE_INC:
case Z2SE_SY_TALK_NEXT:
case Z2SE_SY_TALK_END:
case Z2SE_SY_DEMO_MESSAGE_NEXT:
case Z2SE_SY_DEMO_MESSAGE_END:
case Z2SE_AL_FISH_JUMP_DOWN:
case Z2SE_CAT_CRY_ANNOY_D:
case Z2SE_CAT_CRY_ATTACK_D:
case Z2SE_MIDNA_APPEAR:
case Z2SE_HENA_CLAP:
case Z2SE_EN_PO_V_DEATH:
case Z2SE_EN_SG_BOUND:
case Z2SE_OBJ_TBOX_OPEN_A:
case Z2SE_OBJ_TBOX_OPEN_B:
case Z2SE_OBJ_TBOX_OPEN_B_SLOW:
case Z2SE_OBJ_TBOX_OPEN_C:
case Z2SE_OBJ_NIOIMASU_BOUND:
return false;
default:
return true;
}
}
switch (i_soundID) {
case Z2SE_MIDNA_APPEAR:
case Z2SE_MIDNA_DISAPPEAR:
if (!Z2GetSceneMgr()->isSceneExist()) {
return true;
}
break;
case Z2SE_EN_BE_DEATH:
case Z2SE_EN_BUG_DIE:
if (field_0x3c0 != 0) {
return true;
}
field_0x3c0 = 4;
break;
case Z2SE_EN_BE_GO_HOME:
case Z2SE_EN_BUG_JUMP:
if (field_0x3c1 != 0) {
return true;
}
field_0x3c1 = 4;
break;
case JA_SE_FT_ADD_GRASS:
if (field_0x3c2 != 0) {
return true;
}
field_0x3c2 = 2;
break;
case JA_SE_OBJ_BREAK_WRAILING:
if (field_0x3c9 != 0) {
return true;
}
field_0x3c9 = 1;
break;
case JA_SE_LK_CUT_GRASS:
if (field_0x3c3 != 0) {
return true;
}
field_0x3c3 = 4;
break;
case JA_SE_OBJ_BREAK_CHINA_S:
if (field_0x3c4 != 0) {
return true;
}
field_0x3c4 = 2;
break;
case Z2SE_OBJ_SKULL_BREAK:
if (field_0x3c5 != 0) {
return true;
}
field_0x3c5 = 2;
break;
case JA_SE_CM_MONS_EXPLODE:
if (field_0x3ca != 0) {
return true;
}
field_0x3ca = 1;
Z2GetSoundMgr()->multiVolumeSoundID(i_soundID, 0.5f);
break;
case Z2SE_DARK_VANISH:
if (field_0x3cb != 0) {
return true;
}
field_0x3cb = 1;
Z2GetSoundMgr()->stopSoundID(i_soundID);
Z2GetSoundMgr()->multiVolumeSoundID(i_soundID, 0.5f);
break;
case Z2SE_EN_BS_V_DEAD:
case Z2SE_EN_FZ_BOUND:
if (field_0x3c6 != 0) {
return true;
}
field_0x3c6 = 3;
break;
case Z2SE_EN_DB_BERON:
case Z2SE_EN_YK_V_DEATH:
case Z2SE_EN_YG_FOOTNOTE:
if (field_0x3c0 != 0) {
return true;
}
field_0x3c0 = 3;
break;
case Z2SE_EN_DB_APPEAR:
case Z2SE_EN_BS_DEAD:
if (field_0x3c1 != 0) {
return true;
}
field_0x3c1 = 3;
break;
case Z2SE_EN_YK_WING:
if (field_0x3c2 != 0) {
return true;
}
field_0x3c2 = 4;
break;
case Z2SE_EN_YK_V_FURA:
if (field_0x3c3 != 0) {
return true;
}
field_0x3c3 = 4;
break;
case Z2SE_EN_GBA_FOOTNOTE:
if (field_0x3c7 != 0) {
return true;
}
field_0x3c7 = 1;
break;
case Z2SE_EN_GBA_V_DEATH:
case Z2SE_EN_GBA_LAYEGG:
case Z2SE_EN_GBA_FUKA:
case Z2SE_EN_GBA_LAND:
if (field_0x3c8 != 0) {
return true;
}
field_0x3c8 = 1;
break;
case Z2SE_EN_BS_APPEAR:
break;
}
return false;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool Z2SeMgr::isSoundCulling(JAISoundID param_0) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/isSoundCulling__7Z2SeMgrF10JAISoundID.s"
}
#pragma pop
#endif
Z2MultiSeMgr::Z2MultiSeMgr() {
resetMultiSePos();
}
Z2MultiSeMgr::~Z2MultiSeMgr() {}
/* 802AEB70-802AECBC 2A94B0 014C+00 2/2 6/6 0/0 .text registMultiSePos__12Z2MultiSeMgrFP3Vec */
#ifdef NONMATCHING
// matches with literals
s8 Z2MultiSeMgr::registMultiSePos(Vec* i_pos) {
if (i_pos == NULL) {
return 0;
}
if (mPosCount < 0) {
mPosCount = 0;
}
Vec rel_pos;
Z2GetAudience()->convertAbsToRel(*i_pos, &rel_pos, 0);
f32 volume = Z2GetAudience()->calcRelPosVolume(rel_pos, mVolumeScale, 0);
if (volume <= 0.0f) {
return mPosCount;
}
f32 pan = Z2GetAudience()->calcRelPosPan(rel_pos, 0);
f32 dolby = Z2GetAudience()->calcRelPosDolby(rel_pos, 0);
f32 pow_l = (1.0f - pan) * volume;
f32 pow_r = pan * volume;
f32 pow_f = (1.0f - dolby) * volume;
f32 pow_b = dolby * volume;
if (volume > mMaxVolume) {
mMaxVolume = volume;
}
if (pow_l > mMaxPowL) {
mMaxPowL = pow_l;
}
if (pow_r > mMaxPowR) {
mMaxPowR = pow_r;
}
if (pow_f > mMaxPowF) {
mMaxPowF = pow_f;
}
if (pow_b > mMaxPowB) {
mMaxPowB = pow_b;
}
mPosCount++;
return mPosCount;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s8 Z2MultiSeMgr::registMultiSePos(Vec* param_0) {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/registMultiSePos__12Z2MultiSeMgrFP3Vec.s"
}
#pragma pop
#endif
void Z2MultiSeMgr::resetMultiSePos(void) {
mPosCount = -1;
f32 _0 = FLOAT_LABEL(lit_4040);
mMaxPowL = _0;
mMaxPowR = _0;
mMaxPowF = _0;
mMaxPowB = _0;
mMaxVolume = _0;
}
/* 802AECE0-802AEDC0 2A9620 00E0+00 1/1 8/8 0/0 .text getPanPower__12Z2MultiSeMgrFv */
#ifdef NONMATCHING
// Matches with literals
f32 Z2MultiSeMgr::getPanPower() {
f32 pow_r = getMaxPowR();
f32 pow_l = getMaxPowL();
if (pow_l + pow_r > 0.0f) {
f32 pow_r = getMaxPowR();
f32 pow_l = getMaxPowL();
return getMaxPowR() / (pow_l + pow_r);
} else {
return 0.5f;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm f32 Z2MultiSeMgr::getPanPower() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/getPanPower__12Z2MultiSeMgrFv.s"
}
#pragma pop
#endif
/* 802AEDC0-802AEEA0 2A9700 00E0+00 1/1 8/8 0/0 .text getDolbyPower__12Z2MultiSeMgrFv */
#ifdef NONMATCHING
// Matches with literals
f32 Z2MultiSeMgr::getDolbyPower() {
f32 pow_b = getMaxPowB();
f32 pow_f = getMaxPowF();
if (pow_f + pow_b > 0.0f) {
f32 pow_b = getMaxPowB();
f32 pow_f = getMaxPowF();
return getMaxPowB() / (pow_f + pow_b);
} else {
return 0.5f;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm f32 Z2MultiSeMgr::getDolbyPower() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/getDolbyPower__12Z2MultiSeMgrFv.s"
}
#pragma pop
#endif