diff options
| author | Caroline Madsen <69010899+randomsalience@users.noreply.github.com> | 2024-11-01 16:46:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-01 13:46:27 -0700 |
| commit | 21cb60624a6cb0c518f85af7688bf618de252650 (patch) | |
| tree | 942030fd3bf1ee4f28a0542f9fdf9b909c5d6fa1 /src/JSystem/J3DGraphLoader | |
| parent | 09423b6fa00029d0325cbade59c78ae42f1014de (diff) | |
J3DMatBlock, J3DMaterialFactory work (#2233)
Diffstat (limited to 'src/JSystem/J3DGraphLoader')
| -rw-r--r-- | src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp | 532 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp | 186 | ||||
| -rw-r--r-- | src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp | 20 |
3 files changed, 225 insertions, 513 deletions
diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp index a976272e70..64db73e028 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp @@ -406,7 +406,9 @@ J3DMaterial* J3DMaterialFactory::create(J3DMaterial* i_material, MaterialType i_ /* 80330440-80330D84 32AD80 0944+00 1/1 0/0 0/0 .text * createNormalMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ -#ifdef NONMATCHING +// NONMATCHING. The call to setFog does not match because it uses the version that takes a J3DFog. +// If we switch to the version that takes a J3DFog* that part matches, except the vtable index is wrong. +// Also regalloc issues J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, int i_idx, u32 i_flags) const { if (mpDisplayListInit != NULL) { @@ -417,10 +419,7 @@ J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, i if (stages > tev_stage_num) { tev_stage_num = stages; } - u32 u1 = 8; - if (tev_stage_num <= 8) { - u1 = tev_stage_num; - } + u32 u1 = tev_stage_num <= 8 ? tev_stage_num : 8; u32 texgens = countTexGens(i_idx); u32 texgen_flag = texgens > 4 ? 0 : getMdlDataFlag_TexGenFlag(i_flags); u32 color_flag = getMdlDataFlag_ColorFlag(i_flags); @@ -440,7 +439,7 @@ J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, i i_material->mColorBlock->setCullMode(newCullMode(i_idx)); i_material->mTexGenBlock->setTexGenNum(newTexGenNum(i_idx)); i_material->mTexGenBlock->setNBTScale(newNBTScale(i_idx)); - i_material->mPEBlock->setFog(newFog(i_idx)); + i_material->mPEBlock->setFog(&newFog(i_idx)); i_material->mPEBlock->setAlphaComp(newAlphaComp(i_idx)); i_material->mPEBlock->setBlend(newBlend(i_idx)); i_material->mPEBlock->setZMode(newZMode(i_idx)); @@ -479,7 +478,8 @@ J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, i i_material->mColorBlock->setMatColor(i, newMatColor(i_idx, i)); } for (u8 i = 0; i < 4; i++) { - i_material->mColorBlock->setColorChan(i, newColorChan(i_idx, i)); + J3DColorChan color_chan = newColorChan(i_idx, i); + i_material->mColorBlock->setColorChan(i, color_chan); } for (u8 i = 0; i < texgens; i++) { J3DTexCoord tex_coord = newTexCoord(i_idx, i); @@ -513,7 +513,7 @@ J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, i i_material->mIndBlock->setIndTexOrder(i, newIndTexOrder(i_idx, i)); } for (u8 i = 0; i < ind_tex_stage_num; i++) { - i_material->mIndBlock->setIndTexCoordScale(i, newIndTexCoordScale(i_idx, i)); + i_material->mIndBlock->setIndTexCoordScale(i, &newIndTexCoordScale(i_idx, i)); } for (u8 i = 0; i < tev_stage_num; i++) { i_material->mTevBlock->setIndTevStage(i, newIndTevStage(i_idx, i)); @@ -521,197 +521,123 @@ J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* i_material, i } return i_material; } -#else -J3DMaterial* J3DMaterialFactory::createNormalMaterial(J3DMaterial* param_0, int param_1, - u32 param_2) const { - // NONMATCHING -} -#endif /* 80330D84-8033168C 32B6C4 0908+00 1/1 0/0 0/0 .text * createPatchedMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ -J3DMaterial* J3DMaterialFactory::createPatchedMaterial(J3DMaterial* param_0, int param_1, - u32 param_2) const { - // NONMATCHING +// NONMATCHING same fog problem as createNormalMaterial +J3DMaterial* J3DMaterialFactory::createPatchedMaterial(J3DMaterial* i_material, int i_idx, + u32 i_flags) const { + if (i_material == NULL) { + i_material = new J3DPatchedMaterial(); + } + bool bVar1 = i_flags & 0x3000000 ? true : false; + i_material->mColorBlock = J3DMaterial::createColorBlock(0x40000000); + i_material->mTexGenBlock = new J3DTexGenBlockPatched(); + i_material->mTevBlock = new J3DTevBlockPatched(); + i_material->mIndBlock = J3DMaterial::createIndBlock(bVar1); + i_material->mPEBlock = J3DMaterial::createPEBlock(0x10000000, getMaterialMode(i_idx)); + i_material->mIndex = i_idx; + i_material->mMaterialMode = getMaterialMode(i_idx); + i_material->mTevBlock->setTevStageNum(newTevStageNum(i_idx)); + i_material->mColorBlock->setColorChanNum(newColorChanNum(i_idx)); + i_material->mColorBlock->setCullMode(newCullMode(i_idx)); + i_material->mPEBlock->setFog(&newFog(i_idx)); + i_material->mPEBlock->setAlphaComp(newAlphaComp(i_idx)); + i_material->mPEBlock->setBlend(newBlend(i_idx)); + i_material->mPEBlock->setZMode(newZMode(i_idx)); + i_material->mPEBlock->setZCompLoc(newZCompLoc(i_idx)); + i_material->mPEBlock->setDither(newDither(i_idx)); + u8 tev_stage_num = i_material->getTevStageNum(); + for (u8 i = 0; i < 8; i++) { + i_material->mTevBlock->setTexNo(i, newTexNo(i_idx, i)); + } + for (u8 i = 0; i < tev_stage_num; i++) { + i_material->mTevBlock->setTevOrder(i, newTevOrder(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + i_material->mTevBlock->setTevKColor(i, newTevKColor(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + i_material->mTevBlock->setTevColor(i, newTevColor(i_idx, i)); + } + for (u8 i = 0; i < tev_stage_num; i++) { + J3DMaterialInitData* material_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + i_material->mTevBlock->setTevStage(i, newTevStage(i_idx, i)); + if (material_init_data->mTevSwapModeIdx[i] != 0xffff) { + i_material->mTevBlock->getTevStage(i)->setTexSel( + mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mTexSel); + i_material->mTevBlock->getTevStage(i)->setRasSel( + mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mRasSel); + } + } + J3DMaterialInitData* init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + for (u8 i = 0; i < tev_stage_num; i++) { + if (init_data->mTevKColorSel[i] != 0xff) { + i_material->mTevBlock->setTevKColorSel(i, init_data->mTevKColorSel[i]); + } else { + i_material->mTevBlock->setTevKColorSel(i, 0xC); + } + } + for (u8 i = 0; i < 2; i++) { + i_material->mColorBlock->setMatColor(i, newMatColor(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + J3DColorChan color_chan = newColorChan(i_idx, i); + i_material->mColorBlock->setColorChan(i, color_chan); + } + u32 texgens = countTexGens(i_idx); + i_material->mTexGenBlock->setTexGenNum(newTexGenNum(i_idx)); + for (u8 i = 0; i < 8; i++) { + i_material->mTexGenBlock->setTexMtx(i, newTexMtx(i_idx, i)); + } + for (u8 i = 0; i < texgens; i++) { + J3DTexCoord tex_coord = newTexCoord(i_idx, i); + i_material->mTexGenBlock->setTexCoord(i, &tex_coord); + } + if (bVar1 && mpIndInitData != NULL) { + u8 ind_tex_stage_num = newIndTexStageNum(i_idx); + i_material->mIndBlock->setIndTexStageNum(newIndTexStageNum(i_idx)); + for (u8 i = 0; i < ind_tex_stage_num; i++) { + i_material->mIndBlock->setIndTexMtx(i, newIndTexMtx(i_idx, i)); + } + for (u8 i = 0; i < ind_tex_stage_num; i++) { + i_material->mIndBlock->setIndTexOrder(i, newIndTexOrder(i_idx, i)); + } + for (u8 i = 0; i < ind_tex_stage_num; i++) { + i_material->mIndBlock->setIndTexCoordScale(i, &newIndTexCoordScale(i_idx, i)); + } + for (u8 i = 0; i < tev_stage_num; i++) { + i_material->mTevBlock->setIndTevStage(i, newIndTevStage(i_idx, i)); + } + } + return i_material; } /* 8033168C-803317D4 32BFCC 0148+00 0/0 1/1 0/0 .text * modifyPatchedCurrentMtx__18J3DMaterialFactoryCFP11J3DMateriali */ -void J3DMaterialFactory::modifyPatchedCurrentMtx(J3DMaterial* param_0, int param_1) const { - // NONMATCHING +// NONMATCHING problem with setCurrentTexMtx +void J3DMaterialFactory::modifyPatchedCurrentMtx(J3DMaterial* i_material, int i_idx) const { + J3DTexCoord coord[8]; + u32 tex_gens = countTexGens(i_idx); + for (u8 i = 0; i < tex_gens; i++) { + coord[i] = newTexCoord(i_idx, i); + } + J3DCurrentMtx currentMtx; + currentMtx.setCurrentTexMtx( + coord[0].getTexGenMtx(), + coord[1].getTexGenMtx(), + coord[2].getTexGenMtx(), + coord[3].getTexGenMtx(), + coord[4].getTexGenMtx(), + coord[5].getTexGenMtx(), + coord[6].getTexGenMtx(), + coord[7].getTexGenMtx() + ); + i_material->mCurrentMtx = currentMtx; } -/* 803CEE90-803CEF0C 02BFB0 007C+00 2/2 0/0 0/0 .data __vt__14J3DPEBlockNull */ -SECTION_DATA extern void* __vt__14J3DPEBlockNull[31] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)reset__10J3DPEBlockFP10J3DPEBlock, - (void*)load__14J3DPEBlockNullFv, - (void*)patch__10J3DPEBlockFv, - (void*)diff__10J3DPEBlockFUl, - (void*)diffFog__10J3DPEBlockFv, - (void*)diffBlend__10J3DPEBlockFv, - (void*)countDLSize__10J3DPEBlockFv, - (void*)getType__14J3DPEBlockNullFv, - (void*)setFog__10J3DPEBlockF6J3DFog, - (void*)setFog__10J3DPEBlockFP6J3DFog, - (void*)getFog__10J3DPEBlockFv, - (void*)setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp, - (void*)setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp, - (void*)getAlphaComp__10J3DPEBlockFv, - (void*)setBlend__10J3DPEBlockFPC8J3DBlend, - (void*)setBlend__10J3DPEBlockFRC8J3DBlend, - (void*)getBlend__10J3DPEBlockFv, - (void*)setZMode__10J3DPEBlockFPC8J3DZMode, - (void*)setZMode__10J3DPEBlockF8J3DZMode, - (void*)getZMode__10J3DPEBlockFv, - (void*)setZCompLoc__10J3DPEBlockFPCUc, - (void*)setZCompLoc__10J3DPEBlockFUc, - (void*)getZCompLoc__10J3DPEBlockCFv, - (void*)setDither__10J3DPEBlockFPCUc, - (void*)setDither__10J3DPEBlockFUc, - (void*)getDither__10J3DPEBlockCFv, - (void*)getFogOffset__10J3DPEBlockCFv, - (void*)setFogOffset__10J3DPEBlockFUl, - (void*)__dt__14J3DPEBlockNullFv, -}; - -/* 803CEF0C-803CEFE8 02C02C 00DC+00 2/2 0/0 0/0 .data __vt__15J3DTevBlockNull */ -SECTION_DATA extern void* __vt__15J3DTevBlockNull[55] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)reset__15J3DTevBlockNullFP11J3DTevBlock, - (void*)load__11J3DTevBlockFv, - (void*)diff__11J3DTevBlockFUl, - (void*)diffTexNo__11J3DTevBlockFv, - (void*)diffTevReg__11J3DTevBlockFv, - (void*)diffTexCoordScale__11J3DTevBlockFv, - (void*)diffTevStage__11J3DTevBlockFv, - (void*)diffTevStageIndirect__11J3DTevBlockFv, - (void*)patch__11J3DTevBlockFv, - (void*)patchTexNo__11J3DTevBlockFv, - (void*)patchTevReg__11J3DTevBlockFv, - (void*)patchTexNoAndTexCoordScale__11J3DTevBlockFv, - (void*)ptrToIndex__15J3DTevBlockNullFv, - (void*)indexToPtr__15J3DTevBlockNullFv, - (void*)getType__15J3DTevBlockNullFv, - (void*)countDLSize__11J3DTevBlockFv, - (void*)setTexNo__11J3DTevBlockFUlPCUs, - (void*)setTexNo__11J3DTevBlockFUlUs, - (void*)getTexNo__11J3DTevBlockCFUl, - (void*)setTevOrder__11J3DTevBlockFUlPC11J3DTevOrder, - (void*)setTevOrder__11J3DTevBlockFUl11J3DTevOrder, - (void*)getTevOrder__11J3DTevBlockFUl, - (void*)setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10, - (void*)setTevColor__11J3DTevBlockFUl13J3DGXColorS10, - (void*)getTevColor__11J3DTevBlockFUl, - (void*)setTevKColor__11J3DTevBlockFUlPC10J3DGXColor, - (void*)setTevKColor__11J3DTevBlockFUl10J3DGXColor, - (void*)getTevKColor__11J3DTevBlockFUl, - (void*)setTevKColorSel__11J3DTevBlockFUlPCUc, - (void*)setTevKColorSel__11J3DTevBlockFUlUc, - (void*)getTevKColorSel__11J3DTevBlockFUl, - (void*)setTevKAlphaSel__11J3DTevBlockFUlPCUc, - (void*)setTevKAlphaSel__11J3DTevBlockFUlUc, - (void*)getTevKAlphaSel__11J3DTevBlockFUl, - (void*)setTevStageNum__11J3DTevBlockFPCUc, - (void*)setTevStageNum__11J3DTevBlockFUc, - (void*)getTevStageNum__11J3DTevBlockCFv, - (void*)setTevStage__11J3DTevBlockFUlPC11J3DTevStage, - (void*)setTevStage__11J3DTevBlockFUl11J3DTevStage, - (void*)getTevStage__11J3DTevBlockFUl, - (void*)setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo, - (void*)setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo, - (void*)setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable, - (void*)setTevSwapModeTable__11J3DTevBlockFUl19J3DTevSwapModeTable, - (void*)getTevSwapModeTable__11J3DTevBlockFUl, - (void*)setIndTevStage__11J3DTevBlockFUlPC14J3DIndTevStage, - (void*)setIndTevStage__11J3DTevBlockFUl14J3DIndTevStage, - (void*)getIndTevStage__11J3DTevBlockFUl, - (void*)getTexNoOffset__11J3DTevBlockCFv, - (void*)getTevRegOffset__11J3DTevBlockCFv, - (void*)setTexNoOffset__11J3DTevBlockFUl, - (void*)setTevRegOffset__11J3DTevBlockFUl, - (void*)__dt__15J3DTevBlockNullFv, -}; - -/* 803CEFE8-803CF054 02C108 006C+00 2/2 0/0 0/0 .data __vt__18J3DTexGenBlockNull */ -SECTION_DATA extern void* __vt__18J3DTexGenBlockNull[27] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)reset__14J3DTexGenBlockFP14J3DTexGenBlock, - (void*)calc__18J3DTexGenBlockNullFPA4_Cf, - (void*)calcWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf, - (void*)calcPostTexMtx__18J3DTexGenBlockNullFPA4_Cf, - (void*)calcPostTexMtxWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf, - (void*)load__18J3DTexGenBlockNullFv, - (void*)patch__18J3DTexGenBlockNullFv, - (void*)diff__18J3DTexGenBlockNullFUl, - (void*)diffTexMtx__18J3DTexGenBlockNullFv, - (void*)diffTexGen__18J3DTexGenBlockNullFv, - (void*)countDLSize__14J3DTexGenBlockFv, - (void*)getType__18J3DTexGenBlockNullFv, - (void*)setTexGenNum__14J3DTexGenBlockFPCUl, - (void*)setTexGenNum__14J3DTexGenBlockFUl, - (void*)getTexGenNum__14J3DTexGenBlockCFv, - (void*)setTexCoord__14J3DTexGenBlockFUlPC11J3DTexCoord, - (void*)getTexCoord__14J3DTexGenBlockFUl, - (void*)setTexMtx__14J3DTexGenBlockFUlP9J3DTexMtx, - (void*)getTexMtx__14J3DTexGenBlockFUl, - (void*)setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale, - (void*)setNBTScale__14J3DTexGenBlockF11J3DNBTScale, - (void*)getNBTScale__14J3DTexGenBlockFv, - (void*)getTexMtxOffset__14J3DTexGenBlockCFv, - (void*)setTexMtxOffset__14J3DTexGenBlockFUl, - (void*)__dt__18J3DTexGenBlockNullFv, -}; - -/* 803CF054-803CF0E8 02C174 0090+04 2/2 0/0 0/0 .data __vt__17J3DColorBlockNull */ -SECTION_DATA extern void* __vt__17J3DColorBlockNull[36 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)load__13J3DColorBlockFv, - (void*)reset__13J3DColorBlockFP13J3DColorBlock, - (void*)patch__13J3DColorBlockFv, - (void*)patchMatColor__13J3DColorBlockFv, - (void*)patchLight__13J3DColorBlockFv, - (void*)diff__13J3DColorBlockFUl, - (void*)diffAmbColor__13J3DColorBlockFv, - (void*)diffMatColor__13J3DColorBlockFv, - (void*)diffColorChan__13J3DColorBlockFv, - (void*)diffLightObj__13J3DColorBlockFUl, - (void*)countDLSize__13J3DColorBlockFv, - (void*)getType__17J3DColorBlockNullFv, - (void*)setMatColor__13J3DColorBlockFUlPC10J3DGXColor, - (void*)setMatColor__13J3DColorBlockFUl10J3DGXColor, - (void*)getMatColor__13J3DColorBlockFUl, - (void*)setAmbColor__13J3DColorBlockFUlPC10J3DGXColor, - (void*)setAmbColor__13J3DColorBlockFUl10J3DGXColor, - (void*)getAmbColor__13J3DColorBlockFUl, - (void*)setColorChanNum__13J3DColorBlockFUc, - (void*)setColorChanNum__13J3DColorBlockFPCUc, - (void*)getColorChanNum__13J3DColorBlockCFv, - (void*)setColorChan__13J3DColorBlockFUlRC12J3DColorChan, - (void*)setColorChan__13J3DColorBlockFUlPC12J3DColorChan, - (void*)getColorChan__13J3DColorBlockFUl, - (void*)setLight__13J3DColorBlockFUlP11J3DLightObj, - (void*)getLight__13J3DColorBlockFUl, - (void*)setCullMode__13J3DColorBlockFPCUc, - (void*)setCullMode__13J3DColorBlockFUc, - (void*)getCullMode__13J3DColorBlockCFv, - (void*)getMatColorOffset__13J3DColorBlockCFv, - (void*)getColorChanOffset__13J3DColorBlockCFv, - (void*)setMatColorOffset__13J3DColorBlockFUl, - (void*)setColorChanOffset__13J3DColorBlockFUl, - (void*)__dt__17J3DColorBlockNullFv, - /* padding */ - NULL, -}; - /* 803317D4-80331A7C 32C114 02A8+00 2/2 0/0 0/0 .text * createLockedMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ -#ifdef NONMATCHING -// matches but makes the J3DMaterial destructor appear in the wrong place J3DMaterial* J3DMaterialFactory::createLockedMaterial(J3DMaterial* i_material, int i_idx, u32 i_flags) const { if (i_material == NULL) { @@ -741,12 +667,6 @@ J3DMaterial* J3DMaterialFactory::createLockedMaterial(J3DMaterial* i_material, i } return i_material; } -#else -J3DMaterial* J3DMaterialFactory::createLockedMaterial(J3DMaterial* param_0, int param_1, - u32 param_2) const { - // NONMATCHING -} -#endif /* 80331A7C-80331AFC 32C3BC 0080+00 0/0 4/4 0/0 .text * calcSize__18J3DMaterialFactoryCFP11J3DMaterialQ218J3DMaterialFactory12MaterialTypeiUl */ @@ -769,8 +689,7 @@ u32 J3DMaterialFactory::calcSize(J3DMaterial* i_material, J3DMaterialFactory::Ma /* 80331AFC-80331C30 32C43C 0134+00 1/1 0/0 0/0 .text * calcSizeNormalMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ -#ifdef NONMATCHING -// regalloc +// NONMATCHING regalloc u32 J3DMaterialFactory::calcSizeNormalMaterial(J3DMaterial* i_material, int i_idx, u32 i_flags) const { u32 size = 0; @@ -779,12 +698,11 @@ u32 J3DMaterialFactory::calcSizeNormalMaterial(J3DMaterial* i_material, int i_id } u32 stages = countStages(i_idx); - // u32 tev_stage_num = getMdlDataFlag_TevStageNum(i_flags); - u32 tev_stage_num = (i_flags >> 0x10) & 0x1f; + u32 tev_stage_num = getMdlDataFlag_TevStageNum(i_flags); if (stages > tev_stage_num) { tev_stage_num = stages; } - u32 tex_gens = countTexGens(i_flags); + u32 tex_gens = countTexGens(i_idx); u32 tex_gen_flag = tex_gens > 4 ? getMdlDataFlag_TexGenFlag(0) : getMdlDataFlag_TexGenFlag(i_flags); u32 color_block_flag = getMdlDataFlag_ColorFlag(i_flags); @@ -806,23 +724,16 @@ u32 J3DMaterialFactory::calcSizeNormalMaterial(J3DMaterial* i_material, int i_id } return size; } -#else -u32 J3DMaterialFactory::calcSizeNormalMaterial(J3DMaterial* param_0, int param_1, - u32 param_2) const { - // NONMATCHING -} -#endif /* 80331C30-80331D00 32C570 00D0+00 1/1 0/0 0/0 .text * calcSizePatchedMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ -#ifdef NONMATCHING u32 J3DMaterialFactory::calcSizePatchedMaterial(J3DMaterial* i_material, int i_idx, u32 i_flags) const { u32 size = 0; if (i_material == NULL) { size = sizeof(J3DPatchedMaterial); } - int ind_flag = (i_flags & 0x3000000) != 0; + u8 ind_flag = (i_flags & 0x3000000) != 0 ? 1 : 0; size += J3DMaterial::calcSizeColorBlock(0x40000000); size += 0x134; // TODO what is this size += J3DMaterial::calcSizeIndBlock(ind_flag); @@ -835,12 +746,6 @@ u32 J3DMaterialFactory::calcSizePatchedMaterial(J3DMaterial* i_material, int i_i } return size; } -#else -u32 J3DMaterialFactory::calcSizePatchedMaterial(J3DMaterial* param_0, int param_1, - u32 param_2) const { - // NONMATCHING -} -#endif /* 80331D00-80331D18 32C640 0018+00 2/2 0/0 0/0 .text * calcSizeLockedMaterial__18J3DMaterialFactoryCFP11J3DMaterialiUl */ @@ -855,16 +760,11 @@ u32 J3DMaterialFactory::calcSizeLockedMaterial(J3DMaterial* i_material, int i_id } /* 804564A8-804564AC 004AA8 0004+00 1/1 0/0 0/0 .sdata2 @1691 */ -#ifdef NONMATCHING static GXColor const defaultMatColor = {0xff, 0xff, 0xff, 0xff}; -#else -SECTION_SDATA2 static u32 lit_1691 = 0xFFFFFFFF; -#endif /* 80331D18-80331D74 32C658 005C+00 2/2 0/0 0/0 .text newMatColor__18J3DMaterialFactoryCFii */ -#ifdef NONMATCHING J3DGXColor J3DMaterialFactory::newMatColor(int i_idx, int i_no) const { - J3DGXColor dflt = defaultMatColor; + J3DGXColor dflt = (J3DGXColor)defaultMatColor; u16 mat_color_index = mpMaterialInitData[mpMaterialID[i_idx]].mMatColorIdx[i_no]; if (mat_color_index != 0xffff) { return mpMatColor[mat_color_index]; @@ -872,11 +772,6 @@ J3DGXColor J3DMaterialFactory::newMatColor(int i_idx, int i_no) const { return dflt; } } -#else -J3DGXColor J3DMaterialFactory::newMatColor(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 80331D74-80331DAC 32C6B4 0038+00 2/2 0/0 0/0 .text newColorChanNum__18J3DMaterialFactoryCFi */ u8 J3DMaterialFactory::newColorChanNum(int i_idx) const { @@ -889,8 +784,7 @@ u8 J3DMaterialFactory::newColorChanNum(int i_idx) const { } /* 80331DAC-80331F50 32C6EC 01A4+00 2/2 0/0 0/0 .text newColorChan__18J3DMaterialFactoryCFii */ -#ifdef NONMATCHING -// problem with J3DColorChan inline constructor +// NONMATCHING problem with J3DColorChan inline constructor J3DColorChan J3DMaterialFactory::newColorChan(int i_idx, int i_no) const { u16 color_chan_index = mpMaterialInitData[mpMaterialID[i_idx]].mColorChanIdx[i_no]; if (color_chan_index != 0xffff) { @@ -899,23 +793,13 @@ J3DColorChan J3DMaterialFactory::newColorChan(int i_idx, int i_no) const { return J3DColorChan(); } } -#else -J3DColorChan J3DMaterialFactory::newColorChan(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 804564AC-804564B0 004AAC 0004+00 1/1 0/0 0/0 .sdata2 @1798 */ -#ifdef NONMATCHING static GXColor const defaultAmbColor = {0x32, 0x32, 0x32, 0x32}; -#else -SECTION_SDATA2 static u32 lit_1798 = 0x32323232; -#endif /* 80331F50-80331FAC 32C890 005C+00 1/1 0/0 0/0 .text newAmbColor__18J3DMaterialFactoryCFii */ -#ifdef NONMATCHING J3DGXColor J3DMaterialFactory::newAmbColor(int i_idx, int i_no) const { - J3DGXColor dflt = defaultAmbColor; + J3DGXColor dflt = (J3DGXColor)defaultAmbColor; u16 amb_color_index = mpMaterialInitData[mpMaterialID[i_idx]].mAmbColorIdx[i_no]; if (amb_color_index != 0xffff) { return mpAmbColor[amb_color_index]; @@ -923,11 +807,6 @@ J3DGXColor J3DMaterialFactory::newAmbColor(int i_idx, int i_no) const { return dflt; } } -#else -J3DGXColor J3DMaterialFactory::newAmbColor(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 80331FAC-80331FE4 32C8EC 0038+00 2/2 0/0 0/0 .text newTexGenNum__18J3DMaterialFactoryCFi */ u32 J3DMaterialFactory::newTexGenNum(int i_idx) const { @@ -1006,20 +885,11 @@ J3DGXColorS10 J3DMaterialFactory::newTevColor(int i_idx, int i_no) const { } /* 804564B0-804564B8 004AB0 0004+04 1/1 0/0 0/0 .sdata2 @1915 */ -#ifdef NONMATCHING static GXColor const defaultTevKColor = {0xff, 0xff, 0xff, 0xff}; -#else -SECTION_SDATA2 static u32 lit_1915[1 + 1 /* padding */] = { - 0xFFFFFFFF, - /* padding */ - 0x00000000, -}; -#endif /* 80332210-8033226C 32CB50 005C+00 2/2 0/0 0/0 .text newTevKColor__18J3DMaterialFactoryCFii */ -#ifdef NONMATCHING J3DGXColor J3DMaterialFactory::newTevKColor(int i_idx, int i_no) const { - J3DGXColor dflt = defaultTevKColor; + J3DGXColor dflt = (J3DGXColor)defaultTevKColor; u16 tev_kcolor_index = mpMaterialInitData[mpMaterialID[i_idx]].mTevKColorIdx[i_no]; if (tev_kcolor_index != 0xffff) { return mpTevKColor[tev_kcolor_index]; @@ -1027,11 +897,6 @@ J3DGXColor J3DMaterialFactory::newTevKColor(int i_idx, int i_no) const { return dflt; } } -#else -J3DGXColor J3DMaterialFactory::newTevKColor(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 8033226C-803322A4 32CBAC 0038+00 2/2 0/0 0/0 .text newTevStageNum__18J3DMaterialFactoryCFi */ u8 J3DMaterialFactory::newTevStageNum(int i_idx) const { @@ -1055,8 +920,6 @@ J3DTevStage J3DMaterialFactory::newTevStage(int i_idx, int i_no) const { /* 80332304-803323A0 32CC44 009C+00 1/1 0/0 0/0 .text * newTevSwapModeTable__18J3DMaterialFactoryCFii */ -#ifdef NONMATCHING -// J3DTevSwapModeTable inline constructor matches in the first usage but not the second J3DTevSwapModeTable J3DMaterialFactory::newTevSwapModeTable(int i_idx, int i_no) const { u16 tev_swap_mode_table_index = mpMaterialInitData[mpMaterialID[i_idx]].mTevSwapModeTableIdx[i_no]; if (tev_swap_mode_table_index != 0xffff) { @@ -1065,11 +928,6 @@ J3DTevSwapModeTable J3DMaterialFactory::newTevSwapModeTable(int i_idx, int i_no) return J3DTevSwapModeTable(j3dDefaultTevSwapModeTable); } } -#else -J3DTevSwapModeTable J3DMaterialFactory::newTevSwapModeTable(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 803323A0-803323C8 32CCE0 0028+00 2/2 0/0 0/0 .text newIndTexStageNum__18J3DMaterialFactoryCFi */ @@ -1133,8 +991,7 @@ J3DFog J3DMaterialFactory::newFog(int i_idx) const { } /* 80332768-803327E8 32D0A8 0080+00 2/2 0/0 0/0 .text newAlphaComp__18J3DMaterialFactoryCFi */ -#ifdef NONMATCHING -// weird issue with calcAlphaCmpID, see J3DMatBlock.h +// NONMATCHING weird issue with calcAlphaCmpID, see J3DMatBlock.h J3DAlphaComp J3DMaterialFactory::newAlphaComp(int i_idx) const { J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mAlphaCompIdx != 0xffff) { @@ -1143,11 +1000,6 @@ J3DAlphaComp J3DMaterialFactory::newAlphaComp(int i_idx) const { return J3DAlphaComp(0xffff); } } -#else -J3DAlphaComp J3DMaterialFactory::newAlphaComp(int param_0) const { - // NONMATCHING -} -#endif /* 803327E8-8033282C 32D128 0044+00 2/2 0/0 0/0 .text newBlend__18J3DMaterialFactoryCFi */ @@ -1202,141 +1054,3 @@ J3DNBTScale J3DMaterialFactory::newNBTScale(int i_idx) const { return dflt; } } - -/* 803329A0-803329A4 32D2E0 0004+00 1/0 0/0 0/0 .text load__14J3DPEBlockNullFv */ -// void J3DPEBlockNull::load() { -extern "C" void load__14J3DPEBlockNullFv() { - /* empty function */ -} - -/* 803329A4-803329B0 32D2E4 000C+00 1/0 0/0 0/0 .text getType__14J3DPEBlockNullFv */ -// u32 J3DPEBlockNull::getType() { -extern "C" void getType__14J3DPEBlockNullFv() { - // NONMATCHING -} - -/* 803329B0-80332A0C 32D2F0 005C+00 1/0 0/0 0/0 .text __dt__14J3DPEBlockNullFv */ -// J3DPEBlockNull::~J3DPEBlockNull() { -extern "C" void __dt__14J3DPEBlockNullFv() { - // NONMATCHING -} - -/* 80332A0C-80332A10 32D34C 0004+00 1/0 0/0 0/0 .text reset__15J3DTevBlockNullFP11J3DTevBlock */ -// void J3DTevBlockNull::reset(J3DTevBlock* param_0) { -extern "C" void reset__15J3DTevBlockNullFP11J3DTevBlock() { - /* empty function */ -} - -/* 80332A10-80332A14 32D350 0004+00 1/0 0/0 0/0 .text ptrToIndex__15J3DTevBlockNullFv */ -// void J3DTevBlockNull::ptrToIndex() { -extern "C" void ptrToIndex__15J3DTevBlockNullFv() { - /* empty function */ -} - -/* 80332A14-80332A38 32D354 0024+00 1/0 0/0 0/0 .text indexToPtr__15J3DTevBlockNullFv */ -// void J3DTevBlockNull::indexToPtr() { -extern "C" void indexToPtr__15J3DTevBlockNullFv() { - // NONMATCHING -} - -/* 80332A38-80332A44 32D378 000C+00 1/0 0/0 0/0 .text getType__15J3DTevBlockNullFv */ -// u32 J3DTevBlockNull::getType() { -extern "C" void getType__15J3DTevBlockNullFv() { - // NONMATCHING -} - -/* 80332A44-80332AA0 32D384 005C+00 1/0 0/0 0/0 .text __dt__15J3DTevBlockNullFv */ -// J3DTevBlockNull::~J3DTevBlockNull() { -extern "C" void __dt__15J3DTevBlockNullFv() { - // NONMATCHING -} - -/* 80332AA0-80332AA4 32D3E0 0004+00 1/0 0/0 0/0 .text calc__18J3DTexGenBlockNullFPA4_Cf - */ -// void J3DTexGenBlockNull::calc(f32 const (*param_0)[4]) { -extern "C" void calc__18J3DTexGenBlockNullFPA4_Cf() { - /* empty function */ -} - -/* 80332AA4-80332AA8 32D3E4 0004+00 1/0 0/0 0/0 .text - * calcWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf */ -// void J3DTexGenBlockNull::calcWithoutViewMtx(f32 const (*param_0)[4]) { -extern "C" void calcWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf() { - /* empty function */ -} - -/* 80332AA8-80332AAC 32D3E8 0004+00 1/0 0/0 0/0 .text calcPostTexMtx__18J3DTexGenBlockNullFPA4_Cf - */ -// void J3DTexGenBlockNull::calcPostTexMtx(f32 const (*param_0)[4]) { -extern "C" void calcPostTexMtx__18J3DTexGenBlockNullFPA4_Cf() { - /* empty function */ -} - -/* 80332AAC-80332AB0 32D3EC 0004+00 1/0 0/0 0/0 .text - * calcPostTexMtxWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf */ -// void J3DTexGenBlockNull::calcPostTexMtxWithoutViewMtx(f32 const (*param_0)[4]) { -extern "C" void calcPostTexMtxWithoutViewMtx__18J3DTexGenBlockNullFPA4_Cf() { - /* empty function */ -} - -/* 80332AB0-80332AB4 32D3F0 0004+00 1/0 0/0 0/0 .text load__18J3DTexGenBlockNullFv */ -// void J3DTexGenBlockNull::load() { -extern "C" void load__18J3DTexGenBlockNullFv() { - /* empty function */ -} - -/* 80332AB4-80332AB8 32D3F4 0004+00 1/0 0/0 0/0 .text patch__18J3DTexGenBlockNullFv */ -// void J3DTexGenBlockNull::patch() { -extern "C" void patch__18J3DTexGenBlockNullFv() { - /* empty function */ -} - -/* 80332AB8-80332ABC 32D3F8 0004+00 1/0 0/0 0/0 .text diff__18J3DTexGenBlockNullFUl */ -// void J3DTexGenBlockNull::diff(u32 param_0) { -extern "C" void diff__18J3DTexGenBlockNullFUl() { - /* empty function */ -} - -/* 80332ABC-80332AC0 32D3FC 0004+00 1/0 0/0 0/0 .text diffTexMtx__18J3DTexGenBlockNullFv - */ -// void J3DTexGenBlockNull::diffTexMtx() { -extern "C" void diffTexMtx__18J3DTexGenBlockNullFv() { - /* empty function */ -} - -/* 80332AC0-80332AC4 32D400 0004+00 1/0 0/0 0/0 .text diffTexGen__18J3DTexGenBlockNullFv - */ -// void J3DTexGenBlockNull::diffTexGen() { -extern "C" void diffTexGen__18J3DTexGenBlockNullFv() { - /* empty function */ -} - -/* 80332AC4-80332AD0 32D404 000C+00 1/0 0/0 0/0 .text getType__18J3DTexGenBlockNullFv */ -// u32 J3DTexGenBlockNull::getType() { -extern "C" void getType__18J3DTexGenBlockNullFv() { - // NONMATCHING -} - -/* 80332AD0-80332B2C 32D410 005C+00 1/0 0/0 0/0 .text __dt__18J3DTexGenBlockNullFv */ -// J3DTexGenBlockNull::~J3DTexGenBlockNull() { -extern "C" void __dt__18J3DTexGenBlockNullFv() { - // NONMATCHING -} - -/* 80332B2C-80332B38 32D46C 000C+00 1/0 0/0 0/0 .text getType__17J3DColorBlockNullFv */ -// u32 J3DColorBlockNull::getType() { -extern "C" void getType__17J3DColorBlockNullFv() { - // NONMATCHING -} - -/* 80332B38-80332B94 32D478 005C+00 1/0 0/0 0/0 .text __dt__17J3DColorBlockNullFv */ -// J3DColorBlockNull::~J3DColorBlockNull() { -extern "C" void __dt__17J3DColorBlockNullFv() { - // NONMATCHING -} - -/* 80332B94-80332BDC 32D4D4 0048+00 0/0 2/2 0/0 .text __dt__11J3DMaterialFv */ -// J3DMaterial::~J3DMaterial() { -extern "C" void __dt__11J3DMaterialFv() { - // NONMATCHING -}
\ No newline at end of file diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp index f9c3c66f6a..6d11efa841 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp @@ -4,83 +4,8 @@ // #include "JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/JSupport/JSupport.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21(); -extern "C" void countUniqueMaterials__22J3DMaterialFactory_v21Fv(); -extern "C" void countTexGens__22J3DMaterialFactory_v21CFi(); -extern "C" void countStages__22J3DMaterialFactory_v21CFi(); -extern "C" void create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl(); -extern "C" void newMatColor__22J3DMaterialFactory_v21CFii(); -extern "C" void newColorChanNum__22J3DMaterialFactory_v21CFi(); -extern "C" void newColorChan__22J3DMaterialFactory_v21CFii(); -extern "C" void newTexGenNum__22J3DMaterialFactory_v21CFi(); -extern "C" void newTexCoord__22J3DMaterialFactory_v21CFii(); -extern "C" void newTexMtx__22J3DMaterialFactory_v21CFii(); -extern "C" void newCullMode__22J3DMaterialFactory_v21CFi(); -extern "C" void newTexNo__22J3DMaterialFactory_v21CFii(); -extern "C" void newTevOrder__22J3DMaterialFactory_v21CFii(); -extern "C" void newTevColor__22J3DMaterialFactory_v21CFii(); -extern "C" void newTevKColor__22J3DMaterialFactory_v21CFii(); -extern "C" void newTevStageNum__22J3DMaterialFactory_v21CFi(); -extern "C" void newTevStage__22J3DMaterialFactory_v21CFii(); -extern "C" void newTevSwapModeTable__22J3DMaterialFactory_v21CFii(); -extern "C" void newFog__22J3DMaterialFactory_v21CFi(); -extern "C" void newAlphaComp__22J3DMaterialFactory_v21CFi(); -extern "C" void newBlend__22J3DMaterialFactory_v21CFi(); -extern "C" void newZMode__22J3DMaterialFactory_v21CFi(); -extern "C" void newZCompLoc__22J3DMaterialFactory_v21CFi(); -extern "C" void newDither__22J3DMaterialFactory_v21CFi(); -extern "C" void newNBTScale__22J3DMaterialFactory_v21CFi(); -extern "C" void func_80334118(void* _this, void const*, void const*); - -// -// External References: -// - -extern "C" void __ct__11J3DTevStageFv(); -extern "C" void __ct__11J3DTevStageFRC15J3DTevStageInfo(); -extern "C" void* __nw__FUl(); -extern "C" GXColorS10* func_802F41E8(void const*, void const*); -extern "C" u8* func_802F4260(void const*, void const*); -extern "C" GXColor* func_802F4278(void const*, void const*); -extern "C" GXCullMode* func_802F4290(void const*, void const*); -extern "C" u16* func_802F42C0(void const*, void const*); -extern "C" void createColorBlock__11J3DMaterialFUl(); -extern "C" void createTexGenBlock__11J3DMaterialFUl(); -extern "C" void createTevBlock__11J3DMaterialFi(); -extern "C" void createIndBlock__11J3DMaterialFi(); -extern "C" void createPEBlock__11J3DMaterialFUlUl(); -extern "C" void initialize__11J3DMaterialFv(); -extern "C" void __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo(); -extern "C" void __as__10J3DFogInfoFRC10J3DFogInfo(); -extern "C" void func_80332C24(void* _this, void const*, void const*); -extern "C" void func_80332C3C(void* _this, void const*, void const*); -extern "C" void func_80332C54(void* _this, void const*, void const*); -extern "C" void func_80332C6C(void* _this, void const*, void const*); -extern "C" void func_80332C84(void* _this, void const*, void const*); -extern "C" void func_80332C9C(void* _this, void const*, void const*); -extern "C" void func_80332CB4(void* _this, void const*, void const*); -extern "C" void func_80332CCC(void* _this, void const*, void const*); -extern "C" void func_80332CE4(void* _this, void const*, void const*); -extern "C" void func_80332CFC(void* _this, void const*, void const*); -extern "C" void func_80332D14(void* _this, void const*, void const*); -extern "C" void func_80332D2C(void* _this, void const*, void const*); -extern "C" void func_80332D5C(void* _this, void const*, void const*); -extern "C" void _savegpr_19(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_19(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__11J3DMaterial[12]; - -// -// Declarations: -// /* 80332DA4-80332F84 32D6E4 01E0+00 0/0 2/2 0/0 .text * __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21 */ @@ -158,8 +83,95 @@ u32 J3DMaterialFactory_v21::countStages(int i_idx) const { /* 80333068-803337D8 32D9A8 0770+00 0/0 2/2 0/0 .text * create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl */ -J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* param_0, int param_1, u32 param_2) const { - // NONMATCHING +// NONMATCHINg same problems as J3DMaterialFactory::createNormalMaterial +J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* i_material, int i_idx, u32 i_flags) const { + u32 stages = countStages(i_idx); + u32 tev_stage_num = getMdlDataFlag_TevStageNum(i_flags); + if (stages > tev_stage_num) { + tev_stage_num = stages; + } + u32 u1 = tev_stage_num <= 8 ? tev_stage_num : 8; + u32 texgens = countTexGens(i_idx); + u32 texgen_flag = texgens > 4 ? 0 : getMdlDataFlag_TexGenFlag(i_flags); + u32 color_flag = getMdlDataFlag_ColorFlag(i_flags); + u32 pe_flag = getMdlDataFlag_PEFlag(i_flags); + bool ind_flag = (i_flags & 0x1000000) != 0; + if (i_material == NULL) { + i_material = new J3DMaterial(); + } + i_material->mColorBlock = J3DMaterial::createColorBlock(color_flag); + i_material->mTexGenBlock = J3DMaterial::createTexGenBlock(texgen_flag); + i_material->mTevBlock = J3DMaterial::createTevBlock((u16)tev_stage_num); + i_material->mIndBlock = J3DMaterial::createIndBlock(ind_flag); + i_material->mPEBlock = J3DMaterial::createPEBlock(pe_flag, getMaterialMode(i_idx)); + i_material->mIndex = i_idx; + i_material->mMaterialMode = getMaterialMode(i_idx); + i_material->mColorBlock->setColorChanNum(newColorChanNum(i_idx)); + i_material->mColorBlock->setCullMode(newCullMode(i_idx)); + i_material->mTexGenBlock->setTexGenNum(newTexGenNum(i_idx)); + i_material->mTexGenBlock->setNBTScale(newNBTScale(i_idx)); + i_material->mPEBlock->setFog(&newFog(i_idx)); + i_material->mPEBlock->setAlphaComp(newAlphaComp(i_idx)); + i_material->mPEBlock->setBlend(newBlend(i_idx)); + i_material->mPEBlock->setZMode(newZMode(i_idx)); + i_material->mPEBlock->setZCompLoc(newZCompLoc(i_idx)); + i_material->mPEBlock->setDither(newDither(i_idx)); + i_material->mTevBlock->setTevStageNum(newTevStageNum(i_idx)); + for (u8 i = 0; i < u1; i++) { + i_material->mTevBlock->setTexNo(i, newTexNo(i_idx, i)); + } + for (u8 i = 0; i < tev_stage_num; i++) { + i_material->mTevBlock->setTevOrder(i, newTevOrder(i_idx, i)); + } + for (u8 i = 0; i < tev_stage_num; i++) { + J3DMaterialInitData_v21* material_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + i_material->mTevBlock->setTevStage(i, newTevStage(i_idx, i)); + if (material_init_data->mTevSwapModeIdx[i] != 0xffff) { + i_material->mTevBlock->getTevStage(i)->setTexSel( + mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mTexSel); + i_material->mTevBlock->getTevStage(i)->setRasSel( + mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mRasSel); + } + } + for (u8 i = 0; i < 4; i++) { + i_material->mTevBlock->setTevKColor(i, newTevKColor(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + i_material->mTevBlock->setTevColor(i, newTevColor(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + i_material->mTevBlock->setTevSwapModeTable(i, newTevSwapModeTable(i_idx, i)); + } + for (u8 i = 0; i < 2; i++) { + i_material->mColorBlock->setMatColor(i, newMatColor(i_idx, i)); + } + for (u8 i = 0; i < 4; i++) { + J3DColorChan color_chan = newColorChan(i_idx, i); + i_material->mColorBlock->setColorChan(i, color_chan); + } + for (u8 i = 0; i < texgens; i++) { + J3DTexCoord tex_coord = newTexCoord(i_idx, i); + i_material->mTexGenBlock->setTexCoord(i, &tex_coord); + } + for (u8 i = 0; i < 8; i++) { + i_material->mTexGenBlock->setTexMtx(i, newTexMtx(i_idx, i)); + } + J3DMaterialInitData_v21* material_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + for (u8 i = 0; i < tev_stage_num; i++) { + if (material_init_data->mTevKColorSel[i] != 0xff) { + i_material->mTevBlock->setTevKColorSel(i, material_init_data->mTevKColorSel[i]); + } else { + i_material->mTevBlock->setTevKColorSel(i, 0xc); + } + } + for (u8 i = 0; i < tev_stage_num; i++) { + if (material_init_data->mTevKAlphaSel[i] != 0xff) { + i_material->mTevBlock->setTevKAlphaSel(i, material_init_data->mTevKAlphaSel[i]); + } else { + i_material->mTevBlock->setTevKAlphaSel(i, 0x1c); + } + } + return i_material; } /* 803337D8-80333834 32E118 005C+00 1/1 0/0 0/0 .text newMatColor__22J3DMaterialFactory_v21CFii */ @@ -186,8 +198,7 @@ u8 J3DMaterialFactory_v21::newColorChanNum(int i_idx) const { /* 8033386C-80333A10 32E1AC 01A4+00 1/1 0/0 0/0 .text newColorChan__22J3DMaterialFactory_v21CFii */ -// J3DColorChan ctor -#ifdef NONMATCHING +// NONMATCHING J3DColorChan ctor J3DColorChan J3DMaterialFactory_v21::newColorChan(int i_idx, int i_no) const { J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mColorChanIdx[i_no] != 0xffff) { @@ -196,11 +207,6 @@ J3DColorChan J3DMaterialFactory_v21::newColorChan(int i_idx, int i_no) const { return J3DColorChan(); } } -#else -J3DColorChan J3DMaterialFactory_v21::newColorChan(int param_0, int param_1) const { - // NONMATCHING -} -#endif /* 80333A10-80333A48 32E350 0038+00 1/1 0/0 0/0 .text newTexGenNum__22J3DMaterialFactory_v21CFi */ u32 J3DMaterialFactory_v21::newTexGenNum(int i_idx) const { @@ -329,8 +335,7 @@ J3DFog J3DMaterialFactory_v21::newFog(int i_idx) const { } /* 80333EE0-80333F60 32E820 0080+00 1/1 0/0 0/0 .text newAlphaComp__22J3DMaterialFactory_v21CFi */ -// calcAlphaCmpID issue -#ifdef NONMATCHING +// NONMATCHING calcAlphaCmpID issue J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const { J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mAlphaCompIdx != 0xffff) { @@ -338,11 +343,6 @@ J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const { } return J3DAlphaComp(0xffff); } -#else -J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int param_0) const { - // NONMATCHING -} -#endif /* 80333F60-80333FA4 32E8A0 0044+00 1/1 0/0 0/0 .text newBlend__22J3DMaterialFactory_v21CFi */ J3DBlend J3DMaterialFactory_v21::newBlend(int i_idx) const { @@ -393,4 +393,4 @@ J3DNBTScale J3DMaterialFactory_v21::newNBTScale(int i_idx) const { } else { return dflt; } -}
\ No newline at end of file +} diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp index c53246008e..06ce608403 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp @@ -27,15 +27,14 @@ u16 J3DModelLoader::countMaterialNum(const void* stream) { } /* 803367D4-803369A0 331114 01CC+00 0/0 3/0 0/0 .text calcLoadSize__14J3DModelLoaderFPCvUl */ -// NONMATCHING size load issue u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) { int flags = flags_; const J3DModelFileData* header = static_cast<const J3DModelFileData*>(stream); - size_t size; + size_t size = 0; const J3DModelBlock* nextBlock = header->mBlocks; u32 i = 0; // TODO: What sizeof will get us a size of 0xE4? - size = 0xE4; + size += 0xE4; for (; i < header->mBlockNum; i++) { switch (nextBlock->mBlockType) { case 'INF1': @@ -116,12 +115,11 @@ u32 J3DModelLoader::calcLoadMaterialTableSize(const void* stream) { * calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl */ // NONMATCHING flags issue u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) { + u32 size = 0; const J3DModelFileData* header = (const J3DModelFileData*)stream; const J3DModelBlock* nextBlock = header->mBlocks; u32 i = 0; - u32 matFlags = flags & (J3DMLF_Material_UseIndirect | J3DMLF_26); - u32 flags2; - int size = sizeof(J3DModelData); + size += sizeof(J3DModelData); for (; i < header->mBlockNum; i++) { switch (nextBlock->mBlockType) { case 'INF1': @@ -141,18 +139,19 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) break; case 'MAT2': break; - case 'MAT3': - flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn); - flags2 |= matFlags; + case 'MAT3': { + u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn); + flags2 |= flags & (J3DMLF_Material_UseIndirect | J3DMLF_26); mpMaterialBlock = (const J3DMaterialBlock*)nextBlock; if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == 0) { field_0x18 = 1; size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags2); } else if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == J3DMLF_DoBdlMaterialCalc) { field_0x18 = 1; - size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, matFlags); + size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, flags2); } break; + } case 'EVP1': size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock); break; @@ -191,7 +190,6 @@ u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flag return size; } - /* 80336D64-80336D90 3316A4 002C+00 2/2 0/0 0/0 .text * calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock */ u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) { |
