From 83456a9cd8a15b6c27d29f09c72ad1f09bc2ed60 Mon Sep 17 00:00:00 2001 From: robojumper Date: Fri, 30 May 2025 22:21:49 +0200 Subject: [PATCH] start matching some d/snd things --- config/SOUE01/splits.txt | 32 +- config/SOUE01/symbols.txt | 386 +++++++++--------- configure.py | 14 +- include/d/a/d_a_base.h | 83 +--- include/d/snd/d_snd_3d_actor.h | 94 +++++ include/d/snd/d_snd_3d_engine.h | 18 + include/d/snd/d_snd_3d_manager.h | 66 +++ include/d/snd/d_snd_actor.h | 12 + include/d/snd/d_snd_checkers.h | 22 + include/d/snd/d_snd_mgr.h | 32 ++ include/d/snd/d_snd_player_mgr.h | 61 +++ include/d/snd/d_snd_source.h | 167 ++++++++ include/d/snd/d_snd_util.h | 42 ++ include/egg/audio/eggAudioArcPlayerMgr.h | 31 +- include/egg/audio/eggAudioHeapMgr.h | 39 +- include/egg/audio/eggAudioUtility.h | 2 +- include/egg/core/eggDvdRipper.h | 24 +- include/egg/gfx/eggCamera.h | 19 +- include/egg/math/eggMatrix.h | 9 + include/nw4r/lyt/lyt_layout.h | 2 +- include/nw4r/snd/snd_BasicSound.h | 62 +-- include/nw4r/snd/snd_Sound3DActor.h | 7 + include/nw4r/snd/snd_Sound3DEngine.h | 2 +- include/nw4r/snd/snd_Sound3DManager.h | 8 + include/nw4r/snd/snd_SoundHandle.h | 4 + include/sized_string.h | 1 + include/sound_mgrs/sound_audio_manager.h | 13 - include/toBeSorted/d_d3d.h | 4 +- include/toBeSorted/music_mgrs.h | 23 +- .../MSL/MSL_C/MSL_Common/Include/cmath | 7 + src/REL/d/t/d_t_sound_area.cpp | 12 +- src/d/a/d_a_base.cpp | 6 +- src/d/d_player_mdl.cpp | 6 +- src/d/snd/d_snd_3d_actor.cpp | 96 +++++ src/d/snd/d_snd_3d_engine.cpp | 56 +++ src/d/snd/d_snd_3d_manager.cpp | 135 ++++++ src/d/snd/d_snd_actor.cpp | 66 +++ src/d/snd/d_snd_mgr.cpp | 58 +++ src/d/snd/d_snd_player_mgr.cpp | 86 ++++ src/d/snd/d_snd_source.cpp | 94 +++++ src/d/snd/mgr/d_snd_mgr_unk_11.cpp | 36 ++ src/toBeSorted/d_d3d.cpp | 6 +- src/toBeSorted/sound_info.cpp | 2 +- 43 files changed, 1561 insertions(+), 384 deletions(-) create mode 100644 include/d/snd/d_snd_3d_actor.h create mode 100644 include/d/snd/d_snd_3d_engine.h create mode 100644 include/d/snd/d_snd_3d_manager.h create mode 100644 include/d/snd/d_snd_actor.h create mode 100644 include/d/snd/d_snd_checkers.h create mode 100644 include/d/snd/d_snd_mgr.h create mode 100644 include/d/snd/d_snd_player_mgr.h create mode 100644 include/d/snd/d_snd_source.h create mode 100644 include/d/snd/d_snd_util.h delete mode 100644 include/sound_mgrs/sound_audio_manager.h create mode 100644 src/d/snd/d_snd_3d_actor.cpp create mode 100644 src/d/snd/d_snd_3d_engine.cpp create mode 100644 src/d/snd/d_snd_3d_manager.cpp create mode 100644 src/d/snd/d_snd_actor.cpp create mode 100644 src/d/snd/d_snd_mgr.cpp create mode 100644 src/d/snd/d_snd_player_mgr.cpp create mode 100644 src/d/snd/d_snd_source.cpp create mode 100644 src/d/snd/mgr/d_snd_mgr_unk_11.cpp diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 773fb936..fbff92a4 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -2346,27 +2346,40 @@ toBeSorted/col/cc/misc_unks.cpp: .text start:0x803598D0 end:0x80359D20 align:16 .sbss start:0x80575D28 end:0x80575D30 -d/snd/d_snd.cpp: +d/snd/d_snd_mgr.cpp: .text start:0x80359D20 end:0x8035A558 align:16 + .data start:0x805485D0 end:0x80548678 + .sbss start:0x80575D30 end:0x80575D38 d/snd/d_snd_actor.cpp: - .text start:0x8035A560 end:0x8035BB78 align:16 + .text start:0x8035A560 end:0x8035A898 align:16 + .data start:0x80548678 end:0x805486A0 -d/snd/d_snd_engine.cpp: +d/snd/d_snd_3d_actor.cpp: + .text start:0x8035A8A0 end:0x8035BB78 align:16 + .data start:0x805486B0 end:0x80548710 + .sdata2 start:0x8057D2C0 end:0x8057D308 + +d/snd/d_snd_3d_engine.cpp: .text start:0x8035BB80 end:0x8035C3F0 align:16 + .data start:0x80548710 end:0x80548730 + .sdata2 start:0x8057D308 end:0x8057D368 d/snd/d_snd_unk_component_1.cpp: .text start:0x8035C3F0 end:0x8035DA88 align:16 -d/snd/mgr/d_snd_mgr_bgm.cpp: +d/snd/d_snd_player_mgr.cpp: .text start:0x8035DA90 end:0x8035F010 align:16 + .data start:0x80548758 end:0x805487A0 d/snd/mgr/d_snd_mgr_unk1.cpp: .text start:0x8035F010 end:0x80360C28 align:16 .ctors start:0x804DB914 end:0x804DB918 -d/snd/mgr/d_snd_mgr_unk3.cpp: +d/snd/d_snd_3d_manager.cpp: .text start:0x80360C30 end:0x8036145C align:16 + .data start:0x805487D0 end:0x805487E0 + .sdata2 start:0x8057D3B8 end:0x8057D3F8 d/snd/mgr/d_snd_mgr_enemy.cpp: .text start:0x80361460 end:0x8036642C align:16 @@ -2382,9 +2395,14 @@ d/snd/mgr/d_snd_mgr_unk_5.cpp: .text start:0x8037F8C0 end:0x803864C8 align:16 .ctors start:0x804DB91C end:0x804DB920 -d/snd/mgr/d_snd_mgr_unk_6.cpp: - .text start:0x803864D0 end:0x8038C408 align:16 +d/snd/mgr/d_snd_mgr_unk_13.cpp: + .text start:0x803864D0 end:0x803889BC align:16 + .data start:0x8054A680 end:0x8054A7D0 + +d/snd/d_snd_source.cpp: + .text start:0x803889C0 end:0x8038C408 align:16 .ctors start:0x804DB920 end:0x804DB924 + .data start:0x8054A7D0 end:0x8054AAE8 d/snd/mgr/d_snd_mgr_unk_7.cpp: .text start:0x8038C410 end:0x8038EBF0 align:16 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index b51f8ce4..ec4c9298 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -1022,7 +1022,7 @@ fn_8002C010 = .text:0x8002C010; // type:function size:0x58 fn_8002C070 = .text:0x8002C070; // type:function size:0x58 fn_8002C0D0 = .text:0x8002C0D0; // type:function size:0x58 fn_8002C130 = .text:0x8002C130; // type:function size:0x24 -fn_8002C160 = .text:0x8002C160; // type:function size:0x40 +__dt__16dSoundSourceIf_cFv = .text:0x8002C160; // type:function size:0x40 fn_8002C1A0 = .text:0x8002C1A0; // type:function size:0xB0 fn_8002C250 = .text:0x8002C250; // type:function size:0xB8 fn_8002C310 = .text:0x8002C310; // type:function size:0x90 @@ -19805,11 +19805,11 @@ fn_80359BC0 = .text:0x80359BC0; // type:function size:0x84 fn_80359C50 = .text:0x80359C50; // type:function size:0x1C fn_80359C70 = .text:0x80359C70; // type:function size:0x8 fn_80359C80 = .text:0x80359C80; // type:function size:0xA0 -SndAudioMgr____ct = .text:0x80359D20; // type:function size:0x9C -SndAudioMgr__initialize = .text:0x80359DC0; // type:function size:0xEC -fn_80359EB0 = .text:0x80359EB0; // type:function size:0x10 -SndAudioMgr__calc = .text:0x80359EC0; // type:function size:0xB8 -fn_80359F80 = .text:0x80359F80; // type:function size:0x2C +__ct__9dSndMgr_cFv = .text:0x80359D20; // type:function size:0x9C +initialize__9dSndMgr_cFPQ23EGG4HeapUl = .text:0x80359DC0; // type:function size:0xEC +initHbm__9dSndMgr_cFUl = .text:0x80359EB0; // type:function size:0x10 +calc__9dSndMgr_cFv = .text:0x80359EC0; // type:function size:0xB8 +restoreEffectsCallback__9dSndMgr_cFv = .text:0x80359F80; // type:function size:0x2C stateProc__Q23EGG12SoundHeapMgrFv = .text:0x80359FB0; // type:function size:0xD4 loadState__Q23EGG12SoundHeapMgrFl = .text:0x8035A090; // type:function size:0x8C getCurrentLevel__Q23EGG12SoundHeapMgrFv = .text:0x8035A120; // type:function size:0x54 @@ -19823,8 +19823,8 @@ startSound__Q23EGG9ArcPlayerFPQ34nw4r3snd11SoundHandleUl = .text:0x8035A360; // startSound__Q23EGG9ArcPlayerFPQ34nw4r3snd11SoundHandleUi = .text:0x8035A3A0; // type:function size:0x34 startSound__Q23EGG9ArcPlayerFPQ34nw4r3snd11SoundHandlePCc = .text:0x8035A3E0; // type:function size:0x70 setupMemoryArchive__Q23EGG9ArcPlayerFPCvPQ34nw4r3snd9SoundHeapl = .text:0x8035A450; // type:function size:0x10 -fn_8035A460 = .text:0x8035A460; // type:function size:0x58 -fn_8035A4C0 = .text:0x8035A4C0; // type:function size:0x8 +__dt__9dSndMgr_cFv = .text:0x8035A460; // type:function size:0x58 +@248@calc__9dSndMgr_cFv = .text:0x8035A4C0; // type:function size:0x8 @248@loadGroup__Q23EGG14SimpleAudioMgrFUiPQ34nw4r3snd9SoundHeapUl = .text:0x8035A4D0; // type:function size:0x8 @248@loadGroup__Q23EGG14SimpleAudioMgrFiPQ34nw4r3snd9SoundHeapUl = .text:0x8035A4E0; // type:function size:0x8 @248@loadGroup__Q23EGG14SimpleAudioMgrFUlPQ34nw4r3snd9SoundHeapUl = .text:0x8035A4F0; // type:function size:0x8 @@ -19833,13 +19833,13 @@ fn_8035A4C0 = .text:0x8035A4C0; // type:function size:0x8 @248@setupMemoryArchive__Q23EGG14SimpleAudioMgrFPCvPQ34nw4r3snd9SoundHeap = .text:0x8035A520; // type:function size:0x8 @248@openNandArchive__Q23EGG14SimpleAudioMgrFPCcPQ34nw4r3snd9SoundHeap = .text:0x8035A530; // type:function size:0x8 @248@openDvdArchive__Q23EGG14SimpleAudioMgrFPCcPQ34nw4r3snd9SoundHeap = .text:0x8035A540; // type:function size:0x8 -fn_8035A550 = .text:0x8035A550; // type:function size:0x8 -fn_8035A560 = .text:0x8035A560; // type:function size:0x3C -fn_8035A5A0 = .text:0x8035A5A0; // type:function size:0x54 -fn_8035A600 = .text:0x8035A600; // type:function size:0x240 -fn_8035A840 = .text:0x8035A840; // type:function size:0x58 -fn_8035A8A0 = .text:0x8035A8A0; // type:function size:0xE8 -fn_8035A990 = .text:0x8035A990; // type:function size:0x40 +@248@__dt__9dSndMgr_cFv = .text:0x8035A550; // type:function size:0x8 +__ct__11dSndActor_cFRQ34nw4r3snd18SoundArchivePlayer = .text:0x8035A560; // type:function size:0x3C +__dt__Q34nw4r3snd11SoundHandleFv = .text:0x8035A5A0; // type:function size:0x54 scope:weak +__cl__22SoundPropertiesCheckerFRQ34nw4r3snd11SoundHandle = .text:0x8035A600; // type:function size:0x240 +__dt__11dSndActor_cFv = .text:0x8035A840; // type:function size:0x58 scope:weak +__ct__13dSnd3DActor_cFPvUc = .text:0x8035A8A0; // type:function size:0xE8 +d_vt_0x34__13dSnd3DActor_cFRCQ34nw4r4math4VEC3 = .text:0x8035A990; // type:function size:0x40 fn_8035A9D0 = .text:0x8035A9D0; // type:function size:0x2C fn_8035AA00 = .text:0x8035AA00; // type:function size:0x30 fn_8035AA30 = .text:0x8035AA30; // type:function size:0x44 @@ -19850,37 +19850,37 @@ fn_8035AB60 = .text:0x8035AB60; // type:function size:0x78 fn_8035ABE0 = .text:0x8035ABE0; // type:function size:0x44 fn_8035AC30 = .text:0x8035AC30; // type:function size:0x28 fn_8035AC60 = .text:0x8035AC60; // type:function size:0x50 -fn_8035ACB0 = .text:0x8035ACB0; // type:function size:0xBC -fn_8035AD70 = .text:0x8035AD70; // type:function size:0x3C -fn_8035ADB0 = .text:0x8035ADB0; // type:function size:0xFC -fn_8035AEB0 = .text:0x8035AEB0; // type:function size:0x3C +updatePositionRelativeToPlayer__13dSnd3DActor_cFv = .text:0x8035ACB0; // type:function size:0xBC +getPositionRelativeToPlayer__13dSnd3DActor_cFv = .text:0x8035AD70; // type:function size:0x3C +updateDistanceToPlayer__13dSnd3DActor_cFv = .text:0x8035ADB0; // type:function size:0xFC +getDistanceToPlayer__13dSnd3DActor_cFv = .text:0x8035AEB0; // type:function size:0x3C fn_8035AEF0 = .text:0x8035AEF0; // type:function size:0xE0 fn_8035AFD0 = .text:0x8035AFD0; // type:function size:0x124 fn_8035B100 = .text:0x8035B100; // type:function size:0xB4 fn_8035B1C0 = .text:0x8035B1C0; // type:function size:0x330 fn_8035B4F0 = .text:0x8035B4F0; // type:function size:0x144 fn_8035B640 = .text:0x8035B640; // type:function size:0x1FC -fn_8035B840 = .text:0x8035B840; // type:function size:0x60 -fn_8035B8A0 = .text:0x8035B8A0; // type:function size:0xCC -fn_8035B970 = .text:0x8035B970; // type:function size:0x34 +hasPlayingSounds__13dSnd3DActor_cCFv = .text:0x8035B840; // type:function size:0x60 +isPlayingSound__13dSnd3DActor_cFUl = .text:0x8035B8A0; // type:function size:0xCC +__cl__23IsCurrentSoundIdCheckerFRQ34nw4r3snd11SoundHandle = .text:0x8035B970; // type:function size:0x34 fn_8035B9B0 = .text:0x8035B9B0; // type:function size:0x74 fn_8035BA30 = .text:0x8035BA30; // type:function size:0x20 -fn_8035BA50 = .text:0x8035BA50; // type:function size:0x8 -fn_8035BA60 = .text:0x8035BA60; // type:function size:0x58 -fn_8035BAC0 = .text:0x8035BAC0; // type:function size:0x58 -fn_8035BB20 = .text:0x8035BB20; // type:function size:0x8 -fn_8035BB30 = .text:0x8035BB30; // type:function size:0x8 -fn_8035BB40 = .text:0x8035BB40; // type:function size:0x8 -fn_8035BB50 = .text:0x8035BB50; // type:function size:0x8 +soundLabelToSoundId__13dSnd3DActor_cCFPCc = .text:0x8035BA50; // type:function size:0x8 +soundIdToSoundLabel__13dSnd3DActor_cCFUl = .text:0x8035BA60; // type:function size:0x58 +__dt__13dSnd3DActor_cFv = .text:0x8035BAC0; // type:function size:0x58 +d_vt_0x44__13dSnd3DActor_cFv = .text:0x8035BB20; // type:function size:0x8 +d_vt_0x40__13dSnd3DActor_cFv = .text:0x8035BB30; // type:function size:0x8 +d_vt_0x3C__13dSnd3DActor_cFv = .text:0x8035BB40; // type:function size:0x8 +d_vt_0x30__13dSnd3DActor_cFv = .text:0x8035BB50; // type:function size:0x8 @84@at_0x0c__Q34nw4r3snd12Sound3DActorFPvPQ44nw4r3snd6detail10BasicSound = .text:0x8035BB60; // type:function size:0x8 -fn_8035BB70 = .text:0x8035BB70; // type:function size:0x8 -fn_8035BB80 = .text:0x8035BB80; // type:function size:0x3C +@84@__dt__13dSnd3DActor_cFv = .text:0x8035BB70; // type:function size:0x8 +__ct__14dSnd3DEngine_cFv = .text:0x8035BB80; // type:function size:0x3C __dt__Q34nw4r3snd13Sound3DEngineFv = .text:0x8035BBC0; // type:function size:0x40 -fn_8035BC00 = .text:0x8035BC00; // type:function size:0x428 -fn_8035C030 = .text:0x8035C030; // type:function size:0x188 +UpdateAmbientParam__14dSnd3DEngine_cFPCQ34nw4r3snd14Sound3DManagerPCQ34nw4r3snd12Sound3DParamUlUlPQ34nw4r3snd17SoundAmbientParam = .text:0x8035BC00; // type:function size:0x428 +CalcPitch__FPCQ34nw4r4math4VEC3fRCQ34nw4r3snd14Sound3DManagerRCQ34nw4r3snd15Sound3DListenerRCQ34nw4r3snd12Sound3DParamPf = .text:0x8035C030; // type:function size:0x188 fn_8035C1C0 = .text:0x8035C1C0; // type:function size:0xDC fn_8035C2A0 = .text:0x8035C2A0; // type:function size:0x110 -fn_8035C3B0 = .text:0x8035C3B0; // type:function size:0x40 +__dt__14dSnd3DEngine_cFv = .text:0x8035C3B0; // type:function size:0x40 fn_8035C3F0 = .text:0x8035C3F0; // type:function size:0x2F8 fn_8035C6F0 = .text:0x8035C6F0; // type:function size:0x44 fn_8035C740 = .text:0x8035C740; // type:function size:0x44 @@ -19919,11 +19919,11 @@ fn_8035D940 = .text:0x8035D940; // type:function size:0x58 fn_8035D9A0 = .text:0x8035D9A0; // type:function size:0x68 fn_8035DA10 = .text:0x8035DA10; // type:function size:0x4C fn_8035DA60 = .text:0x8035DA60; // type:function size:0x28 -getSoundArchivePath = .text:0x8035DA90; // type:function size:0xC -BgmManager__dtor = .text:0x8035DAA0; // type:function size:0x78 -initBgmMgr = .text:0x8035DB20; // type:function size:0x48 -BgmMgr__deref = .text:0x8035DB70; // type:function size:0x10 -BgmManager__ctor = .text:0x8035DB80; // type:function size:0x78 +getSoundArchivePath__15dSndPlayerMgr_cFv = .text:0x8035DA90; // type:function size:0xC +__dt__33SndMgrDisposer<15dSndPlayerMgr_c>Fv = .text:0x8035DAA0; // type:function size:0x78 +create__33SndMgrDisposer<15dSndPlayerMgr_c>Fv = .text:0x8035DB20; // type:function size:0x48 +remove__33SndMgrDisposer<15dSndPlayerMgr_c>Fv = .text:0x8035DB70; // type:function size:0x10 +__ct__15dSndPlayerMgr_cFv = .text:0x8035DB80; // type:function size:0x78 fn_8035DC00 = .text:0x8035DC00; // type:function size:0x44 fn_8035DC50 = .text:0x8035DC50; // type:function size:0x8C fn_8035DCE0 = .text:0x8035DCE0; // type:function size:0x38 @@ -19935,7 +19935,7 @@ fn_8035DE60 = .text:0x8035DE60; // type:function size:0x38 fn_8035DEA0 = .text:0x8035DEA0; // type:function size:0x50 fn_8035DEF0 = .text:0x8035DEF0; // type:function size:0x38 fn_8035DF30 = .text:0x8035DF30; // type:function size:0x24 -fn_8035DF60 = .text:0x8035DF60; // type:function size:0x54 +getFreeSize__15dSndPlayerMgr_cFv = .text:0x8035DF60; // type:function size:0x54 fn_8035DFC0 = .text:0x8035DFC0; // type:function size:0x3C fn_8035E000 = .text:0x8035E000; // type:function size:0xD4 fn_8035E0E0 = .text:0x8035E0E0; // type:function size:0xCC @@ -19962,8 +19962,8 @@ fn_8035E860 = .text:0x8035E860; // type:function size:0x14 fn_8035E880 = .text:0x8035E880; // type:function size:0x14 fn_8035E8A0 = .text:0x8035E8A0; // type:function size:0xC fn_8035E8B0 = .text:0x8035E8B0; // type:function size:0xC -fn_8035E8C0 = .text:0x8035E8C0; // type:function size:0x90 -fn_8035E950 = .text:0x8035E950; // type:function size:0x6C +startSound__15dSndPlayerMgr_cFPQ34nw4r3snd11SoundHandleUlPCQ44nw4r3snd14SoundStartable9StartInfo = .text:0x8035E8C0; // type:function size:0x90 +startSound__15dSndPlayerMgr_cFPQ34nw4r3snd11SoundHandlePCcPCQ44nw4r3snd14SoundStartable9StartInfo = .text:0x8035E950; // type:function size:0x6C fn_8035E9C0 = .text:0x8035E9C0; // type:function size:0x80 fn_8035EA40 = .text:0x8035EA40; // type:function size:0x64 fn_8035EAB0 = .text:0x8035EAB0; // type:function size:0x28 @@ -19975,12 +19975,12 @@ fn_8035EB50 = .text:0x8035EB50; // type:function size:0x3C fn_8035EB90 = .text:0x8035EB90; // type:function size:0x80 fn_8035EC10 = .text:0x8035EC10; // type:function size:0x5C fn_8035EC70 = .text:0x8035EC70; // type:function size:0x84 -playSomeSound = .text:0x8035ED00; // type:function size:0x3C -fn_8035ED40 = .text:0x8035ED40; // type:function size:0x44 +convertLabelStringToSoundId__15dSndPlayerMgr_cCFPCc = .text:0x8035ED00; // type:function size:0x3C +getSoundArchivePlayerForType__15dSndPlayerMgr_cFUc = .text:0x8035ED40; // type:function size:0x44 fn_8035ED90 = .text:0x8035ED90; // type:function size:0x5C -fn_8035EDF0 = .text:0x8035EDF0; // type:function size:0x198 +loadDemoArchive__15dSndPlayerMgr_cFPCc = .text:0x8035EDF0; // type:function size:0x198 fn_8035EF90 = .text:0x8035EF90; // type:function size:0x38 -fn_8035EFD0 = .text:0x8035EFD0; // type:function size:0x40 +calc__15dSndPlayerMgr_cFv = .text:0x8035EFD0; // type:function size:0x40 fn_8035F010 = .text:0x8035F010; // type:function size:0x20 fn_8035F030 = .text:0x8035F030; // type:function size:0x1C fn_8035F050 = .text:0x8035F050; // type:function size:0x50 @@ -20034,18 +20034,18 @@ fn_80360AD0 = .text:0x80360AD0; // type:function size:0x5C fn_80360B30 = .text:0x80360B30; // type:function size:0x5C fn_80360B90 = .text:0x80360B90; // type:function size:0x64 fn_80360C00 = .text:0x80360C00; // type:function size:0x28 -fn_80360C30 = .text:0x80360C30; // type:function size:0x78 -fn_80360CB0 = .text:0x80360CB0; // type:function size:0x48 -fn_80360D00 = .text:0x80360D00; // type:function size:0x10 -fn_80360D10 = .text:0x80360D10; // type:function size:0xE4 -__dt__Q34nw4r3snd14Sound3DManagerFv = .text:0x80360E00; // type:function size:0x60 -fn_80360E60 = .text:0x80360E60; // type:function size:0x118 -fn_80360F80 = .text:0x80360F80; // type:function size:0xC -fn_80360F90 = .text:0x80360F90; // type:function size:0x20 -fn_80360FB0 = .text:0x80360FB0; // type:function size:0xC -fn_80360FC0 = .text:0x80360FC0; // type:function size:0x18 -fn_80360FE0 = .text:0x80360FE0; // type:function size:0x390 -fn_80361370 = .text:0x80361370; // type:function size:0xEC +__dt__33SndMgrDisposer<15dSnd3DManager_c>Fv = .text:0x80360C30; // type:function size:0x78 scope:weak +create__33SndMgrDisposer<15dSnd3DManager_c>Fv = .text:0x80360CB0; // type:function size:0x48 scope:weak +remove__33SndMgrDisposer<15dSnd3DManager_c>Fv = .text:0x80360D00; // type:function size:0x10 scope:weak +__ct__15dSnd3DManager_cFv = .text:0x80360D10; // type:function size:0xE4 +__dt__Q34nw4r3snd14Sound3DManagerFv = .text:0x80360E00; // type:function size:0x60 scope:weak +setup__15dSnd3DManager_cFv = .text:0x80360E60; // type:function size:0x118 +resetCamDistance__15dSnd3DManager_cFv = .text:0x80360F80; // type:function size:0xC +setCamDistance__15dSnd3DManager_cFf = .text:0x80360F90; // type:function size:0x20 +calc__15dSnd3DManager_cFv = .text:0x80360FB0; // type:function size:0xC +clearState__15dSnd3DManager_cFv = .text:0x80360FC0; // type:function size:0x18 +updateFromCamera__15dSnd3DManager_cFRQ23EGG12LookAtCamera = .text:0x80360FE0; // type:function size:0x390 +updateListenerPos__15dSnd3DManager_cFf = .text:0x80361370; // type:function size:0xEC EnemySoundMgr__dtor = .text:0x80361460; // type:function size:0x78 initEnemySoundMgr = .text:0x803614E0; // type:function size:0x48 EnemySoundMgr__deref = .text:0x80361530; // type:function size:0x10 @@ -20876,7 +20876,7 @@ playButtonPressSoundWhenAdvancingTextBoxes__17SmallSoundManagerFf = .text:0x8037 fn_8037F0E0 = .text:0x8037F0E0; // type:function size:0xC fn_8037F0F0 = .text:0x8037F0F0; // type:function size:0x60 fn_8037F150 = .text:0x8037F150; // type:function size:0x6D0 -fn_8037F820 = .text:0x8037F820; // type:function size:0x8 +d_s_vt_0x17C__14dSoundSource_cFv = .text:0x8037F820; // type:function size:0x8 fn_8037F830 = .text:0x8037F830; // type:function size:0x8 fn_8037F840 = .text:0x8037F840; // type:function size:0x74 fn_8037F8C0 = .text:0x8037F8C0; // type:function size:0x78 @@ -20942,7 +20942,7 @@ fn_80382210 = .text:0x80382210; // type:function size:0xE8 fn_80382300 = .text:0x80382300; // type:function size:0x28 fn_80382330 = .text:0x80382330; // type:function size:0x7C fn_803823B0 = .text:0x803823B0; // type:function size:0x18 -fn_803823D0 = .text:0x803823D0; // type:function size:0x8 +d_s_vt_0x1E0__14dSoundSource_cFv = .text:0x803823D0; // type:function size:0x8 fn_803823E0 = .text:0x803823E0; // type:function size:0x14 fn_80382400 = .text:0x80382400; // type:function size:0xC fn_80382410 = .text:0x80382410; // type:function size:0xC0 @@ -20957,9 +20957,9 @@ fn_803837C0 = .text:0x803837C0; // type:function size:0x9C fn_80383860 = .text:0x80383860; // type:function size:0x94 fn_80383900 = .text:0x80383900; // type:function size:0x58 fn_80383960 = .text:0x80383960; // type:function size:0x9C -fn_80383A00 = .text:0x80383A00; // type:function size:0x8 -fn_80383A10 = .text:0x80383A10; // type:function size:0x8 -fn_80383A20 = .text:0x80383A20; // type:function size:0x4 +d_s_vt_0x180__14dSoundSource_cFv = .text:0x80383A00; // type:function size:0x8 +d_s_vt_0x1DC__14dSoundSource_cFv = .text:0x80383A10; // type:function size:0x8 +d_s_vt_0x1D8__14dSoundSource_cFv = .text:0x80383A20; // type:function size:0x4 fn_80383A30 = .text:0x80383A30; // type:function size:0x78 initEnemyBgmRelatedMgr = .text:0x80383AB0; // type:function size:0x48 fn_80383B00 = .text:0x80383B00; // type:function size:0x10 @@ -21019,14 +21019,14 @@ fn_803858D0 = .text:0x803858D0; // type:function size:0xA0 fn_80385970 = .text:0x80385970; // type:function size:0x90 fn_80385A00 = .text:0x80385A00; // type:function size:0x8 fn_80385A10 = .text:0x80385A10; // type:function size:0x4 -fn_80385A20 = .text:0x80385A20; // type:function size:0x8 +d_s_vt_0x1D4__14dSoundSource_cFv = .text:0x80385A20; // type:function size:0x8 fn_80385A30 = .text:0x80385A30; // type:function size:0x4 fn_80385A40 = .text:0x80385A40; // type:function size:0x4 fn_80385A50 = .text:0x80385A50; // type:function size:0x4 fn_80385A60 = .text:0x80385A60; // type:function size:0x8 fn_80385A70 = .text:0x80385A70; // type:function size:0x4 -fn_80385A80 = .text:0x80385A80; // type:function size:0x4 -fn_80385A90 = .text:0x80385A90; // type:function size:0x34 +d_s_vt_0x1CC__14dSoundSource_cFv = .text:0x80385A80; // type:function size:0x4 +d_s_vt_0x1C0__14dSoundSource_cFv = .text:0x80385A90; // type:function size:0x34 fn_80385AD0 = .text:0x80385AD0; // type:function size:0x8 fn_80385AE0 = .text:0x80385AE0; // type:function size:0x8 fn_80385AF0 = .text:0x80385AF0; // type:function size:0x4 @@ -21038,7 +21038,7 @@ fn_80385B40 = .text:0x80385B40; // type:function size:0x8 fn_80385B50 = .text:0x80385B50; // type:function size:0x10 fn_80385B60 = .text:0x80385B60; // type:function size:0x10 fn_80385B70 = .text:0x80385B70; // type:function size:0x8 -fn_80385B80 = .text:0x80385B80; // type:function size:0x4 +d_s_vt_0x188__14dSoundSource_cFv = .text:0x80385B80; // type:function size:0x4 fn_80385B90 = .text:0x80385B90; // type:function size:0x4 fn_80385BA0 = .text:0x80385BA0; // type:function size:0x8 fn_80385BB0 = .text:0x80385BB0; // type:function size:0x14 @@ -21103,12 +21103,12 @@ fn_80386410 = .text:0x80386410; // type:function size:0x8 fn_80386420 = .text:0x80386420; // type:function size:0x8 fn_80386430 = .text:0x80386430; // type:function size:0x8 fn_80386440 = .text:0x80386440; // type:function size:0x8 -fn_80386450 = .text:0x80386450; // type:function size:0x8 +@4@d_vt_0x38__14dSoundSource_cFbi = .text:0x80386450; // type:function size:0x8 fn_80386460 = .text:0x80386460; // type:function size:0x8 fn_80386470 = .text:0x80386470; // type:function size:0x8 -fn_80386480 = .text:0x80386480; // type:function size:0x8 -fn_80386490 = .text:0x80386490; // type:function size:0x8 -fn_803864A0 = .text:0x803864A0; // type:function size:0x8 +@4@SetupSound__14dSoundSource_cFPQ34nw4r3snd11SoundHandleUlPCQ44nw4r3snd14SoundStartable9StartInfoPv = .text:0x80386480; // type:function size:0x8 +@4@d_vt_0x5C__14dSoundSource_cFv = .text:0x80386490; // type:function size:0x8 +@4@d_vt_0x58__14dSoundSource_cFv = .text:0x803864A0; // type:function size:0x8 fn_803864B0 = .text:0x803864B0; // type:function size:0x8 fn_803864C0 = .text:0x803864C0; // type:function size:0x8 fn_803864D0 = .text:0x803864D0; // type:function size:0x164 @@ -21130,16 +21130,16 @@ fn_80386DE0 = .text:0x80386DE0; // type:function size:0x110 fn_80386EF0 = .text:0x80386EF0; // type:function size:0x80 fn_80386F70 = .text:0x80386F70; // type:function size:0x1A4C soundForActorInitRelated_803889c0 = .text:0x803889C0; // type:function size:0x4 -fn_803889D0 = .text:0x803889D0; // type:function size:0x108 -fn_80388AE0 = .text:0x80388AE0; // type:function size:0xC4 +__ct__14dSoundSource_cFUcP9dAcBase_cii = .text:0x803889D0; // type:function size:0x108 +__dt__14dSoundSource_cFv = .text:0x80388AE0; // type:function size:0xC4 fn_80388BB0 = .text:0x80388BB0; // type:function size:0x118 fn_80388CD0 = .text:0x80388CD0; // type:function size:0x9C fn_80388D70 = .text:0x80388D70; // type:function size:0x80 fn_80388DF0 = .text:0x80388DF0; // type:function size:0xC fn_80388E00 = .text:0x80388E00; // type:function size:0x88 -fn_80388E90 = .text:0x80388E90; // type:function size:0x84 -fn_80388F20 = .text:0x80388F20; // type:function size:0x4 -fn_80388F30 = .text:0x80388F30; // type:function size:0x8 +d_s_vt_0x184__14dSoundSource_cFv = .text:0x80388E90; // type:function size:0x84 +d_s_vt_0x18C__14dSoundSource_cFv = .text:0x80388F20; // type:function size:0x4 +hasPlayingSounds__14dSoundSource_cCFv = .text:0x80388F30; // type:function size:0x8 fn_80388F40 = .text:0x80388F40; // type:function size:0x8 fn_80388F50 = .text:0x80388F50; // type:function size:0x48 fn_80388FA0 = .text:0x80388FA0; // type:function size:0x14 @@ -21148,8 +21148,8 @@ fn_80389050 = .text:0x80389050; // type:function size:0x68 fn_803890C0 = .text:0x803890C0; // type:function size:0x18 fn_803890E0 = .text:0x803890E0; // type:function size:0x1C fn_80389100 = .text:0x80389100; // type:function size:0x60 -fn_80389160 = .text:0x80389160; // type:function size:0x40 -fn_803891A0 = .text:0x803891A0; // type:function size:0xB0 +d_s_vt_0x190__14dSoundSource_cFv = .text:0x80389160; // type:function size:0x40 +d_vt_0x38__14dSoundSource_cFbi = .text:0x803891A0; // type:function size:0xB0 fn_80389250 = .text:0x80389250; // type:function size:0x30 fn_80389280 = .text:0x80389280; // type:function size:0x48 fn_803892D0 = .text:0x803892D0; // type:function size:0x64 @@ -21171,7 +21171,7 @@ fn_80389D50 = .text:0x80389D50; // type:function size:0x78 fn_80389DD0 = .text:0x80389DD0; // type:function size:0x11C fn_80389EF0 = .text:0x80389EF0; // type:function size:0x58 fn_80389F50 = .text:0x80389F50; // type:function size:0x208 -fn_8038A160 = .text:0x8038A160; // type:function size:0x6C +d_s_vt_0x19C__14dSoundSource_cFv = .text:0x8038A160; // type:function size:0x6C fn_8038A1D0 = .text:0x8038A1D0; // type:function size:0xD8 fn_8038A2B0 = .text:0x8038A2B0; // type:function size:0x48 fn_8038A300 = .text:0x8038A300; // type:function size:0x10 @@ -21189,22 +21189,22 @@ fn_8038A740 = .text:0x8038A740; // type:function size:0x1E8 fn_8038A930 = .text:0x8038A930; // type:function size:0x1D0 fn_8038AB00 = .text:0x8038AB00; // type:function size:0x258 fn_8038AD60 = .text:0x8038AD60; // type:function size:0x58 -fn_8038ADC0 = .text:0x8038ADC0; // type:function size:0xAC -fn_8038AE70 = .text:0x8038AE70; // type:function size:0x98 -fn_8038AF10 = .text:0x8038AF10; // type:function size:0x254 +SetupSound__14dSoundSource_cFPQ34nw4r3snd11SoundHandleUlPCQ44nw4r3snd14SoundStartable9StartInfoPv = .text:0x8038ADC0; // type:function size:0xAC +d_s_vt_0x1AC__14dSoundSource_cFv = .text:0x8038AE70; // type:function size:0x98 +d_s_vt_0x1B0__14dSoundSource_cFv = .text:0x8038AF10; // type:function size:0x254 getVolumePercentMaybe = .text:0x8038B170; // type:function size:0x78 fn_8038B1F0 = .text:0x8038B1F0; // type:function size:0x90 fn_8038B280 = .text:0x8038B280; // type:function size:0x94 -fn_8038B320 = .text:0x8038B320; // type:function size:0x24 +d_s_vt_0x1C8__14dSoundSource_cFv = .text:0x8038B320; // type:function size:0x24 fn_8038B350 = .text:0x8038B350; // type:function size:0x30 -fn_8038B380 = .text:0x8038B380; // type:function size:0x8 -fn_8038B390 = .text:0x8038B390; // type:function size:0x4 -fn_8038B3A0 = .text:0x8038B3A0; // type:function size:0x8 -fn_8038B3B0 = .text:0x8038B3B0; // type:function size:0x4 -fn_8038B3C0 = .text:0x8038B3C0; // type:function size:0x54 -fn_8038B420 = .text:0x8038B420; // type:function size:0x60 -fn_8038B480 = .text:0x8038B480; // type:function size:0x74 -fn_8038B500 = .text:0x8038B500; // type:function size:0x84 +d_s_vt_0x194__14dSoundSource_cFv = .text:0x8038B380; // type:function size:0x8 +d_vt_0x58__14dSoundSource_cFv = .text:0x8038B390; // type:function size:0x4 +d_s_vt_0x1A0__14dSoundSource_cFv = .text:0x8038B3A0; // type:function size:0x8 +d_vt_0x5C__14dSoundSource_cFv = .text:0x8038B3B0; // type:function size:0x4 +d_s_vt_0x1B4__14dSoundSource_cFv = .text:0x8038B3C0; // type:function size:0x54 +d_s_vt_0x1B8__14dSoundSource_cFv = .text:0x8038B420; // type:function size:0x60 +d_s_vt_0x1BC__14dSoundSource_cFv = .text:0x8038B480; // type:function size:0x74 +d_s_vt_0x1C4__14dSoundSource_cFv = .text:0x8038B500; // type:function size:0x84 fn_8038B590 = .text:0x8038B590; // type:function size:0x24 fn_8038B5C0 = .text:0x8038B5C0; // type:function size:0x24 fn_8038B5F0 = .text:0x8038B5F0; // type:function size:0x60 @@ -21223,17 +21223,17 @@ fn_8038BB80 = .text:0x8038BB80; // type:function size:0x6C fn_8038BBF0 = .text:0x8038BBF0; // type:function size:0x144 fn_8038BD40 = .text:0x8038BD40; // type:function size:0x20 fn_8038BD60 = .text:0x8038BD60; // type:function size:0xC -fn_8038BD70 = .text:0x8038BD70; // type:function size:0x4 +d_s_vt_0x1E4__14dSoundSource_cFv = .text:0x8038BD70; // type:function size:0x4 fn_8038BD80 = .text:0x8038BD80; // type:function size:0xB8 fn_8038BE40 = .text:0x8038BE40; // type:function size:0xC4 fn_8038BF10 = .text:0x8038BF10; // type:function size:0x104 -fn_8038C020 = .text:0x8038C020; // type:function size:0x8 -fn_8038C030 = .text:0x8038C030; // type:function size:0x58 +d_s_vt_0x1E8__14dSoundSource_cFv = .text:0x8038C020; // type:function size:0x8 +getRemoConSoundVariant__14dSoundSource_cCFUl = .text:0x8038C030; // type:function size:0x58 fn_8038C090 = .text:0x8038C090; // type:function size:0xBC fn_8038C150 = .text:0x8038C150; // type:function size:0x280 -fn_8038C3D0 = .text:0x8038C3D0; // type:function size:0x18 -fn_8038C3F0 = .text:0x8038C3F0; // type:function size:0x8 -fn_8038C400 = .text:0x8038C400; // type:function size:0x8 +__sinit_\d_snd_source_cpp = .text:0x8038C3D0; // type:function size:0x18 +@88@__dt__14dSoundSource_cFv = .text:0x8038C3F0; // type:function size:0x8 +@4@__dt__14dSoundSource_cFv = .text:0x8038C400; // type:function size:0x8 fn_8038C410 = .text:0x8038C410; // type:function size:0xEC fn_8038C500 = .text:0x8038C500; // type:function size:0xC4 fn_8038C5D0 = .text:0x8038C5D0; // type:function size:0x3D0 @@ -21623,9 +21623,9 @@ fn_80399A40 = .text:0x80399A40; // type:function size:0x50 fn_80399A90 = .text:0x80399A90; // type:function size:0x44 fn_80399AE0 = .text:0x80399AE0; // type:function size:0x5C fn_80399B40 = .text:0x80399B40; // type:function size:0x60 -fn_80399BA0 = .text:0x80399BA0; // type:function size:0x78 -fn_80399C20 = .text:0x80399C20; // type:function size:0x84 -fn_80399CB0 = .text:0x80399CB0; // type:function size:0x10 +__dt__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399BA0; // type:function size:0x78 +create__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399C20; // type:function size:0x84 +remove__32SndMgrDisposer<14SndMgr80399c20>Fv = .text:0x80399CB0; // type:function size:0x10 fn_80399CC0 = .text:0x80399CC0; // type:function size:0x34 fn_80399D00 = .text:0x80399D00; // type:function size:0x5C fn_80399D60 = .text:0x80399D60; // type:function size:0x44 @@ -21672,7 +21672,7 @@ AIRegisterDMACallback = .text:0x8039AF80; // type:function size:0x44 AIInitDMA = .text:0x8039AFD0; // type:function size:0x7C AIStartDMA = .text:0x8039B050; // type:function size:0x14 AIStopDMA = .text:0x8039B070; // type:function size:0x14 -fn_8039B090 = .text:0x8039B090; // type:function size:0x10 +AIGetDMABytesLeft = .text:0x8039B090; // type:function size:0x10 fn_8039B0A0 = .text:0x8039B0A0; // type:function size:0x18 fn_8039B0C0 = .text:0x8039B0C0; // type:function size:0x10 AICheckInit = .text:0x8039B0D0; // type:function size:0x8 @@ -21695,60 +21695,60 @@ ARCOpenDir = .text:0x8039BE10; // type:function size:0x7C ARCReadDir = .text:0x8039BE90; // type:function size:0xBC ARCCloseDir = .text:0x8039BF50; // type:function size:0x8 AXInit = .text:0x8039BF60; // type:function size:0x54 -fn_8039BFC0 = .text:0x8039BFC0; // type:function size:0x8 -fn_8039BFD0 = .text:0x8039BFD0; // type:function size:0x14 -fn_8039BFF0 = .text:0x8039BFF0; // type:function size:0xAC -fn_8039C0A0 = .text:0x8039C0A0; // type:function size:0xB0 -fn_8039C150 = .text:0x8039C150; // type:function size:0x1C -fn_8039C170 = .text:0x8039C170; // type:function size:0x10 -fn_8039C180 = .text:0x8039C180; // type:function size:0x84 +AXIsInit = .text:0x8039BFC0; // type:function size:0x8 +__AXGetStackHead = .text:0x8039BFD0; // type:function size:0x14 +__AXServiceCallbackStack = .text:0x8039BFF0; // type:function size:0xAC +__AXAllocInit = .text:0x8039C0A0; // type:function size:0xB0 +__AXPushFreeStack = .text:0x8039C150; // type:function size:0x1C +__AXPushCallbackStack = .text:0x8039C170; // type:function size:0x10 +__AXRemoveFromStack = .text:0x8039C180; // type:function size:0x84 AXFreeVoice = .text:0x8039C210; // type:function size:0x7C AXAcquireVoice = .text:0x8039C290; // type:function size:0x184 AXSetVoicePriority = .text:0x8039C420; // type:function size:0x9C -fn_8039C4C0 = .text:0x8039C4C0; // type:function size:0x114 -fn_8039C5E0 = .text:0x8039C5E0; // type:function size:0x34 -fn_8039C620 = .text:0x8039C620; // type:function size:0x1C +__AXAuxInit = .text:0x8039C4C0; // type:function size:0x114 +__AXGetAuxAInput = .text:0x8039C5E0; // type:function size:0x34 +__AXGetAuxAOutput = .text:0x8039C620; // type:function size:0x1C fn_8039C640 = .text:0x8039C640; // type:function size:0x20 fn_8039C660 = .text:0x8039C660; // type:function size:0x20 fn_8039C680 = .text:0x8039C680; // type:function size:0x20 fn_8039C6A0 = .text:0x8039C6A0; // type:function size:0x20 -fn_8039C6C0 = .text:0x8039C6C0; // type:function size:0x34 -fn_8039C700 = .text:0x8039C700; // type:function size:0x1C +__AXGetAuxBInput = .text:0x8039C6C0; // type:function size:0x34 +__AXGetAuxBOutput = .text:0x8039C700; // type:function size:0x1C fn_8039C720 = .text:0x8039C720; // type:function size:0x20 fn_8039C740 = .text:0x8039C740; // type:function size:0x20 fn_8039C760 = .text:0x8039C760; // type:function size:0x20 fn_8039C780 = .text:0x8039C780; // type:function size:0x20 -fn_8039C7A0 = .text:0x8039C7A0; // type:function size:0x34 -fn_8039C7E0 = .text:0x8039C7E0; // type:function size:0x1C -fn_8039C800 = .text:0x8039C800; // type:function size:0x3AC +__AXGetAuxCInput = .text:0x8039C7A0; // type:function size:0x34 +__AXGetAuxCOutput = .text:0x8039C7E0; // type:function size:0x1C +__AXProcessAux = .text:0x8039C800; // type:function size:0x3AC AXRegisterAuxACallback = .text:0x8039CBB0; // type:function size:0x64 AXRegisterAuxBCallback = .text:0x8039CC20; // type:function size:0x64 AXRegisterAuxCCallback = .text:0x8039CC90; // type:function size:0x64 AXGetAuxACallback = .text:0x8039CD00; // type:function size:0x14 AXGetAuxBCallback = .text:0x8039CD20; // type:function size:0x14 AXGetAuxCCallback = .text:0x8039CD40; // type:function size:0x14 -fn_8039CD60 = .text:0x8039CD60; // type:function size:0x8 -fn_8039CD70 = .text:0x8039CD70; // type:function size:0x30 -fn_8039CDA0 = .text:0x8039CDA0; // type:function size:0x9BC -fn_8039D760 = .text:0x8039D760; // type:function size:0x50 +__AXGetCommandListCycles = .text:0x8039CD60; // type:function size:0x8 +__AXGetCommandListAddress = .text:0x8039CD70; // type:function size:0x30 +__AXNextFrame = .text:0x8039CDA0; // type:function size:0x9BC +__AXClInit = .text:0x8039D760; // type:function size:0x50 AXSetMode = .text:0x8039D7B0; // type:function size:0x8 -fn_8039D7C0 = .text:0x8039D7C0; // type:function size:0x8 +AXGetMode = .text:0x8039D7C0; // type:function size:0x8 fn_8039D7D0 = .text:0x8039D7D0; // type:function size:0x8 -fn_8039D7E0 = .text:0x8039D7E0; // type:function size:0x8 -fn_8039D7F0 = .text:0x8039D7F0; // type:function size:0x8 -fn_8039D800 = .text:0x8039D800; // type:function size:0x8 +AXGetAuxAReturnVolume = .text:0x8039D7E0; // type:function size:0x8 +AXGetAuxBReturnVolume = .text:0x8039D7F0; // type:function size:0x8 +AXGetAuxCReturnVolume = .text:0x8039D800; // type:function size:0x8 AXSetMasterVolume = .text:0x8039D810; // type:function size:0x18 AXSetAuxAReturnVolume = .text:0x8039D830; // type:function size:0x8 AXSetAuxBReturnVolume = .text:0x8039D840; // type:function size:0x8 AXSetAuxCReturnVolume = .text:0x8039D850; // type:function size:0x8 -fn_8039D860 = .text:0x8039D860; // type:function size:0x260 -fn_8039DAC0 = .text:0x8039DAC0; // type:function size:0xB0 +__AXOutNewFrame = .text:0x8039D860; // type:function size:0x260 +__AXOutAiCallback = .text:0x8039DAC0; // type:function size:0xB0 fn_8039DB70 = .text:0x8039DB70; // type:function size:0xC fn_8039DB80 = .text:0x8039DB80; // type:function size:0x54 -fn_8039DBE0 = .text:0x8039DBE0; // type:function size:0x10 +__AXDSPDoneCallback = .text:0x8039DBE0; // type:function size:0x10 fn_8039DBF0 = .text:0x8039DBF0; // type:function size:0x4 -fn_8039DC00 = .text:0x8039DC00; // type:function size:0xEC -fn_8039DCF0 = .text:0x8039DCF0; // type:function size:0x1F8 +__AXOutInitDSP = .text:0x8039DC00; // type:function size:0xEC +__AXOutInit = .text:0x8039DCF0; // type:function size:0x1F8 AXRegisterCallback = .text:0x8039DEF0; // type:function size:0x44 AXRmtGetSamplesLeft = .text:0x8039DF40; // type:function size:0x2C AXRmtGetSamples = .text:0x8039DF70; // type:function size:0xC4 @@ -21756,12 +21756,12 @@ AXRmtAdvancePtr = .text:0x8039E040; // type:function size:0x58 fn_8039E0A0 = .text:0x8039E0A0; // type:function size:0xC fn_8039E0B0 = .text:0x8039E0B0; // type:function size:0x6C fn_8039E120 = .text:0x8039E120; // type:function size:0x6C -fn_8039E190 = .text:0x8039E190; // type:function size:0x178 +__AXPrintStudio = .text:0x8039E190; // type:function size:0x178 fn_8039E310 = .text:0x8039E310; // type:function size:0x58 fn_8039E370 = .text:0x8039E370; // type:function size:0x15C fn_8039E4D0 = .text:0x8039E4D0; // type:function size:0x8 fn_8039E4E0 = .text:0x8039E4E0; // type:function size:0x550 -fn_8039EA30 = .text:0x8039EA30; // type:function size:0x310 +__AXSyncPBs = .text:0x8039EA30; // type:function size:0x310 fn_8039ED40 = .text:0x8039ED40; // type:function size:0x8 fn_8039ED50 = .text:0x8039ED50; // type:function size:0x40 fn_8039ED90 = .text:0x8039ED90; // type:function size:0x30 @@ -21771,16 +21771,16 @@ AXSetVoiceAddr = .text:0x8039F0C0; // type:function size:0xE8 AXGetLpfCoefs = .text:0x8039F1B0; // type:function size:0xBC AXSetMaxDspCycles = .text:0x8039F270; // type:function size:0x8 AXGetMaxVoices = .text:0x8039F280; // type:function size:0x8 -fn_8039F290 = .text:0x8039F290; // type:function size:0x40 -fn_8039F2D0 = .text:0x8039F2D0; // type:function size:0x64 -fn_8039F340 = .text:0x8039F340; // type:function size:0x24 -fn_8039F370 = .text:0x8039F370; // type:function size:0x4 -fn_8039F380 = .text:0x8039F380; // type:function size:0x19C -fn_8039F520 = .text:0x8039F520; // type:function size:0x54 -fn_8039F580 = .text:0x8039F580; // type:function size:0x524 -__AllocDelayLine = .text:0x8039FAB0; // type:function size:0x174 -__BzeroDelayLines = .text:0x8039FC30; // type:function size:0x124 -__FreeDelayLine = .text:0x8039FD60; // type:function size:0x114 +__AXGetCurrentProfile = .text:0x8039F290; // type:function size:0x40 scope:local +AXFXReverbHiInit = .text:0x8039F2D0; // type:function size:0x64 +AXFXReverbHiShutdown = .text:0x8039F340; // type:function size:0x24 +AXFXReverbHiCallback = .text:0x8039F370; // type:function size:0x4 +AXFXReverbHiExpInit = .text:0x8039F380; // type:function size:0x19C +AXFXReverbHiExpShutdown = .text:0x8039F520; // type:function size:0x54 +AXFXReverbHiExpCallback = .text:0x8039F580; // type:function size:0x524 +__AllocDelayLine = .text:0x8039FAB0; // type:function size:0x174 scope:local +__BzeroDelayLines = .text:0x8039FC30; // type:function size:0x124 scope:local +__FreeDelayLine = .text:0x8039FD60; // type:function size:0x114 scope:local fn_8039FE80 = .text:0x8039FE80; // type:function size:0x324 AXFXReverbStdExpGetMemSize = .text:0x803A01B0; // type:function size:0x60 AXFXReverbStdExpInit = .text:0x803A0210; // type:function size:0x17C @@ -21788,22 +21788,22 @@ AXFXReverbStdExpSettings = .text:0x803A0390; // type:function size:0xD0 AXFXReverbStdExpSettingsUpdate = .text:0x803A0460; // type:function size:0xB4 AXFXReverbStdExpShutdown = .text:0x803A0520; // type:function size:0x54 AXFXReverbStdExpCallback = .text:0x803A0580; // type:function size:0x36C -fn_803A08F0 = .text:0x803A08F0; // type:function size:0x144 -fn_803A0A40 = .text:0x803A0A40; // type:function size:0x100 -fn_803A0B40 = .text:0x803A0B40; // type:function size:0xF0 -fn_803A0C30 = .text:0x803A0C30; // type:function size:0x2AC +__AllocDelayLine = .text:0x803A08F0; // type:function size:0x144 scope:local +__BzeroDelayLines = .text:0x803A0A40; // type:function size:0x100 scope:local +__FreeDelayLine = .text:0x803A0B40; // type:function size:0xF0 scope:local +__InitParams = .text:0x803A0C30; // type:function size:0x2AC scope:local AXFXReverbStdExpGetMemSizeDpl2 = .text:0x803A0EE0; // type:function size:0x60 AXFXReverbStdExpInitDpl2 = .text:0x803A0F40; // type:function size:0x198 AXFXReverbStdExpSettingsDpl2 = .text:0x803A10E0; // type:function size:0xD0 AXFXReverbStdExpSettingsUpdateDpl2 = .text:0x803A11B0; // type:function size:0xB4 AXFXReverbStdExpShutdownDpl2 = .text:0x803A1270; // type:function size:0x54 AXFXReverbStdExpCallbackDpl2 = .text:0x803A12D0; // type:function size:0x384 -fn_803A1660 = .text:0x803A1660; // type:function size:0x144 -fn_803A17B0 = .text:0x803A17B0; // type:function size:0x100 -fn_803A18B0 = .text:0x803A18B0; // type:function size:0xF0 -fn_803A19A0 = .text:0x803A19A0; // type:function size:0x2B0 -fn_803A1C50 = .text:0x803A1C50; // type:function size:0xC -fn_803A1C60 = .text:0x803A1C60; // type:function size:0xC +__AllocDelayLine = .text:0x803A1660; // type:function size:0x144 scope:local +__BzeroDelayLines = .text:0x803A17B0; // type:function size:0x100 scope:local +__FreeDelayLine = .text:0x803A18B0; // type:function size:0xF0 scope:local +__InitParams = .text:0x803A19A0; // type:function size:0x2B0 scope:local +__AXFXAllocFunction = .text:0x803A1C50; // type:function size:0xC scope:local +__AXFXFreeFunction = .text:0x803A1C60; // type:function size:0xC scope:local AXFXSetHooks = .text:0x803A1C70; // type:function size:0xC AXFXGetHooks = .text:0x803A1C80; // type:function size:0x14 PPCMfmsr = .text:0x803A1CA0; // type:function size:0x8 scope:global @@ -22597,18 +22597,18 @@ fn_803CDC00 = .text:0x803CDC00; // type:function size:0x18 fn_803CDC20 = .text:0x803CDC20; // type:function size:0x70 fn_803CDC90 = .text:0x803CDC90; // type:function size:0x6C MEMGetNextListObject = .text:0x803CDD00; // type:function size:0x20 -dsp__DSPCheckMailToDSP = .text:0x803CDD20; // type:function size:0x10 -dsp__DSPCheckMailFromDSP = .text:0x803CDD30; // type:function size:0x10 -dsp__DSPReadMailFromDSP = .text:0x803CDD40; // type:function size:0x14 -dsp__DSPSendMailToDSP = .text:0x803CDD60; // type:function size:0x14 -dsp__DSPInit = .text:0x803CDD80; // type:function size:0xC0 +DSPCheckMailToDSP = .text:0x803CDD20; // type:function size:0x10 +DSPCheckMailFromDSP = .text:0x803CDD30; // type:function size:0x10 +DSPReadMailFromDSP = .text:0x803CDD40; // type:function size:0x14 +DSPSendMailToDSP = .text:0x803CDD60; // type:function size:0x14 +DSPInit = .text:0x803CDD80; // type:function size:0xC0 fn_803CDE40 = .text:0x803CDE40; // type:function size:0x8 -fn_803CDE50 = .text:0x803CDE50; // type:function size:0x70 +DSPAddTask = .text:0x803CDE50; // type:function size:0x70 fn_803CDEC0 = .text:0x803CDEC0; // type:function size:0xBC -dsp____DSP_debug_printf = .text:0x803CDF80; // type:function size:0x50 +__DSP_debug_printf = .text:0x803CDF80; // type:function size:0x50 fn_803CDFD0 = .text:0x803CDFD0; // type:function size:0x42C -dsp____DSP_exec_task = .text:0x803CE400; // type:function size:0x1A4 -dsp____DSP_boot_task = .text:0x803CE5B0; // type:function size:0x18C +__DSP_exec_task = .text:0x803CE400; // type:function size:0x1A4 +__DSP_boot_task = .text:0x803CE5B0; // type:function size:0x18C fn_803CE740 = .text:0x803CE740; // type:function size:0xA0 fn_803CE7E0 = .text:0x803CE7E0; // type:function size:0x88 ESP_InitLib = .text:0x803CE870; // type:function size:0x54 scope:global @@ -37630,22 +37630,22 @@ __vt__12dCcMassS_Obj = .data:0x80548598; // type:object size:0xC __vt__4dCcS = .data:0x805485A8; // type:object size:0xC lbl_805485B8 = .data:0x805485B8; // type:object size:0xC lbl_805485C4 = .data:0x805485C4; // type:object size:0xC -lbl_805485D0 = .data:0x805485D0; // type:object size:0xA8 -lbl_80548678 = .data:0x80548678; // type:object size:0xC -lbl_80548684 = .data:0x80548684; // type:object size:0x1C -lbl_805486A0 = .data:0x805486A0; // type:object size:0x10 -lbl_805486B0 = .data:0x805486B0; // type:object size:0x60 -lbl_80548710 = .data:0x80548710; // type:object size:0x20 +__vt__9dSndMgr_c = .data:0x805485D0; // type:object size:0xA8 +__vt__22SoundPropertiesChecker = .data:0x80548678; // type:object size:0xC +__vt__11dSndActor_c = .data:0x80548684; // type:object size:0x1C scope:weak +__vt__23IsCurrentSoundIdChecker = .data:0x805486A0; // type:object size:0x10 +__vt__13dSnd3DActor_c = .data:0x805486B0; // type:object size:0x60 +__vt__14dSnd3DEngine_c = .data:0x80548710; // type:object size:0x20 lbl_80548730 = .data:0x80548730; // type:object size:0x28 lbl_80548758 = .data:0x80548758; // type:object size:0x14 data:string lbl_8054876C = .data:0x8054876C; // type:object size:0x14 data:string -lbl_80548780 = .data:0x80548780; // type:object size:0x10 -lbl_80548790 = .data:0x80548790; // type:object size:0x10 +__vt__15dSndPlayerMgr_c = .data:0x80548780; // type:object size:0x10 +__vt__33SndMgrDisposer<15dSndPlayerMgr_c> = .data:0x80548790; // type:object size:0xC lbl_805487A0 = .data:0x805487A0; // type:object size:0xC lbl_805487AC = .data:0x805487AC; // type:object size:0xC lbl_805487B8 = .data:0x805487B8; // type:object size:0xC lbl_805487C4 = .data:0x805487C4; // type:object size:0xC -lbl_805487D0 = .data:0x805487D0; // type:object size:0x10 +__vt__33SndMgrDisposer<15dSnd3DManager_c> = .data:0x805487D0; // type:object size:0xC scope:weak lbl_805487E0 = .data:0x805487E0; // type:object size:0xAC lbl_8054888C = .data:0x8054888C; // type:object size:0xC lbl_80548898 = .data:0x80548898; // type:object size:0xC @@ -37753,8 +37753,8 @@ lbl_8054A488 = .data:0x8054A488; // type:object size:0x1EC lbl_8054A674 = .data:0x8054A674; // type:object size:0xC lbl_8054A680 = .data:0x8054A680; // type:object size:0x150 lbl_8054A7D0 = .data:0x8054A7D0; // type:object size:0xC -lbl_8054A7DC = .data:0x8054A7DC; // type:object size:0x1EC -lbl_8054A9C8 = .data:0x8054A9C8; // type:object size:0x120 +__vt__14dSoundSource_c = .data:0x8054A7DC; // type:object size:0x1EC +__vt__16dSoundSourceIf_c = .data:0x8054A9C8; // type:object size:0x120 lbl_8054AAE8 = .data:0x8054AAE8; // type:object size:0x38 lbl_8054AB20 = .data:0x8054AB20; // type:object size:0x3F8 jumptable_8054AF18 = .data:0x8054AF18; // type:object size:0xA8 scope:local @@ -41887,16 +41887,16 @@ l_start = .sbss:0x80575D18; // type:object size:0x4 data:4byte l_wcsbuf_num = .sbss:0x80575D1C; // type:object size:0x4 data:4byte sInstance__4dCcS = .sbss:0x80575D20; // type:object size:0x4 data:4byte lbl_80575D28 = .sbss:0x80575D28; // type:object size:0x8 data:4byte -lbl_80575D30 = .sbss:0x80575D30; // type:object size:0x8 data:4byte -BGM_MGR = .sbss:0x80575D38; // type:object size:0x4 data:4byte -BGM_MGR_source = .sbss:0x80575D3C; // type:object size:0x4 data:4byte +sInstance__9dSndMgr_c = .sbss:0x80575D30; // type:object size:0x8 data:4byte +sInstance__15dSndPlayerMgr_c = .sbss:0x80575D38; // type:object size:0x4 data:4byte +sDisposer__15dSndPlayerMgr_c = .sbss:0x80575D3C; // type:object size:0x4 data:4byte lbl_80575D40 = .sbss:0x80575D40; // type:object size:0x4 data:4byte lbl_80575D44 = .sbss:0x80575D44; // type:object size:0x4 data:4byte lbl_80575D48 = .sbss:0x80575D48; // type:object size:0x4 data:4byte lbl_80575D4C = .sbss:0x80575D4C; // type:object size:0x4 data:4byte lbl_80575D50 = .sbss:0x80575D50; // type:object size:0x8 data:4byte -lbl_80575D58 = .sbss:0x80575D58; // type:object size:0x4 data:4byte -lbl_80575D5C = .sbss:0x80575D5C; // type:object size:0x4 data:4byte +sInstance__15dSnd3DManager_c = .sbss:0x80575D58; // type:object size:0x4 data:4byte +sDisposer__15dSnd3DManager_c = .sbss:0x80575D5C; // type:object size:0x4 data:4byte lbl_80575D60 = .sbss:0x80575D60; // type:object size:0x4 data:4byte lbl_80575D64 = .sbss:0x80575D64; // type:object size:0x4 data:4byte lbl_80575D68 = .sbss:0x80575D68; // type:object size:0x4 data:4byte @@ -48389,22 +48389,22 @@ lbl_8057D3A4 = .sdata2:0x8057D3A4; // type:object size:0x4 align:4 data:float lbl_8057D3A8 = .sdata2:0x8057D3A8; // type:object size:0x4 align:4 data:float lbl_8057D3AC = .sdata2:0x8057D3AC; // type:object size:0x4 align:4 data:float lbl_8057D3B0 = .sdata2:0x8057D3B0; // type:object size:0x4 align:4 data:float -lbl_8057D3B8 = .sdata2:0x8057D3B8; // type:object size:0x4 align:4 data:float -lbl_8057D3BC = .sdata2:0x8057D3BC; // type:object size:0x4 align:4 data:float -lbl_8057D3C0 = .sdata2:0x8057D3C0; // type:object size:0x4 align:4 data:float -lbl_8057D3C4 = .sdata2:0x8057D3C4; // type:object size:0x4 align:4 data:float -lbl_8057D3C8 = .sdata2:0x8057D3C8; // type:object size:0x4 align:4 data:float -lbl_8057D3CC = .sdata2:0x8057D3CC; // type:object size:0x4 align:4 data:float -lbl_8057D3D0 = .sdata2:0x8057D3D0; // type:object size:0x4 align:4 data:float -lbl_8057D3D4 = .sdata2:0x8057D3D4; // type:object size:0x4 align:4 data:float -lbl_8057D3D8 = .sdata2:0x8057D3D8; // type:object size:0x4 align:4 data:float -lbl_8057D3DC = .sdata2:0x8057D3DC; // type:object size:0x4 align:4 data:float -lbl_8057D3E0 = .sdata2:0x8057D3E0; // type:object size:0x4 align:4 data:float -lbl_8057D3E4 = .sdata2:0x8057D3E4; // type:object size:0x4 align:4 data:float -lbl_8057D3E8 = .sdata2:0x8057D3E8; // type:object size:0x4 align:4 data:float -lbl_8057D3EC = .sdata2:0x8057D3EC; // type:object size:0x4 align:4 data:float -lbl_8057D3F0 = .sdata2:0x8057D3F0; // type:object size:0x4 align:4 data:float -lbl_8057D3F4 = .sdata2:0x8057D3F4; // type:object size:0x4 align:4 data:float +@8273 = .sdata2:0x8057D3B8; // type:object size:0x4 scope:local align:4 data:float +@8274 = .sdata2:0x8057D3BC; // type:object size:0x4 scope:local align:4 data:float +@8275 = .sdata2:0x8057D3C0; // type:object size:0x4 scope:local align:4 data:float +@8276 = .sdata2:0x8057D3C4; // type:object size:0x4 scope:local align:4 data:float +@8344 = .sdata2:0x8057D3C8; // type:object size:0x4 scope:local align:4 data:float +@8345 = .sdata2:0x8057D3CC; // type:object size:0x4 scope:local align:4 data:float +@8346 = .sdata2:0x8057D3D0; // type:object size:0x4 scope:local align:4 data:float +@8347 = .sdata2:0x8057D3D4; // type:object size:0x4 scope:local align:4 data:float +@8348 = .sdata2:0x8057D3D8; // type:object size:0x4 scope:local align:4 data:float +@8349 = .sdata2:0x8057D3DC; // type:object size:0x4 scope:local align:4 data:float +@8364 = .sdata2:0x8057D3E0; // type:object size:0x4 scope:local align:4 data:float +@8365 = .sdata2:0x8057D3E4; // type:object size:0x4 scope:local align:4 data:float +@8485 = .sdata2:0x8057D3E8; // type:object size:0x4 scope:local align:4 data:float +@8486 = .sdata2:0x8057D3EC; // type:object size:0x4 scope:local align:4 data:float +@8487 = .sdata2:0x8057D3F0; // type:object size:0x4 scope:local align:4 data:float +@8488 = .sdata2:0x8057D3F4; // type:object size:0x4 scope:local align:4 data:float lbl_8057D3F8 = .sdata2:0x8057D3F8; // type:object size:0x4 align:4 data:float lbl_8057D3FC = .sdata2:0x8057D3FC; // type:object size:0x4 align:4 data:float lbl_8057D400 = .sdata2:0x8057D400; // type:object size:0x4 align:4 data:float @@ -50394,7 +50394,7 @@ sRumblePreset7__9dRumble_c = .bss:0x805A07CC; // type:object size:0xC data:4byte sRumblePreset8__9dRumble_c = .bss:0x805A07D8; // type:object size:0xC data:4byte sRumblePreset9__9dRumble_c = .bss:0x805A07E4; // type:object size:0xC data:4byte sRumblePreset10__9dRumble_c = .bss:0x805A07F0; // type:object size:0xC data:4byte -@LOCAL@play__9dRumble_cFv@rumble_strings = .bss:0x805A07FC; // type:object size:0x42 scope:local data:byte +@LOCAL@execute__9dRumble_cFv@rumble_strings = .bss:0x805A07FC; // type:object size:0x42 scope:local data:byte @LOCAL@start__9dRumble_cFRC14dRumbleEntry_cUl@rumble_string = .bss:0x805A0840; // type:object size:0x21 scope:local data:byte @LOCAL@getCurrentStageDirectory__22CurrentStageArcManagerFv@sStageDirTmp = .bss:0x805A0868; // type:object size:0x40 scope:local data:byte s_roomArcTmp = .bss:0x805A08A8; // type:object size:0x20 scope:local data:byte diff --git a/configure.py b/configure.py index 43acfd3a..448b5746 100644 --- a/configure.py +++ b/configure.py @@ -702,18 +702,20 @@ config.libs = [ "objects": [ # These are very low quality splits since nobody has figured # out enough detail. Need to look into nw4r::snd first - Object(NonMatching, "d/snd/d_snd.cpp"), - Object(NonMatching, "d/snd/d_snd_actor.cpp"), - Object(NonMatching, "d/snd/d_snd_engine.cpp"), + Object(NonMatching, "d/snd/d_snd_mgr.cpp"), + Object(Matching, "d/snd/d_snd_actor.cpp"), + Object(NonMatching, "d/snd/d_snd_3d_actor.cpp"), + Object(NonMatching, "d/snd/d_snd_3d_engine.cpp"), Object(NonMatching, "d/snd/d_snd_unk_component_1.cpp"), - Object(NonMatching, "d/snd/mgr/d_snd_mgr_bgm.cpp"), + Object(NonMatching, "d/snd/d_snd_player_mgr.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk1.cpp"), - Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk3.cpp"), + Object(Matching, "d/snd/d_snd_3d_manager.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_enemy.cpp"), Object(NonMatching, "d/snd/d_snd_unk_component_2.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_effect.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_5.cpp"), - Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_6.cpp"), + Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_13.cpp"), + Object(NonMatching, "d/snd/d_snd_source.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_7.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_8.cpp"), Object(NonMatching, "d/snd/mgr/d_snd_mgr_unk_9.cpp"), diff --git a/include/d/a/d_a_base.h b/include/d/a/d_a_base.h index e293b927..b223b88a 100644 --- a/include/d/a/d_a_base.h +++ b/include/d/a/d_a_base.h @@ -4,6 +4,7 @@ #include "UnknownTypeBelongings.h" #include "common.h" #include "d/d_base.h" +#include "d/snd/d_snd_source.h" #include "m/m_allocator.h" #include "m/m_angle.h" #include "m/m_vec.h" @@ -13,83 +14,9 @@ class dAcBase_c; struct cBgS_PolyInfo; -struct SoundSource { - virtual ~SoundSource() {} -// TODO there's probably multiple inheritance involved and stuff -#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset(); - - SOUNDSOURCE_VIRTUAL(0x0C); - SOUNDSOURCE_VIRTUAL(0x10); - SOUNDSOURCE_VIRTUAL(0x14); - SOUNDSOURCE_VIRTUAL(0x18); - SOUNDSOURCE_VIRTUAL(0x1C); - SOUNDSOURCE_VIRTUAL(0x20); - SOUNDSOURCE_VIRTUAL(0x24); - SOUNDSOURCE_VIRTUAL(0x28); - SOUNDSOURCE_VIRTUAL(0x2C); - SOUNDSOURCE_VIRTUAL(0x30); - SOUNDSOURCE_VIRTUAL(0x34); - SOUNDSOURCE_VIRTUAL(0x38); - SOUNDSOURCE_VIRTUAL(0x3C); - SOUNDSOURCE_VIRTUAL(0x40); - SOUNDSOURCE_VIRTUAL(0x44); - virtual bool shutdown(); // 0x48 - SOUNDSOURCE_VIRTUAL(0x4C); - SOUNDSOURCE_VIRTUAL(0x50); - SOUNDSOURCE_VIRTUAL(0x54); - SOUNDSOURCE_VIRTUAL(0x58); - SOUNDSOURCE_VIRTUAL(0x5C); - SOUNDSOURCE_VIRTUAL(0x60); - SOUNDSOURCE_VIRTUAL(0x64); - SOUNDSOURCE_VIRTUAL(0x68); - SOUNDSOURCE_VIRTUAL(0x6C); - SOUNDSOURCE_VIRTUAL(0x70); - SOUNDSOURCE_VIRTUAL(0x74); - SOUNDSOURCE_VIRTUAL(0x78); - SOUNDSOURCE_VIRTUAL(0x7C); - SOUNDSOURCE_VIRTUAL(0x80); - SOUNDSOURCE_VIRTUAL(0x84); - SOUNDSOURCE_VIRTUAL(0x88); - SOUNDSOURCE_VIRTUAL(0x8C); - SOUNDSOURCE_VIRTUAL(0x90); - SOUNDSOURCE_VIRTUAL(0x94); - SOUNDSOURCE_VIRTUAL(0x98); - SOUNDSOURCE_VIRTUAL(0x9C); - SOUNDSOURCE_VIRTUAL(0xA0); - SOUNDSOURCE_VIRTUAL(0xA4); - SOUNDSOURCE_VIRTUAL(0xA8); - SOUNDSOURCE_VIRTUAL(0xAC); - SOUNDSOURCE_VIRTUAL(0xB0); - SOUNDSOURCE_VIRTUAL(0xB4); - SOUNDSOURCE_VIRTUAL(0xB8); - SOUNDSOURCE_VIRTUAL(0xBC); - SOUNDSOURCE_VIRTUAL(0xC0); - SOUNDSOURCE_VIRTUAL(0xC4); - SOUNDSOURCE_VIRTUAL(0xC8); - SOUNDSOURCE_VIRTUAL(0xCC); - SOUNDSOURCE_VIRTUAL(0xD0); - SOUNDSOURCE_VIRTUAL(0xD4); - SOUNDSOURCE_VIRTUAL(0xD8); - SOUNDSOURCE_VIRTUAL(0xDC); - SOUNDSOURCE_VIRTUAL(0xE0); - SOUNDSOURCE_VIRTUAL(0xE4); - SOUNDSOURCE_VIRTUAL(0xE8); - SOUNDSOURCE_VIRTUAL(0xEC); - SOUNDSOURCE_VIRTUAL(0xF0); - SOUNDSOURCE_VIRTUAL(0xF4); - SOUNDSOURCE_VIRTUAL(0xF8); - SOUNDSOURCE_VIRTUAL(0xFC); - - virtual bool isReadyMaybe(); // 0x100 - virtual bool load(void *data, const char *name); // 0x104 - virtual void setFrame(f32 frame); // 0x108 - virtual void setRate(f32 frame); // 0x10C - virtual void set_0x164(UNKWORD val); // 0x114 -}; - struct SoundInfo { dAcBase_c *actor; - SoundSource *sound_source; + dSoundSourceIf_c *sound_source; mVec3_c *obj_pos; TListNode mLink; }; @@ -143,7 +70,7 @@ public: /* 0x68 */ mHeapAllocator_c heap_allocator; /* 0x84 */ ObjInfo *obj_info; /* 0x88 */ TList sound_list; - /* 0x94 */ RaiiPtr sound_source; + /* 0x94 */ RaiiPtr sound_source; /* 0x98 */ mVec3_c *obj_pos; /* 0x9C */ mVec3_c pos_copy; /* 0xA8 */ u32 params2; @@ -252,7 +179,7 @@ public: s8 viewClipIdx, ObjInfo *objInfo ); - /* 8002c690 */ SoundSource *FUN_8002c690(); + /* 8002c690 */ dSoundSourceIf_c *FUN_8002c690(); /* 8002c710 */ int initAllocatorWork1Heap(int size, char *name, int align); /* 8002c720 */ int initAllocator(int size, char *name, EGG::Heap *heap, int align); /* 8002c7b0 */ bool addActorToRoom(s32 roomId); @@ -301,7 +228,7 @@ public: /* 8002d810 */ void FUN_8002d810(); /* 8002d830 */ void FUN_8002d830(); /* 8002d860 */ void FUN_8002d860(UNKWORD val); - /* 8002d880 */ SoundSource *getSoundSource(); + /* 8002d880 */ dSoundSourceIf_c *getSoundSource(); // End of SoundSource stuff /* 8002d890 */ void removeSoundInfo(SoundInfo *); diff --git a/include/d/snd/d_snd_3d_actor.h b/include/d/snd/d_snd_3d_actor.h new file mode 100644 index 00000000..6fa7fafa --- /dev/null +++ b/include/d/snd/d_snd_3d_actor.h @@ -0,0 +1,94 @@ +#ifndef D_SND_ACTOR_H +#define D_SND_ACTOR_H + +#include "common.h" +#include "nw4r/math/math_types.h" +#include "nw4r/snd/snd_Sound3DActor.h" +#include "nw4r/snd/snd_SoundHandle.h" + +class dSnd3DActor_c : public nw4r::snd::Sound3DActor { + static const u32 NUM_SOUNDS = 4; + +public: + dSnd3DActor_c(UNKTYPE *, u8); + + virtual ~dSnd3DActor_c() {} + + virtual bool d_vt_0x30() { + return true; + } + + virtual void d_vt_0x34(const nw4r::math::VEC3 &); + + virtual void d_vt_0x38(bool flag, int fadeFrames) = 0; + + virtual UNKWORD d_vt_0x3C() { + return 0; + } + + virtual UNKWORD d_vt_0x40() { + return 0; + } + + virtual UNKWORD d_vt_0x44() { + return 0; + } + + virtual const nw4r::math::VEC3 &getPositionRelativeToPlayer(); + virtual f32 getDistanceToPlayer(); // vt 0x4C + virtual void updatePositionRelativeToPlayer(); // vt 0x50 + virtual void updateDistanceToPlayer(); // vt 0x54 + virtual void d_vt_0x58() = 0; + virtual void d_vt_0x5C() = 0; + + void resetFloats(); + + bool checkFlag(u16 flag) const { + return (mFlags & flag); + } + + bool hasPlayingSounds() const; + bool isPlayingSound(u32 id); + + const char *soundIdToSoundLabel(u32 soundId) const; + u32 soundLabelToSoundId(const char *soundLabel) const; + +protected: + // a_ prefix to prevent multiple inheritance clashes + /* 0x7D */ u8 a_field_0x7D; + /* 0x7E */ u8 a_field_0x7E; + /* 0x7F */ u8 a_field_0x7F; + /* 0x80 */ u8 a_field_0x80; + /* 0x84 */ f32 a_field_0x84; + /* 0x88 */ f32 a_field_0x88; + /* 0x8C */ f32 a_field_0x8C; + /* 0x90 */ f32 a_field_0x90; + /* 0x94 */ f32 a_field_0x94; + /* 0x98 */ f32 a_field_0x98; + /* 0x9C */ f32 a_field_0x9C; + /* 0xA0 */ u8 a_0xA0[0xC8 - 0xA0]; + /* 0xC8 */ UNKTYPE *a_field_0xC8; + /* 0xCC */ u16 mFlags; + /* 0xD0 */ nw4r::math::VEC3 mPositionRelativeToPlayer; + /* 0xDC */ f32 mDistanceToPlayer; + /* 0xE0 */ f32 a_field_0xE0; +}; + +// used at the very least when trying to finish Demise +class IsCurrentSoundIdChecker { +public: + IsCurrentSoundIdChecker(u32 id, bool *pResult) : mSoundId(id), mpResult(pResult) {} + ~IsCurrentSoundIdChecker() {} + + virtual void operator()(nw4r::snd::SoundHandle &pHandle) { + if (mSoundId == pHandle.GetId()) { + *mpResult = true; + } + } + +private: + /* 0x04 */ u32 mSoundId; + /* 0x08 */ bool *mpResult; +}; + +#endif diff --git a/include/d/snd/d_snd_3d_engine.h b/include/d/snd/d_snd_3d_engine.h new file mode 100644 index 00000000..309f169a --- /dev/null +++ b/include/d/snd/d_snd_3d_engine.h @@ -0,0 +1,18 @@ +#ifndef D_SND_3D_ENGINE +#define D_SND_3D_ENGINE + +#include "nw4r/snd/snd_BasicSound.h" +#include "nw4r/snd/snd_Sound3DEngine.h" +#include "nw4r/snd/snd_Sound3DManager.h" + +class dSnd3DEngine_c : public nw4r::snd::Sound3DEngine { +public: + dSnd3DEngine_c(); + + virtual void UpdateAmbientParam( + const nw4r::snd::Sound3DManager *mgr, const nw4r::snd::Sound3DParam *param3d, u32 unk, u32 flags, + nw4r::snd::SoundAmbientParam *paramAmb + ) override; +}; + +#endif diff --git a/include/d/snd/d_snd_3d_manager.h b/include/d/snd/d_snd_3d_manager.h new file mode 100644 index 00000000..b0a86b90 --- /dev/null +++ b/include/d/snd/d_snd_3d_manager.h @@ -0,0 +1,66 @@ +#ifndef D_SND_3D_MANAGER_H +#define D_SND_3D_MANAGER_H + +#include "d/snd/d_snd_3d_engine.h" +#include "d/snd/d_snd_util.h" +#include "egg/gfx/eggCamera.h" +#include "m/m_vec.h" +#include "nw4r/math/math_types.h" +#include "nw4r/snd/snd_Sound3DListener.h" +#include "nw4r/snd/snd_Sound3DManager.h" + +class dSnd3DManager_c; +extern template class SndMgrDisposer; + +class dSnd3DManager_c { +public: + SndMgrDisposer *GetDisposer() { + return &mDisposer; + } + + static dSnd3DManager_c *GetInstance() { + return sInstance; + } + + static dSnd3DManager_c *sInstance; + static SndMgrDisposer *sDisposer; + +private: + SndMgrDisposer mDisposer; + +public: + dSnd3DManager_c(); + + void setup(); + void updateFromCamera(EGG::LookAtCamera &camera); + void setCamDistance(f32 value); + void resetCamDistance(); + void calc(); + void clearState(); + + nw4r::snd::Sound3DManager& getManager() { + return mManager; + } + + const mVec3_c &getListenerPos() const { + return mSoundListenerPosition; + } + +private: + + void updateListenerPos(f32); + /* 0x10 */ bool mIsSetup; + /* 0x11 */ u8 field_0x11; + /* 0x14 */ dSnd3DEngine_c *mpEngine; + /* 0x18 */ nw4r::snd::Sound3DManager mManager; + /* 0x44 */ nw4r::snd::Sound3DListener mListener; + /* 0xB0 */ EGG::LookAtCamera mCamera; + /* 0x138 */ mVec3_c field_0x138; + /* 0x144 */ mVec3_c mSoundListenerPosition; + /* 0x150 */ f32 mCameraPosSqVelocity; + /* 0x154 */ f32 mCameraAtSqVelocity; + /* 0x158 */ f32 mCamDistance; + /* 0x15C */ s16 mTimer; +}; + +#endif diff --git a/include/d/snd/d_snd_actor.h b/include/d/snd/d_snd_actor.h new file mode 100644 index 00000000..5fc2480c --- /dev/null +++ b/include/d/snd/d_snd_actor.h @@ -0,0 +1,12 @@ +#ifndef D_SND_3D_ACTOR_H +#define D_SND_3D_ACTOR_H + +#include "nw4r/snd/snd_SoundActor.h" +#include "nw4r/snd/snd_SoundHandle.h" + +class dSndActor_c : public nw4r::snd::SoundActor { +public: + dSndActor_c(nw4r::snd::SoundArchivePlayer &rPlayer); +}; + +#endif diff --git a/include/d/snd/d_snd_checkers.h b/include/d/snd/d_snd_checkers.h new file mode 100644 index 00000000..c34f881b --- /dev/null +++ b/include/d/snd/d_snd_checkers.h @@ -0,0 +1,22 @@ +#ifndef D_SND_CHECKERS_H +#define D_SND_CHECKERS_H + +#include "nw4r/snd/snd_SoundHandle.h" + +class SoundPropertiesChecker { +public: + virtual void operator()(nw4r::snd::SoundHandle &pHandle); + +private: + /* 0x04 */ u32 mSoundId; + /* 0x08 */ u32 mPlayCounter; + /* 0x0C */ u32 mPauseCounter; + /* 0x10 */ u32 mCounter3; + /* 0x14 */ u32 mCounter4; + /* 0x18 */ u32 *mpPlayCounter; + /* 0x1C */ u32 *mpPauseCounter; + /* 0x20 */ u32 *mpCounter3; + /* 0x24 */ u32 *mpCounter4; +}; + +#endif diff --git a/include/d/snd/d_snd_mgr.h b/include/d/snd/d_snd_mgr.h new file mode 100644 index 00000000..d5606784 --- /dev/null +++ b/include/d/snd/d_snd_mgr.h @@ -0,0 +1,32 @@ +#ifndef D_SND_MGR_H +#define D_SND_MGR_H + +#include "egg/audio/eggAudioMgr.h" +#include "nw4r/snd/snd_SoundArchivePlayer.h" + +class dSndMgr_c : public EGG::SimpleAudioMgr { +public: + dSndMgr_c(); + + virtual void calc() override; + void initialize(EGG::Heap *heap, u32 size); + void initHbm(u32 frame); + + static void restoreEffectsCallback(); + + static dSndMgr_c *GetInstance() { + return sInstance; + } + + static nw4r::snd::SoundArchivePlayer* getPlayer() { + return sInstance->ArcPlayer::getPlayer(); + } + +private: + static dSndMgr_c *sInstance; + + /* 0x6C8 */ u8 _0x6C8[0x6CC - 0x6C8]; + /* 0x6CC */ u8 field_0x6CC; +}; + +#endif diff --git a/include/d/snd/d_snd_player_mgr.h b/include/d/snd/d_snd_player_mgr.h new file mode 100644 index 00000000..2578fcb4 --- /dev/null +++ b/include/d/snd/d_snd_player_mgr.h @@ -0,0 +1,61 @@ +#ifndef D_SND_PLAYER_MGR_H +#define D_SND_PLAYER_MGR_H + +#include "d/snd/d_snd_util.h" +#include "nw4r/snd/snd_MemorySoundArchive.h" +#include "nw4r/snd/snd_SoundArchivePlayer.h" +#include "nw4r/snd/snd_SoundHandle.h" +#include "nw4r/snd/snd_SoundStartable.h" + +class dSndPlayerMgr_c; +extern template class SndMgrDisposer; + +class dSndPlayerMgr_c { +public: + SndMgrDisposer *GetDisposer() { + return &mDisposer; + } + + static dSndPlayerMgr_c *GetInstance() { + return sInstance; + } + + static dSndPlayerMgr_c *sInstance; + static SndMgrDisposer *sDisposer; + +private: + SndMgrDisposer mDisposer; + +public: + dSndPlayerMgr_c(); + + void calc(); + + u32 getFreeSize(); + bool loadDemoArchive(const char *demoArchiveName); + const char *getSoundArchivePath(); + u32 convertLabelStringToSoundId(const char *label) const; + nw4r::snd::SoundArchivePlayer &getSoundArchivePlayerForType(u8 type); + + bool checkFlag(u32 mask) const { + return mFlags & mask; + } + +private: + /* 0x010 */ u8 field_0x010; + /* 0x011 */ u8 field_0x011; + /* 0x014 */ s32 field_0x014; + /* 0x018 */ s32 field_0x018; + /* 0x01C */ s32 field_0x01C; + /* 0x020 */ u32 mFlags; + + virtual nw4r::snd::SoundStartable::StartResult + startSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const nw4r::snd::SoundStartable::StartInfo *pStartInfo); + virtual nw4r::snd::SoundStartable::StartResult + startSound(nw4r::snd::SoundHandle *pHandle, const char *soundLabel, const nw4r::snd::SoundStartable::StartInfo *pStartInfo); + + /* 0x028 */ nw4r::snd::MemorySoundArchive mSoundArchive; + /* 0x178 */ nw4r::snd::SoundArchivePlayer mSoundArchivePlayer; +}; + +#endif diff --git a/include/d/snd/d_snd_source.h b/include/d/snd/d_snd_source.h new file mode 100644 index 00000000..65d8be13 --- /dev/null +++ b/include/d/snd/d_snd_source.h @@ -0,0 +1,167 @@ +#ifndef D_SOUND_SOURCE_H +#define D_SOUND_SOURCE_H + +#include "common.h" +#include "d/snd/d_snd_3d_actor.h" +#include "nw4r/ut/ut_list.h" + + +class dAcBase_c; + +class dSoundSourceIf_c { +public: + virtual ~dSoundSourceIf_c() {} +#define SOUNDSOURCE_VIRTUAL(offset) virtual void vt_##offset() = 0; + SOUNDSOURCE_VIRTUAL(0x0C); + SOUNDSOURCE_VIRTUAL(0x10); + SOUNDSOURCE_VIRTUAL(0x14); + SOUNDSOURCE_VIRTUAL(0x18); + SOUNDSOURCE_VIRTUAL(0x1C); + SOUNDSOURCE_VIRTUAL(0x20); + SOUNDSOURCE_VIRTUAL(0x24); + SOUNDSOURCE_VIRTUAL(0x28); + SOUNDSOURCE_VIRTUAL(0x2C); + SOUNDSOURCE_VIRTUAL(0x30); + SOUNDSOURCE_VIRTUAL(0x34); + SOUNDSOURCE_VIRTUAL(0x38); + SOUNDSOURCE_VIRTUAL(0x3C); + SOUNDSOURCE_VIRTUAL(0x40); + SOUNDSOURCE_VIRTUAL(0x44); + virtual bool hasPlayingSounds() const = 0; // 0x48 + SOUNDSOURCE_VIRTUAL(0x4C); + SOUNDSOURCE_VIRTUAL(0x50); + SOUNDSOURCE_VIRTUAL(0x54); + SOUNDSOURCE_VIRTUAL(0x58); + SOUNDSOURCE_VIRTUAL(0x5C); + SOUNDSOURCE_VIRTUAL(0x60); + SOUNDSOURCE_VIRTUAL(0x64); + SOUNDSOURCE_VIRTUAL(0x68); + SOUNDSOURCE_VIRTUAL(0x6C); + SOUNDSOURCE_VIRTUAL(0x70); + SOUNDSOURCE_VIRTUAL(0x74); + SOUNDSOURCE_VIRTUAL(0x78); + SOUNDSOURCE_VIRTUAL(0x7C); + SOUNDSOURCE_VIRTUAL(0x80); + SOUNDSOURCE_VIRTUAL(0x84); + SOUNDSOURCE_VIRTUAL(0x88); + SOUNDSOURCE_VIRTUAL(0x8C); + SOUNDSOURCE_VIRTUAL(0x90); + SOUNDSOURCE_VIRTUAL(0x94); + SOUNDSOURCE_VIRTUAL(0x98); + SOUNDSOURCE_VIRTUAL(0x9C); + SOUNDSOURCE_VIRTUAL(0xA0); + SOUNDSOURCE_VIRTUAL(0xA4); + SOUNDSOURCE_VIRTUAL(0xA8); + SOUNDSOURCE_VIRTUAL(0xAC); + SOUNDSOURCE_VIRTUAL(0xB0); + SOUNDSOURCE_VIRTUAL(0xB4); + SOUNDSOURCE_VIRTUAL(0xB8); + SOUNDSOURCE_VIRTUAL(0xBC); + SOUNDSOURCE_VIRTUAL(0xC0); + SOUNDSOURCE_VIRTUAL(0xC4); + SOUNDSOURCE_VIRTUAL(0xC8); + SOUNDSOURCE_VIRTUAL(0xCC); + SOUNDSOURCE_VIRTUAL(0xD0); + SOUNDSOURCE_VIRTUAL(0xD4); + SOUNDSOURCE_VIRTUAL(0xD8); + SOUNDSOURCE_VIRTUAL(0xDC); + SOUNDSOURCE_VIRTUAL(0xE0); + SOUNDSOURCE_VIRTUAL(0xE4); + SOUNDSOURCE_VIRTUAL(0xE8); + SOUNDSOURCE_VIRTUAL(0xEC); + SOUNDSOURCE_VIRTUAL(0xF0); + SOUNDSOURCE_VIRTUAL(0xF4); + SOUNDSOURCE_VIRTUAL(0xF8); + SOUNDSOURCE_VIRTUAL(0xFC); + + virtual bool isReadyMaybe() = 0; // 0x100 + virtual bool load(void *data, const char *name) = 0; // 0x104 + virtual void setFrame(f32 frame) = 0; // 0x108 + virtual void setRate(f32 frame) = 0; // 0x10C + virtual void set_0x164(UNKWORD val) = 0; // 0x114 + + SOUNDSOURCE_VIRTUAL(0x118); + SOUNDSOURCE_VIRTUAL(0x11C); +}; + +class dSoundSource_c : public dSoundSourceIf_c, public dSnd3DActor_c { +public: + dSoundSource_c(u8, dAcBase_c *, UNKWORD, UNKWORD); + virtual ~dSoundSource_c(); + + u32 getRemoConSoundVariant(u32 soundId) const; + + // This is where it gets a bit wild and this class starts mixing in overrides between + // new virtual functions, which causes the vtable to list these functions in exactly this + // order. + virtual void d_s_vt_0x17C(); + virtual void d_s_vt_0x180(); + virtual void d_s_vt_0x184(); + virtual void d_s_vt_0x188(); + virtual void d_s_vt_0x18C(); + virtual void d_s_vt_0x190(); + virtual void d_s_vt_0x194(); + + virtual void d_vt_0x58() override; + + virtual void d_s_vt_0x19C(); + virtual void d_s_vt_0x1A0(); + + virtual void d_vt_0x5C() override; + virtual StartResult + SetupSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const StartInfo *pStartInfo, void *) override; + + virtual void d_s_vt_0x1AC(); + virtual void d_s_vt_0x1B0(); + virtual void d_s_vt_0x1B4(); + virtual void d_s_vt_0x1B8(); + virtual void d_s_vt_0x1BC(); + virtual void d_s_vt_0x1C0(); + virtual void d_s_vt_0x1C4(bool flag, int fadeFrames); + virtual void d_s_vt_0x1C8(); + virtual void d_s_vt_0x1CC(); + + virtual void d_vt_0x38(bool flag, int fadeFrames) override; + + virtual void d_s_vt_0x1D4(); + virtual void d_s_vt_0x1D8(); + virtual void d_s_vt_0x1DC(); + virtual void d_s_vt_0x1E0(); + virtual void d_s_vt_0x1E4(); + virtual void d_s_vt_0x1E8(); + + // Overrides of dSoundSourceIf_c + virtual bool hasPlayingSounds() const override; + +private: + // at 0x00: dSoundSourceIf_c vtable + // at 0x04: dSnd3DActor_c sub-object + // at 0x58: thunk-vtable + /* 0xE8 */ u8 field_0xE8[0xF0 - 0xE8]; + + /* 0x0F0 */ UNKWORD field_0x0F0; + /* 0x0F4 */ UNKWORD field_0x0F4; + /* 0x0F8 */ dAcBase_c *mpPlayer; + /* 0x0FC */ u8 field_0x0FC; + /* 0x0FD */ u8 field_0x0FD; + /* 0x0FE */ u8 field_0x0FE; + /* 0x0FF */ u8 field_0x0FF; + /* 0x100 */ u8 field_0x100; + /* 0x101 */ u8 field_0x101; + /* 0x102 */ u8 field_0x102; + /* 0x104 */ UNKWORD field_0x104; + /* 0x108 */ UNKWORD field_0x108; + /* 0x10C */ UNKWORD field_0x10C; + /* 0x110 */ nw4r::ut::List field_0x110; // node offset 0xEC + /* 0x11C */ UNKWORD field_0x11C; + /* 0x120 */ nw4r::ut::List field_0x120; // node offset 0x4 + /* 0x12C */ nw4r::ut::List field_0x12C; // node offset 0x4 + /* 0x138 */ nw4r::ut::Node mNode; + /* 0x140 */ UNKWORD field_0x140; + /* 0x144 */ u8 _0x144[0x154 - 0x144]; + /* 0x154 */ UNKWORD field_0x154; + /* 0x158 */ s16 field_0x158; + /* 0x15A */ s16 field_0x15A; +}; + +#endif diff --git a/include/d/snd/d_snd_util.h b/include/d/snd/d_snd_util.h new file mode 100644 index 00000000..164ae3df --- /dev/null +++ b/include/d/snd/d_snd_util.h @@ -0,0 +1,42 @@ +#ifndef D_SND_UTIL_H +#define D_SND_UTIL_H + +#include "common.h" +#include "egg/core/eggDisposer.h" + +// This setup is only inferred. d/snd uses it all over the place. +// This works for dSndPlayerMgr_c, which has a vtable of its own but the Disposer at offset 0. +// It also works for the factory at 0x80399c20, which calls a base class ctor, +// an inline ctor, and has the Disposer at offset 0x18 + +template +struct SndMgrDisposer : public EGG::Disposer { + virtual ~SndMgrDisposer(); + + static T *create(); + static void remove(); +}; + +template +SndMgrDisposer::~SndMgrDisposer() { + if (this == T::sDisposer) { + remove(); + } +} + +template +T *SndMgrDisposer::create() { + if (T::sInstance == nullptr) { + T::sInstance = new T(); + T::sDisposer = T::sInstance->GetDisposer(); + } + return T::sInstance; +} + +template +void SndMgrDisposer::remove() { + T::sInstance = nullptr; + T::sDisposer = nullptr; +} + +#endif diff --git a/include/egg/audio/eggAudioArcPlayerMgr.h b/include/egg/audio/eggAudioArcPlayerMgr.h index 49673250..f9b982c0 100644 --- a/include/egg/audio/eggAudioArcPlayerMgr.h +++ b/include/egg/audio/eggAudioArcPlayerMgr.h @@ -26,12 +26,20 @@ public: void stopAllSound(); u32 changeNameToId(const char *name) { - return mOpenSndArchive->ConvertLabelStringToSoundId(name); + u32 id = -1; + if (mOpenSndArchive != nullptr) { + id = mOpenSndArchive->ConvertLabelStringToSoundId(name); + } + return id; } nw4r::snd::SoundArchivePlayer *getPlayer() { return mActiveSndArchivePlayer; } + nw4r::snd::SoundArchive *getArchive() { + return mOpenSndArchive; + } + void setLoadStringLabels(bool bLoad) { mLoadLabelStringData = bLoad; } @@ -65,12 +73,7 @@ public: virtual bool startSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x40 { - u32 id = -1; - if (mOpenSndArchive) { - id = changeNameToId(name); - } - - return ArcPlayer::startSound(handle, id); + return ArcPlayer::startSound(handle, changeNameToId(name)); } virtual bool prepareSound(nw4r::snd::SoundHandle *handle, u32 id) // at 0x44 @@ -85,12 +88,7 @@ public: virtual bool prepareSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x4C { - u32 id = -1; - if (mOpenSndArchive) { - id = changeNameToId(name); - } - - return ArcPlayer::prepareSound(handle, id); + return ArcPlayer::prepareSound(handle, changeNameToId(name)); } virtual bool holdSound(nw4r::snd::SoundHandle *handle, u32 id) // at 0x50 @@ -105,12 +103,7 @@ public: virtual bool holdSound(nw4r::snd::SoundHandle *handle, const char *name) // at 0x58 { - u32 id = -1; - if (mOpenSndArchive) { - id = changeNameToId(name); - } - - return ArcPlayer::holdSound(handle, id); + return ArcPlayer::holdSound(handle, changeNameToId(name)); } private: diff --git a/include/egg/audio/eggAudioHeapMgr.h b/include/egg/audio/eggAudioHeapMgr.h index fa8ef361..9fd269cc 100644 --- a/include/egg/audio/eggAudioHeapMgr.h +++ b/include/egg/audio/eggAudioHeapMgr.h @@ -21,9 +21,38 @@ public: ~SoundHeapMgr() { destroySoundHeap(); } - virtual bool loadState(s32 id) {} - virtual int getCurrentLevel() {} - virtual void stateProc() {} + int saveState() { + return mSoundHeap.SaveState(); + } + virtual bool loadState(s32 id) { + s32 level = mSoundHeap.GetCurrentLevel(); + if (id > 0 && level >= id) { + mSoundHeap.LoadState(id); + return true; + } else { + return false; + } + } + virtual int getCurrentLevel() { + return mSoundHeap.GetCurrentLevel(); + } + virtual void stateProc() { + OSMessage msg; + if (OSReceiveMessage(&mQueue1.mQueue, &msg, 0)) { + bool ok = loadState((s32)msg); + OSSendMessage(&mQueue3.mQueue, (OSMessage)ok, 0); + } + + if (OSReceiveMessage(&mQueue2.mQueue, &msg, 0)) { + int ok = mSoundHeap.SaveState(); + OSSendMessage(&mQueue3.mQueue, (OSMessage)ok, 0); + } + + if (OSReceiveMessage(&mQueue, &msg, 0)) { + int level = getCurrentLevel(); + OSSendMessage(&mQueue3.mQueue, (OSMessage)level, 0); + } + } void createSoundHeap(Allocator *allocator, u32 size); void destroySoundHeap(); @@ -34,7 +63,9 @@ public: private: nw4r::snd::SoundHeap mSoundHeap; - u8 unk[0x68 - 0x38]; + // I guess we're not initializing this queue? + OSMessageQueue mQueue; + OSMessage mBuffer[4]; SoundMessageQueue mQueue1; SoundMessageQueue mQueue2; SoundMessageQueue mQueue3; diff --git a/include/egg/audio/eggAudioUtility.h b/include/egg/audio/eggAudioUtility.h index 6a56ea66..7abb95b9 100644 --- a/include/egg/audio/eggAudioUtility.h +++ b/include/egg/audio/eggAudioUtility.h @@ -12,7 +12,7 @@ namespace EGG { struct MultiArcSimpleAudioMgr { u8 field_0x000[0x0FC - 0x000]; s32 field_0x0FC; - ArcPlayer players[]; + ArcPlayer players[1]; nw4r::snd::SoundArchivePlayer *getPlayer(int i) { return players[i].getPlayer(); diff --git a/include/egg/core/eggDvdRipper.h b/include/egg/core/eggDvdRipper.h index 82fd09b2..8f4b4b48 100644 --- a/include/egg/core/eggDvdRipper.h +++ b/include/egg/core/eggDvdRipper.h @@ -6,7 +6,6 @@ #include "egg/core/eggHeap.h" #include "egg/core/eggStreamDecomp.h" - namespace EGG { class DvdRipper { @@ -28,6 +27,29 @@ public: typedef void (*UnkCallback)(void *); public: + // Not sure + struct Arg { + Arg(const char *path, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize) + : path(path), + pOut(pOut), + pHeap(pHeap), + allocDir(allocDir), + offset(offset), + pRead(pRead), + fileSize(fileSize) {} + const char *path; + u8 *pOut; + Heap *pHeap; + EAllocDirection allocDir; + u32 offset; + u32 *pRead; + u32 *fileSize; + }; + + static u8 *loadToMainRAM(Arg &arg) { + return loadToMainRAM(arg.path, arg.pOut, arg.pHeap, arg.allocDir, arg.offset, arg.pRead, arg.fileSize); + } + static u8 * loadToMainRAM(s32 entryNum, u8 *pOut, Heap *pHeap, EAllocDirection allocDir, u32 offset, u32 *pRead, u32 *fileSize); diff --git a/include/egg/gfx/eggCamera.h b/include/egg/gfx/eggCamera.h index c3104fb7..67c3853d 100644 --- a/include/egg/gfx/eggCamera.h +++ b/include/egg/gfx/eggCamera.h @@ -35,6 +35,15 @@ protected: class LookAtCamera : public BaseCamera { public: LookAtCamera() : mPos(0.0f, 10.0f, 0.0f), mAt(0.0f, 0.0f, 0.0f), mUp(0.0f, 1.0f, 0.0f) {} + + LookAtCamera& operator=(const LookAtCamera &other) { + mViewMtx.copyFrom(other.mViewMtx); + mOtherMtx.copyFrom(other.mOtherMtx); + mPos = other.mPos; + mAt = other.mAt; + mUp = other.mUp; + return *this; + } // Which way around? virtual Matrix34f &getViewMatrix() override { return mViewMtx; @@ -53,7 +62,15 @@ public: virtual void doDraw() override; virtual Matrix34f &getViewMatrixOld() override; -protected: + Vector3f getDirection() const { + return mAt - mPos; + } + + Vector3f getOtherDirection() const { + return mPos - mAt; + } + +public: /* 0x64 */ Vector3f mPos; /* 0x70 */ Vector3f mAt; /* 0x7C */ Vector3f mUp; diff --git a/include/egg/math/eggMatrix.h b/include/egg/math/eggMatrix.h index a99a0698..d16f2865 100644 --- a/include/egg/math/eggMatrix.h +++ b/include/egg/math/eggMatrix.h @@ -4,6 +4,7 @@ #include "common.h" #include "egg/math/eggQuat.h" #include "egg/math/eggVector.h" +#include "nw4r/math/math_types.h" namespace EGG { @@ -55,6 +56,14 @@ struct Matrix34f { void multiplyTo(const Matrix34f &m2, Matrix34f &to) const; void dump(); + operator nw4r::math::MTX34 *() { + return (nw4r::math::MTX34 *)this; + } + + operator const nw4r::math::MTX34 *() const { + return (nw4r::math::MTX34 *)this; + } + public: void concat(const Matrix34f &, Matrix34f &) const; void rotate(const Vector3f &rpy) const; diff --git a/include/nw4r/lyt/lyt_layout.h b/include/nw4r/lyt/lyt_layout.h index dd988c4b..543065fb 100644 --- a/include/nw4r/lyt/lyt_layout.h +++ b/include/nw4r/lyt/lyt_layout.h @@ -2,11 +2,11 @@ #define NW4R_LYT_LAYOUT_H #include "common.h" -#include "new.h" #include "nw4r/lyt/lyt_animation.h" #include "nw4r/lyt/lyt_types.h" #include "rvl/MEM/mem_allocator.h" +#include namespace nw4r { namespace lyt { diff --git a/include/nw4r/snd/snd_BasicSound.h b/include/nw4r/snd/snd_BasicSound.h index 8fc57508..b3629b19 100644 --- a/include/nw4r/snd/snd_BasicSound.h +++ b/include/nw4r/snd/snd_BasicSound.h @@ -327,40 +327,40 @@ namespace nw4r { namespace snd { namespace detail ExternalSoundPlayer *mExtSoundPlayer; // size 0x04, offset 0x18 AmbientInfo mAmbientInfo; // size 0x14, offset 0x1c SoundParam mAmbientParam; // size 0x24, offset 0x30 - SoundActorParam mActorParam; // size 0x0c, offset 0x54 - MoveValue mFadeVolume; // size 0x10, offset 0x60 - MoveValue mPauseFadeVolume; // size 0x10, offset 0x70 - bool mStartFlag; // size 0x01, offset 0x80 - bool mStartedFlag; // size 0x01, offset 0x81 - bool mAutoStopFlag; // size 0x01, offset 0x82 - bool mFadeOutFlag; // size 0x01, offset 0x83 - PauseState mPauseState; // size 0x04, offset 0x84 - bool mUnPauseFlag; // size 0x01, offset 0x88 + SoundActorParam mActorParam; // size 0x0c, offset 0x58 + MoveValue mFadeVolume; // size 0x10, offset 0x64 + MoveValue mPauseFadeVolume; // size 0x10, offset 0x74 + bool mStartFlag; // size 0x01, offset 0x84 + bool mStartedFlag; // size 0x01, offset 0x85 + bool mAutoStopFlag; // size 0x01, offset 0x86 + bool mFadeOutFlag; // size 0x01, offset 0x87 + PauseState mPauseState; // size 0x04, offset 0x88 + bool mUnPauseFlag; // size 0x01, offset 0x8c /* 3 bytes padding */ - s32 mAutoStopCounter; // size 0x04, offset 0x8c - u32 mUpdateCounter; // size 0x04, offset 0x90 - u8 mPriority; // size 0x01, offset 0x94 - u8 mVoiceOutCount; // size 0x01, offset 0x95 - u8 mBiquadFilterType; // size 0x01, offset 0x96 + s32 mAutoStopCounter; // size 0x04, offset 0x90 + u32 mUpdateCounter; // size 0x04, offset 0x94 + u8 mPriority; // size 0x01, offset 0x98 + u8 mVoiceOutCount; // size 0x01, offset 0x99 + u8 mBiquadFilterType; // size 0x01, offset 0x9a /* 1 byte padding */ - u32 mId; // size 0x04, offset 0x98 - MoveValue mExtMoveVolume; // size 0x10, offset 0x9c - f32 mInitVolume; // size 0x04, offset 0xac - f32 mExtPan; // size 0x04, offset 0xb0 - f32 mExtSurroundPan; // size 0x04, offset 0xb4 - f32 mExtPitch; // size 0x04, offset 0xb8 - f32 mLpfFreq; // size 0x04, offset 0xbc - f32 mBiquadFilterValue; // size 0x04, offset 0xc0 - int mOutputLineFlag; // size 0x04, offset 0xc4 - f32 mMainOutVolume; // size 0x04, offset 0xc8 - f32 mMainSend; // size 0x04, offset 0xcc - f32 mFxSend[AUX_BUS_NUM]; // size 0x0c, offset 0xd0 - f32 mRemoteOutVolume[4]; // size 0x10, offset 0xdc + u32 mId; // size 0x04, offset 0x9c + MoveValue mExtMoveVolume; // size 0x10, offset 0xa0 + f32 mInitVolume; // size 0x04, offset 0xb0 + f32 mExtPan; // size 0x04, offset 0xb4 + f32 mExtSurroundPan; // size 0x04, offset 0xb8 + f32 mExtPitch; // size 0x04, offset 0xbc + f32 mLpfFreq; // size 0x04, offset 0xc0 + f32 mBiquadFilterValue; // size 0x04, offset 0xc4 + int mOutputLineFlag; // size 0x04, offset 0xc8 + f32 mMainOutVolume; // size 0x04, offset 0xcc + f32 mMainSend; // size 0x04, offset 0xd0 + f32 mFxSend[AUX_BUS_NUM]; // size 0x0c, offset 0xd4 + f32 mRemoteOutVolume[4]; // size 0x10, offset 0xe0 public: - ut::LinkListNode mPriorityLink; // size 0x08, offset 0xe0 - ut::LinkListNode mSoundPlayerPlayLink; // size 0x08, offset 0xe8 - ut::LinkListNode mSoundPlayerPriorityLink; // size 0x08, offset 0xf0 - ut::LinkListNode mExtSoundPlayerPlayLink; // size 0x08, offset 0xf8 + ut::LinkListNode mPriorityLink; // size 0x08, offset 0xf0 + ut::LinkListNode mSoundPlayerPlayLink; // size 0x08, offset 0xf8 + ut::LinkListNode mSoundPlayerPriorityLink; // size 0x08, offset 0x100 + ut::LinkListNode mExtSoundPlayerPlayLink; // size 0x08, offset 0x108 // friends private: diff --git a/include/nw4r/snd/snd_Sound3DActor.h b/include/nw4r/snd/snd_Sound3DActor.h index a748bddd..168fafa6 100644 --- a/include/nw4r/snd/snd_Sound3DActor.h +++ b/include/nw4r/snd/snd_Sound3DActor.h @@ -21,8 +21,15 @@ public: // AmbientArgUpdateCallback virtual void at_0x0c(void *arg, detail::BasicSound* sound) override; + const nw4r::math::VEC3 &GetPosition() const { + return mPosition; + } void SetPosition(const math::VEC3 &rPosition); + void SetUserParam(u32 userParam) { + mUserParam = userParam; + } + private: static void ClearUpdateCallback(SoundHandle &rHandle); diff --git a/include/nw4r/snd/snd_Sound3DEngine.h b/include/nw4r/snd/snd_Sound3DEngine.h index e643d5f5..abab43f6 100644 --- a/include/nw4r/snd/snd_Sound3DEngine.h +++ b/include/nw4r/snd/snd_Sound3DEngine.h @@ -19,7 +19,7 @@ public: virtual void UpdateAmbientParam(const Sound3DManager*, const Sound3DParam*, u32, int, SoundAmbientParam*); virtual s32 GetAmbientPriority(const Sound3DManager*, const Sound3DParam*, u32); virtual s32 GetRequiredVoiceOutCount(const Sound3DManager*, const Sound3DParam*, u32); - virtual void UpdateAmbientParam(const Sound3DManager*, const Sound3DParam*, u32, u32, SoundAmbientParam*); + virtual void UpdateAmbientParam(const Sound3DManager*, const Sound3DParam*, u32, u32 flags, SoundAmbientParam*); private: Sound3DCalculator::CalcPanParam mPanParam; // at 0x04 diff --git a/include/nw4r/snd/snd_Sound3DManager.h b/include/nw4r/snd/snd_Sound3DManager.h index 9bfa470c..1c370eef 100644 --- a/include/nw4r/snd/snd_Sound3DManager.h +++ b/include/nw4r/snd/snd_Sound3DManager.h @@ -68,10 +68,18 @@ public: return field_0x20; } + void SetField0x20(f32 value) { + field_0x20 = value; + } + f32 GetField0x24() const { return field_0x24; } + void SetField0x24(f32 value) { + field_0x24 = value; + } + void SetEngine(Sound3DEngine *engine); enum ParamDecayCurve { diff --git a/include/nw4r/snd/snd_SoundHandle.h b/include/nw4r/snd/snd_SoundHandle.h index e400a441..cf1ed317 100644 --- a/include/nw4r/snd/snd_SoundHandle.h +++ b/include/nw4r/snd/snd_SoundHandle.h @@ -39,6 +39,10 @@ namespace nw4r { namespace snd mSound->Stop(0); } + bool IsPause() const { + return IsAttachedSound() && mSound->IsPause(); + } + u32 GetId() const { if (IsAttachedSound()) diff --git a/include/sized_string.h b/include/sized_string.h index dc711238..44e26ebe 100644 --- a/include/sized_string.h +++ b/include/sized_string.h @@ -5,6 +5,7 @@ #include "common.h" #include "string.h" #include "wstring.h" +#include "printf.h" extern "C" bool strequals(const char *a, const char *b); diff --git a/include/sound_mgrs/sound_audio_manager.h b/include/sound_mgrs/sound_audio_manager.h deleted file mode 100644 index 1bfe885c..00000000 --- a/include/sound_mgrs/sound_audio_manager.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef SOUND_AUDIO_MANAGER_H -#define SOUND_AUDIO_MANAGER_H - -#include "common.h" -#include "egg/audio/eggAudioMgr.h" - - -// Size: 0x6d0 -class SndAudioMgr : public EGG::SimpleAudioMgr { -public: -}; - -#endif diff --git a/include/toBeSorted/d_d3d.h b/include/toBeSorted/d_d3d.h index 07e9505d..76cbd010 100644 --- a/include/toBeSorted/d_d3d.h +++ b/include/toBeSorted/d_d3d.h @@ -91,14 +91,14 @@ public: return create2(ac, mdlFile, mdlName, anmName, callback, bufferOption); } - void setSoundSource(SoundSource *pSource); + void setSoundSource(dSoundSourceIf_c *pSource); protected: bool loadSounds(const char *name); void syncAnmFrame(); void setSoundRate(f32 rate); - /* 0x68 */ SoundSource *mpSoundSource; + /* 0x68 */ dSoundSourceIf_c *mpSoundSource; /* 0x6C */ void *mpSoundData; }; diff --git a/include/toBeSorted/music_mgrs.h b/include/toBeSorted/music_mgrs.h index 476c1293..aad42969 100644 --- a/include/toBeSorted/music_mgrs.h +++ b/include/toBeSorted/music_mgrs.h @@ -2,16 +2,18 @@ #define MUSIC_MGRS_H #include "common.h" +#include "d/snd/d_snd_player_mgr.h" -class BgmMgr; +class dSndPlayerMgr_c; -extern "C" BgmMgr *BGM_MGR; +#define BGM_MGR (dSndPlayerMgr_c::GetInstance()) extern "C" void fn_8035E000(); -extern "C" void fn_8035E860(BgmMgr *); -extern "C" void fn_8035E310(BgmMgr *); -extern "C" void fn_8035E820(BgmMgr *); -extern "C" void fn_8035E880(BgmMgr *); -extern "C" void fn_8035E790(BgmMgr *, UNKWORD, void *); +extern "C" void fn_8035E860(dSndPlayerMgr_c *); +extern "C" void fn_8035E310(dSndPlayerMgr_c *); +extern "C" void fn_8035E820(dSndPlayerMgr_c *); +extern "C" void fn_8035E880(dSndPlayerMgr_c *); +extern "C" void fn_8035E790(dSndPlayerMgr_c *, UNKWORD, void *); +extern "C" bool fn_8035ED90(dSndPlayerMgr_c *, u8); extern "C" void *ENEMY_SOUND_MGR; extern "C" void fn_80362150(void *, u16); @@ -21,6 +23,8 @@ extern "C" void fn_80362730(void *); extern "C" void fn_80365D20(void *); extern "C" void fn_803624F0(void *); extern "C" void fn_80364FD0(void *, s32); +extern "C" bool fn_80364DA0(void *); +extern "C" void fn_80364D00(void*, s32); extern "C" void *ENEMY_BGM_RELATED_MGR; extern "C" void fn_80384570(void *, bool); @@ -28,5 +32,10 @@ extern "C" void fn_803858D0(void *); extern "C" void *FANFARE_SOUND_MGR; extern "C" void AnotherSoundMgr__playSound(void *, s32); +extern "C" bool fn_803721F0(void *, u32); +extern "C" bool fn_803720E0(void *, u32); +extern "C" bool fn_80372070(void *, u32); +extern "C" bool fn_803734C0(void *, u32); +extern "C" bool fn_80373550(void *, u32); #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath index d6685a2a..acb717c7 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cmath @@ -66,5 +66,12 @@ inline float sqrtf(float x) { } // namespace std +#define _HUGE_ENUF 1e+300 +#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF)) +#define HUGE_VAL ((double)INFINITY) +#define HUGE_VALL ((long double)INFINITY) + +#define DOUBLE_INF HUGE_VAL + #endif #endif diff --git a/src/REL/d/t/d_t_sound_area.cpp b/src/REL/d/t/d_t_sound_area.cpp index ca60e02f..46112c97 100644 --- a/src/REL/d/t/d_t_sound_area.cpp +++ b/src/REL/d/t/d_t_sound_area.cpp @@ -3,6 +3,7 @@ #include "d/a/d_a_player.h" #include "d/a/obj/d_a_obj_base.h" #include "d/col/c/c_m3d_g_cps.h" +#include "d/snd/d_snd_3d_manager.h" #include "d/t/d_t_sound_area_mgr.h" #include "rvl/MTX.h" // IWYU pragma: export @@ -45,20 +46,13 @@ int dTgSndAr_c::doDelete() { return SUCCEEDED; } -struct Unk { - u8 unk[0x144]; - mVec3_c v; -}; - -extern Unk *lbl_80575D58; - int dTgSndAr_c::actorExecute() { dAcBase_c *link = dAcPy_c::LINK; if (link != nullptr && checkPosInArea(link->position)) { link->setBit_field_0xE8(params & 0xFF); } - if (lbl_80575D58 != nullptr) { - mVec3_c pos = lbl_80575D58->v; + if (dSnd3DManager_c::GetInstance() != nullptr) { + mVec3_c pos = dSnd3DManager_c::GetInstance()->getListenerPos(); if (checkPosInArea(pos) && dTgSndMg_c::GetInstance() != nullptr) { dTgSndMg_c::GetInstance()->setBgmFlag(params & 0xFF); } diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index ff47e669..3bd8cca9 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -39,7 +39,7 @@ u8 dAcBase_c::s_Create_Subtype; extern "C" ObjInfo *getObjByActorIdAndSubtype_unkNamespace(ProfileName, u8); extern "C" ObjInfo *getObjByActorName_unkNamespace(char *name); extern "C" char *getObjectName_8006a730(ObjInfo *); -extern "C" SoundSource *soundForActorInitRelated_803889c0(s8, fBase_c *, char *, u8); +extern "C" dSoundSourceIf_c *soundForActorInitRelated_803889c0(s8, fBase_c *, char *, u8); bool dAcBase_c::createHeap() { return true; @@ -113,7 +113,7 @@ void dAcBase_c::setTempCreateParams( } // has regswap -SoundSource *dAcBase_c::FUN_8002c690() { +dSoundSourceIf_c *dAcBase_c::FUN_8002c690() { if (obj_info == nullptr) { return nullptr; } @@ -515,7 +515,7 @@ void dAcBase_c::FUN_8002d830() {} void dAcBase_c::FUN_8002d860(UNKWORD) {} // 8002d880 -SoundSource *dAcBase_c::getSoundSource() { +dSoundSourceIf_c *dAcBase_c::getSoundSource() { return sound_source.get(); } // End of SoundSource stuff diff --git a/src/d/d_player_mdl.cpp b/src/d/d_player_mdl.cpp index a994eebb..c5c45ba3 100644 --- a/src/d/d_player_mdl.cpp +++ b/src/d/d_player_mdl.cpp @@ -631,7 +631,7 @@ bool daPlBaseMdl_c::create( field_0x58 = 0; mpSoundData = nullptr; field_0x5A = 0xFFFF; - SoundSource *sound = player->getSoundSource(); + dSoundSourceIf_c *sound = player->getSoundSource(); if (sound->isReadyMaybe()) { sound->load(nullptr, ""); } @@ -1772,7 +1772,7 @@ void daPlayerModelBase_c::removeAnmChr(s32 childIdx) { } void daPlayerModelBase_c::loadSound(nw4r::g3d::ResFile &file, const char *name, s32 childIdx) { - SoundSource *s = getSoundSource(); + dSoundSourceIf_c *s = getSoundSource(); mCurrentAnmChrIdx = childIdx; SizedString<64> path; path.sprintf("%s.brasd", name); @@ -1785,7 +1785,7 @@ void daPlayerModelBase_c::loadSound(nw4r::g3d::ResFile &file, const char *name, } void daPlayerModelBase_c::loadSoundForAnim(s32 childIdx) { - SoundSource *s = getSoundSource(); + dSoundSourceIf_c *s = getSoundSource(); s32 anim = mAnimations[childIdx]; mCurrentAnmChrIdx = childIdx; if (anim != mMainMdl.getField_0x5A()) { diff --git a/src/d/snd/d_snd_3d_actor.cpp b/src/d/snd/d_snd_3d_actor.cpp new file mode 100644 index 00000000..4ca49c4b --- /dev/null +++ b/src/d/snd/d_snd_3d_actor.cpp @@ -0,0 +1,96 @@ +#include "d/snd/d_snd_3d_actor.h" + +#include "common.h" +#include "d/a/d_a_player.h" +#include "d/snd/d_snd_3d_manager.h" +#include "nw4r/math/math_types.h" +#include "toBeSorted/music_mgrs.h" + +#include + +dSnd3DActor_c::dSnd3DActor_c(UNKTYPE *a1, u8 a2) + : nw4r::snd::Sound3DActor( + dSndPlayerMgr_c::GetInstance()->getSoundArchivePlayerForType(a2), dSnd3DManager_c::GetInstance()->getManager() + ), + a_field_0x7D(0), + a_field_0x7E(0), + a_field_0x7F(0), + a_field_0x80(0), + a_field_0x84(0.0f), + a_field_0x88(0.0f), + a_field_0x8C(0.0f), + a_field_0x90(INFINITY), + a_field_0x94(INFINITY), + a_field_0x98(0.0f), + a_field_0x9C(0.0f), + a_field_0xC8(a1), + mFlags(0), + mDistanceToPlayer(INFINITY), + a_field_0xE0(0.0f) { + resetFloats(); + // Portability hazard + SetUserParam(reinterpret_cast(this)); + if (fn_8035ED90(BGM_MGR, a2)) { + a_field_0x7F = 1; + } +} + +void dSnd3DActor_c::d_vt_0x34(const nw4r::math::VEC3 &rPosition) { + SetPosition(rPosition); + // TODO - 0xE0 + mFlags = 0; +} + +void dSnd3DActor_c::updatePositionRelativeToPlayer() { + if (!checkFlag(0x40)) { + nw4r::math::VEC3 linkTranslation = dAcPy_c::GetLink()->getCenterTranslation(); + nw4r::math::VEC3 pos = GetPosition(); + nw4r::math::VEC3Sub(&mPositionRelativeToPlayer, &pos, &linkTranslation); + + mFlags |= 0x40; + } +} + +const nw4r::math::VEC3 &dSnd3DActor_c::getPositionRelativeToPlayer() { + updatePositionRelativeToPlayer(); + return mPositionRelativeToPlayer; +} + +void dSnd3DActor_c::updateDistanceToPlayer() { + if (!checkFlag(0x80)) { + updatePositionRelativeToPlayer(); + nw4r::math::VEC3 linkTranslation = dAcPy_c::GetLink()->getCenterTranslation(); + nw4r::math::VEC3 pos = GetPosition(); + if ((linkTranslation.x == 0.0f && linkTranslation.y == 0.0f && linkTranslation.z == 0.0f) || + (pos.x == 0.0f && pos.y == 0.0f && pos.z == 0.0f)) { + // Don't bother if we received dummy values + mDistanceToPlayer = INFINITY; + } else { + mDistanceToPlayer = nw4r::math::VEC3Len(&mPositionRelativeToPlayer); + } + mFlags |= 0x80; + } +} + +f32 dSnd3DActor_c::getDistanceToPlayer() { + updateDistanceToPlayer(); + return mDistanceToPlayer; +} + +bool dSnd3DActor_c::hasPlayingSounds() const { + for (int i = 0; i < ACTOR_PLAYER_COUNT; i++) { + if (GetPlayingSoundCount(i) > 0) { + return true; + } + } + return false; +} + +bool dSnd3DActor_c::isPlayingSound(u32 id) { + bool result = false; + + IsCurrentSoundIdChecker handler(id, &result); + ForEachSound(handler, false); + + return result; +} diff --git a/src/d/snd/d_snd_3d_engine.cpp b/src/d/snd/d_snd_3d_engine.cpp new file mode 100644 index 00000000..59605476 --- /dev/null +++ b/src/d/snd/d_snd_3d_engine.cpp @@ -0,0 +1,56 @@ +#include "d/snd/d_snd_3d_engine.h" + +#include "common.h" +#include "nw4r/snd/snd_Sound3DListener.h" + +dSnd3DEngine_c::dSnd3DEngine_c() {} + +static void CalcPitch( + const nw4r::math::VEC3 *vec, f32 mag, const nw4r::snd::Sound3DManager &mgr, + const nw4r::snd::Sound3DListener &listener, const nw4r::snd::Sound3DParam ¶m, f32 *pPitch +); + +void dSnd3DEngine_c::UpdateAmbientParam( + const nw4r::snd::Sound3DManager *mgr, const nw4r::snd::Sound3DParam *param3d, u32 unk, u32 flags, + nw4r::snd::SoundAmbientParam *paramAmb +) { + f32 pitch; + CalcPitch(nullptr, 0.0f, *mgr, mgr->GetListenerList().GetFront(), *param3d, &pitch); +} + +// Largely copied from Sound3DCalculator::CalcPitch +static void CalcPitch( + const nw4r::math::VEC3 *vec, f32 mag, const nw4r::snd::Sound3DManager &mgr, + const nw4r::snd::Sound3DListener &listener, const nw4r::snd::Sound3DParam ¶m, f32 *pPitch +) { + f32 f0 = mgr.GetField0x24(); + if (f0 == 0.0f) { + *pPitch = 1.0f; + return; + } + + nw4r::math::VEC3 relativePos(*vec); + if (mag > 0.0f) { + relativePos /= mag; + } + f32 f3 = param.field_0x1E / 32.0f; + f32 f1, f2; + if (mag > 0.0f) { + f1 = -nw4r::math::VEC3Dot(&relativePos, ¶m.velocity); + f2 = -nw4r::math::VEC3Dot(&relativePos, &listener.GetVelocity()); + } else { + f1 = -nw4r::math::VEC3Len(¶m.velocity); + f2 = nw4r::math::VEC3Len(&listener.GetVelocity()); + } + f32 pitch; + f1 *= f3; + f2 *= f3; + if (f2 > f0) { + pitch = 0.0f; + } else if (f1 >= f0) { + pitch = 65535.0f; + } else { + pitch = (f0 - f2) / (f0 - f1); + } + *pPitch = pitch; +} diff --git a/src/d/snd/d_snd_3d_manager.cpp b/src/d/snd/d_snd_3d_manager.cpp new file mode 100644 index 00000000..39e18a63 --- /dev/null +++ b/src/d/snd/d_snd_3d_manager.cpp @@ -0,0 +1,135 @@ +#include "d/snd/d_snd_3d_manager.h" + +#include "d/snd/d_snd_3d_engine.h" +#include "d/snd/d_snd_mgr.h" +#include "egg/math/eggMatrix.h" +#include "egg/math/eggVector.h" +#include "nw4r/math/math_arithmetic.h" +#include "nw4r/math/math_types.h" +#include "nw4r/snd/snd_SoundArchive.h" +#include "toBeSorted/music_mgrs.h" + +template class SndMgrDisposer; + +dSnd3DManager_c::dSnd3DManager_c() : mIsSetup(false), field_0x11(0) { + mCameraPosSqVelocity = 0.0f; + mCameraAtSqVelocity = 0.0f; + mCamDistance = 0.9f; + mTimer = 0; + mpEngine = new dSnd3DEngine_c(); + field_0x138.x = 0.0f; + field_0x138.y = 0.0f; + field_0x138.z = 1.0f; +} + +void dSnd3DManager_c::setup() { + if (mIsSetup) { + return; + } + + nw4r::snd::SoundArchive *archive = dSndMgr_c::GetInstance()->getArchive(); + u32 requiredSize = mManager.GetRequiredMemSize(archive); + void *buf = dSndMgr_c::GetInstance()->getSoundHeap()->Alloc(requiredSize); + mManager.Setup(archive, buf, requiredSize); + mManager.SetEngine(mpEngine); + mManager.SetMaxPriorityReduction(32); + mManager.SetField0x20(0.9f); + mManager.SetField0x24(3400.0f / 3.0f); + mListener.SetMaxVolumeDistance(300.0f); + mListener.SetUnitDistance(1000.0f); + mListener.SetInteriorSize(400.0f); + mManager.SetBiquadFilterType(3); + mListener.SetUnitBiquadFilterMax(0.5f); + mListener.SetUnitBiquadFilterValue(0.2f); + mManager.GetListenerList().Insert(mManager.GetListenerList().GetEndIter(), &mListener); + mIsSetup = true; +} + +void dSnd3DManager_c::resetCamDistance() { + mCamDistance = 0.9f; +} + +void dSnd3DManager_c::setCamDistance(f32 value) { + // @bug ? not actually clamped + nw4r::ut::Clamp(value, -1.0f, 2.0f); + mCamDistance = value; +} + +void dSnd3DManager_c::calc() { + field_0x11 = 0; +} + +void dSnd3DManager_c::clearState() { + mCameraPosSqVelocity = 0.0f; + mCameraAtSqVelocity = 0.0f; + mTimer = 0; +} + + +void dSnd3DManager_c::updateFromCamera(EGG::LookAtCamera &camera) { + if (field_0x11) { + return; + } + + f32 dist = 0.5f; + if (fn_80364DA0(ENEMY_SOUND_MGR)) { + dist = mCamDistance; + f32 prevCameraAtSqVelocity = mCameraAtSqVelocity; + f32 prevCameraPosSqVelocity = mCameraPosSqVelocity; + mCameraAtSqVelocity = VECSquareDistance(camera.mAt, mCamera.mAt); + mCameraPosSqVelocity = VECSquareDistance(camera.mPos, mCamera.mPos); + if (((u32 *)ENEMY_SOUND_MGR)[71] > 30) { + bool bigMovement = false; + bool hugeMovement = false; + if (mTimer > 0) { + mTimer--; + } else { + f32 atAccel = prevCameraAtSqVelocity - mCameraAtSqVelocity; + f32 atAccelAbs = nw4r::math::FAbs(atAccel); + if (mCameraAtSqVelocity > 490000.0f) { + bigMovement = true; + hugeMovement = true; + } else if (atAccelAbs > 10000.0f) { + bigMovement = true; + } + if (!hugeMovement) { + f32 posAccel = prevCameraPosSqVelocity - mCameraPosSqVelocity; + f32 posAccelAbs = nw4r::math::FAbs(posAccel); + if (mCameraPosSqVelocity > 490000.0f) { + bigMovement = true; + hugeMovement = true; + } else if (posAccelAbs > 10000.0f) { + bigMovement = true; + } + if (bigMovement && !hugeMovement && nw4r::math::FAbs(atAccelAbs - posAccelAbs) < 22500.0f) { + nw4r::math::VEC3 myDir = mCamera.getOtherDirection(); + nw4r::math::VEC3 camDir = camera.getOtherDirection(); + VECNormalize(myDir, myDir); + VECNormalize(camDir, camDir); + if (nw4r::math::VEC3Dot(&myDir, &camDir) > 0.99f) { + bigMovement = false; + } + } + } + + if (bigMovement) { + fn_80364D00(ENEMY_SOUND_MGR, -1); + mTimer = 30; + } + } + } + } + + mCamera = camera; + updateListenerPos(dist); + field_0x11 = 1; +} + +void dSnd3DManager_c::updateListenerPos(f32 f) { + const EGG::Matrix34f &mtx = mCamera.getViewMatrix(); + mListener.SetMatrix(*mtx); + EGG::Vector3f dir = mCamera.getDirection(); + VECNormalize(dir, field_0x138); + dir *= f; + mSoundListenerPosition = mCamera.mPos + dir; +} diff --git a/src/d/snd/d_snd_actor.cpp b/src/d/snd/d_snd_actor.cpp new file mode 100644 index 00000000..db456ecf --- /dev/null +++ b/src/d/snd/d_snd_actor.cpp @@ -0,0 +1,66 @@ +#include "d/snd/d_snd_actor.h" + +#include "common.h" +#include "d/snd/d_snd_checkers.h" +#include "nw4r/snd/snd_BasicSound.h" +#include "nw4r/snd/snd_SoundArchivePlayer.h" +#include "nw4r/snd/snd_SoundHandle.h" +#include "toBeSorted/music_mgrs.h" + +dSndActor_c::dSndActor_c(nw4r::snd::SoundArchivePlayer &rStartable) : nw4r::snd::SoundActor(rStartable) {} + +void d_snd_actor_SoundHandle_dtor() { + nw4r::snd::SoundHandle handle[2]; +} + +void SoundPropertiesChecker::operator()(nw4r::snd::SoundHandle &pHandle) { + if (mSoundId != -1 && mSoundId != pHandle.GetId()) { + return; + } + + if (mpPlayCounter != nullptr) { + (*mpPlayCounter)++; + } else { + mPlayCounter++; + } + + if (pHandle.IsPause()) { + if (mpPauseCounter != nullptr) { + (*mpPauseCounter)++; + } else { + mPauseCounter++; + } + return; + } + + if (fn_803721F0(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (mpCounter3 != nullptr) { + (*mpCounter3)++; + } else { + mCounter3++; + } + return; + } + + if (fn_803720E0(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (mpCounter3 != nullptr) { + (*mpCounter3)++; + } else { + mCounter3++; + } + return; + } + + if (fn_80372070(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (mpCounter4 != nullptr) { + (*mpCounter4)++; + } else { + mCounter4++; + } + return; + } + + if (fn_803734C0(FANFARE_SOUND_MGR, pHandle.GetId()) && !fn_80373550(FANFARE_SOUND_MGR, pHandle.GetId())) { + mCounter3++; + } +} diff --git a/src/d/snd/d_snd_mgr.cpp b/src/d/snd/d_snd_mgr.cpp new file mode 100644 index 00000000..6604fcae --- /dev/null +++ b/src/d/snd/d_snd_mgr.cpp @@ -0,0 +1,58 @@ +#include "d/snd/d_snd_mgr.h" + +#include "d/snd/d_snd_3d_manager.h" +#include "d/snd/d_snd_player_mgr.h" +#include "d/snd/d_snd_util.h" +#include "egg/audio/eggAudioRmtSpeakerMgr.h" +#include "egg/audio/eggAudioUtility.h" + +extern "C" void fn_8035F120(); +extern "C" void initEnemySoundMgr(); +extern "C" void initFanfareSoundMgr(); +extern "C" void initSomeUnusedSoundMgr(); +extern "C" void initSoundEffectSoundMgr(); +extern "C" void fn_8036A430(); +extern "C" void initEnemyBgmRelatedMgr(); +extern "C" void fn_80393530(); +extern "C" void fn_80394830(); +extern "C" void fn_8037F940(); +extern "C" void fn_80399600(); +extern "C" void fn_80399C20(); + +dSndMgr_c *dSndMgr_c::sInstance; + +dSndMgr_c::dSndMgr_c(): field_0x6CC(0) { + sInstance = this; + SndMgrDisposer::create(); + fn_8035F120(); + initEnemySoundMgr(); + SndMgrDisposer::create(); + initFanfareSoundMgr(); + initSomeUnusedSoundMgr(); + initSoundEffectSoundMgr(); + fn_8036A430(); + initEnemyBgmRelatedMgr(); + fn_80393530(); + fn_80394830(); + fn_8037F940(); + fn_80399600(); + fn_80399C20(); + + initHbm(9); +} + +void dSndMgr_c::initialize(EGG::Heap *heap, u32 size) {} + +void dSndMgr_c::initHbm(u32 frame) { + EGG::AudioUtility::HBM::init(this, restoreEffectsCallback, frame); +} + +void dSndMgr_c::calc() { + if (field_0x6CC) { + EGG::SimpleAudioMgr::calc(); + EGG::AudioRmtSpeakerMgr::calc(); + dSndPlayerMgr_c::GetInstance()->calc(); + } +} + +void dSndMgr_c::restoreEffectsCallback() {} diff --git a/src/d/snd/d_snd_player_mgr.cpp b/src/d/snd/d_snd_player_mgr.cpp new file mode 100644 index 00000000..0edee554 --- /dev/null +++ b/src/d/snd/d_snd_player_mgr.cpp @@ -0,0 +1,86 @@ + +#include "d/snd/d_snd_player_mgr.h" + +#include "common.h" +#include "d/snd/d_snd_mgr.h" +#include "egg/core/eggDvdRipper.h" +#include "nw4r/snd/snd_SoundHandle.h" +#include "nw4r/snd/snd_SoundStartable.h" +#include "sized_string.h" + +const char *dSndPlayerMgr_c::getSoundArchivePath() { + return "Sound/WZSound.brsar"; +} + +template class SndMgrDisposer; + +dSndPlayerMgr_c::dSndPlayerMgr_c() + : field_0x010(0), field_0x011(0), field_0x014(-1), field_0x018(-1), field_0x01C(-1), mFlags(0) {} + +u32 dSndPlayerMgr_c::getFreeSize() { + return dSndMgr_c::GetInstance()->getSoundHeap()->GetFreeSize(); +} + +nw4r::snd::SoundStartable::StartResult dSndPlayerMgr_c::startSound( + nw4r::snd::SoundHandle *pHandle, u32 soundId, const nw4r::snd::SoundStartable::StartInfo *pStartInfo +) { + if (mFlags & 0x2) { + return nw4r::snd::SoundStartable::START_ERR_USER; + } + + nw4r::snd::SoundHandle handle; + if (pHandle == nullptr) { + pHandle = &handle; + } + nw4r::snd::SoundStartable::StartResult res; + if (pStartInfo != nullptr) { + res = dSndMgr_c::getPlayer()->detail_StartSound(pHandle, soundId, pStartInfo); + } else { + res = dSndMgr_c::getPlayer()->detail_StartSound(pHandle, soundId, nullptr); + } + return res; +} + +nw4r::snd::SoundStartable::StartResult dSndPlayerMgr_c::startSound( + nw4r::snd::SoundHandle *pHandle, const char *soundLabel, const nw4r::snd::SoundStartable::StartInfo *pStartInfo +) { + u32 id = dSndPlayerMgr_c::GetInstance()->convertLabelStringToSoundId(soundLabel); + return startSound(pHandle, id, pStartInfo); +} + +u32 dSndPlayerMgr_c::convertLabelStringToSoundId(const char *label) const { + return dSndMgr_c::GetInstance()->changeNameToId(label); +} + +bool dSndPlayerMgr_c::loadDemoArchive(const char *demoArchiveName) { + if (demoArchiveName == nullptr) { + return false; + } + + int stateId = dSndMgr_c::GetInstance()->saveState(); + SizedString<64> path; + path.sprintf("Sound/demo/%s.brsar", demoArchiveName); + void *buf = dSndMgr_c::GetInstance()->getSoundHeap()->Alloc(getFreeSize() - 0x40000); + if (buf == nullptr) { + return false; + } + bool ok = false; + u32 amountRead = 0; + u32 fileSize = 0; + EGG::DvdRipper::Arg arg(path, (u8 *)buf, nullptr, EGG::DvdRipper::ALLOC_DIR_TOP, 0, &amountRead, &fileSize); + void *ptr = EGG::DvdRipper::loadToMainRAM(arg); + if (ptr != nullptr) { + ok = mSoundArchive.Setup(ptr); + if (ok) { + u32 size = mSoundArchivePlayer.GetRequiredMemSize(&mSoundArchive); + void *buf2 = dSndMgr_c::GetInstance()->getSoundHeap()->Alloc(size); + if (buf2 != nullptr) { + ok = mSoundArchivePlayer.Setup(&mSoundArchive, buf2, size, nullptr, 0); + } + } + } + if (!ok) { + dSndMgr_c::GetInstance()->loadState(stateId); + } + return ok; +} diff --git a/src/d/snd/d_snd_source.cpp b/src/d/snd/d_snd_source.cpp new file mode 100644 index 00000000..68a312bb --- /dev/null +++ b/src/d/snd/d_snd_source.cpp @@ -0,0 +1,94 @@ +#include "d/snd/d_snd_source.h" + +#include "common.h" +#include "d/snd/d_snd_3d_actor.h" +#include "nw4r/snd/snd_SoundStartable.h" +#include "nw4r/ut/ut_list.h" +#include "sized_string.h" + +extern "C" u8 fn_80382590(u8, UNKWORD); +extern "C" void fn_80386C50(UNKWORD, dSoundSource_c *); +extern "C" void fn_80386C70(dSoundSource_c *); + +struct d_snd_mgr_unk_6_sinit { + d_snd_mgr_unk_6_sinit() : field_0x00(0), field_0x04(0.0f) {} + + u32 field_0x00; + f32 field_0x04; +}; + +d_snd_mgr_unk_6_sinit d_snd_mgr_unk_6_sinit_instance; + +const char *help_i_need_data() { + return "%s_%s_%d"; +} + +dSoundSource_c::dSoundSource_c(u8 a1, dAcBase_c *player, UNKWORD a3, UNKWORD a4) + : dSnd3DActor_c(((char *)a4) + 0x50, a1), + field_0x0F0(a3), + field_0x0F4(0), + mpPlayer(player), + field_0x0FD(a1), + field_0x0FE(0), + field_0x0FF(0), + field_0x100(0), + field_0x101(0), + field_0x102(0), + field_0x104(0), + field_0x108(0), + field_0x10C(0), + field_0x11C(0), + field_0x140(a4), + field_0x154(0), + field_0x158(-1), + field_0x15A(-1) { + field_0x0FC = fn_80382590(a1, a3); + // TODO: Offsetof + nw4r::ut::List_Init(&field_0x110, 0xEC); + nw4r::ut::List_Init(&field_0x120, 0x04); + nw4r::ut::List_Init(&field_0x12C, 0x04); + fn_80386C50(a4, this); +} + +dSoundSource_c::~dSoundSource_c() { + SetUserParam(0); + vt_0x44(); + fn_80386C70(this); +} + +bool dSoundSource_c::hasPlayingSounds() const { + return dSnd3DActor_c::hasPlayingSounds(); +} + +void dSoundSource_c::d_vt_0x38(bool flag, int fadeFrames) { + if (flag == 0) { + PauseAllSound(flag, fadeFrames); + d_s_vt_0x1C4(flag, fadeFrames); + a_field_0x80 = 0; + } else if (a_field_0x7E == 0) { + PauseAllSound(flag, fadeFrames); + d_s_vt_0x1C4(flag, fadeFrames); + a_field_0x80 = 1; + } +} + +nw4r::snd::SoundStartable::StartResult +dSoundSource_c::SetupSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const StartInfo *pStartInfo, void *) { + // TODO + return START_SUCCESS; +} + +void dSoundSource_c::d_vt_0x58() { + // noop +} + +void dSoundSource_c::d_vt_0x5C() { + // noop +} + +u32 dSoundSource_c::getRemoConSoundVariant(u32 soundId) const { + const char *label = soundIdToSoundLabel(soundId); + SizedString<64> str; + str.sprintf("%s_RC", label); + return soundLabelToSoundId(str); +} diff --git a/src/d/snd/mgr/d_snd_mgr_unk_11.cpp b/src/d/snd/mgr/d_snd_mgr_unk_11.cpp new file mode 100644 index 00000000..5ad3cddc --- /dev/null +++ b/src/d/snd/mgr/d_snd_mgr_unk_11.cpp @@ -0,0 +1,36 @@ + +#include "d/snd/d_snd_util.h" + +class SndClass80399a40 { +public: + SndClass80399a40(); + virtual ~SndClass80399a40() {} + + /* 0x04 */ u8 _0x04[0x18 - 0x04]; +}; + +// This is a test for SndMgrDisposer, since this +// class has the disposer at 0x18, which is interesting + +class SndMgr80399c20; + +extern template class SndMgrDisposer; + +class SndMgr80399c20 : SndClass80399a40 { +public: + SndMgrDisposer *GetDisposer() { + return &mDisposer; + } + + static SndMgr80399c20 *GetInstance() { + return sInstance; + } + + static SndMgr80399c20 *sInstance; + static SndMgrDisposer *sDisposer; + +private: + SndMgrDisposer mDisposer; +}; + +template class SndMgrDisposer; diff --git a/src/toBeSorted/d_d3d.cpp b/src/toBeSorted/d_d3d.cpp index 8f62c595..964211b1 100644 --- a/src/toBeSorted/d_d3d.cpp +++ b/src/toBeSorted/d_d3d.cpp @@ -31,10 +31,10 @@ AnmMdlWrapper::AnmMdlWrapper() : mpSoundSource(nullptr), mpSoundData(nullptr) {} AnmMdlWrapper::~AnmMdlWrapper() { if (mpSoundSource != nullptr) { - if (mpSoundSource->shutdown()) { + if (mpSoundSource->hasPlayingSounds()) { do { VIWaitForRetrace(); - } while (mpSoundSource->shutdown()); + } while (mpSoundSource->hasPlayingSounds()); } } } @@ -119,7 +119,7 @@ void AnmMdlWrapper::setRate(f32 rate) { setSoundRate(rate); } -void AnmMdlWrapper::setSoundSource(SoundSource *pSource) { +void AnmMdlWrapper::setSoundSource(dSoundSourceIf_c *pSource) { mpSoundSource = pSource; } diff --git a/src/toBeSorted/sound_info.cpp b/src/toBeSorted/sound_info.cpp index 585f35ce..98f7c6ea 100644 --- a/src/toBeSorted/sound_info.cpp +++ b/src/toBeSorted/sound_info.cpp @@ -1,6 +1,6 @@ #include "d/a/d_a_base.h" -extern "C" SoundSource *soundForActorInitRelated_803889c0(int, fBase_c *, char *, u8); +extern "C" dSoundSourceIf_c *soundForActorInitRelated_803889c0(int, fBase_c *, char *, u8); extern "C" bool fn_8002C250(SoundInfo *p1, int someNum, char *name, mVec3_c *position) { p1->sound_source = soundForActorInitRelated_803889c0(someNum, p1->actor, name, 0);