summaryrefslogtreecommitdiff
path: root/src/d/d_s_actor_data_mng.cpp
blob: d8a34d6981bbc1058d8d9da1b0ff66a8433b5b08 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//
// Generated by dtk
// Translation Unit: d_s_actor_data_mng.cpp
//

#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_s_actor_data_mng.h"
#include "JSystem/JUtility/JUTAssert.h"

/* 800C26D4-800C2704       .text __ct__12dADM_CharTblFv */
dADM_CharTbl::dADM_CharTbl() {
}

dADM_CharTbl::~dADM_CharTbl() {
}

/* 800C2758-800C2844       .text SetData__12dADM_CharTblFUlUlUlUlUlUlUl */
void dADM_CharTbl::SetData(u32 offs, u32 row_num, u32 row_offs, u32 colum_num, u32 colum_offs, u32 dat_size, u32 data_offs) {
    char** pFmt = (char**)row_offs;
    char** pName = (char**)colum_offs;
    u8* pData = (u8*)data_offs;

    u32* row = (u32*)pFmt;
    for (u32 i = 0; i < row_num; i++, row++)
        *row += offs;

    u32* colum = (u32*)pName;
    for (u32 i = 0; i < colum_num; i++, colum++)
        *colum += offs;

    JUT_ASSERT(0x39, dat_size == row_num * colum_num);
    cDT::Set(row_num, pFmt, colum_num, pName, pData);
    SetUpIndex();
}

/* 800C2844-800C2B40       .text SetUpIndex__12dADM_CharTblFv */
void dADM_CharTbl::SetUpIndex() {
    mIndex_ARG = GetFormatIndex("ARG");
    mIndex_N_ITEM[0] = GetFormatIndex("N_ITEM0");
    mIndex_N_ITEM[1] = GetFormatIndex("N_ITEM1");
    mIndex_N_ITEM[2] = GetFormatIndex("N_ITEM2");
    mIndex_N_ITEM[3] = GetFormatIndex("N_ITEM3");
    mIndex_N_ITEM[4] = GetFormatIndex("N_ITEM4");
    mIndex_N_ITEM[5] = GetFormatIndex("N_ITEM5");
    mIndex_N_ITEM[6] = GetFormatIndex("N_ITEM6");
    mIndex_N_ITEM[7] = GetFormatIndex("N_ITEM7");
    mIndex_N_ITEM[8] = GetFormatIndex("N_ITEM8");
    mIndex_N_ITEM[9] = GetFormatIndex("N_ITEM9");
    mIndex_N_ITEM[10] = GetFormatIndex("N_ITEM10");
    mIndex_N_ITEM[11] = GetFormatIndex("N_ITEM11");
    mIndex_N_ITEM[12] = GetFormatIndex("N_ITEM12");
    mIndex_N_ITEM[13] = GetFormatIndex("N_ITEM13");
    mIndex_N_ITEM[14] = GetFormatIndex("N_ITEM14");
    mIndex_N_ITEM[15] = GetFormatIndex("N_ITEM15");
    mIndex_percent = GetFormatIndex("percent");
    mIndex_ITEM[0] = GetFormatIndex("ITEM0");
    mIndex_ITEM[1] = GetFormatIndex("ITEM1");
    mIndex_ITEM[2] = GetFormatIndex("ITEM2");
    mIndex_ITEM[3] = GetFormatIndex("ITEM3");
    mIndex_ITEM[4] = GetFormatIndex("ITEM4");
    mIndex_ITEM[5] = GetFormatIndex("ITEM5");
    mIndex_ITEM[6] = GetFormatIndex("ITEM6");
    mIndex_ITEM[7] = GetFormatIndex("ITEM7");
}

/* 800C2B40-800C2BC8       .text GetNameIndex2__12dADM_CharTblCFPCci */
int dADM_CharTbl::GetNameIndex2(const char* pName, int index) const {
    for (int start = 0; ; start++) {
        start = GetNameIndex(pName, start);
        if (start == -1)
            return -1;

        int inf = GetInf(mIndex_ARG, start);
        if (index == inf)
            return start;
    }
}

/* 800C2BC8-800C2C14       .text __ct__4dADMFv */
dADM::dADM() {
    mBlockCount = 0;
    mpData = NULL;
}

/* 800C2C14-800C2C78       .text __dt__4dADMFv */
dADM::~dADM() {}

/* 800C2C78-800C2CC0       .text FindTag__4dADMFUlPUlPUl */
bool dADM::FindTag(u32 tag, u32* pSize, u32* pOffs) {
    u32 *pData = (u32*)mpData;
    for (s32 i = 0; i < mBlockCount; i++) {
        if (tag == pData[0]) {
            *pSize = pData[1];
            *pOffs = pData[2];
            return true;
        }

        pData += 3;
    }

    return false;
}

/* 800C2CC0-800C2DFC       .text SetData__4dADMFPv */
void dADM::SetData(void* pData) {
    u32 row, rowOffs;
    u32 name, nameOffs;
    u32 dat_size, dataOffs;

    mBlockCount = *((s32*)pData);
    mpData = (u8*)pData + 4;

    u32 *pHeader = (u32*)mpData;
    for (s32 i = 0; i < mBlockCount; i++) {
        pHeader[2] = pHeader[2] + (u32)pData;
        pHeader += 3;
    }

    u32 tag;
    tag = 'ACFN';
    if (!FindTag(tag, &row, &rowOffs)) {
        return;
    }
    tag = 'ACNA';
    if (!FindTag(tag, &name, &nameOffs)) {
        return;
    }
    tag = 'ACDS';
    if (!FindTag(tag, &dat_size, &dataOffs)) {
        return;
    }

    JUT_ASSERT(202, row * name == dat_size);
    mCharTbl.SetData((u32)pData, row, rowOffs, name, nameOffs, dat_size, dataOffs);
}