Files
dusklight/src/Z2AudioLib/Z2SeMgr.cpp
T
TakaRikka 87069235c0 some J3D/misc cleanup (#2628)
* some j3d cleanup

* begin using uintptr_t

* j3dgraphbase cleanup

* j3dgraphanimator cleanup
2025-09-04 17:56:59 +03:00

1247 lines
42 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: Z2SeMgr
//
#include "Z2AudioLib/Z2SeMgr.h"
#include "Z2AudioLib/Z2Audience.h"
#include "Z2AudioLib/Z2Calc.h"
#include "Z2AudioLib/Z2LinkMgr.h"
#include "Z2AudioLib/Z2SoundMgr.h"
#include "Z2AudioLib/Z2SceneMgr.h"
#include "Z2AudioLib/Z2SpeechMgr2.h"
#include "Z2AudioLib/Z2StatusMgr.h"
#include "Z2AudioLib/Z2Param.h"
#include "Z2AudioLib/Z2SeqMgr.h"
#include "JSystem/J3DU/J3DUD.h"
/* 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(0);
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;
}
/* 802AB984-802AC50C 2A62C4 0B88+00 1/1 196/196 549/549 .text
* seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
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_MOVE_U, 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_ROLLOPEN:
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_ROLLOPEN, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2, 0);
seStop(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, 0);
break;
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 (Z2GetStatusMgr()->getDemoStatus() != 0) {
return false;
}
break;
case Z2SE_SY_TALK_NEXT:
if (Z2GetStatusMgr()->isMovieDemo()) {
i_soundID = Z2SE_SY_DEMO_MESSAGE_NEXT;
}
break;
case Z2SE_SY_TALK_WIN_CLOSE:
if (Z2GetStatusMgr()->getDemoStatus() == 1) {
i_soundID = Z2SE_SY_TALK_END;
} else if (Z2GetStatusMgr()->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: {
Vec tmp = Z2GetAudience()->getAudioCamPos(0);
if (i_pos->y > tmp.y) {
return false;
}
break;
}
case Z2SE_OBJ_CHANDLV5_SWING:
i_volume = Z2Calc::getParamByExp(param_2, 35.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: {
Vec tmp = Z2GetAudience()->getAudioCamPos(0);
if (i_pos->y > tmp.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;
case Z2SE_OBJ_ARMOR_SWING:
case Z2SE_OBJ_ARMOR_HIT:
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);
}
/* 802AC50C-802AD8B0 2A6E4C 13A4+00 3/2 19/19 199/199 .text
* seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc */
bool Z2SeMgr::seStartLevel(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 (param_8 != 1) {
switch (i_soundID) {
case Z2SE_OBJ_FIRE_BURNING:
if (Z2GetStatusMgr()->getDemoStatus() == 2 || !Z2GetSceneMgr()->isInGame()) {
return false;
}
// fallthrough
case Z2SE_FAIRY_S_LV:
case Z2SE_EN_ZZ_MV:
case Z2SE_OBJ_L8_L_BALL_SW:
case Z2SE_OBJ_GANON_BARRIER:
case Z2SE_OBJ_CRVN_BURNING:
setLevObjSE(i_soundID, const_cast<Vec*>(i_pos), i_reverb);
return false;
}
}
switch (i_soundID) {
case Z2SE_OBJ_FLAG_TRAILING:
i_volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.1f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_BRIDGE_TRAILING:
case Z2SE_OBJ_BROKENBRIDGE:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.1f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_BOOMSHTR_SWITCH:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_FAN_WIND_S:
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_FAN_ROLL_S:
case Z2SE_OBJ_FAN_ROLL_M:
case Z2SE_OBJ_FAN_ROLL_L:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_AMI_ROLL:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_BRDG_MOVE:
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_ENV_WIND_SARUDAN:
i_volume = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.4f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 25.0f, 127.0f, 0.4f, 0.8f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_CHANDLV9_SWING:
if (param_2 < 10) {
param_2 = 10;
}
i_volume = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_1);
i_pitch = Z2Calc::getParamByExp(param_2, 10.0f, 127.0f, 2.0f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_1);
break;
case Z2SE_OBJ_BOMB_HOUSE_BURN:
if (param_2 > 300) {
seStartLevel(Z2SE_OBJ_BOMB_HOUSE_BURN_S, NULL, param_2, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
if (param_2 > 500) {
i_volume = 1.0f;
i_pitch = 1.3f;
} else {
i_volume = param_2 * 0.0006 + 0.7;
i_pitch = param_2 * 0.0006 + 1.0;
}
break;
case Z2SE_OBJ_BOMB_HOUSE_BURN_S:
if (param_2 > 500) {
i_volume = 1.0f;
i_pitch = (param_2 - 500) * 0.0015 + 1.0;
} else if (param_2 < 300) {
i_volume = 0.0f;
} else {
i_volume = (param_2 - 300) * 0.005;
}
break;
case Z2SE_OBJ_WTR_CLMN_UP:
if (param_2 <= 500) {
i_pitch = 0.8f;
} else if (param_2 > 500 && param_2 <= 1000) {
i_pitch = 1.0f;
} else if (param_2 > 1000 && param_2 <= 1500) {
i_pitch = 1.0f;
} else {
i_pitch = 1.2f;
}
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_WTR_CLMN_DOWN:
if (param_2 > 700) {
i_pitch = 1.0f;
} else {
i_pitch = param_2 * 0.001 + 0.3;
}
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_STN_SPRL_RAIL:
case Z2SE_OBJ_STN_SPRL_RAIL_DW:
modHeightAtCamera(&i_pos);
break;
case Z2SE_OBJ_SPNR_GEAR_S:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4000.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_SPNR_GEAR_L:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 3500.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_TOGE_SPIN:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.6f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 26.0f, 0.4f, 0.8f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_STN_WL_RL:
case Z2SE_OBJ_STN_WL_RL_OP:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.3f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 64.0f, 0.4f, 0.6f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_SPNR_SW_RL:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.6f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 4500.0f, 0.4f, 0.7f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_TOGE_ROLL_MV:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 40.0f, 0.4f, 0.8f, 1.2f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_L_TORCH_SW:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 120.0f, 0.4f, 0.9f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FOG_STAY:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FALL_S:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_B_FALL_L:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 100.0f, 0.4f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_L8_L_LIFT_MV:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
i_pitch = Z2Calc::getParamByExp(param_2, 0.0f, 5.0f, 0.4f, 0.7f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_OBJ_AMATA_CRK:
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_HYRULE_BARRIER:
if (Z2GetSceneMgr()->getCurrentSceneNum() != 0x16) {
break;
}
// fallthrough
case Z2SE_OBJ_DARK_GATE:
if (!Z2GetSceneMgr()->isInDarkness() && i_pos != NULL
&& Z2GetLink() != NULL && Z2GetLink()->getCurrentPos() != NULL)
{
f32 dist = sqrtf(VECSquareDistance(i_pos, Z2GetLink()->getCurrentPos()));
f32 gate_volume = 1.0f;
if (dist < 2000.0f) {
gate_volume = 0.0f;
} else if (dist < 4000.0f) {
gate_volume = Z2Calc::getParamByExp(dist, 2000.0f, 5000.0f, 0.45f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
}
Z2GetSeqMgr()->setTwilightGateVol(gate_volume);
}
break;
case Z2SE_OBJ_HASU_WTR:
i_volume = Z2Calc::getParamByExp(param_2, 0.0f, 50.0f, 0.4f, 0.5f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
case Z2SE_ENV_PEOPLE_CROWD: {
f32 scale = 1.0f;
if (Z2GetSceneMgr()->getCurrentRoomNum() == 3) {
scale = Z2Calc::linearTransform(J3DUD::JMAAbs(Z2GetLink()->getCurrentPos()->x),
600.0f, 3500.0f, 1.0f, 0.1f, false);
}
switch (Z2GetStatusMgr()->getHour()) {
case 0:
case 1:
case 2:
case 3:
scale *= 0.1f;
break;
case 4:
scale *= 0.2f;
break;
case 5:
scale *= 0.3f;
break;
case 6:
scale *= 0.4f;
break;
case 7:
scale *= 0.5f;
break;
case 8:
scale *= 0.6f;
break;
case 9:
scale *= 0.7f;
break;
case 10:
scale *= 0.8f;
break;
case 11:
scale *= 0.9f;
break;
case 18:
scale *= 0.9f;
break;
case 19:
scale *= 0.8f;
break;
case 20:
scale *= 0.7f;
break;
case 21:
scale *= 0.5f;
break;
case 22:
scale *= 0.4f;
break;
case 23:
scale *= 0.2f;
break;
}
i_volume = Z2Calc::getParamByExp(mCrowdSize * scale, 5.0f, 90.0f, 0.2f, 0.0f, 1.0f,
Z2Calc::CURVE_SIGN_0);
break;
}
case Z2SE_AL_COPYROD_WAIT:
param_2++;
break;
}
for (int i = 0; i < 24; i++) {
if (mSoundHandles[i] && mSoundHandles[i]->getID() == i_soundID
&& i_pos == (Vec*)mSoundHandles[i]->getUserData())
{
if (param_8 == 1) {
i_volume = Z2GetAudience()->calcOffMicSound(i_volume);
}
mSoundHandles[i]->updateLifeTime(1);
if (i_pos != NULL) {
mSoundHandles[i]->setPos((JGeometry::TVec3<f32>)*i_pos);
}
if (param_2 != 0) {
JAISoundHandle* handle = &mSoundHandles[i];
Z2GetSoundStarter()->setPortData(handle, 6, param_2, -1);
}
if (i_reverb != 0) {
mSoundHandles[i]->getAuxiliary().moveFxMix(i_reverb / 127.0f, 0);
}
if (i_pitch != 1.0f) {
mSoundHandles[i]->getAuxiliary().movePitch(i_pitch, 0);
}
if (i_volume != 1.0f) {
mSoundHandles[i]->getAuxiliary().moveVolume(i_volume, 0);
}
if (i_pan != -1.0f) {
mSoundHandles[i]->getAuxiliary().movePan(i_pan, 0);
}
if (i_dolby != -1.0f) {
mSoundHandles[i]->getAuxiliary().moveDolby(i_dolby, 0);
}
return true;
}
}
if (isSoundCulling(i_soundID)) {
return false;
}
JAISoundHandle* handle = mSoundHandles.getFreeHandle();
if (handle == NULL) {
return false;
}
bool ret = Z2GetSoundStarter()->startSound(i_soundID, handle, (JGeometry::TVec3<f32>*)i_pos,
param_2, i_reverb / 127.0f, i_pitch, i_volume,
i_pan, i_dolby, false);
if (handle != NULL && *handle) {
if (i_soundID == Z2SE_OBJ_BOMB_HOUSE_BURN) {
Z2GetSeqMgr()->bgmStart(Z2BGM_EVENT02, 0, 0);
}
if (param_8 == 1) {
Z2GetAudience()->calcOffMicSound(i_volume);
}
(*handle)->setUserData((uintptr_t)i_pos);
if (ret) {
(*handle)->setLifeTime(1, false);
}
}
return ret;
}
/* 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 */
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);
}
}
/* 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 */
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);
}
}
}
/* 802ADC54-802ADD58 2A8594 0104+00 0/0 2/2 0/0 .text talkOutSe__7Z2SeMgrFv */
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);
}
}
}
/* 802ADD58-802ADE5C 2A8698 0104+00 0/0 1/1 0/0 .text menuInSe__7Z2SeMgrFv */
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);
}
}
}
/* 802ADE5C-802ADFF4 2A879C 0198+00 1/1 0/0 0/0 .text setLevObjSE__7Z2SeMgrFUlP3VecSc */
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;
}
}
/* 802ADFF4-802AE184 2A8934 0190+00 1/1 0/0 0/0 .text setMultiTriggerSE__7Z2SeMgrFUlP3VecSc */
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;
}
}
/* 802AE184-802AE524 2A8AC4 03A0+00 0/0 1/1 0/0 .text processSeFramework__7Z2SeMgrFv */
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();
seStart(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;
}
}
/* 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 */
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;
}
Z2MultiSeMgr::Z2MultiSeMgr() {
resetMultiSePos();
}
Z2MultiSeMgr::~Z2MultiSeMgr() {}
/* 802AEB70-802AECBC 2A94B0 014C+00 2/2 6/6 0/0 .text registMultiSePos__12Z2MultiSeMgrFP3Vec */
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;
}
void Z2MultiSeMgr::resetMultiSePos(void) {
mPosCount = -1;
mMaxPowL = 0.0f;
mMaxPowR = 0.0f;
mMaxPowF = 0.0f;
mMaxPowB = 0.0f;
mMaxVolume = 0.0f;
}
/* 802AECE0-802AEDC0 2A9620 00E0+00 1/1 8/8 0/0 .text getPanPower__12Z2MultiSeMgrFv */
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;
}
}
/* 802AEDC0-802AEEA0 2A9700 00E0+00 1/1 8/8 0/0 .text getDolbyPower__12Z2MultiSeMgrFv */
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;
}
}