summaryrefslogtreecommitdiff
path: root/src/Z2AudioCS/SpkTable.cpp
diff options
context:
space:
mode:
authorMax Roncace <me@caseif.net>2026-02-20 05:53:27 -0500
committerGitHub <noreply@github.com>2026-02-20 02:53:27 -0800
commit803bc041c7e228e2b7c88afd1121550e51db3f82 (patch)
tree5462e8061bc8a8084db8ea2fc677a0fef5bb16d1 /src/Z2AudioCS/SpkTable.cpp
parent0558bde1e61374f5a1b54453f07fe6cc15525bc1 (diff)
Implement Z2AudioCS (#3103)
Diffstat (limited to 'src/Z2AudioCS/SpkTable.cpp')
-rw-r--r--src/Z2AudioCS/SpkTable.cpp44
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;
+}