JAIZelSound OK

This commit is contained in:
LagoLunatic
2024-07-06 01:47:05 -04:00
parent d38f8edad2
commit 44e2c2695a
7 changed files with 184 additions and 90 deletions
+1 -1
View File
@@ -797,7 +797,7 @@ config.libs = [
Object(Matching, "JAZelAudio/JAIZelParam.cpp"),
Object(NonMatching, "JAZelAudio/JAIZelCharVoiceTable.cpp"),
Object(Matching, "JAZelAudio/JAIZelScene.cpp"),
Object(NonMatching, "JAZelAudio/JAIZelSound.cpp"),
Object(Matching, "JAZelAudio/JAIZelSound.cpp"),
],
),
DolphinLib(
+5 -3
View File
@@ -195,6 +195,8 @@ public:
static const char* spot_dir_name[];
static isle_area_s mIsleArea[];
static const int MAX_CONCURRENT_SE_NUM = 24;
/* 0x0020 */ u8 field_0x0020;
/* 0x0021 */ u8 field_0x0021;
/* 0x0022 */ u8 field_0x0022[0x0024 - 0x0022];
@@ -278,9 +280,9 @@ public:
/* 0x00CE */ u8 field_0x00ce;
/* 0x00CF */ u8 field_0x00CF[0x00D0 - 0x00CF];
/* 0x00D0 */ int field_0x00d0;
/* 0x00D4 */ JAISound* field_0x00d4[24];
/* 0x0134 */ u32 field_0x0134[24];
/* 0x0194 */ u32 field_0x0194[24];
/* 0x00D4 */ JAISound* mpSeSound[MAX_CONCURRENT_SE_NUM];
/* 0x0134 */ u32 mpSeNum[MAX_CONCURRENT_SE_NUM];
/* 0x0194 */ u32 field_0x0194[MAX_CONCURRENT_SE_NUM];
/* 0x01F4 */ int field_0x01f4;
/* 0x01F8 */ u8 field_0x01f8;
/* 0x01F9 */ u8 field_0x01f9;
+4 -4
View File
@@ -8,10 +8,10 @@ public:
JAIZelSound();
~JAIZelSound() {}
f32 setDistanceVolumeCommon(f32, u8);
void setSeDistanceVolume(u8);
void setSeDistancePan(u8);
void setSeDistanceDolby(u8);
virtual f32 setDistanceVolumeCommon(f32, u8);
virtual void setSeDistanceVolume(u8);
virtual void setSeDistancePan(u8);
virtual void setSeDistanceDolby(u8);
};
#endif /* JAIZELSOUND_H */
@@ -4,6 +4,13 @@
#include "dolphin/types.h"
namespace JAIGlobalParameter {
inline void getPointerDistanceMax() {}
inline void getPointerMaxVolumeDistance() {}
inline void getPointerMinDistanceVolume() {}
inline void getPointerSeDolbyBehindDistanceMax() {}
inline void getPointerSeDolbyCenterValue() {}
inline void getPointerSeDolbyFrontDistanceMax() {}
void setParamInitDataPointer(void*);
void setParamInterfaceHeapSize(u32);
void setParamSoundSceneMax(u32);
+11 -11
View File
@@ -12,6 +12,14 @@ namespace JAInter {
class JAISound {
public:
struct PositionInfo_t {
/* 0x00 */ f32 field_0x0;
/* 0x04 */ u8 field_0x4[0x8 - 0x4];
/* 0x08 */ f32 field_0x8;
/* 0x0C */ u8 field_0xc[0x18 - 0xc];
/* 0x10 */ f32 field_0x18;
};
JAISound();
virtual f32 setPositionDopplarCommon(u32);
virtual f32 setDistanceVolumeCommon(f32, u8);
@@ -83,7 +91,7 @@ public:
void getNextSound() {}
void getPlayGameFrameCounter() {}
void getPlayer() {}
void getPositionInfo() {}
PositionInfo_t* getPositionInfo() { return mPositionInfo; }
void getPrevSound() {}
void getPriority() {}
void getStatus() {}
@@ -112,14 +120,6 @@ public:
void setVolumeU7(u8, u32, u8) {}
void setWait(u8) {}
struct PositionInfo_t {
f32 field_0x0;
u8 field_0x4[0x8 - 0x4];
f32 field_0x8;
u8 field_0xc[0x18 - 0xc];
f32 field_0x18;
};
/* 0x04 */ u8 field_0x4;
/* 0x05 */ u8 field_0x5;
/* 0x06 */ u8 field_0x6;
@@ -130,11 +130,11 @@ public:
/* 0x0c */ u32 mSoundID;
/* 0x10 */ int field_0x10;
/* 0x14 */ u32 field_0x14;
/* 0x18 */ int field_0x18;
/* 0x18 */ u32 field_0x18;
/* 0x1c */ int field_0x1c;
/* 0x20 */ PositionInfo_t* mPositionInfo;
/* 0x24 */ void* field_0x24;
/* 0x28 */ int field_0x28;
/* 0x28 */ u32 field_0x28;
/* 0x2C */ int field_0x2c;
/* 0x30 */ JAISound* field_0x30;
/* 0x34 */ JAISound* field_0x34;
+63 -63
View File
@@ -185,11 +185,11 @@ void JAIZelBasic::gframeProcess() {
/* 802A30A4-802A31C0 .text resetProcess__11JAIZelBasicFv */
void JAIZelBasic::resetProcess() {
OSReport("[JAIZelBasic::resetProcess]\n");
for (int i = 0; i < 24; i++) {
if (field_0x00d4[i]) {
field_0x00d4[i]->stop(1);
field_0x00d4[i] = NULL;
field_0x0134[i] = 0;
for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) {
if (mpSeSound[i]) {
mpSeSound[i]->stop(1);
mpSeSound[i] = NULL;
mpSeNum[i] = 0;
field_0x0194[i] = 0;
}
}
@@ -648,9 +648,9 @@ void JAIZelBasic::initSe() {
mAudioCamera->field_0x4 = NULL;
mAudioCamera->field_0x8 = NULL;
field_0x01f4 = 0;
for (int i = 0; i < 24; i++) {
field_0x00d4[i] = NULL;
field_0x0134[i] = 0;
for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) {
mpSeSound[i] = NULL;
mpSeNum[i] = 0;
field_0x0194[i] = 0;
}
for (int i = 0; i < 4; i++) {
@@ -702,11 +702,11 @@ void JAIZelBasic::seStop(u32 i_seNum, s32 param_2) {
if (i_seNum == JA_SE_LK_RUN_SLIP) {
param_2 = 8;
}
for (int i = 0; i < 24; i++) {
if (field_0x0134[i] == i_seNum && field_0x00d4[i]) {
field_0x00d4[i]->stop(param_2);
field_0x00d4[i] = NULL;
field_0x0134[i] = 0;
for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) {
if (mpSeNum[i] == i_seNum && mpSeSound[i]) {
mpSeSound[i]->stop(param_2);
mpSeSound[i] = NULL;
mpSeNum[i] = 0;
field_0x0194[i] = 0;
}
}
@@ -714,8 +714,8 @@ void JAIZelBasic::seStop(u32 i_seNum, s32 param_2) {
/* 802A85F4-802A8634 .text checkSePlaying__11JAIZelBasicFUl */
BOOL JAIZelBasic::checkSePlaying(u32 param_1) {
for (int i = 0; i < 24; i++) {
if (field_0x0134[i] == param_1 && field_0x00d4[i]) {
for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) {
if (mpSeNum[i] == param_1 && mpSeSound[i]) {
return true;
}
}
@@ -1139,9 +1139,9 @@ BOOL JAIZelBasic::getMapInfoGround(u32) {
}
/* 802AA390-802AACE8 .text setScene__11JAIZelBasicFllll */
void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
OSReport("[JAIZelBasic::setScene] num = %d, start = %d, layer = %d (%d)\n", param_1, roomNo, layerNo, param_3);
if (param_1 >= 0x79) {
void JAIZelBasic::setScene(s32 sceneNum, s32 roomNo, s32 param_3, s32 layerNo) {
OSReport("[JAIZelBasic::setScene] num = %d, start = %d, layer = %d (%d)\n", sceneNum, roomNo, layerNo, param_3);
if (sceneNum >= 0x79) {
OSReport("[JAIZelBasic::setScene] too large scene number\n");
return;
}
@@ -1152,7 +1152,7 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
field_0x00bd = field_0x00cd = bgmNum = 0;
u32 var1;
u32 var2;
if (param_1 == 0x12) {
if (sceneNum == 0x12) {
if (roomNo > 0) {
mIslandRoomNo = roomNo;
} else {
@@ -1206,11 +1206,11 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
var2 = m_isle_info[mIslandRoomNo].field_0x3;
} else {
mIslandRoomNo = 0;
if (param_1 == 16 && checkEventBit(0x280) == 0) {
if (sceneNum == 16 && checkEventBit(0x280) == 0) {
bgmNum = JA_BGM_FIND_TETRA;
} else if (param_1 == 19 && checkEventBit(0x801) == 0) {
} else if (sceneNum == 19 && checkEventBit(0x801) == 0) {
bgmNum = 0;
} else if (param_1 == 2 && field_0x0021 != 0) {
} else if (sceneNum == 2 && field_0x0021 != 0) {
if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_DRC)) {
field_0x00cd = 1;
}
@@ -1219,10 +1219,10 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
bgmNum = expandSceneBgmNum(bgmNum);
field_0x0204 = 1;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 7 && field_0x0021 != 0) {
} else if (sceneNum == 7 && field_0x0021 != 0) {
if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_FW)) {
field_0x00cd = 1;
}
@@ -1230,10 +1230,10 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
bgmNum = m_scene_info[3].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 37 && field_0x0021 != 0) {
} else if (sceneNum == 37 && field_0x0021 != 0) {
if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_TOTG)) {
field_0x00cd = 1;
}
@@ -1241,10 +1241,10 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
bgmNum = m_scene_info[10].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 24 && field_0x0021 != 0) {
} else if (sceneNum == 24 && field_0x0021 != 0) {
if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_WT)) {
field_0x00cd = 1;
}
@@ -1253,10 +1253,10 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
} else if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_WT)) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 45 && field_0x0021 != 0) {
} else if (sceneNum == 45 && field_0x0021 != 0) {
if (dComIfGs_isStageBossDemoSaveBit(dSv_save_c::STAGE_ET)) {
field_0x00cd = 1;
}
@@ -1265,93 +1265,93 @@ void JAIZelBasic::setScene(s32 param_1, s32 roomNo, s32 param_3, s32 layerNo) {
} else if (dComIfGs_isStageBossEnemySaveBit(dSv_save_c::STAGE_ET)) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 54) {
} else if (sceneNum == 54) {
if (checkEventBit(0x2d04) == 0) {
bgmNum = JA_BGM_HYRULE_OFF;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 53) {
} else if (sceneNum == 53) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 54) {
} else if (sceneNum == 54) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 89) {
} else if (sceneNum == 89) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else if (checkEventBit(0x2d04) == 0) {
bgmNum = JA_BGM_HYRULE_OFF;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 39) {
} else if (sceneNum == 39) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 41) {
} else if (sceneNum == 41) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 22) {
} else if (sceneNum == 22) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 44) {
} else if (sceneNum == 44) {
if (layerNo == 8 || layerNo == 9 || layerNo == 10 || layerNo == 11) {
bgmNum = 0;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 11) {
} else if (sceneNum == 11) {
if (layerNo == 9 && field_0x0043 == 0) {
bgmNum = 0;
} else if (field_0x0043 && checkEventBit(0x2a20) == 0) {
bgmNum = JA_BGM_BAACHAN;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else if (param_1 == 32) {
} else if (sceneNum == 32) {
if (checkEventBit(0x2110) == 0 && checkEventBit(dSv_evtBit_c::ENDLESS_NIGHT) == 1) {
bgmNum = JA_BGM_PIRATE_DEMO5;
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
} else {
bgmNum = m_scene_info[param_1].bgmNum;
bgmNum = m_scene_info[sceneNum].bgmNum;
bgmNum = expandSceneBgmNum(bgmNum);
}
var1 = m_scene_info[param_1].field_0x2;
var2 = m_scene_info[param_1].field_0x3;
var1 = m_scene_info[sceneNum].field_0x2;
var2 = m_scene_info[sceneNum].field_0x3;
}
sceneChange(bgmNum, var1, var2, param_3);
field_0x022d = 0;
field_0x0220 = param_1;
field_0x0220 = sceneNum;
field_0x022c = 1;
field_0x0239 = layerNo;
}
@@ -1393,13 +1393,13 @@ BOOL JAIZelBasic::checkLinkOnBoardSea() {
/* 802AAD94-802AAE80 .text setSceneName__11JAIZelBasicFPcll */
void JAIZelBasic::setSceneName(char* param_1, s32 roomNo, s32 param_3) {
OSReport("[JAIZelBasic::setSceneName] spot = %s, room = %d\n", param_1, roomNo);
int id = spotNameToId(param_1);
if (id == 0x75) {
for (int i = 0; i < 24; i++) {
if (field_0x00d4[i]) {
field_0x00d4[i]->stop(1);
field_0x00d4[i] = NULL;
field_0x0134[i] = 0;
s32 sceneNum = spotNameToId(param_1);
if (sceneNum == 0x75) {
for (int i = 0; i < MAX_CONCURRENT_SE_NUM; i++) {
if (mpSeSound[i]) {
mpSeSound[i]->stop(1);
mpSeSound[i] = NULL;
mpSeNum[i] = 0;
field_0x0194[i] = 0;
}
}
@@ -1411,7 +1411,7 @@ void JAIZelBasic::setSceneName(char* param_1, s32 roomNo, s32 param_3) {
} else {
field_0x0066 = 0;
}
setScene(id, roomNo, 0, param_3);
setScene(sceneNum, roomNo, 0, param_3);
}
/* 802AAE80-802AAF04 .text spotNameToId__11JAIZelBasicFPc */
+93 -8
View File
@@ -4,26 +4,111 @@
//
#include "JAZelAudio/JAIZelSound.h"
#include "JSystem/JAudio/JAIGlobalParameter.h"
/* 802AEF64-802AEFA0 .text __ct__11JAIZelSoundFv */
JAIZelSound::JAIZelSound() {}
/* 802AEFA0-802AF19C .text setDistanceVolumeCommon__11JAIZelSoundFfUc */
f32 JAIZelSound::setDistanceVolumeCommon(f32, u8) {
/* Nonmatching */
f32 JAIZelSound::setDistanceVolumeCommon(f32 f30, u8 r31) {
f32 f31;
if (field_0x8 != 4) {
f31 = getPositionInfo()[field_0x8].field_0x18;
} else {
f31 = getPositionInfo()[0].field_0x18;
for (u8 i = 1; i < JAIGlobalParameter::getParamAudioCameraMax(); i++) {
if (getPositionInfo()[i].field_0x18 < f31) {
f31 = getPositionInfo()[i].field_0x18;
}
}
}
if (f31 < JAIGlobalParameter::getParamMaxVolumeDistance()) {
return 1.0f;
}
f31 -= JAIGlobalParameter::getParamMaxVolumeDistance();
f30 -= JAIGlobalParameter::getParamMaxVolumeDistance();
if (r31 > 7) {
f30 *= (1 << (r31 - 4));
} else if (r31 > 3) {
f30 /= (1 << ((r31 & 3) + 1));
} else if (r31 != 0) {
f30 *= (1 << (r31 & 3));
}
if (f31 < f30) {
if (r31 > 3 && r31 <= 7) {
return 1.0f - (f31 / f30);
}
return (
JAIGlobalParameter::getParamMinDistanceVolume() +
(1.0f - (f31 / f30)) *
(1.0f - JAIGlobalParameter::getParamMinDistanceVolume())
);
}
if (r31 > 3 && r31 <= 7) {
return 0.0f;
}
return JAIGlobalParameter::getParamMinDistanceVolume();
}
/* 802AF19C-802AF2A0 .text setSeDistanceVolume__11JAIZelSoundFUc */
void JAIZelSound::setSeDistanceVolume(u8) {
/* Nonmatching */
void JAIZelSound::setSeDistanceVolume(u8 r30) {
if ((getSwBit() & 0x00400000) && field_0x18 > 1) {
return;
}
f32 f31;
if ((getSwBit() & 0x00000002) == 0) {
u8 r31;
if ((getSwBit() & 0x00300000)) {
r31 = ((getSwBit() >> 20) & 3) + 7;
} else {
r31 = ((getSwBit() >> 16) & 7);
}
f31 = setDistanceVolumeCommon(JAIGlobalParameter::getParamDistanceMax(), r31);
if ((getSwBit() & 0x01000000) && f31 <= 0.3333f) {
f31 = 0.3333f;
}
} else {
f31 = 1.0f;
}
setSeInterVolume(4, f31, r30, 0);
}
/* 802AF2A0-802AF314 .text setSeDistancePan__11JAIZelSoundFUc */
void JAIZelSound::setSeDistancePan(u8) {
/* Nonmatching */
void JAIZelSound::setSeDistancePan(u8 r31) {
if ((getSwBit() & 0x00800000) && field_0x18 > 1) {
return;
}
setSeInterPan(4, setDistancePanCommon(), r31, 0);
}
/* 802AF314-802AF458 .text setSeDistanceDolby__11JAIZelSoundFUc */
void JAIZelSound::setSeDistanceDolby(u8) {
/* Nonmatching */
void JAIZelSound::setSeDistanceDolby(u8 r30) {
if ((getSwBit() & 0x00800000) && field_0x18 > 1) {
return;
}
PositionInfo_t* posInf = &getPositionInfo()[0];
f32 f0;
if (field_0x28 == 0 || posInf->field_0x8 < JAIGlobalParameter::getParamSeDolbyFrontDistanceMax()) {
f0 = 0.0f;
} else if (posInf->field_0x8 < 0.0f) {
f0 = (
JAIGlobalParameter::getParamSeDolbyCenterValue() *
(JAIGlobalParameter::getParamSeDolbyFrontDistanceMax() - posInf->field_0x8)
) / JAIGlobalParameter::getParamSeDolbyFrontDistanceMax();
} else if (posInf->field_0x8 < JAIGlobalParameter::getParamSeDolbyBehindDistanceMax()) {
f0 = JAIGlobalParameter::getParamSeDolbyCenterValue() + (
(127.0f - JAIGlobalParameter::getParamSeDolbyCenterValue()) *
(posInf->field_0x8 / JAIGlobalParameter::getParamSeDolbyBehindDistanceMax())
);
} else {
f0 = 127.0f;
}
u8 r0 = f0;
setSeInterDolby(4, r0 / 127.0f, r30, 0);
}