summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-07-20 00:59:08 +0200
committerrobojumper <robojumper@gmail.com>2025-09-13 11:10:27 +0200
commitaf7586962198fdcaf8be984fe39806fb88ee522e (patch)
treed27b4f585c9e63b8de402a3a0b8852add201b798 /src
parent90ab45d3dd794ec24ac324c390fdc99ac6422bed (diff)
More and cleanup
Diffstat (limited to 'src')
-rw-r--r--src/REL/d/t/d_t_sound_area.cpp6
-rw-r--r--src/REL/d/t/d_t_sound_area_mgr.cpp4
-rw-r--r--src/d/a/d_a_base.cpp4
-rw-r--r--src/d/d_sc_game.cpp4
-rw-r--r--src/d/d_sc_title.cpp3
-rw-r--r--src/d/d_stage_mgr.cpp3
-rw-r--r--src/d/snd/d_snd_3d_actor.cpp4
-rw-r--r--src/d/snd/d_snd_distant_sound_actor.cpp2
-rw-r--r--src/d/snd/d_snd_state_mgr.cpp121
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++) {