Shipwright/soh/soh/Enhancements/randomizer/3drando/sound_effects.hpp

76 lines
1.9 KiB
C++

#pragma once
#include <array>
#include <vector>
#include <stdint.h>
#define SFX_BASE 0x1000001
#define SFX_COUNT 1388
#define SFX_COUNT_TRIMMED (1388 - 233)
namespace SFX {
typedef enum {
// Movement
SEQ_WALK,
SEQ_WALK_LOUD,
SEQ_JUMP,
SEQ_LAND,
SEQ_SLIP,
SEQ_SLIP_LOOP,
SEQ_BOUND,
SEQ_CRAWL,
SEQ_MOVE_LOOP,
// Combat
SEQ_WEAPON_SWING,
SEQ_WEAPON_HIT,
SEQ_THROW_LOOP,
SEQ_PROJECTILE_SHOT,
SEQ_MAGIC_CHARGE_LOOP,
SEQ_EXPLOSION,
// Monsters
SEQ_MONSTER_CRY_SHORT,
SEQ_MONSTER_CRY_MEDIUM,
SEQ_MONSTER_CRY_LONG,
SEQ_MONSTER_DAMAGED,
SEQ_MONSTER_DEAD,
SEQ_MONSTER_ATTACK,
// Voice
SEQ_VOICE_SHORT,
SEQ_VOICE_MEDIUM,
SEQ_VOICE_LONG,
// Etc
SEQ_DOOR_OPEN,
SEQ_DOOR_CLOSE,
SEQ_AMBIENCE,
// Meta
SEQTYPE_COUNT,
SEQ_NOCAT = 0xFE, // For sound effects that doesn't fit into any category
SEQ_NOSHUFFLE = 0xFF, // For DUMMYs and YOBIs that are either blank or duplicates, and for system sound effects
} SeqType;
typedef struct {
/// Contains the amount of sound effects in each group, excluding SEQ_NOCAT and SEQ_NOSHUFFLE.
uint16_t rSeqMaxes[SEQTYPE_COUNT];
/// Contains the original list of SeqTypes.
/// Can be used to check which type a sound effect is.
SeqType rSeqTypesSFX[SFX_COUNT];
/// Contains all sound effects.
uint32_t rSFXOverrides_All[SFX_COUNT];
/// Contains all sound effects excluding SEQ_NOSHUFFLE.
uint32_t rSFXOverrides_AllTrimmed[SFX_COUNT_TRIMMED];
/// Contains all sound effects grouped into their SeqTypes.
/// The size of the second dimension should be at least the amount in the largest group.
uint32_t rSFXOverrides_Types[SEQTYPE_COUNT][100];
} SFXData;
extern const std::array<SeqType, SFX_COUNT> seqTypesSFX;
const SFXData& GetSFXData();
void InitSFXRandomizer();
void ShuffleSequences(bool shuffleCategorically);
} // namespace SFX