summaryrefslogtreecommitdiff
path: root/src/Z2AudioCS/SpkTable.cpp
diff options
context:
space:
mode:
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;
+}