From c19d9b02be5d894f91cd45884eed67152dffffa4 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Tue, 6 Feb 2024 07:04:35 +0200 Subject: J3D work (#2064) --- libs/JSystem/J2DGraph/J2DMaterial.cpp | 4 +- .../JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp | 258 +++++++++++++++------ libs/JSystem/J3DGraphBase/J3DShapeMtx.cpp | 16 +- libs/JSystem/J3DGraphBase/J3DStruct.cpp | 42 +--- libs/JSystem/J3DGraphBase/J3DTevs.cpp | 243 ++++++------------- .../J3DGraphLoader/J3DMaterialFactory_v21.cpp | 80 ++++--- 6 files changed, 328 insertions(+), 315 deletions(-) (limited to 'libs/JSystem') diff --git a/libs/JSystem/J2DGraph/J2DMaterial.cpp b/libs/JSystem/J2DGraph/J2DMaterial.cpp index 6c0ff56168..d25648f748 100644 --- a/libs/JSystem/J2DGraph/J2DMaterial.cpp +++ b/libs/JSystem/J2DGraph/J2DMaterial.cpp @@ -369,7 +369,7 @@ void J2DMaterial::setAnimation(J2DAnmTevRegKey* anm) { if (index == matID) { J3DAnmCRegKeyTable* anmTbl = anm->getAnmCRegKeyTable(); - mAnmPointer->field_0x32[anmTbl[i]._18] = i; + mAnmPointer->field_0x32[anmTbl[i].mColorId] = i; } } } @@ -387,7 +387,7 @@ void J2DMaterial::setAnimation(J2DAnmTevRegKey* anm) { if (index == matID) { J3DAnmKRegKeyTable* anmTbl = anm->getAnmKRegKeyTable(); - mAnmPointer->field_0x3a[anmTbl[i]._18] = i; + mAnmPointer->field_0x3a[anmTbl[i].mColorId] = i; } } } diff --git a/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp b/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp index 728ea33ad9..74ec8e5ace 100644 --- a/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp +++ b/libs/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp @@ -6,6 +6,7 @@ #include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -46,13 +47,8 @@ extern "C" void _restgpr_22(); extern "C" void _restgpr_24(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); -extern "C" extern u8 const j3dDefaultTexMtxInfo[100]; extern "C" extern void* __vt__11J3DTexNoAnm[3]; -// -// Declarations: -// - /* 8032F5A8-8032F5D0 329EE8 0028+00 0/0 1/1 0/0 .text clear__16J3DMaterialTableFv */ void J3DMaterialTable::clear() { mMaterialNum = 0; @@ -65,16 +61,6 @@ void J3DMaterialTable::clear() { field_0x1c = 0; } -/* ############################################################################################## */ -/* 803CEE80-803CEE90 02BFA0 000C+04 2/2 0/0 0/0 .data __vt__16J3DMaterialTable */ -SECTION_DATA extern void* __vt__16J3DMaterialTable[3 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__16J3DMaterialTableFv, - /* padding */ - NULL, -}; - /* 8032F5D0-8032F604 329F10 0034+00 0/0 2/2 0/0 .text __ct__16J3DMaterialTableFv */ J3DMaterialTable::J3DMaterialTable() { mMaterialNum = 0; @@ -111,12 +97,10 @@ int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) { /* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text * removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */ -// regalloc -#ifdef NONMATCHING int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) { int ret = 0; u16 materialNum = anm->getUpdateMaterialNum(); - J3DAnmTexPatternFullTable* anm_table = anm->getAnmTable(); + J3DAnmTexPatternFullTable* anm_table = anm->mAnmTable; for (u16 i = 0; i < materialNum; i++) { if (anm->isValidUpdateMaterialID(i)) { @@ -133,90 +117,222 @@ int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) { return ret; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern.s" -} -#pragma pop -#endif /* 8032F7B4-8032F880 32A0F4 00CC+00 0/0 4/4 26/26 .text * removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s" +int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterial* pMaterial = getMaterialNodePointer(materialID); + J3DMaterialAnm* pMatAnm = pMaterial->getMaterialAnm(); + u8 texMtxID = pAnm->getUpdateTexMtxID(i); + if (pMatAnm == NULL) { + ret = 1; + } else if (texMtxID != 0xFF) { + pMatAnm->setTexMtxAnm(texMtxID, NULL); + } + } + } + + return ret; } -#pragma pop /* 8032F880-8032F9C0 32A1C0 0140+00 0/0 7/7 24/24 .text * removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey.s" +int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + for (u16 i = 0; i < cRegMaterialNum; i++) { + if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm(); + u32 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, NULL); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm(); + u32 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) { + ret = 1; + } else { + pMatAnm->setTevKColorAnm(colorId, NULL); + } + } + } + + return ret; } -#pragma pop /* 8032F9C0-8032FAF4 32A300 0134+00 1/1 0/0 0/0 .text * createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s" +int J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_1) { + int rv = 0; + u16 materialNum = param_1->getUpdateMaterialNum(); + if (isLocked()) { + return 2; + } + for (u16 i = 0; i < materialNum; i++) { + if (param_1->isValidUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i)); + u8 mtxId = param_1->getUpdateTexMtxID(i); + if (material->getMaterialAnm() == 0) { + rv = 1; + } else { + u32 mtxId2 = mtxId; + if (mtxId2 != 0xff && material->getTexMtx(mtxId2) == 0) { + J3DTexMtx* mtx = new J3DTexMtx(); + rv = 4; + material->setTexMtx(mtxId2, mtx); + JUT_WARN(420, "matNo<%d> : texMtx%d nothing !\n", i, mtxId); + } + } + } + } + return rv; } -#pragma pop /* 8032FAF4-8032FBC8 32A434 00D4+00 0/0 1/1 0/0 .text * entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor.s" +int J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_1) { + int rv = 0; + u16 materialNum = param_1->getUpdateMaterialNum(); + if (isLocked()) { + return 2; + } + for (u16 i = 0; i < materialNum; i++) { + if (param_1->isValidUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i)); + J3DMaterialAnm* materialAnm = material->getMaterialAnm(); + if (materialAnm == 0) { + rv = 1; + } else { + J3DMatColorAnm matColorAnm(i, param_1); + materialAnm->setMatColorAnm(0, &matColorAnm); + } + } + } + return rv; } -#pragma pop /* 8032FBC8-8032FCC4 32A508 00FC+00 0/0 7/7 1/1 .text * entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern.s" +int J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_1) { + int rv = 0; + u16 materialNum = param_1->getUpdateMaterialNum(); + if (isLocked()) { + return 2; + } + for (u16 i = 0; i < materialNum; i++) { + if (param_1->isValidUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i)); + J3DMaterialAnm* materialAnm = material->getMaterialAnm(); + u8 texNo = param_1->getAnmTable()[i].mTexNo; + if (materialAnm == 0) { + rv = 1; + } else { + J3DTexNoAnm texNoAnm(i, param_1); + materialAnm->setTexNoAnm(texNo, &texNoAnm); + } + } + } + return rv; } -#pragma pop /* 8032FCC4-8032FE70 32A604 01AC+00 0/0 14/14 6/6 .text * entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ +// getUpdateTexMtxID u8 issue / getSRTCenter +#ifdef NONMATCHING +int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) { + int rv = 0; + u16 materialNum = param_1->getUpdateMaterialNum(); + rv = createTexMtxForAnimator(param_1); + if (rv != 0) { + return rv; + } + if (isLocked()) { + return 2; + } + for (u16 i = 0; i < materialNum; i++) { + if (param_1->isValidUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i)); + J3DMaterialAnm* materialAnm = material->getMaterialAnm(); + u8 texMtxID = param_1->getUpdateTexMtxID(i); + if (materialAnm == 0) { + rv = 1; + } else { + if (texMtxID != 0xff) { + if (material->getTexCoord(texMtxID) != NULL) { + material->getTexCoord(texMtxID)->setTexGenMtx(texMtxID * 3 + 30); + } + J3DTexMtxInfo& iVar3 = material->getTexMtx(texMtxID)->getTexMtxInfo(); + iVar3.mInfo = (iVar3.mInfo & 0x3f)| (param_1->getTexMtxCalcType() << 7); + iVar3.mCenter.x = param_1->getSRTCenter(i)->x; + iVar3.mCenter.y = param_1->getSRTCenter(i)->y; + iVar3.mCenter.z = param_1->getSRTCenter(i)->z; + J3DTexMtxAnm texMtxAnm(i, param_1); + materialAnm->setTexMtxAnm(texMtxID, &texMtxAnm); + } + } + } + } + return rv; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) { +asm int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) { nofralloc #include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey.s" } #pragma pop +#endif /* 8032FE70-8032FFEC 32A7B0 017C+00 0/0 10/10 4/4 .text * entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey.s" +int J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_1) { + int rv = 0; + u16 cRegNum = param_1->getCRegUpdateMaterialNum(); + u16 kRegNum = param_1->getKRegUpdateMaterialNum(); + if (isLocked()) { + return 2; + } + for (u16 i = 0; i < cRegNum; i++) { + if (param_1->isValidCRegUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getCRegUpdateMaterialID(i)); + J3DMaterialAnm* materialAnm = material->getMaterialAnm(); + u8 colorId = param_1->getAnmCRegKeyTable()[i].mColorId; + if (materialAnm == NULL) { + rv = 1; + } else { + J3DTevColorAnm tevColorAnm(i, param_1); + materialAnm->setTevColorAnm(colorId, &tevColorAnm); + } + } + } + for (u16 i = 0; i < kRegNum; i++) { + if (param_1->isValidKRegUpdateMaterialID(i)) { + J3DMaterial* material = getMaterialNodePointer(param_1->getKRegUpdateMaterialID(i)); + J3DMaterialAnm* materialAnm = material->getMaterialAnm(); + u32 colorId = param_1->getAnmKRegKeyTable()[i].mColorId; + if (materialAnm == NULL) { + rv = 1; + } else { + J3DTevKColorAnm tevKColorAnm(i, param_1); + materialAnm->setTevKColorAnm(colorId, &tevKColorAnm); + } + } + } + return rv; } -#pragma pop diff --git a/libs/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/libs/JSystem/J3DGraphBase/J3DShapeMtx.cpp index 453101a0e0..d5c1405b65 100644 --- a/libs/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/libs/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -296,17 +296,19 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) { int tex_gen_type = tex_coord->getTexGenType(); if (tex_gen_type == 1 || tex_gen_type == 0) { tex_mtx = tex_gen_block->getTexMtx(i); - u8 tex_gen_src = tex_coord->getTexGenSrc(); + u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo; u32 unk; switch (tex_gen_src & 0x3f) { case 3: case 9: - mtx = &tex_mtx_obj->getMtx(i); + Mtx& tmp5 = tex_mtx_obj->getMtx(i); + mtx = &tmp5; break; case 1: case 6: case 7: - mtx = &tex_mtx_obj->getMtx(i); + Mtx& tmp6 = tex_mtx_obj->getMtx(i); + mtx = &tmp6; break; case 2: case 8: @@ -368,7 +370,8 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) { mtx = &tmp2; break; default: - mtx = &tex_mtx_obj->getMtx(i); + Mtx& tmp7 = tex_mtx_obj->getMtx(i); + mtx = &tmp7; break; } GXLoadTexMtxImm(*mtx, i * 3 + 0x40, GX_MTX3x4); @@ -376,11 +379,10 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) { } } else { for (u16 i = 0; i < (u16)tex_mtx_num; i++) { - tex_coord = tex_gen_block->getTexCoord(i); - int tex_gen_type = tex_coord->getTexGenType(); + int tex_gen_type = tex_gen_block->getTexCoord(i)->getTexGenType(); if (tex_gen_type == 1 || tex_gen_type == 0) { tex_mtx = tex_gen_block->getTexMtx(i); - u8 tex_gen_src = tex_coord->getTexGenSrc(); + u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo; u32 unk; switch (tex_gen_src & 0x3f) { case 3: diff --git a/libs/JSystem/J3DGraphBase/J3DStruct.cpp b/libs/JSystem/J3DGraphBase/J3DStruct.cpp index 6b1cec2e2a..b2d537934d 100644 --- a/libs/JSystem/J3DGraphBase/J3DStruct.cpp +++ b/libs/JSystem/J3DGraphBase/J3DStruct.cpp @@ -1,15 +1,9 @@ // -// Generated By: dol2asm -// Translation Unit: J3DStruct +// J3DStruct // #include "JSystem/J3DGraphBase/J3DStruct.h" #include "JSystem/JMath/JMath.h" -#include "dol2asm.h" - -// -// Declarations: -// /* 803256C4-80325718 320004 0054+00 0/0 11/11 24/24 .text __as__12J3DLightInfoFRC12J3DLightInfo */ J3DLightInfo& J3DLightInfo::operator=(J3DLightInfo const& param_0) { @@ -29,39 +23,23 @@ J3DTexMtxInfo& J3DTexMtxInfo::operator=(J3DTexMtxInfo const& param_0) { return *this; } -/* ############################################################################################## */ -/* 80456410-80456414 004A10 0004+00 1/1 0/0 0/0 .sdata2 @409 */ -SECTION_SDATA2 static f32 lit_409 = 1.0f; - -/* 80456414-80456418 004A14 0004+00 1/1 0/0 0/0 .sdata2 @410 */ -SECTION_SDATA2 static u8 lit_410[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; +// Helper functions to set float literal order +static f32 dummyLiteralOrder() { + return 1.0f; +} /* 80325794-803257DC 3200D4 0048+00 0/0 2/2 7/7 .text setEffectMtx__13J3DTexMtxInfoFPA4_f */ -// needs inline asm? -#ifdef NONMATCHING void J3DTexMtxInfo::setEffectMtx(Mtx param_0) { JMath::gekko_ps_copy12(&mEffectMtx, param_0); - mEffectMtx[3][0] = 0.0f; - mEffectMtx[3][1] = 0.0f; + register f32 zero = 0.0f; + register f32* mtx = (f32*)mEffectMtx; + asm { + psq_st zero, 0x30(mtx), 0, 0 + }; mEffectMtx[3][2] = 0.0f; mEffectMtx[3][3] = 1.0f; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexMtxInfo::setEffectMtx(f32 (*param_0)[4]) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DStruct/setEffectMtx__13J3DTexMtxInfoFPA4_f.s" -} -#pragma pop -#endif /* 803257DC-80325800 32011C 0024+00 0/0 5/5 0/0 .text * __as__16J3DIndTexMtxInfoFRC16J3DIndTexMtxInfo */ diff --git a/libs/JSystem/J3DGraphBase/J3DTevs.cpp b/libs/JSystem/J3DGraphBase/J3DTevs.cpp index 040d734260..917edb672f 100644 --- a/libs/JSystem/J3DGraphBase/J3DTevs.cpp +++ b/libs/JSystem/J3DGraphBase/J3DTevs.cpp @@ -1,6 +1,5 @@ // -// Generated By: dol2asm -// Translation Unit: J3DTevs +// J3DTevs // #include "JSystem/J3DGraphBase/J3DTevs.h" @@ -9,75 +8,9 @@ #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DTexture.h" #include "JSystem/J3DGraphBase/J3DTransform.h" -#include "dol2asm.h" -// -// Types: -// - -// -// Forward References: -// - -extern "C" void load__11J3DLightObjCFUl(); -extern "C" void loadTexCoordGens__FUlP11J3DTexCoord(); -extern "C" void load__9J3DTexMtxCFUl(); -extern "C" void calc__9J3DTexMtxFPA4_Cf(); -extern "C" void calcTexMtx__9J3DTexMtxFPA4_Cf(); -extern "C" void calcPostTexMtx__9J3DTexMtxFPA4_Cf(); -extern "C" void isTexNoReg__FPv(); -extern "C" void getTexNoReg__FPv(); -extern "C" void loadTexNo__FUlRCUs(); -extern "C" void patchTexNo_PtrToIdx__FUlRCUs(); -extern "C" void loadNBTScale__FR11J3DNBTScale(); -extern "C" void makeTexCoordTable__Fv(); -extern "C" void makeAlphaCmpTable__Fv(); -extern "C" void makeZModeTable__Fv(); -extern "C" void makeTevSwapTable__Fv(); -extern "C" void loadTexMtx__9J3DTexMtxCFUl(); -extern "C" void loadPostTexMtx__9J3DTexMtxCFUl(); -extern "C" static void J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType(); -extern "C" static void J3DGDLoadPostTexMtxImm__FPA4_fUl(); -extern "C" extern GXColor j3dDefaultColInfo; -extern "C" extern u32 j3dDefaultAmbInfo; -extern "C" extern u8 data_804563C8; -extern "C" extern GXColorS10 j3dDefaultTevColor; -extern "C" extern GXColor j3dDefaultTevKColor; -extern "C" extern u8 j3dDefaultTevSwapMode[4]; -extern "C" extern u16 data_804563F8; - -// -// External References: -// - -extern void J3DGDSetTexImgPtrRaw(_GXTexMapID param_0, u32 param_1); - -extern "C" void J3DGDSetLightAttn__F10_GXLightIDffffff(); -extern "C" void J3DGDSetLightColor__F10_GXLightID8_GXColor(); -extern "C" void J3DGDSetLightPos__F10_GXLightIDfff(); -extern "C" void J3DGDSetLightDir__F10_GXLightIDfff(); -extern "C" void J3DGDSetTexCoordGen__F13_GXTexGenType12_GXTexGenSrc(); -extern "C" void -J3DGDSetTexLookupMode__F11_GXTexMapID14_GXTexWrapMode14_GXTexWrapMode12_GXTexFilter12_GXTexFilterfffUcUc13_GXAnisotropy(); -extern "C" void J3DGDSetTexImgAttr__F11_GXTexMapIDUsUs9_GXTexFmt(); -extern "C" void J3DGDSetTexImgPtr__F11_GXTexMapIDPv(); -extern "C" void J3DGDSetTexTlut__F11_GXTexMapIDUl10_GXTlutFmt(); -extern "C" void J3DGDLoadTlut__FPvUl11_GXTlutSize(); -extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f(); -extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f(); -extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f(); -extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f(); -extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f(); -extern "C" void GDOverflowed(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_28(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_28(); -extern "C" u8 sTexCoordScaleTable__6J3DSys[64 + 4 /* padding */]; - -// -// Declarations: -// +static void J3DGDLoadTexMtxImm(f32 (*)[4], u32, _GXTexMtxType); +static void J3DGDLoadPostTexMtxImm(f32 (*)[4], u32); /* 80323590-80323644 31DED0 00B4+00 0/0 3/3 0/0 .text load__11J3DLightObjCFUl */ void J3DLightObj::load(u32 lightIdx) const { @@ -344,16 +277,6 @@ u16 getTexNoReg(void* param_0) { return *(u32*)((u8*)param_0 + 1); } -/* ############################################################################################## */ -/* 804563B0-804563B4 0049B0 0004+00 1/1 0/0 0/0 .sdata2 @1167 */ -SECTION_SDATA2 static f32 lit_1167 = 0.125f; - -/* 804563B4-804563B8 0049B4 0004+00 1/1 0/0 0/0 .sdata2 @1168 */ -SECTION_SDATA2 static f32 lit_1168 = 1.0f / 100.0f; - -/* 804563B8-804563C0 0049B8 0008+00 1/1 0/0 0/0 .sdata2 @1171 */ -SECTION_SDATA2 static f64 lit_1171 = 4503601774854144.0 /* cast s32 to float */; - /* 80323F94-8032413C 31E8D4 01A8+00 0/0 20/20 0/0 .text loadTexNo__FUlRCUs */ void loadTexNo(u32 param_0, u16 const& param_1) { ResTIMG* resTIMG = j3dSys.getTexture()->getResTIMG(param_1); @@ -387,91 +310,62 @@ void loadNBTScale(J3DNBTScale& param_0) { /* ############################################################################################## */ /* 803A1EC8-803A1EFC 02E528 0034+00 0/0 9/9 24/24 .rodata j3dDefaultLightInfo */ -SECTION_RODATA extern const J3DLightInfo j3dDefaultLightInfo = { +extern const J3DLightInfo j3dDefaultLightInfo = { 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0xff, 0xff, 0xff, 0xff, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, }; -COMPILER_STRIP_GATE(0x803A1EC8, &j3dDefaultLightInfo); /* 803A1EFC-803A1F1C 02E55C 0020+00 0/0 5/5 0/0 .rodata j3dDefaultTexCoordInfo */ -SECTION_RODATA extern J3DTexCoordInfo const j3dDefaultTexCoordInfo[8] = { +extern J3DTexCoordInfo const j3dDefaultTexCoordInfo[8] = { {GX_MTX2x4, GX_TG_TEX0, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX1, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX2, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX3, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX4, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX5, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX6, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX7, GX_IDENTITY, 0}, }; -COMPILER_STRIP_GATE(0x803A1EFC, &j3dDefaultTexCoordInfo); /* 803A1F1C-803A1F80 02E57C 0064+00 0/0 1/1 0/0 .rodata j3dDefaultTexMtxInfo */ -SECTION_RODATA extern u8 const j3dDefaultTexMtxInfo[100] = { - 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, +extern J3DTexMtxInfo const j3dDefaultTexMtxInfo = { + 0x01, + 0x00, + 0xFF, + 0xFF, + {0.0f, 0.0f, 0.0f}, + {1.0f, 1.0f, 0, 0.0f, 0.0f}, + {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f}, }; -COMPILER_STRIP_GATE(0x803A1F1C, &j3dDefaultTexMtxInfo); /* 803A1F80-803A1F9C 02E5E0 001C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTexMtxInfo */ -SECTION_RODATA extern J3DIndTexMtxInfo const j3dDefaultIndTexMtxInfo = { +extern J3DIndTexMtxInfo const j3dDefaultIndTexMtxInfo = { 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 1 }; -COMPILER_STRIP_GATE(0x803A1F80, &j3dDefaultIndTexMtxInfo); /* 803A1F9C-803A1FB0 02E5FC 0014+00 0/0 1/1 0/0 .rodata j3dDefaultTevStageInfo */ -SECTION_RODATA extern J3DTevStageInfo const j3dDefaultTevStageInfo = { +extern J3DTevStageInfo const j3dDefaultTevStageInfo = { 0x04, 0x0A, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, }; -COMPILER_STRIP_GATE(0x803A1F9C, &j3dDefaultTevStageInfo); /* 803A1FB0-803A1FBC 02E610 000C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTevStageInfo */ -SECTION_RODATA extern J3DIndTevStageInfo const j3dDefaultIndTevStageInfo = { +extern J3DIndTevStageInfo const j3dDefaultIndTevStageInfo = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -COMPILER_STRIP_GATE(0x803A1FB0, &j3dDefaultIndTevStageInfo); /* 803A1FBC-803A1FE8 02E61C 002C+00 0/0 3/3 0/0 .rodata j3dDefaultFogInfo */ -SECTION_RODATA extern J3DFogInfo const j3dDefaultFogInfo = { +extern J3DFogInfo const j3dDefaultFogInfo = { 0x00, 0x00, 0x0140, 0.0f, 0.0f, 0.1f, 10000.0f, 0xFF, 0xFF, 0xFF, 0x00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, }; -COMPILER_STRIP_GATE(0x803A1FBC, &j3dDefaultFogInfo); /* 803A1FE8-803A1FF8 02E648 0010+00 0/0 3/3 0/0 .rodata j3dDefaultNBTScaleInfo */ -SECTION_RODATA extern J3DNBTScaleInfo const j3dDefaultNBTScaleInfo = { +extern J3DNBTScaleInfo const j3dDefaultNBTScaleInfo = { 0x00, 1.0f, 1.0f, 1.0f, }; -COMPILER_STRIP_GATE(0x803A1FE8, &j3dDefaultNBTScaleInfo); - -/* 803A1FF8-803A2008 02E658 000B+05 1/1 0/0 0/0 .rodata @1197 */ -SECTION_RODATA static u8 const lit_1197[11 + 5 /* padding */] = { - 0x1E, - 0x21, - 0x24, - 0x27, - 0x2A, - 0x2D, - 0x30, - 0x33, - 0x36, - 0x39, - 0x3C, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x803A1FF8, &lit_1197); /* 80434C98-80436A60 0619B8 1DC7+01 1/1 0/0 0/0 .bss j3dTexCoordTable */ static u8 j3dTexCoordTable[7623 + 1 /* padding */]; @@ -507,11 +401,9 @@ void makeTexCoordTable() { /* ############################################################################################## */ /* 80436A60-80436E60 063780 0400+00 1/1 3/3 0/0 .bss j3dTevSwapTableTable */ -extern u8 j3dTevSwapTableTable[1024]; u8 j3dTevSwapTableTable[1024]; /* 80436E60-80437160 063B80 0300+00 1/1 2/2 0/0 .bss j3dAlphaCmpTable */ -extern u8 j3dAlphaCmpTable[768]; u8 j3dAlphaCmpTable[768]; /* 8032423C-803242A8 31EB7C 006C+00 0/0 1/1 0/0 .text makeAlphaCmpTable__Fv */ @@ -564,67 +456,78 @@ void makeTevSwapTable() { } /* 80324358-803243BC 31EC98 0064+00 1/1 0/0 0/0 .text loadTexMtx__9J3DTexMtxCFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexMtx::loadTexMtx(u32 param_0) const { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTevs/loadTexMtx__9J3DTexMtxCFUl.s" +void J3DTexMtx::loadTexMtx(u32 param_0) const { + GDOverflowCheck(0x35); + J3DGDLoadTexMtxImm((MtxP)mMtx, param_0 * 3 + 30, (_GXTexMtxType)mTexMtxInfo.mProjection); } -#pragma pop /* 803243BC-8032441C 31ECFC 0060+00 1/1 0/0 0/0 .text loadPostTexMtx__9J3DTexMtxCFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexMtx::loadPostTexMtx(u32 param_0) const { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTevs/loadPostTexMtx__9J3DTexMtxCFUl.s" +void J3DTexMtx::loadPostTexMtx(u32 param_0) const { + GDOverflowCheck(0x35); + J3DGDLoadPostTexMtxImm((MtxP)mMtx, param_0 * 3 + 0x40); } -#pragma pop /* 8032441C-8032499C 31ED5C 0580+00 1/1 0/0 0/0 .text J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void J3DGDLoadTexMtxImm(f32 (*param_0)[4], u32 param_1, _GXTexMtxType param_2) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTevs/J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType.s" +static void J3DGDLoadTexMtxImm(f32 (*param_1)[4], u32 param_2, _GXTexMtxType param_3) { + u16 addr = param_2 << 2; + u8 len = param_3 == GX_MTX2x4 ? 8 : 12; + J3DGDWriteXFCmdHdr(addr & 0xffff, len); + J3DGDWrite_f32(param_1[0][0]); + J3DGDWrite_f32(param_1[0][1]); + J3DGDWrite_f32(param_1[0][2]); + J3DGDWrite_f32(param_1[0][3]); + J3DGDWrite_f32(param_1[1][0]); + J3DGDWrite_f32(param_1[1][1]); + J3DGDWrite_f32(param_1[1][2]); + J3DGDWrite_f32(param_1[1][3]); + if (param_3 == GX_MTX3x4) { + J3DGDWrite_f32(param_1[2][0]); + J3DGDWrite_f32(param_1[2][1]); + J3DGDWrite_f32(param_1[2][2]); + J3DGDWrite_f32(param_1[2][3]); + } } -#pragma pop /* 8032499C-80324F08 31F2DC 056C+00 1/1 0/0 0/0 .text J3DGDLoadPostTexMtxImm__FPA4_fUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void J3DGDLoadPostTexMtxImm(f32 (*param_0)[4], u32 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTevs/J3DGDLoadPostTexMtxImm__FPA4_fUl.s" +static void J3DGDLoadPostTexMtxImm(f32 (*param_1)[4], u32 param_2) { + u16 addr = (param_2 - 0x40) * 4 + 0x500; + J3DGDWriteXFCmdHdr(addr, 12); + J3DGDWrite_f32(param_1[0][0]); + J3DGDWrite_f32(param_1[0][1]); + J3DGDWrite_f32(param_1[0][2]); + J3DGDWrite_f32(param_1[0][3]); + J3DGDWrite_f32(param_1[1][0]); + J3DGDWrite_f32(param_1[1][1]); + J3DGDWrite_f32(param_1[1][2]); + J3DGDWrite_f32(param_1[1][3]); + J3DGDWrite_f32(param_1[2][0]); + J3DGDWrite_f32(param_1[2][1]); + J3DGDWrite_f32(param_1[2][2]); + J3DGDWrite_f32(param_1[2][3]); } -#pragma pop /* ############################################################################################## */ /* 804563C0-804563C4 0049C0 0004+00 0/0 4/4 0/0 .sdata2 j3dDefaultColInfo */ -SECTION_SDATA2 extern GXColor j3dDefaultColInfo = {0xFF, 0xFF, 0xFF, 0xFF}; +extern const GXColor j3dDefaultColInfo = {0xFF, 0xFF, 0xFF, 0xFF}; /* 804563C4-804563C8 0049C4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultAmbInfo */ -SECTION_SDATA2 extern u32 j3dDefaultAmbInfo = 0x32323232; +extern const u32 j3dDefaultAmbInfo = 0x32323232; /* 804563C8-804563CC 0049C8 0004+00 0/0 1/1 0/0 .sdata2 None */ -SECTION_SDATA2 extern u8 data_804563C8 = 0x01; +extern const u8 data_804563C8 = 0x01; /* 804563CC-804563D0 0049CC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultTevOrderInfoNull */ -SECTION_SDATA2 extern J3DTevOrderInfo j3dDefaultTevOrderInfoNull = {0xFF, 0xFF, 0xFF, 0x00}; +extern const J3DTevOrderInfo j3dDefaultTevOrderInfoNull = {0xFF, 0xFF, 0xFF, 0x00}; /* 804563D0-804563D4 0049D0 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexOrderNull */ -SECTION_SDATA2 extern J3DIndTexOrderInfo j3dDefaultIndTexOrderNull = {0xFF, 0xFF, 0x00, 0x00}; +extern const J3DIndTexOrderInfo j3dDefaultIndTexOrderNull = {0xFF, 0xFF, 0x00, 0x00}; /* 804563D4-804563D8 0049D4 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevColor */ -SECTION_SDATA2 extern GXColorS10 j3dDefaultTevColor = {0xFF, 0xFF, 0xFF, 0xFF}; +extern const GXColorS10 j3dDefaultTevColor = {0xFF, 0xFF, 0xFF, 0xFF}; /* 804563DC-804563E0 0049DC 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexCoordScaleInfo */ -SECTION_SDATA2 extern J3DIndTexCoordScaleInfo j3dDefaultIndTexCoordScaleInfo = { +extern const J3DIndTexCoordScaleInfo j3dDefaultIndTexCoordScaleInfo = { 0x00, 0x00, 0x00, @@ -632,10 +535,10 @@ SECTION_SDATA2 extern J3DIndTexCoordScaleInfo j3dDefaultIndTexCoordScaleInfo = { }; /* 804563E0-804563E4 0049E0 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevKColor */ -SECTION_SDATA2 extern GXColor j3dDefaultTevKColor = {0xFF, 0xFF, 0xFF, 0xFF}; +extern const GXColor j3dDefaultTevKColor = {0xFF, 0xFF, 0xFF, 0xFF}; /* 804563E4-804563E8 0049E4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapMode */ -SECTION_SDATA2 extern u8 j3dDefaultTevSwapMode[4] = { +extern J3DTevSwapModeInfo const j3dDefaultTevSwapMode = { 0x00, 0x00, 0x00, @@ -643,21 +546,21 @@ SECTION_SDATA2 extern u8 j3dDefaultTevSwapMode[4] = { }; /* 804563E8-804563EC 0049E8 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapModeTable */ -SECTION_SDATA2 extern J3DTevSwapModeTableInfo j3dDefaultTevSwapModeTable = {0x00, 0x01, 0x02, 0x03}; +extern const J3DTevSwapModeTableInfo j3dDefaultTevSwapModeTable = {0x00, 0x01, 0x02, 0x03}; /* 804563EC-804563F0 0049EC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultBlendInfo */ -SECTION_SDATA2 extern const J3DBlendInfo j3dDefaultBlendInfo = {GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP}; +extern const J3DBlendInfo j3dDefaultBlendInfo = {GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP}; /* 804563F0-804563F8 0049F0 0008+00 0/0 3/3 0/0 .sdata2 j3dDefaultColorChanInfo */ -SECTION_SDATA2 extern J3DColorChanInfo j3dDefaultColorChanInfo = { +extern const J3DColorChanInfo j3dDefaultColorChanInfo = { 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0xFF, 0xFF, }; /* 804563F8-804563FA 0049F8 0002+00 0/0 1/1 0/0 .sdata2 None */ -SECTION_SDATA2 extern u16 data_804563F8 = 0x1B00; +extern const u16 data_804563F8 = 0x1B00; /* 804563FA-804563FC 0049FA 0002+00 0/0 1/1 0/0 .sdata2 j3dDefaultAlphaCmpID */ -SECTION_SDATA2 extern const u16 j3dDefaultAlphaCmpID = 0x00E7; +const u16 j3dDefaultAlphaCmpID = 0x00E7; /* 804563FC-80456400 0049FC 0002+02 0/0 3/3 0/0 .sdata2 j3dDefaultZModeID */ -SECTION_SDATA2 extern const u16 j3dDefaultZModeID = 0x0017; +const u16 j3dDefaultZModeID = 0x0017; diff --git a/libs/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp b/libs/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp index 957cb1828b..12a70d343d 100644 --- a/libs/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp +++ b/libs/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp @@ -169,19 +169,16 @@ asm J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* param_0, int param_ } #pragma pop -/* ############################################################################################## */ -/* 804564B8-804564BC 004AB8 0004+00 1/1 0/0 0/0 .sdata2 @1130 */ -SECTION_SDATA2 static u32 lit_1130 = 0xFFFFFFFF; - /* 803337D8-80333834 32E118 005C+00 1/1 0/0 0/0 .text newMatColor__22J3DMaterialFactory_v21CFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DGXColor J3DMaterialFactory_v21::newMatColor(int param_0, int param_1) const { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DMaterialFactory_v21/newMatColor__22J3DMaterialFactory_v21CFii.s" +J3DGXColor J3DMaterialFactory_v21::newMatColor(int i_idx, int i_no) const { + GXColor defaultColor = {0xff,0xff,0xff,0xff}; + J3DGXColor defaultJ3DGXColor = J3DGXColor(defaultColor); + J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + if (mtl_init_data->mMatColorIdx[i_no] != 0xffff) { + return J3DGXColor(mpMatColor[mtl_init_data->mMatColorIdx[i_no]]); + } + return J3DGXColor(defaultJ3DGXColor); } -#pragma pop /* 80333834-8033386C 32E174 0038+00 1/1 0/0 0/0 .text newColorChanNum__22J3DMaterialFactory_v21CFi */ @@ -196,6 +193,17 @@ 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 +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) { + return J3DColorChan(mpColorChanInfo[mtl_init_data->mColorChanIdx[i_no]]); + } else { + return J3DColorChan(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -204,6 +212,7 @@ asm J3DColorChan J3DMaterialFactory_v21::newColorChan(int param_0, int param_1) #include "asm/JSystem/J3DGraphLoader/J3DMaterialFactory_v21/newColorChan__22J3DMaterialFactory_v21CFii.s" } #pragma pop +#endif /* 80333A10-80333A48 32E350 0038+00 1/1 0/0 0/0 .text newTexGenNum__22J3DMaterialFactory_v21CFi */ u32 J3DMaterialFactory_v21::newTexGenNum(int i_idx) const { @@ -265,34 +274,29 @@ J3DTevOrder J3DMaterialFactory_v21::newTevOrder(int i_idx, int i_no) const { } } -/* 80456BC0-80456BC4 000060 0004+00 1/1 0/0 0/0 .sbss2 @1299 */ -SECTION_SBSS2 static GXColorS10 defaultTevColor; - /* 80333C04-80333C74 32E544 0070+00 1/1 0/0 0/0 .text newTevColor__22J3DMaterialFactory_v21CFii */ J3DGXColorS10 J3DMaterialFactory_v21::newTevColor(int i_idx, int i_no) const { + GXColorS10 defaultTevColor = {0,0,0,0}; J3DGXColorS10 dflt = defaultTevColor; J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTevColorIdx[i_no] != 0xffff) { return mpTevColor[mtl_init_data->mTevColorIdx[i_no]]; } else { - return dflt; + return defaultTevColor; } } -/* ############################################################################################## */ -/* 804564BC-804564C0 004ABC 0004+00 1/1 0/0 0/0 .sdata2 @1317 */ -SECTION_SDATA2 static u32 lit_1317 = 0xFFFFFFFF; - /* 80333C74-80333CD0 32E5B4 005C+00 1/1 0/0 0/0 .text newTevKColor__22J3DMaterialFactory_v21CFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DGXColor J3DMaterialFactory_v21::newTevKColor(int param_0, int param_1) const { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DMaterialFactory_v21/newTevKColor__22J3DMaterialFactory_v21CFii.s" +J3DGXColor J3DMaterialFactory_v21::newTevKColor(int i_idx, int param_1) const { + GXColor defaultColor = {0xff,0xff,0xff,0xff}; + J3DGXColor defaultJ3DGXColor = J3DGXColor(defaultColor); + J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + if (mtl_init_data->mTevKColorIdx[param_1] != 0xffff) { + return J3DGXColor(mpTevKColor[mtl_init_data->mTevKColorIdx[param_1]]); + } + return J3DGXColor(defaultJ3DGXColor); } -#pragma pop /* 80333CD0-80333D08 32E610 0038+00 1/1 0/0 0/0 .text newTevStageNum__22J3DMaterialFactory_v21CFi */ @@ -317,14 +321,13 @@ J3DTevStage J3DMaterialFactory_v21::newTevStage(int i_idx, int i_no) const { /* 80333D68-80333E04 32E6A8 009C+00 1/1 0/0 0/0 .text * newTevSwapModeTable__22J3DMaterialFactory_v21CFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DTevSwapModeTable J3DMaterialFactory_v21::newTevSwapModeTable(int param_0, int param_1) const { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DMaterialFactory_v21/newTevSwapModeTable__22J3DMaterialFactory_v21CFii.s" +J3DTevSwapModeTable J3DMaterialFactory_v21::newTevSwapModeTable(int i_idx, int param_1) const { + J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + if (mtl_init_data->mTevSwapModeTableIdx[param_1] != 0xffff) { + return J3DTevSwapModeTable(mpTevSwapModeTableInfo[mtl_init_data->mTevSwapModeTableIdx[param_1]]); + } + return J3DTevSwapModeTable(j3dDefaultTevSwapModeTable); } -#pragma pop /* 80333E04-80333EE0 32E744 00DC+00 1/1 0/0 0/0 .text newFog__22J3DMaterialFactory_v21CFi */ @@ -338,6 +341,16 @@ 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 +J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const { + J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; + if (mtl_init_data->mAlphaCompIdx != 0xffff) { + return J3DAlphaComp(mpAlphaCompInfo[mtl_init_data->mAlphaCompIdx]); + } + return J3DAlphaComp(0xffff); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -346,6 +359,7 @@ asm J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int param_0) const { #include "asm/JSystem/J3DGraphLoader/J3DMaterialFactory_v21/newAlphaComp__22J3DMaterialFactory_v21CFi.s" } #pragma pop +#endif /* 80333F60-80333FA4 32E8A0 0044+00 1/1 0/0 0/0 .text newBlend__22J3DMaterialFactory_v21CFi */ J3DBlend J3DMaterialFactory_v21::newBlend(int i_idx) const { -- cgit v1.2.3