More and cleanup

This commit is contained in:
robojumper
2025-07-20 00:59:08 +02:00
parent 90ab45d3dd
commit af75869621
18 changed files with 177 additions and 70 deletions
+3 -3
View File
@@ -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;
+2 -2
View File
@@ -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;
}
+2 -2
View File
@@ -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() {
+2 -2
View File
@@ -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());
}
}
+2 -1
View File
@@ -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() {
+1 -2
View File
@@ -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() {
+2 -2
View File
@@ -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;
}
+1 -1
View File
@@ -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() {
+107 -14
View File
@@ -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++) {