summaryrefslogtreecommitdiff
path: root/libs/Z2AudioLib
diff options
context:
space:
mode:
authorCaroline Madsen <69010899+randomsalience@users.noreply.github.com>2024-01-30 19:08:37 -0500
committerGitHub <noreply@github.com>2024-01-30 16:08:37 -0800
commit255cc868e43f3754b29fa089a2a02e617ecb09bb (patch)
tree69d3e6252f436c8af94d96f6202a9041d0e4424d /libs/Z2AudioLib
parent1c891adeb8a58a62fb3e6a6ff5bb3ec8da00f883 (diff)
work on Z2SoundMgr and Z2SeMgr (#2055)
Diffstat (limited to 'libs/Z2AudioLib')
-rw-r--r--libs/Z2AudioLib/Z2AudioMgr.cpp2
-rw-r--r--libs/Z2AudioLib/Z2Creature.cpp2
-rw-r--r--libs/Z2AudioLib/Z2LinkMgr.cpp4
-rw-r--r--libs/Z2AudioLib/Z2Param.cpp9
-rw-r--r--libs/Z2AudioLib/Z2SeMgr.cpp931
-rw-r--r--libs/Z2AudioLib/Z2SoundInfo.cpp2
-rw-r--r--libs/Z2AudioLib/Z2SoundMgr.cpp449
-rw-r--r--libs/Z2AudioLib/Z2SoundStarter.cpp56
-rw-r--r--libs/Z2AudioLib/Z2SpeechMgr2.cpp2
9 files changed, 1209 insertions, 248 deletions
diff --git a/libs/Z2AudioLib/Z2AudioMgr.cpp b/libs/Z2AudioLib/Z2AudioMgr.cpp
index d7c6138751..1aeb3eec2a 100644
--- a/libs/Z2AudioLib/Z2AudioMgr.cpp
+++ b/libs/Z2AudioLib/Z2AudioMgr.cpp
@@ -415,7 +415,7 @@ asm bool Z2AudioMgr::hasReset() const {
* startSound__10Z2AudioMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
// vtable order
#ifdef NONMATCHING
-int Z2AudioMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+bool Z2AudioMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (mResettingFlag) {
return 0;
diff --git a/libs/Z2AudioLib/Z2Creature.cpp b/libs/Z2AudioLib/Z2Creature.cpp
index 78e2045074..86e68e212b 100644
--- a/libs/Z2AudioLib/Z2Creature.cpp
+++ b/libs/Z2AudioLib/Z2Creature.cpp
@@ -1145,7 +1145,7 @@ Z2SoundHandlePool* Z2CreatureOI::startCreatureSoundLevel(JAISoundID i_soundID, u
* startTentacleSound__12Z2CreatureOIF10JAISoundIDUcUlSc */
Z2SoundHandlePool* Z2CreatureOI::startTentacleSound(JAISoundID i_soundID, u8 param_1, u32 param_2,
s8 param_3) {
- mTentacleSounds[param_1].startSound(i_soundID, param_2, param_3);
+ return mTentacleSounds[param_1].startSound(i_soundID, param_2, param_3);
}
/* 802C2CD4-802C2DE0 2BD614 010C+00 0/0 0/0 1/1 .text
diff --git a/libs/Z2AudioLib/Z2LinkMgr.cpp b/libs/Z2AudioLib/Z2LinkMgr.cpp
index ef8cd54226..27ecf3ac69 100644
--- a/libs/Z2AudioLib/Z2LinkMgr.cpp
+++ b/libs/Z2AudioLib/Z2LinkMgr.cpp
@@ -634,7 +634,7 @@ SECTION_SDATA2 static f32 lit_4399 = 9.0f / 10.0f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm int Z2LinkSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm bool Z2LinkSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7,
f32 param_8, u32 param_9) {
@@ -697,7 +697,7 @@ Z2RideSoundStarter::Z2RideSoundStarter(Z2CreatureRide* ride) : Z2SoundStarter(fa
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm int Z2RideSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm bool Z2RideSoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3,
f32 param_4, f32 param_5, f32 param_6, f32 param_7,
f32 param_8, u32 param_9) {
diff --git a/libs/Z2AudioLib/Z2Param.cpp b/libs/Z2AudioLib/Z2Param.cpp
index e131fa3a6f..ac70c6c77b 100644
--- a/libs/Z2AudioLib/Z2Param.cpp
+++ b/libs/Z2AudioLib/Z2Param.cpp
@@ -160,8 +160,13 @@ f32 Z2Param::ENEMY_LASTHIT_MUTE_VOLUME;
/* 80451340 0001+00 data_80451340 None */
/* 80451341 0001+00 data_80451341 None */
/* 80451342 0006+00 data_80451342 None */
-extern u8 struct_80451340[8];
-u8 struct_80451340[8];
+#pragma push
+#pragma force_active on
+u8 struct_80451340;
+u8 struct_80451341;
+u8 struct_80451342;
+u8 pad_80451344[4];
+#pragma pop
/* 80451348-80451350 000848 0008+00 0/0 4/4 0/0 .sbss None */
extern u8 data_80451348[8];
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
diff --git a/libs/Z2AudioLib/Z2SoundInfo.cpp b/libs/Z2AudioLib/Z2SoundInfo.cpp
index c0e32f3708..e55b97deb1 100644
--- a/libs/Z2AudioLib/Z2SoundInfo.cpp
+++ b/libs/Z2AudioLib/Z2SoundInfo.cpp
@@ -92,7 +92,7 @@ u16 Z2SoundInfo::getBgmSeqResourceID(JAISoundID param_0) const {
}
/* 802BB090-802BB0D8 2B59D0 0048+00 1/0 0/0 0/0 .text getSoundType__11Z2SoundInfoCF10JAISoundID */
-u32 Z2SoundInfo::getSoundType(JAISoundID param_0) const {
+int Z2SoundInfo::getSoundType(JAISoundID param_0) const {
switch (param_0.mId.mBytes.b0) {
case 0:
return 0;
diff --git a/libs/Z2AudioLib/Z2SoundMgr.cpp b/libs/Z2AudioLib/Z2SoundMgr.cpp
index fe7103627e..7060471381 100644
--- a/libs/Z2AudioLib/Z2SoundMgr.cpp
+++ b/libs/Z2AudioLib/Z2SoundMgr.cpp
@@ -4,34 +4,18 @@
//
#include "Z2AudioLib/Z2SoundMgr.h"
+#include "Z2AudioLib/Z2Param.h"
+#include "Z2AudioLib/Z2SceneMgr.h"
+#include "Z2AudioLib/Z2SeMgr.h"
+#include "Z2AudioLib/Z2SeqMgr.h"
+#include "Z2AudioLib/Z2SoundInfo.h"
+#include "Z2AudioLib/Z2SpeechMgr2.h"
+#include "JSystem/JAudio2/JASCalc.h"
+#include "JSystem/JAudio2/JASDriverIF.h"
+#include "JSystem/JAudio2/JAUSectionHeap.h"
#include "dol2asm.h"
//
-// Types:
-//
-
-struct Z2SpeechMgr2 {
- /* 802CC190 */ void speakOneWord(bool);
-};
-
-struct Z2SoundInfo {
- /* 802BBAC8 */ void getSwBit(JAISoundID) const;
-};
-
-struct JAUSectionHeap {
- /* 802A5EC0 */ void loadDynamicSeq(JAISoundID, bool);
- /* 802A5EF8 */ void releaseIdleDynamicSeqDataBlock();
-};
-
-struct JASDriver {
- /* 8029E188 */ void waitSubFrame();
-};
-
-struct JASCalc {
- static u8 const CUTOFF_TO_IIR_TABLE[1024];
-};
-
-//
// Forward References:
//
@@ -53,6 +37,8 @@ extern "C" void multiVolumeSoundID__10Z2SoundMgrF10JAISoundIDf();
extern "C" void isPlayingSoundID__10Z2SoundMgrF10JAISoundID();
extern "C" extern char const* const Z2SoundMgr__stringBase0;
+void dComIfGs_staffroll_next_go();
+
//
// External References:
//
@@ -106,7 +92,6 @@ extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
-extern "C" void sprintf();
extern "C" u8 const CUTOFF_TO_IIR_TABLE__7JASCalc[1024];
extern "C" extern u8 data_80450B4C[4];
extern "C" extern u8 data_80450B70[4];
@@ -114,7 +99,6 @@ extern "C" extern u8 data_80450B80[4];
extern "C" extern u8 data_80450B84[4];
extern "C" extern u8 data_80450B88[4];
extern "C" extern u8 data_80450CC0[4 + 4 /* padding */];
-extern "C" extern u8 struct_80451340[8];
extern "C" extern u8 __OSReport_disable;
//
@@ -155,6 +139,90 @@ SECTION_SDATA2 static f32 lit_3688 = 1.0f;
SECTION_SDATA2 static f32 lit_3689 = -1.0f;
/* 802A9BC8-802A9E80 2A4508 02B8+00 1/0 1/1 0/0 .text seqCallback__FP8JASTrackUs */
+#ifdef NONMATCHING
+// matches with literals
+u16 seqCallback(JASTrack* i_track, u16 param_1) {
+ JSUList<JAISe>* list;
+ switch (param_1) {
+ case 0x1000:
+ Z2GetSeqMgr()->setChildTrackVolume(Z2GetSeqMgr()->getSubBgmHandle(),
+ 3, 1.0f, 0, -1.0f, -1.0f);
+ Z2GetSoundMgr()->getSeqMgr()->calc();
+ Z2GetSoundMgr()->getSeqMgr()->mixOut();
+ break;
+ case 0x1001:
+ Z2GetSeqMgr()->onFieldBgmJumpStart();
+ break;
+ case 0x1002:
+ Z2GetSeqMgr()->onFieldBgmJumpEnd();
+ break;
+ case 0x1003:
+ Z2GetSpeechMgr2()->speakOneWord(true);
+ break;
+ case 0x1004:
+ Z2GetSeqMgr()->onVariantBgmJumpEnd(true);
+ break;
+ case 0x1005:
+ Z2GetSeqMgr()->onVariantBgmJumpEnd(false);
+ break;
+ case 0x1006:
+ list = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList();
+ for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) {
+ switch (link->getObject()->getID()) {
+ case Z2SE_GRO_MV_SINGING:
+ case Z2SE_GRR_MV_SINGING:
+ case Z2SE_CLERK_MV_SONG_HO:
+ case Z2SE_WAD_A_MV_DANCE:
+ case Z2SE_MCN_A_V_DANCE:
+ case Z2SE_WCN_A_V_DANCE:
+ link->getObject()->getTrack()->writePort(14, 1);
+ break;
+ }
+ }
+ break;
+ case 0x1015:
+ list = Z2GetSoundMgr()->getSeMgr()->getCategory(5)->getSeList();
+ for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) {
+ switch (link->getObject()->getID()) {
+ case Z2SE_MCN_A_V_DANCE:
+ case Z2SE_WCN_A_V_DANCE:
+ link->getObject()->getTrack()->writePort(14, 1);
+ break;
+ }
+ }
+ break;
+ case 0x1007:
+ Z2GetSeqMgr()->changeBgmStatus(7);
+ break;
+ case 0x1008:
+ Z2GetSeqMgr()->changeBgmStatus(8);
+ break;
+ case 0x1014:
+ dComIfGs_staffroll_next_go();
+ break;
+ }
+ if (param_1 >= 0x1009 && param_1 <= 0x1013) {
+ JAISoundID sound_id = Z2SE_CSL_TOWN_BAND_VOCAL;
+ if (param_1 <= 0x100a) {
+ sound_id = Z2SE_CSL_TOWN_BAND_GT_1;
+ } else if (param_1 <= 0x100c) {
+ sound_id = Z2SE_CSL_TOWN_BAND_GT_2;
+ } else if (param_1 <= 0x100f) {
+ sound_id = Z2SE_CSL_TOWN_BAND_GT_3;
+ } else if (param_1 <= 0x1011) {
+ sound_id = Z2SE_CSL_TOWN_BAND_FLUTE;
+ }
+ list = Z2GetSoundMgr()->getSeMgr()->getCategory(6)->getSeList();
+ for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) {
+ if (link->getObject()->getID() == sound_id) {
+ link->getObject()->getTrack()->writePort(14, param_1);
+ break;
+ }
+ }
+ }
+ return 0;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -163,6 +231,7 @@ asm u16 seqCallback(JASTrack* param_0, u16 param_1) {
#include "asm/Z2AudioLib/Z2SoundMgr/seqCallback__FP8JASTrackUs.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 803C9D70-803C9D80 026E90 000C+04 1/1 1/1 0/0 .data __vt__10Z2SoundMgr */
@@ -175,6 +244,17 @@ SECTION_DATA extern void* __vt__10Z2SoundMgr[3 + 1 /* padding */] = {
};
/* 802A9E80-802A9EE8 2A47C0 0068+00 0/0 1/1 0/0 .text __ct__10Z2SoundMgrFv */
+#ifdef NONMATCHING
+// matches but generates an extra weak function
+Z2SoundMgr::Z2SoundMgr() :
+ JASGlobalInstance<Z2SoundMgr>(this),
+ mSeMgr(true),
+ mSeqMgr(true),
+ mStreamMgr(true)
+{
+ mSoundID.setAnonymous();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -183,6 +263,7 @@ asm Z2SoundMgr::Z2SoundMgr() {
#include "asm/Z2AudioLib/Z2SoundMgr/__ct__10Z2SoundMgrFv.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 8039B9D0-8039B9D0 028030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -209,6 +290,64 @@ SECTION_SDATA2 static f64 lit_3909 = 4503599627370496.0 /* cast u32 to float */;
/* 802A9EE8-802AA1B0 2A4828 02C8+00 1/0 0/0 0/0 .text
* startSound__10Z2SoundMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
+#ifdef NONMATCHING
+// matches with literals
+bool Z2SoundMgr::startSound(JAISoundID i_soundID, JAISoundHandle* i_handle,
+ JGeometry::TVec3<f32> const* i_pos) {
+ switch (Z2GetSoundInfo()->getSoundType(i_soundID)) {
+ case 0:
+ if (Z2GetSoundInfo()->getSwBit(i_soundID) & 8) {
+ Z2GetSeqMgr()->bgmAllMute(3, 0.3f);
+ mSoundID = i_soundID;
+ }
+ return mSeMgr.startSound(i_soundID, i_handle, i_pos);
+ case 1:
+ if (i_soundID == Z2BGM_LUTERA_DEMO) {
+ Z2GetSeqMgr()->bgmStart(Z2BGM_LUTERA2, 0, 0);
+ Z2GetSeqMgr()->i_unMuteSceneBgm(0);
+ Z2GetSeqMgr()->changeBgmStatus(0);
+ return mSeMgr.startSound(Z2SE_NO_SOUND, i_handle, i_pos);
+ } else {
+ bool loaded = false;
+ JAUSectionHeap* heap = JASGlobalInstance<JAUSectionHeap>::getInstance();
+ JAUSeqDataBlocks const& loaded_blocks =
+ heap->getSectionHeapData().seqDataBlocks.getLoadedBlocks();
+ JSULink<JAUSeqDataBlock>* link;
+ for (link = loaded_blocks.getFirst(); link != NULL; link = link->getNext()) {
+ if (link->getObject()->field_0x10 == i_soundID) {
+ loaded = true;
+ break;
+ }
+ }
+ if (!loaded) {
+ heap->releaseIdleDynamicSeqDataBlock();
+ if (!heap->loadDynamicSeq(i_soundID, true)) {
+ JAUSeqDataBlocks const& free_blocks =
+ heap->getSectionHeapData().seqDataBlocks.getFreeBlocks();
+ for (link = free_blocks.getFirst(); link != NULL; link = link->getNext()) {
+ }
+ }
+
+ }
+ return mSeqMgr.startSound(i_soundID, i_handle, i_pos);
+ }
+ case 2:
+ if (i_soundID == 0x2000001 || i_soundID == 0x200004d) {
+ mStreamMgr.stop(180);
+ return mSeMgr.startSound(Z2SE_NO_SOUND, i_handle, i_pos);
+ }
+ if (i_soundID == 0x2000005) {
+ mSeMgr.getCategory(9)->pause(false);
+ mSeMgr.getCategory(9)->getParams()->moveVolume(1.0f, 45);
+ }
+ return mStreamMgr.startSound(i_soundID, i_handle, i_pos);
+ default:
+ char error[32];
+ sprintf(error, "Unknown Sound-Type id :%08x\n", (u32)i_soundID);
+ return false;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -218,8 +357,22 @@ asm bool Z2SoundMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
#include "asm/Z2AudioLib/Z2SoundMgr/func_802A9EE8.s"
}
#pragma pop
+#endif
/* 802AA1B0-802AA270 2A4AF0 00C0+00 2/2 0/0 0/0 .text calc__10Z2SoundMgrFv */
+#ifdef NONMATCHING
+void Z2SoundMgr::calc() {
+ mSeMgr.calc();
+ if (!mSoundID.isAnonymous() && !isPlayingSoundID(mSoundID)) {
+ if (Z2GetSceneMgr()->isSceneExist()) {
+ Z2GetSeqMgr()->bgmAllUnMute(3);
+ }
+ mSoundID.setAnonymous();
+ }
+ mSeqMgr.calc();
+ mStreamMgr.calc();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -228,67 +381,148 @@ asm void Z2SoundMgr::calc() {
#include "asm/Z2AudioLib/Z2SoundMgr/calc__10Z2SoundMgrFv.s"
}
#pragma pop
+#endif
/* 802AA270-802AA33C 2A4BB0 00CC+00 1/1 2/2 0/0 .text setIIR__10Z2SoundMgrFP8JAISoundPCs
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::setIIR(JAISound* param_0, s16 const* param_1) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/setIIR__10Z2SoundMgrFP8JAISoundPCs.s"
+void Z2SoundMgr::setIIR(JAISound* param_0, s16 const* param_1) {
+ if (param_0 != NULL) {
+ JASTrack* track = param_0->getTrack();
+ for (u32 i = 0; i < 4; i++) {
+ JASTrack* child = track->getChild(i);
+ if (child != NULL && child->getStatus() == 1) {
+ child->setIIR(param_1);
+ for (u32 j = 0; j < 4; j++) {
+ JASTrack* child2 = child->getChild(j);
+ if (child2 != NULL && child2->getStatus() == 1) {
+ child2->setIIR(param_1);
+ }
+ }
+ }
+ }
+ }
}
-#pragma pop
-/* ############################################################################################## */
/* 8039B9C0-8039B9D0 028020 0010+00 1/1 0/0 0/0 .rodata cResetFilterTable */
-SECTION_RODATA static u8 const cResetFilterTable[16] = {
- 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+static s16 const cResetFilterTable[8] = {
+ 0x7FFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
};
-COMPILER_STRIP_GATE(0x8039B9C0, &cResetFilterTable);
/* 802AA33C-802AA430 2A4C7C 00F4+00 1/1 0/0 0/0 .text setFilterOff__10Z2SoundMgrFP8JAISound */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::setFilterOff(JAISound* param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/setFilterOff__10Z2SoundMgrFP8JAISound.s"
+void Z2SoundMgr::setFilterOff(JAISound* param_0) {
+ if (param_0 != NULL) {
+ JASTrack* track = param_0->getTrack();
+ for (u32 i = 0; i < 4; i++) {
+ JASTrack* child = track->getChild(i);
+ if (child != NULL && child->getStatus() == 1) {
+ child->setIIR(cResetFilterTable);
+ child->setFIR(cResetFilterTable);
+ for (u32 j = 0; j < 4; j++) {
+ JASTrack* child2 = child->getChild(j);
+ if (child2 != NULL && child2->getStatus() == 1) {
+ child2->setIIR(cResetFilterTable);
+ child2->setFIR(cResetFilterTable);
+ }
+ }
+ }
+ }
+ }
}
-#pragma pop
/* 802AA430-802AA528 2A4D70 00F8+00 0/0 1/1 0/0 .text resetFilterAll__10Z2SoundMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::resetFilterAll() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/resetFilterAll__10Z2SoundMgrFv.s"
+void Z2SoundMgr::resetFilterAll() {
+ int i = 1;
+ if (struct_80451342 != 0) {
+ i = 0;
+ }
+ for (; i < 9; i++) {
+ JAISeCategoryMgr* category = mSeMgr.getCategory(i);
+ int se_count = category->getMaxActiveSe();
+ if (se_count > 0) {
+ for (JSULink<JAISe>* link = category->getSeList()->getFirst();
+ link != NULL && se_count > 0 && !link->getObject()->isFarAway();
+ link = link->getNext(), se_count--)
+ {
+ setFilterOff(link->getObject());
+ }
+ } else {
+ for (JSULink<JAISe>* link = category->getSeList()->getFirst();
+ link != NULL && !link->getObject()->isFarAway();
+ link = link->getNext())
+ {
+ setFilterOff(link->getObject());
+ }
+ }
+ }
}
-#pragma pop
/* 802AA528-802AA67C 2A4E68 0154+00 2/2 0/0 0/0 .text mixOut__10Z2SoundMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::mixOut() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/mixOut__10Z2SoundMgrFv.s"
+void Z2SoundMgr::mixOut() {
+ if (struct_80451340 != 0 && Z2GetSceneMgr()->isInDarkness()) {
+ int i = 1;
+ if (struct_80451342 != 0) {
+ i = 0;
+ }
+ for (; i < 9; i++) {
+ JAISeCategoryMgr* category = mSeMgr.getCategory(i);
+ int se_count = category->getMaxActiveSe();
+ if (se_count > 0) {
+ for (JSULink<JAISe>* link = category->getSeList()->getFirst();
+ link != NULL && se_count > 0 && !link->getObject()->isFarAway();
+ link = link->getNext(), se_count--)
+ {
+ setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[struct_80451341]);
+ }
+ } else {
+ for (JSULink<JAISe>* link = category->getSeList()->getFirst();
+ link != NULL && !link->getObject()->isFarAway();
+ link = link->getNext())
+ {
+ setIIR(link->getObject(), JASCalc::CUTOFF_TO_IIR_TABLE[struct_80451341]);
+ }
+ }
+ }
+ }
+ mSeMgr.mixOut();
+ mSeqMgr.mixOut();
+ mStreamMgr.mixOut();
}
-#pragma pop
/* 802AA67C-802AA6B0 2A4FBC 0034+00 0/0 1/1 0/0 .text framework__10Z2SoundMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::framework() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/framework__10Z2SoundMgrFv.s"
+void Z2SoundMgr::framework() {
+ calc();
+ mixOut();
}
-#pragma pop
/* 802AA6B0-802AA7DC 2A4FF0 012C+00 0/0 1/1 0/0 .text pauseAllGameSound__10Z2SoundMgrFb
*/
+#ifdef NONMATCHING
+// matches with literals
+void Z2SoundMgr::pauseAllGameSound(bool i_pause) {
+ mSeMgr.getCategory(0)->pause(i_pause);
+ mSeMgr.getCategory(1)->pause(i_pause);
+ mSeMgr.getCategory(2)->pause(i_pause);
+ mSeMgr.getCategory(3)->pause(i_pause);
+ mSeMgr.getCategory(4)->pause(i_pause);
+ mSeMgr.getCategory(5)->pause(i_pause);
+ mSeMgr.getCategory(6)->pause(i_pause);
+ mSeMgr.getCategory(7)->pause(i_pause);
+ mSeMgr.getCategory(8)->pause(i_pause);
+ mSeMgr.getCategory(9)->pause(i_pause);
+ mSeqMgr.pause(i_pause);
+ mStreamMgr.pause(i_pause);
+ if (i_pause) {
+ Z2GetSeMgr()->seMoveVolumeAll(0.0f, 10);
+ mSeqMgr.getParams()->moveVolume(0.0f, 10);
+ mStreamMgr.getParams()->moveVolume(0.0f, 10);
+ }
+ else {
+ Z2GetSeMgr()->seMoveVolumeAll(1.0f, 10);
+ mSeqMgr.getParams()->moveVolume(1.0f, 10);
+ mStreamMgr.getParams()->moveVolume(1.0f, 10);
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -297,36 +531,34 @@ asm void Z2SoundMgr::pauseAllGameSound(bool param_0) {
#include "asm/Z2AudioLib/Z2SoundMgr/pauseAllGameSound__10Z2SoundMgrFb.s"
}
#pragma pop
+#endif
/* 802AA7DC-802AA84C 2A511C 0070+00 0/0 1/1 0/0 .text stopSoundID__10Z2SoundMgrF10JAISoundID */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::stopSoundID(JAISoundID param_0) {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/stopSoundID__10Z2SoundMgrF10JAISoundID.s"
+void Z2SoundMgr::stopSoundID(JAISoundID i_soundID) {
+ mSeMgr.stopSoundID(i_soundID);
+ mSeqMgr.stopSoundID(i_soundID);
+ mStreamMgr.stopSoundID(i_soundID);
}
-#pragma pop
/* 802AA84C-802AA8C8 2A518C 007C+00 0/0 1/1 0/0 .text stopSync__10Z2SoundMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::stopSync() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/stopSync__10Z2SoundMgrFv.s"
+void Z2SoundMgr::stopSync() {
+ stop();
+ while (mSeMgr.getNumActiveSe() > 0 || mSeqMgr.getNumActiveSeqs() > 0) {
+ calc();
+ if (mSeMgr.getNumActiveSe() == 0 && mSeqMgr.getNumActiveSeqs() == 0) {
+ break;
+ }
+ mixOut();
+ JASDriver::waitSubFrame();
+ }
}
-#pragma pop
/* 802AA8C8-802AA908 2A5208 0040+00 1/1 0/0 0/0 .text stop__10Z2SoundMgrFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void Z2SoundMgr::stop() {
- nofralloc
-#include "asm/Z2AudioLib/Z2SoundMgr/stop__10Z2SoundMgrFv.s"
+void Z2SoundMgr::stop() {
+ mSeMgr.stop();
+ mSeqMgr.stop();
+ mStreamMgr.stop();
}
-#pragma pop
/* ############################################################################################## */
/* 80455850-80455858 003E50 0004+04 1/1 0/0 0/0 .sdata2 @4313 */
@@ -337,6 +569,14 @@ SECTION_SDATA2 static f32 lit_4313[1 + 1 /* padding */] = {
};
/* 802AA908-802AA9E8 2A5248 00E0+00 0/0 1/1 0/0 .text initParams__10Z2SoundMgrFv */
+#ifdef NONMATCHING
+// matches with literals
+void Z2SoundMgr::initParams() {
+ mSeMgr.initParams();
+ mSeqMgr.getParams()->init();
+ mStreamMgr.getParams()->init();
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -345,9 +585,23 @@ asm void Z2SoundMgr::initParams() {
#include "asm/Z2AudioLib/Z2SoundMgr/initParams__10Z2SoundMgrFv.s"
}
#pragma pop
+#endif
/* 802AA9E8-802AAAC4 2A5328 00DC+00 0/0 1/1 0/0 .text
* multiVolumeSoundID__10Z2SoundMgrF10JAISoundIDf */
+#ifdef NONMATCHING
+void Z2SoundMgr::multiVolumeSoundID(JAISoundID i_soundID, f32 i_multi) {
+ if (!i_soundID.isAnonymous() && Z2GetSoundInfo()->getSoundType(i_soundID) == 0) {
+ JSUList<JAISe>* list =
+ mSeMgr.getCategory(Z2GetSoundInfo()->getCategory(i_soundID))->getSeList();
+ for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) {
+ if (link->getObject()->getID() == i_soundID) {
+ link->getObject()->getAuxiliary().mParams.mVolume *= i_multi;
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -356,16 +610,35 @@ asm void Z2SoundMgr::multiVolumeSoundID(JAISoundID param_0, f32 param_1) {
#include "asm/Z2AudioLib/Z2SoundMgr/multiVolumeSoundID__10Z2SoundMgrF10JAISoundIDf.s"
}
#pragma pop
+#endif
/* 802AAAC4-802AAB94 2A5404 00D0+00 1/1 0/0 0/0 .text isPlayingSoundID__10Z2SoundMgrF10JAISoundID
*/
+#ifdef NONMATCHING
+bool Z2SoundMgr::isPlayingSoundID(JAISoundID i_soundID) {
+ if (i_soundID.isAnonymous()) {
+ return 0;
+ }
+ if (Z2GetSoundInfo()->getSoundType(i_soundID) == 0) {
+ JSUList<JAISe>* list =
+ mSeMgr.getCategory(Z2GetSoundInfo()->getCategory(i_soundID))->getSeList();
+ for (JSULink<JAISe>* link = list->getFirst(); link != NULL; link = link->getNext()) {
+ if (link->getObject()->getID() == i_soundID) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm void Z2SoundMgr::isPlayingSoundID(JAISoundID param_0) {
+asm bool Z2SoundMgr::isPlayingSoundID(JAISoundID param_0) {
nofralloc
#include "asm/Z2AudioLib/Z2SoundMgr/isPlayingSoundID__10Z2SoundMgrF10JAISoundID.s"
}
#pragma pop
+#endif
/* 8039B9D0-8039B9D0 028030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/libs/Z2AudioLib/Z2SoundStarter.cpp b/libs/Z2AudioLib/Z2SoundStarter.cpp
index 0157d6064b..b05da8234a 100644
--- a/libs/Z2AudioLib/Z2SoundStarter.cpp
+++ b/libs/Z2AudioLib/Z2SoundStarter.cpp
@@ -13,66 +13,66 @@ Z2SoundStarter::Z2SoundStarter(bool param_0) : JAISoundStarter(param_0), JASGlob
/* 802AABF4-802AAC3C 2A5534 0048+00 1/0 5/0 0/0 .text
* startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
-int Z2SoundStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
- JGeometry::TVec3<f32> const* param_2) {
- return Z2SoundStarter::startSound(param_0, param_1, param_2, 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f,
- 0);
+bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* i_handlePtr,
+ JGeometry::TVec3<f32> const* i_pos) {
+ return Z2SoundStarter::startSound(i_soundID, i_handlePtr, i_pos,
+ 0, 0.0f, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
/* 802AAC3C-802AAEDC 2A557C 02A0+00 2/1 2/2 0/0 .text
* startSound__14Z2SoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f>UlfffffUl */
-int Z2SoundStarter::startSound(JAISoundID param_1, JAISoundHandle* handlePtr,
- JGeometry::TVec3<f32> const* param_3, u32 param_4, f32 param_5,
- f32 param_6, f32 param_7, f32 param_8, f32 param_9, u32 param_10) {
+bool Z2SoundStarter::startSound(JAISoundID i_soundID, JAISoundHandle* handlePtr,
+ JGeometry::TVec3<f32> const* i_pos, u32 param_4, f32 i_fxMix,
+ f32 i_pitch, f32 i_volume, f32 i_pan, f32 i_dolby, u32 i_count) {
JUT_ASSERT(45, handlePtr);
if (param_4 == 6) {
- switch (param_1) {
+ switch (i_soundID) {
case Z2SE_CM_BODYFALL_S:
- param_1 = Z2SE_CM_BODYFALL_ASASE_S;
+ i_soundID = Z2SE_CM_BODYFALL_ASASE_S;
break;
case Z2SE_CM_BODYFALL_M:
- param_1 = Z2SE_CM_BODYFALL_ASASE_M;
+ i_soundID = Z2SE_CM_BODYFALL_ASASE_M;
break;
case Z2SE_CM_BODYFALL_L:
- param_1 = Z2SE_CM_BODYFALL_ASASE_L;
+ i_soundID = Z2SE_CM_BODYFALL_ASASE_L;
break;
}
}
- if (param_1.mId.mBytes.b1 != 0 && param_1.mId.mBytes.b1 != 9) {
+ if (i_soundID.mId.mBytes.b1 != 0 && i_soundID.mId.mBytes.b1 != 9) {
if (Z2GetSceneMgr()->isInDarkness()) {
- param_5 = 1.0f;
+ i_fxMix = 1.0f;
} else {
f32 ratio = Z2GetStatusMgr()->getCameraInWaterDepthRatio();
f32 uStack_8c = ratio > 0.0f;
if (uStack_8c) {
- param_5 = uStack_8c;
+ i_fxMix = uStack_8c;
} else {
- param_5 += 0.5f * Z2GetEnvSeMgr()->getFogDensity();
- if (param_5 > 1.0f) {
- param_5 = 1.0f;
+ i_fxMix += 0.5f * Z2GetEnvSeMgr()->getFogDensity();
+ if (i_fxMix > 1.0f) {
+ i_fxMix = 1.0f;
}
}
}
}
- int startSoundRes = Z2GetAudioMgr()->startSound(param_1, handlePtr, param_3);
+ bool startSoundRes = Z2GetAudioMgr()->startSound(i_soundID, handlePtr, i_pos);
if (*handlePtr) {
if (param_4 != 0) {
setPortData(handlePtr, 6, param_4, -1);
}
- if (param_5 > 0.0f) {
- (*handlePtr)->getAuxiliary().moveFxMix(param_5, param_10);
+ if (i_fxMix > 0.0f) {
+ (*handlePtr)->getAuxiliary().moveFxMix(i_fxMix, i_count);
}
- if (param_6 != 1.0f) {
- (*handlePtr)->getAuxiliary().movePitch(param_6, param_10);
+ if (i_pitch != 1.0f) {
+ (*handlePtr)->getAuxiliary().movePitch(i_pitch, i_count);
}
- if (param_7 != 1.0f) {
- (*handlePtr)->getAuxiliary().moveVolume(param_7, param_10);
+ if (i_volume != 1.0f) {
+ (*handlePtr)->getAuxiliary().moveVolume(i_volume, i_count);
}
- if (param_8 != -1.0f) {
- (*handlePtr)->getAuxiliary().movePan(param_8, param_10);
+ if (i_pan != -1.0f) {
+ (*handlePtr)->getAuxiliary().movePan(i_pan, i_count);
}
- if (param_9 != -1.0f) {
- (*handlePtr)->getAuxiliary().moveDolby(param_9, param_10);
+ if (i_dolby != -1.0f) {
+ (*handlePtr)->getAuxiliary().moveDolby(i_dolby, i_count);
}
}
return startSoundRes;
diff --git a/libs/Z2AudioLib/Z2SpeechMgr2.cpp b/libs/Z2AudioLib/Z2SpeechMgr2.cpp
index 2064328432..36e9459405 100644
--- a/libs/Z2AudioLib/Z2SpeechMgr2.cpp
+++ b/libs/Z2AudioLib/Z2SpeechMgr2.cpp
@@ -1984,7 +1984,7 @@ SECTION_SDATA2 static f32 lit_4572 = 0.5f;
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
-asm int Z2SpeechStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
+asm bool Z2SpeechStarter::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2, u32 param_3, f32 param_4,
f32 param_5, f32 param_6, f32 param_7, f32 param_8,
u32 param_9) {