mirror of
https://github.com/zeldaret/ss
synced 2026-06-18 15:35:20 -04:00
174 lines
4.9 KiB
C++
174 lines
4.9 KiB
C++
#ifndef NW4R_SND_SOUND_STARTABLE_H
|
|
#define NW4R_SND_SOUND_STARTABLE_H
|
|
|
|
/*******************************************************************************
|
|
* headers
|
|
*/
|
|
|
|
#include "common.h" // u32
|
|
#include "nw4r/snd/snd_BasicSound.h"
|
|
#include "nw4r/snd/snd_ExternalSoundPlayer.h"
|
|
|
|
/*******************************************************************************
|
|
* types
|
|
*/
|
|
|
|
// forward declarations
|
|
namespace nw4r { namespace snd { class SoundHandle; }}
|
|
|
|
/*******************************************************************************
|
|
* classes and functions
|
|
*/
|
|
|
|
namespace nw4r { namespace snd
|
|
{
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x289cb
|
|
class SoundStartable
|
|
{
|
|
// enums
|
|
public:
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x267f0
|
|
enum StartResult
|
|
{
|
|
START_SUCCESS,
|
|
|
|
START_ERR_LOW_PRIORITY,
|
|
START_ERR_INVALID_LABEL_STRING,
|
|
START_ERR_INVALID_SOUNDID,
|
|
START_ERR_NOT_DATA_LOADED,
|
|
START_ERR_NOT_ENOUGH_PLAYER_HEAP,
|
|
START_ERR_CANNOT_OPEN_FILE,
|
|
START_ERR_NOT_AVAILABLE,
|
|
START_ERR_CANNOT_ALLOCATE_TRACK,
|
|
START_ERR_NOT_ENOUGH_INSTANCE,
|
|
START_ERR_INVALID_PARAMETER,
|
|
START_ERR_INVALID_SEQ_START_LOCATION_LABEL,
|
|
|
|
START_ERR_USER = 128,
|
|
|
|
START_ERR_UNKNOWN = 255,
|
|
};
|
|
|
|
// nested types
|
|
public:
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27291
|
|
struct StartInfo
|
|
{
|
|
StartInfo() : enableFlag(0) {}
|
|
// enums
|
|
public:
|
|
enum EnableFlag
|
|
{
|
|
ENABLE_START_OFFSET = 1 << 0,
|
|
ENABLE_PLAYER_ID = 1 << 1,
|
|
ENABLE_PLAYER_PRIORITY = 1 << 2,
|
|
ENABLE_ACTOR_PLAYER_ID = 1 << 3,
|
|
ENABLE_SEQ_SOUND_INFO = 1 << 4,
|
|
};
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27187
|
|
enum StartOffsetType
|
|
{
|
|
START_OFFSET_TYPE_MILLISEC,
|
|
START_OFFSET_TYPE_TICK,
|
|
START_OFFSET_TYPE_SAMPLE,
|
|
};
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x27208
|
|
struct SeqSoundInfo
|
|
{
|
|
SeqSoundInfo() : seqDataAddress(NULL), startLocationLabel(NULL) {}
|
|
void *seqDataAddress; // size 0x04, offset 0x00
|
|
char const *startLocationLabel; // size 0x04, offset 0x04
|
|
}; // size 0x08
|
|
|
|
// members
|
|
public:
|
|
u32 enableFlag; // size 0x04, offset 0x00
|
|
StartOffsetType startOffsetType; // size 0x04, offset 0x04
|
|
int startOffset; // size 0x04, offset 0x08
|
|
u32 playerId; // size 0x04, offset 0x0c
|
|
int playerPriority; // size 0x04, offset 0x10
|
|
int actorPlayerId; // size 0x04, offset 0x14
|
|
SeqSoundInfo seqSoundInfo; // size 0x08, offset 0x18
|
|
}; // size 0x20
|
|
|
|
// methods
|
|
public:
|
|
// cdtors
|
|
virtual ~SoundStartable() {}
|
|
|
|
// virtual function ordering
|
|
// vtable SoundStartable
|
|
virtual StartResult detail_SetupSound(SoundHandle *handle, u32 soundId,
|
|
bool holdFlag,
|
|
StartInfo const *startInfo) = 0;
|
|
virtual u32 detail_ConvertLabelStringToSoundId(char const *label) = 0;
|
|
|
|
// methods
|
|
StartResult detail_StartSound(
|
|
SoundHandle *pHandle, u32 id, const StartInfo *pStartInfo
|
|
);
|
|
StartResult detail_StartSound(
|
|
SoundHandle *pHandle, const char *label, const StartInfo *pStartInfo
|
|
);
|
|
|
|
StartResult detail_HoldSound(
|
|
SoundHandle *pHandle, u32 id, const StartInfo *pStartInfo
|
|
);
|
|
StartResult detail_HoldSound(
|
|
SoundHandle *pHandle, const char *label, const StartInfo *pStartInfo
|
|
);
|
|
|
|
StartResult detail_PrepareSound(
|
|
SoundHandle *pHandle, u32 id, const StartInfo *pStartInfo
|
|
);
|
|
StartResult detail_PrepareSound(
|
|
SoundHandle *pHandle, const char *label,
|
|
const StartInfo *pStartInfo
|
|
);
|
|
|
|
bool StartSound(SoundHandle *pHandle, u32 id) {
|
|
return detail_StartSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool StartSound(SoundHandle *pHandle, const char *label) {
|
|
return detail_StartSound(pHandle, label, NULL) == START_SUCCESS;
|
|
}
|
|
bool StartSound(SoundHandle *pHandle, unsigned int id) {
|
|
return detail_StartSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool StartSound(SoundHandle *pHandle, int id) {
|
|
return detail_StartSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
|
|
bool HoldSound(SoundHandle *pHandle, u32 id) {
|
|
return detail_HoldSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool HoldSound(SoundHandle *pHandle, const char *label) {
|
|
return detail_HoldSound(pHandle, label, NULL) == START_SUCCESS;
|
|
}
|
|
bool HoldSound(SoundHandle *pHandle, unsigned int id) {
|
|
return detail_HoldSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool HoldSound(SoundHandle *pHandle, int id) {
|
|
return detail_HoldSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
|
|
bool PrepareSound(SoundHandle *pHandle, u32 id) {
|
|
return detail_PrepareSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool PrepareSound(SoundHandle *pHandle, unsigned int id) {
|
|
return detail_PrepareSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
bool PrepareSound(SoundHandle *pHandle, int id) {
|
|
return detail_PrepareSound(pHandle, id, NULL) == START_SUCCESS;
|
|
}
|
|
|
|
// members
|
|
private:
|
|
/* vtable */ // size 0x04, offset 0x00
|
|
}; // size 0x04
|
|
}} // namespace nw4r::snd
|
|
|
|
#endif // NW4R_SND_SOUND_STARTABLE_H
|