diff options
| author | robojumper <robojumper@gmail.com> | 2025-07-20 00:59:08 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-09-13 11:10:27 +0200 |
| commit | af7586962198fdcaf8be984fe39806fb88ee522e (patch) | |
| tree | d27b4f585c9e63b8de402a3a0b8852add201b798 /src | |
| parent | 90ab45d3dd794ec24ac324c390fdc99ac6422bed (diff) | |
More and cleanup
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/t/d_t_sound_area.cpp | 6 | ||||
| -rw-r--r-- | src/REL/d/t/d_t_sound_area_mgr.cpp | 4 | ||||
| -rw-r--r-- | src/d/a/d_a_base.cpp | 4 | ||||
| -rw-r--r-- | src/d/d_sc_game.cpp | 4 | ||||
| -rw-r--r-- | src/d/d_sc_title.cpp | 3 | ||||
| -rw-r--r-- | src/d/d_stage_mgr.cpp | 3 | ||||
| -rw-r--r-- | src/d/snd/d_snd_3d_actor.cpp | 4 | ||||
| -rw-r--r-- | src/d/snd/d_snd_distant_sound_actor.cpp | 2 | ||||
| -rw-r--r-- | src/d/snd/d_snd_state_mgr.cpp | 121 |
9 files changed, 122 insertions, 29 deletions
diff --git a/src/REL/d/t/d_t_sound_area.cpp b/src/REL/d/t/d_t_sound_area.cpp index 869a62dc..b1f7552f 100644 --- a/src/REL/d/t/d_t_sound_area.cpp +++ b/src/REL/d/t/d_t_sound_area.cpp @@ -36,7 +36,7 @@ int dTgSndAr_c::create() { } dAcBase_c *ac = static_cast<dAcBase_c *>(base); if (!ac->isActorPlayer() && checkPosInArea(ac->position)) { - ac->setBit_field_0xE8(params & 0xFF); + ac->setTgSndAreaFlag(params & 0xFF); } } return SUCCEEDED; @@ -49,12 +49,12 @@ int dTgSndAr_c::doDelete() { int dTgSndAr_c::actorExecute() { dAcBase_c *link = dAcPy_c::LINK; if (link != nullptr && checkPosInArea(link->position)) { - link->setBit_field_0xE8(params & 0xFF); + link->setTgSndAreaFlag(params & 0xFF); } if (dSnd3DManager_c::GetInstance() != nullptr) { mVec3_c pos(dSnd3DManager_c::GetInstance()->getCameraTargetPos()); if (checkPosInArea(pos) && dTgSndMg_c::GetInstance() != nullptr) { - dTgSndMg_c::GetInstance()->setBgmFlag(params & 0xFF); + dTgSndMg_c::GetInstance()->setSndFlag(params & 0xFF); } } return SUCCEEDED; diff --git a/src/REL/d/t/d_t_sound_area_mgr.cpp b/src/REL/d/t/d_t_sound_area_mgr.cpp index 0d9dd1d1..c17a843c 100644 --- a/src/REL/d/t/d_t_sound_area_mgr.cpp +++ b/src/REL/d/t/d_t_sound_area_mgr.cpp @@ -18,9 +18,9 @@ int dTgSndMg_c::doDelete() { int dTgSndMg_c::actorExecute() { if (dAcPy_c::LINK != nullptr) { - dAcPy_c::LINK->field_0xe8 = 0; + dAcPy_c::LINK->mTgSndAreaFlags = 0; } - mBgmFlags = 0; + mSndFlags = 0; return SUCCEEDED; } diff --git a/src/d/a/d_a_base.cpp b/src/d/a/d_a_base.cpp index 1aea297b..1aa515d4 100644 --- a/src/d/a/d_a_base.cpp +++ b/src/d/a/d_a_base.cpp @@ -151,8 +151,8 @@ bool dAcBase_c::addActorToRoom(s32 roomId) { return false; } -void dAcBase_c::setBit_field_0xE8(s32 shift) { - field_0xe8 |= (1 << shift); +void dAcBase_c::setTgSndAreaFlag(s32 shift) { + mTgSndAreaFlags |= (1 << shift); } int dAcBase_c::actorCreate() { diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp index 9d85e44f..7d4f449c 100644 --- a/src/d/d_sc_game.cpp +++ b/src/d/d_sc_game.cpp @@ -6,6 +6,7 @@ #include "d/d_gfx.h" #include "d/d_stage_mgr.h" #include "d/flag/storyflag_manager.h" +#include "d/snd/d_snd_state_mgr.h" #include "f/f_base.h" #include "f/f_profile_name.h" #include "m/m_fader_base.h" @@ -16,7 +17,6 @@ #include "toBeSorted/arc_managers/oarc_manager.h" #include "toBeSorted/file_manager.h" #include "toBeSorted/minigame_mgr.h" -#include "toBeSorted/music_mgrs.h" #include "toBeSorted/unk_save_time.h" #include <cstring> @@ -166,7 +166,7 @@ void dScGame_c::executeState_Action() { } } else if (mReloadTrigger != fProfile::PROFILE_MAX) { mFader.fadeOut(); - fn_80362150(ENEMY_SOUND_MGR, mFader.getFadeOutFrame()); + dSndStateMgr_c::GetInstance()->onGotoStage(mFader.getFadeOutFrame()); } } diff --git a/src/d/d_sc_title.cpp b/src/d/d_sc_title.cpp index aad53c91..653e3c22 100644 --- a/src/d/d_sc_title.cpp +++ b/src/d/d_sc_title.cpp @@ -9,6 +9,7 @@ #include "d/d_reset.h" #include "d/d_sc_game.h" #include "d/d_sys.h" +#include "d/snd/d_snd_state_mgr.h" #include "f/f_base.h" #include "f/f_profile_name.h" #include "m/m_color.h" @@ -162,7 +163,7 @@ void dScTitle_c::loadTitleScreen(u32 params) { } else { actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, dFader_c::FADER_BLACK, 15, -1); } - fn_80362150(ENEMY_SOUND_MGR, 30); + dSndStateMgr_c::GetInstance()->onGotoStage(30); } void dScTitle_c::setSomethingSkbRelated() { diff --git a/src/d/d_stage_mgr.cpp b/src/d/d_stage_mgr.cpp index e461ab37..c3f7f005 100644 --- a/src/d/d_stage_mgr.cpp +++ b/src/d/d_stage_mgr.cpp @@ -17,7 +17,6 @@ #include "toBeSorted/arc_managers/layout_arc_manager.h" #include "toBeSorted/arc_managers/oarc_manager.h" #include "toBeSorted/d_particle.h" -#include "toBeSorted/music_mgrs.h" SPECIAL_BASE_PROFILE(STAGE_MANAGER, dStageMgr_c, fProfile::STAGE_MANAGER, 0X5, 1536); @@ -280,7 +279,7 @@ void dStageMgr_c::finalizeState_RestartSceneWait() {} void dStageMgr_c::initializeState_RestartScene() { triggerFade(dScGame_c::nextSpawnInfo.transitionType, dScGame_c::nextSpawnInfo.transitionFadeFrames); mFader.setFadeInType(dScGame_c::nextSpawnInfo.transitionType); - fn_803625F0(ENEMY_SOUND_MGR, mFader.getFadeOutFrame()); + dSndStateMgr_c::GetInstance()->onRestartScene(mFader.getFadeOutFrame()); } void dStageMgr_c::executeState_RestartScene() { diff --git a/src/d/snd/d_snd_3d_actor.cpp b/src/d/snd/d_snd_3d_actor.cpp index 4732c5ba..913afbd7 100644 --- a/src/d/snd/d_snd_3d_actor.cpp +++ b/src/d/snd/d_snd_3d_actor.cpp @@ -30,7 +30,7 @@ dSnd3DActor_c::dSnd3DActor_c(dSndSourceParam *pSourceParam, s32 sourceType) mpSourceParam(pSourceParam), mFlags(0), mDistanceToPlayer(INFINITY), - a_field_0xE0(0.0f) { + mFxSend3D(0.0f) { resetCachedRelativePositions(); // Portability hazard SetUserParam(reinterpret_cast<u32>(this)); @@ -41,7 +41,7 @@ dSnd3DActor_c::dSnd3DActor_c(dSndSourceParam *pSourceParam, s32 sourceType) void dSnd3DActor_c::setPosition(const nw4r::math::VEC3 &rPosition) { SetPosition(rPosition); - a_field_0xE0 = dSndStateMgr_c::GetInstance()->getField_0x49C(); + mFxSend3D = dSndStateMgr_c::GetInstance()->getFxSend3D(); mFlags = 0; } diff --git a/src/d/snd/d_snd_distant_sound_actor.cpp b/src/d/snd/d_snd_distant_sound_actor.cpp index 88c2a9ca..0dad5ccc 100644 --- a/src/d/snd/d_snd_distant_sound_actor.cpp +++ b/src/d/snd/d_snd_distant_sound_actor.cpp @@ -109,7 +109,7 @@ void dSndDistantSoundActor_c::setPause(bool flag, int fadeFrames) { } void dSndDistantSoundActor_c::updateSome3DField() { - a_field_0xE0 = dSndStateMgr_c::GetInstance()->getField_0x49C(); + mFxSend3D = dSndStateMgr_c::GetInstance()->getFxSend3D(); } UNKWORD dSndDistantSoundActor_c::d_vt_0x3C() { diff --git a/src/d/snd/d_snd_state_mgr.cpp b/src/d/snd/d_snd_state_mgr.cpp index c2dceeea..6342cab2 100644 --- a/src/d/snd/d_snd_state_mgr.cpp +++ b/src/d/snd/d_snd_state_mgr.cpp @@ -9,6 +9,7 @@ #include "d/snd/d_snd_checkers.h" #include "d/snd/d_snd_control_player_mgr.h" #include "d/snd/d_snd_event.h" +#include "d/snd/d_snd_harp_song_mgr.h" #include "d/snd/d_snd_mgr.h" #include "d/snd/d_snd_player_mgr.h" #include "d/snd/d_snd_small_effect_mgr.h" @@ -16,6 +17,7 @@ #include "d/snd/d_snd_stage_data.h" #include "d/snd/d_snd_util.h" #include "d/snd/d_snd_wzsound.h" +#include "d/t/d_t_sound_area_mgr.h" #include "egg/core/eggHeap.h" #include "nw4r/snd/snd_FxReverbStdDpl2.h" #include "nw4r/snd/snd_SeqSoundHandle.h" @@ -42,16 +44,16 @@ dSndStateMgr_c::dSndStateMgr_c() field_0x060(0), field_0x064(0), field_0x065(false), - field_0x066(0), - field_0x067(0), - field_0x068(-1), - field_0x06C(-1), + mHasChangedTgSndAreaFlags(false), + mHasChangedTgSndAreaMgFlags(false), + mSavedTgSndAreaFlags(-1), + mSavedTgSndAreaMgFlags(-1), mpUnkCallback(nullptr), field_0x074(0), mpOnEventStartCallback(nullptr), field_0x07C(0), - field_0x080(0), - field_0x084(0), + mpTgSndAreaFlagsChangeCallback(nullptr), + mpTgSndAreaMgFlagsChangeCallback(nullptr), field_0x088(0), mSoundEventId(SND_EVENT_0x89), mCameraCutCounter(0), @@ -74,11 +76,11 @@ dSndStateMgr_c::dSndStateMgr_c() 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), + mFxSend3DDefault(0.02f), + mFxSend3DOverride(-1.0f), + mFxSend3DNext(-1.0f), + mFxSend3D(0.02f), + mFxSend3DTarget(0.02f), field_0x4A4(-1), field_0x4A8(0), mNeedsGroupsReload(false) {} @@ -228,6 +230,38 @@ bool dSndStateMgr_c::isSomeSkyloftRoom() const { } } +void dSndStateMgr_c::onRestartScene(s32 fadeFrames) { + if (field_0x064) { + return; + } + + s32 nextLayer = dScGame_c::nextSpawnInfo.layer; + // This combines next stage with current layer, so this effectively checks if you're leaving the Hint Movie scene + if (isSeekerStoneStage(mStageName, dScGame_c::currentSpawnInfo.layer)) { + dSndBgmMgr_c::GetInstance()->stopAllBgm(fadeFrames); + } else if (mLayer != nextLayer) { + if (isSeekerStoneStage(mStageName, nextLayer)) { + dSndBgmMgr_c::GetInstance()->stopAllBgm(fadeFrames); + dSndBgmMgr_c::GetInstance()->prepareBgm(BGM_HINT_SELECT, 0); + dSndBgmMgr_c::GetInstance()->setOverrideBgmId(BGM_HINT_SELECT); + dSndBgmMgr_c::GetInstance()->activateOverrideBgmId(); + dSndAreaSoundEffectMgr_c::GetInstance()->stopSounds(fadeFrames); + } else { + onGotoStage(fadeFrames); + onFlag0x10(0x01); + return; + } + } + + dSndSmallEffectMgr_c::GetInstance()->stopAllSoundExceptEvent(fadeFrames); + dSndBgmMgr_c::GetInstance()->prepareBgm(); + dSndHarpSongMgr_c::GetInstance()->deactivate(); + onFlag0x10(0x01); + dSndBgmMgr_c::GetInstance()->setField_0x306(1); + offFlag0x10(0x4); + offFlag0x10(0x10); +} + void dSndStateMgr_c::loadStageSound() { loadStageSound(false); } @@ -405,7 +439,7 @@ void dSndStateMgr_c::loadStageSound(bool force) { f32 volume = -1.0f; dSndAreaSoundEffectMgr_c::GetInstance()->loadStageSound(&volume); if (volume > 0.0f) { - field_0x490 = volume; + mFxSend3DDefault = volume; } } @@ -700,7 +734,7 @@ void dSndStateMgr_c::handleSeLv() { if (dSndMgr_c::GetInstance()->holdSound(&mSeLvSoundHandle, soundId)) { u32 id = dSndPlayerMgr_c::GetInstance()->getDemoArchive()->GetSoundUserParam(soundId); if ((dSndPlayerMgr_c::sEventMuteFlagsMask & id & 0x2000000) == 0) { - mSeLvSoundHandle.SetFxSend(nw4r::snd::AUX_A, field_0x49C); + mSeLvSoundHandle.SetFxSend(nw4r::snd::AUX_A, mFxSend3D); } } } else { @@ -849,7 +883,35 @@ void dSndStateMgr_c::setRoomId(s32 roomId) { } void dSndStateMgr_c::calcTgSnd() { - // ... + mHasChangedTgSndAreaFlags = false; + mHasChangedTgSndAreaMgFlags = false; + dAcPy_c *link = dAcPy_c::GetLinkM(); + if (link != nullptr && dTgSndMg_c::GetInstance() != nullptr) { + u32 flags = dTgSndMg_c::GetInstance()->getSndFlags(); + if (flags != mSavedTgSndAreaMgFlags) { + mHasChangedTgSndAreaMgFlags = true; + if (mpTgSndAreaMgFlagsChangeCallback != nullptr) { + (mpTgSndAreaMgFlagsChangeCallback)(flags, mSavedTgSndAreaMgFlags); + } + dSndBgmMgr_c::GetInstance()->onTgSndAreaMgFlagsChange(flags, mSavedTgSndAreaMgFlags); + mSavedTgSndAreaMgFlags = flags; + } + + if (dSndSourceMgr_c::getBoomerangSource() != nullptr) { + flags = mSavedTgSndAreaMgFlags; + } else { + flags = link->mTgSndAreaFlags; + } + if (flags != mSavedTgSndAreaFlags) { + mHasChangedTgSndAreaFlags = true; + if (mpTgSndAreaFlagsChangeCallback != nullptr) { + (mpTgSndAreaFlagsChangeCallback)(flags, mSavedTgSndAreaFlags); + } + mFxSend3DNext = getUserParamVolume(flags); + dSndBgmMgr_c::GetInstance()->onTgSndAreaFlagsChange(flags, mSavedTgSndAreaFlags); + mSavedTgSndAreaFlags = flags; + } + } } void dSndStateMgr_c::calcFilters() { @@ -975,6 +1037,37 @@ void dSndStateMgr_c::resetBgmLpf() { } } +void dSndStateMgr_c::calcFxSend3D() { + if (mFxSend3D > mFxSend3DTarget) { + mFxSend3D -= 0.02f; + if (mFxSend3D < mFxSend3DTarget) { + mFxSend3D = mFxSend3DTarget; + } + } else if (mFxSend3D < mFxSend3DTarget) { + mFxSend3D += 0.02f; + if (mFxSend3D > mFxSend3DTarget) { + mFxSend3D = mFxSend3DTarget; + } + } +} + +void dSndStateMgr_c::setFxSend3DTarget() { + // TODO - weird control flow + f32 target = mFxSend3DDefault; + if (mFxSend3DNext > 0.0f) { + target = mFxSend3DNext; + } else if (mFxSend3DOverride > 0.0f) { + target = mFxSend3DOverride; + } + + if (target < 0.02f) { + target = 0.02f; + } else if (target > 0.3f) { + target = 0.3f; + } + mFxSend3DTarget = target; +} + f32 dSndStateMgr_c::getUserParamVolume(u32 userParam) { s32 bit = 31; for (int i = 0; i < 4; i++) { |
