MCPcopy Create free account
hub / github.com/doldecomp/mkdd / load_jpc

Method load_jpc

libs/JSystem/JParticle/JPAResourceLoader.cpp:107–198  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105}
106
107void JPAResourceLoader::load_jpc(const u8 *p1, JPAResourceManager *p_res_mgr)
108{
109 JKRHeap *heap = p_res_mgr->pHeap;
110 p_res_mgr->resMaxNum = GetTypeFromByteStream(p1, u16, 0x08);
111 p_res_mgr->texMaxNum = GetTypeFromByteStream(p1, u16, 0x0A);
112 p_res_mgr->pResAry = new (heap, 0) JPAResource*[p_res_mgr->resMaxNum];
113 p_res_mgr->pTexAry = new (heap, 0) JPATexture*[p_res_mgr->texMaxNum];
114#line 199
115 JUT_ASSERT((p_res_mgr->pResAry != 0) && (p_res_mgr->pTexAry != 0))
116
117 int resourceOffset = 0x10;
118
119 for (int i = 0; i < GetTypeFromByteStream(p1, u16, 0x08); i++) {
120 const u8 *resourceData = (p1 + resourceOffset);
121
122#line 210
123 JPAResource *p_res = new (heap, 0) JPAResource();
124 JUT_ASSERT(p_res != 0)
125
126#line 214
127 p_res->fldNum = resourceData[4];
128 p_res->ppFld = (p_res->fldNum != 0 ? new (heap, 0) JPAFieldBlock*[p_res->fldNum] : nullptr);
129 JUT_ASSERT((p_res->ppFld != 0) || (p_res->fldNum == 0));
130
131#line 219
132 p_res->keyNum = resourceData[5];
133 p_res->ppKey = (p_res->keyNum != 0 ? new (heap, 0) JPAKeyBlock*[p_res->keyNum] : nullptr);
134 JUT_ASSERT((p_res->ppKey != 0) || (p_res->keyNum == 0));
135
136 p_res->texNum = resourceData[6];
137 p_res->texIdxTbl = nullptr;
138 p_res->mUsrIdx = *(u16*)resourceData;
139 resourceOffset += 8;
140 int fld_no = 0;
141 int key_no = 0;
142 for (int j = 0; j < GetTypeFromByteStream(resourceData, u16, 2); j++) {
143 u32 type = GetTypeFromByteStream((p1 + resourceOffset), u32, 0);
144 int blockLength = GetTypeFromByteStream(p1 + resourceOffset, int, 4);
145
146 switch (type) {
147 case 'FLD1':
148#line 243
149 p_res->ppFld[fld_no] = new (heap, 0) JPAFieldBlock((p1 + resourceOffset), heap);
150 JUT_ASSERT(p_res->ppFld[fld_no] != 0);
151 fld_no++;
152 break;
153 case 'KFA1':
154 p_res->ppKey[key_no] = new (heap, 0) JPAKeyBlock((p1 + resourceOffset));
155 JUT_ASSERT(p_res->ppKey[key_no] != 0);
156 key_no++;
157 break;
158 case 'BEM1':
159 p_res->pDyn = new (heap, 0) JPADynamicsBlock((p1 + resourceOffset));
160 JUT_ASSERT(p_res->pDyn != 0);
161 break;
162 case 'BSP1':
163 p_res->pBsp = new (heap, 0) JPABaseShape((p1 + resourceOffset), heap);
164 JUT_ASSERT(p_res->pBsp != 0);

Callers

nothing calls this directly

Calls 3

registResMethod · 0.80
registTexMethod · 0.80
initMethod · 0.45

Tested by

no test coverage detected