diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index af09ffa0..c4b1aa91 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -2617,9 +2617,17 @@ d/snd/d_snd_3d_manager.cpp: .sbss start:0x80575D58 end:0x80575D60 .sdata2 start:0x8057D3B8 end:0x8057D3F8 -d/snd/d_snd_stage_mgr.cpp: +d/snd/d_snd_state_mgr.cpp: .text start:0x80361460 end:0x8036642C align:16 .ctors start:0x804DB918 end:0x804DB91C + .data start:0x805487E0 end:0x80548A28 + .sdata start:0x80574098 end:0x80574198 + .sbss start:0x80575D60 end:0x80575D78 + .sdata2 start:0x8057D3F8 end:0x8057D450 + +d/snd/d_snd_stage_data.cpp: + .rodata start:0x804F0D80 end:0x804F2308 + .sdata2 start:0x8057D478 end:0x8057D7C0 d/snd/d_snd_unk_component_2.cpp: .text start:0x80366430 end:0x8036A3A4 align:16 @@ -2654,7 +2662,7 @@ d/snd/d_snd_bgm_sound_callbacks.cpp: .text start:0x803739D0 end:0x80378ECC align:16 .sdata2 start:0x8057D970 end:0x8057DA50 -d/snd/d_snd_bgm_sound_boss_callbacks.cpp: +d/snd/d_snd_bgm_sound_battle_callbacks.cpp: .text start:0x80378ED0 end:0x80379D20 align:16 .sdata2 start:0x8057DA50 end:0x8057DA58 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index d3e51b77..075c8759 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -19982,7 +19982,7 @@ loadDemoArchive__15dSndPlayerMgr_cFPCc = .text:0x8035EDF0; // type:function size shutdown__15dSndPlayerMgr_cFv = .text:0x8035EF90; // type:function size:0x38 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 +isBgmPlayerId__15dSndPlayerMgr_cFUl = .text:0x8035F030; // type:function size:0x1C fn_8035F050 = .text:0x8035F050; // type:function size:0x50 __dt__40SndMgrDisposer<22dSndControlPlayerMgr_c>Fv = .text:0x8035F0A0; // type:function size:0x78 create__40SndMgrDisposer<22dSndControlPlayerMgr_c>Fv = .text:0x8035F120; // type:function size:0x48 @@ -20046,16 +20046,16 @@ 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 -EnemySoundMgr__ctor = .text:0x80361540; // type:function size:0x15C +__dt__32SndMgrDisposer<14dSndStateMgr_c>Fv = .text:0x80361460; // type:function size:0x78 +create__32SndMgrDisposer<14dSndStateMgr_c>Fv = .text:0x803614E0; // type:function size:0x48 +remove__32SndMgrDisposer<14dSndStateMgr_c>Fv = .text:0x80361530; // type:function size:0x10 +__ct__14dSndStateMgr_cFv = .text:0x80361540; // type:function size:0x15C __dt__Q34nw4r3snd15FxReverbStdDpl2Fv = .text:0x803616A0; // type:function size:0x7C -fn_80361720 = .text:0x80361720; // type:function size:0x1CC -fn_803618F0 = .text:0x803618F0; // type:function size:0x3DC -GetStageTypeFlags = .text:0x80361CD0; // type:function size:0x2FC -fn_80361FD0 = .text:0x80361FD0; // type:function size:0x44 -fn_80362020 = .text:0x80362020; // type:function size:0x84 +setup__14dSndStateMgr_cFPQ23EGG4Heap = .text:0x80361720; // type:function size:0x1CC +onStageOrLayerUpdate__14dSndStateMgr_cFv = .text:0x803618F0; // type:function size:0x3DC +getStageTypeFlags__14dSndStateMgr_cCFPCc = .text:0x80361CD0; // type:function size:0x2FC +isVolcanicDungeon__14dSndStateMgr_cFUl = .text:0x80361FD0; // type:function size:0x44 +isSeekerStoneStage__14dSndStateMgr_cFPCcl = .text:0x80362020; // type:function size:0x84 fn_803620B0 = .text:0x803620B0; // type:function size:0x5C fn_80362110 = .text:0x80362110; // type:function size:0x34 fn_80362150 = .text:0x80362150; // type:function size:0xB0 @@ -20065,7 +20065,7 @@ fn_80362390 = .text:0x80362390; // type:function size:0x6C fn_80362400 = .text:0x80362400; // type:function size:0x10 fn_80362410 = .text:0x80362410; // type:function size:0xC fn_80362420 = .text:0x80362420; // type:function size:0x18 -isInStage = .text:0x80362440; // type:function size:0x34 +isInStage__FPCc = .text:0x80362440; // type:function size:0x34 fn_80362480 = .text:0x80362480; // type:function size:0x6C fn_803624F0 = .text:0x803624F0; // type:function size:0xF4 fn_803625F0 = .text:0x803625F0; // type:function size:0x140 @@ -20117,7 +20117,7 @@ fn_80364DE0 = .text:0x80364DE0; // type:function size:0x7C fn_80364E60 = .text:0x80364E60; // type:function size:0x54 fn_80364EC0 = .text:0x80364EC0; // type:function size:0x90 fn_80364F50 = .text:0x80364F50; // type:function size:0x7C -fn_80364FD0 = .text:0x80364FD0; // type:function size:0x50 +setFlowEvent__14dSndStateMgr_cFUl = .text:0x80364FD0; // type:function size:0x50 fn_80365020 = .text:0x80365020; // type:function size:0x84 fn_803650B0 = .text:0x803650B0; // type:function size:0x6C getStageMusicDemoName = .text:0x80365120; // type:function size:0x28 @@ -20149,7 +20149,7 @@ fn_80365DE0 = .text:0x80365DE0; // type:function size:0x1C findMusicInMusicStruct = .text:0x80365E00; // type:function size:0xC0 fn_80365EC0 = .text:0x80365EC0; // type:function size:0xA8 fn_80365F70 = .text:0x80365F70; // type:function size:0xA8 -fn_80366020 = .text:0x80366020; // type:function size:0x28 +getStageUnk2__14dSndStateMgr_cFUl = .text:0x80366020; // type:function size:0x28 fn_80366050 = .text:0x80366050; // type:function size:0x28 fn_80366080 = .text:0x80366080; // type:function size:0x10 fn_80366090 = .text:0x80366090; // type:function size:0x88 @@ -20406,13 +20406,13 @@ apply__25dSndControlPlayerFxSend_cFv = .text:0x8036C610; // type:function size:0 getAppliedValue__25dSndControlPlayerFxSend_cFv = .text:0x8036C650; // type:function size:0x58 fn_8036C6B0 = .text:0x8036C6B0; // type:function size:0x64 isInvalidSoundId = .text:0x8036C720; // type:function size:0x10 -FanfareSoundMgr__dtor = .text:0x8036C730; // type:function size:0x78 -initFanfareSoundMgr = .text:0x8036C7B0; // type:function size:0x48 -FanfareSoundMgr__deref = .text:0x8036C800; // type:function size:0x10 -FanfareSoundMgr__ctor = .text:0x8036C810; // type:function size:0x204 +__dt__30SndMgrDisposer<12dSndBgmMgr_c>Fv = .text:0x8036C730; // type:function size:0x78 +create__30SndMgrDisposer<12dSndBgmMgr_c>Fv = .text:0x8036C7B0; // type:function size:0x48 +remove__30SndMgrDisposer<12dSndBgmMgr_c>Fv = .text:0x8036C800; // type:function size:0x10 +__ct__12dSndBgmMgr_cFv = .text:0x8036C810; // type:function size:0x204 fn_8036CA20 = .text:0x8036CA20; // type:function size:0xF0 fn_8036CB10 = .text:0x8036CB10; // type:function size:0x54 -fn_8036CB70 = .text:0x8036CB70; // type:function size:0x19C +calcLists__12dSndBgmMgr_cFv = .text:0x8036CB70; // type:function size:0x19C fn_8036CD10 = .text:0x8036CD10; // type:function size:0x34 fn_8036CD50 = .text:0x8036CD50; // type:function size:0x88 fn_8036CDE0 = .text:0x8036CDE0; // type:function size:0xFC @@ -20420,20 +20420,20 @@ fn_8036CEE0 = .text:0x8036CEE0; // type:function size:0x12C fn_8036D010 = .text:0x8036D010; // type:function size:0x98 fn_8036D0B0 = .text:0x8036D0B0; // type:function size:0x11C fn_8036D1D0 = .text:0x8036D1D0; // type:function size:0x208 -fn_8036D3E0 = .text:0x8036D3E0; // type:function size:0x170 +playBgm__12dSndBgmMgr_cFUllb = .text:0x8036D3E0; // type:function size:0x170 fn_8036D550 = .text:0x8036D550; // type:function size:0x174 fn_8036D6D0 = .text:0x8036D6D0; // type:function size:0x60 -fn_8036D730 = .text:0x8036D730; // type:function size:0x138 +prepareBgmSound__12dSndBgmMgr_cFUlP14dSndBgmSound_cUl = .text:0x8036D730; // type:function size:0x138 fn_8036D870 = .text:0x8036D870; // type:function size:0x1D0 -fn_8036DA40 = .text:0x8036DA40; // type:function size:0xA0 -fn_8036DAE0 = .text:0x8036DAE0; // type:function size:0x74 -fn_8036DB60 = .text:0x8036DB60; // type:function size:0x84 +prepareBgm__12dSndBgmMgr_cFUlUl = .text:0x8036DA40; // type:function size:0xA0 +stopAllBgm__12dSndBgmMgr_cFl = .text:0x8036DAE0; // type:function size:0x74 +stopBgmSound__12dSndBgmMgr_cFP14dSndBgmSound_cl = .text:0x8036DB60; // type:function size:0x84 fn_8036DBF0 = .text:0x8036DBF0; // type:function size:0x2E4 fn_8036DEE0 = .text:0x8036DEE0; // type:function size:0x80 fn_8036DF60 = .text:0x8036DF60; // type:function size:0xBC fn_8036E020 = .text:0x8036E020; // type:function size:0xC4 fn_8036E0F0 = .text:0x8036E0F0; // type:function size:0x80 -fn_8036E170 = .text:0x8036E170; // type:function size:0x1C +stopBgmHandleIdx__12dSndBgmMgr_cFUll = .text:0x8036E170; // type:function size:0x1C fn_8036E190 = .text:0x8036E190; // type:function size:0x60 fn_8036E1F0 = .text:0x8036E1F0; // type:function size:0x18 fn_8036E210 = .text:0x8036E210; // type:function size:0x78 @@ -20451,10 +20451,10 @@ fn_8036E820 = .text:0x8036E820; // type:function size:0x154 fn_8036E980 = .text:0x8036E980; // type:function size:0xD4 fn_8036EA60 = .text:0x8036EA60; // type:function size:0xC4 fn_8036EB30 = .text:0x8036EB30; // type:function size:0xC4 -fn_8036EC00 = .text:0x8036EC00; // type:function size:0x28 +checkForPrepareStoppedBgmSound__12dSndBgmMgr_cFUl = .text:0x8036EC00; // type:function size:0x28 fn_8036EC30 = .text:0x8036EC30; // type:function size:0x98 fn_8036ECD0 = .text:0x8036ECD0; // type:function size:0x64 -fn_8036ED40 = .text:0x8036ED40; // type:function size:0x58 +startAdditionalBgm__12dSndBgmMgr_cFUl = .text:0x8036ED40; // type:function size:0x58 fn_8036EDA0 = .text:0x8036EDA0; // type:function size:0x3F8 fn_8036F1A0 = .text:0x8036F1A0; // type:function size:0x58 fn_8036F200 = .text:0x8036F200; // type:function size:0x100 @@ -20471,12 +20471,12 @@ fn_80370310 = .text:0x80370310; // type:function size:0x8 fn_80370320 = .text:0x80370320; // type:function size:0xF4 fn_80370420 = .text:0x80370420; // type:function size:0xCC fn_803704F0 = .text:0x803704F0; // type:function size:0xC -fn_80370500 = .text:0x80370500; // type:function size:0x120 +playBattleBgm__12dSndBgmMgr_cFUlb = .text:0x80370500; // type:function size:0x120 fn_80370620 = .text:0x80370620; // type:function size:0xC0 fn_803706E0 = .text:0x803706E0; // type:function size:0x24 fn_80370710 = .text:0x80370710; // type:function size:0x64 -fn_80370780 = .text:0x80370780; // type:function size:0x54 -fn_803707E0 = .text:0x803707E0; // type:function size:0x60 +beginBgmBattleRoom__12dSndBgmMgr_cFv = .text:0x80370780; // type:function size:0x54 +endBgmBattleRoom__12dSndBgmMgr_cFv = .text:0x803707E0; // type:function size:0x60 fn_80370840 = .text:0x80370840; // type:function size:0x78 fn_803708C0 = .text:0x803708C0; // type:function size:0x34 fn_80370900 = .text:0x80370900; // type:function size:0xA0 @@ -20484,14 +20484,14 @@ fn_803709A0 = .text:0x803709A0; // type:function size:0xA8 fn_80370A50 = .text:0x80370A50; // type:function size:0x74 fn_80370AD0 = .text:0x80370AD0; // type:function size:0x64 fn_80370B40 = .text:0x80370B40; // type:function size:0x44 -fn_80370B90 = .text:0x80370B90; // type:function size:0xEC +playDelayedSound__12dSndBgmMgr_cFUll = .text:0x80370B90; // type:function size:0xEC fn_80370C80 = .text:0x80370C80; // type:function size:0x4C -fn_80370CD0 = .text:0x80370CD0; // type:function size:0x14 -fn_80370CF0 = .text:0x80370CF0; // type:function size:0x70 -fn_80370D60 = .text:0x80370D60; // type:function size:0xBC -fn_80370E20 = .text:0x80370E20; // type:function size:0x28 +cancelDelayedSound__12dSndBgmMgr_cFv = .text:0x80370CD0; // type:function size:0x14 +cancelDelayedBgm__12dSndBgmMgr_cFv = .text:0x80370CF0; // type:function size:0x70 +startDelayedSound__12dSndBgmMgr_cFv = .text:0x80370D60; // type:function size:0xBC +calcDelayedSound__12dSndBgmMgr_cFv = .text:0x80370E20; // type:function size:0x28 fn_80370E50 = .text:0x80370E50; // type:function size:0x6C -fn_80370EC0 = .text:0x80370EC0; // type:function size:0x70 +setBgmHandleIdxVolume__12dSndBgmMgr_cFUlfl = .text:0x80370EC0; // type:function size:0x70 fn_80370F30 = .text:0x80370F30; // type:function size:0x6C fn_80370FA0 = .text:0x80370FA0; // type:function size:0xA0 fn_80371040 = .text:0x80371040; // type:function size:0x138 @@ -20513,35 +20513,35 @@ fn_80371AF0 = .text:0x80371AF0; // type:function size:0x58 fn_80371B50 = .text:0x80371B50; // type:function size:0x58 fn_80371BB0 = .text:0x80371BB0; // type:function size:0x58 fn_80371C10 = .text:0x80371C10; // type:function size:0x58 -fn_80371C70 = .text:0x80371C70; // type:function size:0x70 +isPlayingBgmSoundId__12dSndBgmMgr_cCFUl = .text:0x80371C70; // type:function size:0x70 fn_80371CE0 = .text:0x80371CE0; // type:function size:0x64 -fn_80371D50 = .text:0x80371D50; // type:function size:0x84 +isBgmHandleIdxPlayingSoundId__12dSndBgmMgr_cFUlUl = .text:0x80371D50; // type:function size:0x84 fn_80371DE0 = .text:0x80371DE0; // type:function size:0x10C fn_80371EF0 = .text:0x80371EF0; // type:function size:0xA0 fn_80371F90 = .text:0x80371F90; // type:function size:0xDC -fn_80372070 = .text:0x80372070; // type:function size:0x68 -fn_803720E0 = .text:0x803720E0; // type:function size:0x70 -fn_80372150 = .text:0x80372150; // type:function size:0x94 -fn_803721F0 = .text:0x803721F0; // type:function size:0xD8 -fn_803722D0 = .text:0x803722D0; // type:function size:0x20 -fn_803722F0 = .text:0x803722F0; // type:function size:0x70 +isFadingOutBgmSoundId__12dSndBgmMgr_cCFUl = .text:0x80372070; // type:function size:0x68 +isPreparingBgmSoundId__12dSndBgmMgr_cCFUl = .text:0x803720E0; // type:function size:0x70 +isPreparingBgmSoundIdWithStartOffset__12dSndBgmMgr_cCFUlUl = .text:0x80372150; // type:function size:0x94 +isPreparedBgmSoundId__12dSndBgmMgr_cCFUl = .text:0x803721F0; // type:function size:0xD8 +getBgmSoundByIndex__12dSndBgmMgr_cFUl = .text:0x803722D0; // type:function size:0x20 +getBgmSoundHandleForId__12dSndBgmMgr_cCFUl = .text:0x803722F0; // type:function size:0x70 fn_80372360 = .text:0x80372360; // type:function size:0xC4 -fn_80372430 = .text:0x80372430; // type:function size:0xD0 +getSoundHandleForBgm__12dSndBgmMgr_cFUlUl = .text:0x80372430; // type:function size:0xD0 fn_80372500 = .text:0x80372500; // type:function size:0xD8 fn_803725E0 = .text:0x803725E0; // type:function size:0xB4 fn_803726A0 = .text:0x803726A0; // type:function size:0xE4 -fn_80372790 = .text:0x80372790; // type:function size:0x10C +findIdleBgmSoundHandle__12dSndBgmMgr_cFv = .text:0x80372790; // type:function size:0x10C fn_803728A0 = .text:0x803728A0; // type:function size:0x74 fn_80372920 = .text:0x80372920; // type:function size:0x3C fn_80372960 = .text:0x80372960; // type:function size:0x8 -fn_80372970 = .text:0x80372970; // type:function size:0x6C -fn_803729E0 = .text:0x803729E0; // type:function size:0x6C -fn_80372A50 = .text:0x80372A50; // type:function size:0x70 -fn_80372AC0 = .text:0x80372AC0; // type:function size:0x5C -fn_80372B20 = .text:0x80372B20; // type:function size:0x98 -fn_80372BC0 = .text:0x80372BC0; // type:function size:0x28 -fn_80372BF0 = .text:0x80372BF0; // type:function size:0x28 -fn_80372C20 = .text:0x80372C20; // type:function size:0x28 +addToBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_eP14dSndBgmSound_c = .text:0x80372970; // type:function size:0x6C +appendToBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_eP14dSndBgmSound_c = .text:0x803729E0; // type:function size:0x6C +removeFromBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_eP14dSndBgmSound_c = .text:0x80372A50; // type:function size:0x70 +removeFromAllBgmSoundLists__12dSndBgmMgr_cFP14dSndBgmSound_c = .text:0x80372AC0; // type:function size:0x5C +isInBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_eP14dSndBgmSound_c = .text:0x80372B20; // type:function size:0x98 +getFirstInBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_e = .text:0x80372BC0; // type:function size:0x28 +getNextInBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_eP14dSndBgmSound_c = .text:0x80372BF0; // type:function size:0x28 +getLastInBgmSoundList__12dSndBgmMgr_cFQ212dSndBgmMgr_c14BgmSoundList_e = .text:0x80372C20; // type:function size:0x28 fn_80372C50 = .text:0x80372C50; // type:function size:0x8C fn_80372CE0 = .text:0x80372CE0; // type:function size:0x8C fn_80372D70 = .text:0x80372D70; // type:function size:0x74 @@ -20549,20 +20549,20 @@ fn_80372DF0 = .text:0x80372DF0; // type:function size:0x40 fn_80372E30 = .text:0x80372E30; // type:function size:0x40 fn_80372E70 = .text:0x80372E70; // type:function size:0xB0 fn_80372F20 = .text:0x80372F20; // type:function size:0x6C -AnotherSoundMgr__playSound = .text:0x80372F90; // type:function size:0x264 +playFanSound__12dSndBgmMgr_cFUl = .text:0x80372F90; // type:function size:0x264 vt_0xF4__14dSoundSource_cFv = .text:0x80373200; // type:function size:0x8 -fn_80373210 = .text:0x80373210; // type:function size:0xB4 -fn_803732D0 = .text:0x803732D0; // type:function size:0x44 -fn_80373320 = .text:0x80373320; // type:function size:0x8C -fn_803733B0 = .text:0x803733B0; // type:function size:0x110 -fn_803734C0 = .text:0x803734C0; // type:function size:0x8C -fn_80373550 = .text:0x80373550; // type:function size:0x110 -fn_80373660 = .text:0x80373660; // type:function size:0xC8 -fn_80373730 = .text:0x80373730; // type:function size:0x68 +prepareFanSound__12dSndBgmMgr_cFUl = .text:0x80373210; // type:function size:0xB4 +getFreeFanSoundHandle__12dSndBgmMgr_cFv = .text:0x803732D0; // type:function size:0x44 +getFanSoundHandleForFan__12dSndBgmMgr_cFUl = .text:0x80373320; // type:function size:0x8C +getSoundHandleCurrentlyPlayingFanSound__12dSndBgmMgr_cFUl = .text:0x803733B0; // type:function size:0x110 +getFanSoundHandleForFan2__12dSndBgmMgr_cFUl = .text:0x803734C0; // type:function size:0x8C +isCurrentlyPlayingFanSound__12dSndBgmMgr_cCFUl = .text:0x80373550; // type:function size:0x110 +hasPlayingFanSounds__12dSndBgmMgr_cCFv = .text:0x80373660; // type:function size:0xC8 +stopFanSounds__12dSndBgmMgr_cFl = .text:0x80373730; // type:function size:0x68 fn_803737A0 = .text:0x803737A0; // type:function size:0x108 -fn_803738B0 = .text:0x803738B0; // type:function size:0x4C -fn_80373900 = .text:0x80373900; // type:function size:0x4C -fn_80373950 = .text:0x80373950; // type:function size:0x7C +registSound__12dSndBgmMgr_cFP11dSndSound_c = .text:0x803738B0; // type:function size:0x4C +unregistSound__12dSndBgmMgr_cFP11dSndSound_c = .text:0x80373900; // type:function size:0x4C +isSoundRegist__12dSndBgmMgr_cFP11dSndSound_c = .text:0x80373950; // type:function size:0x7C fn_803739D0 = .text:0x803739D0; // type:function size:0x58 fn_80373A30 = .text:0x80373A30; // type:function size:0x8 fn_80373A40 = .text:0x80373A40; // type:function size:0x64 @@ -20713,7 +20713,7 @@ fn_80379860 = .text:0x80379860; // type:function size:0x120 fn_80379980 = .text:0x80379980; // type:function size:0x158 fn_80379AE0 = .text:0x80379AE0; // type:function size:0x40 fn_80379B20 = .text:0x80379B20; // type:function size:0x200 -fn_80379D20 = .text:0x80379D20; // type:function size:0xF8 +__ct__14dSndBgmSound_cFv = .text:0x80379D20; // type:function size:0xF8 fn_80379E20 = .text:0x80379E20; // type:function size:0x58 fn_80379E80 = .text:0x80379E80; // type:function size:0xC fn_80379E90 = .text:0x80379E90; // type:function size:0xC8 @@ -20751,7 +20751,7 @@ fn_8037B470 = .text:0x8037B470; // type:function size:0x18 fn_8037B490 = .text:0x8037B490; // type:function size:0x18 fn_8037B4B0 = .text:0x8037B4B0; // type:function size:0x18 fn_8037B4D0 = .text:0x8037B4D0; // type:function size:0x8 -fn_8037B4E0 = .text:0x8037B4E0; // type:function size:0x58 +__ct__20dSndBgmBattleSound_cFv = .text:0x8037B4E0; // type:function size:0x58 fn_8037B540 = .text:0x8037B540; // type:function size:0x44 fn_8037B590 = .text:0x8037B590; // type:function size:0x7C fn_8037B610 = .text:0x8037B610; // type:function size:0xAC @@ -21010,7 +21010,7 @@ fn_80385610 = .text:0x80385610; // type:function size:0x4 fn_80385620 = .text:0x80385620; // type:function size:0x4 fn_80385630 = .text:0x80385630; // type:function size:0x8 fn_80385640 = .text:0x80385640; // type:function size:0x134 -fn_80385780 = .text:0x80385780; // type:function size:0x34 +getPlayerSourceRoomId__15dSndSourceMgr_cCFv = .text:0x80385780; // type:function size:0x34 fn_803857C0 = .text:0x803857C0; // type:function size:0x5C fn_80385820 = .text:0x80385820; // type:function size:0x8 fn_80385830 = .text:0x80385830; // type:function size:0x44 @@ -21174,7 +21174,7 @@ fn_80389F50 = .text:0x80389F50; // type:function size:0x208 d_s_vt_0x19C__14dSoundSource_cFv = .text:0x8038A160; // type:function size:0x6C fn_8038A1D0 = .text:0x8038A1D0; // type:function size:0xD8 vt_0xD8__14dSoundSource_cFv = .text:0x8038A2B0; // type:function size:0x48 -fn_8038A300 = .text:0x8038A300; // type:function size:0x10 +getRoomId__14dSoundSource_cCFv = .text:0x8038A300; // type:function size:0x10 vt_0xA4__14dSoundSource_cFv = .text:0x8038A310; // type:function size:0xB8 vt_0xA8__14dSoundSource_cFv = .text:0x8038A3D0; // type:function size:0x58 vt_0xAC__14dSoundSource_cFv = .text:0x8038A430; // type:function size:0x30 @@ -28855,65 +28855,65 @@ lbl_804F0CC8 = .rodata:0x804F0CC8; // type:object size:0x10 lbl_804F0CD8 = .rodata:0x804F0CD8; // type:object size:0x18 lbl_804F0CF0 = .rodata:0x804F0CF0; // type:object size:0x10 data:string lbl_804F0D00 = .rodata:0x804F0D00; // type:object size:0x80 data:4byte -lbl_804F0D80 = .rodata:0x804F0D80; // type:object size:0xC -lbl_804F0D8C = .rodata:0x804F0D8C; // type:object size:0xC -lbl_804F0D98 = .rodata:0x804F0D98; // type:object size:0xC -lbl_804F0DA4 = .rodata:0x804F0DA4; // type:object size:0xC -lbl_804F0DB0 = .rodata:0x804F0DB0; // type:object size:0xC -lbl_804F0DBC = .rodata:0x804F0DBC; // type:object size:0xC -lbl_804F0DC8 = .rodata:0x804F0DC8; // type:object size:0xC -lbl_804F0DD4 = .rodata:0x804F0DD4; // type:object size:0xC -lbl_804F0DE0 = .rodata:0x804F0DE0; // type:object size:0xC -lbl_804F0DEC = .rodata:0x804F0DEC; // type:object size:0xC -lbl_804F0DF8 = .rodata:0x804F0DF8; // type:object size:0xC -lbl_804F0E04 = .rodata:0x804F0E04; // type:object size:0xC -lbl_804F0E10 = .rodata:0x804F0E10; // type:object size:0xC -lbl_804F0E1C = .rodata:0x804F0E1C; // type:object size:0xC -lbl_804F0E28 = .rodata:0x804F0E28; // type:object size:0xC -lbl_804F0E34 = .rodata:0x804F0E34; // type:object size:0xC -lbl_804F0E40 = .rodata:0x804F0E40; // type:object size:0xC -lbl_804F0E4C = .rodata:0x804F0E4C; // type:object size:0xC -lbl_804F0E58 = .rodata:0x804F0E58; // type:object size:0xC -lbl_804F0E64 = .rodata:0x804F0E64; // type:object size:0xC -lbl_804F0E70 = .rodata:0x804F0E70; // type:object size:0xC -lbl_804F0E7C = .rodata:0x804F0E7C; // type:object size:0xC -lbl_804F0E88 = .rodata:0x804F0E88; // type:object size:0xC -lbl_804F0E94 = .rodata:0x804F0E94; // type:object size:0xC -lbl_804F0EA0 = .rodata:0x804F0EA0; // type:object size:0xC -lbl_804F0EAC = .rodata:0x804F0EAC; // type:object size:0xC -lbl_804F0EB8 = .rodata:0x804F0EB8; // type:object size:0xC -lbl_804F0EC4 = .rodata:0x804F0EC4; // type:object size:0xC -lbl_804F0ED0 = .rodata:0x804F0ED0; // type:object size:0xC -lbl_804F0EDC = .rodata:0x804F0EDC; // type:object size:0xC -lbl_804F0EE8 = .rodata:0x804F0EE8; // type:object size:0xC -lbl_804F0EF4 = .rodata:0x804F0EF4; // type:object size:0xC -lbl_804F0F00 = .rodata:0x804F0F00; // type:object size:0xC -lbl_804F0F0C = .rodata:0x804F0F0C; // type:object size:0xC -lbl_804F0F18 = .rodata:0x804F0F18; // type:object size:0xC -lbl_804F0F24 = .rodata:0x804F0F24; // type:object size:0xC -lbl_804F0F30 = .rodata:0x804F0F30; // type:object size:0xC -lbl_804F0F3C = .rodata:0x804F0F3C; // type:object size:0xC -lbl_804F0F48 = .rodata:0x804F0F48; // type:object size:0xC -lbl_804F0F54 = .rodata:0x804F0F54; // type:object size:0xC -lbl_804F0F60 = .rodata:0x804F0F60; // type:object size:0xC -lbl_804F0F6C = .rodata:0x804F0F6C; // type:object size:0xC -lbl_804F0F78 = .rodata:0x804F0F78; // type:object size:0xC -lbl_804F0F84 = .rodata:0x804F0F84; // type:object size:0xC -lbl_804F0F90 = .rodata:0x804F0F90; // type:object size:0xC -lbl_804F0F9C = .rodata:0x804F0F9C; // type:object size:0xC -lbl_804F0FA8 = .rodata:0x804F0FA8; // type:object size:0xC -lbl_804F0FB4 = .rodata:0x804F0FB4; // type:object size:0xC -lbl_804F0FC0 = .rodata:0x804F0FC0; // type:object size:0xC -lbl_804F0FCC = .rodata:0x804F0FCC; // type:object size:0xC -lbl_804F0FD8 = .rodata:0x804F0FD8; // type:object size:0xC -lbl_804F0FE4 = .rodata:0x804F0FE4; // type:object size:0xC -lbl_804F0FF0 = .rodata:0x804F0FF0; // type:object size:0xC -lbl_804F0FFC = .rodata:0x804F0FFC; // type:object size:0xC -lbl_804F1008 = .rodata:0x804F1008; // type:object size:0xC -lbl_804F1014 = .rodata:0x804F1014; // type:object size:0xC -lbl_804F1020 = .rodata:0x804F1020; // type:object size:0xC -lbl_804F102C = .rodata:0x804F102C; // type:object size:0xC -STAGE_MUSIC_RELATED = .rodata:0x804F1038; // type:object size:0x12D0 data:4byte +@16 = .rodata:0x804F0D80; // type:object size:0xA scope:local data:string +@26 = .rodata:0x804F0D8C; // type:object size:0xA scope:local data:string +@35 = .rodata:0x804F0D98; // type:object size:0xA scope:local data:string +@37 = .rodata:0x804F0DA4; // type:object size:0xA scope:local data:string +@39 = .rodata:0x804F0DB0; // type:object size:0xA scope:local data:string +@40 = .rodata:0x804F0DBC; // type:object size:0xA scope:local data:string +@41 = .rodata:0x804F0DC8; // type:object size:0xA scope:local data:string +@43 = .rodata:0x804F0DD4; // type:object size:0xA scope:local data:string +@44 = .rodata:0x804F0DE0; // type:object size:0xA scope:local data:string +@45 = .rodata:0x804F0DEC; // type:object size:0xA scope:local data:string +@46 = .rodata:0x804F0DF8; // type:object size:0xA scope:local data:string +@48 = .rodata:0x804F0E04; // type:object size:0xA scope:local data:string +@50 = .rodata:0x804F0E10; // type:object size:0xA scope:local data:string +@51 = .rodata:0x804F0E1C; // type:object size:0xA scope:local data:string +@72 = .rodata:0x804F0E28; // type:object size:0xA scope:local data:string +@74 = .rodata:0x804F0E34; // type:object size:0xA scope:local data:string +@77 = .rodata:0x804F0E40; // type:object size:0xA scope:local data:string +@80 = .rodata:0x804F0E4C; // type:object size:0xA scope:local data:string +@81 = .rodata:0x804F0E58; // type:object size:0xA scope:local data:string +@83 = .rodata:0x804F0E64; // type:object size:0xA scope:local data:string +@85 = .rodata:0x804F0E70; // type:object size:0xA scope:local data:string +@88 = .rodata:0x804F0E7C; // type:object size:0xA scope:local data:string +@91 = .rodata:0x804F0E88; // type:object size:0xA scope:local data:string +@92 = .rodata:0x804F0E94; // type:object size:0xA scope:local data:string +@97 = .rodata:0x804F0EA0; // type:object size:0xA scope:local data:string +@98 = .rodata:0x804F0EAC; // type:object size:0xA scope:local data:string +@102 = .rodata:0x804F0EB8; // type:object size:0xA scope:local data:string +@117 = .rodata:0x804F0EC4; // type:object size:0xA scope:local data:string +@119 = .rodata:0x804F0ED0; // type:object size:0xA scope:local data:string +@121 = .rodata:0x804F0EDC; // type:object size:0xA scope:local data:string +@122 = .rodata:0x804F0EE8; // type:object size:0xA scope:local data:string +@123 = .rodata:0x804F0EF4; // type:object size:0xA scope:local data:string +@124 = .rodata:0x804F0F00; // type:object size:0xA scope:local data:string +@125 = .rodata:0x804F0F0C; // type:object size:0xA scope:local data:string +@126 = .rodata:0x804F0F18; // type:object size:0xA scope:local data:string +@127 = .rodata:0x804F0F24; // type:object size:0xA scope:local data:string +@128 = .rodata:0x804F0F30; // type:object size:0xA scope:local data:string +@129 = .rodata:0x804F0F3C; // type:object size:0xA scope:local data:string +@130 = .rodata:0x804F0F48; // type:object size:0xA scope:local data:string +@131 = .rodata:0x804F0F54; // type:object size:0xA scope:local data:string +@134 = .rodata:0x804F0F60; // type:object size:0xA scope:local data:string +@135 = .rodata:0x804F0F6C; // type:object size:0xA scope:local data:string +@136 = .rodata:0x804F0F78; // type:object size:0xA scope:local data:string +@153 = .rodata:0x804F0F84; // type:object size:0xA scope:local data:string +@154 = .rodata:0x804F0F90; // type:object size:0xA scope:local data:string +@155 = .rodata:0x804F0F9C; // type:object size:0xA scope:local data:string +@157 = .rodata:0x804F0FA8; // type:object size:0xA scope:local data:string +@158 = .rodata:0x804F0FB4; // type:object size:0xA scope:local data:string +@160 = .rodata:0x804F0FC0; // type:object size:0xA scope:local data:string +@161 = .rodata:0x804F0FCC; // type:object size:0xA scope:local data:string +@162 = .rodata:0x804F0FD8; // type:object size:0xA scope:local data:string +@164 = .rodata:0x804F0FE4; // type:object size:0xA scope:local data:string +@165 = .rodata:0x804F0FF0; // type:object size:0xA scope:local data:string +@166 = .rodata:0x804F0FFC; // type:object size:0xA scope:local data:string +@168 = .rodata:0x804F1008; // type:object size:0xA scope:local data:string +@169 = .rodata:0x804F1014; // type:object size:0xA scope:local data:string +@170 = .rodata:0x804F1020; // type:object size:0xA scope:local data:string +@172 = .rodata:0x804F102C; // type:object size:0xA scope:local data:string +sInfos__13dSndStageInfo = .rodata:0x804F1038; // type:object size:0x12D0 data:4byte lbl_804F2308 = .rodata:0x804F2308; // type:object size:0x10 lbl_804F2318 = .rodata:0x804F2318; // type:object size:0x10 lbl_804F2328 = .rodata:0x804F2328; // type:object size:0x10 @@ -37975,8 +37975,8 @@ lbl_805489C0 = .data:0x805489C0; // type:object size:0x10 data:string lbl_805489D0 = .data:0x805489D0; // type:object size:0xC lbl_805489DC = .data:0x805489DC; // type:object size:0xC lbl_805489E8 = .data:0x805489E8; // type:object size:0xC -vtable3 = .data:0x805489F4; // type:object size:0xC -lbl_80548A00 = .data:0x80548A00; // type:object size:0xC +__vt__32SndMgrDisposer<14dSndStateMgr_c> = .data:0x805489F4; // type:object size:0xC +@STRING@resetStageName__14dSndStateMgr_cFv = .data:0x80548A00; // type:object size:0xB data:string lbl_80548A0C = .data:0x80548A0C; // type:object size:0xC lbl_80548A18 = .data:0x80548A18; // type:object size:0x10 lbl_80548A28 = .data:0x80548A28; // type:object size:0x10 @@ -38014,7 +38014,7 @@ __vt__29dSndControlPlayerVolumeBase_c = .data:0x80548CA4; // type:object size:0x jumptable_80548CC8 = .data:0x80548CC8; // type:object size:0x34 scope:local jumptable_80548CFC = .data:0x80548CFC; // type:object size:0x284 scope:local lbl_80548F80 = .data:0x80548F80; // type:object size:0xC -vtable4 = .data:0x80548F8C; // type:object size:0xC +__vt__30SndMgrDisposer<12dSndBgmMgr_c> = .data:0x80548F8C; // type:object size:0xC lbl_80548F98 = .data:0x80548F98; // type:object size:0xC lbl_80548FA4 = .data:0x80548FA4; // type:object size:0x10 lbl_80548FB4 = .data:0x80548FB4; // type:object size:0xC @@ -42276,12 +42276,12 @@ sDisposer__15dSnd3DManager_c = .sbss:0x80575D5C; // type:object size:0x4 data:4b 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 -ENEMY_SOUND_MGR = .sbss:0x80575D6C; // type:object size:0x4 data:4byte -ENEMY_SOUND_MGR_source = .sbss:0x80575D70; // type:object size:0x8 data:4byte +sInstance__14dSndStateMgr_c = .sbss:0x80575D6C; // type:object size:0x4 data:4byte +sDisposer__14dSndStateMgr_c = .sbss:0x80575D70; // type:object size:0x8 data:4byte sInstance__24dSndAreaSoundEffectMgr_c = .sbss:0x80575D78; // type:object size:0x4 data:4byte sDisposer__24dSndAreaSoundEffectMgr_c = .sbss:0x80575D7C; // type:object size:0x4 data:4byte -FANFARE_SOUND_MGR = .sbss:0x80575D80; // type:object size:0x4 data:4byte -FANFARE_SOUND_MGR_source = .sbss:0x80575D84; // type:object size:0x4 data:4byte +sInstance__12dSndBgmMgr_c = .sbss:0x80575D80; // type:object size:0x4 data:4byte +sDisposer__12dSndBgmMgr_c = .sbss:0x80575D84; // type:object size:0x4 data:4byte lbl_80575D88 = .sbss:0x80575D88; // type:object size:0x8 data:4byte SOME_UNUSED_SOUND_MGR = .sbss:0x80575D90; // type:object size:0x4 data:4byte SOME_UNUSED_SOUND_MGR_source = .sbss:0x80575D94; // type:object size:0x4 data:4byte @@ -48804,111 +48804,111 @@ lbl_8057D468 = .sdata2:0x8057D468; // type:object size:0x4 align:4 data:float lbl_8057D46C = .sdata2:0x8057D46C; // type:object size:0x4 align:4 data:float lbl_8057D470 = .sdata2:0x8057D470; // type:object size:0x4 align:4 data:float lbl_8057D474 = .sdata2:0x8057D474; // type:object size:0x4 align:4 data:float -lbl_8057D478 = .sdata2:0x8057D478; // type:object size:0x8 -lbl_8057D480 = .sdata2:0x8057D480; // type:object size:0x8 -lbl_8057D488 = .sdata2:0x8057D488; // type:object size:0x8 -lbl_8057D490 = .sdata2:0x8057D490; // type:object size:0x8 -lbl_8057D498 = .sdata2:0x8057D498; // type:object size:0x8 -lbl_8057D4A0 = .sdata2:0x8057D4A0; // type:object size:0x8 -lbl_8057D4A8 = .sdata2:0x8057D4A8; // type:object size:0x8 -lbl_8057D4B0 = .sdata2:0x8057D4B0; // type:object size:0x8 -lbl_8057D4B8 = .sdata2:0x8057D4B8; // type:object size:0x8 -lbl_8057D4C0 = .sdata2:0x8057D4C0; // type:object size:0x8 -lbl_8057D4C8 = .sdata2:0x8057D4C8; // type:object size:0x8 -lbl_8057D4D0 = .sdata2:0x8057D4D0; // type:object size:0x8 -lbl_8057D4D8 = .sdata2:0x8057D4D8; // type:object size:0x8 -lbl_8057D4E0 = .sdata2:0x8057D4E0; // type:object size:0x8 -lbl_8057D4E8 = .sdata2:0x8057D4E8; // type:object size:0x8 -lbl_8057D4F0 = .sdata2:0x8057D4F0; // type:object size:0x8 -lbl_8057D4F8 = .sdata2:0x8057D4F8; // type:object size:0x8 -lbl_8057D500 = .sdata2:0x8057D500; // type:object size:0x8 -lbl_8057D508 = .sdata2:0x8057D508; // type:object size:0x8 -lbl_8057D510 = .sdata2:0x8057D510; // type:object size:0x8 -lbl_8057D518 = .sdata2:0x8057D518; // type:object size:0x8 -lbl_8057D520 = .sdata2:0x8057D520; // type:object size:0x8 -lbl_8057D528 = .sdata2:0x8057D528; // type:object size:0x8 -lbl_8057D530 = .sdata2:0x8057D530; // type:object size:0x8 -lbl_8057D538 = .sdata2:0x8057D538; // type:object size:0x8 -lbl_8057D540 = .sdata2:0x8057D540; // type:object size:0x8 -lbl_8057D548 = .sdata2:0x8057D548; // type:object size:0x8 -lbl_8057D550 = .sdata2:0x8057D550; // type:object size:0x8 -lbl_8057D558 = .sdata2:0x8057D558; // type:object size:0x8 -lbl_8057D560 = .sdata2:0x8057D560; // type:object size:0x8 -lbl_8057D568 = .sdata2:0x8057D568; // type:object size:0x8 -lbl_8057D570 = .sdata2:0x8057D570; // type:object size:0x8 -lbl_8057D578 = .sdata2:0x8057D578; // type:object size:0x8 -lbl_8057D580 = .sdata2:0x8057D580; // type:object size:0x8 -lbl_8057D588 = .sdata2:0x8057D588; // type:object size:0x8 -lbl_8057D590 = .sdata2:0x8057D590; // type:object size:0x8 -lbl_8057D598 = .sdata2:0x8057D598; // type:object size:0x8 -lbl_8057D5A0 = .sdata2:0x8057D5A0; // type:object size:0x8 -lbl_8057D5A8 = .sdata2:0x8057D5A8; // type:object size:0x8 -lbl_8057D5B0 = .sdata2:0x8057D5B0; // type:object size:0x8 -lbl_8057D5B8 = .sdata2:0x8057D5B8; // type:object size:0x8 -lbl_8057D5C0 = .sdata2:0x8057D5C0; // type:object size:0x8 -lbl_8057D5C8 = .sdata2:0x8057D5C8; // type:object size:0x8 -lbl_8057D5D0 = .sdata2:0x8057D5D0; // type:object size:0x8 -lbl_8057D5D8 = .sdata2:0x8057D5D8; // type:object size:0x8 -lbl_8057D5E0 = .sdata2:0x8057D5E0; // type:object size:0x8 -lbl_8057D5E8 = .sdata2:0x8057D5E8; // type:object size:0x8 -lbl_8057D5F0 = .sdata2:0x8057D5F0; // type:object size:0x8 -lbl_8057D5F8 = .sdata2:0x8057D5F8; // type:object size:0x8 -lbl_8057D600 = .sdata2:0x8057D600; // type:object size:0x8 -lbl_8057D608 = .sdata2:0x8057D608; // type:object size:0x8 -lbl_8057D610 = .sdata2:0x8057D610; // type:object size:0x8 -lbl_8057D618 = .sdata2:0x8057D618; // type:object size:0x8 -lbl_8057D620 = .sdata2:0x8057D620; // type:object size:0x8 -lbl_8057D628 = .sdata2:0x8057D628; // type:object size:0x8 -lbl_8057D630 = .sdata2:0x8057D630; // type:object size:0x8 -lbl_8057D638 = .sdata2:0x8057D638; // type:object size:0x8 -lbl_8057D640 = .sdata2:0x8057D640; // type:object size:0x8 -lbl_8057D648 = .sdata2:0x8057D648; // type:object size:0x8 -lbl_8057D650 = .sdata2:0x8057D650; // type:object size:0x8 -lbl_8057D658 = .sdata2:0x8057D658; // type:object size:0x8 -lbl_8057D660 = .sdata2:0x8057D660; // type:object size:0x8 -lbl_8057D668 = .sdata2:0x8057D668; // type:object size:0x8 -lbl_8057D670 = .sdata2:0x8057D670; // type:object size:0x8 -lbl_8057D678 = .sdata2:0x8057D678; // type:object size:0x8 -lbl_8057D680 = .sdata2:0x8057D680; // type:object size:0x8 -lbl_8057D688 = .sdata2:0x8057D688; // type:object size:0x8 -lbl_8057D690 = .sdata2:0x8057D690; // type:object size:0x8 -lbl_8057D698 = .sdata2:0x8057D698; // type:object size:0x8 -lbl_8057D6A0 = .sdata2:0x8057D6A0; // type:object size:0x8 -lbl_8057D6A8 = .sdata2:0x8057D6A8; // type:object size:0x8 -lbl_8057D6B0 = .sdata2:0x8057D6B0; // type:object size:0x8 -lbl_8057D6B8 = .sdata2:0x8057D6B8; // type:object size:0x8 -lbl_8057D6C0 = .sdata2:0x8057D6C0; // type:object size:0x8 -lbl_8057D6C8 = .sdata2:0x8057D6C8; // type:object size:0x8 -lbl_8057D6D0 = .sdata2:0x8057D6D0; // type:object size:0x8 -lbl_8057D6D8 = .sdata2:0x8057D6D8; // type:object size:0x8 -lbl_8057D6E0 = .sdata2:0x8057D6E0; // type:object size:0x8 -lbl_8057D6E8 = .sdata2:0x8057D6E8; // type:object size:0x8 -lbl_8057D6F0 = .sdata2:0x8057D6F0; // type:object size:0x8 -lbl_8057D6F8 = .sdata2:0x8057D6F8; // type:object size:0x8 -lbl_8057D700 = .sdata2:0x8057D700; // type:object size:0x8 -lbl_8057D708 = .sdata2:0x8057D708; // type:object size:0x8 -lbl_8057D710 = .sdata2:0x8057D710; // type:object size:0x8 -lbl_8057D718 = .sdata2:0x8057D718; // type:object size:0x8 -lbl_8057D720 = .sdata2:0x8057D720; // type:object size:0x8 -lbl_8057D728 = .sdata2:0x8057D728; // type:object size:0x8 -lbl_8057D730 = .sdata2:0x8057D730; // type:object size:0x8 -lbl_8057D738 = .sdata2:0x8057D738; // type:object size:0x8 -lbl_8057D740 = .sdata2:0x8057D740; // type:object size:0x8 -lbl_8057D748 = .sdata2:0x8057D748; // type:object size:0x8 -lbl_8057D750 = .sdata2:0x8057D750; // type:object size:0x8 -lbl_8057D758 = .sdata2:0x8057D758; // type:object size:0x8 -lbl_8057D760 = .sdata2:0x8057D760; // type:object size:0x8 -lbl_8057D768 = .sdata2:0x8057D768; // type:object size:0x8 -lbl_8057D770 = .sdata2:0x8057D770; // type:object size:0x8 -lbl_8057D778 = .sdata2:0x8057D778; // type:object size:0x8 -lbl_8057D780 = .sdata2:0x8057D780; // type:object size:0x8 -lbl_8057D788 = .sdata2:0x8057D788; // type:object size:0x8 -lbl_8057D790 = .sdata2:0x8057D790; // type:object size:0x8 -lbl_8057D798 = .sdata2:0x8057D798; // type:object size:0x8 -lbl_8057D7A0 = .sdata2:0x8057D7A0; // type:object size:0x8 -lbl_8057D7A8 = .sdata2:0x8057D7A8; // type:object size:0x8 -lbl_8057D7B0 = .sdata2:0x8057D7B0; // type:object size:0x8 -lbl_8057D7B8 = .sdata2:0x8057D7B8; // type:object size:0x8 data:4byte +@11 = .sdata2:0x8057D478; // type:object size:0x5 scope:local data:string +@12 = .sdata2:0x8057D480; // type:object size:0x5 scope:local data:string +@13 = .sdata2:0x8057D488; // type:object size:0x5 scope:local data:string +@14 = .sdata2:0x8057D490; // type:object size:0x7 scope:local data:string +@15 = .sdata2:0x8057D498; // type:object size:0x5 scope:local data:string +@17 = .sdata2:0x8057D4A0; // type:object size:0x5 scope:local data:string +@18 = .sdata2:0x8057D4A8; // type:object size:0x7 scope:local data:string +@19 = .sdata2:0x8057D4B0; // type:object size:0x7 scope:local data:string +@20 = .sdata2:0x8057D4B8; // type:object size:0x7 scope:local data:string +@21 = .sdata2:0x8057D4C0; // type:object size:0x7 scope:local data:string +@22 = .sdata2:0x8057D4C8; // type:object size:0x5 scope:local data:string +@23 = .sdata2:0x8057D4D0; // type:object size:0x5 scope:local data:string +@24 = .sdata2:0x8057D4D8; // type:object size:0x7 scope:local data:string +@25 = .sdata2:0x8057D4E0; // type:object size:0x7 scope:local data:string +@27 = .sdata2:0x8057D4E8; // type:object size:0x5 scope:local data:string +@28 = .sdata2:0x8057D4F0; // type:object size:0x7 scope:local data:string +@29 = .sdata2:0x8057D4F8; // type:object size:0x7 scope:local data:string +@30 = .sdata2:0x8057D500; // type:object size:0x7 scope:local data:string +@31 = .sdata2:0x8057D508; // type:object size:0x7 scope:local data:string +@32 = .sdata2:0x8057D510; // type:object size:0x7 scope:local data:string +@33 = .sdata2:0x8057D518; // type:object size:0x7 scope:local data:string +@34 = .sdata2:0x8057D520; // type:object size:0x5 scope:local data:string +@36 = .sdata2:0x8057D528; // type:object size:0x5 scope:local data:string +@38 = .sdata2:0x8057D530; // type:object size:0x5 scope:local data:string +@42 = .sdata2:0x8057D538; // type:object size:0x5 scope:local data:string +@47 = .sdata2:0x8057D540; // type:object size:0x5 scope:local data:string +@49 = .sdata2:0x8057D548; // type:object size:0x5 scope:local data:string +@52 = .sdata2:0x8057D550; // type:object size:0x5 scope:local data:string +@53 = .sdata2:0x8057D558; // type:object size:0x7 scope:local data:string +@54 = .sdata2:0x8057D560; // type:object size:0x5 scope:local data:string +@55 = .sdata2:0x8057D568; // type:object size:0x5 scope:local data:string +@56 = .sdata2:0x8057D570; // type:object size:0x5 scope:local data:string +@57 = .sdata2:0x8057D578; // type:object size:0x5 scope:local data:string +@58 = .sdata2:0x8057D580; // type:object size:0x5 scope:local data:string +@59 = .sdata2:0x8057D588; // type:object size:0x7 scope:local data:string +@60 = .sdata2:0x8057D590; // type:object size:0x5 scope:local data:string +@61 = .sdata2:0x8057D598; // type:object size:0x7 scope:local data:string +@62 = .sdata2:0x8057D5A0; // type:object size:0x7 scope:local data:string +@63 = .sdata2:0x8057D5A8; // type:object size:0x7 scope:local data:string +@64 = .sdata2:0x8057D5B0; // type:object size:0x7 scope:local data:string +@65 = .sdata2:0x8057D5B8; // type:object size:0x7 scope:local data:string +@66 = .sdata2:0x8057D5C0; // type:object size:0x7 scope:local data:string +@67 = .sdata2:0x8057D5C8; // type:object size:0x7 scope:local data:string +@68 = .sdata2:0x8057D5D0; // type:object size:0x7 scope:local data:string +@69 = .sdata2:0x8057D5D8; // type:object size:0x7 scope:local data:string +@70 = .sdata2:0x8057D5E0; // type:object size:0x7 scope:local data:string +@71 = .sdata2:0x8057D5E8; // type:object size:0x5 scope:local data:string +@73 = .sdata2:0x8057D5F0; // type:object size:0x7 scope:local data:string +@75 = .sdata2:0x8057D5F8; // type:object size:0x5 scope:local data:string +@76 = .sdata2:0x8057D600; // type:object size:0x7 scope:local data:string +@78 = .sdata2:0x8057D608; // type:object size:0x5 scope:local data:string +@79 = .sdata2:0x8057D610; // type:object size:0x5 scope:local data:string +@82 = .sdata2:0x8057D618; // type:object size:0x5 scope:local data:string +@84 = .sdata2:0x8057D620; // type:object size:0x7 scope:local data:string +@86 = .sdata2:0x8057D628; // type:object size:0x5 scope:local data:string +@87 = .sdata2:0x8057D630; // type:object size:0x5 scope:local data:string +@89 = .sdata2:0x8057D638; // type:object size:0x5 scope:local data:string +@90 = .sdata2:0x8057D640; // type:object size:0x5 scope:local data:string +@93 = .sdata2:0x8057D648; // type:object size:0x7 scope:local data:string +@94 = .sdata2:0x8057D650; // type:object size:0x7 scope:local data:string +@95 = .sdata2:0x8057D658; // type:object size:0x7 scope:local data:string +@96 = .sdata2:0x8057D660; // type:object size:0x7 scope:local data:string +@99 = .sdata2:0x8057D668; // type:object size:0x5 scope:local data:string +@100 = .sdata2:0x8057D670; // type:object size:0x5 scope:local data:string +@101 = .sdata2:0x8057D678; // type:object size:0x5 scope:local data:string +@103 = .sdata2:0x8057D680; // type:object size:0x7 scope:local data:string +@104 = .sdata2:0x8057D688; // type:object size:0x7 scope:local data:string +@105 = .sdata2:0x8057D690; // type:object size:0x7 scope:local data:string +@106 = .sdata2:0x8057D698; // type:object size:0x7 scope:local data:string +@107 = .sdata2:0x8057D6A0; // type:object size:0x7 scope:local data:string +@108 = .sdata2:0x8057D6A8; // type:object size:0x7 scope:local data:string +@109 = .sdata2:0x8057D6B0; // type:object size:0x7 scope:local data:string +@110 = .sdata2:0x8057D6B8; // type:object size:0x5 scope:local data:string +@111 = .sdata2:0x8057D6C0; // type:object size:0x5 scope:local data:string +@112 = .sdata2:0x8057D6C8; // type:object size:0x5 scope:local data:string +@113 = .sdata2:0x8057D6D0; // type:object size:0x5 scope:local data:string +@114 = .sdata2:0x8057D6D8; // type:object size:0x5 scope:local data:string +@115 = .sdata2:0x8057D6E0; // type:object size:0x5 scope:local data:string +@116 = .sdata2:0x8057D6E8; // type:object size:0x5 scope:local data:string +@118 = .sdata2:0x8057D6F0; // type:object size:0x5 scope:local data:string +@120 = .sdata2:0x8057D6F8; // type:object size:0x5 scope:local data:string +@132 = .sdata2:0x8057D700; // type:object size:0x7 scope:local data:string +@133 = .sdata2:0x8057D708; // type:object size:0x6 scope:local data:string +@137 = .sdata2:0x8057D710; // type:object size:0x6 scope:local data:string +@138 = .sdata2:0x8057D718; // type:object size:0x6 scope:local data:string +@139 = .sdata2:0x8057D720; // type:object size:0x6 scope:local data:string +@140 = .sdata2:0x8057D728; // type:object size:0x6 scope:local data:string +@141 = .sdata2:0x8057D730; // type:object size:0x6 scope:local data:string +@142 = .sdata2:0x8057D738; // type:object size:0x6 scope:local data:string +@143 = .sdata2:0x8057D740; // type:object size:0x6 scope:local data:string +@144 = .sdata2:0x8057D748; // type:object size:0x6 scope:local data:string +@145 = .sdata2:0x8057D750; // type:object size:0x6 scope:local data:string +@146 = .sdata2:0x8057D758; // type:object size:0x6 scope:local data:string +@147 = .sdata2:0x8057D760; // type:object size:0x6 scope:local data:string +@148 = .sdata2:0x8057D768; // type:object size:0x6 scope:local data:string +@149 = .sdata2:0x8057D770; // type:object size:0x6 scope:local data:string +@150 = .sdata2:0x8057D778; // type:object size:0x6 scope:local data:string +@151 = .sdata2:0x8057D780; // type:object size:0x6 scope:local data:string +@152 = .sdata2:0x8057D788; // type:object size:0x5 scope:local data:string +@156 = .sdata2:0x8057D790; // type:object size:0x5 scope:local data:string +@159 = .sdata2:0x8057D798; // type:object size:0x5 scope:local data:string +@163 = .sdata2:0x8057D7A0; // type:object size:0x6 scope:local data:string +@167 = .sdata2:0x8057D7A8; // type:object size:0x6 scope:local data:string +@171 = .sdata2:0x8057D7B0; // type:object size:0x5 scope:local data:string +sNumStageInfos__13dSndStageInfo = .sdata2:0x8057D7B8; // type:object size:0x4 data:4byte lbl_8057D7C0 = .sdata2:0x8057D7C0; // type:object size:0x4 align:4 data:float lbl_8057D7C4 = .sdata2:0x8057D7C4; // type:object size:0x4 align:4 data:float lbl_8057D7C8 = .sdata2:0x8057D7C8; // type:object size:0x4 align:4 data:float diff --git a/configure.py b/configure.py index 566a8346..997ca80a 100644 --- a/configure.py +++ b/configure.py @@ -743,9 +743,8 @@ config.libs = [ Object(NonMatching, "d/snd/d_snd_player_mgr.cpp"), Object(NonMatching, "d/snd/d_snd_control_player_mgr.cpp"), Object(Matching, "d/snd/d_snd_3d_manager.cpp"), - # this one is a bit weird. it deals with all the stage definitions, - # but it's not actually the bgm manager? - Object(NonMatching, "d/snd/d_snd_stage_mgr.cpp"), + Object(NonMatching, "d/snd/d_snd_state_mgr.cpp"), + Object(Matching, "d/snd/d_snd_stage_data.cpp"), Object(NonMatching, "d/snd/d_snd_unk_component_2.cpp"), Object(NonMatching, "d/snd/d_snd_area_sound_effect_mgr.cpp"), Object(NonMatching, "d/snd/d_snd_area_sound.cpp"), @@ -753,7 +752,7 @@ config.libs = [ Object(Matching, "d/snd/d_snd_control_player.cpp"), Object(NonMatching, "d/snd/d_snd_bgm_mgr.cpp"), Object(NonMatching, "d/snd/d_snd_bgm_sound_callbacks.cpp"), - Object(NonMatching, "d/snd/d_snd_bgm_sound_boss_callbacks.cpp"), + Object(NonMatching, "d/snd/d_snd_bgm_sound_battle_callbacks.cpp"), Object(NonMatching, "d/snd/d_snd_bgm_sound.cpp"), Object(NonMatching, "d/snd/d_snd_unk_15.cpp"), Object(NonMatching, "d/snd/d_snd_small_effect_mgr.cpp"), diff --git a/include/d/d_sc_game.h b/include/d/d_sc_game.h index ec04ea82..01b0f7bc 100644 --- a/include/d/d_sc_game.h +++ b/include/d/d_sc_game.h @@ -88,6 +88,10 @@ struct SpawnInfo { return (Trial)trial; } + const char *getStageName() const { + return stageName; + } + bool isNight() { return getTimeOfDay() == NIGHT; } diff --git a/include/d/snd/d_snd_bgm_mgr.h b/include/d/snd/d_snd_bgm_mgr.h new file mode 100644 index 00000000..32de6a66 --- /dev/null +++ b/include/d/snd/d_snd_bgm_mgr.h @@ -0,0 +1,139 @@ +#ifndef D_SND_BGM_MGR_H +#define D_SND_BGM_MGR_H + +#include "common.h" +#include "d/snd/d_snd_actor.h" +#include "d/snd/d_snd_sound.h" +#include "d/snd/d_snd_util.h" +#include "nw4r/snd/snd_FxReverbStdDpl2.h" +#include "nw4r/ut/ut_list.h" + +SND_DISPOSER_FORWARD_DECL(dSndBgmMgr_c); + +class dSndBgmSound_c; +class dSndBgmBattleSound_c; + +// Previous Ghidra name: FanfareSoundMgr +class dSndBgmMgr_c { +public: + SND_DISPOSER_MEMBERS(dSndBgmMgr_c); + +public: + enum BgmSoundList_e { + BGM_LIST_PREPARING = 0, + BGM_LIST_PLAYING = 1, + BGM_LIST_STOPPED = 2, + + BGM_LIST_MAX = 3, + }; + + dSndBgmMgr_c(); + + bool playBgm(u32 soundId, s32 fadeFrames, bool paused); + bool prepareBgm(u32 soundId, u32 startOffset); + void stopAllBgm(s32 fadeFrames); + + dSndBgmSound_c *getSoundHandleForBgm(u32 soundId, u32 startOffset); + bool isPlayingBgmSoundId(u32 soundId) const; + + bool isPreparingBgmSoundId(u32 soundId) const; + bool isFadingOutBgmSoundId(u32 soundId) const; + bool isPreparingBgmSoundIdWithStartOffset(u32 soundId, u32 startOffset) const; + bool isPreparedBgmSoundId(u32 soundId) const; + + void registSound(dSndSound_c *sound); + void unregistSound(dSndSound_c *sound); + + dSndSound_c *getFanSoundHandleForFan2(u32 soundId); + dSndSound_c *getSoundHandleCurrentlyPlayingFanSound(u32 soundId); + bool isCurrentlyPlayingFanSound(u32 soundId) const; + bool hasPlayingFanSounds() const; + + bool playFanSound(u32 soundId); + bool prepareFanSound(u32 soundId); + + void playDelayedSound(u32 soundId, s32 delay); + void cancelDelayedSound(); + void cancelDelayedBgm(); + + dSndBgmSound_c *getBgmSoundByIndex(u32 idx); + + /** + * E.g. Lizalfos fight in ET. Note that in the ET case, this is only called when triggering + * the fight without a cutscene, the cutscene code runs through "ELizarufos_c_opening" + */ + bool beginBgmBattleRoom(); + /** Runs when the fight is over, no matter how you started it */ + bool endBgmBattleRoom(); + +private: + bool stopBgmSound(dSndBgmSound_c *sound, s32 fadeFrames); + void checkForPrepareStoppedBgmSound(u32 stoppedSoundId); + dSndBgmSound_c *findNewBgmSoundHandle(); + dSndBgmSound_c *findIdleBgmSoundHandle(); + bool prepareBgmSound(u32 soundId, dSndBgmSound_c *handle, u32 startOffset); + bool startAdditionalBgm(u32 soundId); + + bool playBattleBgm(u32 soundId, bool immediately); + + /** Used to mute other BGM when battle music is playing */ + void setBgmHandleIdxVolume(u32 handleIdx, f32 volume, s32 fadeFrames); + + bool isBgmHandleIdxPlayingSoundId(u32 handleIdx, u32 soundId); + bool stopBgmHandleIdx(u32 handleIdx, s32 fadeFrames); + + void calcLists(); + + void addToBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound); + void appendToBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound); + void removeFromBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound); + void removeFromAllBgmSoundLists(dSndBgmSound_c *sound); + bool isInBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound); + dSndBgmSound_c *getFirstInBgmSoundList(BgmSoundList_e list); + dSndBgmSound_c *getNextInBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound); + dSndBgmSound_c *getLastInBgmSoundList(BgmSoundList_e list); + + bool startDelayedSound(); + void calcDelayedSound(); + + dSndBgmSound_c *getBgmSoundHandleForId(u32 soundId) const; + + dSndSound_c *getFreeFanSoundHandle(); + dSndSound_c *getFanSoundHandleForFan(u32 soundId); + void stopFanSounds(s32 fadeFrames); + + + bool isSoundRegist(dSndSound_c *sound); + + /* 0x010 */ nw4r::snd::FxReverbStdDpl2 mFx; + /* 0x240 */ UNKWORD field_0x240; + /* 0x244 */ UNKWORD field_0x244; + /* 0x248 */ UNKWORD field_0x248; + /* 0x24C */ u32 mScheduledSoundId; + /* 0x250 */ s32 mScheduledSoundDelay; + /* 0x254 */ dSndBgmSound_c *mBgmSounds[7]; + /* 0x270 */ dSndBgmSound_c *field_0x270; + /* 0x274 */ UNKWORD field_0x274; + /* 0x278 */ nw4r::ut::List mBgmSoundLists[BGM_LIST_MAX]; // node offset 0xF0 -> dSndBgmSound_c + /* 0x29C */ UNKWORD field_0x29C; + /* 0x2A0 */ dSndActor_c mSoundActor; + /* 0x2F4 */ f32 field_0x2F4; + /* 0x2F8 */ s32 field_0x2F8; + /* 0x2FC */ u8 field_0x2FC; + /* 0x300 */ s32 field_0x300; + /* 0x304 */ u8 field_0x304; + /* 0x305 */ u8 field_0x305; + /* 0x306 */ u8 field_0x306; + /* 0x307 */ u8 field_0x307; + /* 0x308 */ u8 field_0x308; + /* 0x30C */ u32 field_0x30C[3]; + /* 0x318 */ u32 field_0x318[3]; + /* 0x324 */ u32 field_0x324[3]; + /* 0x330 */ u8 field_0x330[3]; + /* 0x333 */ u8 field_0x333; + /* 0x334 */ dSndSound_c *mFanSounds[3]; + /* 0x340 */ u8 field_0x340; + /* 0x344 */ nw4r::ut::List mAllSounds; // node offset 0x8 -> dSndSound_c +}; + +#endif diff --git a/include/d/snd/d_snd_bgm_sound.h b/include/d/snd/d_snd_bgm_sound.h new file mode 100644 index 00000000..f7fcb511 --- /dev/null +++ b/include/d/snd/d_snd_bgm_sound.h @@ -0,0 +1,27 @@ +#ifndef D_SND_BGM_SOUND_H +#define D_SND_BGM_SOUND_H + +#include "d/snd/d_snd_sound.h" +#include "nw4r/snd/snd_SoundStartable.h" +#include "nw4r/ut/ut_list.h" + +class dSndBgmSound_c : public dSndSound_c { +public: + dSndBgmSound_c(); + + virtual void init(nw4r::snd::SoundStartable &startable, s32 idx); // vt 0x28 + + bool isPreparedSoundId(u32 soundId) const { + return IsPrepared() && !mIsRunning && GetId() == soundId; + } + +private: + /* 0x0F0 */ nw4r::ut::Node mBgmMgrNode; +}; + +class dSndBgmBattleSound_c : public dSndBgmSound_c { +public: + dSndBgmBattleSound_c(); +}; + +#endif diff --git a/include/d/snd/d_snd_checkers.h b/include/d/snd/d_snd_checkers.h index d18c2777..25613dc0 100644 --- a/include/d/snd/d_snd_checkers.h +++ b/include/d/snd/d_snd_checkers.h @@ -1,8 +1,9 @@ #ifndef D_SND_CHECKERS_H #define D_SND_CHECKERS_H +#include "common.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "nw4r/snd/snd_SoundHandle.h" -#include "toBeSorted/music_mgrs.h" class SoundPropertiesChecker { public: @@ -26,7 +27,7 @@ public: return; } - if (fn_803721F0(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (dSndBgmMgr_c::GetInstance()->isPreparedBgmSoundId(pHandle.GetId())) { if (mpCounter3 != nullptr) { (*mpCounter3)++; } else { @@ -35,7 +36,7 @@ public: return; } - if (fn_803720E0(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (dSndBgmMgr_c::GetInstance()->isPreparingBgmSoundId(pHandle.GetId())) { if (mpCounter3 != nullptr) { (*mpCounter3)++; } else { @@ -44,7 +45,7 @@ public: return; } - if (fn_80372070(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (dSndBgmMgr_c::GetInstance()->isFadingOutBgmSoundId(pHandle.GetId())) { if (mpCounter4 != nullptr) { (*mpCounter4)++; } else { @@ -53,7 +54,9 @@ public: return; } - if (fn_803734C0(FANFARE_SOUND_MGR, pHandle.GetId()) && !fn_80373550(FANFARE_SOUND_MGR, pHandle.GetId())) { + if (dSndBgmMgr_c::GetInstance()->getFanSoundHandleForFan2(pHandle.GetId()) != nullptr && + !dSndBgmMgr_c::GetInstance()->isCurrentlyPlayingFanSound(pHandle.GetId())) { + // Why not mpCounter3??? mCounter3++; } } @@ -70,7 +73,6 @@ private: /* 0x24 */ u32 *mpCounter4; }; - // used at the very least when trying to finish Demise class IsCurrentSoundIdChecker { public: diff --git a/include/d/snd/d_snd_control_player_mgr.h b/include/d/snd/d_snd_control_player_mgr.h index 541268fb..caaad6a1 100644 --- a/include/d/snd/d_snd_control_player_mgr.h +++ b/include/d/snd/d_snd_control_player_mgr.h @@ -49,7 +49,7 @@ public: }; enum VolumeControlGroup { - /** PLAYER_BGM, PLAYER_BGM_BOSS */ + /** PLAYER_BGM, PLAYER_BGM_BATTLE */ CTRL_GROUP_BGM = 0, /** PLAYER_TG_SOUND - PLAYER_AREA_IN_WATER_LV */ CTRL_GROUP_STAGE_EFFECTS = 1, diff --git a/include/d/snd/d_snd_mgr.h b/include/d/snd/d_snd_mgr.h index 305e96ea..56ad1897 100644 --- a/include/d/snd/d_snd_mgr.h +++ b/include/d/snd/d_snd_mgr.h @@ -19,8 +19,8 @@ public: return sInstance; } - static nw4r::snd::SoundArchivePlayer* getPlayer() { - return sInstance->ArcPlayer::getPlayer(); + static nw4r::snd::SoundArchivePlayer& getPlayer() { + return *sInstance->ArcPlayer::getPlayer(); } private: diff --git a/include/d/snd/d_snd_player_mgr.h b/include/d/snd/d_snd_player_mgr.h index 5b83ee5d..fe03b987 100644 --- a/include/d/snd/d_snd_player_mgr.h +++ b/include/d/snd/d_snd_player_mgr.h @@ -51,16 +51,21 @@ public: bool loadDemoArchive(const char *demoArchiveName); const char *getSoundArchivePath(); u32 convertLabelStringToSoundId(const char *label) const; + static bool isBgmPlayerId(u32 id); nw4r::snd::SoundArchivePlayer &getSoundArchivePlayerForType(u8 sourceType); bool canUseThisPlayer(u8 sourceType) const; + void stopAllSound(); + enum PlayerMgrFlag_e { MGR_HBM = 0x1, MGR_UNK_0x2 = 0x2, MGR_PAUSE = 0x4, MGR_MAP = 0x8, MGR_HELP = 0x10, + + MGR_UNK_0x80 = 0x80, }; bool checkFlag(u32 mask) const { @@ -111,8 +116,8 @@ public: enum PlayerIndex_e { /** Background music */ PLAYER_BGM = 0, - /** Background music, boss battle */ - PLAYER_BGM_BOSS = 1, + /** Background music, battles */ + PLAYER_BGM_BATTLE = 1, /** "fanfare?" */ PLAYER_FAN = 2, /** small sound effects, only a few (UI navigation related) */ diff --git a/include/d/snd/d_snd_sound.h b/include/d/snd/d_snd_sound.h index c2b865da..c1093631 100644 --- a/include/d/snd/d_snd_sound.h +++ b/include/d/snd/d_snd_sound.h @@ -173,11 +173,31 @@ public: void linkCtrl(dSndControlSound_c *); void unlinkCtrl(dSndControlSound_c *); -protected: - bool cannotStart() const { + bool isPlaying() const { return mIsRunning && !mIsFadingOut && IsAttachedSound(); } + bool isPlayingSoundId(u32 soundId) const { + return mIsRunning && !mIsFadingOut && GetId() == soundId; + } + + bool isPreparingSoundId(u32 soundId) const { + return mIsPreparing && !mIsRunning && GetId() == soundId; + } + + bool isFadingOutSoundId(u32 soundId) const { + return mIsFadingOut && IsAttachedSound(); + } + + bool isPreparingSoundIdWithStartOffset(u32 soundId, u32 offset) const { + return isPreparingSoundId(soundId) && (offset == 0 || mPrevStartOffset == offset); + } + + bool hasState() const { + return mIsRunning || mIsPreparing || IsAttachedSound(); + } + +protected: bool isRunning() const { return mIsRunning && IsAttachedSound(); } @@ -186,28 +206,12 @@ protected: return mIsPreparing && !mIsRunning; } - bool canCancel() const { - return mIsRunning || mIsPreparing || IsAttachedSound(); - } - - bool isPreparingSoundId(u32 soundId) const { - bool ret = mIsPreparing; - if (ret) { - ret = !mIsRunning; - } - if (ret) { - ret = GetId() == soundId; - } - return ret; - } - void resetControls(); void resetTrackVolumes(); void setControlValue(dSndControlSound_c *ctrl, f32 value, s32 frames); - /* 0x08 */ u8 _0x08[0x10 - 0x08]; - + /* 0x08 */ nw4r::ut::Node mBgmMgrNode; /* 0x10 */ u32 mPrevStartOffset; /* 0x14 */ bool mIsPreparing; /* 0x15 */ bool mPauseFlag; diff --git a/include/d/snd/d_snd_source.h b/include/d/snd/d_snd_source.h index 946589ea..d2db73d0 100644 --- a/include/d/snd/d_snd_source.h +++ b/include/d/snd/d_snd_source.h @@ -19,6 +19,7 @@ public: static u32 getCharacterTalkSoundId(u32 baseSoundId, dSoundSource_c *source); u32 getRemoConSoundVariant(u32 soundId) const; + s32 getRoomId() 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 @@ -86,10 +87,10 @@ private: // at 0x04: dSnd3DActor_c sub-object // at 0x58: thunk-vtable - /* 0xE8 */ nw4r::ut::Node mMgrLink; + /* 0x0E8 */ nw4r::ut::Node mMgrLink; /* 0x0F0 */ const char *mpName; /* 0x0F4 */ UNKWORD field_0x0F4; - /* 0x0F8 */ dAcBase_c *mpPlayer; + /* 0x0F8 */ dAcBase_c *mpActor; /* 0x0FC */ u8 mSourceCategory; /* 0x0FD */ u8 mSourceType; /* 0x0FE */ u8 field_0x0FE; diff --git a/include/d/snd/d_snd_source_enums.h b/include/d/snd/d_snd_source_enums.h index d4ebe17c..8ce423dc 100644 --- a/include/d/snd/d_snd_source_enums.h +++ b/include/d/snd/d_snd_source_enums.h @@ -19,6 +19,7 @@ enum SoundSourceType_e { // 10-31: Enemy? (2) SND_SOURCE_ENEMY_10 = 10, + SND_SOURCE_SPARK = 17, SND_SOURCE_BIGBOSS = 20, SND_SOURCE_GIRAHUMU_3 = 24, SND_SOURCE_BULLET = 29, diff --git a/include/d/snd/d_snd_source_mgr.h b/include/d/snd/d_snd_source_mgr.h index 5582b2d3..272c75a2 100644 --- a/include/d/snd/d_snd_source_mgr.h +++ b/include/d/snd/d_snd_source_mgr.h @@ -22,11 +22,16 @@ public: void playFlowSound(u32 id); static s32 getSourceCategoryForSourceType(s32 sourceType, const char *name); + static dSoundSource_c *getBoomerangSource() { + return GetInstance()->mpBoomerangSource; + } + private: static bool isCertainEnemyType(dSoundSource_c *source); void removeSourceFromList(dSoundSource_c *source, nw4r::ut::List *list); void clearSourceLists(); void clearSourceList(nw4r::ut::List *list); + s32 getPlayerSourceRoomId() const; /* 0x0010 */ u8 field_0x0010; /* 0x0011 */ u8 field_0x0011; diff --git a/include/d/snd/d_snd_stage_data.h b/include/d/snd/d_snd_stage_data.h new file mode 100644 index 00000000..96dce3d4 --- /dev/null +++ b/include/d/snd/d_snd_stage_data.h @@ -0,0 +1,197 @@ +#ifndef D_SND_STATE_DEF_H +#define D_SND_STATE_DEF_H + +#include "common.h" + +struct dSndStageInfo { + /* 0x00 */ const char *stageName; + /* 0x04 */ s32 layer; + /* 0x08 */ u32 unk1; + /* 0x0C */ u32 unk2; + /* 0x10 */ u32 unk3; + /* 0x14 */ u32 unk4; + /* 0x18 */ const char *demoName; + + + static const s32 sNumStageInfos; + static const dSndStageInfo sInfos[]; +}; + +enum SndStage_e { + /* 0x00 */ SND_STAGE_F100, + /* 0x01 */ SND_STAGE_F101, + /* 0x02 */ SND_STAGE_F102, + /* 0x03 */ SND_STAGE_F102_1, + /* 0x04 */ SND_STAGE_F103_L13, + /* 0x05 */ SND_STAGE_F103, + /* 0x06 */ SND_STAGE_F200, + /* 0x07 */ SND_STAGE_F201_1, + /* 0x08 */ SND_STAGE_F201_2, + /* 0x09 */ SND_STAGE_F201_3, + /* 0x0A */ SND_STAGE_F201_4, + /* 0x0B */ SND_STAGE_F202, + /* 0x0C */ SND_STAGE_F300, + /* 0x0D */ SND_STAGE_F300_1, + /* 0x0E */ SND_STAGE_F300_4_L13, + /* 0x0F */ SND_STAGE_F300_4, + /* 0x10 */ SND_STAGE_F301, + /* 0x11 */ SND_STAGE_F301_1, + /* 0x12 */ SND_STAGE_F301_2, + /* 0x13 */ SND_STAGE_F301_3, + /* 0x14 */ SND_STAGE_F301_4_L2, + /* 0x15 */ SND_STAGE_F301_4, + /* 0x16 */ SND_STAGE_F301_6, + /* 0x17 */ SND_STAGE_F301_7, + /* 0x18 */ SND_STAGE_F302_L13, + /* 0x19 */ SND_STAGE_F302, + /* 0x1A */ SND_STAGE_F400_L13, + /* 0x1B */ SND_STAGE_F400, + /* 0x1C */ SND_STAGE_F401_L2, + /* 0x1D */ SND_STAGE_F401_L3, + /* 0x1E */ SND_STAGE_F401_L4, + /* 0x1F */ SND_STAGE_F401_L13, + /* 0x20 */ SND_STAGE_F401_L14, + /* 0x21 */ SND_STAGE_F401_L15, + /* 0x22 */ SND_STAGE_F401, + /* 0x23 */ SND_STAGE_F403_L13, + /* 0x24 */ SND_STAGE_F403_L14, + /* 0x25 */ SND_STAGE_F403_L15, + /* 0x26 */ SND_STAGE_F403_L16, + /* 0x27 */ SND_STAGE_F403, + /* 0x28 */ SND_STAGE_F405, + /* 0x29 */ SND_STAGE_F406_L13, + /* 0x2A */ SND_STAGE_F406_L14, + /* 0x2B */ SND_STAGE_F406, + /* 0x2C */ SND_STAGE_D301, + /* 0x2D */ SND_STAGE_D301_1, + /* 0x2E */ SND_STAGE_D000, + /* 0x2F */ SND_STAGE_D100, + /* 0x30 */ SND_STAGE_D101, + /* 0x31 */ SND_STAGE_D200, + /* 0x32 */ SND_STAGE_D201, + /* 0x33 */ SND_STAGE_D201_1, + /* 0x34 */ SND_STAGE_D300, + /* 0x35 */ SND_STAGE_D300_1, + /* 0x36 */ SND_STAGE_D003_0, + /* 0x37 */ SND_STAGE_D003_1, + /* 0x38 */ SND_STAGE_D003_2, + /* 0x39 */ SND_STAGE_D003_3, + /* 0x3A */ SND_STAGE_D003_4, + /* 0x3B */ SND_STAGE_D003_5, + /* 0x3C */ SND_STAGE_D003_6, + /* 0x3D */ SND_STAGE_D003_7, + /* 0x3E */ SND_STAGE_D003_8, + /* 0x3F */ SND_STAGE_B100_L13, + /* 0x40 */ SND_STAGE_B100, + /* 0x41 */ SND_STAGE_B100_1_L13, + /* 0x42 */ SND_STAGE_B100_1, + /* 0x43 */ SND_STAGE_B101, + /* 0x44 */ SND_STAGE_B101_1_L13, + /* 0x45 */ SND_STAGE_B101_1, + /* 0x46 */ SND_STAGE_B200_L1, + /* 0x47 */ SND_STAGE_B200_L2, + /* 0x48 */ SND_STAGE_B200_L3, + /* 0x49 */ SND_STAGE_B200, + /* 0x4A */ SND_STAGE_B210_L13, + /* 0x4B */ SND_STAGE_B210_L14, + /* 0x4C */ SND_STAGE_B210, + /* 0x4D */ SND_STAGE_B201_L13, + /* 0x4E */ SND_STAGE_B201, + /* 0x4F */ SND_STAGE_B201_1_L13, + /* 0x50 */ SND_STAGE_B201_1, + /* 0x51 */ SND_STAGE_B300, + /* 0x52 */ SND_STAGE_B301_L13, + /* 0x53 */ SND_STAGE_B301, + /* 0x54 */ SND_STAGE_B003, + /* 0x55 */ SND_STAGE_B400_L13, + /* 0x56 */ SND_STAGE_B400_L14, + /* 0x57 */ SND_STAGE_B400, + /* 0x58 */ SND_STAGE_F100_1, + /* 0x59 */ SND_STAGE_F100_2, + /* 0x5A */ SND_STAGE_F102_2, + /* 0x5B */ SND_STAGE_F103_1_L13, + /* 0x5C */ SND_STAGE_F103_1_L14, + /* 0x5D */ SND_STAGE_F103_1, + /* 0x5E */ SND_STAGE_F210, + /* 0x5F */ SND_STAGE_F211, + /* 0x60 */ SND_STAGE_F221_L13, + /* 0x61 */ SND_STAGE_F221, + /* 0x62 */ SND_STAGE_F202_1, + /* 0x63 */ SND_STAGE_F202_2, + /* 0x64 */ SND_STAGE_F202_3, + /* 0x65 */ SND_STAGE_F202_4, + /* 0x66 */ SND_STAGE_F300_2, + /* 0x67 */ SND_STAGE_F300_3, + /* 0x68 */ SND_STAGE_F300_5, + /* 0x69 */ SND_STAGE_F303, + /* 0x6A */ SND_STAGE_S000, + /* 0x6B */ SND_STAGE_S100, + /* 0x6C */ SND_STAGE_S200, + /* 0x6D */ SND_STAGE_S300, + /* 0x6E */ SND_STAGE_F020_L3, + /* 0x6F */ SND_STAGE_F020, + /* 0x70 */ SND_STAGE_F021_L13, + /* 0x71 */ SND_STAGE_F021, + /* 0x72 */ SND_STAGE_F023_L14, + /* 0x73 */ SND_STAGE_F023, + /* 0x74 */ SND_STAGE_F000_L13, + /* 0x75 */ SND_STAGE_F000_L14, + /* 0x76 */ SND_STAGE_F000_L15, + /* 0x77 */ SND_STAGE_F000_L16, + /* 0x78 */ SND_STAGE_F000_L17, + /* 0x79 */ SND_STAGE_F000_L18, + /* 0x7A */ SND_STAGE_F000_L19, + /* 0x7B */ SND_STAGE_F000_L20, + /* 0x7C */ SND_STAGE_F000_L21, + /* 0x7D */ SND_STAGE_F000_L26, + /* 0x7E */ SND_STAGE_F000_L27, + /* 0x7F */ SND_STAGE_F000, + /* 0x80 */ SND_STAGE_F301_5, + /* 0x81 */ SND_STAGE_F001r_L13, + /* 0x82 */ SND_STAGE_F001r_L14, + /* 0x83 */ SND_STAGE_F001r_L15, + /* 0x84 */ SND_STAGE_F001r, + /* 0x85 */ SND_STAGE_F002r, + /* 0x86 */ SND_STAGE_F004r, + /* 0x87 */ SND_STAGE_F009r, + /* 0x88 */ SND_STAGE_F011r, + /* 0x89 */ SND_STAGE_F012r, + /* 0x8A */ SND_STAGE_F019r, + /* 0x8B */ SND_STAGE_F005r, + /* 0x8C */ SND_STAGE_F006r, + /* 0x8D */ SND_STAGE_F007r, + /* 0x8E */ SND_STAGE_F013r, + /* 0x8F */ SND_STAGE_F014r, + /* 0x90 */ SND_STAGE_F015r, + /* 0x91 */ SND_STAGE_F016r, + /* 0x92 */ SND_STAGE_F017r, + /* 0x93 */ SND_STAGE_F018r, + /* 0x94 */ SND_STAGE_F402_L2, + /* 0x95 */ SND_STAGE_F402_L3, + /* 0x96 */ SND_STAGE_F402_L5, + /* 0x97 */ SND_STAGE_F402_L13, + /* 0x98 */ SND_STAGE_F402_L18, + /* 0x99 */ SND_STAGE_F402_L19, + /* 0x9A */ SND_STAGE_F402, + /* 0x9B */ SND_STAGE_F404_L13, + /* 0x9C */ SND_STAGE_F404_L14, + /* 0x9D */ SND_STAGE_F404, + /* 0x9E */ SND_STAGE_F407_L13, + /* 0x9F */ SND_STAGE_F407_L14, + /* 0xA0 */ SND_STAGE_F407_L15, + /* 0xA1 */ SND_STAGE_F407, + /* 0xA2 */ SND_STAGE_F008r_L13, + /* 0xA3 */ SND_STAGE_F008r_L14, + /* 0xA4 */ SND_STAGE_F008r_L15, + /* 0xA5 */ SND_STAGE_F008r, + /* 0xA6 */ SND_STAGE_F010r_L13, + /* 0xA7 */ SND_STAGE_F010r_L14, + /* 0xA8 */ SND_STAGE_F010r_L15, + /* 0xA9 */ SND_STAGE_F010r, + /* 0xAA */ SND_STAGE_Demo_L13, + /* 0xAB */ SND_STAGE_Demo, + + /* 0xAC */ SND_STAGE_MAX, +}; + +#endif diff --git a/include/d/snd/d_snd_state_mgr.h b/include/d/snd/d_snd_state_mgr.h new file mode 100644 index 00000000..d2c54446 --- /dev/null +++ b/include/d/snd/d_snd_state_mgr.h @@ -0,0 +1,139 @@ +#ifndef D_SND_STATE_MGR_H +#define D_SND_STATE_MGR_H + +#include "common.h" +#include "d/snd/d_snd_util.h" +#include "nw4r/snd/snd_FxReverbStdDpl2.h" +#include "sized_string.h" + +SND_DISPOSER_FORWARD_DECL(dSndStateMgr_c); + +// Previous Ghidra name: EnemySoundMgr +class dSndStateMgr_c { +public: + SND_DISPOSER_MEMBERS(dSndStateMgr_c); + +public: + enum StageFlags_e { + STAGE_FIELD = 0x1, + STAGE_DUNGEON = 0x2, + STAGE_BOSS = 0x4, + STAGE_SILENT_REALM = 0x8, + + STAGE_ROOM = 0x10, // only for sky + + STAGE_SKY = 0x20, + STAGE_FOREST = 0x40, + STAGE_MOUNTAIN = 0x80, + STAGE_DESERT = 0x100, + STAGE_SILENT_GROUNDS = 0x200, + }; + + dSndStateMgr_c(); + + void setup(EGG::Heap *pHeap); + void onStageOrLayerUpdate(); + + static bool isInStage(const char *stageName); + + u32 getField_0x11C() const { + return field_0x11C; + } + + void resetStageName() { + field_0x098 = "EVENT_NONE"; + } + + bool checkFlag0x10(u32 mask) const { + return field_0x010 & mask; + } + + void onFlag0x10(u32 mask) { + field_0x010 |= mask; + } + + void offFlag0x10(u32 mask) { + field_0x010 &= ~mask; + } + + void setFlowEvent(u32 eventId); + +private: + u32 getStageTypeFlags(const char *stageName) const; + // ET, FS, or corresponding Sky Keep rooms + static bool isVolcanicDungeon(u32 stageId); + // Checks if the given stage + layer is the stage you're transported + // to when viewing hint movies. + static bool isSeekerStoneStage(const char *stageName, s32 layer); + + void setCallbacksForStage(); + + u32 getStageId(const char *name, s32 layer); + static u32 getStageUnk2(u32 stageId); + + /* 0x010 */ u32 field_0x010; + /* 0x014 */ UNKWORD field_0x014; + /* 0x018 */ UNKWORD field_0x018; + /* 0x01C */ SizedString<32> field_0x01C; + /* 0x03C */ UNKWORD field_0x03C; + /* 0x040 */ s32 mStageId; + /* 0x044 */ UNKWORD field_0x044; + /* 0x048 */ u8 _0x048[0x050 - 0x048]; + /* 0x050 */ s32 mPreviousStageId; + /* 0x054 */ UNKWORD field_0x054; + /* 0x058 */ UNKWORD field_0x058; + /* 0x05C */ s32 mLayer; + /* 0x060 */ UNKWORD field_0x060; + /* 0x064 */ u8 field_0x064; + /* 0x065 */ bool field_0x065; + /* 0x066 */ u8 field_0x066; + /* 0x067 */ u8 field_0x067; + /* 0x068 */ UNKWORD field_0x068; + /* 0x06C */ UNKWORD field_0x06C; + /* 0x070 */ UNKWORD field_0x070; + /* 0x074 */ UNKWORD field_0x074; + /* 0x078 */ UNKWORD field_0x078; + /* 0x07C */ UNKWORD field_0x07C; + /* 0x080 */ UNKWORD field_0x080; + /* 0x084 */ UNKWORD field_0x084; + /* 0x088 */ UNKWORD field_0x088; + /* 0x08C */ UNKWORD field_0x08C; + /* 0x090 */ UNKWORD field_0x090; + /* 0x094 */ u32 field_0x094; + /* 0x098 */ SizedString<64> field_0x098; + /* 0x0D8 */ SizedString<64> field_0x0D8; + /* 0x118 */ const char *field_0x118; + /* 0x11C */ u32 field_0x11C; + /* 0x120 */ UNKWORD field_0x120; + /* 0x124 */ UNKWORD field_0x124; + /* 0x128 */ UNKWORD field_0x128; + /* 0x12C */ SizedString<64> field_0x12C; + /* 0x16C */ SizedString<64> field_0x16C; + /* 0x1AC */ SizedString<64> field_0x1AC; + /* 0x1EC */ SizedString<64> field_0x1EC; + /* 0x22C */ UNKWORD field_0x22C; + /* 0x230 */ UNKWORD field_0x230; + /* 0x234 */ UNKWORD field_0x234; + /* 0x238 */ UNKWORD field_0x238; + /* 0x23C */ u8 field_0x23C; + /* 0x23D */ u8 field_0x23D; + /* 0x240 */ UNKWORD field_0x240; + /* 0x244 */ UNKWORD field_0x244; + /* 0x248 */ UNKWORD field_0x248; + /* 0x24C */ UNKWORD field_0x24C; + /* 0x250 */ UNKWORD field_0x250; + /* 0x254 */ u8 field_0x254; + /* 0x258 */ UNKWORD field_0x258; + /* 0x25C */ nw4r::snd::FxReverbStdDpl2 mFx; + /* 0x48C */ UNKWORD field_0x48C; + /* 0x490 */ f32 field_0x490; + /* 0x494 */ f32 field_0x494; + /* 0x498 */ f32 field_0x498; + /* 0x49C */ f32 field_0x49C; + /* 0x4A0 */ f32 field_0x4A0; + /* 0x4A4 */ UNKWORD field_0x4A4; + /* 0x4A8 */ u8 field_0x4A8; + /* 0x4A9 */ bool needsGroupsReload; +}; + +#endif diff --git a/include/d/snd/d_snd_wzsound.h b/include/d/snd/d_snd_wzsound.h index 63da34c9..7fc1a8ac 100644 --- a/include/d/snd/d_snd_wzsound.h +++ b/include/d/snd/d_snd_wzsound.h @@ -6468,4 +6468,710 @@ enum WZSound { /* 0x193D */ LABEL_SOUND_END }; +enum WZSound_Group { + /* 0x000 */ GRP_BGM_BOSS_A, + /* 0x001 */ GRP_BGM_STATIC, + /* 0x002 */ GRP_FAN_TIMECHANGE, + /* 0x003 */ GRP_BGM_HARP_GODDESS, + /* 0x004 */ GRP_BGM_HARP_BREEZE, + /* 0x005 */ GRP_BGM_HARP_AQUA, + /* 0x006 */ GRP_BGM_HARP_FLAME, + /* 0x007 */ GRP_BGM_HARP_BRAVE, + /* 0x008 */ GRP_BGM_HARP_PUMPKIN, + /* 0x009 */ GRP_BGM_PLAY_DATA_STATIC, + /* 0x00A */ GRP_SE_SYSTEM_MINIGAME, + /* 0x00B */ GRP_SE_LINK, + /* 0x00C */ GRP_SE_LINK_VOICE, + /* 0x00D */ GRP_SE_HARP, + /* 0x00E */ GRP_SE_NPC_COMMON, + /* 0x00F */ GRP_SE_NpcKen, + /* 0x010 */ GRP_SE_NpcKen_VOCUL, + /* 0x011 */ GRP_SE_A_IN_WATER, + /* 0x012 */ GRP_SE_IN_WATER, + /* 0x013 */ GRP_SE_IN_WATER_MINI, + /* 0x014 */ GRP_SE_STATIC, + /* 0x015 */ GRP_DEFAULT, + /* 0x016 */ GRP_FIELD, + /* 0x017 */ GRP_BOSS, + /* 0x018 */ GRP_DUNGEON, + /* 0x019 */ GRP_DUNGEON_BATTLE_ROOM, + /* 0x01A */ GRP_SIREN, + /* 0x01B */ GRP_SKY, + /* 0x01C */ GRP_INDOOR, + /* 0x01D */ GRP_Demo, + /* 0x01E */ GRP_FOREST, + /* 0x01F */ GRP_MOUNTAIN, + /* 0x020 */ GRP_DESERT, + /* 0x021 */ GRP_STATIC, + /* 0x022 */ GRP_Warp, + /* 0x023 */ GRP_Sw, + /* 0x024 */ GRP_Pumpkin, + /* 0x025 */ GRP_Kanban, + /* 0x026 */ GRP_Item_A43, + /* 0x027 */ GRP_NpcRvl, + /* 0x028 */ GRP_NpcKbn, + /* 0x029 */ GRP_NpcKbn2, + /* 0x02A */ GRP_NpcSkn, + /* 0x02B */ GRP_NpcSkn2, + /* 0x02C */ GRP_NpcZld, + /* 0x02D */ GRP_NpcDsk, + /* 0x02E */ GRP_NpcDrb, + /* 0x02F */ GRP_NpcDrbC, + /* 0x030 */ GRP_NpcSoFa, + /* 0x031 */ GRP_NpcSoMo, + /* 0x032 */ GRP_NpcSoG, + /* 0x033 */ GRP_NpcTer, + /* 0x034 */ GRP_NpcResc, + /* 0x035 */ GRP_NpcResc_A1, + /* 0x036 */ GRP_NpcResc_A2, + /* 0x037 */ GRP_TstShtr, + /* 0x038 */ GRP_Kibako, + /* 0x039 */ GRP_PyBird, + /* 0x03A */ GRP_BirdCommon, + /* 0x03B */ GRP_BirdR, + /* 0x03C */ GRP_BirdZT, + /* 0x03D */ GRP_BirdB, + /* 0x03E */ GRP_Nusi, + /* 0x03F */ GRP_NusiT, + /* 0x040 */ GRP_BMg, + /* 0x041 */ GRP_BKr, + /* 0x042 */ GRP_BKrA, + /* 0x043 */ GRP_BLasBos, + /* 0x044 */ GRP_Bvd, + /* 0x045 */ GRP_Vdb, + /* 0x046 */ GRP_ECptn, + /* 0x047 */ GRP_EAm, + /* 0x048 */ GRP_Swhit, + /* 0x049 */ GRP_ESf, + /* 0x04A */ GRP_ESf4, + /* 0x04B */ GRP_Est, + /* 0x04C */ GRP_ERemly, + /* 0x04D */ GRP_ELizaru, + /* 0x04E */ GRP_EHidoK, + /* 0x04F */ GRP_EHydra, + /* 0x050 */ GRP_EGunho, + /* 0x051 */ GRP_EGunhob, + /* 0x052 */ GRP_EBfish, + /* 0x053 */ GRP_ECactus, + /* 0x054 */ GRP_ESm, + /* 0x055 */ GRP_EBeamos, + /* 0x056 */ GRP_EGeko, + /* 0x057 */ GRP_EPo, + /* 0x058 */ GRP_EPh, + /* 0x059 */ GRP_EOr, + /* 0x05A */ GRP_EEye, + /* 0x05B */ GRP_ESpark, + /* 0x05C */ GRP_EMagma, + /* 0x05D */ GRP_EMagupp, + /* 0x05E */ GRP_EKs, + /* 0x05F */ GRP_Ehb, + /* 0x060 */ GRP_EWs, + /* 0x061 */ GRP_BGh, + /* 0x062 */ GRP_BGh3, + /* 0x063 */ GRP_OGhSwL, + /* 0x064 */ GRP_OGhKf, + /* 0x065 */ GRP_BAsura, + /* 0x066 */ GRP_AsuraB, + /* 0x067 */ GRP_AsuraS, + /* 0x068 */ GRP_AsuraP, + /* 0x069 */ GRP_EMr, + /* 0x06A */ GRP_EMr_A1, + /* 0x06B */ GRP_EGumarm, + /* 0x06C */ GRP_NpcBird, + /* 0x06D */ GRP_Himo, + /* 0x06E */ GRP_SpiderL, + /* 0x06F */ GRP_Wind, + /* 0x070 */ GRP_Wind02, + /* 0x071 */ GRP_Wind03, + /* 0x072 */ GRP_Wind04, + /* 0x073 */ GRP_Tornado, + /* 0x074 */ GRP_SkEnmyT, + /* 0x075 */ GRP_EBc, + /* 0x076 */ GRP_EKGira, + /* 0x077 */ GRP_BcArrow, + /* 0x078 */ GRP_EBcZ, + /* 0x079 */ GRP_ESktl, + /* 0x07A */ GRP_Bamboo, + /* 0x07B */ GRP_TgTrap, + /* 0x07C */ GRP_NpcSalS, + /* 0x07D */ GRP_NpcSalS_A1, + /* 0x07E */ GRP_NpcSalS_A2, + /* 0x07F */ GRP_NpcSalS_A4, + /* 0x080 */ GRP_NpcSalS_A5, + /* 0x081 */ GRP_NpcSalS_A8, + /* 0x082 */ GRP_NpcDoMo, + /* 0x083 */ GRP_NpcJkMo, + /* 0x084 */ GRP_NpcSAMo, + /* 0x085 */ GRP_NpcSMnE, + /* 0x086 */ GRP_NpcSMnD, + /* 0x087 */ GRP_NpcAzFa, + /* 0x088 */ GRP_NpcDskN, + /* 0x089 */ GRP_EChb, + /* 0x08A */ GRP_EGue, + /* 0x08B */ GRP_EGerock, + /* 0x08C */ GRP_PushBlk, + /* 0x08D */ GRP_CyStone, + /* 0x08E */ GRP_HnComb, + /* 0x08F */ GRP_Bee, + /* 0x090 */ GRP_Bubble, + /* 0x091 */ GRP_EChaser, + /* 0x092 */ GRP_EHidory, + /* 0x093 */ GRP_NpcOim, + /* 0x094 */ GRP_NpcYim, + /* 0x095 */ GRP_NpcBgr, + /* 0x096 */ GRP_NpcSlrb, + /* 0x097 */ GRP_NpcSma3, + /* 0x098 */ GRP_NpcSma2, + /* 0x099 */ GRP_NpcPma, + /* 0x09A */ GRP_NpcPdu, + /* 0x09B */ GRP_NpcCbFd, + /* 0x09C */ GRP_NpcFdr, + /* 0x09D */ GRP_NpcTdr, + /* 0x09E */ GRP_NpcAdr, + /* 0x09F */ GRP_NpcGhm, + /* 0x0A0 */ GRP_NpcSha, + /* 0x0A1 */ GRP_NpcGra, + /* 0x0A2 */ GRP_NpcSoBo, + /* 0x0A3 */ GRP_NpcAkum, + /* 0x0A4 */ GRP_NpcSui, + /* 0x0A5 */ GRP_NpcMole, + /* 0x0A6 */ GRP_NpcMole_A1, + /* 0x0A7 */ GRP_NpcMole_A2, + /* 0x0A8 */ GRP_NpcMoN, + /* 0x0A9 */ GRP_NpcMoT, + /* 0x0AA */ GRP_NpcMoEl, + /* 0x0AB */ GRP_NpcChef, + /* 0x0AC */ GRP_Door, + /* 0x0AD */ GRP_Door_A4, + /* 0x0AE */ GRP_SwWall, + /* 0x0AF */ GRP_LeafSwg, + /* 0x0B0 */ GRP_IvyRope, + /* 0x0B1 */ GRP_RopeIga, + /* 0x0B2 */ GRP_RolRock, + /* 0x0B3 */ GRP_RidRock, + /* 0x0B4 */ GRP_MvLiftV, + /* 0x0B5 */ GRP_Truck, + /* 0x0B6 */ GRP_TrapRc1, + /* 0x0B7 */ GRP_StprRc, + /* 0x0B8 */ GRP_Log, + /* 0x0B9 */ GRP_LogWtr, + /* 0x0BA */ GRP_LightLi, + /* 0x0BB */ GRP_TimeStn, + /* 0x0BC */ GRP_BlsRock, + /* 0x0BD */ GRP_BlsRock_A18, + /* 0x0BE */ GRP_BlsRock_A5, + /* 0x0BF */ GRP_BlsRock_A6, + /* 0x0C0 */ GRP_BlsRock_A10, + /* 0x0C1 */ GRP_BlsRock_A8, + /* 0x0C2 */ GRP_FenceIr, + /* 0x0C3 */ GRP_SwDir, + /* 0x0C4 */ GRP_SwDir2, + /* 0x0C5 */ GRP_SwBnk, + /* 0x0C6 */ GRP_SwBnkS, + /* 0x0C7 */ GRP_Fairy, + /* 0x0C8 */ GRP_SnkFlrF, + /* 0x0C9 */ GRP_StpGm, + /* 0x0CA */ GRP_BrgFall, + /* 0x0CB */ GRP_BrgStp, + /* 0x0CC */ GRP_Gear, + /* 0x0CD */ GRP_DNight, + /* 0x0CE */ GRP_Fire, + /* 0x0CF */ GRP_Tshop, + /* 0x0D0 */ GRP_Obstacl, + /* 0x0D1 */ GRP_BeltCvr, + /* 0x0D2 */ GRP_Gcoil, + /* 0x0D3 */ GRP_Lotus, + /* 0x0D4 */ GRP_OcGrs, + /* 0x0D5 */ GRP_StepTS, + /* 0x0D6 */ GRP_WarpObj, + /* 0x0D7 */ GRP_WarpObj_A5, + /* 0x0D8 */ GRP_WarpObj_A4, + /* 0x0D9 */ GRP_WarpObj_A2, + /* 0x0DA */ GRP_WarpObj_A6, + /* 0x0DB */ GRP_WarpObj_A7, + /* 0x0DC */ GRP_Barrel, + /* 0x0DD */ GRP_Boat, + /* 0x0DE */ GRP_Blst, + /* 0x0DF */ GRP_BlstF3, + /* 0x0E0 */ GRP_TrpBrdW, + /* 0x0E1 */ GRP_Tckl, + /* 0x0E2 */ GRP_LvPlt, + /* 0x0E3 */ GRP_TWeed, + /* 0x0E4 */ GRP_TBoat, + /* 0x0E5 */ GRP_TBoatB, + /* 0x0E6 */ GRP_Vortex, + /* 0x0E7 */ GRP_TowerB, + /* 0x0E8 */ GRP_D300Obj, + /* 0x0E9 */ GRP_BrgBn, + /* 0x0EA */ GRP_SwSB, + /* 0x0EB */ GRP_SndStn, + /* 0x0EC */ GRP_SwHrp, + /* 0x0ED */ GRP_SwHrp_A1, + /* 0x0EE */ GRP_SwHrp_A2, + /* 0x0EF */ GRP_SwHrp_A4, + /* 0x0F0 */ GRP_Tubo, + /* 0x0F1 */ GRP_BigTubo, + /* 0x0F2 */ GRP_DoorBs, + /* 0x0F3 */ GRP_TBox, + /* 0x0F4 */ GRP_EffGnT_A2, + /* 0x0F5 */ GRP_PoleStn, + /* 0x0F6 */ GRP_EKg, + /* 0x0F7 */ GRP_BBigBos, + /* 0x0F8 */ GRP_NpcBRvl, + /* 0x0F9 */ GRP_OBBLBom, + /* 0x0FA */ GRP_NpcSoma, + /* 0x0FB */ GRP_NpcSowo, + /* 0x0FC */ GRP_vmSand, + /* 0x0FD */ GRP_wnleaf, + /* 0x0FE */ GRP_tware, + /* 0x0FF */ GRP_swsht, + /* 0x100 */ GRP_rpillar, + /* 0x101 */ GRP_wfall, + /* 0x102 */ GRP_ftower, + /* 0x103 */ GRP_NpcKen, + /* 0x104 */ GRP_sw_whip, + /* 0x105 */ GRP_ShtCS, + /* 0x106 */ GRP_fruit, + /* 0x107 */ GRP_Kinoko, + /* 0x108 */ GRP_chest, + /* 0x109 */ GRP_LBird, + /* 0x10A */ GRP_Fish, + /* 0x10B */ GRP_Eel, + /* 0x10C */ GRP_TerrGmk, + /* 0x10D */ GRP_TgSound_A1, + /* 0x10E */ GRP_TgSound_A2, + /* 0x10F */ GRP_TgSound_A3, + /* 0x110 */ GRP_TgSound_A4, + /* 0x111 */ GRP_TgSound_A5, + /* 0x112 */ GRP_TgSound_A6, + /* 0x113 */ GRP_TgSound_A7, + /* 0x114 */ GRP_TgSound_A8, + /* 0x115 */ GRP_TgSound_A9, + /* 0x116 */ GRP_TgSound_A10, + /* 0x117 */ GRP_TgSound_A11, + /* 0x118 */ GRP_TgSound_A12, + /* 0x119 */ GRP_TgSound_A13, + /* 0x11A */ GRP_TgSound_A14, + /* 0x11B */ GRP_TgSound_A15, + /* 0x11C */ GRP_TgSound_A16, + /* 0x11D */ GRP_TgSound_A17, + /* 0x11E */ GRP_TgSound_A18, + /* 0x11F */ GRP_TgSound_A19, + /* 0x120 */ GRP_TgSound_A20, + /* 0x121 */ GRP_TgSound_A21, + /* 0x122 */ GRP_TgSound_A22, + /* 0x123 */ GRP_TgSound_A23, + /* 0x124 */ GRP_TgSound_A24, + /* 0x125 */ GRP_TgSound_A25, + /* 0x126 */ GRP_TgSound_A26, + /* 0x127 */ GRP_TgSound_A27, + /* 0x128 */ GRP_TgSound_A28, + /* 0x129 */ GRP_TgSound_A29, + /* 0x12A */ GRP_TgSound_A30, + /* 0x12B */ GRP_TgSound_A31, + /* 0x12C */ GRP_TgSound_A32, + /* 0x12D */ GRP_TgSound_A33, + /* 0x12E */ GRP_TgSound_A34, + /* 0x12F */ GRP_TgSound_A35, + /* 0x130 */ GRP_TgSound_A36, + /* 0x131 */ GRP_TgSound_A37, + /* 0x132 */ GRP_TgSound_A38, + /* 0x133 */ GRP_TgSound_A39, + /* 0x134 */ GRP_TgSound_A40, + /* 0x135 */ GRP_ArrowSW, + /* 0x136 */ GRP_VentFan, + /* 0x137 */ GRP_WdBoard, + /* 0x138 */ GRP_ElLight, + /* 0x139 */ GRP_WaterSW, + /* 0x13A */ GRP_WaterSW_A1, + /* 0x13B */ GRP_BulbSW, + /* 0x13C */ GRP_SideST, + /* 0x13D */ GRP_STKraPt, + /* 0x13E */ GRP_HitLVSW, + /* 0x13F */ GRP_UDLava, + /* 0x140 */ GRP_BridgeB, + /* 0x141 */ GRP_Cannon, + /* 0x142 */ GRP_BridgeS, + /* 0x143 */ GRP_BlwCoal, + /* 0x144 */ GRP_UtaStop, + /* 0x145 */ GRP_Windmil, + /* 0x146 */ GRP_Pinwhel, + /* 0x147 */ GRP_WatrIga, + /* 0x148 */ GRP_STSink, + /* 0x149 */ GRP_ShipWin, + /* 0x14A */ GRP_FireObs, + /* 0x14B */ GRP_FireObs_A1, + /* 0x14C */ GRP_SldDoor, + /* 0x14D */ GRP_SliceLg, + /* 0x14E */ GRP_Debris, + /* 0x14F */ GRP_DwnLava, + /* 0x150 */ GRP_ApBridg, + /* 0x151 */ GRP_GrCover, + /* 0x152 */ GRP_TrukStp, + /* 0x153 */ GRP_WFF102, + /* 0x154 */ GRP_RockSkB, + /* 0x155 */ GRP_Bell, + /* 0x156 */ GRP_WndMilD, + /* 0x157 */ GRP_RkDrgn, + /* 0x158 */ GRP_Insect, + /* 0x159 */ GRP_Uground, + /* 0x15A */ GRP_BlockUg, + /* 0x15B */ GRP_MagBoat, + /* 0x15C */ GRP_skull, + /* 0x15D */ GRP_ESyako, + /* 0x15E */ GRP_LtsFlwr, + /* 0x15F */ GRP_LtsSeed, + /* 0x160 */ GRP_Npckyu, + /* 0x161 */ GRP_NpcKyuE, + /* 0x162 */ GRP_lock, + /* 0x163 */ GRP_trolley, + /* 0x164 */ GRP_trolley_A2, + /* 0x165 */ GRP_trlshut, + /* 0x166 */ GRP_swsyako, + /* 0x167 */ GRP_syashtr, + /* 0x168 */ GRP_d2ship, + /* 0x169 */ GRP_Chandel, + /* 0x16A */ GRP_needleU, + /* 0x16B */ GRP_SStatue, + /* 0x16C */ GRP_NpcKyuW, + /* 0x16D */ GRP_BDrD101, + /* 0x16E */ GRP_NpcCbLd, + /* 0x16F */ GRP_TGrD101, + /* 0x170 */ GRP_ShtrWtr, + /* 0x171 */ GRP_NpcKnld, + /* 0x172 */ GRP_TowerHa, + /* 0x173 */ GRP_NpcDgJg, + /* 0x174 */ GRP_NpcMlMg, + /* 0x175 */ GRP_BoxCage, + /* 0x176 */ GRP_FWall, + /* 0x177 */ GRP_SwrdPrj, + /* 0x178 */ GRP_SdCdl, + /* 0x179 */ GRP_NpcSenp, + /* 0x17A */ GRP_NpcSenb, + /* 0x17B */ GRP_Piston, + /* 0x17C */ GRP_GodCube, + /* 0x17D */ GRP_HeartCo, + /* 0x17E */ GRP_Clef, + /* 0x17F */ GRP_TDoor, + /* 0x180 */ GRP_Fence, + /* 0x181 */ GRP_Flag, + /* 0x182 */ GRP_DoorDun, + /* 0x183 */ GRP_DoorDun_A1, + /* 0x184 */ GRP_DoorDun_A2, + /* 0x185 */ GRP_TSBlk, + /* 0x186 */ GRP_Propera, + /* 0x187 */ GRP_Roulete, + /* 0x188 */ GRP_LvD201, + /* 0x189 */ GRP_Grave, + /* 0x18A */ GRP_FruitB, + /* 0x18B */ GRP_RoAtTar, + /* 0x18C */ GRP_PrpLift, + /* 0x18D */ GRP_TAgo, + /* 0x18E */ GRP_DivCrst, + /* 0x18F */ GRP_DNdl, + /* 0x190 */ GRP_CtrlPnl, + /* 0x191 */ GRP_NpcGost, + /* 0x192 */ GRP_D2Mtr, + /* 0x193 */ GRP_HrpHint, + /* 0x194 */ GRP_Paint, + /* 0x195 */ GRP_BrgTs, + /* 0x196 */ GRP_WarpH, + /* 0x197 */ GRP_UgSwitc, + /* 0x198 */ GRP_F000, + /* 0x199 */ GRP_F000_L1, + /* 0x19A */ GRP_F000_L2, + /* 0x19B */ GRP_F000_L3, + /* 0x19C */ GRP_F000_L4, + /* 0x19D */ GRP_F000_L5, + /* 0x19E */ GRP_F000_L6, + /* 0x19F */ GRP_F000_L7, + /* 0x1A0 */ GRP_F000_L8, + /* 0x1A1 */ GRP_F000_L9, + /* 0x1A2 */ GRP_F000_L10, + /* 0x1A3 */ GRP_F000_L12, + /* 0x1A4 */ GRP_F000_L13, + /* 0x1A5 */ GRP_F000_L14, + /* 0x1A6 */ GRP_F000_L15, + /* 0x1A7 */ GRP_F000_L16, + /* 0x1A8 */ GRP_F000_L17, + /* 0x1A9 */ GRP_F000_L18, + /* 0x1AA */ GRP_F000_L19, + /* 0x1AB */ GRP_F000_L20, + /* 0x1AC */ GRP_F000_L21, + /* 0x1AD */ GRP_F000_L26, + /* 0x1AE */ GRP_F000_L27, + /* 0x1AF */ GRP_F000_L28, + /* 0x1B0 */ GRP_F001r, + /* 0x1B1 */ GRP_F001r_L2, + /* 0x1B2 */ GRP_F001r_L3, + /* 0x1B3 */ GRP_F001r_L13, + /* 0x1B4 */ GRP_F001r_L14, + /* 0x1B5 */ GRP_F001r_L15, + /* 0x1B6 */ GRP_F002r, + /* 0x1B7 */ GRP_F004r, + /* 0x1B8 */ GRP_F005r, + /* 0x1B9 */ GRP_F006r, + /* 0x1BA */ GRP_F007r, + /* 0x1BB */ GRP_F008r, + /* 0x1BC */ GRP_F008r_L1, + /* 0x1BD */ GRP_F008r_L2, + /* 0x1BE */ GRP_F008r_L13, + /* 0x1BF */ GRP_F008r_L14, + /* 0x1C0 */ GRP_F008r_L15, + /* 0x1C1 */ GRP_F009r, + /* 0x1C2 */ GRP_F010r, + /* 0x1C3 */ GRP_F010r_L13, + /* 0x1C4 */ GRP_F010r_L14, + /* 0x1C5 */ GRP_F010r_L15, + /* 0x1C6 */ GRP_F011r, + /* 0x1C7 */ GRP_F011r_L12, + /* 0x1C8 */ GRP_F012r, + /* 0x1C9 */ GRP_F013r, + /* 0x1CA */ GRP_F014r, + /* 0x1CB */ GRP_F015r, + /* 0x1CC */ GRP_F016r, + /* 0x1CD */ GRP_F017r, + /* 0x1CE */ GRP_F018r, + /* 0x1CF */ GRP_F019r, + /* 0x1D0 */ GRP_F019r_L2, + /* 0x1D1 */ GRP_F020, + /* 0x1D2 */ GRP_F020_L1, + /* 0x1D3 */ GRP_F020_L2, + /* 0x1D4 */ GRP_F020_L3, + /* 0x1D5 */ GRP_F020_L4, + /* 0x1D6 */ GRP_F020_L5, + /* 0x1D7 */ GRP_F020_L6, + /* 0x1D8 */ GRP_F021_L13, + /* 0x1D9 */ GRP_D000, + /* 0x1DA */ GRP_D003_1, + /* 0x1DB */ GRP_D003_2, + /* 0x1DC */ GRP_D003_3, + /* 0x1DD */ GRP_S000, + /* 0x1DE */ GRP_D003_4, + /* 0x1DF */ GRP_D003_5, + /* 0x1E0 */ GRP_F023, + /* 0x1E1 */ GRP_F023_L2, + /* 0x1E2 */ GRP_F023_L13, + /* 0x1E3 */ GRP_F023_L14, + /* 0x1E4 */ GRP_D003_6, + /* 0x1E5 */ GRP_D003_7, + /* 0x1E6 */ GRP_D003_0, + /* 0x1E7 */ GRP_D003_8, + /* 0x1E8 */ GRP_F100, + /* 0x1E9 */ GRP_F100_L1, + /* 0x1EA */ GRP_F100_L2, + /* 0x1EB */ GRP_F100_L3, + /* 0x1EC */ GRP_F100_L4, + /* 0x1ED */ GRP_F100_1, + /* 0x1EE */ GRP_F101, + /* 0x1EF */ GRP_F102, + /* 0x1F0 */ GRP_F102_1, + /* 0x1F1 */ GRP_F102_2, + /* 0x1F2 */ GRP_F103, + /* 0x1F3 */ GRP_F103_L13, + /* 0x1F4 */ GRP_D100, + /* 0x1F5 */ GRP_D100_L1, + /* 0x1F6 */ GRP_D101, + /* 0x1F7 */ GRP_B100, + /* 0x1F8 */ GRP_B100_L1, + /* 0x1F9 */ GRP_B100_L2, + /* 0x1FA */ GRP_B100_L5, + /* 0x1FB */ GRP_B100_L13, + /* 0x1FC */ GRP_B100_1, + /* 0x1FD */ GRP_B100_1_L13, + /* 0x1FE */ GRP_B101, + /* 0x1FF */ GRP_B101_L2, + /* 0x200 */ GRP_B101_1, + /* 0x201 */ GRP_B101_1_L13, + /* 0x202 */ GRP_S100, + /* 0x203 */ GRP_F103_1, + /* 0x204 */ GRP_F103_1_L13, + /* 0x205 */ GRP_F103_1_L14, + /* 0x206 */ GRP_F200, + /* 0x207 */ GRP_F200_L1, + /* 0x208 */ GRP_F200_L2, + /* 0x209 */ GRP_F200_L3, + /* 0x20A */ GRP_F200_L4, + /* 0x20B */ GRP_F210, + /* 0x20C */ GRP_F211, + /* 0x20D */ GRP_F211_L2, + /* 0x20E */ GRP_F211_L3, + /* 0x20F */ GRP_F211_L4, + /* 0x210 */ GRP_F221, + /* 0x211 */ GRP_F221_L13, + /* 0x212 */ GRP_F202, + /* 0x213 */ GRP_D200, + /* 0x214 */ GRP_D201, + /* 0x215 */ GRP_B200, + /* 0x216 */ GRP_B200_L1, + /* 0x217 */ GRP_B200_L2, + /* 0x218 */ GRP_B200_L3, + /* 0x219 */ GRP_B201_L1, + /* 0x21A */ GRP_B201_L2, + /* 0x21B */ GRP_B201_L3, + /* 0x21C */ GRP_B201_L13, + /* 0x21D */ GRP_B201_1, + /* 0x21E */ GRP_B201_1_L13, + /* 0x21F */ GRP_B210, + /* 0x220 */ GRP_B210_L13, + /* 0x221 */ GRP_B210_L14, + /* 0x222 */ GRP_S200, + /* 0x223 */ GRP_F201_1, + /* 0x224 */ GRP_F201_2, + /* 0x225 */ GRP_F202_1, + /* 0x226 */ GRP_F202_2, + /* 0x227 */ GRP_D201_1, + /* 0x228 */ GRP_F201_3, + /* 0x229 */ GRP_F201_4, + /* 0x22A */ GRP_F202_3, + /* 0x22B */ GRP_F202_4, + /* 0x22C */ GRP_F300, + /* 0x22D */ GRP_F300_L2, + /* 0x22E */ GRP_F300_1, + /* 0x22F */ GRP_F300_2, + /* 0x230 */ GRP_F300_3, + /* 0x231 */ GRP_F300_4, + /* 0x232 */ GRP_F300_4_L13, + /* 0x233 */ GRP_F301, + /* 0x234 */ GRP_F301_1, + /* 0x235 */ GRP_F301_2, + /* 0x236 */ GRP_F301_3, + /* 0x237 */ GRP_F301_4, + /* 0x238 */ GRP_F301_4_L2, + /* 0x239 */ GRP_F301_5, + /* 0x23A */ GRP_F302, + /* 0x23B */ GRP_F302_L1, + /* 0x23C */ GRP_F302_L2, + /* 0x23D */ GRP_F302_L13, + /* 0x23E */ GRP_D300, + /* 0x23F */ GRP_D301, + /* 0x240 */ GRP_D301_L1, + /* 0x241 */ GRP_D301_L2, + /* 0x242 */ GRP_D301_L3, + /* 0x243 */ GRP_D301_L4, + /* 0x244 */ GRP_D301_L9, + /* 0x245 */ GRP_D301_L10, + /* 0x246 */ GRP_D301_L11, + /* 0x247 */ GRP_D301_L12, + /* 0x248 */ GRP_D301_1, + /* 0x249 */ GRP_B300, + /* 0x24A */ GRP_B300_L2, + /* 0x24B */ GRP_B301, + /* 0x24C */ GRP_B301_L2, + /* 0x24D */ GRP_B301_L13, + /* 0x24E */ GRP_S300, + /* 0x24F */ GRP_F301_6, + /* 0x250 */ GRP_F301_7, + /* 0x251 */ GRP_F303, + /* 0x252 */ GRP_F300_5, + /* 0x253 */ GRP_D300_1, + /* 0x254 */ GRP_F400, + /* 0x255 */ GRP_F400_L1, + /* 0x256 */ GRP_F400_L2, + /* 0x257 */ GRP_F400_L3, + /* 0x258 */ GRP_F400_L13, + /* 0x259 */ GRP_F401, + /* 0x25A */ GRP_F401_L1, + /* 0x25B */ GRP_F401_L2, + /* 0x25C */ GRP_F401_L3, + /* 0x25D */ GRP_F401_L4, + /* 0x25E */ GRP_F401_L5, + /* 0x25F */ GRP_F401_L6, + /* 0x260 */ GRP_F401_L13, + /* 0x261 */ GRP_F401_L14, + /* 0x262 */ GRP_F401_L15, + /* 0x263 */ GRP_F402, + /* 0x264 */ GRP_F402_L13, + /* 0x265 */ GRP_F402_L18, + /* 0x266 */ GRP_F402_L19, + /* 0x267 */ GRP_F402_L20, + /* 0x268 */ GRP_F403, + /* 0x269 */ GRP_F403_L1, + /* 0x26A */ GRP_F403_L2, + /* 0x26B */ GRP_F403_L3, + /* 0x26C */ GRP_F403_L4, + /* 0x26D */ GRP_F403_L7, + /* 0x26E */ GRP_F403_L13, + /* 0x26F */ GRP_F403_L14, + /* 0x270 */ GRP_F403_L15, + /* 0x271 */ GRP_F403_L16, + /* 0x272 */ GRP_F404, + /* 0x273 */ GRP_F404_L13, + /* 0x274 */ GRP_F404_L14, + /* 0x275 */ GRP_F405, + /* 0x276 */ GRP_F406, + /* 0x277 */ GRP_F406_L14, + /* 0x278 */ GRP_B400, + /* 0x279 */ GRP_B400_L13, + /* 0x27A */ GRP_B400_L14, + /* 0x27B */ GRP_F407_L13, + /* 0x27C */ GRP_F407_L14, + /* 0x27D */ GRP_F407_L15, + /* 0x27E */ GRP_A_IN_WATER, + /* 0x27F */ GRP_A_QUAKE, + /* 0x280 */ GRP_A_F000, + /* 0x281 */ GRP_A_F000_L2, + /* 0x282 */ GRP_A_F000_L5, + /* 0x283 */ GRP_A_F000_L7, + /* 0x284 */ GRP_A_F000_L9, + /* 0x285 */ GRP_A_F001r, + /* 0x286 */ GRP_A_F002r, + /* 0x287 */ GRP_A_F008r, + /* 0x288 */ GRP_A_F010r, + /* 0x289 */ GRP_A_F012r, + /* 0x28A */ GRP_A_F019r, + /* 0x28B */ GRP_A_F020, + /* 0x28C */ GRP_A_F023, + /* 0x28D */ GRP_A_F023_L2, + /* 0x28E */ GRP_A_D000, + /* 0x28F */ GRP_A_D003_0, + /* 0x290 */ GRP_A_D003_1, + /* 0x291 */ GRP_A_D003_2, + /* 0x292 */ GRP_A_D003_3, + /* 0x293 */ GRP_A_D003_4, + /* 0x294 */ GRP_A_D003_5, + /* 0x295 */ GRP_A_D003_6, + /* 0x296 */ GRP_A_D003_7, + /* 0x297 */ GRP_A_F100, + /* 0x298 */ GRP_A_F100_1, + /* 0x299 */ GRP_A_F102, + /* 0x29A */ GRP_A_F103, + /* 0x29B */ GRP_A_D100, + /* 0x29C */ GRP_A_D101, + /* 0x29D */ GRP_A_B100, + /* 0x29E */ GRP_A_B100_1, + /* 0x29F */ GRP_A_B101, + /* 0x2A0 */ GRP_A_B101_1, + /* 0x2A1 */ GRP_A_F200, + /* 0x2A2 */ GRP_A_F210, + /* 0x2A3 */ GRP_A_F211, + /* 0x2A4 */ GRP_A_F201_1, + /* 0x2A5 */ GRP_A_F201_2, + /* 0x2A6 */ GRP_A_F201_3, + /* 0x2A7 */ GRP_A_F201_4, + /* 0x2A8 */ GRP_A_F221, + /* 0x2A9 */ GRP_A_F202, + /* 0x2AA */ GRP_A_D200, + /* 0x2AB */ GRP_A_D201, + /* 0x2AC */ GRP_A_B210, + /* 0x2AD */ GRP_A_B201, + /* 0x2AE */ GRP_A_B201_1, + /* 0x2AF */ GRP_A_F300, + /* 0x2B0 */ GRP_A_F301, + /* 0x2B1 */ GRP_A_F301_1, + /* 0x2B2 */ GRP_A_F302, + /* 0x2B3 */ GRP_A_F303, + /* 0x2B4 */ GRP_A_D300, + /* 0x2B5 */ GRP_A_D301, + /* 0x2B6 */ GRP_A_B300, + /* 0x2B7 */ GRP_A_B301, + /* 0x2B8 */ GRP_A_F400, + /* 0x2B9 */ GRP_A_F401, + /* 0x2BA */ GRP_A_F402, + /* 0x2BB */ GRP_A_F403, + /* 0x2BC */ GRP_A_F404, + /* 0x2BD */ GRP_A_F406, + /* 0x2BE */ GRP_A_B400, +}; + #endif diff --git a/include/nw4r/snd/snd_SoundHandle.h b/include/nw4r/snd/snd_SoundHandle.h index 847f7942..5d1bf93b 100644 --- a/include/nw4r/snd/snd_SoundHandle.h +++ b/include/nw4r/snd/snd_SoundHandle.h @@ -69,6 +69,10 @@ namespace nw4r { namespace snd return IsAttachedSound() && mSound->IsPause(); } + bool IsPrepared() const { + return IsAttachedSound() && mSound->IsPrepared(); + } + int GetRemainingFadeFrames() const { if (IsAttachedSound()) return mSound->GetRemainingFadeFrames(); diff --git a/include/toBeSorted/music_mgrs.h b/include/toBeSorted/music_mgrs.h index 518ef793..fb5e5397 100644 --- a/include/toBeSorted/music_mgrs.h +++ b/include/toBeSorted/music_mgrs.h @@ -2,10 +2,11 @@ #define MUSIC_MGRS_H #include "common.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "d/snd/d_snd_player_mgr.h" #include "d/snd/d_snd_source_mgr.h" +#include "d/snd/d_snd_state_mgr.h" -class dSndPlayerMgr_c; class dSndSound_c; // A lot of these names are and were guesses that are probably wrong in a lot of ways. @@ -17,33 +18,24 @@ 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" void *ENEMY_SOUND_MGR; -extern "C" void fn_80362150(void *, u16); -extern "C" void fn_803625F0(void *, u16); -extern "C" void fn_803618F0(void *); -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_80365020(void *); -extern "C" void fn_80364D00(void *, s32); +#define ENEMY_SOUND_MGR (dSndStateMgr_c::GetInstance()) +extern "C" void fn_80362150(dSndStateMgr_c *, u16); +extern "C" void fn_803625F0(dSndStateMgr_c *, u16); +extern "C" void fn_803618F0(dSndStateMgr_c *); +extern "C" void fn_80362730(dSndStateMgr_c *); +extern "C" void fn_80365D20(dSndStateMgr_c *); +extern "C" void fn_803624F0(dSndStateMgr_c *); +extern "C" void fn_80364FD0(dSndStateMgr_c *, s32); +extern "C" bool fn_80364DA0(dSndStateMgr_c *); +extern "C" void fn_80365020(dSndStateMgr_c *); +extern "C" void fn_80364D00(dSndStateMgr_c *, s32); #define ENEMY_BGM_RELATED_MGR (dSndSourceMgr_c::GetInstance()) extern "C" void fn_80384570(dSndSourceMgr_c *, bool); // This one has a SoundActor that actually plays the BGM_ music tracks, // including the battle BGM track. -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); -extern "C" void fn_80372920(void *); -extern "C" void fn_803738B0(void *, dSndSound_c *sound); -extern "C" void fn_80373900(void *, dSndSound_c *sound); -extern "C" bool fn_803733B0(void *, u32); +#define FANFARE_SOUND_MGR (dSndBgmMgr_c::GetInstance()) +extern "C" void fn_80372920(dSndBgmMgr_c *); #endif diff --git a/src/d/d_message.cpp b/src/d/d_message.cpp index 0d56a9f8..764b066a 100644 --- a/src/d/d_message.cpp +++ b/src/d/d_message.cpp @@ -23,8 +23,10 @@ #include "d/lyt/d_lyt_mini_game.h" #include "d/lyt/meter/d_lyt_meter.h" #include "d/lyt/msg_window/d_lyt_msg_window.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "d/snd/d_snd_small_effect_mgr.h" #include "d/snd/d_snd_source_mgr.h" +#include "d/snd/d_snd_state_mgr.h" #include "egg/core/eggHeap.h" #include "f/f_base.h" #include "f/f_profile.h" @@ -39,7 +41,6 @@ #include "toBeSorted/fi_context.h" #include "toBeSorted/file_manager.h" #include "toBeSorted/minigame_mgr.h" -#include "toBeSorted/music_mgrs.h" #include "toBeSorted/unk_save_time.h" #include "rvl/OS.h" @@ -47,7 +48,6 @@ #include #include - s32 dFlow_c::sExitId = -1; dFlow_c::dFlow_c() { @@ -196,7 +196,7 @@ static const FlowSoundDef sSoundDefs[] = { void dFlow_c::playSound(u32 params) { if (params >= 1000) { - fn_80364FD0(ENEMY_SOUND_MGR, params); + dSndStateMgr_c::GetInstance()->setFlowEvent(params); return; } if (params >= 100) { @@ -217,7 +217,7 @@ void dFlow_c::playSound(u32 params) { } switch (sSoundDefs[idx].mSoundMgr) { - case 0: AnotherSoundMgr__playSound(FANFARE_SOUND_MGR, sSoundDefs[idx].mSoundId); break; + case 0: dSndBgmMgr_c::GetInstance()->playFanSound(sSoundDefs[idx].mSoundId); break; case 1: dSndSmallEffectMgr_c::GetInstance()->playSound(sSoundDefs[idx].mSoundId); break; } } diff --git a/src/d/lyt/d_lyt_game_over.cpp b/src/d/lyt/d_lyt_game_over.cpp index d443bfef..8bb3a264 100644 --- a/src/d/lyt/d_lyt_game_over.cpp +++ b/src/d/lyt/d_lyt_game_over.cpp @@ -10,6 +10,7 @@ #include "d/flag/sceneflag_manager.h" #include "d/lyt/d2d.h" #include "d/lyt/d_window.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "d/snd/d_snd_wzsound.h" #include "f/f_base.h" #include "nw4r/lyt/lyt_group.h" @@ -407,7 +408,7 @@ void dLytGameOverMgr_c::executeState_FadeOut() { if (mMain.requestIn("SYS_GAMEOVER_01", 0, 0)) { mMain.setField_0x1338(true); mStateMgr.changeState(StateID_Select); - AnotherSoundMgr__playSound(FANFARE_SOUND_MGR, FAN_GAMEOVER); + dSndBgmMgr_c::GetInstance()->playFanSound(FAN_GAMEOVER); } } } diff --git a/src/d/snd/d_snd_3d_manager.cpp b/src/d/snd/d_snd_3d_manager.cpp index ec1d91ce..bc204ce8 100644 --- a/src/d/snd/d_snd_3d_manager.cpp +++ b/src/d/snd/d_snd_3d_manager.cpp @@ -2,6 +2,7 @@ #include "d/snd/d_snd_3d_engine.h" #include "d/snd/d_snd_mgr.h" +#include "d/snd/d_snd_state_mgr.h" #include "egg/math/eggMatrix.h" #include "egg/math/eggVector.h" #include "nw4r/math/math_arithmetic.h" @@ -80,7 +81,7 @@ void dSnd3DManager_c::updateFromCamera(EGG::LookAtCamera &camera) { f32 prevCameraPosSqVelocity = mCameraPosSqVelocity; mCameraAtSqVelocity = VECSquareDistance(camera.mAt, mCamera.mAt); mCameraPosSqVelocity = VECSquareDistance(camera.mPos, mCamera.mPos); - if (((u32 *)ENEMY_SOUND_MGR)[71] > 30) { + if (dSndStateMgr_c::GetInstance()->getField_0x11C() > 30) { bool bigMovement = false; bool hugeMovement = false; if (mTimer > 0) { diff --git a/src/d/snd/d_snd_area_sound_effect_mgr.cpp b/src/d/snd/d_snd_area_sound_effect_mgr.cpp index 95114462..bd0c7ef0 100644 --- a/src/d/snd/d_snd_area_sound_effect_mgr.cpp +++ b/src/d/snd/d_snd_area_sound_effect_mgr.cpp @@ -13,7 +13,7 @@ dSndAreaSoundEffectMgr_c::dSndAreaSoundEffectMgr_c() : field_0x328(0), field_0x32C(1.0f), field_0x330(1.0f), - mActor(*dSndMgr_c::GetInstance()->getPlayer()), + mActor(dSndMgr_c::GetInstance()->getPlayer()), field_0x388(1.0f) {} void dSndAreaSoundEffectMgr_c::calc() { diff --git a/src/d/snd/d_snd_bgm_mgr.cpp b/src/d/snd/d_snd_bgm_mgr.cpp new file mode 100644 index 00000000..9305808f --- /dev/null +++ b/src/d/snd/d_snd_bgm_mgr.cpp @@ -0,0 +1,482 @@ +#include "d/snd/d_snd_bgm_mgr.h" + +#include "common.h" +#include "d/snd/d_snd_bgm_sound.h" +#include "d/snd/d_snd_mgr.h" +#include "d/snd/d_snd_player_mgr.h" +#include "d/snd/d_snd_sound.h" +#include "d/snd/d_snd_util.h" +#include "d/snd/d_snd_wzsound.h" +#include "nw4r/snd/snd_SoundArchive.h" +#include "nw4r/ut/ut_list.h" + +SND_DISPOSER_DEFINE(dSndBgmMgr_c); + +dSndBgmMgr_c::dSndBgmMgr_c() + : field_0x240(2), + field_0x244(0), + field_0x248(0), + mScheduledSoundId(-1), + mScheduledSoundDelay(0), + field_0x274(0), + field_0x29C(0), + mSoundActor(dSndMgr_c::GetInstance()->getPlayer()), + field_0x2F4(1.0f), + field_0x2F8(-1), + field_0x2FC(0), + field_0x300(-1), + field_0x304(0), + field_0x305(0), + field_0x306(0), + field_0x307(0), + field_0x308(0), + field_0x333(0), + field_0x340(0) { + for (int i = 0; i < BGM_LIST_MAX; i++) { + // TODO offsetof + nw4r::ut::List_Init(&mBgmSoundLists[i], 0xF0); + } + + for (int i = 0; i < 7; i++) { + if (i == 4) { + mBgmSounds[i] = new dSndBgmBattleSound_c(); + } else { + mBgmSounds[i] = new dSndBgmSound_c(); + } + mBgmSounds[i]->init(mSoundActor, i); + } + + field_0x270 = new dSndBgmSound_c(); + field_0x270->init(dSndMgr_c::GetInstance()->getPlayer(), 8); + + for (int i = 0; i < 3; i++) { + mFanSounds[i] = new dSndSound_c(); + } + + nw4r::ut::List_Init(&mAllSounds, 8); + + for (int i = 0; i < 3; i++) { + field_0x30C[i] = 0; + field_0x318[i] = 0; + field_0x324[i] = 0; + field_0x330[i] = 0; + } +} + +void dSndBgmMgr_c::calcLists() { + // TODO ... + + + dSndBgmSound_c *next, *it; + for (it = getFirstInBgmSoundList(BGM_LIST_PLAYING); it != nullptr; it = next) { + next = getNextInBgmSoundList(BGM_LIST_PLAYING, it); + it->calc(); + } + + for (it = getFirstInBgmSoundList(BGM_LIST_STOPPED); it != nullptr; it = next) { + next = getNextInBgmSoundList(BGM_LIST_STOPPED, it); + it->calc(); + } + + for (it = getFirstInBgmSoundList(BGM_LIST_PREPARING); it != nullptr; it = next) { + next = getNextInBgmSoundList(BGM_LIST_PREPARING, it); + if (!it->IsAttachedSound()) { + it->cancel(); + removeFromAllBgmSoundLists(it); + } + } + + { + dSndSound_c *it, *next; + for (it = static_cast(nw4r::ut::List_GetFirst(&mAllSounds)); it != nullptr; it = next) { + next = static_cast(nw4r::ut::List_GetNext(&mAllSounds, it)); + if (!it->IsAttachedSound()) { + unregistSound(it); + } + } + } +} + +bool dSndBgmMgr_c::prepareBgm(u32 soundId, u32 startOffset) { + if (isPlayingBgmSoundId(soundId)) { + return false; + } + dSndBgmSound_c *handle = getSoundHandleForBgm(soundId, startOffset); + bool ret = false; + if (handle != nullptr) { + ret = prepareBgmSound(soundId, handle, startOffset); + } + startAdditionalBgm(soundId); + return ret; +} + +void dSndBgmMgr_c::stopAllBgm(s32 fadeFrames) { + for (int i = 0; i < 7; i++) { + stopBgmSound(mBgmSounds[i], fadeFrames); + } + cancelDelayedBgm(); +} + +bool dSndBgmMgr_c::stopBgmSound(dSndBgmSound_c *sound, s32 fadeFrames) { + u32 oldId = sound->GetId(); + if (oldId != -1) { + sound->stop(fadeFrames); + checkForPrepareStoppedBgmSound(oldId); + return true; + } + + return false; +} + +void dSndBgmMgr_c::checkForPrepareStoppedBgmSound(u32 stoppedSoundId) { + // TODO ??? + u32 id = stoppedSoundId == BGM_SKYFIELD ? BGM_SKYFIELD : -1; + if (id != -1) { + prepareBgm(id, 0); + } +} + +bool dSndBgmMgr_c::beginBgmBattleRoom() { + if (isBgmHandleIdxPlayingSoundId(4, BGM_BATTLE_ROOM_MAIN)) { + return false; + } + + return playBattleBgm(BGM_BATTLE_ROOM_MAIN, 5); +} + +bool dSndBgmMgr_c::endBgmBattleRoom() { + if (!isBgmHandleIdxPlayingSoundId(4, BGM_BATTLE_ROOM_MAIN)) { + return false; + } + + stopBgmHandleIdx(4, 5); + return playFanSound(BGM_BATTLE_ROOM_OUTRO); +} + +void dSndBgmMgr_c::playDelayedSound(u32 soundId, s32 delay) { + if (soundId == -1) { + return; + } + nw4r::snd::SoundArchive::SoundInfo info; + u32 playerId; + if (!dSndMgr_c::GetInstance()->getArchive()->ReadSoundInfo(soundId, &info)) { + playerId = -1; + } else { + playerId = info.playerId; + } + + switch (playerId) { + case dSndPlayerMgr_c::PLAYER_BGM: + case dSndPlayerMgr_c::PLAYER_BGM_BATTLE: + if (delay == 0) { + playBgm(soundId, 0, false); + return; + } + prepareBgm(soundId, 0); + break; + case dSndPlayerMgr_c::PLAYER_FAN: + if (delay == 0) { + playFanSound(soundId); + return; + } + prepareFanSound(soundId); + break; + default: return; + } + mScheduledSoundId = soundId; + mScheduledSoundDelay = delay; +} + +void dSndBgmMgr_c::cancelDelayedSound() { + mScheduledSoundId = -1; + mScheduledSoundDelay = 0; +} + +void dSndBgmMgr_c::cancelDelayedBgm() { + if (mScheduledSoundId == -1) { + return; + } + + nw4r::snd::SoundArchive::SoundInfo info; + u32 playerId; + if (!dSndMgr_c::GetInstance()->getArchive()->ReadSoundInfo(mScheduledSoundId, &info)) { + playerId = -1; + } else { + playerId = info.playerId; + } + + if (dSndPlayerMgr_c::isBgmPlayerId(playerId)) { + cancelDelayedSound(); + } +} + +bool dSndBgmMgr_c::startDelayedSound() { + if (mScheduledSoundId == -1) { + return false; + } + + bool ok = false; + + nw4r::snd::SoundArchive::SoundInfo info; + u32 playerId; + if (!dSndMgr_c::GetInstance()->getArchive()->ReadSoundInfo(mScheduledSoundId, &info)) { + playerId = -1; + } else { + playerId = info.playerId; + } + switch (playerId) { + case dSndPlayerMgr_c::PLAYER_BGM: + case dSndPlayerMgr_c::PLAYER_BGM_BATTLE: ok = playBgm(mScheduledSoundId, 0, false); break; + case dSndPlayerMgr_c::PLAYER_FAN: ok = playFanSound(mScheduledSoundId); break; + default: break; + } + + cancelDelayedSound(); + return ok; +} + +void dSndBgmMgr_c::calcDelayedSound() { + if (mScheduledSoundId == -1) { + return; + } + + mScheduledSoundDelay--; + if (mScheduledSoundDelay == 0) { + startDelayedSound(); + } +} + +// 8036e980 - plays additional music for some reason. +// e.g. Sandship (BGM_D301 / 0x1607) also prepares BGM_D301_INSIDE / 0x1608 + +void dSndBgmMgr_c::setBgmHandleIdxVolume(u32 handleIdx, f32 volume, s32 fadeFrames) { + // Using the getter to check validity but then not using the result is a bit weird + if (getBgmSoundByIndex(handleIdx) != nullptr) { + mBgmSounds[handleIdx]->setVolume(volume, fadeFrames); + } +} + +bool dSndBgmMgr_c::isPlayingBgmSoundId(u32 soundId) const { + for (int i = 0; i < 7; i++) { + if (mBgmSounds[i]->isPlayingSoundId(soundId)) { + return true; + } + } + return false; +} + +bool dSndBgmMgr_c::isFadingOutBgmSoundId(u32 soundId) const { + for (int i = 0; i < 7; i++) { + if (mBgmSounds[i]->GetId() == soundId && mBgmSounds[i]->isFadingOutSoundId(soundId)) { + return true; + } + } + return false; +} + +bool dSndBgmMgr_c::isPreparingBgmSoundId(u32 soundId) const { + for (int i = 0; i < 7; i++) { + if (mBgmSounds[i]->isPreparingSoundId(soundId)) { + return true; + } + } + return false; +} + +bool dSndBgmMgr_c::isPreparingBgmSoundIdWithStartOffset(u32 soundId, u32 startOffset) const { + for (int i = 0; i < 7; i++) { + if (mBgmSounds[i]->isPreparingSoundIdWithStartOffset(soundId, startOffset)) { + return true; + } + } + return false; +} + +bool dSndBgmMgr_c::isPreparedBgmSoundId(u32 soundId) const { + for (int i = 0; i < 7; i++) { + if (mBgmSounds[i]->isPreparedSoundId(soundId)) { + return true; + } + } + return false; +} + +dSndBgmSound_c *dSndBgmMgr_c::getBgmSoundByIndex(u32 idx) { + if (idx >= 7) { + return nullptr; + } + return mBgmSounds[idx]; +} + +dSndBgmSound_c *dSndBgmMgr_c::getBgmSoundHandleForId(u32 soundId) const { + for (int i = 0; i < 7; i++) { + dSndBgmSound_c *snd = mBgmSounds[i]; + if (snd->isPlayingSoundId(soundId)) { + return snd; + } + } + return nullptr; +} + +dSndBgmSound_c *dSndBgmMgr_c::findIdleBgmSoundHandle() { + for (int i = 0; i < 4; i++) { + dSndBgmSound_c *snd = mBgmSounds[i]; + if (!snd->hasState()) { + return snd; + } + } + return nullptr; +} + +void dSndBgmMgr_c::addToBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound) { + if (list < BGM_LIST_MAX && sound != nullptr) { + removeFromAllBgmSoundLists(sound); + nw4r::ut::List_Prepend(&mBgmSoundLists[list], sound); + } +} + +void dSndBgmMgr_c::appendToBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound) { + if (list < BGM_LIST_MAX && sound != nullptr) { + removeFromAllBgmSoundLists(sound); + nw4r::ut::List_Append(&mBgmSoundLists[list], sound); + } +} + +void dSndBgmMgr_c::removeFromBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound) { + if (list < BGM_LIST_MAX && sound != nullptr) { + if (isInBgmSoundList(list, sound)) { + nw4r::ut::List_Remove(&mBgmSoundLists[list], sound); + } + } +} + +void dSndBgmMgr_c::removeFromAllBgmSoundLists(dSndBgmSound_c *sound) { + for (int i = 0; i < BGM_LIST_MAX; i++) { + removeFromBgmSoundList(static_cast(i), sound); + } +} + +bool dSndBgmMgr_c::isInBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound) { + if (list >= BGM_LIST_MAX) { + return false; + } + + if (sound == nullptr) { + return false; + } + + for (dSndBgmSound_c *it = getFirstInBgmSoundList(list); it != nullptr; it = getNextInBgmSoundList(list, it)) { + if (it == sound) { + return true; + } + } + return false; +} + +dSndBgmSound_c *dSndBgmMgr_c::getFirstInBgmSoundList(BgmSoundList_e list) { + if (list >= BGM_LIST_MAX) { + return nullptr; + } + return static_cast(nw4r::ut::List_GetFirst(&mBgmSoundLists[list])); +} + +dSndBgmSound_c *dSndBgmMgr_c::getNextInBgmSoundList(BgmSoundList_e list, dSndBgmSound_c *sound) { + if (list >= BGM_LIST_MAX) { + return nullptr; + } + return static_cast(nw4r::ut::List_GetNext(&mBgmSoundLists[list], sound)); +} + +dSndBgmSound_c *dSndBgmMgr_c::getLastInBgmSoundList(BgmSoundList_e list) { + if (list >= BGM_LIST_MAX) { + return nullptr; + } + return static_cast(nw4r::ut::List_GetLast(&mBgmSoundLists[list])); +} + +dSndSound_c *dSndBgmMgr_c::getFreeFanSoundHandle() { + for (int i = 0; i < 3; i++) { + if (!mFanSounds[i]->IsAttachedSound()) { + return mFanSounds[i]; + } + } + return nullptr; +} + +dSndSound_c *dSndBgmMgr_c::getFanSoundHandleForFan(u32 soundId) { + for (int i = 0; i < 3; i++) { + if (mFanSounds[i]->GetId() == soundId) { + return mFanSounds[i]; + } + } + return nullptr; +} + +dSndSound_c *dSndBgmMgr_c::getSoundHandleCurrentlyPlayingFanSound(u32 soundId) { + for (int i = 0; i < 3; i++) { + if (mFanSounds[i]->isPlayingSoundId(soundId)) { + return mFanSounds[i]; + } + } + return nullptr; +} + +dSndSound_c *dSndBgmMgr_c::getFanSoundHandleForFan2(u32 soundId) { + for (int i = 0; i < 3; i++) { + if (mFanSounds[i]->GetId() == soundId) { + return mFanSounds[i]; + } + } + return nullptr; +} + +bool dSndBgmMgr_c::isCurrentlyPlayingFanSound(u32 soundId) const { + for (int i = 0; i < 3; i++) { + if (mFanSounds[i]->isPlayingSoundId(soundId)) { + return true; + } + } + return false; +} + +bool dSndBgmMgr_c::hasPlayingFanSounds() const { + for (int i = 0; i < 3; i++) { + if (mFanSounds[i]->isPlaying()) { + return true; + } + } + return false; +} + +void dSndBgmMgr_c::stopFanSounds(s32 fadeFrames) { + for (int i = 0; i < 3; i++) { + mFanSounds[i]->stop(fadeFrames); + } +} + +void dSndBgmMgr_c::registSound(dSndSound_c *sound) { + if (sound == nullptr) { + return; + } + unregistSound(sound); + nw4r::ut::List_Append(&mAllSounds, sound); +} + +void dSndBgmMgr_c::unregistSound(dSndSound_c *sound) { + if (isSoundRegist(sound)) { + nw4r::ut::List_Remove(&mAllSounds, sound); + } +} + +bool dSndBgmMgr_c::isSoundRegist(dSndSound_c *sound) { + if (sound == nullptr) { + return false; + } + for (dSndSound_c *it = static_cast(nw4r::ut::List_GetFirst(&mAllSounds)); it != nullptr; + it = static_cast(nw4r::ut::List_GetNext(&mAllSounds, it))) { + if (it == sound) { + return true; + } + } + return false; +} diff --git a/src/d/snd/d_snd_control_player.cpp b/src/d/snd/d_snd_control_player.cpp index 824f327a..fe0d9e4b 100644 --- a/src/d/snd/d_snd_control_player.cpp +++ b/src/d/snd/d_snd_control_player.cpp @@ -2,6 +2,7 @@ #include "common.h" #include "d/snd/d_snd_control_player_mgr.h" +#include "d/snd/d_snd_player_mgr.h" #include "d/snd/d_snd_sound.h" #include "nw4r/snd/snd_SoundPlayer.h" #include "nw4r/snd/snd_global.h" @@ -57,11 +58,9 @@ void dSndControlPlayerFxSend_c::apply() { mpPlayer->SetFxSend(nw4r::snd::AUX_B, mCurrValue); } -extern "C" bool fn_8035F030(s32); - f32 dSndControlPlayerFxSend_c::getAppliedValue() { int auxBus = nw4r::snd::AUX_A; - if (fn_8035F030(mIndex)) { + if (dSndPlayerMgr_c::isBgmPlayerId(mIndex)) { auxBus = nw4r::snd::AUX_B; } return mpPlayer->GetFxSend(auxBus); diff --git a/src/d/snd/d_snd_control_player_mgr.cpp b/src/d/snd/d_snd_control_player_mgr.cpp index 22223c98..afdc8e1d 100644 --- a/src/d/snd/d_snd_control_player_mgr.cpp +++ b/src/d/snd/d_snd_control_player_mgr.cpp @@ -1,6 +1,7 @@ #include "d/snd/d_snd_control_player_mgr.h" #include "common.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "d/snd/d_snd_control_player.h" #include "d/snd/d_snd_mgr.h" #include "d/snd/d_snd_player_mgr.h" @@ -14,7 +15,7 @@ struct FanfareMuteFlagsApplier { // The logic here is inverted compared to the others - Fanfares seem to // mute things by default unless otherwise speciefied u32 id = handle.GetId(); - if (fn_803733B0(FANFARE_SOUND_MGR, id)) { + if (dSndBgmMgr_c::GetInstance()->getSoundHandleCurrentlyPlayingFanSound(handle.GetId())) { u32 userParam = dSndMgr_c::GetInstance()->getArchive()->GetSoundUserParam(id); if (!(userParam & dSndPlayerMgr_c::FANFARE_UNMUTE_BGM)) { dSndControlPlayerMgr_c::GetInstance()->setGroupVolumeFlag( @@ -369,7 +370,7 @@ void dSndControlPlayerMgr_c::setPlayerVolumeInternal(u32 playerIdx, f32 volume) } void dSndControlPlayerMgr_c::setBgmMuteVolume(f32 volume) { - for (u32 i = dSndPlayerMgr_c::PLAYER_BGM; i < dSndPlayerMgr_c::PLAYER_BGM_BOSS + 1; i++) { + for (u32 i = dSndPlayerMgr_c::PLAYER_BGM; i < dSndPlayerMgr_c::PLAYER_BGM_BATTLE + 1; i++) { setPlayerVolumeInternal(i, volume); } } diff --git a/src/d/snd/d_snd_player_mgr.cpp b/src/d/snd/d_snd_player_mgr.cpp index 981f2150..df8b414d 100644 --- a/src/d/snd/d_snd_player_mgr.cpp +++ b/src/d/snd/d_snd_player_mgr.cpp @@ -94,9 +94,9 @@ nw4r::snd::SoundStartable::StartResult dSndPlayerMgr_c::startSound( } nw4r::snd::SoundStartable::StartResult res; if (pStartInfo != nullptr) { - res = dSndMgr_c::getPlayer()->detail_StartSound(pHandle, soundId, pStartInfo); + res = dSndMgr_c::getPlayer().detail_StartSound(pHandle, soundId, pStartInfo); } else { - res = dSndMgr_c::getPlayer()->detail_StartSound(pHandle, soundId, nullptr); + res = dSndMgr_c::getPlayer().detail_StartSound(pHandle, soundId, nullptr); } return res; } @@ -116,7 +116,7 @@ nw4r::snd::SoundArchivePlayer &dSndPlayerMgr_c::getSoundArchivePlayerForType(u8 if (canUseThisPlayer(sourceType)) { return mSoundArchivePlayer; } - return *dSndMgr_c::getPlayer(); + return dSndMgr_c::getPlayer(); } bool dSndPlayerMgr_c::canUseThisPlayer(u8 sourceType) const { @@ -175,3 +175,11 @@ void dSndPlayerMgr_c::calc() { mSoundArchivePlayer.Update(); } } + +bool dSndPlayerMgr_c::isBgmPlayerId(u32 id) { + switch (id) { + case PLAYER_BGM: + case PLAYER_BGM_BATTLE: return true; + default: return false; + } +} diff --git a/src/d/snd/d_snd_sound.cpp b/src/d/snd/d_snd_sound.cpp index 39354783..2a6ecda0 100644 --- a/src/d/snd/d_snd_sound.cpp +++ b/src/d/snd/d_snd_sound.cpp @@ -1,6 +1,7 @@ #include "d/snd/d_snd_sound.h" #include "common.h" +#include "d/snd/d_snd_bgm_mgr.h" #include "d/snd/d_snd_mgr.h" #include "d/snd/d_snd_player_mgr.h" #include "nw4r/snd/snd_SeqSoundHandle.h" @@ -38,13 +39,13 @@ dSndSound_c::~dSndSound_c() { } void dSndSound_c::cancel() { - if (canCancel()) { + if (hasState()) { resetControls(); mIsRunning = false; mIsFadingOut = false; mIsPreparing = false; mPrevStartOffset = 0; - fn_80373900(FANFARE_SOUND_MGR, this); + dSndBgmMgr_c::GetInstance()->unregistSound(this); } } @@ -328,7 +329,7 @@ nw4r::snd::SoundStartable::StartResult dSndSound_c::prepareSound(u32 soundId, u3 return nw4r::snd::SoundStartable::START_ERR_USER; } - if (cannotStart()) { + if (isPlaying()) { return nw4r::snd::SoundStartable::START_ERR_USER; } @@ -347,13 +348,13 @@ nw4r::snd::SoundStartable::StartResult dSndSound_c::prepareSound(u32 soundId, u3 nw4r::snd::SoundStartable::StartResult res; if (startOffset == 0) { - res = dSndMgr_c::GetInstance()->getPlayer()->detail_PrepareSound(this, soundId, nullptr); + res = dSndMgr_c::GetInstance()->getPlayer().detail_PrepareSound(this, soundId, nullptr); } else { nw4r::snd::SoundStartable::StartInfo info; info.enableFlag |= nw4r::snd::SoundStartable::StartInfo::ENABLE_START_OFFSET; info.startOffsetType = nw4r::snd::SoundStartable::StartInfo::START_OFFSET_TYPE_MILLISEC; info.startOffset = startOffset; - res = dSndMgr_c::GetInstance()->getPlayer()->detail_PrepareSound(this, soundId, &info); + res = dSndMgr_c::GetInstance()->getPlayer().detail_PrepareSound(this, soundId, &info); } if (res == nw4r::snd::SoundStartable::START_SUCCESS) { @@ -375,7 +376,7 @@ void dSndSound_c::onPreparing(u32 soundId, u32 startOffset) { cancel(); mPrevStartOffset = startOffset; mIsPreparing = true; - fn_803738B0(FANFARE_SOUND_MGR, this); + dSndBgmMgr_c::GetInstance()->registSound(this); } } diff --git a/src/d/snd/d_snd_source.cpp b/src/d/snd/d_snd_source.cpp index 5ed288b8..76a25b44 100644 --- a/src/d/snd/d_snd_source.cpp +++ b/src/d/snd/d_snd_source.cpp @@ -1,6 +1,7 @@ #include "d/snd/d_snd_source.h" #include "common.h" +#include "d/a/d_a_base.h" #include "d/snd/d_snd_3d_actor.h" #include "d/snd/d_snd_3d_manager.h" #include "d/snd/d_snd_mgr.h" @@ -24,11 +25,11 @@ const char *help_i_need_data() { return "%s_%s_%d"; } -dSoundSource_c::dSoundSource_c(u8 sourceType, dAcBase_c *player, const char *name, dSndSourceGroup_c *pOwnerGroup) +dSoundSource_c::dSoundSource_c(u8 sourceType, dAcBase_c *actor, const char *name, dSndSourceGroup_c *pOwnerGroup) : dSnd3DActor_c(pOwnerGroup->getAmbientParam(), sourceType), mpName(name), field_0x0F4(0), - mpPlayer(player), + mpActor(actor), mSourceType(sourceType), field_0x0FE(0), field_0x0FF(0), @@ -87,6 +88,10 @@ void dSoundSource_c::d_vt_0x38(bool flag, int fadeFrames) { } } +s32 dSoundSource_c::getRoomId() const { + return mpActor->roomid; +} + nw4r::snd::SoundStartable::StartResult dSoundSource_c::SetupSound(nw4r::snd::SoundHandle *pHandle, u32 soundId, const StartInfo *pStartInfo, void *) { // TODO diff --git a/src/d/snd/d_snd_source_group.cpp b/src/d/snd/d_snd_source_group.cpp index d973deaa..31b27fb6 100644 --- a/src/d/snd/d_snd_source_group.cpp +++ b/src/d/snd/d_snd_source_group.cpp @@ -4,12 +4,11 @@ #include "common.h" #include "d/snd/d_snd_source.h" #include "d/snd/d_snd_source_enums.h" +#include "d/snd/d_snd_state_mgr.h" #include "nw4r/ut/ut_list.h" #include -extern "C" bool isInStage(const char *stageName); - void dSndSourceGroup_c::set(s32 sourceType, const char *name) { resetSoundSourceParam(); bool assignedParam = false; @@ -47,10 +46,10 @@ void dSndSourceGroup_c::set(s32 sourceType, const char *name) { break; } case SND_SOURCE_NPC_48: { - if (isInStage("F401")) { + if (dSndStateMgr_c::isInStage("F401")) { mParam.field_0x00 = 500.0f; mParam.field_0x04 = 4000.0; - } else if (isInStage("F402")) { + } else if (dSndStateMgr_c::isInStage("F402")) { mParam.field_0x00 = 400.0f; mParam.field_0x04 = 3500.0; } else { @@ -164,7 +163,7 @@ dSoundSource_c *dSndSourceGroup_c::getSourceClosestToPlayer() { return mpCachedClosestSourceToPlayer; } -bool dSndSourceGroup_c::setParamFromName(const char*) { +bool dSndSourceGroup_c::setParamFromName(const char *) { // TODO return false; } diff --git a/src/d/snd/d_snd_source_mgr.cpp b/src/d/snd/d_snd_source_mgr.cpp index 0e5eb9ae..fdd0b816 100644 --- a/src/d/snd/d_snd_source_mgr.cpp +++ b/src/d/snd/d_snd_source_mgr.cpp @@ -180,3 +180,13 @@ void dSndSourceMgr_c::clearSourceList(nw4r::ut::List *list) { } } } + +s32 dSndSourceMgr_c::getPlayerSourceRoomId() const { + if (mpPlayerSource == nullptr) { + return -1; + } + if (getBoomerangSource() != nullptr) { + return getBoomerangSource()->getRoomId(); + } + return mpPlayerSource->getRoomId(); +} diff --git a/src/d/snd/d_snd_stage_data.cpp b/src/d/snd/d_snd_stage_data.cpp new file mode 100644 index 00000000..1977039d --- /dev/null +++ b/src/d/snd/d_snd_stage_data.cpp @@ -0,0 +1,358 @@ +#include "d/snd/d_snd_stage_data.h" + +#include "common.h" + + +#pragma push +#pragma readonly_strings on + +const dSndStageInfo dSndStageInfo::sInfos[] = { + /* SND_STAGE_F100 */ + { "F100", -1, SND_STAGE_F100, SND_STAGE_F100, SND_STAGE_F100, SND_STAGE_F100, nullptr}, + /* SND_STAGE_F101 */ + { "F101", -1, SND_STAGE_F101, SND_STAGE_F101, SND_STAGE_F100, SND_STAGE_F100, nullptr}, + /* SND_STAGE_F102 */ + { "F102", -1, SND_STAGE_F102, SND_STAGE_F102, SND_STAGE_F102, SND_STAGE_F102, nullptr}, + /* SND_STAGE_F102_1 */ + {"F102_1", -1, SND_STAGE_F102_1, SND_STAGE_F102_1, SND_STAGE_F102, SND_STAGE_F102, nullptr}, + /* SND_STAGE_F103_L13 */ + { "F103", 13, SND_STAGE_F103_L13, SND_STAGE_F103, SND_STAGE_F103_L13, SND_STAGE_F103_L13, "Demo64_03"}, + /* SND_STAGE_F103 */ + { "F103", -1, SND_STAGE_F103, SND_STAGE_F103, SND_STAGE_F103, SND_STAGE_F103, nullptr}, + /* SND_STAGE_F200 */ + { "F200", -1, SND_STAGE_F200, SND_STAGE_F200, SND_STAGE_F200, SND_STAGE_F200, nullptr}, + /* SND_STAGE_F201_1 */ + {"F201_1", -1, SND_STAGE_F201_1, SND_STAGE_F201_1, SND_STAGE_F201_1, SND_STAGE_F201_1, nullptr}, + /* SND_STAGE_F201_2 */ + {"F201_2", -1, SND_STAGE_F201_2, SND_STAGE_F201_2, SND_STAGE_F201_2, SND_STAGE_F201_2, nullptr}, + /* SND_STAGE_F201_3 */ + {"F201_3", -1, SND_STAGE_F201_3, SND_STAGE_F201_3, SND_STAGE_F201_1, SND_STAGE_F201_3, nullptr}, + /* SND_STAGE_F201_4 */ + {"F201_4", -1, SND_STAGE_F201_4, SND_STAGE_F201_4, SND_STAGE_F201_4, SND_STAGE_F201_4, nullptr}, + /* SND_STAGE_F202 */ + { "F202", -1, SND_STAGE_F202, SND_STAGE_F202, SND_STAGE_F202, SND_STAGE_F202, nullptr}, + /* SND_STAGE_F300 */ + { "F300", -1, SND_STAGE_F300, SND_STAGE_F300, SND_STAGE_F300, SND_STAGE_F300, nullptr}, + /* SND_STAGE_F300_1 */ + {"F300_1", -1, SND_STAGE_F300_1, SND_STAGE_F300_1, SND_STAGE_F300, SND_STAGE_F300, nullptr}, + /* SND_STAGE_F300_4_L13 */ + {"F300_4", 13, SND_STAGE_F300_4_L13, SND_STAGE_F300_4, SND_STAGE_F300_4_L13, SND_STAGE_F300_4_L13, "Demo36_01"}, + /* SND_STAGE_F300_4 */ + {"F300_4", -1, SND_STAGE_F300_4, SND_STAGE_F300_4, SND_STAGE_F300, SND_STAGE_F300, nullptr}, + /* SND_STAGE_F301 */ + { "F301", -1, SND_STAGE_F301, SND_STAGE_F301, SND_STAGE_F301, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_1 */ + {"F301_1", -1, SND_STAGE_F301_1, SND_STAGE_F301_1, SND_STAGE_F301_1, SND_STAGE_F301_1, nullptr}, + /* SND_STAGE_F301_2 */ + {"F301_2", -1, SND_STAGE_F301_2, SND_STAGE_F301_2, SND_STAGE_F301_2, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_3 */ + {"F301_3", -1, SND_STAGE_F301_3, SND_STAGE_F301_3, SND_STAGE_F301_3, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_4_L2 */ + {"F301_4", 2, SND_STAGE_F301_4_L2, SND_STAGE_F301_4, SND_STAGE_F301_4_L2, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_4 */ + {"F301_4", -1, SND_STAGE_F301_4, SND_STAGE_F301_4, SND_STAGE_F301_4, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_6 */ + {"F301_6", -1, SND_STAGE_F301_6, SND_STAGE_F301_6, SND_STAGE_F301, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F301_7 */ + {"F301_7", -1, SND_STAGE_F301_7, SND_STAGE_F301_7, SND_STAGE_F301_7, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F302_L13 */ + { "F302", 13, SND_STAGE_F302_L13, SND_STAGE_F302, SND_STAGE_F302_L13, SND_STAGE_F302_L13, "Demo64_05"}, + /* SND_STAGE_F302 */ + { "F302", -1, SND_STAGE_F302, SND_STAGE_F302, SND_STAGE_F302, SND_STAGE_F302, nullptr}, + /* SND_STAGE_F400_L13 */ + { "F400", 13, SND_STAGE_F400_L13, SND_STAGE_F400, SND_STAGE_F400_L13, SND_STAGE_F400_L13, "Demo38_01"}, + /* SND_STAGE_F400 */ + { "F400", -1, SND_STAGE_F400, SND_STAGE_F400, SND_STAGE_F400, SND_STAGE_F400, nullptr}, + /* SND_STAGE_F401_L2 */ + { "F401", 2, SND_STAGE_F401_L2, SND_STAGE_F401, SND_STAGE_F401_L2, SND_STAGE_F401_L2, nullptr}, + /* SND_STAGE_F401_L3 */ + { "F401", 3, SND_STAGE_F401_L3, SND_STAGE_F401, SND_STAGE_F401_L3, SND_STAGE_F401_L3, nullptr}, + /* SND_STAGE_F401_L4 */ + { "F401", 4, SND_STAGE_F401_L4, SND_STAGE_F401, SND_STAGE_F401_L4, SND_STAGE_F401_L4, nullptr}, + /* SND_STAGE_F401_L13 */ + { "F401", 13, SND_STAGE_F401_L13, SND_STAGE_F401, SND_STAGE_F401_L13, SND_STAGE_F401_L13, "Demo17_01"}, + /* SND_STAGE_F401_L14 */ + { "F401", 14, SND_STAGE_F401_L14, SND_STAGE_F401, SND_STAGE_F401_L14, SND_STAGE_F401_L14, "Demo43_01"}, + /* SND_STAGE_F401_L15 */ + { "F401", 15, SND_STAGE_F401_L15, SND_STAGE_F401, SND_STAGE_F401_L15, SND_STAGE_F401_L15, "Demo69_02"}, + /* SND_STAGE_F401 */ + { "F401", -1, SND_STAGE_F401, SND_STAGE_F401, SND_STAGE_F401, SND_STAGE_F401, nullptr}, + /* SND_STAGE_F403_L13 */ + { "F403", 13, SND_STAGE_F403_L13, SND_STAGE_F403, SND_STAGE_F403_L13, SND_STAGE_F403_L13, "Demo72_01"}, + /* SND_STAGE_F403_L14 */ + { "F403", 14, SND_STAGE_F403_L14, SND_STAGE_F403, SND_STAGE_F403_L14, SND_STAGE_F403_L14, "Demo73_01"}, + /* SND_STAGE_F403_L15 */ + { "F403", 15, SND_STAGE_F403_L15, SND_STAGE_F403, SND_STAGE_F403_L15, SND_STAGE_F403_L15, "Demo75_01"}, + /* SND_STAGE_F403_L16 */ + { "F403", 16, SND_STAGE_F403_L16, SND_STAGE_F403, SND_STAGE_F403_L16, SND_STAGE_F403_L16, "Demo75_02"}, + /* SND_STAGE_F403 */ + { "F403", -1, SND_STAGE_F403, SND_STAGE_F403, SND_STAGE_F403, SND_STAGE_F403, nullptr}, + /* SND_STAGE_F405 */ + { "F405", -1, SND_STAGE_F405, SND_STAGE_F405, SND_STAGE_F405, SND_STAGE_F405, "Demo02_01"}, + /* SND_STAGE_F406_L13 */ + { "F406", 13, SND_STAGE_F406_L13, SND_STAGE_F406, SND_STAGE_F406_L13, SND_STAGE_F406_L13, "Demo79_02"}, + /* SND_STAGE_F406_L14 */ + { "F406", 14, SND_STAGE_F406_L14, SND_STAGE_F406, SND_STAGE_F406_L14, SND_STAGE_F406_L14, "Demo69_03"}, + /* SND_STAGE_F406 */ + { "F406", -1, SND_STAGE_F406, SND_STAGE_F406, SND_STAGE_F406, SND_STAGE_F406, nullptr}, + /* SND_STAGE_D301 */ + { "D301", -1, SND_STAGE_D301, SND_STAGE_D301, SND_STAGE_D301, SND_STAGE_D301, nullptr}, + /* SND_STAGE_D301_1 */ + {"D301_1", -1, SND_STAGE_D301_1, SND_STAGE_D301_1, SND_STAGE_D301_1, SND_STAGE_D301, nullptr}, + /* SND_STAGE_D000 */ + { "D000", -1, SND_STAGE_D000, SND_STAGE_D000, SND_STAGE_D000, SND_STAGE_D000, nullptr}, + /* SND_STAGE_D100 */ + { "D100", -1, SND_STAGE_D100, SND_STAGE_D100, SND_STAGE_D100, SND_STAGE_D100, nullptr}, + /* SND_STAGE_D101 */ + { "D101", -1, SND_STAGE_D101, SND_STAGE_D101, SND_STAGE_D101, SND_STAGE_D101, nullptr}, + /* SND_STAGE_D200 */ + { "D200", -1, SND_STAGE_D200, SND_STAGE_D200, SND_STAGE_D200, SND_STAGE_D200, nullptr}, + /* SND_STAGE_D201 */ + { "D201", -1, SND_STAGE_D201, SND_STAGE_D201, SND_STAGE_D201, SND_STAGE_D201, nullptr}, + /* SND_STAGE_D201_1 */ + {"D201_1", -1, SND_STAGE_D201_1, SND_STAGE_D201_1, SND_STAGE_D201, SND_STAGE_D201, nullptr}, + /* SND_STAGE_D300 */ + { "D300", -1, SND_STAGE_D300, SND_STAGE_D300, SND_STAGE_D300, SND_STAGE_D300, nullptr}, + /* SND_STAGE_D300_1 */ + {"D300_1", -1, SND_STAGE_D300_1, SND_STAGE_D300_1, SND_STAGE_D300, SND_STAGE_D300, nullptr}, + /* SND_STAGE_D003_0 */ + {"D003_0", -1, SND_STAGE_D003_0, SND_STAGE_D003_0, SND_STAGE_D003_0, SND_STAGE_D003_0, nullptr}, + /* SND_STAGE_D003_1 */ + {"D003_1", -1, SND_STAGE_D003_1, SND_STAGE_D003_1, SND_STAGE_D003_1, SND_STAGE_D003_1, nullptr}, + /* SND_STAGE_D003_2 */ + {"D003_2", -1, SND_STAGE_D003_2, SND_STAGE_D003_2, SND_STAGE_D003_2, SND_STAGE_D003_2, nullptr}, + /* SND_STAGE_D003_3 */ + {"D003_3", -1, SND_STAGE_D003_3, SND_STAGE_D003_3, SND_STAGE_D003_3, SND_STAGE_D003_3, nullptr}, + /* SND_STAGE_D003_4 */ + {"D003_4", -1, SND_STAGE_D003_4, SND_STAGE_D003_4, SND_STAGE_D003_4, SND_STAGE_D003_4, nullptr}, + /* SND_STAGE_D003_5 */ + {"D003_5", -1, SND_STAGE_D003_5, SND_STAGE_D003_5, SND_STAGE_D003_5, SND_STAGE_D003_5, nullptr}, + /* SND_STAGE_D003_6 */ + {"D003_6", -1, SND_STAGE_D003_6, SND_STAGE_D003_6, SND_STAGE_D003_6, SND_STAGE_D003_6, nullptr}, + /* SND_STAGE_D003_7 */ + {"D003_7", -1, SND_STAGE_D003_7, SND_STAGE_D003_7, SND_STAGE_D003_7, SND_STAGE_D003_7, nullptr}, + /* SND_STAGE_D003_8 */ + {"D003_8", -1, SND_STAGE_D003_8, SND_STAGE_D003_8, SND_STAGE_D003_8, SND_STAGE_D003_8, nullptr}, + /* SND_STAGE_B100_L13 */ + { "B100", 13, SND_STAGE_B100_L13, SND_STAGE_B100, SND_STAGE_B100_L13, SND_STAGE_B100_L13, "Demo21_01"}, + /* SND_STAGE_B100 */ + { "B100", -1, SND_STAGE_B100, SND_STAGE_B100, SND_STAGE_B100, SND_STAGE_B100, nullptr}, + /* SND_STAGE_B100_1_L13 */ + {"B100_1", 13, SND_STAGE_B100_1_L13, SND_STAGE_B100_1, SND_STAGE_B100_1_L13, SND_STAGE_B100_1_L13, "Demo23_01"}, + /* SND_STAGE_B100_1 */ + {"B100_1", -1, SND_STAGE_B100_1, SND_STAGE_B100_1, SND_STAGE_B100_1, SND_STAGE_B100_1, nullptr}, + /* SND_STAGE_B101 */ + { "B101", -1, SND_STAGE_B101, SND_STAGE_B101, SND_STAGE_B101, SND_STAGE_B101, nullptr}, + /* SND_STAGE_B101_1_L13 */ + {"B101_1", 13, SND_STAGE_B101_1_L13, SND_STAGE_B101_1, SND_STAGE_B101_1_L13, SND_STAGE_B101_1_L13, "Demo47_01"}, + /* SND_STAGE_B101_1 */ + {"B101_1", -1, SND_STAGE_B101_1, SND_STAGE_B101_1, SND_STAGE_B101_1, SND_STAGE_B101_1, nullptr}, + /* SND_STAGE_B200_L1 */ + { "B200", 1, SND_STAGE_B200_L1, SND_STAGE_B200, SND_STAGE_B200_L1, SND_STAGE_D200, nullptr}, + /* SND_STAGE_B200_L2 */ + { "B200", 2, SND_STAGE_B200_L2, SND_STAGE_B200, SND_STAGE_B200_L2, SND_STAGE_D200, nullptr}, + /* SND_STAGE_B200_L3 */ + { "B200", 3, SND_STAGE_B200_L3, SND_STAGE_B200, SND_STAGE_B200_L3, SND_STAGE_D200, nullptr}, + /* SND_STAGE_B200 */ + { "B200", -1, SND_STAGE_B200, SND_STAGE_B200, SND_STAGE_B200, SND_STAGE_D200, nullptr}, + /* SND_STAGE_B210_L13 */ + { "B210", 13, SND_STAGE_B210_L13, SND_STAGE_B210, SND_STAGE_B210_L13, SND_STAGE_B210_L13, "Demo29_01"}, + /* SND_STAGE_B210_L14 */ + { "B210", 14, SND_STAGE_B210_L14, SND_STAGE_B210, SND_STAGE_B210_L14, SND_STAGE_B210_L14, "Demo31_01"}, + /* SND_STAGE_B210 */ + { "B210", -1, SND_STAGE_B210, SND_STAGE_B210, SND_STAGE_B210, SND_STAGE_B210, nullptr}, + /* SND_STAGE_B201_L13 */ + { "B201", 13, SND_STAGE_B201_L13, SND_STAGE_B201, SND_STAGE_B201_L13, SND_STAGE_B201_L13, "Demo51_01"}, + /* SND_STAGE_B201 */ + { "B201", -1, SND_STAGE_B201, SND_STAGE_B201, SND_STAGE_B201, SND_STAGE_B201, nullptr}, + /* SND_STAGE_B201_1_L13 */ + {"B201_1", 13, SND_STAGE_B201_1_L13, SND_STAGE_B201_1, SND_STAGE_B201_1_L13, SND_STAGE_B201_1_L13, "Demo52_01"}, + /* SND_STAGE_B201_1 */ + {"B201_1", -1, SND_STAGE_B201_1, SND_STAGE_B201_1, SND_STAGE_B201_1, SND_STAGE_B201_1, nullptr}, + /* SND_STAGE_B300 */ + { "B300", -1, SND_STAGE_B300, SND_STAGE_B300, SND_STAGE_B300, SND_STAGE_B300, nullptr}, + /* SND_STAGE_B301_L13 */ + { "B301", 13, SND_STAGE_B301_L13, SND_STAGE_B301, SND_STAGE_B301_L13, SND_STAGE_B301_L13, "Demo49_01"}, + /* SND_STAGE_B301 */ + { "B301", -1, SND_STAGE_B301, SND_STAGE_B301, SND_STAGE_B301, SND_STAGE_B301, nullptr}, + /* SND_STAGE_B003 */ + { "B003", -1, SND_STAGE_B003, SND_STAGE_B003, SND_STAGE_B003, SND_STAGE_B003, nullptr}, + /* SND_STAGE_B400_L13 */ + { "B400", 13, SND_STAGE_B400_L13, SND_STAGE_B400, SND_STAGE_B400_L13, SND_STAGE_B400_L13, "Demo75_04"}, + /* SND_STAGE_B400_L14 */ + { "B400", 14, SND_STAGE_B400_L14, SND_STAGE_B400, SND_STAGE_B400_L14, SND_STAGE_B400_L14, "Demo76_01"}, + /* SND_STAGE_B400 */ + { "B400", -1, SND_STAGE_B400, SND_STAGE_B400, SND_STAGE_B400, SND_STAGE_B400, nullptr}, + /* SND_STAGE_F100_1 */ + {"F100_1", -1, SND_STAGE_F100_1, SND_STAGE_F100_1, SND_STAGE_F100_1, SND_STAGE_F100_1, nullptr}, + /* SND_STAGE_F100_2 */ + {"F100_2", -1, SND_STAGE_F100_2, SND_STAGE_F100_2, SND_STAGE_F100_2, SND_STAGE_F100_2, nullptr}, + /* SND_STAGE_F102_2 */ + {"F102_2", -1, SND_STAGE_F102_2, SND_STAGE_F102_2, SND_STAGE_F102, SND_STAGE_F102, nullptr}, + /* SND_STAGE_F103_1_L13 */ + {"F103_1", 13, SND_STAGE_F103_1_L13, SND_STAGE_F103_1, SND_STAGE_F103_1_L13, SND_STAGE_F103_1_L13, "Demo64_02"}, + /* SND_STAGE_F103_1_L14 */ + {"F103_1", 14, SND_STAGE_F103_1_L14, SND_STAGE_F103_1, SND_STAGE_F103_1_L14, SND_STAGE_F103_1_L14, "Demo64_04"}, + /* SND_STAGE_F103_1 */ + {"F103_1", -1, SND_STAGE_F103_1, SND_STAGE_F103_1, SND_STAGE_F103_1, SND_STAGE_F103, nullptr}, + /* SND_STAGE_F210 */ + { "F210", -1, SND_STAGE_F210, SND_STAGE_F210, SND_STAGE_F210, SND_STAGE_F210, nullptr}, + /* SND_STAGE_F211 */ + { "F211", -1, SND_STAGE_F211, SND_STAGE_F211, SND_STAGE_F211, SND_STAGE_F211, nullptr}, + /* SND_STAGE_F221_L13 */ + { "F221", 13, SND_STAGE_F221_L13, SND_STAGE_F221, SND_STAGE_F221_L13, SND_STAGE_F221_L13, "Demo64_01"}, + /* SND_STAGE_F221 */ + { "F221", -1, SND_STAGE_F221, SND_STAGE_F221, SND_STAGE_F221, SND_STAGE_F221, nullptr}, + /* SND_STAGE_F202_1 */ + {"F202_1", -1, SND_STAGE_F202_1, SND_STAGE_F202_1, SND_STAGE_F202_1, SND_STAGE_D200, nullptr}, + /* SND_STAGE_F202_2 */ + {"F202_2", -1, SND_STAGE_F202_2, SND_STAGE_F202_2, SND_STAGE_F202_2, SND_STAGE_D200, nullptr}, + /* SND_STAGE_F202_3 */ + {"F202_3", -1, SND_STAGE_F202_3, SND_STAGE_F202_3, SND_STAGE_F202_3, SND_STAGE_D200, nullptr}, + /* SND_STAGE_F202_4 */ + {"F202_4", -1, SND_STAGE_F202_4, SND_STAGE_F202_4, SND_STAGE_F202_4, SND_STAGE_D200, nullptr}, + /* SND_STAGE_F300_2 */ + {"F300_2", -1, SND_STAGE_F300_2, SND_STAGE_F300_2, SND_STAGE_F300, SND_STAGE_F300, nullptr}, + /* SND_STAGE_F300_3 */ + {"F300_3", -1, SND_STAGE_F300_3, SND_STAGE_F300_3, SND_STAGE_F300, SND_STAGE_F300, nullptr}, + /* SND_STAGE_F300_5 */ + {"F300_5", -1, SND_STAGE_F300_5, SND_STAGE_F300_5, SND_STAGE_F300_5, SND_STAGE_F300_5, nullptr}, + /* SND_STAGE_F303 */ + { "F303", -1, SND_STAGE_F303, SND_STAGE_F303, SND_STAGE_F303, SND_STAGE_F303, nullptr}, + /* SND_STAGE_S000 */ + { "S000", -1, SND_STAGE_S000, SND_STAGE_S000, SND_STAGE_S000, SND_STAGE_S000, nullptr}, + /* SND_STAGE_S100 */ + { "S100", -1, SND_STAGE_S100, SND_STAGE_S100, SND_STAGE_S100, SND_STAGE_S100, nullptr}, + /* SND_STAGE_S200 */ + { "S200", -1, SND_STAGE_S200, SND_STAGE_S200, SND_STAGE_S200, SND_STAGE_S200, nullptr}, + /* SND_STAGE_S300 */ + { "S300", -1, SND_STAGE_S300, SND_STAGE_S300, SND_STAGE_S300, SND_STAGE_S300, nullptr}, + /* SND_STAGE_F020_L3 */ + { "F020", 3, SND_STAGE_F020_L3, SND_STAGE_F020, SND_STAGE_F020_L3, SND_STAGE_F000, nullptr}, + /* SND_STAGE_F020 */ + { "F020", -1, SND_STAGE_F020, SND_STAGE_F020, SND_STAGE_F020, SND_STAGE_F000, nullptr}, + /* SND_STAGE_F021_L13 */ + { "F021", 13, SND_STAGE_F021_L13, SND_STAGE_F021, SND_STAGE_F021_L13, SND_STAGE_F021_L13, "Demo12_02"}, + /* SND_STAGE_F021 */ + { "F021", -1, SND_STAGE_F021, SND_STAGE_F021, SND_STAGE_F021, SND_STAGE_F021, nullptr}, + /* SND_STAGE_F023_L14 */ + { "F023", 14, SND_STAGE_F023_L14, SND_STAGE_F023, SND_STAGE_F023_L14, SND_STAGE_F023_L14, "Demo64_06"}, + /* SND_STAGE_F023 */ + { "F023", -1, SND_STAGE_F023, SND_STAGE_F023, SND_STAGE_F023, SND_STAGE_F023, nullptr}, + /* SND_STAGE_F000_L13 */ + { "F000", 13, SND_STAGE_F000_L13, SND_STAGE_F000, SND_STAGE_F000_L13, SND_STAGE_F000_L13, "Demo04_01"}, + /* SND_STAGE_F000_L14 */ + { "F000", 14, SND_STAGE_F000_L14, SND_STAGE_F000, SND_STAGE_F000_L14, SND_STAGE_F000_L14, "Demo12_01"}, + /* SND_STAGE_F000_L15 */ + { "F000", 15, SND_STAGE_F000_L15, SND_STAGE_F000, SND_STAGE_F000_L15, SND_STAGE_F000_L15, "Demo05_01"}, + /* SND_STAGE_F000_L16 */ + { "F000", 16, SND_STAGE_F000_L16, SND_STAGE_F000, SND_STAGE_F000_L16, SND_STAGE_F000_L16, "Demo08_01"}, + /* SND_STAGE_F000_L17 */ + { "F000", 17, SND_STAGE_F000_L17, SND_STAGE_F000, SND_STAGE_F000_L17, SND_STAGE_F000_L17, "Demo11_01"}, + /* SND_STAGE_F000_L18 */ + { "F000", 18, SND_STAGE_F000_L18, SND_STAGE_F000, SND_STAGE_F000_L18, SND_STAGE_F000_L18, "Demo68_01"}, + /* SND_STAGE_F000_L19 */ + { "F000", 19, SND_STAGE_F000_L19, SND_STAGE_F000, SND_STAGE_F000_L19, SND_STAGE_F000_L19, "Demo69_01"}, + /* SND_STAGE_F000_L20 */ + { "F000", 20, SND_STAGE_F000_L20, SND_STAGE_F000, SND_STAGE_F000_L20, SND_STAGE_F000_L20, "Demo03_01"}, + /* SND_STAGE_F000_L21 */ + { "F000", 21, SND_STAGE_F000_L21, SND_STAGE_F000, SND_STAGE_F000_L21, SND_STAGE_F000_L21, "Demo03_02"}, + /* SND_STAGE_F000_L26 */ + { "F000", 26, SND_STAGE_F000_L26, SND_STAGE_F000, SND_STAGE_F000_L26, SND_STAGE_F000_L26, "Demo01_01"}, + /* SND_STAGE_F000_L27 */ + { "F000", 27, SND_STAGE_F000_L27, SND_STAGE_F000, SND_STAGE_F000_L27, SND_STAGE_F000_L27, "Demo01_02"}, + /* SND_STAGE_F000 */ + { "F000", -1, SND_STAGE_F000, SND_STAGE_F000, SND_STAGE_F000, SND_STAGE_F000, nullptr}, + /* SND_STAGE_F301_5 */ + {"F301_5", -1, SND_STAGE_F301_5, SND_STAGE_F301_5, SND_STAGE_F301_3, SND_STAGE_F301, nullptr}, + /* SND_STAGE_F001r_L13 */ + { "F001r", 13, SND_STAGE_F001r_L13, SND_STAGE_F001r, SND_STAGE_F001r_L13, SND_STAGE_F001r_L13, "Demo13_01"}, + /* SND_STAGE_F001r_L14 */ + { "F001r", 14, SND_STAGE_F001r_L14, SND_STAGE_F001r, SND_STAGE_F001r_L14, SND_STAGE_F001r_L14, "Demo15_04"}, + /* SND_STAGE_F001r_L15 */ + { "F001r", 15, SND_STAGE_F001r_L15, SND_STAGE_F001r, SND_STAGE_F001r_L15, SND_STAGE_F001r_L15, "Demo03_03"}, + /* SND_STAGE_F001r */ + { "F001r", -1, SND_STAGE_F001r, SND_STAGE_F001r, SND_STAGE_F001r, SND_STAGE_F001r, nullptr}, + /* SND_STAGE_F002r */ + { "F002r", -1, SND_STAGE_F002r, SND_STAGE_F002r, SND_STAGE_F002r, SND_STAGE_F002r, nullptr}, + /* SND_STAGE_F004r */ + { "F004r", -1, SND_STAGE_F004r, SND_STAGE_F004r, SND_STAGE_F004r, SND_STAGE_F004r, nullptr}, + /* SND_STAGE_F009r */ + { "F009r", -1, SND_STAGE_F009r, SND_STAGE_F009r, SND_STAGE_F009r, SND_STAGE_F009r, nullptr}, + /* SND_STAGE_F011r */ + { "F011r", -1, SND_STAGE_F011r, SND_STAGE_F011r, SND_STAGE_F011r, SND_STAGE_F011r, nullptr}, + /* SND_STAGE_F012r */ + { "F012r", -1, SND_STAGE_F012r, SND_STAGE_F012r, SND_STAGE_F012r, SND_STAGE_F012r, nullptr}, + /* SND_STAGE_F019r */ + { "F019r", -1, SND_STAGE_F019r, SND_STAGE_F019r, SND_STAGE_F019r, SND_STAGE_F019r, nullptr}, + /* SND_STAGE_F005r */ + { "F005r", -1, SND_STAGE_F005r, SND_STAGE_F005r, SND_STAGE_F005r, SND_STAGE_F005r, nullptr}, + /* SND_STAGE_F006r */ + { "F006r", -1, SND_STAGE_F006r, SND_STAGE_F006r, SND_STAGE_F006r, SND_STAGE_F006r, nullptr}, + /* SND_STAGE_F007r */ + { "F007r", -1, SND_STAGE_F007r, SND_STAGE_F007r, SND_STAGE_F007r, SND_STAGE_F007r, nullptr}, + /* SND_STAGE_F013r */ + { "F013r", -1, SND_STAGE_F013r, SND_STAGE_F013r, SND_STAGE_F013r, SND_STAGE_F013r, nullptr}, + /* SND_STAGE_F014r */ + { "F014r", -1, SND_STAGE_F014r, SND_STAGE_F014r, SND_STAGE_F014r, SND_STAGE_F014r, nullptr}, + /* SND_STAGE_F015r */ + { "F015r", -1, SND_STAGE_F015r, SND_STAGE_F015r, SND_STAGE_F015r, SND_STAGE_F015r, nullptr}, + /* SND_STAGE_F016r */ + { "F016r", -1, SND_STAGE_F016r, SND_STAGE_F016r, SND_STAGE_F016r, SND_STAGE_F016r, nullptr}, + /* SND_STAGE_F017r */ + { "F017r", -1, SND_STAGE_F017r, SND_STAGE_F017r, SND_STAGE_F017r, SND_STAGE_F017r, nullptr}, + /* SND_STAGE_F018r */ + { "F018r", -1, SND_STAGE_F018r, SND_STAGE_F018r, SND_STAGE_F018r, SND_STAGE_F018r, nullptr}, + /* SND_STAGE_F402_L2 */ + { "F402", 2, SND_STAGE_F402_L2, SND_STAGE_F402, SND_STAGE_F402_L2, SND_STAGE_F402_L2, nullptr}, + /* SND_STAGE_F402_L3 */ + { "F402", 3, SND_STAGE_F402_L3, SND_STAGE_F402, SND_STAGE_F402_L3, SND_STAGE_F402_L3, nullptr}, + /* SND_STAGE_F402_L5 */ + { "F402", 5, SND_STAGE_F402_L5, SND_STAGE_F402, SND_STAGE_F402_L5, SND_STAGE_F402_L5, nullptr}, + /* SND_STAGE_F402_L13 */ + { "F402", 13, SND_STAGE_F402_L13, SND_STAGE_F402, SND_STAGE_F402_L13, SND_STAGE_F402_L13, "Demo41_01"}, + /* SND_STAGE_F402_L18 */ + { "F402", 18, SND_STAGE_F402_L18, SND_STAGE_F402, SND_STAGE_F402_L18, SND_STAGE_F402_L18, "Demo43_02"}, + /* SND_STAGE_F402_L19 */ + { "F402", 19, SND_STAGE_F402_L19, SND_STAGE_F402, SND_STAGE_F402_L19, SND_STAGE_F402_L19, "Demo79_01"}, + /* SND_STAGE_F402 */ + { "F402", -1, SND_STAGE_F402, SND_STAGE_F402, SND_STAGE_F402, SND_STAGE_F402, nullptr}, + /* SND_STAGE_F404_L13 */ + { "F404", 13, SND_STAGE_F404_L13, SND_STAGE_F404, SND_STAGE_F404_L13, SND_STAGE_F404_L13, "Demo62_01"}, + /* SND_STAGE_F404_L14 */ + { "F404", 14, SND_STAGE_F404_L14, SND_STAGE_F404, SND_STAGE_F404_L14, SND_STAGE_F404_L14, "Demo77_01"}, + /* SND_STAGE_F404 */ + { "F404", -1, SND_STAGE_F404, SND_STAGE_F404, SND_STAGE_F404, SND_STAGE_F404, nullptr}, + /* SND_STAGE_F407_L13 */ + { "F407", 13, SND_STAGE_F407_L13, SND_STAGE_F407, SND_STAGE_F407_L13, SND_STAGE_F407_L13, "Demo59_01"}, + /* SND_STAGE_F407_L14 */ + { "F407", 14, SND_STAGE_F407_L14, SND_STAGE_F407, SND_STAGE_F407_L14, SND_STAGE_F407_L14, "Demo70_01"}, + /* SND_STAGE_F407_L15 */ + { "F407", 15, SND_STAGE_F407_L15, SND_STAGE_F407, SND_STAGE_F407_L15, SND_STAGE_F407_L15, "Demo70_02"}, + /* SND_STAGE_F407 */ + { "F407", -1, SND_STAGE_F407, SND_STAGE_F407, SND_STAGE_F407, SND_STAGE_F407, nullptr}, + /* SND_STAGE_F008r_L13 */ + { "F008r", 13, SND_STAGE_F008r_L13, SND_STAGE_F008r, SND_STAGE_F008r_L13, SND_STAGE_F008r_L13, "Demo15_01"}, + /* SND_STAGE_F008r_L14 */ + { "F008r", 14, SND_STAGE_F008r_L14, SND_STAGE_F008r, SND_STAGE_F008r_L14, SND_STAGE_F008r_L14, "Demo15_02"}, + /* SND_STAGE_F008r_L15 */ + { "F008r", 15, SND_STAGE_F008r_L15, SND_STAGE_F008r, SND_STAGE_F008r_L15, SND_STAGE_F008r_L15, "Demo15_03"}, + /* SND_STAGE_F008r */ + { "F008r", -1, SND_STAGE_F008r, SND_STAGE_F008r, SND_STAGE_F008r, SND_STAGE_F008r, nullptr}, + /* SND_STAGE_F010r_L13 */ + { "F010r", 13, SND_STAGE_F010r_L13, SND_STAGE_F010r, SND_STAGE_F010r_L13, SND_STAGE_F010r_L13, "Demo44_01"}, + /* SND_STAGE_F010r_L14 */ + { "F010r", 14, SND_STAGE_F010r_L14, SND_STAGE_F010r, SND_STAGE_F010r_L14, SND_STAGE_F010r_L14, "Demo48_01"}, + /* SND_STAGE_F010r_L15 */ + { "F010r", 15, SND_STAGE_F010r_L15, SND_STAGE_F010r, SND_STAGE_F010r_L15, SND_STAGE_F010r_L15, "Demo50_01"}, + /* SND_STAGE_F010r */ + { "F010r", -1, SND_STAGE_F010r, SND_STAGE_F010r, SND_STAGE_F010r, SND_STAGE_F010r, nullptr}, + /* SND_STAGE_Demo_L13 */ + { "Demo", 13, SND_STAGE_Demo_L13, SND_STAGE_Demo, SND_STAGE_Demo_L13, SND_STAGE_Demo_L13, "Demo78_01"}, + /* SND_STAGE_Demo */ + { "Demo", -1, SND_STAGE_Demo, SND_STAGE_Demo, SND_STAGE_Demo, SND_STAGE_Demo, nullptr}, +}; + +#pragma pop + +const s32 dSndStageInfo::sNumStageInfos = ARRAY_LENGTH(dSndStageInfo::sInfos); diff --git a/src/d/snd/d_snd_state_mgr.cpp b/src/d/snd/d_snd_state_mgr.cpp new file mode 100644 index 00000000..5f7909ab --- /dev/null +++ b/src/d/snd/d_snd_state_mgr.cpp @@ -0,0 +1,204 @@ +#include "d/snd/d_snd_state_mgr.h" + +#include "common.h" +#include "d/d_sc_game.h" +#include "d/snd/d_snd_player_mgr.h" +#include "d/snd/d_snd_stage_data.h" +#include "egg/core/eggHeap.h" +#include "nw4r/snd/snd_FxReverbStdDpl2.h" + +#include + +SND_DISPOSER_DEFINE(dSndStateMgr_c); + +dSndStateMgr_c::dSndStateMgr_c() + : field_0x010(0), + field_0x014(0), + field_0x018(0), + field_0x03C(0), + mStageId(0xAC), + mPreviousStageId(0xAC), + field_0x054(0), + field_0x058(0), + mLayer(-1), + field_0x060(0), + field_0x064(0), + field_0x065(false), + field_0x066(0), + field_0x067(0), + field_0x068(-1), + field_0x06C(-1), + field_0x070(0), + field_0x074(0), + field_0x078(0), + field_0x07C(0), + field_0x080(0), + field_0x084(0), + field_0x088(0), + field_0x08C(0x89), + field_0x090(0), + field_0x094(0), + field_0x118(nullptr), + field_0x11C(0), + field_0x120(0), + field_0x124(0), + field_0x128(-1), + field_0x22C(0), + field_0x230(0), + field_0x234(0), + field_0x238(-1), + field_0x23C(0), + field_0x23D(0), + field_0x240(0), + field_0x244(0), + field_0x248(0), + field_0x24C(-1), + field_0x250(0), + field_0x254(0), + field_0x258(0), + field_0x48C(0), + field_0x490(0.02f), + field_0x494(-1.0f), + field_0x498(-1.0f), + field_0x49C(0.02f), + field_0x4A0(0.02f), + field_0x4A4(-1), + field_0x4A8(0), + needsGroupsReload(false) {} + +extern "C" void fn_803665B0(nw4r::snd::detail::FxReverbStdParam &, int); + +void dSndStateMgr_c::setup(EGG::Heap *pHeap) { + u32 max = 0; + for (int i = 0; i < 5; i++) { + nw4r::snd::detail::FxReverbStdParam param; + fn_803665B0(param, i); + mFx.SetParam(param); + u32 thisSize = mFx.GetRequiredMemSize(); + if (max < thisSize) { + max = thisSize; + } + } + void *mem = pHeap->alloc(max, 4); + mFx.AssignWorkBuffer(mem, max); + resetStageName(); +} + +inline bool streq(const char *stageName, const char *name) { + return !std::strcmp(stageName, name); +} + +void dSndStateMgr_c::onStageOrLayerUpdate() { + if (dSndPlayerMgr_c::GetInstance()->checkFlag(dSndPlayerMgr_c::MGR_UNK_0x80)) { + dSndPlayerMgr_c::GetInstance()->stopAllSound(); + } + + bool unk_0x065 = field_0x065; + + onFlag0x10(0x2); + field_0x064 = 0; + + if (!streq(field_0x098, dScGame_c::currentSpawnInfo.getStageName())) { + needsGroupsReload = true; + field_0x01C = dScGame_c::currentSpawnInfo.getStageName(); + } + + if (!needsGroupsReload && dScGame_c::currentSpawnInfo.layer != mLayer) { + needsGroupsReload = true; + } + + mLayer = dScGame_c::currentSpawnInfo.layer; + u32 newStageId = getStageId(dScGame_c::currentSpawnInfo.getStageName(), dScGame_c::currentSpawnInfo.layer); + mPreviousStageId = mStageId; + field_0x044 = getStageUnk2(newStageId); + mStageId = newStageId; + + if (unk_0x065) { + setCallbacksForStage(); + } +} + +inline bool checkStagePrefix(const char *stageName, const char *prefix) { + return !std::strncmp(prefix, stageName, 2); +} + +u32 dSndStateMgr_c::getStageTypeFlags(const char *stageName) const { + u32 flags = 0; + if (checkStagePrefix(stageName, "F0")) { + flags |= STAGE_SKY | STAGE_FIELD; + } else if (checkStagePrefix(stageName, "D0")) { + flags |= STAGE_SKY | STAGE_DUNGEON; + } else if (checkStagePrefix(stageName, "B0")) { + flags |= STAGE_SKY | STAGE_BOSS; + } else if (checkStagePrefix(stageName, "S0")) { + flags |= STAGE_SKY | STAGE_SILENT_REALM; + } else if (checkStagePrefix(stageName, "F1")) { + flags |= STAGE_FOREST | STAGE_FIELD; + } else if (checkStagePrefix(stageName, "D1")) { + flags |= STAGE_FOREST | STAGE_DUNGEON; + } else if (checkStagePrefix(stageName, "B1")) { + flags |= STAGE_FOREST | STAGE_BOSS; + } else if (checkStagePrefix(stageName, "S1")) { + flags |= STAGE_FOREST | STAGE_SILENT_REALM; + } else if (checkStagePrefix(stageName, "F2")) { + flags |= STAGE_MOUNTAIN | STAGE_FIELD; + } else if (checkStagePrefix(stageName, "D2")) { + flags |= STAGE_MOUNTAIN | STAGE_DUNGEON; + } else if (checkStagePrefix(stageName, "B2")) { + flags |= STAGE_MOUNTAIN | STAGE_BOSS; + } else if (checkStagePrefix(stageName, "S2")) { + flags |= STAGE_MOUNTAIN | STAGE_SILENT_REALM; + } else if (checkStagePrefix(stageName, "F3")) { + flags |= STAGE_DESERT | STAGE_FIELD; + } else if (checkStagePrefix(stageName, "D3")) { + flags |= STAGE_DESERT | STAGE_DUNGEON; + } else if (checkStagePrefix(stageName, "B3")) { + flags |= STAGE_DESERT | STAGE_BOSS; + } else if (checkStagePrefix(stageName, "S3")) { + flags |= STAGE_DESERT | STAGE_SILENT_REALM; + } else if (checkStagePrefix(stageName, "F4")) { + flags |= STAGE_SILENT_GROUNDS | STAGE_FIELD; + } else if (checkStagePrefix(stageName, "D4")) { + flags |= STAGE_SILENT_GROUNDS | STAGE_DUNGEON; + } else if (checkStagePrefix(stageName, "B4")) { + flags |= STAGE_SILENT_GROUNDS | STAGE_BOSS; + } + + if ((flags & STAGE_SKY) != 0 && std::strstr(stageName, "r") != nullptr) { + flags |= STAGE_ROOM; + } + + return flags; +} + +bool dSndStateMgr_c::isVolcanicDungeon(u32 stageId) { + u32 base = getStageUnk2(stageId); + switch (base) { + case SND_STAGE_D200: + case SND_STAGE_D201: + case SND_STAGE_D201_1: + case SND_STAGE_D003_0: + case SND_STAGE_D003_1: + return true; + default: + return false; + } +} + +bool dSndStateMgr_c::isSeekerStoneStage(const char *stageName, s32 layer) { + if (streq(stageName, "F000") && layer == 22) { + // Skyloft hint stone + return true; + } + + if (streq(stageName, "F202") && layer == 10) { + // Boko base hint stone + return true; + } + + return false; +} + +bool isInStage(const char *stageName) { + return !std::strcmp(dScGame_c::currentSpawnInfo.getStageName(), stageName); +} diff --git a/src/toBeSorted/actor_info.cpp b/src/toBeSorted/actor_info.cpp index 341d7775..98e829e2 100644 --- a/src/toBeSorted/actor_info.cpp +++ b/src/toBeSorted/actor_info.cpp @@ -271,7 +271,7 @@ static const ActorInfo sInfos[] = { { "ESiren", fProfile::E_SIREN, fProfile::E_SIREN, 0xFFFF, 18, 0}, { "ESktl", fProfile::E_SKYTAIL, fProfile::E_SKYTAIL, 2, 10, 0}, { "ESm", fProfile::E_SM, fProfile::E_SM, 59, 11, 0}, - { "ESpark", fProfile::E_SPARK, fProfile::E_SPARK, 67, 17, 0}, + { "ESpark", fProfile::E_SPARK, fProfile::E_SPARK, 67, SND_SOURCE_SPARK, 0}, { "ESyako", fProfile::E_SYAKOMAITO, fProfile::E_SYAKOMAITO, 68, 10, 0}, { "EWs", fProfile::E_WS, fProfile::E_WS, 6, 15, 0}, { "Eel", fProfile::EEL, fProfile::EEL, 0xFFFF, 0xFF, 0},