mirror of
https://github.com/open-goal/jak-project
synced 2026-07-11 23:30:16 -04:00
Fix sound bank allocation (#2107)
And correctly initialize the volume group for sfx
This commit is contained in:
+25
-23
@@ -26,18 +26,14 @@ void sbank_init_globals() {
|
||||
}
|
||||
|
||||
void InitBanks() {
|
||||
for (auto& gBank : gBanks) {
|
||||
gBank->bank_handle = 0;
|
||||
gBank->sound_count = 0;
|
||||
for (auto bank : gBanks) {
|
||||
bank->bank_handle = 0;
|
||||
bank->sound_count = 0;
|
||||
|
||||
gBank->in_use = false;
|
||||
gBank->unk4 = 0;
|
||||
bank->in_use = false;
|
||||
bank->unk4 = 0;
|
||||
|
||||
// paper over bank allocation differences
|
||||
if (g_game_version == GameVersion::Jak1)
|
||||
gBank->in_use = 1;
|
||||
|
||||
strcpy(gBank->name, "<unused>");
|
||||
strcpy(bank->name, "<unused>");
|
||||
}
|
||||
|
||||
if (g_game_version == GameVersion::Jak2) {
|
||||
@@ -46,24 +42,24 @@ void InitBanks() {
|
||||
gBanks[0]->spu_size = 0xAFCC0;
|
||||
|
||||
strncpy(gBanks[1]->name, "gun", 16);
|
||||
gBanks[0]->spu_loc = 0x131740;
|
||||
gBanks[0]->spu_size = 0;
|
||||
gBanks[1]->spu_loc = 0x131740;
|
||||
gBanks[1]->spu_size = 0;
|
||||
|
||||
strncpy(gBanks[2]->name, "board", 16);
|
||||
gBanks[0]->spu_loc = 0x131740;
|
||||
gBanks[0]->spu_size = 0;
|
||||
gBanks[2]->spu_loc = 0x131740;
|
||||
gBanks[2]->spu_size = 0;
|
||||
|
||||
strncpy(gBanks[3]->name, "level0", 16);
|
||||
gBanks[0]->spu_loc = 0x131740;
|
||||
gBanks[0]->spu_size = 0x42800;
|
||||
gBanks[3]->spu_loc = 0x131740;
|
||||
gBanks[3]->spu_size = 0x42800;
|
||||
|
||||
strncpy(gBanks[4]->name, "level1", 16);
|
||||
gBanks[0]->spu_loc = 0x173f40;
|
||||
gBanks[0]->spu_size = 0x42800;
|
||||
gBanks[4]->spu_loc = 0x173f40;
|
||||
gBanks[4]->spu_size = 0x42800;
|
||||
|
||||
strncpy(gBanks[5]->name, "level2", 16);
|
||||
gBanks[0]->spu_loc = 0x1B6740;
|
||||
gBanks[0]->spu_size = 0x42800;
|
||||
gBanks[5]->spu_loc = 0x1B6740;
|
||||
gBanks[5]->spu_size = 0x42800;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,11 +128,17 @@ SoundBank* LookupBank(const char* name) {
|
||||
if (idx < 0) {
|
||||
return nullptr; // not found.
|
||||
}
|
||||
auto& bank = gBanks[idx];
|
||||
auto bank = gBanks[idx];
|
||||
// they had some weird stuff here that took advantage of the fact that this region was
|
||||
// 16-byte aligned, so it probably wasn't a memcmp, but this is easier.
|
||||
if ((memcmp(bank->name, name, 16) == 0) && bank->in_use) {
|
||||
return bank;
|
||||
if (g_game_version == GameVersion::Jak1) {
|
||||
if ((memcmp(bank->name, name, 16) == 0)) {
|
||||
return bank;
|
||||
}
|
||||
} else {
|
||||
if ((memcmp(bank->name, name, 16) == 0) && bank->in_use) {
|
||||
return bank;
|
||||
}
|
||||
}
|
||||
idx--;
|
||||
}
|
||||
|
||||
@@ -799,7 +799,7 @@ void* RPC_Loader2(unsigned int /*fno*/, void* data, int size) {
|
||||
if (!bank->unk4) {
|
||||
bank->in_use = false;
|
||||
}
|
||||
bank->in_use = 0;
|
||||
bank->in_use = false;
|
||||
snd_UnloadBank(handle);
|
||||
snd_ResolveBankXREFS();
|
||||
} break;
|
||||
|
||||
@@ -125,8 +125,8 @@ void blocksound_handler::set_vol_pan(s32 vol, s32 pan) {
|
||||
}
|
||||
|
||||
auto volume = m_vm.make_volume(127, 0, m_cur_volume, m_cur_pan, voice->g_vol, voice->g_pan);
|
||||
auto left = m_vm.adjust_vol_to_group(volume.left, m_sfx.d.VolGroup);
|
||||
auto right = m_vm.adjust_vol_to_group(volume.right, m_sfx.d.VolGroup);
|
||||
auto left = m_vm.adjust_vol_to_group(volume.left, m_group);
|
||||
auto right = m_vm.adjust_vol_to_group(volume.right, m_group);
|
||||
|
||||
voice->set_volume(left >> 1, right >> 1);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ class blocksound_handler : public sound_handler {
|
||||
s32 sfx_vol,
|
||||
s32 sfx_pan,
|
||||
SndPlayParams& params)
|
||||
: m_sfx(sfx), m_vm(vm), m_bank(bank) {
|
||||
: m_group(sfx.d.VolGroup), m_sfx(sfx), m_vm(vm), m_bank(bank) {
|
||||
s32 vol, pan, pitch_mod, pitch_bend;
|
||||
if (sfx_vol == -1) {
|
||||
sfx_vol = sfx.d.Vol;
|
||||
|
||||
Reference in New Issue
Block a user