diff options
| author | Caroline Madsen <69010899+randomsalience@users.noreply.github.com> | 2024-01-30 19:08:37 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-30 16:08:37 -0800 |
| commit | 255cc868e43f3754b29fa089a2a02e617ecb09bb (patch) | |
| tree | 69d3e6252f436c8af94d96f6202a9041d0e4424d /libs | |
| parent | 1c891adeb8a58a62fb3e6a6ff5bb3ec8da00f883 (diff) | |
work on Z2SoundMgr and Z2SeMgr (#2055)
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/JSystem/JAudio2/JAISeMgr.cpp | 6 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAISeqMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAIStreamMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSectionHeap.cpp | 12 | ||||
| -rw-r--r-- | libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp | 40 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2AudioMgr.cpp | 2 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2Creature.cpp | 2 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2LinkMgr.cpp | 4 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2Param.cpp | 9 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SeMgr.cpp | 931 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SoundInfo.cpp | 2 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SoundMgr.cpp | 449 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SoundStarter.cpp | 56 | ||||
| -rw-r--r-- | libs/Z2AudioLib/Z2SpeechMgr2.cpp | 2 |
14 files changed, 1240 insertions, 279 deletions
diff --git a/libs/JSystem/JAudio2/JAISeMgr.cpp b/libs/JSystem/JAudio2/JAISeMgr.cpp index 9f2631a512..1fc8710371 100644 --- a/libs/JSystem/JAudio2/JAISeMgr.cpp +++ b/libs/JSystem/JAudio2/JAISeMgr.cpp @@ -464,7 +464,7 @@ void JAISeMgr::mixOut() { /* 802A0768-802A08D0 29B0A8 0168+00 0/0 1/1 0/0 .text * startSound__8JAISeMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */ -int JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, +bool JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, JGeometry::TVec3<f32> const* param_2) { if (param_1 && param_1->isSoundAttached()) { param_1->getSound()->stop(); @@ -483,7 +483,7 @@ int JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, JAISe* pJAISe = newSe_(categoryIndex, uVar4); if (pJAISe == NULL) { JASReport("cannot new Se %08x.", param_0.mId.mFullId); - return 0; + return false; } JAIAudience* pAudience = getAudience(categoryIndex); pJAISe->JAISeMgr_startID_(param_0, param_2, pAudience); @@ -493,7 +493,7 @@ int JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, if (param_1 != NULL) { pJAISe->attachHandle(param_1); } - return 1; + return true; } /* 802A08D0-802A08FC 29B210 002C+00 0/0 2/2 0/0 .text getNumActiveSe__8JAISeMgrCFv */ diff --git a/libs/JSystem/JAudio2/JAISeqMgr.cpp b/libs/JSystem/JAudio2/JAISeqMgr.cpp index d76ba7b0c7..36a55fb907 100644 --- a/libs/JSystem/JAudio2/JAISeqMgr.cpp +++ b/libs/JSystem/JAudio2/JAISeqMgr.cpp @@ -185,7 +185,7 @@ extern "C" asm void func_802A1AF4(void* _this) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int JAISeqMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, +asm bool JAISeqMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, JGeometry::TVec3<f32> const* param_2) { nofralloc #include "asm/JSystem/JAudio2/JAISeqMgr/func_802A1B48.s" diff --git a/libs/JSystem/JAudio2/JAIStreamMgr.cpp b/libs/JSystem/JAudio2/JAIStreamMgr.cpp index fa02145a0d..a8b2f6f771 100644 --- a/libs/JSystem/JAudio2/JAIStreamMgr.cpp +++ b/libs/JSystem/JAudio2/JAIStreamMgr.cpp @@ -107,7 +107,7 @@ asm JAIStreamMgr::JAIStreamMgr(bool param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int JAIStreamMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, +asm bool JAIStreamMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1, JGeometry::TVec3<f32> const* param_2) { nofralloc #include "asm/JSystem/JAudio2/JAIStreamMgr/func_802A3C3C.s" diff --git a/libs/JSystem/JAudio2/JAUSectionHeap.cpp b/libs/JSystem/JAudio2/JAUSectionHeap.cpp index cd54f15206..f4eae1cc49 100644 --- a/libs/JSystem/JAudio2/JAUSectionHeap.cpp +++ b/libs/JSystem/JAudio2/JAUSectionHeap.cpp @@ -318,7 +318,7 @@ JAUSection::JAUSection(JAUSectionHeap* param_0, u32 param_1, s32 param_2) : JSUL field_0x2c = 1; data_.field_0x98 = param_2; if (this != sectionHeap_) { - data_.field_0x00.setSeqDataArchive(sectionHeap_->sectionHeapData_.field_0x408.getSeqDataArchive()); + data_.field_0x00.setSeqDataArchive(sectionHeap_->sectionHeapData_.seqDataBlocks.getSeqDataArchive()); } } #else @@ -773,7 +773,7 @@ JAUSectionHeap::TSectionHeapData::TSectionHeapData() { /* 802A5E60-802A5EC0 2A07A0 0060+00 0/0 1/1 0/0 .text * setSeqDataArchive__14JAUSectionHeapFP10JKRArchive */ void JAUSectionHeap::setSeqDataArchive(JKRArchive* param_0) { - sectionHeapData_.field_0x408.setSeqDataArchive(param_0); + sectionHeapData_.seqDataBlocks.setSeqDataArchive(param_0); for (JSULink<JAUSection>* link = mSectionList.getFirst(); link; link = link->getNext()) { link->getObject()->data_.field_0x00.setSeqDataArchive(param_0); } @@ -782,13 +782,13 @@ void JAUSectionHeap::setSeqDataArchive(JKRArchive* param_0) { /* 802A5EC0-802A5EF8 2A0800 0038+00 0/0 1/1 0/0 .text * loadDynamicSeq__14JAUSectionHeapF10JAISoundIDb */ bool JAUSectionHeap::loadDynamicSeq(JAISoundID param_0, bool param_1) { - return sectionHeapData_.field_0x408.loadDynamicSeq(param_0, param_1, sectionHeapData_.seqDataUser); + return sectionHeapData_.seqDataBlocks.loadDynamicSeq(param_0, param_1, sectionHeapData_.seqDataUser); } /* 802A5EF8-802A5F24 2A0838 002C+00 0/0 1/1 0/0 .text * releaseIdleDynamicSeqDataBlock__14JAUSectionHeapFv */ void JAUSectionHeap::releaseIdleDynamicSeqDataBlock() { - sectionHeapData_.field_0x408.releaseIdleDynamicSeqDataBlock(sectionHeapData_.seqDataUser); + sectionHeapData_.seqDataBlocks.releaseIdleDynamicSeqDataBlock(sectionHeapData_.seqDataUser); } namespace { @@ -865,7 +865,7 @@ bool JAUSectionHeap::newDynamicSeqBlock(u32 size) { seqDataBlock->field_0x14.size = size; seqDataBlock->field_0x10.setAnonymous(); JASCriticalSection cs; - if (base1.sectionHeap_->sectionHeapData_.field_0x408.appendDynamicSeqDataBlock(seqDataBlock)) { + if (base1.sectionHeap_->sectionHeapData_.seqDataBlocks.appendDynamicSeqDataBlock(seqDataBlock)) { return true; } return false; @@ -881,7 +881,7 @@ s32 JAUSectionHeap::getSeqData(JAISoundID param_0, JAISeqData* param_1) { return 2; } } - return sectionHeapData_.field_0x408.getSeqData(param_0, sectionHeapData_.seqDataUser, param_1, true); + return sectionHeapData_.seqDataBlocks.getSeqData(param_0, sectionHeapData_.seqDataUser, param_1, true); } /* 802A6270-802A6278 2A0BB0 0008+00 2/1 0/0 0/0 .text releaseSeqData__14JAUSectionHeapFv diff --git a/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp b/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp index 63e340b5a0..b9c939809a 100644 --- a/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp +++ b/libs/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp @@ -20,7 +20,7 @@ u8* JAUSeqDataBlocks::getSeqData(JAISoundID param_0) { if ((u32)param_0 == 0xffffffff) { return NULL; } - for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; + for (JSULink<JAUSeqDataBlock>* link = getFirst(); link != NULL; link = link->getNext()) { if ((u32)link->getObject()->field_0x10 == (u32)param_0) { @@ -34,7 +34,7 @@ u8* JAUSeqDataBlocks::getSeqData(JAISoundID param_0) { JSULink<JAUSeqDataBlock>* JAUSeqDataBlocks::seekFreeBlock(u32 size) { u32 currentBlockSize = 0xffffffff; JSULink<JAUSeqDataBlock>* rv = NULL; - for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; link = link->getNext()) + for (JSULink<JAUSeqDataBlock>* link = getFirst(); link != NULL; link = link->getNext()) { if (link->getObject()->field_0x10.isAnonymous()) { u32 blockSize = link->getObject()->field_0x14.size; @@ -53,20 +53,20 @@ JSULink<JAUSeqDataBlock>* JAUSeqDataBlocks::seekFreeBlock(u32 size) { /* 802A69D8-802A69F8 2A1318 0020+00 5/5 0/0 0/0 .text * append__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */ bool JAUSeqDataBlocks::append(JSULink<JAUSeqDataBlock>* param_0) { - return field_0x0.append(param_0); + return JSUList::append(param_0); } /* 802A69F8-802A6A18 2A1338 0020+00 4/4 0/0 0/0 .text * remove__16JAUSeqDataBlocksFP26JSULink<15JAUSeqDataBlock> */ bool JAUSeqDataBlocks::remove(JSULink<JAUSeqDataBlock>* param_0) { - return field_0x0.remove(param_0); + return JSUList::remove(param_0); } /* 802A6A18-802A6A58 2A1358 0040+00 1/1 0/0 0/0 .text * hasFailedBlock__16JAUSeqDataBlocksF10JAISoundID */ bool JAUSeqDataBlocks::hasFailedBlock(JAISoundID param_0) { JSULink<JAUSeqDataBlock>* rv = NULL; - for (JSULink<JAUSeqDataBlock>* link = field_0x0.getFirst(); link != NULL; link = link->getNext()) + for (JSULink<JAUSeqDataBlock>* link = getFirst(); link != NULL; link = link->getNext()) { if (link->getObject()->field_0x10 == param_0) { link->getObject()->field_0x10.setAnonymous(); @@ -93,7 +93,7 @@ void JAUDynamicSeqDataBlocks::setSeqDataArchive(JKRArchive* param_0) { s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* param_1, JAISeqData* param_2, bool param_3) { rearrangeLoadingSeqs_(); - if (field_0x0.hasFailedBlock(param_0)) { + if (mFreeBlocks.hasFailedBlock(param_0)) { return 0; } @@ -101,7 +101,7 @@ s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* para return 1; } - u8* seqData = field_0x18.getSeqData(param_0); + u8* seqData = mLoadedBlocks.getSeqData(param_0); if (seqData != NULL) { param_2->field_0x0 = seqData; param_2->field_0x4 = 0; @@ -119,9 +119,9 @@ s32 JAUDynamicSeqDataBlocks::getSeqData(JAISoundID param_0, JAISeqDataUser* para bool JAUDynamicSeqDataBlocks::appendDynamicSeqDataBlock(JAUSeqDataBlock* seqDataBlock) { rearrangeLoadingSeqs_(); if (seqDataBlock->field_0x10.isAnonymous()) { - field_0x0.append(&seqDataBlock->field_0x0); + mFreeBlocks.append(&seqDataBlock->field_0x0); } else { - field_0x18.append(&seqDataBlock->field_0x0); + mLoadedBlocks.append(&seqDataBlock->field_0x0); } return 1; } @@ -150,7 +150,7 @@ bool JAUDynamicSeqDataBlocks::loadDynamicSeq(JAISoundID param_0, bool param_1, } u16 resourceId = soundInfo->getBgmSeqResourceID(param_0); size_t resSize = JASResArcLoader::getResSize(seqDataArchive_, resourceId); - JSULink<JAUSeqDataBlock>* link = field_0x0.seekFreeBlock(resSize); + JSULink<JAUSeqDataBlock>* link = mFreeBlocks.seekFreeBlock(resSize); if (link == NULL) { if (param_1) { link = &releaseIdleDynamicSeqDataBlock_(param_2, resSize)->field_0x0; @@ -161,7 +161,7 @@ bool JAUDynamicSeqDataBlocks::loadDynamicSeq(JAISoundID param_0, bool param_1, return false; } } - field_0x0.remove(link); + mFreeBlocks.remove(link); JAUSeqDataBlock* seqDataBlock = link->getObject(); seqDataBlock->field_0x10 = param_0; link->getObject()->field_0x1c = 1; @@ -179,17 +179,17 @@ u32 JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock(JAISeqDataUser* para rearrangeLoadingSeqs_(); u32 size = 0; JSULink<JAUSeqDataBlock>* nextLink; - for (JSULink<JAUSeqDataBlock>* link = field_0x18.field_0x0.getFirst(); link != NULL; ) { + for (JSULink<JAUSeqDataBlock>* link = mLoadedBlocks.getFirst(); link != NULL; ) { nextLink = link->getNext(); JAUSeqDataBlock* seqDataBlock = link->getObject(); if (param_0 == NULL || !param_0->isUsingSeqData(seqDataBlock->field_0x14)) { - field_0x18.remove(link); + mLoadedBlocks.remove(link); JAUSeqDataBlock* seqDataBlock = link->getObject(); link->getObject()->field_0x10.setAnonymous(); if (size < seqDataBlock->field_0x14.size) { size = seqDataBlock->field_0x14.size; } - field_0x0.append(link); + mFreeBlocks.append(link); } link = nextLink; } @@ -203,7 +203,7 @@ JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0 rearrangeLoadingSeqs_(); u32 minSize = 0xffffffff; JSULink<JAUSeqDataBlock>* foundBlock = NULL; - JSULink<JAUSeqDataBlock>* link = field_0x18.field_0x0.getFirst(); + JSULink<JAUSeqDataBlock>* link = mLoadedBlocks.getFirst(); JSULink<JAUSeqDataBlock>* nextLink; while (link != NULL) { nextLink = link->getNext(); @@ -218,10 +218,10 @@ JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0 link = nextLink; } if (foundBlock != NULL) { - field_0x18.remove(foundBlock); + mLoadedBlocks.remove(foundBlock); JAUSeqDataBlock* seqDataBlock = foundBlock->getObject(); seqDataBlock->field_0x10.setAnonymous(); - field_0x0.append(foundBlock); + mFreeBlocks.append(foundBlock); return foundBlock->getObject(); } return NULL; @@ -230,17 +230,17 @@ JAUDynamicSeqDataBlocks::releaseIdleDynamicSeqDataBlock_(JAISeqDataUser* param_0 /* 802A6EDC-802A6F70 2A181C 0094+00 4/4 0/0 0/0 .text * rearrangeLoadingSeqs___23JAUDynamicSeqDataBlocksFv */ void JAUDynamicSeqDataBlocks::rearrangeLoadingSeqs_() { - JSULink<JAUSeqDataBlock>* link = field_0xc.field_0x0.getFirst(); + JSULink<JAUSeqDataBlock>* link = field_0xc.getFirst(); JSULink<JAUSeqDataBlock>* nextLink; while (link != NULL) { nextLink = link->getNext(); JAUSeqDataBlock* seqDataBlock = link->getObject(); if (seqDataBlock->field_0x1c == 0) { field_0xc.remove(link); - field_0x0.append(link); + mFreeBlocks.append(link); } else if (seqDataBlock->field_0x1c == 2) { field_0xc.remove(link); - field_0x18.append(link); + mLoadedBlocks.append(link); } link = nextLink; } 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) { |
