mirror of
https://github.com/zeldaret/ss
synced 2026-06-11 21:18:40 -04:00
A bit more
This commit is contained in:
@@ -25,6 +25,9 @@ public:
|
||||
void stopSounds(s32 fadeFrames);
|
||||
void pauseAllSounds();
|
||||
|
||||
void onEventStart();
|
||||
void onEventEnd();
|
||||
|
||||
private:
|
||||
bool isPlayingAnySound() const;
|
||||
bool isPlayingSound(u32 soundId) const;
|
||||
|
||||
@@ -37,6 +37,11 @@ public:
|
||||
void pauseAllBgm();
|
||||
void stopAllBgm(s32 fadeFrames);
|
||||
|
||||
void setBgmToPlayOnEventEnd(u32 soundId);
|
||||
bool onEventEnd();
|
||||
void onEventStart(const char *eventName, s32 soundEventId, s32 unk);
|
||||
void prepareBgm();
|
||||
|
||||
dSndBgmSound_c *getSoundHandleForBgm(u32 soundId, u32 startOffset);
|
||||
bool isPlayingBgmSound() const;
|
||||
bool isPlayingBgmSoundId(u32 soundId) const;
|
||||
@@ -93,6 +98,10 @@ public:
|
||||
return getActiveBgmSound();
|
||||
}
|
||||
|
||||
void setField_0x306(u8 val) {
|
||||
field_0x306 = val;
|
||||
}
|
||||
|
||||
private:
|
||||
dSndBgmBattleSound_c *getBgmBattleSound();
|
||||
|
||||
@@ -144,7 +153,7 @@ private:
|
||||
/* 0x29C */ UNKWORD field_0x29C;
|
||||
/* 0x2A0 */ dSndActor_c mSoundActor;
|
||||
/* 0x2F4 */ f32 field_0x2F4;
|
||||
/* 0x2F8 */ s32 field_0x2F8;
|
||||
/* 0x2F8 */ u32 mBgmToPlayOnEventEnd;
|
||||
/* 0x2FC */ u8 field_0x2FC;
|
||||
/* 0x300 */ s32 field_0x300;
|
||||
/* 0x304 */ u8 field_0x304;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/snd/d_snd_bgm_mgr.h"
|
||||
#include "d/snd/d_snd_player_mgr.h"
|
||||
#include "nw4r/snd/snd_SoundHandle.h"
|
||||
|
||||
class SoundPropertiesChecker {
|
||||
@@ -108,4 +109,20 @@ private:
|
||||
/* 0x08 */ s32 mFadeFrames;
|
||||
};
|
||||
|
||||
class SoundStopperIfParamFlag20 {
|
||||
public:
|
||||
SoundStopperIfParamFlag20() {}
|
||||
|
||||
virtual void operator()(nw4r::snd::SoundHandle &pHandle) {
|
||||
u32 id = pHandle.GetId();
|
||||
u32 param = dSndPlayerMgr_c::GetInstance()->getDemoArchive()->GetSoundUserParam(id);
|
||||
if ((param & 0x100000) != 0) {
|
||||
u32 fadeFrames = param & 0xFF;
|
||||
pHandle.Stop(fadeFrames);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,13 +4,14 @@
|
||||
#include "common.h"
|
||||
|
||||
typedef void (*SndEventCallback)(void);
|
||||
typedef void (*SndEventFinalizeCallback)(bool skipped);
|
||||
|
||||
struct SndEventDef {
|
||||
/* 0x00 */ const char *eventName;
|
||||
/* 0x04 */ s32 eventId;
|
||||
/* 0x08 */ SndEventCallback initializeCb;
|
||||
/* 0x0C */ SndEventCallback executeCb;
|
||||
/* 0x10 */ SndEventCallback finalizeCb;
|
||||
/* 0x10 */ SndEventFinalizeCallback finalizeCb;
|
||||
/* 0x14 */ u8 _0x14[0x1C - 0x14]; // always zero
|
||||
};
|
||||
|
||||
|
||||
@@ -63,6 +63,8 @@ public:
|
||||
}
|
||||
|
||||
void setMutedFromFader(bool muteFlag);
|
||||
void onEventStart();
|
||||
void onEventEnd();
|
||||
|
||||
private:
|
||||
void calcEnemyObjVolume();
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "d/snd/d_snd_event.h"
|
||||
#include "d/snd/d_snd_util.h"
|
||||
#include "nw4r/snd/snd_FxReverbStdDpl2.h"
|
||||
#include "nw4r/snd/snd_SoundHandle.h"
|
||||
#include "sized_string.h"
|
||||
|
||||
SND_DISPOSER_FORWARD_DECL(dSndStateMgr_c);
|
||||
@@ -15,6 +16,8 @@ public:
|
||||
SND_DISPOSER_MEMBERS(dSndStateMgr_c);
|
||||
|
||||
public:
|
||||
typedef void (*OnEventStartCallback)(s32 soundEventId, u32 flags);
|
||||
|
||||
enum StageFlags_e {
|
||||
STAGE_FIELD = 0x1,
|
||||
STAGE_DUNGEON = 0x2,
|
||||
@@ -33,6 +36,7 @@ public:
|
||||
enum EventFlags_e {
|
||||
EVENT_IN_EVENT = 0x1,
|
||||
EVENT_DEMO = 0x2,
|
||||
EVENT_0x04 = 0x4,
|
||||
EVENT_MUTE_BGM_PARTIAL = 0x8,
|
||||
EVENT_MUTE_BGM_FULL = 0x10,
|
||||
EVENT_MUTE_STAGE_EFFECTS_PARTIAL = 0x20,
|
||||
@@ -41,6 +45,7 @@ public:
|
||||
EVENT_MUTE_ENEMY_FULL = 0x100,
|
||||
EVENT_MUTE_OBJ_PARTIAL = 0x200,
|
||||
EVENT_MUTE_OBJ_FULL = 0x400,
|
||||
EVENT_0x800 = 0x800,
|
||||
EVENT_0x400000 = 0x400000,
|
||||
};
|
||||
|
||||
@@ -76,10 +81,12 @@ public:
|
||||
return field_0x49C;
|
||||
}
|
||||
|
||||
void resetStageName() {
|
||||
field_0x098 = "EVENT_NONE";
|
||||
void resetEventName() {
|
||||
mEventName = "EVENT_NONE";
|
||||
}
|
||||
|
||||
bool checkFlag0x18(u32 mask);
|
||||
|
||||
bool checkFlag0x10(u32 mask) const {
|
||||
return field_0x010 & mask;
|
||||
}
|
||||
@@ -92,7 +99,7 @@ public:
|
||||
field_0x010 &= ~mask;
|
||||
}
|
||||
|
||||
bool checkEventFlag(u32 mask) const {
|
||||
bool checkEventFlag(u32 mask) {
|
||||
return mEventFlags & mask;
|
||||
}
|
||||
|
||||
@@ -111,9 +118,12 @@ public:
|
||||
return getCurrentStageMusicDemoName() != nullptr;
|
||||
}
|
||||
|
||||
void setEvent(const char *eventName);
|
||||
// not sure, subtype is unused
|
||||
bool isActiveDemoMaybe(s32 subtype) const;
|
||||
bool isInEvent(const char *eventName);
|
||||
bool isInEvent() const;
|
||||
bool onSkipEvent() const;
|
||||
|
||||
void doMsgStart(s32 idx);
|
||||
void doMsgEnd();
|
||||
@@ -151,6 +161,20 @@ private:
|
||||
bool handleStageEvent(const char *name);
|
||||
void handleDemoEvent(const char *name);
|
||||
|
||||
u32 convertSeLabelToSoundId(const char *label);
|
||||
u32 convertBgmLabelToSoundId(const char *label);
|
||||
|
||||
u32 getBgmLabelSoundId();
|
||||
bool playFanOrBgm(u32 soundId);
|
||||
|
||||
void handleFan();
|
||||
void handleSe();
|
||||
void handleCmd();
|
||||
void handleSeLv();
|
||||
bool finalizeEvent(bool skipped);
|
||||
|
||||
void resetEventVars();
|
||||
|
||||
// Callbacks start
|
||||
static void cbUnkNoop();
|
||||
|
||||
@@ -173,7 +197,7 @@ private:
|
||||
/* 0x010 */ u32 field_0x010;
|
||||
/* 0x014 */ UNKWORD field_0x014;
|
||||
/* 0x018 */ UNKWORD field_0x018;
|
||||
/* 0x01C */ SizedString<32> field_0x01C;
|
||||
/* 0x01C */ SizedString<32> mStageName;
|
||||
/* 0x03C */ UNKWORD field_0x03C;
|
||||
/* 0x040 */ s32 mStageId;
|
||||
/* 0x044 */ UNKWORD field_0x044;
|
||||
@@ -189,9 +213,9 @@ private:
|
||||
/* 0x067 */ u8 field_0x067;
|
||||
/* 0x068 */ UNKWORD field_0x068;
|
||||
/* 0x06C */ UNKWORD field_0x06C;
|
||||
/* 0x070 */ UNKWORD field_0x070;
|
||||
/* 0x070 */ void (*mpUnkCallback)();
|
||||
/* 0x074 */ UNKWORD field_0x074;
|
||||
/* 0x078 */ UNKWORD field_0x078;
|
||||
/* 0x078 */ OnEventStartCallback mpOnEventStartCallback;
|
||||
/* 0x07C */ UNKWORD field_0x07C;
|
||||
/* 0x080 */ UNKWORD field_0x080;
|
||||
/* 0x084 */ UNKWORD field_0x084;
|
||||
@@ -199,21 +223,21 @@ private:
|
||||
/* 0x08C */ s32 mSoundEventId;
|
||||
/* 0x090 */ UNKWORD field_0x090;
|
||||
/* 0x094 */ u32 mEventFlags;
|
||||
/* 0x098 */ SizedString<64> field_0x098;
|
||||
/* 0x0D8 */ SizedString<64> field_0x0D8;
|
||||
/* 0x098 */ SizedString<64> mEventName;
|
||||
/* 0x0D8 */ SizedString<64> mPrevEventName;
|
||||
/* 0x118 */ const char *field_0x118;
|
||||
/* 0x11C */ u32 field_0x11C;
|
||||
/* 0x120 */ UNKWORD field_0x120;
|
||||
/* 0x124 */ UNKWORD field_0x124;
|
||||
/* 0x128 */ UNKWORD field_0x128;
|
||||
/* 0x128 */ u32 mSeLvSoundId;
|
||||
/* 0x12C */ SizedString<64> mSeName;
|
||||
/* 0x16C */ SizedString<64> mBgmName;
|
||||
/* 0x1AC */ SizedString<64> mFanName;
|
||||
/* 0x1EC */ SizedString<64> mCmdName;
|
||||
/* 0x22C */ UNKWORD field_0x22C;
|
||||
/* 0x230 */ UNKWORD field_0x230;
|
||||
/* 0x230 */ nw4r::snd::SoundHandle mSeLvSoundHandle;
|
||||
/* 0x234 */ const SndEventDef *mpSoundEventDef;
|
||||
/* 0x238 */ UNKWORD field_0x238;
|
||||
/* 0x238 */ u32 field_0x238;
|
||||
/* 0x23C */ u8 field_0x23C;
|
||||
/* 0x23D */ u8 field_0x23D;
|
||||
/* 0x240 */ UNKWORD field_0x240;
|
||||
|
||||
@@ -69,6 +69,11 @@ namespace nw4r { namespace snd
|
||||
mSound->SetPan(pan);
|
||||
}
|
||||
|
||||
void SetFxSend(AuxBus bus, f32 send) {
|
||||
if (IsAttachedSound())
|
||||
mSound->SetFxSend(bus, send);
|
||||
}
|
||||
|
||||
void SetLpfFreq(f32 lpfFreq) {
|
||||
if (IsAttachedSound())
|
||||
mSound->SetLpfFreq(lpfFreq);
|
||||
|
||||
@@ -37,6 +37,10 @@ public:
|
||||
return isInEvent() ? sInstance->mCurrentEvent.eventName : nullptr;
|
||||
}
|
||||
|
||||
static s32 getCurrentEventRoomId() {
|
||||
return isInEvent() ? sInstance->mCurrentEvent.roomid : -1;
|
||||
}
|
||||
|
||||
static bool isCurrentEvent(const char *name) {
|
||||
return strequals(getCurrentEventName(), name);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ 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" bool fn_80364DA0(dSndStateMgr_c *);
|
||||
extern "C" void fn_80365020(dSndStateMgr_c *);
|
||||
extern "C" void fn_80364D00(dSndStateMgr_c *, s32);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user