diff options
| author | Max Roncace <me@caseif.net> | 2026-02-20 05:53:27 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-20 02:53:27 -0800 |
| commit | 803bc041c7e228e2b7c88afd1121550e51db3f82 (patch) | |
| tree | 5462e8061bc8a8084db8ea2fc677a0fef5bb16d1 /src/Z2AudioCS/SpkTable.cpp | |
| parent | 0558bde1e61374f5a1b54453f07fe6cc15525bc1 (diff) | |
Implement Z2AudioCS (#3103)
Diffstat (limited to 'src/Z2AudioCS/SpkTable.cpp')
| -rw-r--r-- | src/Z2AudioCS/SpkTable.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Z2AudioCS/SpkTable.cpp b/src/Z2AudioCS/SpkTable.cpp new file mode 100644 index 0000000000..51e4041394 --- /dev/null +++ b/src/Z2AudioCS/SpkTable.cpp @@ -0,0 +1,44 @@ +#include "Z2AudioCS/SpkTable.h" + +SpkTable::SpkTable(void) { + mIsInitialized = false; + mNumOfSound = 0; + mEntryOffset = 0; + mDataOffsets = 0; +} + +struct SpkTableHeader { + s32 resourceCount; + s32 entryOff; + s32 dataOffsetsStartOff; + BOOL isDataOffsetsInitialized; +}; + +void SpkTable::setResource(void* res) { + mIsInitialized = false; + + s32* cursor = (s32*)res; + + s32 resourceCount = *cursor++; + s32 entryOff = *cursor++; + s32 dataOffsetsStartOff = *cursor++; + s32* pIsDataOffsetsInitialized = cursor; + BOOL isDataOffsetsInitialized = *cursor++; + + mNumOfSound = resourceCount; + + s32 entryOffset = (s32)res + entryOff; + mEntryOffset = entryOffset; + s32* dataOffsets = (s32*)((s32)res + dataOffsetsStartOff); + if (!isDataOffsetsInitialized) { + for (s32 i = 0; i < mNumOfSound; i++) { + dataOffsets[i] += (s32)res; + } + } + + s32* dataOffsetsCopy = dataOffsets; + mDataOffsets = dataOffsetsCopy; + *pIsDataOffsetsInitialized = TRUE; + + mIsInitialized = true; +} |
