| 105 | } |
| 106 | |
| 107 | void 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); |