summaryrefslogtreecommitdiff
path: root/libs/Z2AudioLib/Z2SeMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/Z2AudioLib/Z2SeMgr.cpp')
-rw-r--r--libs/Z2AudioLib/Z2SeMgr.cpp931
1 files changed, 807 insertions, 124 deletions
diff --git a/libs/Z2AudioLib/Z2SeMgr.cpp b/libs/Z2AudioLib/Z2SeMgr.cpp
index 9792e01a73..c9d0ce61ac 100644
--- a/libs/Z2AudioLib/Z2SeMgr.cpp
+++ b/libs/Z2AudioLib/Z2SeMgr.cpp
@@ -4,6 +4,15 @@
//
#include "Z2AudioLib/Z2SeMgr.h"
+#include "Z2AudioLib/Z2Audience.h"
+#include "Z2AudioLib/Z2Calc.h"
+#include "Z2AudioLib/Z2Param.h"
+#include "Z2AudioLib/Z2SceneMgr.h"
+#include "Z2AudioLib/Z2SeqMgr.h"
+#include "Z2AudioLib/Z2SoundMgr.h"
+#include "Z2AudioLib/Z2SoundStarter.h"
+#include "Z2AudioLib/Z2SpeechMgr2.h"
+#include "Z2AudioLib/Z2StatusMgr.h"
#include "dol2asm.h"
#include "global.h"
@@ -11,75 +20,10 @@
// Types:
//
-struct Z2StatusMgr {
- /* 802B613C */ void menuIn();
- /* 802B617C */ void menuOut();
- /* 802B61BC */ void isMovieDemo();
-};
-
-struct Z2SpeechMgr2 {
- /* 802CCA18 */ void playOneShotVoice(u8, u16, Vec*, s8);
-};
-
-struct Z2SoundMgr {
- /* 802AA7DC */ void stopSoundID(JAISoundID);
- /* 802AA9E8 */ void multiVolumeSoundID(JAISoundID, f32);
-};
-
-struct Z2SeqMgr {
- /* 802AF010 */ void bgmStart(u32, u32, s32);
-};
-
-struct Z2Param {
- static f32 VOL_SE_SYSTEM_DEFAULT;
- static f32 VOL_SE_LINK_VOICE_DEFAULT;
- static f32 VOL_SE_LINK_MOTION_DEFAULT;
- static f32 VOL_SE_LINK_FOOTNOTE_DEFAULT;
- static f32 VOL_SE_CHAR_VOICE_DEFAULT;
- static f32 VOL_SE_CHAR_MOVE_DEFAULT;
- static f32 VOL_SE_OBJECT_DEFAULT;
- static f32 VOL_SE_ATMOSPHERE_DEFAULT;
- static f32 VOL_SE_SYSTEM_TALKING;
- static f32 VOL_SE_LINK_VOICE_TALKING;
- static f32 VOL_SE_LINK_MOTION_TALKING;
- static f32 VOL_SE_LINK_FOOTNOTE_TALKING;
- static f32 VOL_SE_CHAR_VOICE_TALKING;
- static f32 VOL_SE_CHAR_MOVE_TALKING;
- static f32 VOL_SE_OBJECT_TALKING;
- static f32 VOL_SE_ATMOSPHERE_TALKING;
- static f32 VOL_SE_SYSTEM_PAUSING;
- static f32 VOL_SE_LINK_VOICE_PAUSING;
- static f32 VOL_SE_LINK_MOTION_PAUSING;
- static f32 VOL_SE_LINK_FOOTNOTE_PAUSING;
- static f32 VOL_SE_CHAR_VOICE_PAUSING;
- static f32 VOL_SE_CHAR_MOVE_PAUSING;
- static f32 VOL_SE_OBJECT_PAUSING;
- static f32 VOL_SE_ATMOSPHERE_PAUSING;
-};
-
struct Z2CreatureLink {
static u8 mLinkPtr[4 + 4 /* padding */];
};
-struct Z2Calc {
- struct CurveSign {};
-
- /* 802A968C */ void linearTransform(f32, f32, f32, f32, f32, bool);
- /* 802A96F4 */ void getParamByExp(f32, f32, f32, f32, f32, f32, Z2Calc::CurveSign);
-};
-
-struct Z2Audience {
- /* 802BD704 */ void calcOffMicSound(f32);
- /* 802BD92C */ void convertAbsToRel(Vec&, Vec*, int);
- /* 802BD95C */ void calcRelPosVolume(Vec const&, f32, int);
- /* 802BDA44 */ void calcRelPosPan(Vec const&, int);
- /* 802BDB44 */ void calcRelPosDolby(Vec const&, int);
-};
-
-struct JAISeCategoryMgr {
- /* 8029FDE0 */ void stop(u32);
-};
-
//
// Forward References:
//
@@ -192,7 +136,7 @@ extern "C" extern u8 __OSReport_disable;
//
/* 802AB64C-802AB710 2A5F8C 00C4+00 0/0 1/1 0/0 .text __ct__7Z2SeMgrFv */
-Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), field_0x60(mSoundHandle, 0x18) {
+Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), mSoundHandles(mSoundHandle, 0x18) {
field_0x3c0 = 0;
field_0x3c1 = 0;
field_0x3c2 = 0;
@@ -207,55 +151,66 @@ Z2SeMgr::Z2SeMgr() : JASGlobalInstance(this), field_0x60(mSoundHandle, 0x18) {
}
Z2MultiSeObj::Z2MultiSeObj() {
- field_0x1c = 0xFFFFFFFF;
+ mSoundID = 0xFFFFFFFF;
field_0x20 = 0;
}
/* 802AB750-802AB80C 2A6090 00BC+00 0/0 1/1 0/0 .text initSe__7Z2SeMgrFv */
-#ifdef NONMATCHING
void Z2SeMgr::initSe() {
- for (int i = 0; i < 10; i++) {
+ for (u8 i = 0; i < 10; i++) {
mLevelObjSe[i].resetMultiSePos();
- mLevelObjSe[i].field_0x1c = 0xffffffff;
+ mLevelObjSe[i].mSoundID = 0xffffffff;
mLevelObjSe[i].field_0x20 = 0;
}
mLevelObjectSeCount = 0;
- for (int i = 0; i < 10; i++) {
+ for (u8 i = 0; i < 10; i++) {
mMultiTriggerSe[i].resetMultiSePos();
- mMultiTriggerSe[i].field_0x1c = 0xffffffff;
+ mMultiTriggerSe[i].mSoundID = 0xffffffff;
mMultiTriggerSe[i].field_0x20 = 0;
}
mMultiTriggerSeCount = 0;
resetModY();
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::initSe() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/initSe__7Z2SeMgrFv.s"
-}
-#pragma pop
-#endif
void Z2SeMgr::resetModY() {
for (int i = 0; i < 8; i++) {
- mModY[i] = 0;
+ mModY[i] = NULL;
}
}
/* 802AB830-802AB93C 2A6170 010C+00 1/1 0/0 0/0 .text modHeightAtCamera__7Z2SeMgrFPPC3Vec
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::modHeightAtCamera(Vec const** param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/modHeightAtCamera__7Z2SeMgrFPPC3Vec.s"
+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;
+ JGeometry::TVec3<f32> cam_pos = Z2GetAudience()->getAudioCamPos();
+ if (field_0x340[idx].y > cam_pos.y) {
+ field_0x340[idx].y = cam_pos.y;
+ }
+ *param_0 = &field_0x340[idx];
+ }
}
-#pragma pop
void Z2SeMgr::incrCrowdSize() {
mCrowdSize++;
@@ -365,15 +320,240 @@ 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 void Z2SeMgr::seStart(JAISoundID param_0, Vec const* param_1, u32 param_2, s8 param_3,
+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 */
@@ -509,7 +689,7 @@ SECTION_SDATA2 static f32 lit_4615 = 90.0f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2SeMgr::seStartLevel(JAISoundID param_0, Vec const* param_1, u32 param_2, s8 param_3,
+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"
@@ -517,26 +697,62 @@ asm void Z2SeMgr::seStartLevel(JAISoundID param_0, Vec const* param_1, u32 param
#pragma pop
/* 802AD8B0-802AD94C 2A81F0 009C+00 1/1 0/0 4/4 .text seStop__7Z2SeMgrF10JAISoundIDUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::seStop(JAISoundID param_0, u32 param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/seStop__7Z2SeMgrF10JAISoundIDUl.s"
+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();
+ }
+ }
+ }
}
-#pragma pop
/* 802AD94C-802AD9F4 2A828C 00A8+00 0/0 1/1 0/0 .text seStopAll__7Z2SeMgrFUl */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::seStopAll(u32 param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/seStopAll__7Z2SeMgrFUl.s"
+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);
}
-#pragma pop
/* 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
@@ -545,19 +761,38 @@ asm void Z2SeMgr::seMoveVolumeAll(f32 param_0, u32 param_1) {
#include "asm/Z2AudioLib/Z2SeMgr/seMoveVolumeAll__7Z2SeMgrFfUl.s"
}
#pragma pop
+#endif
/* 802ADB14-802ADB50 2A8454 003C+00 0/0 1/1 0/0 .text messageSePlay__7Z2SeMgrFUsP3VecSc
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::messageSePlay(u16 param_0, Vec* param_1, s8 param_2) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/messageSePlay__7Z2SeMgrFUsP3VecSc.s"
+void Z2SeMgr::messageSePlay(u16 param_0, Vec* param_1, s8 param_2) {
+ Z2GetSpeechMgr2()->playOneShotVoice(0, param_0, param_1, param_2);
}
-#pragma pop
/* 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
@@ -566,8 +801,32 @@ asm void Z2SeMgr::talkInSe() {
#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
@@ -576,8 +835,32 @@ asm void Z2SeMgr::talkOutSe() {
#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
@@ -586,6 +869,7 @@ asm void Z2SeMgr::menuInSe() {
#include "asm/Z2AudioLib/Z2SeMgr/menuInSe__7Z2SeMgrFv.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039B9F0-8039B9FC 028050 000C+00 1/1 0/0 0/0 .rodata @5054 */
@@ -598,6 +882,50 @@ COMPILER_STRIP_GATE(0x8039B9F0, &lit_5054);
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
@@ -606,6 +934,7 @@ asm void Z2SeMgr::setLevObjSE(u32 param_0, Vec* param_1, s8 param_2) {
#include "asm/Z2AudioLib/Z2SeMgr/setLevObjSE__7Z2SeMgrFUlP3VecSc.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039B9FC-8039BA08 02805C 000C+00 1/1 0/0 0/0 .rodata @5100 */
@@ -618,6 +947,52 @@ COMPILER_STRIP_GATE(0x8039B9FC, &lit_5100);
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
@@ -626,8 +1001,88 @@ asm void Z2SeMgr::setMultiTriggerSE(u32 param_0, Vec* param_1, s8 param_2) {
#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
@@ -636,18 +1091,174 @@ asm void Z2SeMgr::processSeFramework() {
#include "asm/Z2AudioLib/Z2SeMgr/processSeFramework__7Z2SeMgrFv.s"
}
#pragma pop
+#endif
/* 802AE524-802AE5B0 2A8E64 008C+00 1/1 0/0 0/0 .text isLevelSe__7Z2SeMgrF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SeMgr::isLevelSe(JAISoundID param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SeMgr/isLevelSe__7Z2SeMgrF10JAISoundID.s"
+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;
+ }
}
-#pragma pop
/* 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
@@ -656,6 +1267,7 @@ asm bool Z2SeMgr::isSoundCulling(JAISoundID param_0) {
#include "asm/Z2AudioLib/Z2SeMgr/isSoundCulling__7Z2SeMgrF10JAISoundID.s"
}
#pragma pop
+#endif
Z2MultiSeMgr::Z2MultiSeMgr() {
resetMultiSePos();
@@ -664,41 +1276,112 @@ Z2MultiSeMgr::Z2MultiSeMgr() {
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 void Z2MultiSeMgr::registMultiSePos(Vec* param_0) {
+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;
- mMaxPowB = _0;
mMaxPowF = _0;
+ mMaxPowB = _0;
mMaxVolume = _0;
}
/* 802AECE0-802AEDC0 2A9620 00E0+00 1/1 8/8 0/0 .text getPanPower__12Z2MultiSeMgrFv */
+#ifdef NONMATCHING
+// regalloc
+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 void Z2MultiSeMgr::getPanPower() {
+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
+// regalloc
+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 void Z2MultiSeMgr::getDolbyPower() {
+asm f32 Z2MultiSeMgr::getDolbyPower() {
nofralloc
#include "asm/Z2AudioLib/Z2SeMgr/getDolbyPower__12Z2MultiSeMgrFv.s"
}
#pragma pop
+#endif