// // Generated by dtk // Translation Unit: J3DMatBlock.cpp // #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphBase/J3DMatBlock.h" #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DStruct.h" #include "JSystem/J3DGraphBase/J3DTevs.h" #include "JSystem/J3DGraphBase/J3DTexture.h" #include "JSystem/J3DGraphBase/J3DTransform.h" #include "dolphin/gd/GDBase.h" #include "dolphin/os/OS.h" #include "dolphin/types.h" #include "string.h" int SizeOfLoadMatColors = 13; int SizeOfLoadAmbColors = 13; int SizeOfLoadColorChans = 21; int SizeOfJ3DColorBlockLightOffLoad = SizeOfLoadMatColors + SizeOfLoadColorChans; int SizeOfJ3DColorBlockAmbientOnLoad = SizeOfLoadMatColors + SizeOfLoadAmbColors + SizeOfLoadColorChans; inline void loadMatColors(const J3DGXColor* color) { J3DGDWriteXFCmdHdr(0x100C, 2); J3DGDWrite_u32(*(u32*)color); J3DGDWrite_u32(*(u32*)(color + 1)); } inline void loadAmbColors(const J3DGXColor* color) { J3DGDWriteXFCmdHdr(0x100A, 2); J3DGDWrite_u32(*(u32*)color); J3DGDWrite_u32(*(u32*)(color + 1)); } inline void loadTexCoordScale(GXTexCoordID coord, const J3DTexCoordScaleInfo& info) { J3DGDSetTexCoordScale2(coord, info.field_0x00, info.field_0x04 == 1, 0, info.field_0x02, info.field_0x06 == 1, 0); } inline void loadTevColor(u32 reg, const J3DGXColorS10& color) { J3DGDSetTevColorS10(GXTevRegID(reg + 1), color.mColor); } inline void loadTevKColor(u32 reg, const J3DGXColor& color) { J3DGDSetTevKColor(GXTevKColorID(reg), color.mColor); } inline void loadZCompLoc(u8 compLoc) { J3DGDSetZCompLoc(compLoc); } /* 802DF794-802DF7E4 .text initialize__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::initialize() { mColorChanNum = 0; for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = j3dDefaultColInfo; mMatColorOffset = 0; mColorChanOffset = 0; } /* 802DF7E4-802DF870 .text initialize__22J3DColorBlockAmbientOnFv */ void J3DColorBlockAmbientOn::initialize() { mColorChanNum = 0; for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = j3dDefaultColInfo; for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) mAmbColor[i] = j3dDefaultAmbInfo; mMatColorOffset = 0; mColorChanOffset = 0; } /* 802DF870-802DF91C .text initialize__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::initialize() { mColorChanNum = 0; for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = j3dDefaultColInfo; for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) mAmbColor[i] = j3dDefaultAmbInfo; for (u32 i = 0; i < ARRAY_SIZE(mLight); i++) mLight[i] = NULL; mMatColorOffset = 0; mColorChanOffset = 0; } /* 802DF91C-802DF94C .text initialize__21J3DTexGenBlockPatchedFv */ void J3DTexGenBlockPatched::initialize() { mTexGenNum = 0; for (u32 i = 0; i < 8; i++) mTexMtx[i] = NULL; mTexMtxOffset = 0; } /* 802DF94C-802DF97C .text initialize__15J3DTexGenBlock4Fv */ void J3DTexGenBlock4::initialize() { mTexGenNum = 0; for (u32 i = 0; i < 4; i++) mTexMtx[i] = NULL; mTexMtxOffset = 0; } /* 802DF97C-802DF9AC .text initialize__19J3DTexGenBlockBasicFv */ void J3DTexGenBlockBasic::initialize() { mTexGenNum = 0; for (u32 i = 0; i < 8; i++) mTexMtx[i] = NULL; mTexMtxOffset = 0; } /* 802DF9AC-802DF9B8 .text initialize__15J3DTevBlockNullFv */ void J3DTevBlockNull::initialize() { mTexNoOffset = 0; } /* 802DF9B8-802DFABC .text initialize__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::initialize() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) mTexNo[i] = 0xFFFF; for (u32 i = 0; i < ARRAY_SIZE(mTevStage); i++) { mTevStage[i].mTevColorReg = 0xC0 + i * 2; mTevStage[i].mTevAlphaReg = 0xC1 + i * 2; } for (u32 i = 0; i < 3; i++) mTevColor[i] = j3dDefaultTevColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) mTevKColor[i] = j3dDefaultTevKColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) mTevKColorSel[i] = GX_TEV_KCSEL_K0; mTevStageNum = 1; mTexNoOffset = 0; mTevRegOffset = 0; } /* 802DFABC-802DFAE4 .text initialize__12J3DTevBlock1Fv */ void J3DTevBlock1::initialize() { mTexNo[0] = 0xFFFF; mTevStage[0].mTevColorReg = 0xC0; mTevStage[0].mTevAlphaReg = 0xC1; mTexNoOffset = 0; } /* 802DFAE4-802DFBBC .text initialize__12J3DTevBlock2Fv */ void J3DTevBlock2::initialize() { mTexNo[0] = 0xFFFF; mTexNo[1] = 0xFFFF; mTevStageNum = 1; mTevStage[0].mTevColorReg = 0xC0; mTevStage[0].mTevAlphaReg = 0xC1; mTevStage[1].mTevColorReg = 0xC2; mTevStage[1].mTevAlphaReg = 0xC3; mTevKColorSel[0] = GX_TEV_KCSEL_K0; mTevKColorSel[1] = GX_TEV_KCSEL_K0; mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A; mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A; for (u32 i = 0; i < 3; i++) mTevColor[i] = j3dDefaultTevColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) mTevKColor[i] = j3dDefaultTevKColor; mTexNoOffset = 0; mTevRegOffset = 0; } /* 802DFBBC-802DFCCC .text initialize__12J3DTevBlock4Fv */ void J3DTevBlock4::initialize() { mTexNo[0] = 0xFFFF; mTexNo[1] = 0xFFFF; mTexNo[2] = 0xFFFF; mTexNo[3] = 0xFFFF; mTevStageNum = 1; mTevStage[0].mTevColorReg = 0xC0; mTevStage[0].mTevAlphaReg = 0xC1; mTevStage[1].mTevColorReg = 0xC2; mTevStage[1].mTevAlphaReg = 0xC3; mTevStage[2].mTevColorReg = 0xC4; mTevStage[2].mTevAlphaReg = 0xC5; mTevStage[3].mTevColorReg = 0xC6; mTevStage[3].mTevAlphaReg = 0xC7; mTevKColorSel[0] = GX_TEV_KCSEL_K0; mTevKColorSel[1] = GX_TEV_KCSEL_K0; mTevKColorSel[2] = GX_TEV_KCSEL_K0; mTevKColorSel[3] = GX_TEV_KCSEL_K0; mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A; mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A; mTevKAlphaSel[2] = GX_TEV_KASEL_K0_A; mTevKAlphaSel[3] = GX_TEV_KASEL_K0_A; for (u32 i = 0; i < 3; i++) mTevColor[i] = j3dDefaultTevColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) mTevKColor[i] = j3dDefaultTevKColor; mTexNoOffset = 0; mTevRegOffset = 0; } /* 802DFCCC-802DFDF0 .text initialize__13J3DTevBlock16Fv */ void J3DTevBlock16::initialize() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) mTexNo[i] = 0xFFFF; mTevStageNum = 1; for (u32 i = 0; i < 3; i++) mTevColor[i] = j3dDefaultTevColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) mTevKColor[i] = j3dDefaultTevKColor; for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) mTevKColorSel[i] = GX_TEV_KCSEL_K0; for (u32 i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) mTevKAlphaSel[i] = GX_TEV_KASEL_K0_A; for (u32 i = 0; i < ARRAY_SIZE(mTevStage); i++) { mTevStage[i].mTevColorReg = 0xC0 + i * 2; mTevStage[i].mTevAlphaReg = 0xC1 + i * 2; } mTexNoOffset = 0; mTevRegOffset = 0; } /* 802DFDF0-802DFDFC .text initialize__15J3DIndBlockFullFv */ void J3DIndBlockFull::initialize() { mIndTexStageNum = 0; } /* 802DFDFC-802DFE20 .text initialize__16J3DPEBlockFogOffFv */ void J3DPEBlockFogOff::initialize() { mAlphaComp.mAlphaCmpID = 0xFFFF; mZMode.mZModeID = 0xFFFF; mZCompLoc = 0xFF; mDither = 1; } /* 802DFE20-802DFE50 .text initialize__14J3DPEBlockFullFv */ void J3DPEBlockFull::initialize() { mFog = NULL; mAlphaComp.mAlphaCmpID = 0xFFFF; mZMode.mZModeID = 0xFFFF; mZCompLoc = 0xFF; mDither = 1; mFogOffset = 0; } /* 802DFE50-802DFE58 .text countDLSize__21J3DColorBlockLightOffFv */ s32 J3DColorBlockLightOff::countDLSize() { return 0x22; } /* 802DFE58-802DFE60 .text countDLSize__22J3DColorBlockAmbientOnFv */ s32 J3DColorBlockAmbientOn::countDLSize() { return 0x2f; } /* 802DFE60-802DFE68 .text countDLSize__20J3DColorBlockLightOnFv */ s32 J3DColorBlockLightOn::countDLSize() { return 0x26f; } /* 802DFE68-802DFE70 .text countDLSize__21J3DTexGenBlockPatchedFv */ s32 J3DTexGenBlockPatched::countDLSize() { return 0x1a8; } /* 802DFE70-802DFE78 .text countDLSize__15J3DTexGenBlock4Fv */ s32 J3DTexGenBlock4::countDLSize() { return 0xfe; } /* 802DFE78-802DFE80 .text countDLSize__19J3DTexGenBlockBasicFv */ s32 J3DTexGenBlockBasic::countDLSize() { return 0x1f2; } /* 802DFE80-802DFE88 .text countDLSize__18J3DTevBlockPatchedFv */ s32 J3DTevBlockPatched::countDLSize() { return 0x230; } /* 802DFE88-802DFE90 .text countDLSize__12J3DTevBlock1Fv */ s32 J3DTevBlock1::countDLSize() { return 0x69; } /* 802DFE90-802DFE98 .text countDLSize__12J3DTevBlock2Fv */ s32 J3DTevBlock2::countDLSize() { return 0x14f; } /* 802DFE98-802DFEA0 .text countDLSize__12J3DTevBlock4Fv */ s32 J3DTevBlock4::countDLSize() { return 0x244; } /* 802DFEA0-802DFEA8 .text countDLSize__13J3DTevBlock16Fv */ s32 J3DTevBlock16::countDLSize() { return 0x3e8; } /* 802DFEA8-802DFEB0 .text countDLSize__15J3DIndBlockFullFv */ s32 J3DIndBlockFull::countDLSize() { return 0x8c; } /* 802DFEB0-802DFEB8 .text countDLSize__13J3DPEBlockOpaFv */ s32 J3DPEBlockOpa::countDLSize() { return 0x1e; } /* 802DFEB8-802DFEC0 .text countDLSize__17J3DPEBlockTexEdgeFv */ s32 J3DPEBlockTexEdge::countDLSize() { return 0x1e; } /* 802DFEC0-802DFEC8 .text countDLSize__13J3DPEBlockXluFv */ s32 J3DPEBlockXlu::countDLSize() { return 0x1e; } /* 802DFEC8-802DFED0 .text countDLSize__16J3DPEBlockFogOffFv */ s32 J3DPEBlockFogOff::countDLSize() { return 0x1e; } /* 802DFED0-802DFED8 .text countDLSize__14J3DPEBlockFullFv */ s32 J3DPEBlockFull::countDLSize() { return 0x55; } /* 802DFED8-802E0438 .text load__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::load() { GDOverflowCheck(SizeOfJ3DColorBlockLightOffLoad); mMatColorOffset = GDGetCurrOffset(); loadMatColors(mMatColor); mColorChanOffset = GDGetCurrOffset(); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); } /* 802E0438-802E0AC0 .text load__22J3DColorBlockAmbientOnFv */ void J3DColorBlockAmbientOn::load() { GDOverflowCheck(SizeOfJ3DColorBlockAmbientOnLoad); mMatColorOffset = GDGetCurrOffset(); loadMatColors(mMatColor); loadAmbColors(mAmbColor); mColorChanOffset = GDGetCurrOffset(); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); } /* 802E0AC0-802E1180 .text load__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::load() { GDOverflowCheck(SizeOfJ3DColorBlockAmbientOnLoad); mMatColorOffset = GDGetCurrOffset(); loadMatColors(mMatColor); loadAmbColors(mAmbColor); mColorChanOffset = GDGetCurrOffset(); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); for (u32 i = 0; i < 8; i++) { if (mLight[i]) { mLight[i]->load(i); } } } /* 802E1180-802E11CC .text patch__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::patch() { patchMatColor(); patchLight(); } /* 802E11CC-802E1378 .text patchMatColor__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::patchMatColor() { GDSetCurrOffset(mMatColorOffset); u8* start = GDGetCurrPointer(); GDOverflowCheck(SizeOfLoadMatColors); loadMatColors(mMatColor); u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E1378-802E17B4 .text patchLight__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::patchLight() { GDSetCurrOffset(mColorChanOffset); u8* start = GDGetCurrPointer(); GDOverflowCheck(SizeOfLoadColorChans); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E17B4-802E1800 .text patch__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::patch() { patchMatColor(); patchLight(); } /* 802E1800-802E19AC .text patchMatColor__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::patchMatColor() { GDSetCurrOffset(mMatColorOffset); u8* start = GDGetCurrPointer(); GDOverflowCheck(SizeOfLoadMatColors); loadMatColors(mMatColor); u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E19AC-802E1E18 .text patchLight__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::patchLight() { GDSetCurrOffset(mColorChanOffset); u8* start = GDGetCurrPointer(); GDOverflowCheck(SizeOfLoadColorChans); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); for (u32 i = 0; i < 8; i++) { if (mLight[i]) { mLight[i]->load(i); } } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E1E18-802E1E80 .text diff__21J3DColorBlockLightOffFUl */ void J3DColorBlockLightOff::diff(u32 flag) { if ((flag & 0x1) != 0) diffMatColor(); if ((flag & 0x2) != 0) diffLight(); } /* 802E1E80-802E1FFC .text diffMatColor__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::diffMatColor() { GDOverflowCheck(SizeOfLoadMatColors); loadMatColors(mMatColor); } /* 802E1FFC-802E2408 .text diffLight__21J3DColorBlockLightOffFv */ void J3DColorBlockLightOff::diffLight() { GDOverflowCheck(SizeOfLoadColorChans); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); } /* 802E2408-802E2478 .text diff__20J3DColorBlockLightOnFUl */ void J3DColorBlockLightOn::diff(u32 flag) { if ((flag & 0x1)) diffMatColor(); if ((flag & 0x2) || (flag >> 4) & 0x0f) diffLight(); } /* 802E2478-802E25F4 .text diffMatColor__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::diffMatColor() { GDOverflowCheck(SizeOfLoadMatColors); loadMatColors(mMatColor); } /* 802E25F4-802E2A38 .text diffLight__20J3DColorBlockLightOnFv */ void J3DColorBlockLightOn::diffLight() { GDOverflowCheck(SizeOfLoadColorChans); J3DGDWriteXFCmdHdr(0x100E, 4); mColorChan[0].load(); mColorChan[2].load(); mColorChan[1].load(); mColorChan[3].load(); for (u32 i = 0; i < ARRAY_SIZE(mLight); i++) if (mLight[i] != NULL) mLight[i]->load(i); } /* 802E2A38-802E2ACC .text load__15J3DTexGenBlock4Fv */ void J3DTexGenBlock4::load() { mTexMtxOffset = GDGetCurrOffset(); for (u32 i = 0; i < 4; i++) { if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { mTexMtx[i]->load(i); } } if (mTexGenNum != 0) { loadTexCoordGens(mTexGenNum, mTexCoord); } } /* 802E2ACC-802E2B60 .text load__19J3DTexGenBlockBasicFv */ void J3DTexGenBlockBasic::load() { mTexMtxOffset = GDGetCurrOffset(); for (u32 i = 0; i < 8; i++) { if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { mTexMtx[i]->load(i); } } if (mTexGenNum != 0) { loadTexCoordGens(mTexGenNum, mTexCoord); } } /* 802E2B60-802E2BF0 .text patch__21J3DTexGenBlockPatchedFv */ void J3DTexGenBlockPatched::patch() { GDSetCurrOffset(mTexMtxOffset); u8* start = GDGetCurrPointer(); for (u32 i = 0; i < 8; i++) { if (mTexMtx[i]) { mTexMtx[i]->load(i); } } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E2BF0-802E2C8C .text patch__15J3DTexGenBlock4Fv */ void J3DTexGenBlock4::patch() { GDSetCurrOffset(mTexMtxOffset); u8* start = GDGetCurrPointer(); for (u32 i = 0; i < 4; i++) { if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { mTexMtx[i]->load(i); } } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E2C8C-802E2D28 .text patch__19J3DTexGenBlockBasicFv */ void J3DTexGenBlockBasic::patch() { GDSetCurrOffset(mTexMtxOffset); u8* start = GDGetCurrPointer(); for (u32 i = 0; i < 8; i++) { if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { mTexMtx[i]->load(i); } } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E2D28-802E2D90 .text diff__21J3DTexGenBlockPatchedFUl */ void J3DTexGenBlockPatched::diff(u32 flag) { if ((flag >> 8) & 0x0f) { diffTexMtx(); if (flag & 0x1000) diffTexGen(); } } /* 802E2D90-802E2DF0 .text diffTexMtx__21J3DTexGenBlockPatchedFv */ void J3DTexGenBlockPatched::diffTexMtx() { for (u32 i = 0; i < ARRAY_SIZE(mTexMtx); ++i) { if (mTexMtx[i] != NULL) { mTexMtx[i]->load(i); } } } /* 802E2DF0-802E2ED0 .text diffTexGen__21J3DTexGenBlockPatchedFv */ void J3DTexGenBlockPatched::diffTexGen() { u32 num = mTexGenNum; if (num > 0) { J3DGDWriteXFCmdHdr(0x1040, num); } for (u32 i = 0; i < num; ++i) { J3DGDSetTexCoordGen((GXTexGenType)mTexCoord[i].mTexGenType, (GXTexGenSrc)mTexCoord[i].mTexGenSrc); } } /* 802E2ED0-802E3110 .text load__12J3DTevBlock1Fv */ void J3DTevBlock1::load() { mTexNoOffset = GDGetCurrOffset(); GDOverflowCheck(0x69); if (mTexNo[0] != 0xffff) { loadTexNo(0, mTexNo[0]); } J3DGDSetTevOrder( GX_TEVSTAGE0, GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan), GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL ); loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); mTevStage[0].load(0); mIndTevStage[0].load(0); } /* 802E3110-802E362C .text load__12J3DTevBlock2Fv */ void J3DTevBlock2::load() { u8 tevStageNum = mTevStageNum; mTexNoOffset = GDGetCurrOffset(); for (u32 i = 0; i < 2; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } J3DGDSetTevOrder( GX_TEVSTAGE0, GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7] ); mTevRegOffset = GDGetCurrOffset(); for (u32 i = 0; i < 3; i++) { loadTevColor(i, mTevColor[i]); } for (u32 i = 0; i < 4; i++) { loadTevKColor(i, mTevKColor[i]); } for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); mIndTevStage[i].load(i); } for (u32 i = 0; i < 16; i += 4) { J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i), GXTevKColorSel(mTevKColorSel[0]), GXTevKAlphaSel(mTevKAlphaSel[0]), GXTevKColorSel(mTevKColorSel[1]), GXTevKAlphaSel(mTevKAlphaSel[1]), GXTevColorChan(mTevSwapModeTable[i / 4].getR()), GXTevColorChan(mTevSwapModeTable[i / 4].getG()) ); J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i + 2), GXTevKColorSel(mTevKColorSel[0]), GXTevKAlphaSel(mTevKAlphaSel[0]), GXTevKColorSel(mTevKColorSel[1]), GXTevKAlphaSel(mTevKAlphaSel[1]), GXTevColorChan(mTevSwapModeTable[i / 4].getB()), GXTevColorChan(mTevSwapModeTable[i / 4].getA()) ); } } /* 802E362C-802E3B70 .text load__12J3DTevBlock4Fv */ void J3DTevBlock4::load() { u8 tevStageNum = mTevStageNum; mTexNoOffset = GDGetCurrOffset(); for (u32 i = 0; i < 4; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } for (u32 i = 0; i < tevStageNum; i += 2) { J3DGDSetTevOrder( GXTevStageID(i), GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } mTevRegOffset = GDGetCurrOffset(); for (u32 i = 0; i < 3; i++) { loadTevColor(i, mTevColor[i]); } for (u32 i = 0; i < 4; i++) { loadTevKColor(i, mTevKColor[i]); } for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); mIndTevStage[i].load(i); } for (u32 i = 0; i < 16; i += 4) { J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i), GXTevKColorSel(mTevKColorSel[0]), GXTevKAlphaSel(mTevKAlphaSel[0]), GXTevKColorSel(mTevKColorSel[1]), GXTevKAlphaSel(mTevKAlphaSel[1]), GXTevColorChan(mTevSwapModeTable[i / 4].getR()), GXTevColorChan(mTevSwapModeTable[i / 4].getG()) ); J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i + 2), GXTevKColorSel(mTevKColorSel[2]), GXTevKAlphaSel(mTevKAlphaSel[2]), GXTevKColorSel(mTevKColorSel[3]), GXTevKAlphaSel(mTevKAlphaSel[3]), GXTevColorChan(mTevSwapModeTable[i / 4].getB()), GXTevColorChan(mTevSwapModeTable[i / 4].getA()) ); } } /* 802E3B70-802E40B8 .text load__13J3DTevBlock16Fv */ void J3DTevBlock16::load() { u8 tevStageNum = mTevStageNum; mTexNoOffset = GDGetCurrOffset(); for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } for (u32 i = 0; i < tevStageNum; i += 2) { J3DGDSetTevOrder( GXTevStageID(i), GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } mTevRegOffset = GDGetCurrOffset(); for (u32 i = 0; i < 3; i++) { loadTevColor(i, mTevColor[i]); } for (u32 i = 0; i < 4; i++) { loadTevKColor(i, mTevKColor[i]); } for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); mIndTevStage[i].load(i); } for (u32 i = 0; i < 16; i += 4) { J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i), GXTevKColorSel(mTevKColorSel[i]), GXTevKAlphaSel(mTevKAlphaSel[i]), GXTevKColorSel(mTevKColorSel[i + 1]), GXTevKAlphaSel(mTevKAlphaSel[i + 1]), GXTevColorChan(mTevSwapModeTable[i / 4].getR()), GXTevColorChan(mTevSwapModeTable[i / 4].getG()) ); J3DGDSetTevKonstantSel_SwapModeTable( GXTevStageID(i + 2), GXTevKColorSel(mTevKColorSel[i + 2]), GXTevKAlphaSel(mTevKAlphaSel[i + 2]), GXTevKColorSel(mTevKColorSel[i + 3]), GXTevKAlphaSel(mTevKAlphaSel[i + 3]), GXTevColorChan(mTevSwapModeTable[i / 4].getB()), GXTevColorChan(mTevSwapModeTable[i / 4].getA()) ); } } /* 802E40B8-802E414C .text patchTexNo__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patchTexNo() { GDSetCurrOffset(mTexNoOffset); u8* start = GDGetCurrPointer(); for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E414C-802E4218 .text patchTevReg__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patchTevReg() { GDSetCurrOffset(mTevRegOffset); u8 *pStart = GDGetCurrPointer(); for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E4218-802E4394 .text patchTexNoAndTexCoordScale__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patchTexNoAndTexCoordScale() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } for (u32 i = 0; i < tevStageNum; i += 2) { J3DGDSetTevOrder( GXTevStageID(i), GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4394-802E43E0 .text patch__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::patch() { patchTexNo(); patchTevReg(); } /* 802E43E0-802E4450 .text patchTexNo__12J3DTevBlock1Fv */ void J3DTevBlock1::patchTexNo() { GDSetCurrOffset(mTexNoOffset); u8 *pStart = GDGetCurrPointer(); if (mTexNo[0] != 0xFFFF) loadTexNo(0, mTexNo[0]); u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E4450-802E4454 .text patchTevReg__12J3DTevBlock1Fv */ void J3DTevBlock1::patchTevReg() { } /* 802E4454-802E4538 .text patchTexNoAndTexCoordScale__12J3DTevBlock1Fv */ void J3DTevBlock1::patchTexNoAndTexCoordScale() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); if (mTexNo[0] != 0xffff) { loadTexNo(0, mTexNo[0]); } J3DGDSetTevOrder( GX_TEVSTAGE0, GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan), GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL ); loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4538-802E4564 .text patch__12J3DTevBlock1Fv */ void J3DTevBlock1::patch() { patchTexNo(); } /* 802E4564-802E45F8 .text patchTexNo__12J3DTevBlock2Fv */ void J3DTevBlock2::patchTexNo() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); for (u32 i = 0; i < 2; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E45F8-802E46C4 .text patchTevReg__12J3DTevBlock2Fv */ void J3DTevBlock2::patchTevReg() { GDSetCurrOffset(mTevRegOffset); u8 *pStart = GDGetCurrPointer(); for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E46C4-802E4814 .text patchTexNoAndTexCoordScale__12J3DTevBlock2Fv */ void J3DTevBlock2::patchTexNoAndTexCoordScale() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); for (u32 i = 0; i < 2; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } J3DGDSetTevOrder( GX_TEVSTAGE0, GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7] ); u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4814-802E4860 .text patch__12J3DTevBlock2Fv */ void J3DTevBlock2::patch() { patchTexNo(); patchTevReg(); } /* 802E4860-802E48F4 .text patchTexNo__12J3DTevBlock4Fv */ void J3DTevBlock4::patchTexNo() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); for (u32 i = 0; i < 4; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E48F4-802E49C0 .text patchTevReg__12J3DTevBlock4Fv */ void J3DTevBlock4::patchTevReg() { GDSetCurrOffset(mTevRegOffset); u8 *pStart = GDGetCurrPointer(); for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E49C0-802E4B3C .text patchTexNoAndTexCoordScale__12J3DTevBlock4Fv */ void J3DTevBlock4::patchTexNoAndTexCoordScale() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } for (u32 i = 0; i < tevStageNum; i += 2) { J3DGDSetTevOrder( GXTevStageID(i), GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4B3C-802E4B88 .text patch__12J3DTevBlock4Fv */ void J3DTevBlock4::patch() { patchTexNo(); patchTevReg(); } /* 802E4B88-802E4C1C .text patchTexNo__13J3DTevBlock16Fv */ void J3DTevBlock16::patchTexNo() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4C1C-802E4CE8 .text patchTevReg__13J3DTevBlock16Fv */ void J3DTevBlock16::patchTevReg() { GDSetCurrOffset(mTevRegOffset); u8 *pStart = GDGetCurrPointer(); for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E4CE8-802E4E64 .text patchTexNoAndTexCoordScale__13J3DTevBlock16Fv */ void J3DTevBlock16::patchTexNoAndTexCoordScale() { GDSetCurrOffset(mTexNoOffset); u8 *start = GDGetCurrPointer(); u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xffff) { loadTexNo(i, mTexNo[i]); } } for (u32 i = 0; i < tevStageNum; i += 2) { J3DGDSetTevOrder( GXTevStageID(i), GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan), GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord), GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap), GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan) ); loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } u8 *end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E4E64-802E4EB0 .text patch__13J3DTevBlock16Fv */ void J3DTevBlock16::patch() { patchTexNo(); patchTevReg(); } /* 802E4EB0-802E4F6C .text diff__11J3DTevBlockFUl */ void J3DTevBlock::diff(u32 flag) { if ((flag >> 16) & 0x0f) diffTexNo(); if (flag & 0x4000000) diffTexCoordScale(); if ((flag >> 20) & 0x0f) { diffTevStage(); if (flag & 0x8000000) diffTevStageIndirect(); } if (flag & 0x01000000) diffTevReg(); } /* 802E4F6C-802E4FD0 .text diffTexNo__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTexNo() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) if (mTexNo[i] != 0xFFFF) loadTexNo(i, mTexNo[i]); } /* 802E4FD0-802E50E4 .text diffTevStage__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTevStage() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); } } /* 802E50E4-802E5194 .text diffTevStageIndirect__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTevStageIndirect() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mIndTevStage[i].load(i); } } /* 802E5194-802E5230 .text diffTevReg__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTevReg() { for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); } /* 802E5230-802E5328 .text diffTexCoordScale__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::diffTexCoordScale() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i += 2) { loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } } /* 802E5328-802E5360 .text diffTexNo__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTexNo() { if (mTexNo[0] != 0xFFFF) loadTexNo(0, mTexNo[0]); } /* 802E5360-802E5364 .text diffTevReg__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTevReg() { } /* 802E5364-802E5454 .text diffTevStage__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTevStage() { mTevStage[0].load(0); } /* 802E5454-802E54D4 .text diffTevStageIndirect__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTevStageIndirect() { mIndTevStage[0].load(0); } /* 802E54D4-802E553C .text diffTexCoordScale__12J3DTevBlock1Fv */ void J3DTevBlock1::diffTexCoordScale() { loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); } /* 802E553C-802E55A0 .text diffTexNo__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTexNo() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) if (mTexNo[i] != 0xFFFF) loadTexNo(i, mTexNo[i]); } /* 802E55A0-802E563C .text diffTevReg__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTevReg() { for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); } /* 802E563C-802E5750 .text diffTevStage__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTevStage() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); } } /* 802E5750-802E5800 .text diffTevStageIndirect__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTevStageIndirect() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mIndTevStage[i].load(i); } } /* 802E5800-802E58C4 .text diffTexCoordScale__12J3DTevBlock2Fv */ void J3DTevBlock2::diffTexCoordScale() { loadTexCoordScale( GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord), J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7] ); } /* 802E58C4-802E5928 .text diffTexNo__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTexNo() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) if (mTexNo[i] != 0xFFFF) loadTexNo(i, mTexNo[i]); } /* 802E5928-802E59C4 .text diffTevReg__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTevReg() { for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); } /* 802E59C4-802E5AD8 .text diffTevStage__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTevStage() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); } } /* 802E5AD8-802E5B88 .text diffTevStageIndirect__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTevStageIndirect() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mIndTevStage[i].load(i); } } /* 802E5B88-802E5C80 .text diffTexCoordScale__12J3DTevBlock4Fv */ void J3DTevBlock4::diffTexCoordScale() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i += 2) { loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } } /* 802E5C80-802E5CE4 .text diffTexNo__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTexNo() { for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) if (mTexNo[i] != 0xFFFF) loadTexNo(i, mTexNo[i]); } /* 802E5CE4-802E5D80 .text diffTevReg__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTevReg() { for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i].mColor); for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i].mColor); } /* 802E5D80-802E5E94 .text diffTevStage__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTevStage() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mTevStage[i].load(i); } } /* 802E5E94-802E5F44 .text diffTevStageIndirect__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTevStageIndirect() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i++) { mIndTevStage[i].load(i); } } /* 802E5F44-802E603C .text diffTexCoordScale__13J3DTevBlock16Fv */ void J3DTevBlock16::diffTexCoordScale() { u8 tevStageNum = mTevStageNum; for (u32 i = 0; i < tevStageNum; i += 2) { loadTexCoordScale( GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7] ); loadTexCoordScale( GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7), J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7] ); } } /* 802E603C-802E6120 .text ptrToIndex__13J3DTevBlock16Fv */ void J3DTevBlock16::ptrToIndex() { GDSetCurrOffset(mTexNoOffset); u8* pStart = GDGetCurrPointer(); u32 offs = 0; for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xFFFF) { GDSetCurrOffset(mTexNoOffset + offs); patchTexNo_PtrToIdx(i, mTexNo[i]); offs += 0x14; if (j3dSys.getTexture()->getResTIMG(mTexNo[i])->indexTexture == 1) offs += 0x23; } } u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E6120-802E6204 .text ptrToIndex__18J3DTevBlockPatchedFv */ void J3DTevBlockPatched::ptrToIndex() { GDSetCurrOffset(mTexNoOffset); u8* pStart = GDGetCurrPointer(); u32 offs = 0; for (u32 i = 0; i < 8; i++) { if (mTexNo[i] != 0xFFFF) { GDSetCurrOffset(mTexNoOffset + offs); patchTexNo_PtrToIdx(i, mTexNo[i]); offs += 0x14; if (j3dSys.getTexture()->getResTIMG(mTexNo[i])->indexTexture == 1) offs += 0x23; } } u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E6204-802E6298 .text indexToPtr_private__11J3DTevBlockFUl */ void J3DTevBlock::indexToPtr_private(u32 offs) { GDSetCurrOffset(offs); u8* pStart = GDGetCurrPointer(); for (u32 i = 0; ; i++) { u8* pDL = GDGetCurrPointer(); if (!isTexNoReg(pDL)) break; u16 texNoReg = getTexNoReg(pDL); loadTexNo(i, texNoReg); } u8 *pEnd = GDGetCurrPointer(); DCFlushRange(pStart, pEnd - pStart); } /* 802E6298-802E6494 .text load__15J3DIndBlockFullFv */ void J3DIndBlockFull::load() { /* Nonmatching - regalloc */ u8 indTexStageNum = mIndTexStageNum; for (u32 i = 0; i < indTexStageNum; i++) { mIndTexMtx[i].load(i); } for (u32 i = 0; i < indTexStageNum; i += 2) { J3DGDSetIndTexCoordScale( GXIndTexStageID(i), GXIndTexScale(mIndTexCoordScale[i].getScaleS()), GXIndTexScale(mIndTexCoordScale[i].getScaleT()), GXIndTexScale(mIndTexCoordScale[i + 1].getScaleS()), GXIndTexScale(mIndTexCoordScale[i + 1].getScaleT()) ); } loadTexCoordScale(GXTexCoordID(mIndTexOrder[0].getCoord()), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]); loadTexCoordScale(GXTexCoordID(mIndTexOrder[1].getCoord()), J3DSys::sTexCoordScaleTable[mIndTexOrder[1].getMap() & 7]); loadTexCoordScale(GXTexCoordID(mIndTexOrder[2].getCoord()), J3DSys::sTexCoordScaleTable[mIndTexOrder[2].getMap() & 7]); loadTexCoordScale(GXTexCoordID(mIndTexOrder[3].getCoord()), J3DSys::sTexCoordScaleTable[mIndTexOrder[3].getMap() & 7]); J3DGDSetIndTexOrder( indTexStageNum, GXTexCoordID(mIndTexOrder[0].getCoord()), GXTexMapID(mIndTexOrder[0].getMap()), GXTexCoordID(mIndTexOrder[1].getCoord()), GXTexMapID(mIndTexOrder[1].getMap()), GXTexCoordID(mIndTexOrder[2].getCoord()), GXTexMapID(mIndTexOrder[2].getMap()), GXTexCoordID(mIndTexOrder[3].getCoord()), GXTexMapID(mIndTexOrder[3].getMap()) ); } /* 802E6494-802E657C .text diff__15J3DIndBlockFullFUl */ void J3DIndBlockFull::diff(u32 flag) { /* Nonmatching - regalloc */ if ((flag & 0x08000000) == 0) { return; } u8 indTexStageNum = mIndTexStageNum; J3DGDSetIndTexStageNum(indTexStageNum); mIndTexMtx[0].load(0); J3DGDSetIndTexCoordScale( GX_INDTEXSTAGE0, GXIndTexScale(mIndTexCoordScale[0].getScaleS()), GXIndTexScale(mIndTexCoordScale[0].getScaleT()), GXIndTexScale(mIndTexCoordScale[1].getScaleS()), GXIndTexScale(mIndTexCoordScale[1].getScaleT()) ); loadTexCoordScale(GXTexCoordID(mIndTexOrder[0].getCoord()), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]); J3DGDSetIndTexOrder( indTexStageNum, GXTexCoordID(mIndTexOrder[0].getCoord()), GXTexMapID(mIndTexOrder[0].getMap()), GXTexCoordID(mIndTexOrder[1].getCoord()), GXTexMapID(mIndTexOrder[1].getMap()), GXTexCoordID(mIndTexOrder[2].getCoord()), GXTexMapID(mIndTexOrder[2].getMap()), GXTexCoordID(mIndTexOrder[3].getCoord()), GXTexMapID(mIndTexOrder[3].getMap()) ); } /* 802E657C-802E683C .text load__13J3DPEBlockOpaFv */ void J3DPEBlockOpa::load() { GDOverflowCheck(0x1e); J3DGDSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); J3DGDSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_COPY); J3DGDSetZMode(1, GX_LEQUAL, 1); J3DGDSetZCompLoc(1); } /* 802E683C-802E6B04 .text load__17J3DPEBlockTexEdgeFv */ void J3DPEBlockTexEdge::load() { GDOverflowCheck(0x1e); J3DGDSetAlphaCompare(GX_GEQUAL, 0x80, GX_AOP_AND, GX_LEQUAL, 0xff); J3DGDSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_COPY); J3DGDSetZMode(1, GX_LEQUAL, 1); J3DGDSetZCompLoc(0); } /* 802E6B04-802E6DC8 .text load__13J3DPEBlockXluFv */ void J3DPEBlockXlu::load() { GDOverflowCheck(0x1e); J3DGDSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND,GX_ALWAYS, 0); J3DGDSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_COPY); J3DGDSetZMode(1, GX_LEQUAL, 0); J3DGDSetZCompLoc(1); } /* 802E6DC8-802E7250 .text load__16J3DPEBlockFogOffFv */ void J3DPEBlockFogOff::load() { GDOverflowCheck(0x1e); mAlphaComp.load(); mBlend.load(mDither); mZMode.load(); loadZCompLoc(mZCompLoc); } /* 802E7250-802E7538 .text diffBlend__16J3DPEBlockFogOffFv */ void J3DPEBlockFogOff::diffBlend() { GDOverflowCheck(0xf); mBlend.load(mDither); mZMode.load(); } /* 802E7538-802E7A1C .text load__14J3DPEBlockFullFv */ void J3DPEBlockFull::load() { mFogOffset = GDGetCurrOffset(); GDOverflowCheck(0x55); if (mFog) { mFog->load(); } mAlphaComp.load(); mBlend.load(mDither); mZMode.load(); loadZCompLoc(mZCompLoc); } /* 802E7A1C-802E7AD8 .text patch__14J3DPEBlockFullFv */ void J3DPEBlockFull::patch() { GDSetCurrOffset(mFogOffset); GDOverflowCheck(0x37); u8* start = GDGetCurrPointer(); if (mFog) { mFog->load(); } u8* end = GDGetCurrPointer(); DCFlushRange(start, end - start); } /* 802E7AD8-802E7B5C .text diffFog__14J3DPEBlockFullFv */ void J3DPEBlockFull::diffFog() { GDOverflowCheck(0x37); if (mFog) { mFog->load(); } } /* 802E7B5C-802E7E44 .text diffBlend__14J3DPEBlockFullFv */ void J3DPEBlockFull::diffBlend() { GDOverflowCheck(0xf); mBlend.load(mDither); mZMode.load(); } /* 802E7E44-802E7EAC .text diff__14J3DPEBlockFullFUl */ void J3DPEBlockFull::diff(u32 flag) { if ((flag & 0x10000000)) diffFog(); if ((flag & 0x20000000)) diffBlend(); } /* 802E7EAC-802E7F88 .text reset__21J3DColorBlockLightOffFP13J3DColorBlock */ void J3DColorBlockLightOff::reset(J3DColorBlock* pBlock) { mColorChanNum = pBlock->getColorChanNum(); for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = *pBlock->getMatColor(i); for (u32 i = 0; i < ARRAY_SIZE(mColorChan); i++) mColorChan[i] = *pBlock->getColorChan(i); } /* 802E7F88-802E80D8 .text reset__22J3DColorBlockAmbientOnFP13J3DColorBlock */ void J3DColorBlockAmbientOn::reset(J3DColorBlock* pBlock) { mColorChanNum = pBlock->getColorChanNum(); for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = *pBlock->getMatColor(i); for (u32 i = 0; i < ARRAY_SIZE(mColorChan); i++) mColorChan[i] = *pBlock->getColorChan(i); for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) if (pBlock->getAmbColor(i) != NULL) mAmbColor[i] = *pBlock->getAmbColor(i); } /* 802E80D8-802E8228 .text reset__20J3DColorBlockLightOnFP13J3DColorBlock */ void J3DColorBlockLightOn::reset(J3DColorBlock* pBlock) { mColorChanNum = pBlock->getColorChanNum(); for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) mMatColor[i] = *pBlock->getMatColor(i); for (u32 i = 0; i < ARRAY_SIZE(mColorChan); i++) mColorChan[i] = *pBlock->getColorChan(i); for (u32 i = 0; i < ARRAY_SIZE(mAmbColor); i++) if (pBlock->getAmbColor(i) != NULL) mAmbColor[i] = *pBlock->getAmbColor(i); } /* 802E8228-802E8354 .text reset__21J3DTexGenBlockPatchedFP14J3DTexGenBlock */ void J3DTexGenBlockPatched::reset(J3DTexGenBlock* pBlock) { mTexGenNum = pBlock->getTexGenNum(); for (u32 i = 0; i < 8; i++) mTexCoord[i] = *pBlock->getTexCoord(i); for (u32 i = 0; i < 8; i++) { if (pBlock->getTexMtx(i) != NULL) { if (mTexMtx[i] != NULL) { memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i])); DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i])); } else { OSReport("Error : TexMtx[%d] is Null.\n", i); } } } } /* 802E8354-802E84B4 .text reset__15J3DTexGenBlock4FP14J3DTexGenBlock */ void J3DTexGenBlock4::reset(J3DTexGenBlock* pBlock) { mTexGenNum = pBlock->getTexGenNum(); for (u32 i = 0; i < 4; i++) mTexCoord[i] = *pBlock->getTexCoord(i); for (u32 i = 0; i < 4; i++) { if (pBlock->getTexMtx(i) != NULL) { if (mTexMtx[i] != NULL) { memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i])); DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i])); } else { OSReport("Error : TexMtx[%d] is Null.\n", i); } } } mNBTScale = *pBlock->getNBTScale(); } /* 802E84B4-802E8614 .text reset__19J3DTexGenBlockBasicFP14J3DTexGenBlock */ void J3DTexGenBlockBasic::reset(J3DTexGenBlock* pBlock) { mTexGenNum = pBlock->getTexGenNum(); for (u32 i = 0; i < 8; i++) mTexCoord[i] = *pBlock->getTexCoord(i); for (u32 i = 0; i < 8; i++) { if (pBlock->getTexMtx(i) != NULL) { if (mTexMtx[i] != NULL) { memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i])); DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i])); } else { OSReport("Error : TexMtx[%d] is Null.\n", i); } } } mNBTScale = *pBlock->getNBTScale(); } /* 802E8614-802E87D0 .text reset__18J3DTevBlockPatchedFP11J3DTevBlock */ void J3DTevBlockPatched::reset(J3DTevBlock* pBlock) { mTevStageNum = pBlock->getTevStageNum(); for (u32 i = 0; i < 8; i++) mTexNo[i] = pBlock->getTexNo(i); for (u32 i = 0; i < 4; i++) mTevColor[i] = *pBlock->getTevColor(i); for (u32 i = 0; i < 4; i++) mTevKColor[i] = *pBlock->getTevKColor(i); for (u32 i = 0; i < 8; i++) { mTevStage[i] = *pBlock->getTevStage(i); mIndTevStage[i] = *pBlock->getIndTevStage(i); } } /* 802E87D0-802E88B8 .text reset__12J3DTevBlock1FP11J3DTevBlock */ void J3DTevBlock1::reset(J3DTevBlock* pBlock) { mTexNo[0] = pBlock->getTexNo(0); mTevOrder[0] = *pBlock->getTevOrder(0); mTevStage[0] = *pBlock->getTevStage(0); mIndTevStage[0] = *pBlock->getIndTevStage(0); } /* 802E88B8-802E8BB8 .text reset__12J3DTevBlock2FP11J3DTevBlock */ void J3DTevBlock2::reset(J3DTevBlock* pBlock) { mTevStageNum = pBlock->getTevStageNum(); mTexNo[0] = pBlock->getTexNo(0); mTexNo[1] = pBlock->getTexNo(1); mTevStage[0] = *pBlock->getTevStage(0); mTevStage[1] = *pBlock->getTevStage(1); mIndTevStage[0] = *pBlock->getIndTevStage(0); mIndTevStage[1] = *pBlock->getIndTevStage(1); mTevOrder[0] = *pBlock->getTevOrder(0); mTevOrder[1] = *pBlock->getTevOrder(1); mTevKColorSel[0] = pBlock->getTevKColorSel(0); mTevKColorSel[1] = pBlock->getTevKColorSel(1); mTevKAlphaSel[0] = pBlock->getTevKAlphaSel(0); mTevKAlphaSel[1] = pBlock->getTevKAlphaSel(1); for (u32 i = 0; i < 4; i++) mTevColor[i] = *pBlock->getTevColor(i); for (u32 i = 0; i < 4; i++) mTevKColor[i] = *pBlock->getTevKColor(i); for (u32 i = 0; i < 4; i++) mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i); } /* 802E8BB8-802E9090 .text reset__12J3DTevBlock4FP11J3DTevBlock */ void J3DTevBlock4::reset(J3DTevBlock* pBlock) { mTevStageNum = pBlock->getTevStageNum(); mTexNo[0] = pBlock->getTexNo(0); mTexNo[1] = pBlock->getTexNo(1); mTexNo[2] = pBlock->getTexNo(2); mTexNo[3] = pBlock->getTexNo(3); mTevStage[0] = *pBlock->getTevStage(0); mTevStage[1] = *pBlock->getTevStage(1); mTevStage[2] = *pBlock->getTevStage(2); mTevStage[3] = *pBlock->getTevStage(3); mIndTevStage[0] = *pBlock->getIndTevStage(0); mIndTevStage[1] = *pBlock->getIndTevStage(1); mIndTevStage[2] = *pBlock->getIndTevStage(2); mIndTevStage[3] = *pBlock->getIndTevStage(3); mTevOrder[0] = *pBlock->getTevOrder(0); mTevOrder[1] = *pBlock->getTevOrder(1); mTevOrder[2] = *pBlock->getTevOrder(2); mTevOrder[3] = *pBlock->getTevOrder(3); mTevKColorSel[0] = pBlock->getTevKColorSel(0); mTevKColorSel[1] = pBlock->getTevKColorSel(1); mTevKColorSel[2] = pBlock->getTevKColorSel(2); mTevKColorSel[3] = pBlock->getTevKColorSel(3); mTevKAlphaSel[0] = pBlock->getTevKAlphaSel(0); mTevKAlphaSel[1] = pBlock->getTevKAlphaSel(1); mTevKAlphaSel[2] = pBlock->getTevKAlphaSel(2); mTevKAlphaSel[3] = pBlock->getTevKAlphaSel(3); for (u32 i = 0; i < 4; i++) mTevColor[i] = *pBlock->getTevColor(i); for (u32 i = 0; i < 4; i++) mTevKColor[i] = *pBlock->getTevKColor(i); for (u32 i = 0; i < 4; i++) mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i); } /* 802E9090-802E932C .text reset__13J3DTevBlock16FP11J3DTevBlock */ void J3DTevBlock16::reset(J3DTevBlock* pBlock) { mTevStageNum = pBlock->getTevStageNum(); for (u32 i = 0; i < 8; i++) mTexNo[i] = pBlock->getTexNo(i); for (u32 i = 0; i < 16; i++) mTevOrder[i] = *pBlock->getTevOrder(i); for (u32 i = 0; i < 16; i++) { mTevStage[i] = *pBlock->getTevStage(i); mIndTevStage[i] = *pBlock->getIndTevStage(i); } for (u32 i = 0; i < 4; i++) mTevColor[i] = *pBlock->getTevColor(i); for (u32 i = 0; i < 4; i++) mTevKColor[i] = *pBlock->getTevKColor(i); for (u32 i = 0; i < 16; i++) mTevKColorSel[i] = pBlock->getTevKColorSel(i); for (u32 i = 0; i < 16; i++) mTevKAlphaSel[i] = pBlock->getTevKAlphaSel(i); for (u32 i = 0; i < 4; i++) mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i); } /* 802E932C-802E947C .text reset__15J3DIndBlockFullFP11J3DIndBlock */ void J3DIndBlockFull::reset(J3DIndBlock* pBlock) { mIndTexStageNum = pBlock->getIndTexStageNum(); for (u32 i = 0; i < 4; i++) mIndTexOrder[i] = *pBlock->getIndTexOrder(i); for (u32 i = 0; i < 3; i++) mIndTexMtx[i] = *pBlock->getIndTexMtx(i); for (u32 i = 0; i < 4; i++) mIndTexCoordScale[i] = *pBlock->getIndTexCoordScale(i); } /* 802E947C-802E957C .text reset__16J3DPEBlockFogOffFP10J3DPEBlock */ void J3DPEBlockFogOff::reset(J3DPEBlock* pBlock) { switch (pBlock->getType()) { case 'PEFL': case 'PEFG': mAlphaComp = *pBlock->getAlphaComp(); mBlend = *pBlock->getBlend(); mZMode = *pBlock->getZMode(); mZCompLoc = pBlock->getZCompLoc(); break; } } /* 802E957C-802E96C8 .text reset__14J3DPEBlockFullFP10J3DPEBlock */ void J3DPEBlockFull::reset(J3DPEBlock* pBlock) { if (pBlock->getFog() != NULL) { memcpy(mFog, pBlock->getFog(), sizeof(*mFog)); DCStoreRange(mFog, sizeof(*mFog)); } switch (pBlock->getType()) { case 'PEFL': case 'PEFG': mAlphaComp = *pBlock->getAlphaComp(); mBlend = *pBlock->getBlend(); mZMode = *pBlock->getZMode(); mZCompLoc = pBlock->getZCompLoc(); break; } } /* 802E96C8-802E9920 .text calc__21J3DTexGenBlockPatchedFPA4_Cf */ void J3DTexGenBlockPatched::calc(const Mtx modelMtx) { if (!j3dSys.checkFlag(J3DSysFlag_SkinPosCpu) || !j3dSys.checkFlag(J3DSysFlag_SkinNrmCpu)) { for (s32 i = 0; i < (s32)ARRAY_SIZE(mTexMtx); i++) { if (mTexMtx[i] == NULL) continue; u32 mode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x7F; if (mode == J3DTexMtxMode_EnvmapOld || mode == J3DTexMtxMode_Envmap || mode == J3DTexMtxMode_EnvmapBasic) { Mtx viewMtx; MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx); viewMtx[0][3] = 0.0f; viewMtx[1][3] = 0.0f; viewMtx[2][3] = 0.0f; mTexMtx[i]->setViewMtx(viewMtx); } else if (mode == J3DTexMtxMode_Projmap || mode == J3DTexMtxMode_ProjmapBasic) { mTexMtx[i]->setViewMtx(modelMtx); } else if (mode == J3DTexMtxMode_ViewProjmap || mode == J3DTexMtxMode_ViewProjmapBasic) { Mtx viewMtx; MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx); mTexMtx[i]->setViewMtx(viewMtx); } else if (mode == J3DTexMtxMode_EnvmapOldEffectMtx || mode == J3DTexMtxMode_EnvmapEffectMtx || mode == J3DTexMtxMode_Unknown5) { mTexMtx[i]->setViewMtx(modelMtx); mTexMtx[i]->getViewMtx()[0][3] = 0.0f; mTexMtx[i]->getViewMtx()[1][3] = 0.0f; mTexMtx[i]->getViewMtx()[2][3] = 0.0f; } mTexMtx[i]->calc(); } } else { for (s32 i = 0; i < (s32)ARRAY_SIZE(mTexMtx); i++) { if (mTexMtx[i] == NULL) continue; u32 mode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x7F; if (mode == J3DTexMtxMode_Envmap || mode == J3DTexMtxMode_EnvmapOld || mode == J3DTexMtxMode_EnvmapBasic) { Mtx viewMtx; MTXCopy(j3dSys.getViewMtx(), viewMtx); viewMtx[0][3] = 0.0f; viewMtx[1][3] = 0.0f; viewMtx[2][3] = 0.0f; mTexMtx[i]->setViewMtx(viewMtx); } else if (mode == J3DTexMtxMode_Projmap || mode == J3DTexMtxMode_ProjmapBasic) { mTexMtx[i]->setViewMtx(j3dDefaultMtx); } else if (mode == J3DTexMtxMode_ViewProjmap || mode == J3DTexMtxMode_ViewProjmapBasic) { mTexMtx[i]->setViewMtx(j3dSys.getViewMtx()); } else if (mode == J3DTexMtxMode_EnvmapOldEffectMtx || mode == J3DTexMtxMode_EnvmapEffectMtx || mode == J3DTexMtxMode_Unknown5) { mTexMtx[i]->setViewMtx(j3dDefaultMtx); } mTexMtx[i]->calc(); } } }