summaryrefslogtreecommitdiff
path: root/src/Z2AudioCS/SpkTable.cpp
blob: 51e40413940398ea79ed7ae215252d7bad60c83e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;
}