mirror of
https://github.com/zeldaret/ss
synced 2026-06-12 05:27:23 -04:00
108 lines
2.7 KiB
C++
108 lines
2.7 KiB
C++
#ifndef NW4R_SND_SEQ_FILE_H
|
|
#define NW4R_SND_SEQ_FILE_H
|
|
|
|
/*******************************************************************************
|
|
* headers
|
|
*/
|
|
|
|
#include "common.h"
|
|
|
|
#include "nw4r/snd/snd_Util.h" // Util::Table
|
|
|
|
#include "nw4r/ut/ut_binaryFileFormat.h"
|
|
|
|
/*******************************************************************************
|
|
* types
|
|
*/
|
|
|
|
namespace nw4r { namespace snd { namespace detail
|
|
{
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2d23df (yes, really!)
|
|
struct SeqFile
|
|
{
|
|
/* Header */
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2ce38c
|
|
struct Header
|
|
{
|
|
ut::BinaryFileHeader fileHeader; // size 0x10, offset 0x00
|
|
u32 dataBlockOffset; // size 0x04, offset 0x10
|
|
u32 dataBlockSize; // size 0x04, offset 0x14
|
|
u32 labelBlockOffset; // size 0x04, offset 0x18
|
|
u32 labelBlockSize; // size 0x04, offset 0x1c
|
|
}; // size 0x20
|
|
|
|
/* LabelBlock */
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2ce87c
|
|
struct LabelInfo
|
|
{
|
|
u32 offset; // size 0x04, offset 0x00
|
|
u32 nameLen; // size 0x04, offset 0x04
|
|
char name[1]; // size 0x01, offset 0x08
|
|
/* 3 bytes padding */
|
|
}; // size 0x0c
|
|
|
|
static u32 const SIGNATURE_LABEL_BLOCK;
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2ce7dc
|
|
struct LabelBlock
|
|
{
|
|
ut::BinaryBlockHeader blockHeader; // size 0x08, offset 0x00
|
|
Util::Table<u32> labelInfoTable; // size 0x08, offset 0x08
|
|
}; // size 0x10
|
|
|
|
/* DataBlock */
|
|
|
|
static u32 const SIGNATURE_DATA_BLOCK =
|
|
NW4R_FOUR_BYTE('D', 'A', 'T', 'A');
|
|
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2ce491
|
|
struct DataBlock
|
|
{
|
|
ut::BinaryBlockHeader blockHeader; // size 0x08, offset 0x00
|
|
u32 baseOffset; // size 0x04, offset 0x08
|
|
}; // size 0x0c
|
|
|
|
/* SeqFile */
|
|
|
|
static u32 const SIGNATURE_FILE =
|
|
NW4R_FOUR_BYTE('R', 'S', 'E', 'Q');
|
|
static int const FILE_VERSION = NW4R_FILE_VERSION(1, 2);
|
|
}; // "namespace" SeqFile
|
|
}}} // namespace nw4r::snd::detail
|
|
|
|
/*******************************************************************************
|
|
* classes and functions
|
|
*/
|
|
|
|
namespace nw4r { namespace snd { namespace detail
|
|
{
|
|
// [R89JEL]:/bin/RVL/Debug/mainD.elf:.debug::0x2ce50a
|
|
class SeqFileReader
|
|
{
|
|
// methods
|
|
public:
|
|
// cdtors
|
|
SeqFileReader(void const *seqData);
|
|
|
|
// methods
|
|
void const *GetBaseAddress() const;
|
|
|
|
bool IsValidFileHeader(void const *seqData);
|
|
|
|
bool ReadOffsetByLabel(char const *labelName, u32 *offsetPtr) const;
|
|
|
|
// static members
|
|
public:
|
|
static u16 const SUPPORTED_FILE_VERSION = NW4R_FILE_VERSION(1, 0);
|
|
|
|
// members
|
|
private:
|
|
SeqFile::Header const *mHeader; // size 0x04, offset 0x00
|
|
SeqFile::DataBlock const *mDataBlock; // size 0x04, offset 0x04
|
|
}; // size 0x08
|
|
}}} // namespace nw4r::snd::detail
|
|
|
|
#endif // NW4R_SND_SEQ_FILE_H
|