summaryrefslogtreecommitdiff
path: root/src/Z2AudioLib/Z2AudioArcLoader.cpp
blob: 93343014c572f1d7981b1ef7302394a5b5fb1777 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "Z2AudioLib/Z2AudioArcLoader.h"
#include "JSystem/JAudio2/JAUSectionHeap.h"
#include "JSystem/JAudio2/JAUSoundTable.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "Z2AudioLib/Z2FxLineMgr.h"
#include "m_Do/m_Do_ext.h"

Z2AudioArcLoader::Z2AudioArcLoader(JAUSection* section) : JAUAudioArcLoader(section) {}

bool Z2AudioArcLoader::readCommandMore(u32 command) {
    bool rv = false;
    u32 read = 0;

    switch (command) {
    case 'bfca':
        read = readU32_();
        readBFCA(getContent_(read));
        rv = true;
        break;
    }

    return rv;
}

void Z2AudioArcLoader::readBFCA(const void* addr) {
    {
        JUT_ASSERT(76, addr);

        JKRHeap* heap = JAUSectionHeap::getInstance()->getHeap();
        JUT_ASSERT(78, heap);
        JUT_ASSERT(79, Z2GetFxLineMgr());

        JKRArchive* archive = JKRMountArchive((void*)addr, JKRGetCurrentHeap(), JKRArchive::MOUNT_DIRECTION_TAIL);
        Z2GetFxLineMgr()->initDataArc(archive, heap);
        JKRUnmountArchive(archive);
    }
}

void Z2AudioArcLoader::readBSTN(const void* addr, u32 param_1) {
#if VERSION == VERSION_SHIELD_DEBUG
    {
        JAUSectionHeap* sectionHeap = JASGlobalInstance<JAUSectionHeap>::getInstance();
        JUT_ASSERT(97, sectionHeap);

        JUT_ASSERT(99, sectionHeap->isOpen());
        JUT_ASSERT(100, sectionHeap->isBuilding());
        JUT_ASSERT(101, addr);

        JUT_ASSERT(103, sectionHeap->getSectionHeapData().soundNameTable == 0);

        JKRHeap* heap = JKRHeap::getCurrentHeap();
        JKRHeap* gameHeap = (JKRHeap*)mDoExt_getGameHeap();
        JKRSetCurrentHeap(gameHeap);

        u8* bstnDst = (u8*)addr;
        if (param_1 != 0) {
            bstnDst = new (gameHeap, 4) u8[param_1];
            if (bstnDst != NULL) {
                memcpy(bstnDst, addr, param_1);
            }

            JUT_ASSERT(122, bstnDst);
        }

        JAUSoundNameTable* soundNameTable = new (gameHeap, 0) JAUSoundNameTable(true);
        JUT_ASSERT(125, soundNameTable);

        soundNameTable->init(bstnDst);

        JAUSectionHeap::TSectionHeapData& sectionHeapData = (JAUSectionHeap::TSectionHeapData&)sectionHeap->getSectionHeapData();
        sectionHeapData.soundNameTable = soundNameTable;

        JAUSection::TSectionData& sectionData = (JAUSection::TSectionData&)sectionHeap->getSectionData();
        sectionData.mBstnDst = bstnDst;

        JKRSetCurrentHeap(heap);
    }
#endif
}