Files
tww/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
T
2023-10-01 23:06:58 -07:00

1871 lines
61 KiB
C++

//
// Generated by dtk
// Translation Unit: J3DMatBlock.cpp
//
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "JSystem/J3DGraphBase/J3DMatBlock.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphBase/J3DStruct.h"
#include "JSystem/J3DGraphBase/J3DTevs.h"
#include "dolphin/gd/GDBase.h"
#include "dolphin/os/OS.h"
#include "dolphin/types.h"
#include "MSL_C/string.h"
inline GXAttnFn J3DColorChan::getAttnFn() {
u8 attnFnTbl[] = { GX_AF_NONE, GX_AF_SPEC, GX_AF_NONE, GX_AF_SPOT };
return GXAttnFn(attnFnTbl[mChanCtrl >> 9 & 0x03]);
}
extern bool isTexNoReg(void*);
extern u16 getTexNoReg(void*);
extern void loadTexNo(u32, const u16 &);
extern void J3DGDSetTevColorS10(GXTevRegID, GXColorS10);
extern void J3DGDSetTevKColor(GXTevKColorID, GXColor);
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].field_0x0 = 0xC0 + i * 2;
mTevStage[i].field_0x4 = 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].field_0x0 = 0xC0;
mTevStage[0].field_0x4 = 0xC1;
mTexNoOffset = 0;
}
/* 802DFAE4-802DFBBC .text initialize__12J3DTevBlock2Fv */
void J3DTevBlock2::initialize() {
mTexNo[0] = 0xFFFF;
mTexNo[1] = 0xFFFF;
mTevStageNum = 1;
mTevStage[0].field_0x0 = 0xC0;
mTevStage[0].field_0x4 = 0xC1;
mTevStage[1].field_0x0 = 0xC2;
mTevStage[1].field_0x4 = 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].field_0x0 = 0xC0;
mTevStage[0].field_0x4 = 0xC1;
mTevStage[1].field_0x0 = 0xC2;
mTevStage[1].field_0x4 = 0xC3;
mTevStage[2].field_0x0 = 0xC4;
mTevStage[2].field_0x4 = 0xC5;
mTevStage[3].field_0x0 = 0xC6;
mTevStage[3].field_0x4 = 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].field_0x0 = 0xC0 + i * 2;
mTevStage[i].field_0x4 = 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();
/* Nonmatching */
}
/* 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();
/* Nonmatching */
}
/* 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);
}
}
/* Nonmatching */
}
/* 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);
/* Nonmatching */
}
/* 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() {
/* Nonmatching */
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);
/* Nonmatching */
}
/* 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();
/* Nonmatching */
}
/* 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]
);
}
}
extern void patchTexNo_PtrToIdx(u32 texID, const u16& idx);
/* 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 */
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 */
if ((flag & 0x08000000) == 0) {
return;
}
u8 indTexStageNum = mIndTexStageNum;
J3DGDSetIndTexStageNum(indTexStageNum);
mIndTexMtx[0].load(0);
J3DGDSetIndTexCoordScale(
GXIndTexStageID(0),
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);
/* Nonmatching */
}
/* 802E7250-802E7538 .text diffBlend__16J3DPEBlockFogOffFv */
void J3DPEBlockFogOff::diffBlend() {
GDOverflowCheck(0xf);
mBlend.load(mDither);
mZMode.load();
/* Nonmatching */
}
/* 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);
/* Nonmatching */
}
/* 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);
/* Nonmatching */
}
/* 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();
/* Nonmatching */
}
/* 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.mFlags >> 2) & 0x01) || !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();
}
}
}