summaryrefslogtreecommitdiff
path: root/src/JSystem/J3DGraphBase
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-10-10 07:29:58 -0700
committerGitHub <noreply@github.com>2024-10-10 08:29:58 -0600
commit12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch)
tree4509be332b2ccfc6fe939f47740d68f7746eca3e /src/JSystem/J3DGraphBase
parent2fd702c0ac170a789af879b8b92a82d4dcc9080c (diff)
switch to dtk setup (#2203)
* switch to dtk setup * some cleanup / fixes * cleanup d_a_alink literals * Restore doxygen, update CI & README.md (#1) * Fix build image ref (#2) --------- Co-authored-by: Luke Street <luke@street.dev>
Diffstat (limited to 'src/JSystem/J3DGraphBase')
-rw-r--r--src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp243
-rw-r--r--src/JSystem/J3DGraphBase/J3DGD.cpp665
-rw-r--r--src/JSystem/J3DGraphBase/J3DMatBlock.cpp5206
-rw-r--r--src/JSystem/J3DGraphBase/J3DMaterial.cpp1276
-rw-r--r--src/JSystem/J3DGraphBase/J3DPacket.cpp403
-rw-r--r--src/JSystem/J3DGraphBase/J3DShape.cpp354
-rw-r--r--src/JSystem/J3DGraphBase/J3DShapeDraw.cpp100
-rw-r--r--src/JSystem/J3DGraphBase/J3DShapeMtx.cpp760
-rw-r--r--src/JSystem/J3DGraphBase/J3DStruct.cpp75
-rw-r--r--src/JSystem/J3DGraphBase/J3DSys.cpp400
-rw-r--r--src/JSystem/J3DGraphBase/J3DTevs.cpp565
-rw-r--r--src/JSystem/J3DGraphBase/J3DTexture.cpp70
-rw-r--r--src/JSystem/J3DGraphBase/J3DTransform.cpp378
-rw-r--r--src/JSystem/J3DGraphBase/J3DVertex.cpp244
14 files changed, 10739 insertions, 0 deletions
diff --git a/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp b/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
new file mode 100644
index 0000000000..52a31e0d57
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp
@@ -0,0 +1,243 @@
+/**
+ * J3DDrawBuffer.cpp
+ *
+ */
+
+#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
+#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/JKernel/JKRHeap.h"
+
+void J3DDrawBuffer::calcZRatio() {
+ mZRatio = (mZFar - mZNear) / (f32)mBufSize;
+}
+
+void J3DDrawBuffer::initialize() {
+ mDrawType = DRAW_HEAD;
+ mSortType = SORT_MAT;
+ mZNear = 1.0f;
+ mZFar = 10000.0f;
+ mpZMtx = NULL;
+ mpCallBackPacket = NULL;
+ mBufSize = 0x20;
+ calcZRatio();
+}
+
+J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) {
+ mpBuf = new (0x20) J3DPacket*[bufSize];
+ if (mpBuf == NULL)
+ return kJ3DError_Alloc;
+
+ mBufSize = bufSize;
+ frameInit();
+ calcZRatio();
+ return kJ3DError_Success;
+}
+
+J3DDrawBuffer::~J3DDrawBuffer() {
+ frameInit();
+
+ delete[] mpBuf;
+ mpBuf = NULL;
+}
+
+/* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */
+void J3DDrawBuffer::frameInit() {
+ u32 bufSize = mBufSize;
+ for (u32 i = 0; i < bufSize; i++)
+ mpBuf[i] = NULL;
+
+ mpCallBackPacket = NULL;
+}
+
+/* 8032509C-803251E4 31F9DC 0148+00 2/1 0/0 0/0 .text
+ * entryMatSort__13J3DDrawBufferFP12J3DMatPacket */
+int J3DDrawBuffer::entryMatSort(J3DMatPacket* pMatPacket) {
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
+
+ if (pMatPacket->isChanged()) {
+ pMatPacket->setNextPacket(mpBuf[0]);
+ mpBuf[0] = pMatPacket;
+ return 1;
+ }
+
+ J3DTexture* texture = j3dSys.getTexture();
+ u32 hash;
+ u16 texNo = pMatPacket->getMaterial()->getTexNo(0);
+ if (texNo == 0xFFFF) {
+ hash = 0;
+ } else {
+ hash = ((u32)texture->getResTIMG(texNo) + texture->getResTIMG(texNo)->imageOffset) >> 5;
+ }
+ u32 slot = hash & (mBufSize - 1);
+
+ if (mpBuf[slot] == NULL) {
+ mpBuf[slot] = pMatPacket;
+ return 1;
+ } else {
+ for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
+ pkt = (J3DMatPacket*)pkt->getNextPacket())
+ {
+ if (pkt->isSame(pMatPacket)) {
+ pkt->addShapePacket(pMatPacket->getShapePacket());
+ return 0;
+ }
+ }
+
+ pMatPacket->setNextPacket(mpBuf[slot]);
+ mpBuf[slot] = pMatPacket;
+ return 1;
+ }
+}
+
+/* 803251E4-8032529C 31FB24 00B8+00 1/0 0/0 0/0 .text
+ * entryMatAnmSort__13J3DDrawBufferFP12J3DMatPacket */
+int J3DDrawBuffer::entryMatAnmSort(J3DMatPacket* pMatPacket) {
+ J3DMaterialAnm* pMaterialAnm = pMatPacket->mpMaterialAnm;
+ u32 slot = (u32)pMaterialAnm & (mBufSize - 1);
+
+ if (pMaterialAnm == NULL) {
+ return entryMatSort(pMatPacket);
+ } else {
+ pMatPacket->drawClear();
+ pMatPacket->getShapePacket()->drawClear();
+ if (mpBuf[slot] == NULL) {
+ mpBuf[slot] = pMatPacket;
+ return 1;
+ } else {
+ for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
+ pkt = (J3DMatPacket*)pkt->getNextPacket())
+ {
+ if (pkt->mpMaterialAnm == pMaterialAnm) {
+ pkt->addShapePacket(pMatPacket->getShapePacket());
+ return 0;
+ }
+ }
+
+ pMatPacket->setNextPacket(mpBuf[slot]);
+ mpBuf[slot] = pMatPacket;
+ return 1;
+ }
+ }
+}
+
+/* 8032529C-803253B4 31FBDC 0118+00 1/0 0/0 0/0 .text entryZSort__13J3DDrawBufferFP12J3DMatPacket
+ */
+int J3DDrawBuffer::entryZSort(J3DMatPacket* i_packet) {
+ i_packet->drawClear();
+ i_packet->getShapePacket()->drawClear();
+
+ Vec tmp;
+ tmp.x = mpZMtx[0][3];
+ tmp.y = mpZMtx[1][3];
+ tmp.z = mpZMtx[2][3];
+
+ f32 value = -J3DCalcZValue(j3dSys.getViewMtx(), tmp);
+
+ u32 uvar4;
+ if (mZNear + mZRatio < value) {
+ if (mZFar - mZRatio > value) {
+ uvar4 = value / mZRatio;
+ } else {
+ uvar4 = mBufSize - 1;
+ }
+ } else {
+ uvar4 = 0;
+ }
+
+ u32 idx = (mBufSize - 1) - uvar4;
+ i_packet->setNextPacket(mpBuf[idx]);
+ mpBuf[idx] = i_packet;
+
+ return 1;
+}
+
+/* 803253B4-80325404 31FCF4 0050+00 1/0 0/0 0/0 .text
+ * entryModelSort__13J3DDrawBufferFP12J3DMatPacket */
+int J3DDrawBuffer::entryModelSort(J3DMatPacket* i_packet) {
+ i_packet->drawClear();
+ i_packet->getShapePacket()->drawClear();
+
+ if (mpCallBackPacket != NULL) {
+ mpCallBackPacket->addChildPacket(i_packet);
+ return 1;
+ }
+
+ return 0;
+}
+
+/* 80325404-80325458 31FD44 0054+00 1/0 0/0 0/0 .text
+ * entryInvalidSort__13J3DDrawBufferFP12J3DMatPacket */
+int J3DDrawBuffer::entryInvalidSort(J3DMatPacket* i_packet) {
+ i_packet->drawClear();
+ i_packet->getShapePacket()->drawClear();
+
+ if (mpCallBackPacket != NULL) {
+ mpCallBackPacket->addChildPacket(i_packet->getShapePacket());
+ return 1;
+ }
+
+ return 0;
+}
+
+int J3DDrawBuffer::entryNonSort(J3DMatPacket* i_packet) {
+ i_packet->drawClear();
+ i_packet->mpShapePacket->drawClear();
+
+ i_packet->setNextPacket(mpBuf[0]);
+ mpBuf[0] = i_packet;
+
+ return 1;
+}
+
+int J3DDrawBuffer::entryImm(J3DPacket* i_packet, u16 index) {
+ i_packet->setNextPacket(mpBuf[index]);
+ mpBuf[index] = i_packet;
+
+ return 1;
+}
+
+/* 803CEC30-803CEC78 02BD50 0048+00 0/1 1/1 0/0 .data sortFuncTable__13J3DDrawBuffer */
+sortFunc J3DDrawBuffer::sortFuncTable[6] = {
+ &J3DDrawBuffer::entryMatSort, &J3DDrawBuffer::entryMatAnmSort, &J3DDrawBuffer::entryZSort,
+ &J3DDrawBuffer::entryModelSort, &J3DDrawBuffer::entryInvalidSort, &J3DDrawBuffer::entryNonSort,
+};
+
+/* 803CEC90-803CECA8 02BDB0 0018+00 1/2 0/0 0/0 .data drawFuncTable__13J3DDrawBuffer */
+drawFunc J3DDrawBuffer::drawFuncTable[2] = {
+ &J3DDrawBuffer::drawHead,
+ &J3DDrawBuffer::drawTail,
+};
+
+/* 803254AC-80325500 31FDEC 0054+00 0/0 2/2 0/0 .text draw__13J3DDrawBufferCFv */
+void J3DDrawBuffer::draw() const {
+ drawFunc func = drawFuncTable[mDrawType];
+ (this->*func)();
+}
+
+/* 80325500-80325578 31FE40 0078+00 1/0 0/0 0/0 .text drawHead__13J3DDrawBufferCFv */
+void J3DDrawBuffer::drawHead() const {
+ u32 size = mBufSize;
+ J3DPacket** buf = mpBuf;
+
+ for (u32 i = 0; i < size; i++) {
+ for (J3DPacket* packet = buf[i]; packet != NULL; packet = packet->getNextPacket()) {
+ packet->draw();
+ }
+ }
+}
+
+/* 80325578-803255F0 31FEB8 0078+00 1/0 0/0 0/0 .text drawTail__13J3DDrawBufferCFv */
+void J3DDrawBuffer::drawTail() const {
+ int num = mBufSize - 1;
+
+ for (int i = num; i >= 0; i--) {
+ for (J3DPacket* packet = mpBuf[i]; packet != NULL; packet = packet->getNextPacket()) {
+ packet->draw();
+ }
+ }
+}
+
+/* ############################################################################################## */
+/* 804515E0-804515E8 000AE0 0004+04 0/0 1/1 0/0 .sbss entryNum__13J3DDrawBuffer */
+int J3DDrawBuffer::entryNum; \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DGD.cpp b/src/JSystem/J3DGraphBase/J3DGD.cpp
new file mode 100644
index 0000000000..5e361862b9
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DGD.cpp
@@ -0,0 +1,665 @@
+//
+// J3DGD
+//
+
+#include "JSystem/J3DGraphBase/J3DGD.h"
+#include "dolphin/gd.h"
+#include "dolphin/os.h"
+
+/* 8030D098-8030D210 3079D8 0178+00 0/0 1/1 0/0 .text J3DGDSetGenMode__FUcUcUcUc11_GXCullMode */
+void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 indTexStageNum,
+ GXCullMode cullMode) {
+ GDOverflowCheck(0xa);
+ J3DGDWriteBPCmd(0xfe07fc3f);
+ static u8 cm2hw[4] = {0, 2, 1, 3};
+ J3DGDWriteBPCmd(texGenNum | colorChanNum << 4 | (tevStageNum - 1) << 0xa |
+ cm2hw[cullMode] << 0xe | indTexStageNum << 0x10);
+}
+
+/* 8030D210-8030D364 307B50 0154+00 0/0 1/1 0/0 .text J3DGDSetGenMode_3Param__FUcUcUc */
+void J3DGDSetGenMode_3Param(u8 texGenNum, u8 tevStageNum, u8 indTexStageNum) {
+ GDOverflowCheck(0xa);
+ J3DGDWriteBPCmd(0xfe073c0f);
+ J3DGDWriteBPCmd(texGenNum | (tevStageNum - 1) << 0xa | indTexStageNum << 0x10);
+}
+
+/* 8030D364-8030D65C 307CA4 02F8+00 0/0 1/1 0/0 .text J3DGDSetLightAttn__F10_GXLightIDffffff */
+void J3DGDSetLightAttn(GXLightID id, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2) {
+ J3DGDWriteXFCmdHdr(0x0604 + __GDLightID2Offset(id), 6);
+ J3DGDWrite_f32(a0);
+ J3DGDWrite_f32(a1);
+ J3DGDWrite_f32(a2);
+ J3DGDWrite_f32(k0);
+ J3DGDWrite_f32(k1);
+ J3DGDWrite_f32(k2);
+}
+
+/* 8030D65C-8030D76C 307F9C 0110+00 0/0 1/1 0/0 .text J3DGDSetLightColor__F10_GXLightID8_GXColor
+ */
+void J3DGDSetLightColor(GXLightID id, GXColor color) {
+ J3DGDWriteXFCmd(0x0603 + __GDLightID2Offset(id),
+ (color.r << 24) | (color.g << 16) | (color.b << 8) | (color.a << 0));
+}
+
+/* 8030D76C-8030D938 3080AC 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightPos__F10_GXLightIDfff
+ */
+void J3DGDSetLightPos(GXLightID id, f32 x, f32 y, f32 z) {
+ J3DGDWriteXFCmdHdr(0x060A + __GDLightID2Offset(id), 3);
+ J3DGDWrite_f32(x);
+ J3DGDWrite_f32(y);
+ J3DGDWrite_f32(z);
+}
+
+/* 8030D938-8030DB04 308278 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightDir__F10_GXLightIDfff
+ */
+void J3DGDSetLightDir(GXLightID id, f32 x, f32 y, f32 z) {
+ J3DGDWriteXFCmdHdr(0x060D + __GDLightID2Offset(id), 3);
+ J3DGDWrite_f32(x);
+ J3DGDWrite_f32(y);
+ J3DGDWrite_f32(z);
+}
+
+/* 8030DB04-8030E064 308444 0560+00 1/0 1/1 0/0 .text
+ * J3DGDSetVtxAttrFmtv__F9_GXVtxFmtPC17_GXVtxAttrFmtListb */
+void J3DGDSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList const* fmtList, bool param_2) {
+ u32 pos_cnt = GX_POS_XYZ;
+ u32 pos_type = GX_F32;
+ u32 pos_shift = 0;
+ u32 nrm_cnt = GX_NRM_XYZ;
+ u32 nrm_type = GX_F32;
+ u32 local_34 = 0;
+ u32 clr0_cnt = GX_CLR_RGBA;
+ u32 clr0_type = GX_RGBA8;
+ u32 clr1_cnt = GX_CLR_RGBA;
+ u32 clr1_type = GX_RGBA8;
+ u32 tex0_cnt = GX_TEX_ST;
+ u32 tex0_type = GX_F32;
+ u32 tex0_shift = 0;
+ u32 tex1_cnt = GX_TEX_ST;
+ u32 tex1_type = GX_F32;
+ u32 tex1_shift = 0;
+ u32 tex2_cnt = GX_TEX_ST;
+ u32 tex2_type = GX_F32;
+ u32 tex2_shift = 0;
+ u32 tex3_cnt = GX_TEX_ST;
+ u32 tex3_type = GX_F32;
+ u32 tex3_shift = 0;
+ u32 tex4_cnt = GX_TEX_ST;
+ u32 tex4_type = GX_F32;
+ u32 tex4_shift = 0;
+ u32 tex5_cnt = GX_TEX_ST;
+ u32 tex5_type = GX_F32;
+ u32 tex5_shift = 0;
+ u32 tex6_cnt = GX_TEX_ST;
+ u32 tex6_type = GX_F32;
+ u32 tex6_shift = 0;
+ u32 tex7_cnt = GX_TEX_ST;
+ u32 tex7_type = GX_F32;
+ u32 tex7_shift = 0;
+ for (; fmtList->mAttrib != GX_VA_NULL; fmtList++) {
+ switch (fmtList->mAttrib) {
+ case GX_VA_POS:
+ pos_cnt = fmtList->mCompCnt;
+ pos_type = fmtList->mCompType;
+ pos_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_NRM:
+ case GX_VA_NBT:
+ nrm_type = fmtList->mCompType;
+ if (fmtList->mCompCnt == GX_NRM_NBT3) {
+ nrm_cnt = GX_NRM_NBT;
+ local_34 = 1;
+ } else {
+ if (param_2) {
+ nrm_cnt = GX_NRM_NBT;
+ } else {
+ nrm_cnt = fmtList->mCompCnt;
+ }
+ local_34 = 0;
+ }
+ break;
+ case GX_VA_CLR0:
+ clr0_cnt = fmtList->mCompCnt;
+ clr0_type = fmtList->mCompType;
+ break;
+ case GX_VA_CLR1:
+ clr1_cnt = fmtList->mCompCnt;
+ clr1_type = fmtList->mCompType;
+ break;
+ case GX_VA_TEX0:
+ tex0_cnt = fmtList->mCompCnt;
+ tex0_type = fmtList->mCompType;
+ tex0_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX1:
+ tex1_cnt = fmtList->mCompCnt;
+ tex1_type = fmtList->mCompType;
+ tex1_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX2:
+ tex2_cnt = fmtList->mCompCnt;
+ tex2_type = fmtList->mCompType;
+ tex2_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX3:
+ tex3_cnt = fmtList->mCompCnt;
+ tex3_type = fmtList->mCompType;
+ tex3_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX4:
+ tex4_cnt = fmtList->mCompCnt;
+ tex4_type = fmtList->mCompType;
+ tex4_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX5:
+ tex5_cnt = fmtList->mCompCnt;
+ tex5_type = fmtList->mCompType;
+ tex5_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX6:
+ tex6_cnt = fmtList->mCompCnt;
+ tex6_type = fmtList->mCompType;
+ tex6_shift = fmtList->mCompShift;
+ break;
+ case GX_VA_TEX7:
+ tex7_cnt = fmtList->mCompCnt;
+ tex7_type = fmtList->mCompType;
+ tex7_shift = fmtList->mCompShift;
+ break;
+ }
+ }
+ GDOverflowCheck(0x12);
+ J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP0 + fmt,
+ pos_cnt | pos_type << 1 | pos_shift << 4 | nrm_cnt << 9 | nrm_type << 0xa |
+ clr0_cnt << 0xd | clr0_type << 0xe | clr1_cnt << 0x11 | clr1_type << 0x12 |
+ tex0_cnt << 0x15 | tex0_type << 0x16 | tex0_shift << 0x19 | 0x40000000 |
+ local_34 << 0x1f);
+ J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP1 + fmt,
+ tex1_cnt | tex1_type << 1 | tex1_shift << 4 | tex2_cnt << 9 | tex2_type << 0xa |
+ tex2_shift << 0xd | tex3_cnt << 0x12 | tex3_type << 0x13 |
+ tex3_shift << 0x16 | tex4_cnt << 0x1b | tex4_type << 0x1c | 0x80000000);
+ J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP2 + fmt,
+ tex4_shift | tex5_cnt << 5 | tex5_type << 6 | tex5_shift << 9 |
+ tex6_cnt << 0xe | tex6_type << 0xf | tex6_shift << 0x12 | tex7_cnt << 0x17 |
+ tex7_type << 0x18 | tex7_shift << 0x1b);
+}
+
+/* 8030E064-8030E234 3089A4 01D0+00 1/0 1/1 0/0 .text
+ * J3DGDSetTexCoordGen__F13_GXTexGenType12_GXTexGenSrc */
+void J3DGDSetTexCoordGen(GXTexGenType texGenType, GXTexGenSrc texGenSrc) {
+ u32 input_form = 0;
+ u32 proj_type = 0;
+ u32 src_row = 5;
+ u32 bump_src_tex = 5;
+ u32 bump_src_light = 0;
+ u32 texgen_type;
+ switch (texGenSrc) {
+ case GX_TG_POS:
+ src_row = 0;
+ input_form = 1;
+ break;
+ case GX_TG_NRM:
+ src_row = 1;
+ input_form = 1;
+ break;
+ case GX_TG_BINRM:
+ src_row = 3;
+ input_form = 1;
+ break;
+ case GX_TG_TANGENT:
+ src_row = 4;
+ input_form = 1;
+ break;
+ case GX_TG_COLOR0:
+ src_row = 2;
+ break;
+ case GX_TG_COLOR1:
+ src_row = 2;
+ break;
+ case GX_TG_TEX0:
+ src_row = 5;
+ break;
+ case GX_TG_TEX1:
+ src_row = 6;
+ break;
+ case GX_TG_TEX2:
+ src_row = 7;
+ break;
+ case GX_TG_TEX3:
+ src_row = 8;
+ break;
+ case GX_TG_TEX4:
+ src_row = 9;
+ break;
+ case GX_TG_TEX5:
+ src_row = 10;
+ break;
+ case GX_TG_TEX6:
+ src_row = 11;
+ break;
+ case GX_TG_TEX7:
+ src_row = 12;
+ break;
+ case GX_TG_TEXCOORD0:
+ bump_src_tex = 0;
+ break;
+ case GX_TG_TEXCOORD1:
+ bump_src_tex = 1;
+ break;
+ case GX_TG_TEXCOORD2:
+ bump_src_tex = 2;
+ break;
+ case GX_TG_TEXCOORD3:
+ bump_src_tex = 3;
+ break;
+ case GX_TG_TEXCOORD4:
+ bump_src_tex = 4;
+ break;
+ case GX_TG_TEXCOORD5:
+ bump_src_tex = 5;
+ break;
+ case GX_TG_TEXCOORD6:
+ bump_src_tex = 6;
+ break;
+ }
+ switch (texGenType) {
+ case GX_TG_MTX2x4:
+ texgen_type = 0;
+ break;
+ case GX_TG_MTX3x4:
+ texgen_type = 0;
+ proj_type = 1;
+ break;
+ case GX_TG_BUMP0:
+ case GX_TG_BUMP1:
+ case GX_TG_BUMP2:
+ case GX_TG_BUMP3:
+ case GX_TG_BUMP4:
+ case GX_TG_BUMP5:
+ case GX_TG_BUMP6:
+ case GX_TG_BUMP7:
+ texgen_type = 1;
+ bump_src_light = texGenType - 2;
+ break;
+ case GX_TG_SRTG:
+ if (texGenSrc == GX_TG_COLOR0) {
+ texgen_type = 2;
+ } else {
+ texgen_type = 3;
+ }
+ break;
+ }
+ J3DGDWrite_u32(
+ proj_type << (31 - GX_XF_TEX_PROJTYPE_END) | input_form << (31 - GX_XF_TEX_INPUTFORM_END) |
+ texgen_type << (31 - GX_XF_TEX_TEXGENTYPE_END) | src_row << (31 - GX_XF_TEX_SRCROW_END) |
+ bump_src_tex << (31 - GX_XF_TEX_BUMPSRCTEX_END) |
+ bump_src_light << (31 - GX_XF_TEX_BUMPSRCLIGHT_END));
+}
+
+/* 8030E234-8030E438 308B74 0204+00 0/0 16/16 0/0 .text
+ * J3DGDSetTexCoordScale2__F13_GXTexCoordIDUsUcUcUsUcUc */
+void J3DGDSetTexCoordScale2(GXTexCoordID param_0, u16 param_1, u8 param_2, u8 param_3, u16 param_4,
+ u8 param_5, u8 param_6) {
+ GDOverflowCheck(0xf);
+ J3DGDWriteBPCmd(0xfe03ffff);
+ J3DGDWriteBPCmd((param_1 - 1) | param_2 << 0x10 | param_3 << 0x11 |
+ (param_0 * 2 + 0x30) << 0x18);
+ J3DGDWriteBPCmd((param_4 - 1) | param_5 << 0x10 | param_6 << 0x11 |
+ (param_0 * 2 + 0x31) << 0x18);
+}
+
+/* 8045090C-80450914 00038C 0008+00 1/1 0/0 0/0 .sdata J3DGDTexMode0Ids */
+static u8 J3DGDTexMode0Ids[8] = {
+ 0x80, 0x81, 0x82, 0x83, 0xA0, 0xA1, 0xA2, 0xA3,
+};
+
+/* 80450914-8045091C 000394 0008+00 1/1 0/0 0/0 .sdata J3DGDTexMode1Ids */
+static u8 J3DGDTexMode1Ids[8] = {
+ 0x84, 0x85, 0x86, 0x87, 0xA4, 0xA5, 0xA6, 0xA7,
+};
+
+/* 8045091C-80450924 00039C 0008+00 1/1 0/0 0/0 .sdata J3DGDTexImage0Ids */
+static u8 J3DGDTexImage0Ids[8] = {
+ 0x88, 0x89, 0x8A, 0x8B, 0xA8, 0xA9, 0xAA, 0xAB,
+};
+
+/* 80450924-8045092C 0003A4 0008+00 2/2 0/0 0/0 .sdata J3DGDTexImage3Ids */
+static u8 J3DGDTexImage3Ids[8] = {
+ 0x94, 0x95, 0x96, 0x97, 0xB4, 0xB5, 0xB6, 0xB7,
+};
+
+/* 8045092C-80450934 0003AC 0008+00 1/1 0/0 0/0 .sdata J3DGDTexTlutIds */
+static u8 J3DGDTexTlutIds[8] = {
+ 0x98, 0x99, 0x9A, 0x9B, 0xB8, 0xB9, 0xBA, 0xBB,
+};
+
+/* 80450934-8045093C 0003B4 0006+02 1/1 0/0 0/0 .sdata GX2HWFiltConv */
+static u8 GX2HWFiltConv[6] = {
+ 0x00, 0x04, 0x01, 0x05, 0x02, 0x06,
+};
+
+/* 8030E438-8030E5D4 308D78 019C+00 0/0 1/1 0/0 .text
+ * J3DGDSetTexLookupMode__F11_GXTexMapID14_GXTexWrapMode14_GXTexWrapMode12_GXTexFilter12_GXTexFilterfffUcUc13_GXAnisotropy
+ */
+void J3DGDSetTexLookupMode(GXTexMapID param_0, GXTexWrapMode param_1, GXTexWrapMode param_2,
+ GXTexFilter param_3, GXTexFilter param_4, f32 param_5, f32 param_6,
+ f32 param_7, u8 param_8, u8 param_9, GXAnisotropy param_10) {
+ J3DGDWriteBPCmd(param_1 | param_2 << 2 | (param_4 == GX_LINEAR) << 4 |
+ GX2HWFiltConv[param_3] << 5 | (param_9 == 0) << 8 |
+ ((int)(param_7 * 32.0f) & 0xff) << 9 | param_10 << 0x13 | param_8 << 0x15 |
+ J3DGDTexMode0Ids[param_0] << 0x18);
+ J3DGDWriteBPCmd(((int)(param_5 * 16.0f) & 0xff) | ((int)(param_6 * 16.0f) & 0xff) << 8 |
+ J3DGDTexMode1Ids[param_0] << 0x18);
+}
+
+/* 8030E5D4-8030E67C 308F14 00A8+00 0/0 1/1 0/0 .text
+ * J3DGDSetTexImgAttr__F11_GXTexMapIDUsUs9_GXTexFmt */
+void J3DGDSetTexImgAttr(GXTexMapID param_0, u16 param_1, u16 param_2, GXTexFmt param_3) {
+ J3DGDWriteBPCmd((param_1 - 1) | (param_2 - 1) << 0xa | param_3 << 0x14 |
+ J3DGDTexImage0Ids[param_0] << 0x18);
+}
+
+/* 8030E67C-8030E70C 308FBC 0090+00 0/0 1/1 0/0 .text J3DGDSetTexImgPtr__F11_GXTexMapIDPv
+ */
+void J3DGDSetTexImgPtr(GXTexMapID param_0, void* param_1) {
+ J3DGDWriteBPCmd(OSCachedToPhysical(param_1) >> 5 | J3DGDTexImage3Ids[param_0] << 0x18);
+}
+
+/* 8030E70C-8030E7E0 30904C 00D4+00 0/0 1/1 0/0 .text J3DGDSetTexImgPtrRaw__F11_GXTexMapIDUl */
+void J3DGDSetTexImgPtrRaw(GXTexMapID param_0, u32 param_1) {
+ GDOverflowCheck(5);
+ J3DGDWriteBPCmd(param_1 | J3DGDTexImage3Ids[param_0] << 0x18);
+}
+
+/* 8030E7E0-8030E878 309120 0098+00 0/0 1/1 0/0 .text
+ * J3DGDSetTexTlut__F11_GXTexMapIDUl10_GXTlutFmt */
+void J3DGDSetTexTlut(GXTexMapID param_0, u32 param_1, GXTlutFmt param_2) {
+ J3DGDWriteBPCmd((param_1 - 0x80000) >> 9 | param_2 << 0xa | J3DGDTexTlutIds[param_0] << 0x18);
+}
+
+/* 8030E878-8030EB30 3091B8 02B8+00 0/0 1/1 0/0 .text J3DGDLoadTlut__FPvUl11_GXTlutSize
+ */
+void J3DGDLoadTlut(void* param_0, u32 param_1, GXTlutSize param_2) {
+ J3DGDWriteBPCmd(0xfeffff00);
+ J3DGDWriteBPCmd(0x0f000000);
+ J3DGDWriteBPCmd(OSCachedToPhysical(param_0) >> 5 | 0x64000000);
+ J3DGDWriteBPCmd((param_1 - 0x80000) >> 9 | param_2 << 0xa | 0x65000000);
+ J3DGDWriteBPCmd(0xfeffff00);
+ J3DGDWriteBPCmd(0x0f000000);
+}
+
+/* 8030EB30-8030EE10 309470 02E0+00 0/0 2/2 0/0 .text J3DGDSetIndTexMtx__F14_GXIndTexMtxIDPA3_fSc
+ */
+void J3DGDSetIndTexMtx(GXIndTexMtxID id, Mtx3P mtx, s8 exp) {
+ s32 mtx32[6];
+ u32 idx;
+
+ switch (id) {
+ case GX_ITM_0:
+ case GX_ITM_1:
+ case GX_ITM_2:
+ idx = (u32)(id - GX_ITM_0);
+ break;
+ case GX_ITM_S0:
+ case GX_ITM_S1:
+ case GX_ITM_S2:
+ idx = (u32)(id - GX_ITM_S0);
+ break;
+ case GX_ITM_T0:
+ case GX_ITM_T1:
+ case GX_ITM_T2:
+ idx = (u32)(id - GX_ITM_T0);
+ break;
+ default:
+ idx = 0;
+ break;
+ }
+
+ exp += 17;
+
+ mtx32[0] = (s32)(mtx[0][0] * 1024.0f) & 0x7FF;
+ mtx32[1] = (s32)(mtx[1][0] * 1024.0f) & 0x7FF;
+
+ mtx32[2] = (s32)(mtx[0][1] * 1024.0f) & 0x7FF;
+ mtx32[3] = (s32)(mtx[1][1] * 1024.0f) & 0x7FF;
+
+ mtx32[4] = (s32)(mtx[0][2] * 1024.0f) & 0x7FF;
+ mtx32[5] = (s32)(mtx[1][2] * 1024.0f) & 0x7FF;
+
+ GDOverflowCheck(15);
+
+ J3DGDWriteBPCmd((mtx32[0] << 0) | (mtx32[1] << 11) | (((exp >> 0) & 0x03) << 22) |
+ (0x06 + idx * 3) << 24);
+ J3DGDWriteBPCmd((mtx32[2] << 0) | (mtx32[3] << 11) | (((exp >> 2) & 0x03) << 22) |
+ (0x07 + idx * 3) << 24);
+ J3DGDWriteBPCmd((mtx32[4] << 0) | (mtx32[5] << 11) | (((exp >> 4) & 0x03) << 22) |
+ (0x08 + idx * 3) << 24);
+}
+
+/* 8030EE10-8030EF08 309750 00F8+00 0/0 2/2 0/0 .text
+ * J3DGDSetIndTexCoordScale__F16_GXIndTexStageID14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale
+ */
+void J3DGDSetIndTexCoordScale(GXIndTexStageID stage, GXIndTexScale scale0, GXIndTexScale scale1,
+ GXIndTexScale scale2, GXIndTexScale scale3) {
+ GDOverflowCheck(5);
+ J3DGDWriteBPCmd(scale0 | scale1 << 4 | scale2 << 8 | scale3 << 0xc |
+ ((stage >> 1) + GX_BP_REG_RAS1_SS0) << 0x18);
+}
+
+/* 8030EF08-8030F108 309848 0200+00 0/0 2/2 0/0 .text
+ * J3DGDSetIndTexOrder__FUl13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID
+ */
+void J3DGDSetIndTexOrder(u32 count, GXTexCoordID coord0, GXTexMapID map0, GXTexCoordID coord1,
+ GXTexMapID map1, GXTexCoordID coord2, GXTexMapID map2, GXTexCoordID coord3,
+ GXTexMapID map3) {
+ GDOverflowCheck(0xa);
+ J3DGDWriteBPCmd(map0 & 7 | (coord0 & 7) << 3 | (map1 & 7) << 6 | (coord1 & 7) << 9 |
+ (map2 & 7) << 0xc | (coord2 & 7) << 0xf | (map3 & 7) << 0x12 |
+ (coord3 & 7) << 0x15 | GX_BP_REG_RAS1_IREF << 0x18);
+ u32 imask = 0;
+ for (u32 i = 0; i < count; i++) {
+ switch (i) {
+ case 0:
+ imask |= 1 << (map0 & 7);
+ break;
+ case 1:
+ imask |= 1 << (map1 & 7);
+ break;
+ case 2:
+ imask |= 1 << (map2 & 7);
+ break;
+ case 3:
+ imask |= 1 << (map3 & 7);
+ break;
+ }
+ }
+ J3DGDWriteBPCmd(imask | GX_BP_REG_INDIMASK << 0x18);
+}
+
+/* 8030F108-8030F294 309A48 018C+00 0/0 9/9 0/0 .text
+ * J3DGDSetTevOrder__F13_GXTevStageID13_GXTexCoordID11_GXTexMapID12_GXChannelID13_GXTexCoordID11_GXTexMapID12_GXChannelID
+ */
+void J3DGDSetTevOrder(GXTevStageID stage, GXTexCoordID coord0, GXTexMapID map0,
+ GXChannelID channel0, GXTexCoordID coord1, GXTexMapID map1,
+ GXChannelID channel1) {
+ coord0 = coord0 >= GX_MAXCOORD ? GX_TEXCOORD0 : coord0;
+ coord1 = coord1 >= GX_MAXCOORD ? GX_TEXCOORD0 : coord1;
+ GDOverflowCheck(5);
+ static u8 c2r[32] = {0, 1, 0, 1, 0, 1, 7, 5, 6, 0, 0, 0, 0, 0, 0, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ J3DGDWriteBPCmd((map0 & 7) | coord0 << 3 |
+ (map0 != GX_TEXMAP_NULL && !(map0 & GX_TEXMAP_DISABLE)) << 6 |
+ c2r[channel0 & 0xf] << 7 | (map1 & 7) << 0xc | coord1 << 0xf |
+ (map1 != GX_TEXMAP_NULL && !(map1 & GX_TEXMAP_DISABLE)) << 0x12 |
+ c2r[channel1 & 0xf] << 0x13 | (stage / 2 + GX_BP_REG_RAS1_TREF0) << 0x18);
+}
+
+/* 8030F294-8030F3FC 309BD4 0168+00 0/0 11/11 0/0 .text
+ * J3DGDSetTevKColor__F14_GXTevKColorID8_GXColor */
+void J3DGDSetTevKColor(GXTevKColorID id, GXColor color) {
+ u32 cmd0 = color.r | color.a << 0xc | 0x800000 | (id * 2 + GX_BP_REG_TEVREG0LO) << 0x18;
+ u32 cmd1 = color.b | color.g << 0xc | 0x800000 | (id * 2 + GX_BP_REG_TEVREG0HI) << 0x18;
+ GDOverflowCheck(0xa);
+ J3DGDWriteBPCmd(cmd0);
+ J3DGDWriteBPCmd(cmd1);
+}
+
+/* 8030F3FC-8030F630 309D3C 0234+00 0/0 11/11 0/0 .text
+ * J3DGDSetTevColorS10__F11_GXTevRegID11_GXColorS10 */
+void J3DGDSetTevColorS10(GXTevRegID id, GXColorS10 color) {
+ u32 cmd0 =
+ (color.r & 0x7ff) | (color.a & 0x7ff) << 0xc | (id * 2 + GX_BP_REG_TEVREG0LO) << 0x18;
+ u32 cmd1 =
+ (color.b & 0x7ff) | (color.g & 0x7ff) << 0xc | (id * 2 + GX_BP_REG_TEVREG0HI) << 0x18;
+ GDOverflowCheck(0x14);
+ J3DGDWriteBPCmd(cmd0);
+ J3DGDWriteBPCmd(cmd1);
+ J3DGDWriteBPCmd(cmd1);
+ J3DGDWriteBPCmd(cmd1);
+}
+
+/* 8030F630-8030F994 309F70 0364+00 0/0 3/3 0/0 .text J3DGDSetFog__F10_GXFogTypeffff8_GXColor */
+void J3DGDSetFog(GXFogType fogType, f32 param_1, f32 param_2, f32 nearZ, f32 farZ, GXColor color) {
+ f32 fvar1, fvar2, fvar3;
+ if (farZ == nearZ || param_2 == param_1) {
+ fvar1 = 0.0f;
+ fvar2 = 0.5f;
+ fvar3 = 0.0f;
+ } else {
+ fvar1 = (farZ * nearZ) / ((farZ - nearZ) * (param_2 - param_1));
+ fvar2 = farZ / (farZ - nearZ);
+ fvar3 = param_1 / (param_2 - param_1);
+ }
+ u32 shift = 1;
+ for (; fvar2 > 1.0; fvar2 *= 0.5f) {
+ shift++;
+ }
+ for (; fvar2 > 0.0f && fvar2 < 0.5; fvar2 *= 2.0f) {
+ shift--;
+ }
+ f32 fvar4 = (fvar1 / (1 << shift));
+ u32 param1 = fvar2 * 8388638.0f;
+ u32 param0 = *(u32*)&fvar4;
+ u32 param3 = *(u32*)&fvar3;
+ J3DGDWriteBPCmd(param0 >> 0xc | GX_BP_REG_FOGPARAM0 << 0x18);
+ J3DGDWriteBPCmd(param1 | GX_BP_REG_FOGPARAM1 << 0x18);
+ J3DGDWriteBPCmd(shift | GX_BP_REG_FOGPARAM2 << 0x18);
+ J3DGDWriteBPCmd(param3 >> 0xc | fogType << 0x15 | GX_BP_REG_FOGPARAM3 << 0x18);
+ J3DGDWriteBPCmd(color.b | color.g << 8 | color.r << 0x10 | GX_BP_REG_FOGCOLOR << 0x18);
+}
+
+/* 8030F994-8030FAE0 30A2D4 014C+00 0/0 3/3 0/0 .text J3DGDSetFogRangeAdj__FUcUsP14_GXFogAdjTable
+ */
+void J3DGDSetFogRangeAdj(u8 param_0, u16 param_1, GXFogAdjTable* table) {
+ if (param_0 != 0) {
+ for (int i = 0; i < 0xa; i += 2) {
+ J3DGDWriteBPCmd((i / 2 + GX_BP_REG_FOGRANGEK0) << 0x18 | table->fogVals[i + 1] << 0xc |
+ table->fogVals[i]);
+ }
+ }
+ u32 cmd = GX_BP_REG_FOGRANGE << 0x18 | (param_1 + 0x156) | param_0 << 0xa;
+ J3DGDWriteBPCmd(cmd);
+}
+
+/* 8030FAE0-8030FB60 30A420 0080+00 0/0 10/10 0/0 .text J3DFifoLoadPosMtxImm__FPA4_fUl */
+void J3DFifoLoadPosMtxImm(MtxP mtx, u32 addr) {
+ J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
+ J3DGXCmd1f32ptr(&mtx[0][0]);
+ J3DGXCmd1f32ptr(&mtx[0][1]);
+ J3DGXCmd1f32ptr(&mtx[0][2]);
+ J3DGXCmd1f32ptr(&mtx[0][3]);
+ J3DGXCmd1f32ptr(&mtx[1][0]);
+ J3DGXCmd1f32ptr(&mtx[1][1]);
+ J3DGXCmd1f32ptr(&mtx[1][2]);
+ J3DGXCmd1f32ptr(&mtx[1][3]);
+ J3DGXCmd1f32ptr(&mtx[2][0]);
+ J3DGXCmd1f32ptr(&mtx[2][1]);
+ J3DGXCmd1f32ptr(&mtx[2][2]);
+ J3DGXCmd1f32ptr(&mtx[2][3]);
+}
+
+/* 8030FB60-8030FBCC 30A4A0 006C+00 0/0 9/9 0/0 .text J3DFifoLoadNrmMtxImm__FPA4_fUl */
+void J3DFifoLoadNrmMtxImm(MtxP mtx, u32 addr) {
+ J3DFifoWriteXFCmdHdr(addr * 3 + 0x400, 9);
+ J3DGXCmd1f32ptr(&mtx[0][0]);
+ J3DGXCmd1f32ptr(&mtx[0][1]);
+ J3DGXCmd1f32ptr(&mtx[0][2]);
+ J3DGXCmd1f32ptr(&mtx[1][0]);
+ J3DGXCmd1f32ptr(&mtx[1][1]);
+ J3DGXCmd1f32ptr(&mtx[1][2]);
+ J3DGXCmd1f32ptr(&mtx[2][0]);
+ J3DGXCmd1f32ptr(&mtx[2][1]);
+ J3DGXCmd1f32ptr(&mtx[2][2]);
+}
+
+/* 8030FBCC-8030FC38 30A50C 006C+00 0/0 3/3 0/0 .text J3DFifoLoadNrmMtxImm3x3__FPA3_fUl
+ */
+void J3DFifoLoadNrmMtxImm3x3(Mtx3P mtx, u32 addr) {
+ J3DFifoWriteXFCmdHdr(addr * 3 + 0x400, 9);
+ J3DGXCmd1f32ptr(&mtx[0][0]);
+ J3DGXCmd1f32ptr(&mtx[0][1]);
+ J3DGXCmd1f32ptr(&mtx[0][2]);
+ J3DGXCmd1f32ptr(&mtx[1][0]);
+ J3DGXCmd1f32ptr(&mtx[1][1]);
+ J3DGXCmd1f32ptr(&mtx[1][2]);
+ J3DGXCmd1f32ptr(&mtx[2][0]);
+ J3DGXCmd1f32ptr(&mtx[2][1]);
+ J3DGXCmd1f32ptr(&mtx[2][2]);
+}
+
+/* 8030FC38-8030FCD0 30A578 0098+00 0/0 4/4 0/0 .text J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl
+ */
+void J3DFifoLoadNrmMtxToTexMtx(MtxP mtx, u32 addr) {
+ J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
+ J3DGXCmd1f32ptr(&mtx[0][0]);
+ J3DGXCmd1f32ptr(&mtx[0][1]);
+ J3DGXCmd1f32ptr(&mtx[0][2]);
+ J3DGXCmd1f32(0.0f);
+ J3DGXCmd1f32ptr(&mtx[1][0]);
+ J3DGXCmd1f32ptr(&mtx[1][1]);
+ J3DGXCmd1f32ptr(&mtx[1][2]);
+ J3DGXCmd1f32(0.0f);
+ J3DGXCmd1f32ptr(&mtx[2][0]);
+ J3DGXCmd1f32ptr(&mtx[2][1]);
+ J3DGXCmd1f32ptr(&mtx[2][2]);
+ J3DGXCmd1f32(0.0f);
+}
+
+/* 8030FCD0-8030FD68 30A610 0098+00 0/0 2/2 0/0 .text J3DFifoLoadNrmMtxToTexMtx3x3__FPA3_fUl */
+void J3DFifoLoadNrmMtxToTexMtx3x3(Mtx3P mtx, u32 addr) {
+ J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
+ J3DGXCmd1f32ptr(&mtx[0][0]);
+ J3DGXCmd1f32ptr(&mtx[0][1]);
+ J3DGXCmd1f32ptr(&mtx[0][2]);
+ J3DGXCmd1f32(0.0f);
+ J3DGXCmd1f32ptr(&mtx[1][0]);
+ J3DGXCmd1f32ptr(&mtx[1][1]);
+ J3DGXCmd1f32ptr(&mtx[1][2]);
+ J3DGXCmd1f32(0.0f);
+ J3DGXCmd1f32ptr(&mtx[2][0]);
+ J3DGXCmd1f32ptr(&mtx[2][1]);
+ J3DGXCmd1f32ptr(&mtx[2][2]);
+ J3DGXCmd1f32(0.0f);
+}
+
+/* 8045093C-80450944 0003BC 0008+00 1/1 0/0 0/0 .sdata J3DTexImage1Ids */
+static u8 J3DTexImage1Ids[8] = {
+ 0x8C, 0x8D, 0x8E, 0x8F, 0xAC, 0xAD, 0xAE, 0xAF,
+};
+
+/* 80450944-8045094C 0003C4 0008+00 1/1 0/0 0/0 .sdata J3DTexImage2Ids */
+static u8 J3DTexImage2Ids[8] = {
+ 0x90, 0x91, 0x92, 0x93, 0xB0, 0xB1, 0xB2, 0xB3,
+};
+
+/* 8030FD68-8030FDE8 30A6A8 0080+00 0/0 1/1 0/0 .text
+ * J3DFifoLoadTexCached__F11_GXTexMapIDUl15_GXTexCacheSizeUl15_GXTexCacheSize */
+void J3DFifoLoadTexCached(GXTexMapID id, u32 param_1, GXTexCacheSize param_2, u32 param_3,
+ GXTexCacheSize param_4) {
+ J3DFifoLoadBPCmd(param_1 >> 5 | (param_2 + 3) << 0xf | (param_2 + 3) << 0x12 |
+ J3DTexImage1Ids[id] << 0x18);
+ if (param_4 != GX_TEXCACHE_NONE && param_3 < 0x100000) {
+ J3DFifoLoadBPCmd(param_3 >> 5 | (param_4 + 3) << 0xf | (param_4 + 3) << 0x12 |
+ J3DTexImage2Ids[id] << 0x18);
+ }
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
new file mode 100644
index 0000000000..378ad97737
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
@@ -0,0 +1,5206 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DMatBlock
+//
+
+#include "JSystem/J3DGraphBase/J3DMatBlock.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
+#include "JSystem/J3DGraphBase/J3DSys.h"
+#include "JSystem/J3DGraphBase/J3DTransform.h"
+#include "dol2asm.h"
+#include "dolphin/os.h"
+#include "string.h"
+
+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);
+}
+
+inline void loadTevKColor(u32 reg, const J3DGXColor& color) {
+ J3DGDSetTevKColor(GXTevKColorID(reg), color);
+}
+
+//
+// Forward References:
+//
+
+extern "C" void initialize__21J3DColorBlockLightOffFv();
+extern "C" void initialize__22J3DColorBlockAmbientOnFv();
+extern "C" void initialize__20J3DColorBlockLightOnFv();
+extern "C" void initialize__21J3DTexGenBlockPatchedFv();
+extern "C" void initialize__15J3DTexGenBlock4Fv();
+extern "C" void initialize__19J3DTexGenBlockBasicFv();
+extern "C" void initialize__15J3DTevBlockNullFv();
+extern "C" void initialize__18J3DTevBlockPatchedFv();
+extern "C" void initialize__12J3DTevBlock1Fv();
+extern "C" void initialize__12J3DTevBlock2Fv();
+extern "C" void initialize__12J3DTevBlock4Fv();
+extern "C" void initialize__13J3DTevBlock16Fv();
+extern "C" void initialize__15J3DIndBlockFullFv();
+extern "C" void initialize__16J3DPEBlockFogOffFv();
+extern "C" void initialize__14J3DPEBlockFullFv();
+extern "C" s32 countDLSize__21J3DColorBlockLightOffFv();
+extern "C" s32 countDLSize__22J3DColorBlockAmbientOnFv();
+extern "C" s32 countDLSize__20J3DColorBlockLightOnFv();
+extern "C" s32 countDLSize__21J3DTexGenBlockPatchedFv();
+extern "C" s32 countDLSize__15J3DTexGenBlock4Fv();
+extern "C" s32 countDLSize__19J3DTexGenBlockBasicFv();
+extern "C" s32 countDLSize__18J3DTevBlockPatchedFv();
+extern "C" s32 countDLSize__12J3DTevBlock1Fv();
+extern "C" s32 countDLSize__12J3DTevBlock2Fv();
+extern "C" s32 countDLSize__12J3DTevBlock4Fv();
+extern "C" s32 countDLSize__13J3DTevBlock16Fv();
+extern "C" s32 countDLSize__15J3DIndBlockFullFv();
+extern "C" s32 countDLSize__13J3DPEBlockOpaFv();
+extern "C" s32 countDLSize__17J3DPEBlockTexEdgeFv();
+extern "C" s32 countDLSize__13J3DPEBlockXluFv();
+extern "C" s32 countDLSize__16J3DPEBlockFogOffFv();
+extern "C" s32 countDLSize__14J3DPEBlockFullFv();
+extern "C" void load__21J3DColorBlockLightOffFv();
+extern "C" void load__22J3DColorBlockAmbientOnFv();
+extern "C" void load__20J3DColorBlockLightOnFv();
+extern "C" void patch__21J3DColorBlockLightOffFv();
+extern "C" void patchMatColor__21J3DColorBlockLightOffFv();
+extern "C" void patchLight__21J3DColorBlockLightOffFv();
+extern "C" void patch__20J3DColorBlockLightOnFv();
+extern "C" void patchMatColor__20J3DColorBlockLightOnFv();
+extern "C" void patchLight__20J3DColorBlockLightOnFv();
+extern "C" void diff__21J3DColorBlockLightOffFUl();
+extern "C" void diffMatColor__21J3DColorBlockLightOffFv();
+extern "C" void diffColorChan__21J3DColorBlockLightOffFv();
+extern "C" void diff__20J3DColorBlockLightOnFUl();
+extern "C" void diffAmbColor__20J3DColorBlockLightOnFv();
+extern "C" void diffMatColor__20J3DColorBlockLightOnFv();
+extern "C" void diffColorChan__20J3DColorBlockLightOnFv();
+extern "C" void diffLightObj__20J3DColorBlockLightOnFUl();
+extern "C" void load__15J3DTexGenBlock4Fv();
+extern "C" void load__19J3DTexGenBlockBasicFv();
+extern "C" void patch__21J3DTexGenBlockPatchedFv();
+extern "C" void patch__15J3DTexGenBlock4Fv();
+extern "C" void patch__19J3DTexGenBlockBasicFv();
+extern "C" void diff__21J3DTexGenBlockPatchedFUl();
+extern "C" void diffTexMtx__21J3DTexGenBlockPatchedFv();
+extern "C" void diffTexGen__21J3DTexGenBlockPatchedFv();
+extern "C" void load__12J3DTevBlock1Fv();
+extern "C" void load__12J3DTevBlock2Fv();
+extern "C" void load__12J3DTevBlock4Fv();
+extern "C" void load__13J3DTevBlock16Fv();
+extern "C" void patchTexNo__18J3DTevBlockPatchedFv();
+extern "C" void patchTevReg__18J3DTevBlockPatchedFv();
+extern "C" void patchTexNoAndTexCoordScale__18J3DTevBlockPatchedFv();
+extern "C" void patch__18J3DTevBlockPatchedFv();
+extern "C" void patchTexNo__12J3DTevBlock1Fv();
+extern "C" void patchTevReg__12J3DTevBlock1Fv();
+extern "C" void patchTexNoAndTexCoordScale__12J3DTevBlock1Fv();
+extern "C" void patch__12J3DTevBlock1Fv();
+extern "C" void patchTexNo__12J3DTevBlock2Fv();
+extern "C" void patchTevReg__12J3DTevBlock2Fv();
+extern "C" void patchTexNoAndTexCoordScale__12J3DTevBlock2Fv();
+extern "C" void patch__12J3DTevBlock2Fv();
+extern "C" void patchTexNo__12J3DTevBlock4Fv();
+extern "C" void patchTevReg__12J3DTevBlock4Fv();
+extern "C" void patchTexNoAndTexCoordScale__12J3DTevBlock4Fv();
+extern "C" void patch__12J3DTevBlock4Fv();
+extern "C" void patchTexNo__13J3DTevBlock16Fv();
+extern "C" void patchTevReg__13J3DTevBlock16Fv();
+extern "C" void patchTexNoAndTexCoordScale__13J3DTevBlock16Fv();
+extern "C" void patch__13J3DTevBlock16Fv();
+extern "C" void diff__11J3DTevBlockFUl();
+extern "C" void diffTexNo__18J3DTevBlockPatchedFv();
+extern "C" void diffTevStage__18J3DTevBlockPatchedFv();
+extern "C" void diffTevStageIndirect__18J3DTevBlockPatchedFv();
+extern "C" void diffTevReg__18J3DTevBlockPatchedFv();
+extern "C" void diffTexCoordScale__18J3DTevBlockPatchedFv();
+extern "C" void diffTexNo__12J3DTevBlock1Fv();
+extern "C" void diffTevReg__12J3DTevBlock1Fv();
+extern "C" void diffTevStage__12J3DTevBlock1Fv();
+extern "C" void diffTevStageIndirect__12J3DTevBlock1Fv();
+extern "C" void diffTexCoordScale__12J3DTevBlock1Fv();
+extern "C" void diffTexNo__12J3DTevBlock2Fv();
+extern "C" void diffTevReg__12J3DTevBlock2Fv();
+extern "C" void diffTevStage__12J3DTevBlock2Fv();
+extern "C" void diffTevStageIndirect__12J3DTevBlock2Fv();
+extern "C" void diffTexCoordScale__12J3DTevBlock2Fv();
+extern "C" void diffTexNo__12J3DTevBlock4Fv();
+extern "C" void diffTevReg__12J3DTevBlock4Fv();
+extern "C" void diffTevStage__12J3DTevBlock4Fv();
+extern "C" void diffTevStageIndirect__12J3DTevBlock4Fv();
+extern "C" void diffTexCoordScale__12J3DTevBlock4Fv();
+extern "C" void diffTexNo__13J3DTevBlock16Fv();
+extern "C" void diffTevReg__13J3DTevBlock16Fv();
+extern "C" void diffTevStage__13J3DTevBlock16Fv();
+extern "C" void diffTevStageIndirect__13J3DTevBlock16Fv();
+extern "C" void diffTexCoordScale__13J3DTevBlock16Fv();
+extern "C" void ptrToIndex__13J3DTevBlock16Fv();
+extern "C" void ptrToIndex__18J3DTevBlockPatchedFv();
+extern "C" void indexToPtr_private__11J3DTevBlockFUl();
+extern "C" void load__15J3DIndBlockFullFv();
+extern "C" void diff__15J3DIndBlockFullFUl();
+extern "C" void load__13J3DPEBlockOpaFv();
+extern "C" void load__17J3DPEBlockTexEdgeFv();
+extern "C" void load__13J3DPEBlockXluFv();
+extern "C" void load__16J3DPEBlockFogOffFv();
+extern "C" void diffBlend__16J3DPEBlockFogOffFv();
+extern "C" void load__14J3DPEBlockFullFv();
+extern "C" void patch__14J3DPEBlockFullFv();
+extern "C" void diffFog__14J3DPEBlockFullFv();
+extern "C" void diffBlend__14J3DPEBlockFullFv();
+extern "C" void diff__14J3DPEBlockFullFUl();
+extern "C" void reset__21J3DColorBlockLightOffFP13J3DColorBlock();
+extern "C" void reset__22J3DColorBlockAmbientOnFP13J3DColorBlock();
+extern "C" void reset__20J3DColorBlockLightOnFP13J3DColorBlock();
+extern "C" void reset__21J3DTexGenBlockPatchedFP14J3DTexGenBlock();
+extern "C" void reset__15J3DTexGenBlock4FP14J3DTexGenBlock();
+extern "C" void reset__19J3DTexGenBlockBasicFP14J3DTexGenBlock();
+extern "C" void reset__18J3DTevBlockPatchedFP11J3DTevBlock();
+extern "C" void reset__12J3DTevBlock1FP11J3DTevBlock();
+extern "C" void reset__12J3DTevBlock2FP11J3DTevBlock();
+extern "C" void reset__12J3DTevBlock4FP11J3DTevBlock();
+extern "C" void reset__13J3DTevBlock16FP11J3DTevBlock();
+extern "C" void reset__15J3DIndBlockFullFP11J3DIndBlock();
+extern "C" void reset__16J3DPEBlockFogOffFP10J3DPEBlock();
+extern "C" void reset__14J3DPEBlockFullFP10J3DPEBlock();
+extern "C" void calc__21J3DTexGenBlockPatchedFPA4_Cf();
+extern "C" void calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf();
+extern "C" void calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf();
+extern "C" void calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf();
+extern "C" void diffTevReg__11J3DTevBlockFv();
+extern "C" void diffTevStageIndirect__11J3DTevBlockFv();
+extern "C" void diffTevStage__11J3DTevBlockFv();
+extern "C" void diffTexCoordScale__11J3DTevBlockFv();
+extern "C" void diffTexNo__11J3DTevBlockFv();
+extern "C" void getType__14J3DPEBlockFullFv();
+extern "C" void setFog__14J3DPEBlockFullFP6J3DFog();
+extern "C" void setFog__14J3DPEBlockFullF6J3DFog();
+extern "C" void getFog__14J3DPEBlockFullFv();
+extern "C" void setAlphaComp__14J3DPEBlockFullFRC12J3DAlphaComp();
+extern "C" void setAlphaComp__14J3DPEBlockFullFPC12J3DAlphaComp();
+extern "C" void getAlphaComp__14J3DPEBlockFullFv();
+extern "C" void setBlend__14J3DPEBlockFullFRC8J3DBlend();
+extern "C" void setBlend__14J3DPEBlockFullFPC8J3DBlend();
+extern "C" void getBlend__14J3DPEBlockFullFv();
+extern "C" void setZMode__14J3DPEBlockFullF8J3DZMode();
+extern "C" void setZMode__14J3DPEBlockFullFPC8J3DZMode();
+extern "C" void getZMode__14J3DPEBlockFullFv();
+extern "C" void setZCompLoc__14J3DPEBlockFullFUc();
+extern "C" void setZCompLoc__14J3DPEBlockFullFPCUc();
+extern "C" void getZCompLoc__14J3DPEBlockFullCFv();
+extern "C" void setDither__14J3DPEBlockFullFUc();
+extern "C" void setDither__14J3DPEBlockFullFPCUc();
+extern "C" void getDither__14J3DPEBlockFullCFv();
+extern "C" void getFogOffset__14J3DPEBlockFullCFv();
+extern "C" void setFogOffset__14J3DPEBlockFullFUl();
+extern "C" void __dt__14J3DPEBlockFullFv();
+extern "C" void diff__16J3DPEBlockFogOffFUl();
+extern "C" void getType__16J3DPEBlockFogOffFv();
+extern "C" void setAlphaComp__16J3DPEBlockFogOffFRC12J3DAlphaComp();
+extern "C" void setAlphaComp__16J3DPEBlockFogOffFPC12J3DAlphaComp();
+extern "C" void getAlphaComp__16J3DPEBlockFogOffFv();
+extern "C" void setBlend__16J3DPEBlockFogOffFRC8J3DBlend();
+extern "C" void setBlend__16J3DPEBlockFogOffFPC8J3DBlend();
+extern "C" void getBlend__16J3DPEBlockFogOffFv();
+extern "C" void setZMode__16J3DPEBlockFogOffF8J3DZMode();
+extern "C" void setZMode__16J3DPEBlockFogOffFPC8J3DZMode();
+extern "C" void getZMode__16J3DPEBlockFogOffFv();
+extern "C" void setZCompLoc__16J3DPEBlockFogOffFUc();
+extern "C" void setZCompLoc__16J3DPEBlockFogOffFPCUc();
+extern "C" void getZCompLoc__16J3DPEBlockFogOffCFv();
+extern "C" void setDither__16J3DPEBlockFogOffFUc();
+extern "C" void setDither__16J3DPEBlockFogOffFPCUc();
+extern "C" void getDither__16J3DPEBlockFogOffCFv();
+extern "C" void __dt__16J3DPEBlockFogOffFv();
+extern "C" void indexToPtr__13J3DTevBlock16Fv();
+extern "C" void getType__13J3DTevBlock16Fv();
+extern "C" void setTexNo__13J3DTevBlock16FUlUs();
+extern "C" void setTexNo__13J3DTevBlock16FUlPCUs();
+extern "C" void getTexNo__13J3DTevBlock16CFUl();
+extern "C" void setTevOrder__13J3DTevBlock16FUl11J3DTevOrder();
+extern "C" void setTevOrder__13J3DTevBlock16FUlPC11J3DTevOrder();
+extern "C" void getTevOrder__13J3DTevBlock16FUl();
+extern "C" void setTevColor__13J3DTevBlock16FUl13J3DGXColorS10();
+extern "C" void setTevColor__13J3DTevBlock16FUlPC13J3DGXColorS10();
+extern "C" void getTevColor__13J3DTevBlock16FUl();
+extern "C" void setTevKColor__13J3DTevBlock16FUl10J3DGXColor();
+extern "C" void setTevKColor__13J3DTevBlock16FUlPC10J3DGXColor();
+extern "C" void getTevKColor__13J3DTevBlock16FUl();
+extern "C" void setTevKColorSel__13J3DTevBlock16FUlUc();
+extern "C" void setTevKColorSel__13J3DTevBlock16FUlPCUc();
+extern "C" void getTevKColorSel__13J3DTevBlock16FUl();
+extern "C" void setTevKAlphaSel__13J3DTevBlock16FUlUc();
+extern "C" void setTevKAlphaSel__13J3DTevBlock16FUlPCUc();
+extern "C" void getTevKAlphaSel__13J3DTevBlock16FUl();
+extern "C" void setTevStageNum__13J3DTevBlock16FUc();
+extern "C" void setTevStageNum__13J3DTevBlock16FPCUc();
+extern "C" void getTevStageNum__13J3DTevBlock16CFv();
+extern "C" void setTevStage__13J3DTevBlock16FUl11J3DTevStage();
+extern "C" void setTevStage__13J3DTevBlock16FUlPC11J3DTevStage();
+extern "C" void getTevStage__13J3DTevBlock16FUl();
+extern "C" void setTevSwapModeInfo__13J3DTevBlock16FUl18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeInfo__13J3DTevBlock16FUlPC18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeTable__13J3DTevBlock16FUl19J3DTevSwapModeTable();
+extern "C" void setTevSwapModeTable__13J3DTevBlock16FUlPC19J3DTevSwapModeTable();
+extern "C" void getTevSwapModeTable__13J3DTevBlock16FUl();
+extern "C" void setIndTevStage__13J3DTevBlock16FUl14J3DIndTevStage();
+extern "C" void setIndTevStage__13J3DTevBlock16FUlPC14J3DIndTevStage();
+extern "C" void getIndTevStage__13J3DTevBlock16FUl();
+extern "C" void getTexNoOffset__13J3DTevBlock16CFv();
+extern "C" void getTevRegOffset__13J3DTevBlock16CFv();
+extern "C" void setTevRegOffset__13J3DTevBlock16FUl();
+extern "C" void __dt__13J3DTevBlock16Fv();
+extern "C" void setTexNoOffset__11J3DTevBlockFUl();
+extern "C" void ptrToIndex__12J3DTevBlock4Fv();
+extern "C" void indexToPtr__12J3DTevBlock4Fv();
+extern "C" void getType__12J3DTevBlock4Fv();
+extern "C" void setTexNo__12J3DTevBlock4FUlUs();
+extern "C" void setTexNo__12J3DTevBlock4FUlPCUs();
+extern "C" void getTexNo__12J3DTevBlock4CFUl();
+extern "C" void setTevOrder__12J3DTevBlock4FUl11J3DTevOrder();
+extern "C" void setTevOrder__12J3DTevBlock4FUlPC11J3DTevOrder();
+extern "C" void getTevOrder__12J3DTevBlock4FUl();
+extern "C" void setTevColor__12J3DTevBlock4FUl13J3DGXColorS10();
+extern "C" void setTevColor__12J3DTevBlock4FUlPC13J3DGXColorS10();
+extern "C" void getTevColor__12J3DTevBlock4FUl();
+extern "C" void setTevKColor__12J3DTevBlock4FUl10J3DGXColor();
+extern "C" void setTevKColor__12J3DTevBlock4FUlPC10J3DGXColor();
+extern "C" void getTevKColor__12J3DTevBlock4FUl();
+extern "C" void setTevKColorSel__12J3DTevBlock4FUlUc();
+extern "C" void setTevKColorSel__12J3DTevBlock4FUlPCUc();
+extern "C" void getTevKColorSel__12J3DTevBlock4FUl();
+extern "C" void setTevKAlphaSel__12J3DTevBlock4FUlUc();
+extern "C" void setTevKAlphaSel__12J3DTevBlock4FUlPCUc();
+extern "C" void getTevKAlphaSel__12J3DTevBlock4FUl();
+extern "C" void setTevStageNum__12J3DTevBlock4FUc();
+extern "C" void setTevStageNum__12J3DTevBlock4FPCUc();
+extern "C" void getTevStageNum__12J3DTevBlock4CFv();
+extern "C" void setTevStage__12J3DTevBlock4FUl11J3DTevStage();
+extern "C" void setTevStage__12J3DTevBlock4FUlPC11J3DTevStage();
+extern "C" void getTevStage__12J3DTevBlock4FUl();
+extern "C" void setTevSwapModeInfo__12J3DTevBlock4FUl18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeInfo__12J3DTevBlock4FUlPC18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeTable__12J3DTevBlock4FUl19J3DTevSwapModeTable();
+extern "C" void setTevSwapModeTable__12J3DTevBlock4FUlPC19J3DTevSwapModeTable();
+extern "C" void getTevSwapModeTable__12J3DTevBlock4FUl();
+extern "C" void setIndTevStage__12J3DTevBlock4FUl14J3DIndTevStage();
+extern "C" void setIndTevStage__12J3DTevBlock4FUlPC14J3DIndTevStage();
+extern "C" void getIndTevStage__12J3DTevBlock4FUl();
+extern "C" void getTexNoOffset__12J3DTevBlock4CFv();
+extern "C" void getTevRegOffset__12J3DTevBlock4CFv();
+extern "C" void setTevRegOffset__12J3DTevBlock4FUl();
+extern "C" void __dt__12J3DTevBlock4Fv();
+extern "C" void ptrToIndex__12J3DTevBlock2Fv();
+extern "C" void indexToPtr__12J3DTevBlock2Fv();
+extern "C" void getType__12J3DTevBlock2Fv();
+extern "C" void setTexNo__12J3DTevBlock2FUlUs();
+extern "C" void setTexNo__12J3DTevBlock2FUlPCUs();
+extern "C" void getTexNo__12J3DTevBlock2CFUl();
+extern "C" void setTevOrder__12J3DTevBlock2FUl11J3DTevOrder();
+extern "C" void setTevOrder__12J3DTevBlock2FUlPC11J3DTevOrder();
+extern "C" void getTevOrder__12J3DTevBlock2FUl();
+extern "C" void setTevColor__12J3DTevBlock2FUl13J3DGXColorS10();
+extern "C" void setTevColor__12J3DTevBlock2FUlPC13J3DGXColorS10();
+extern "C" void getTevColor__12J3DTevBlock2FUl();
+extern "C" void setTevKColor__12J3DTevBlock2FUl10J3DGXColor();
+extern "C" void setTevKColor__12J3DTevBlock2FUlPC10J3DGXColor();
+extern "C" void getTevKColor__12J3DTevBlock2FUl();
+extern "C" void setTevKColorSel__12J3DTevBlock2FUlUc();
+extern "C" void setTevKColorSel__12J3DTevBlock2FUlPCUc();
+extern "C" void getTevKColorSel__12J3DTevBlock2FUl();
+extern "C" void setTevKAlphaSel__12J3DTevBlock2FUlUc();
+extern "C" void setTevKAlphaSel__12J3DTevBlock2FUlPCUc();
+extern "C" void getTevKAlphaSel__12J3DTevBlock2FUl();
+extern "C" void setTevStageNum__12J3DTevBlock2FUc();
+extern "C" void setTevStageNum__12J3DTevBlock2FPCUc();
+extern "C" void getTevStageNum__12J3DTevBlock2CFv();
+extern "C" void setTevStage__12J3DTevBlock2FUl11J3DTevStage();
+extern "C" void setTevStage__12J3DTevBlock2FUlPC11J3DTevStage();
+extern "C" void getTevStage__12J3DTevBlock2FUl();
+extern "C" void setTevSwapModeInfo__12J3DTevBlock2FUl18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeInfo__12J3DTevBlock2FUlPC18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeTable__12J3DTevBlock2FUl19J3DTevSwapModeTable();
+extern "C" void setTevSwapModeTable__12J3DTevBlock2FUlPC19J3DTevSwapModeTable();
+extern "C" void getTevSwapModeTable__12J3DTevBlock2FUl();
+extern "C" void setIndTevStage__12J3DTevBlock2FUl14J3DIndTevStage();
+extern "C" void setIndTevStage__12J3DTevBlock2FUlPC14J3DIndTevStage();
+extern "C" void getIndTevStage__12J3DTevBlock2FUl();
+extern "C" void getTexNoOffset__12J3DTevBlock2CFv();
+extern "C" void getTevRegOffset__12J3DTevBlock2CFv();
+extern "C" void setTevRegOffset__12J3DTevBlock2FUl();
+extern "C" void __dt__12J3DTevBlock2Fv();
+extern "C" void ptrToIndex__12J3DTevBlock1Fv();
+extern "C" void indexToPtr__12J3DTevBlock1Fv();
+extern "C" void getType__12J3DTevBlock1Fv();
+extern "C" void setTexNo__12J3DTevBlock1FUlUs();
+extern "C" void setTexNo__12J3DTevBlock1FUlPCUs();
+extern "C" void getTexNo__12J3DTevBlock1CFUl();
+extern "C" void setTevOrder__12J3DTevBlock1FUl11J3DTevOrder();
+extern "C" void setTevOrder__12J3DTevBlock1FUlPC11J3DTevOrder();
+extern "C" void getTevOrder__12J3DTevBlock1FUl();
+extern "C" void setTevStageNum__12J3DTevBlock1FUc();
+extern "C" void setTevStageNum__12J3DTevBlock1FPCUc();
+extern "C" bool getTevStageNum__12J3DTevBlock1CFv();
+extern "C" void setTevStage__12J3DTevBlock1FUl11J3DTevStage();
+extern "C" void setTevStage__12J3DTevBlock1FUlPC11J3DTevStage();
+extern "C" void getTevStage__12J3DTevBlock1FUl();
+extern "C" void setIndTevStage__12J3DTevBlock1FUl14J3DIndTevStage();
+extern "C" void setIndTevStage__12J3DTevBlock1FUlPC14J3DIndTevStage();
+extern "C" void getIndTevStage__12J3DTevBlock1FUl();
+extern "C" void getTexNoOffset__12J3DTevBlock1CFv();
+extern "C" void __dt__12J3DTevBlock1Fv();
+extern "C" void setTevKColorSel__11J3DTevBlockFUlPCUc();
+extern "C" void setTevKAlphaSel__11J3DTevBlockFUlPCUc();
+extern "C" void setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo();
+extern "C" void setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable();
+extern "C" bool getTevRegOffset__11J3DTevBlockCFv();
+extern "C" void setTevRegOffset__11J3DTevBlockFUl();
+extern "C" void load__18J3DTevBlockPatchedFv();
+extern "C" void indexToPtr__18J3DTevBlockPatchedFv();
+extern "C" void getType__18J3DTevBlockPatchedFv();
+extern "C" void setTevStageNum__18J3DTevBlockPatchedFUc();
+extern "C" void setTevStageNum__18J3DTevBlockPatchedFPCUc();
+extern "C" void getTevStageNum__18J3DTevBlockPatchedCFv();
+extern "C" void setTexNo__18J3DTevBlockPatchedFUlUs();
+extern "C" void setTexNo__18J3DTevBlockPatchedFUlPCUs();
+extern "C" void getTexNo__18J3DTevBlockPatchedCFUl();
+extern "C" void setTevOrder__18J3DTevBlockPatchedFUl11J3DTevOrder();
+extern "C" void setTevOrder__18J3DTevBlockPatchedFUlPC11J3DTevOrder();
+extern "C" void getTevOrder__18J3DTevBlockPatchedFUl();
+extern "C" void setTevStage__18J3DTevBlockPatchedFUl11J3DTevStage();
+extern "C" void setTevStage__18J3DTevBlockPatchedFUlPC11J3DTevStage();
+extern "C" void getTevStage__18J3DTevBlockPatchedFUl();
+extern "C" void setIndTevStage__18J3DTevBlockPatchedFUl14J3DIndTevStage();
+extern "C" void setIndTevStage__18J3DTevBlockPatchedFUlPC14J3DIndTevStage();
+extern "C" void getIndTevStage__18J3DTevBlockPatchedFUl();
+extern "C" void setTevColor__18J3DTevBlockPatchedFUl13J3DGXColorS10();
+extern "C" void setTevColor__18J3DTevBlockPatchedFUlPC13J3DGXColorS10();
+extern "C" void getTevColor__18J3DTevBlockPatchedFUl();
+extern "C" void setTevKColor__18J3DTevBlockPatchedFUl10J3DGXColor();
+extern "C" void setTevKColor__18J3DTevBlockPatchedFUlPC10J3DGXColor();
+extern "C" void getTevKColor__18J3DTevBlockPatchedFUl();
+extern "C" void setTevKColorSel__18J3DTevBlockPatchedFUlUc();
+extern "C" void setTevKColorSel__18J3DTevBlockPatchedFUlPCUc();
+extern "C" void getTevKColorSel__18J3DTevBlockPatchedFUl();
+extern "C" void getTexNoOffset__18J3DTevBlockPatchedCFv();
+extern "C" void getTevRegOffset__18J3DTevBlockPatchedCFv();
+extern "C" void setTevRegOffset__18J3DTevBlockPatchedFUl();
+extern "C" void __dt__18J3DTevBlockPatchedFv();
+extern "C" void getType__19J3DTexGenBlockBasicFv();
+extern "C" void setNBTScale__19J3DTexGenBlockBasicF11J3DNBTScale();
+extern "C" void setNBTScale__19J3DTexGenBlockBasicFPC11J3DNBTScale();
+extern "C" void getNBTScale__19J3DTexGenBlockBasicFv();
+extern "C" void __dt__19J3DTexGenBlockBasicFv();
+extern "C" void setTexGenNum__21J3DTexGenBlockPatchedFUl();
+extern "C" void setTexGenNum__21J3DTexGenBlockPatchedFPCUl();
+extern "C" void getTexGenNum__21J3DTexGenBlockPatchedCFv();
+extern "C" void setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord();
+extern "C" void getTexCoord__21J3DTexGenBlockPatchedFUl();
+extern "C" void setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx();
+extern "C" void getTexMtx__21J3DTexGenBlockPatchedFUl();
+extern "C" void getTexMtxOffset__21J3DTexGenBlockPatchedCFv();
+extern "C" void setTexMtxOffset__21J3DTexGenBlockPatchedFUl();
+extern "C" void getType__15J3DTexGenBlock4Fv();
+extern "C" void setNBTScale__15J3DTexGenBlock4F11J3DNBTScale();
+extern "C" void setNBTScale__15J3DTexGenBlock4FPC11J3DNBTScale();
+extern "C" void getNBTScale__15J3DTexGenBlock4Fv();
+extern "C" void __dt__15J3DTexGenBlock4Fv();
+extern "C" void load__21J3DTexGenBlockPatchedFv();
+extern "C" void getType__21J3DTexGenBlockPatchedFv();
+extern "C" void getType__20J3DColorBlockLightOnFv();
+extern "C" void setMatColor__20J3DColorBlockLightOnFUl10J3DGXColor();
+extern "C" void setMatColor__20J3DColorBlockLightOnFUlPC10J3DGXColor();
+extern "C" void getMatColor__20J3DColorBlockLightOnFUl();
+extern "C" void setAmbColor__20J3DColorBlockLightOnFUl10J3DGXColor();
+extern "C" void setAmbColor__20J3DColorBlockLightOnFUlPC10J3DGXColor();
+extern "C" void getAmbColor__20J3DColorBlockLightOnFUl();
+extern "C" void setColorChanNum__20J3DColorBlockLightOnFPCUc();
+extern "C" void setColorChanNum__20J3DColorBlockLightOnFUc();
+extern "C" void getColorChanNum__20J3DColorBlockLightOnCFv();
+extern "C" void setColorChan__20J3DColorBlockLightOnFUlPC12J3DColorChan();
+extern "C" void setColorChan__20J3DColorBlockLightOnFUlRC12J3DColorChan();
+extern "C" void getColorChan__20J3DColorBlockLightOnFUl();
+extern "C" void setLight__20J3DColorBlockLightOnFUlP11J3DLightObj();
+extern "C" void getLight__20J3DColorBlockLightOnFUl();
+extern "C" void setCullMode__20J3DColorBlockLightOnFUc();
+extern "C" void setCullMode__20J3DColorBlockLightOnFPCUc();
+extern "C" void getCullMode__20J3DColorBlockLightOnCFv();
+extern "C" void getMatColorOffset__20J3DColorBlockLightOnCFv();
+extern "C" void getColorChanOffset__20J3DColorBlockLightOnCFv();
+extern "C" void setMatColorOffset__20J3DColorBlockLightOnFUl();
+extern "C" void setColorChanOffset__20J3DColorBlockLightOnFUl();
+extern "C" void __dt__20J3DColorBlockLightOnFv();
+extern "C" void getType__22J3DColorBlockAmbientOnFv();
+extern "C" void setAmbColor__22J3DColorBlockAmbientOnFUl10J3DGXColor();
+extern "C" void setAmbColor__22J3DColorBlockAmbientOnFUlPC10J3DGXColor();
+extern "C" void getAmbColor__22J3DColorBlockAmbientOnFUl();
+extern "C" void __dt__22J3DColorBlockAmbientOnFv();
+extern "C" void setMatColor__21J3DColorBlockLightOffFUl10J3DGXColor();
+extern "C" void setMatColor__21J3DColorBlockLightOffFUlPC10J3DGXColor();
+extern "C" void getMatColor__21J3DColorBlockLightOffFUl();
+extern "C" void setColorChanNum__21J3DColorBlockLightOffFPCUc();
+extern "C" void setColorChanNum__21J3DColorBlockLightOffFUc();
+extern "C" void getColorChanNum__21J3DColorBlockLightOffCFv();
+extern "C" void setColorChan__21J3DColorBlockLightOffFUlPC12J3DColorChan();
+extern "C" void setColorChan__21J3DColorBlockLightOffFUlRC12J3DColorChan();
+extern "C" void getColorChan__21J3DColorBlockLightOffFUl();
+extern "C" void setCullMode__21J3DColorBlockLightOffFUc();
+extern "C" void setCullMode__21J3DColorBlockLightOffFPCUc();
+extern "C" void getCullMode__21J3DColorBlockLightOffCFv();
+extern "C" void getMatColorOffset__21J3DColorBlockLightOffCFv();
+extern "C" void getColorChanOffset__21J3DColorBlockLightOffCFv();
+extern "C" void setMatColorOffset__21J3DColorBlockLightOffFUl();
+extern "C" void setColorChanOffset__21J3DColorBlockLightOffFUl();
+extern "C" void getType__13J3DPEBlockXluFv();
+extern "C" void __dt__13J3DPEBlockXluFv();
+extern "C" void getType__17J3DPEBlockTexEdgeFv();
+extern "C" void __dt__17J3DPEBlockTexEdgeFv();
+extern "C" void getType__13J3DPEBlockOpaFv();
+extern "C" void __dt__13J3DPEBlockOpaFv();
+extern "C" void getType__15J3DIndBlockFullFv();
+extern "C" void setIndTexStageNum__15J3DIndBlockFullFUc();
+extern "C" void getIndTexStageNum__15J3DIndBlockFullCFv();
+extern "C" void setIndTexOrder__15J3DIndBlockFullFUl14J3DIndTexOrder();
+extern "C" void setIndTexOrder__15J3DIndBlockFullFUlPC14J3DIndTexOrder();
+extern "C" void getIndTexOrder__15J3DIndBlockFullFUl();
+extern "C" void setIndTexMtx__15J3DIndBlockFullFUl12J3DIndTexMtx();
+extern "C" void setIndTexMtx__15J3DIndBlockFullFUlPC12J3DIndTexMtx();
+extern "C" void getIndTexMtx__15J3DIndBlockFullFUl();
+extern "C" void setIndTexCoordScale__15J3DIndBlockFullFUl19J3DIndTexCoordScale();
+extern "C" void setIndTexCoordScale__15J3DIndBlockFullFUlPC19J3DIndTexCoordScale();
+extern "C" void getIndTexCoordScale__15J3DIndBlockFullFUl();
+extern "C" void __dt__15J3DIndBlockFullFv();
+extern "C" void patchTexNo__11J3DTevBlockFv();
+extern "C" void patchTevReg__11J3DTevBlockFv();
+extern "C" void setTexNo__11J3DTevBlockFUlPCUs();
+extern "C" void setTevOrder__11J3DTevBlockFUlPC11J3DTevOrder();
+extern "C" void setTevStageNum__11J3DTevBlockFPCUc();
+extern "C" void setTevStage__11J3DTevBlockFUlPC11J3DTevStage();
+extern "C" void setIndTevStage__11J3DTevBlockFUlPC14J3DIndTevStage();
+extern "C" u32 getTexNoOffset__11J3DTevBlockCFv();
+extern "C" void getType__21J3DColorBlockLightOffFv();
+extern "C" void __sinit_J3DMatBlock_cpp();
+extern "C" extern char const* const J3DMatBlock__stringBase0;
+
+//
+// External References:
+//
+
+extern "C" void patchTexNoAndTexCoordScale__11J3DTevBlockFv();
+extern "C" void patch__10J3DPEBlockFv();
+extern "C" void patch__11J3DTevBlockFv();
+extern "C" bool getZCompLoc__10J3DPEBlockCFv();
+extern "C" bool getZMode__10J3DPEBlockFv();
+extern "C" bool getBlend__10J3DPEBlockFv();
+extern "C" bool getAlphaComp__10J3DPEBlockFv();
+extern "C" bool getFog__10J3DPEBlockFv();
+extern "C" bool getIndTevStage__11J3DTevBlockFUl();
+extern "C" bool getTevStage__11J3DTevBlockFUl();
+extern "C" void getTexNo__11J3DTevBlockCFUl();
+extern "C" bool getTevSwapModeTable__11J3DTevBlockFUl();
+extern "C" bool getTevKAlphaSel__11J3DTevBlockFUl();
+extern "C" bool getTevKColorSel__11J3DTevBlockFUl();
+extern "C" bool getTevOrder__11J3DTevBlockFUl();
+extern "C" bool getTevKColor__11J3DTevBlockFUl();
+extern "C" bool getTevColor__11J3DTevBlockFUl();
+extern "C" bool getTevStageNum__11J3DTevBlockCFv();
+extern "C" bool getAmbColor__13J3DColorBlockFUl();
+extern "C" void setZCompLoc__10J3DPEBlockFUc();
+extern "C" void setZMode__10J3DPEBlockF8J3DZMode();
+extern "C" void setBlend__10J3DPEBlockFRC8J3DBlend();
+extern "C" void setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp();
+extern "C" void __dt__19J3DIndTexCoordScaleFv();
+extern "C" void __dt__12J3DIndTexMtxFv();
+extern "C" void setIndTevStage__11J3DTevBlockFUl14J3DIndTevStage();
+extern "C" void setTevStage__11J3DTevBlockFUl11J3DTevStage();
+extern "C" void setTexNo__11J3DTevBlockFUlUs();
+extern "C" void setTevSwapModeTable__11J3DTevBlockFUl19J3DTevSwapModeTable();
+extern "C" void setTevKAlphaSel__11J3DTevBlockFUlUc();
+extern "C" void setTevKColorSel__11J3DTevBlockFUlUc();
+extern "C" void setTevOrder__11J3DTevBlockFUl11J3DTevOrder();
+extern "C" void setTevKColor__11J3DTevBlockFUl10J3DGXColor();
+extern "C" void setTevColor__11J3DTevBlockFUl13J3DGXColorS10();
+extern "C" void setTevStageNum__11J3DTevBlockFUc();
+extern "C" void setAmbColor__13J3DColorBlockFUl10J3DGXColor();
+extern "C" void setTevKColor__11J3DTevBlockFUlPC10J3DGXColor();
+extern "C" void setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10();
+extern "C" void setLight__13J3DColorBlockFUlP11J3DLightObj();
+extern "C" void setAmbColor__13J3DColorBlockFUlPC10J3DGXColor();
+extern "C" void __dl__FPv();
+extern "C" void J3DGDSetTexCoordScale2__F13_GXTexCoordIDUsUcUcUsUcUc();
+extern "C" void J3DGDSetIndTexMtx__F14_GXIndTexMtxIDPA3_fSc();
+extern "C" void
+J3DGDSetIndTexCoordScale__F16_GXIndTexStageID14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale();
+extern "C" void
+J3DGDSetIndTexOrder__FUl13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID();
+extern "C" void
+J3DGDSetTevOrder__F13_GXTevStageID13_GXTexCoordID11_GXTexMapID12_GXChannelID13_GXTexCoordID11_GXTexMapID12_GXChannelID();
+extern "C" void J3DGDSetTevKColor__F14_GXTevKColorID8_GXColor();
+extern "C" void J3DGDSetTevColorS10__F11_GXTevRegID11_GXColorS10();
+extern "C" void J3DGDSetFog__F10_GXFogTypeffff8_GXColor();
+extern "C" void J3DGDSetFogRangeAdj__FUcUsP14_GXFogAdjTable();
+extern "C" void __dt__21J3DColorBlockLightOffFv();
+extern "C" void __dt__21J3DTexGenBlockPatchedFv();
+extern "C" void __dt__11J3DTevBlockFv();
+extern "C" bool countDLSize__11J3DTevBlockFv();
+extern "C" void load__11J3DTevBlockFv();
+extern "C" bool getNBTScale__14J3DTexGenBlockFv();
+extern "C" void diff__10J3DPEBlockFUl();
+extern "C" void reset__10J3DPEBlockFP10J3DPEBlock();
+extern "C" void reset__11J3DTevBlockFP11J3DTevBlock();
+extern "C" void diffFog__10J3DPEBlockFv();
+extern "C" void diffBlend__10J3DPEBlockFv();
+extern "C" void setFog__10J3DPEBlockFP6J3DFog();
+extern "C" void setFog__10J3DPEBlockF6J3DFog();
+extern "C" void setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp();
+extern "C" void setBlend__10J3DPEBlockFPC8J3DBlend();
+extern "C" void setZMode__10J3DPEBlockFPC8J3DZMode();
+extern "C" void setZCompLoc__10J3DPEBlockFPCUc();
+extern "C" void setDither__10J3DPEBlockFUc();
+extern "C" void setDither__10J3DPEBlockFPCUc();
+extern "C" bool getDither__10J3DPEBlockCFv();
+extern "C" bool getFogOffset__10J3DPEBlockCFv();
+extern "C" void setFogOffset__10J3DPEBlockFUl();
+extern "C" void setNBTScale__14J3DTexGenBlockF11J3DNBTScale();
+extern "C" void setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale();
+extern "C" void diffAmbColor__13J3DColorBlockFv();
+extern "C" void diffLightObj__13J3DColorBlockFUl();
+extern "C" bool getLight__13J3DColorBlockFUl();
+extern "C" void load__11J3DLightObjCFUl();
+extern "C" void loadTexCoordGens__FUlP11J3DTexCoord();
+extern "C" void load__9J3DTexMtxCFUl();
+extern "C" void calc__9J3DTexMtxFPA4_Cf();
+extern "C" void calcPostTexMtx__9J3DTexMtxFPA4_Cf();
+extern "C" void isTexNoReg__FPv();
+extern "C" void getTexNoReg__FPv();
+extern "C" void loadTexNo__FUlRCUs();
+extern "C" void patchTexNo_PtrToIdx__FUlRCUs();
+extern "C" void __as__16J3DIndTexMtxInfoFRC16J3DIndTexMtxInfo();
+extern "C" void __as__10J3DFogInfoFRC10J3DFogInfo();
+extern "C" void __as__15J3DNBTScaleInfoFRC15J3DNBTScaleInfo();
+extern "C" void GDOverflowed();
+extern "C" void __destroy_arr();
+extern "C" void _savegpr_24();
+extern "C" void _savegpr_25();
+extern "C" void _savegpr_26();
+extern "C" void _savegpr_27();
+extern "C" void _savegpr_28();
+extern "C" void _savegpr_29();
+extern "C" void _restgpr_24();
+extern "C" void _restgpr_25();
+extern "C" void _restgpr_26();
+extern "C" void _restgpr_27();
+extern "C" void _restgpr_28();
+extern "C" void _restgpr_29();
+extern "C" extern void* __vt__10J3DPEBlock[31];
+extern "C" extern void* __vt__11J3DIndBlock[19];
+extern "C" extern void* __vt__14J3DTexGenBlock[27];
+extern "C" extern void* __vt__13J3DColorBlock[36];
+extern "C" u8 sTexCoordScaleTable__6J3DSys[64 + 4 /* padding */];
+extern "C" extern u8 j3dAlphaCmpTable[768];
+extern "C" extern u8 j3dZModeTable[96];
+
+/* 8031747C-803174DC 311DBC 0060+00 0/0 1/1 0/0 .text initialize__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::initialize() {
+ mColorChanNum = 0;
+ for (u32 i = 0; i < ARRAY_SIZE(mMatColor); i++) {
+ mMatColor[i] = j3dDefaultColInfo;
+ }
+ mMatColorOffset = 0;
+ mColorChanOffset = 0;
+}
+
+/* 803174DC-80317580 311E1C 00A4+00 0/0 1/1 0/0 .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;
+}
+
+/* 80317580-80317644 311EC0 00C4+00 0/0 1/1 0/0 .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;
+}
+
+/* 80317644-80317674 311F84 0030+00 0/0 2/2 0/0 .text initialize__21J3DTexGenBlockPatchedFv */
+void J3DTexGenBlockPatched::initialize() {
+ mTexGenNum = 0;
+ for (u32 i = 0; i < 8; i++)
+ mTexMtx[i] = NULL;
+ mTexMtxOffset = 0;
+}
+
+/* 80317674-803176A4 311FB4 0030+00 0/0 1/1 0/0 .text initialize__15J3DTexGenBlock4Fv */
+void J3DTexGenBlock4::initialize() {
+ mTexGenNum = 0;
+ for (u32 i = 0; i < 4; i++)
+ mTexMtx[i] = NULL;
+ mTexMtxOffset = 0;
+}
+
+/* 803176A4-803176D4 311FE4 0030+00 0/0 1/1 0/0 .text initialize__19J3DTexGenBlockBasicFv
+ */
+void J3DTexGenBlockBasic::initialize() {
+ mTexGenNum = 0;
+ for (u32 i = 0; i < 8; i++)
+ mTexMtx[i] = NULL;
+ mTexMtxOffset = 0;
+}
+
+/* 803176D4-803176E0 312014 000C+00 0/0 1/1 0/0 .text initialize__15J3DTevBlockNullFv */
+void J3DTevBlockNull::initialize() {
+ mTexNoOffset = 0;
+}
+
+/* 803176E0-803177E8 312020 0108+00 0/0 1/1 0/0 .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;
+}
+
+/* 803177E8-80317810 312128 0028+00 0/0 1/1 0/0 .text initialize__12J3DTevBlock1Fv */
+void J3DTevBlock1::initialize() {
+ mTexNo[0] = 0xFFFF;
+ mTevStage[0].field_0x0 = 0xC0;
+ mTevStage[0].field_0x4 = 0xC1;
+ mTexNoOffset = 0;
+}
+
+/* 80317810-803178EC 312150 00DC+00 0/0 1/1 0/0 .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;
+}
+
+/* 803178EC-80317A00 31222C 0114+00 0/0 1/1 0/0 .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;
+}
+
+/* 80317A00-80317B28 312340 0128+00 0/0 1/1 0/0 .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;
+}
+
+/* 80317B28-80317B34 312468 000C+00 0/0 1/1 0/0 .text initialize__15J3DIndBlockFullFv */
+void J3DIndBlockFull::initialize() {
+ mIndTexStageNum = 0;
+}
+
+/* 80317B34-80317B58 312474 0024+00 0/0 1/1 0/0 .text initialize__16J3DPEBlockFogOffFv */
+void J3DPEBlockFogOff::initialize() {
+ mAlphaComp.mID = 0xFFFF;
+ mZMode.mZModeID = 0xFFFF;
+ mZCompLoc = 0xFF;
+ mDither = 1;
+}
+
+/* 80317B58-80317B84 312498 002C+00 0/0 1/1 0/0 .text initialize__14J3DPEBlockFullFv */
+void J3DPEBlockFull::initialize() {
+ mAlphaComp.mID = 0xFFFF;
+ mZMode.mZModeID = 0xFFFF;
+ mZCompLoc = 0xFF;
+ mDither = 1;
+ mFogOffset = 0;
+}
+
+/* 80317B84-80317B8C 3124C4 0008+00 1/0 0/0 0/0 .text countDLSize__21J3DColorBlockLightOffFv */
+s32 J3DColorBlockLightOff::countDLSize() {
+ return 34;
+}
+
+/* 80317B8C-80317B94 3124CC 0008+00 1/0 0/0 0/0 .text countDLSize__22J3DColorBlockAmbientOnFv */
+s32 J3DColorBlockAmbientOn::countDLSize() {
+ return 47;
+}
+
+/* 80317B94-80317B9C 3124D4 0008+00 1/0 0/0 0/0 .text countDLSize__20J3DColorBlockLightOnFv */
+s32 J3DColorBlockLightOn::countDLSize() {
+ return 623;
+}
+
+/* 80317B9C-80317BA4 3124DC 0008+00 1/0 0/0 0/0 .text countDLSize__21J3DTexGenBlockPatchedFv */
+s32 J3DTexGenBlockPatched::countDLSize() {
+ return 424;
+}
+
+/* 80317BA4-80317BAC 3124E4 0008+00 1/0 0/0 0/0 .text countDLSize__15J3DTexGenBlock4Fv */
+s32 J3DTexGenBlock4::countDLSize() {
+ return 254;
+}
+
+/* 80317BAC-80317BB4 3124EC 0008+00 1/0 0/0 0/0 .text countDLSize__19J3DTexGenBlockBasicFv */
+s32 J3DTexGenBlockBasic::countDLSize() {
+ return 498;
+}
+
+/* 80317BB4-80317BBC 3124F4 0008+00 1/0 0/0 0/0 .text countDLSize__18J3DTevBlockPatchedFv
+ */
+s32 J3DTevBlockPatched::countDLSize() {
+ return 560;
+}
+
+/* 80317BBC-80317BC4 3124FC 0008+00 1/0 0/0 0/0 .text countDLSize__12J3DTevBlock1Fv */
+s32 J3DTevBlock1::countDLSize() {
+ return 105;
+}
+
+/* 80317BC4-80317BCC 312504 0008+00 1/0 0/0 0/0 .text countDLSize__12J3DTevBlock2Fv */
+s32 J3DTevBlock2::countDLSize() {
+ return 335;
+}
+
+/* 80317BCC-80317BD4 31250C 0008+00 1/0 0/0 0/0 .text countDLSize__12J3DTevBlock4Fv */
+s32 J3DTevBlock4::countDLSize() {
+ return 580;
+}
+
+/* 80317BD4-80317BDC 312514 0008+00 1/0 0/0 0/0 .text countDLSize__13J3DTevBlock16Fv */
+s32 J3DTevBlock16::countDLSize() {
+ return 1000;
+}
+
+/* 80317BDC-80317BE4 31251C 0008+00 1/0 0/0 0/0 .text countDLSize__15J3DIndBlockFullFv */
+s32 J3DIndBlockFull::countDLSize() {
+ return 140;
+}
+
+/* 80317BE4-80317BEC 312524 0008+00 1/0 0/0 0/0 .text countDLSize__13J3DPEBlockOpaFv */
+s32 J3DPEBlockOpa::countDLSize() {
+ return 30;
+}
+
+/* 80317BEC-80317BF4 31252C 0008+00 1/0 0/0 0/0 .text countDLSize__17J3DPEBlockTexEdgeFv
+ */
+s32 J3DPEBlockTexEdge::countDLSize() {
+ return 30;
+}
+
+/* 80317BF4-80317BFC 312534 0008+00 1/0 0/0 0/0 .text countDLSize__13J3DPEBlockXluFv */
+s32 J3DPEBlockXlu::countDLSize() {
+ return 30;
+}
+
+/* 80317BFC-80317C04 31253C 0008+00 1/0 0/0 0/0 .text countDLSize__16J3DPEBlockFogOffFv
+ */
+s32 J3DPEBlockFogOff::countDLSize() {
+ return 30;
+}
+
+/* 80317C04-80317C0C 312544 0008+00 1/0 0/0 0/0 .text countDLSize__14J3DPEBlockFullFv */
+s32 J3DPEBlockFull::countDLSize() {
+ return 85;
+}
+
+/* ############################################################################################## */
+/* 80450960-80450964 0003E0 0004+00 5/5 0/0 0/0 .sdata SizeOfLoadMatColors */
+SECTION_SDATA static u32 SizeOfLoadMatColors = 0x0000000D;
+
+/* ############################################################################################## */
+/* 80450964-80450968 0003E4 0004+00 2/2 0/0 0/0 .sdata SizeOfLoadAmbColors */
+SECTION_SDATA static u32 SizeOfLoadAmbColors = 0x0000000D;
+
+/* 80450968-80450970 0003E8 0004+04 5/5 0/0 0/0 .sdata SizeOfLoadColorChans */
+SECTION_SDATA static u32 SizeOfLoadColorChans = 21;
+
+/* ############################################################################################## */
+/* 804515D8-804515DC 000AD8 0004+00 2/2 0/0 0/0 .sbss SizeOfJ3DColorBlockLightOffLoad */
+static u32 SizeOfJ3DColorBlockLightOffLoad = SizeOfLoadMatColors + SizeOfLoadColorChans;
+
+/* 804563A8-804563AC 0049A8 0004+00 7/7 0/0 0/0 .sdata2 @585 */
+SECTION_SDATA2 static u32 lit_585 = 0x02000201;
+
+/* 80317C0C-8031816C 31254C 0560+00 1/0 0/0 0/0 .text load__21J3DColorBlockLightOffFv */
+// Issues with mColorChanID
+#ifdef NONMATCHING
+void J3DColorBlockLightOff::load() {
+ GDOverflowCheck(SizeOfJ3DColorBlockLightOffLoad);
+ mMatColorOffset = GDGetCurrOffset();
+ loadMatColors(mMatColor);
+ mColorChanOffset = GDGetCurrOffset();
+ J3DGDWriteXFCmdHdr(0x100e, 4);
+ mColorChan[0].load();
+ mColorChan[1].load();
+ mColorChan[2].load();
+ mColorChan[3].load();
+}
+#else
+extern "C" void load__21J3DColorBlockLightOffFv() {
+ // asm void J3DColorBlockLightOff::load() {
+ // NONMATCHING
+}
+#endif
+
+/* ############################################################################################## */
+/* 804515DC-804515E0 000ADC 0004+00 3/3 0/0 0/0 .sbss SizeOfJ3DColorBlockAmbientOnLoad */
+static u32 SizeOfJ3DColorBlockAmbientOnLoad = SizeOfLoadMatColors + SizeOfLoadAmbColors + SizeOfLoadColorChans;
+
+/* 8031816C-803187F4 312AAC 0688+00 1/0 0/0 0/0 .text load__22J3DColorBlockAmbientOnFv */
+extern "C" void load__22J3DColorBlockAmbientOnFv() {
+ // asm void J3DColorBlockAmbientOn::load() {
+ // NONMATCHING
+}
+
+/* 803187F4-80318EB4 313134 06C0+00 1/0 0/0 0/0 .text load__20J3DColorBlockLightOnFv */
+extern "C" void load__20J3DColorBlockLightOnFv() {
+ // asm void J3DColorBlockLightOn::load() {
+ // NONMATCHING
+}
+
+/* 80318EB4-80318F00 3137F4 004C+00 2/0 0/0 0/0 .text patch__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::patch() {
+ patchMatColor();
+ patchLight();
+}
+
+/* 80318F00-803190AC 313840 01AC+00 2/0 0/0 0/0 .text patchMatColor__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::patchMatColor() {
+ GDSetCurrOffset(mMatColorOffset);
+ u8* start = GDGetCurrPointer();
+ GDOverflowCheck(SizeOfLoadMatColors);
+ loadMatColors(mMatColor);
+ u8* end = GDGetCurrPointer();
+ DCStoreRange(start, end - start);
+}
+
+/* 803190AC-803194E8 3139EC 043C+00 2/0 0/0 0/0 .text patchLight__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::patchLight() {
+ // NONMATCHING
+}
+
+/* 803194E8-80319534 313E28 004C+00 1/0 0/0 0/0 .text patch__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::patch() {
+ patchMatColor();
+ patchLight();
+}
+
+/* 80319534-803196E0 313E74 01AC+00 1/0 0/0 0/0 .text patchMatColor__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::patchMatColor() {
+ GDSetCurrOffset(mMatColorOffset);
+ u8* start = GDGetCurrPointer();
+ GDOverflowCheck(SizeOfLoadMatColors);
+ loadMatColors(mMatColor);
+ u8* end = GDGetCurrPointer();
+ DCStoreRange(start, end - start);
+}
+
+/* 803196E0-80319B4C 314020 046C+00 1/0 0/0 0/0 .text patchLight__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::patchLight() {
+ // NONMATCHING
+}
+
+/* 80319B4C-80319BB4 31448C 0068+00 2/0 0/0 0/0 .text diff__21J3DColorBlockLightOffFUl */
+void J3DColorBlockLightOff::diff(u32 flag) {
+ if (flag & 0x1)
+ diffMatColor();
+ if (flag & 0x2)
+ diffColorChan();
+}
+
+/* 80319BB4-80319D30 3144F4 017C+00 2/0 0/0 0/0 .text diffMatColor__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::diffMatColor() {
+ GDOverflowCheck(SizeOfLoadMatColors);
+ loadMatColors(mMatColor);
+}
+
+/* 80319D30-8031A13C 314670 040C+00 2/0 0/0 0/0 .text diffColorChan__21J3DColorBlockLightOffFv */
+void J3DColorBlockLightOff::diffColorChan() {
+ // NONMATCHING
+}
+
+/* 8031A13C-8031A1DC 314A7C 00A0+00 1/0 0/0 0/0 .text diff__20J3DColorBlockLightOnFUl */
+void J3DColorBlockLightOn::diff(u32 flag) {
+ if (flag & 4)
+ diffAmbColor();
+
+ if (flag & 1)
+ diffMatColor();
+
+ if (flag & 2)
+ diffColorChan();
+
+ if ((flag >> 4) & 0x0f)
+ diffLightObj((flag >> 4) & 0x0f);
+}
+
+/* 8031A1DC-8031A358 314B1C 017C+00 1/0 0/0 0/0 .text diffAmbColor__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::diffAmbColor() {
+ GDOverflowCheck(SizeOfLoadAmbColors);
+ loadAmbColors(mAmbColor);
+}
+
+/* 8031A358-8031A4D4 314C98 017C+00 1/0 0/0 0/0 .text diffMatColor__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::diffMatColor() {
+ GDOverflowCheck(SizeOfLoadMatColors);
+ loadMatColors(mMatColor);
+}
+
+/* 8031A4D4-8031A8E0 314E14 040C+00 1/0 0/0 0/0 .text diffColorChan__20J3DColorBlockLightOnFv */
+void J3DColorBlockLightOn::diffColorChan() {
+ // NONMATCHING
+}
+
+/* 8031A8E0-8031A948 315220 0068+00 1/0 0/0 0/0 .text diffLightObj__20J3DColorBlockLightOnFUl */
+void J3DColorBlockLightOn::diffLightObj(u32 param_1) {
+ for (u32 i = 0; i < param_1; i ++) {
+ if (mLight[i] != NULL) {
+ mLight[i]->load(i);
+ }
+ }
+}
+
+/* 8031A948-8031A9E8 315288 00A0+00 1/0 0/0 0/0 .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);
+ }
+}
+
+/* 8031A9E8-8031AA88 315328 00A0+00 1/0 0/0 0/0 .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);
+ }
+}
+
+/* 8031AA88-8031AB18 3153C8 0090+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031AB18-8031ABC0 315458 00A8+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031ABC0-8031AC68 315500 00A8+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031AC68-8031ACD0 3155A8 0068+00 3/0 0/0 0/0 .text diff__21J3DTexGenBlockPatchedFUl */
+void J3DTexGenBlockPatched::diff(u32 flag) {
+ if ((flag >> 8) & 0x0f) {
+ diffTexMtx();
+ if (flag & 0x1000) {
+ diffTexGen();
+ }
+ }
+}
+
+/* 8031ACD0-8031AD30 315610 0060+00 3/0 0/0 0/0 .text diffTexMtx__21J3DTexGenBlockPatchedFv */
+void J3DTexGenBlockPatched::diffTexMtx() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTexMtx); ++i) {
+ if (mTexMtx[i] != NULL) {
+ mTexMtx[i]->load(i);
+ }
+ }
+}
+
+/* 8031AD30-8031AD64 315670 0034+00 3/0 0/0 0/0 .text diffTexGen__21J3DTexGenBlockPatchedFv */
+void J3DTexGenBlockPatched::diffTexGen() {
+ if (mTexGenNum > 0) {
+ loadTexCoordGens(mTexGenNum, mTexCoord);
+ }
+}
+
+/* 8031AD64-8031AFA4 3156A4 0240+00 1/0 0/0 0/0 .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);
+}
+
+/* 8031AFA4-8031B4C0 3158E4 051C+00 1/0 0/0 0/0 .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]),
+ GXTevColor(mTevSwapModeTable[i / 4].getR()),
+ GXTevColor(mTevSwapModeTable[i / 4].getG())
+ );
+ J3DGDSetTevKonstantSel_SwapModeTable(
+ GXTevStageID(i + 2),
+ GXTevKColorSel(mTevKColorSel[0]),
+ GXTevKAlphaSel(mTevKAlphaSel[0]),
+ GXTevKColorSel(mTevKColorSel[1]),
+ GXTevKAlphaSel(mTevKAlphaSel[1]),
+ GXTevColor(mTevSwapModeTable[i / 4].getB()),
+ GXTevColor(mTevSwapModeTable[i / 4].getA())
+ );
+ }
+}
+
+/* 8031B4C0-8031BA04 315E00 0544+00 1/0 0/0 0/0 .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]),
+ GXTevColor(mTevSwapModeTable[i / 4].getR()),
+ GXTevColor(mTevSwapModeTable[i / 4].getG())
+ );
+ J3DGDSetTevKonstantSel_SwapModeTable(
+ GXTevStageID(i + 2),
+ GXTevKColorSel(mTevKColorSel[2]),
+ GXTevKAlphaSel(mTevKAlphaSel[2]),
+ GXTevKColorSel(mTevKColorSel[3]),
+ GXTevKAlphaSel(mTevKAlphaSel[3]),
+ GXTevColor(mTevSwapModeTable[i / 4].getB()),
+ GXTevColor(mTevSwapModeTable[i / 4].getA())
+ );
+ }
+}
+
+/* 8031BA04-8031BF4C 316344 0548+00 1/0 0/0 0/0 .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]),
+ GXTevColor(mTevSwapModeTable[i / 4].getR()),
+ GXTevColor(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]),
+ GXTevColor(mTevSwapModeTable[i / 4].getB()),
+ GXTevColor(mTevSwapModeTable[i / 4].getA())
+ );
+ }
+}
+
+
+/* 8031BF4C-8031BFE0 31688C 0094+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031BFE0-8031C0AC 316920 00CC+00 1/0 0/0 0/0 .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]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+
+ u8 *pEnd = GDGetCurrPointer();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031C0AC-8031C228 3169EC 017C+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031C228-8031C274 316B68 004C+00 1/0 0/0 0/0 .text patch__18J3DTevBlockPatchedFv */
+void J3DTevBlockPatched::patch() {
+ patchTexNo();
+ patchTevReg();
+}
+
+/* 8031C274-8031C2E4 316BB4 0070+00 1/0 0/0 0/0 .text patchTexNo__12J3DTevBlock1Fv */
+void J3DTevBlock1::patchTexNo() {
+ GDSetCurrOffset(mTexNoOffset);
+ u8 *pStart = GDGetCurrPointer();
+
+ if (mTexNo[0] != 0xFFFF) {
+ loadTexNo(0, mTexNo[0]);
+ }
+
+ u8 *pEnd = GDGetCurrPointer();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031C2E4-8031C2E8 316C24 0004+00 1/0 0/0 0/0 .text patchTevReg__12J3DTevBlock1Fv */
+void J3DTevBlock1::patchTevReg() {
+}
+
+/* 8031C2E8-8031C3CC 316C28 00E4+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031C3CC-8031C3F8 316D0C 002C+00 1/0 0/0 0/0 .text patch__12J3DTevBlock1Fv */
+void J3DTevBlock1::patch() {
+ patchTexNo();
+}
+
+/* 8031C3F8-8031C48C 316D38 0094+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031C48C-8031C558 316DCC 00CC+00 1/0 0/0 0/0 .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]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+
+ u8 *pEnd = GDGetCurrPointer();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031C558-8031C6A8 316E98 0150+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031C6A8-8031C6F4 316FE8 004C+00 1/0 0/0 0/0 .text patch__12J3DTevBlock2Fv */
+void J3DTevBlock2::patch() {
+ patchTexNo();
+ patchTevReg();
+}
+
+/* 8031C6F4-8031C788 317034 0094+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031C788-8031C854 3170C8 00CC+00 1/0 0/0 0/0 .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]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+
+ u8 *pEnd = GDGetCurrPointer();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031C854-8031C9D0 317194 017C+00 1/0 0/0 0/0 .text patchTexNoAndTexCoordScale__12J3DTevBlock4Fv
+ */
+void J3DTevBlock4::patchTexNoAndTexCoordScale() {
+ GDSetCurrOffset(mTexNoOffset);
+ u8 *start = GDGetCurrPointer();
+
+ u8 tevStageNum = mTevStageNum;
+ 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]
+ );
+ }
+
+ u8 *end = GDGetCurrPointer();
+ DCStoreRange(start, end - start);
+}
+/* 8031C9D0-8031CA1C 317310 004C+00 1/0 0/0 0/0 .text patch__12J3DTevBlock4Fv */
+void J3DTevBlock4::patch() {
+ patchTexNo();
+ patchTevReg();
+}
+
+/* 8031CA1C-8031CAB0 31735C 0094+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031CAB0-8031CB7C 3173F0 00CC+00 1/0 0/0 0/0 .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]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+
+ u8 *pEnd = GDGetCurrPointer();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031CB7C-8031CCF8 3174BC 017C+00 1/0 0/0 0/0 .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();
+ DCStoreRange(start, end - start);
+}
+
+
+/* 8031CCF8-8031CD44 317638 004C+00 1/0 0/0 0/0 .text patch__13J3DTevBlock16Fv */
+void J3DTevBlock16::patch() {
+ patchTexNo();
+ patchTevReg();
+}
+
+/* 8031CD44-8031CE00 317684 00BC+00 6/0 1/0 0/0 .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();
+ }
+}
+
+/* 8031CE00-8031CE64 317740 0064+00 1/0 0/0 0/0 .text diffTexNo__18J3DTevBlockPatchedFv
+ */
+void J3DTevBlockPatched::diffTexNo() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) {
+ if (mTexNo[i] != 0xFFFF) {
+ loadTexNo(i, mTexNo[i]);
+ }
+ }
+}
+
+/* 8031CE64-8031CF78 3177A4 0114+00 1/0 0/0 0/0 .text diffTevStage__18J3DTevBlockPatchedFv */
+void J3DTevBlockPatched::diffTevStage() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mTevStage[i].load(i);
+ }
+}
+
+/* 8031CF78-8031D028 3178B8 00B0+00 1/0 0/0 0/0 .text diffTevStageIndirect__18J3DTevBlockPatchedFv
+ */
+void J3DTevBlockPatched::diffTevStageIndirect() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mIndTevStage[i].load(i);
+ }
+}
+
+/* 8031D028-8031D0C4 317968 009C+00 1/0 0/0 0/0 .text diffTevReg__18J3DTevBlockPatchedFv
+ */
+void J3DTevBlockPatched::diffTevReg() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) {
+ J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+}
+
+/* 8031D0C4-8031D1BC 317A04 00F8+00 1/0 0/0 0/0 .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]
+ );
+ }
+}
+
+/* 8031D1BC-8031D1F4 317AFC 0038+00 1/0 0/0 0/0 .text diffTexNo__12J3DTevBlock1Fv */
+void J3DTevBlock1::diffTexNo() {
+ if (mTexNo[0] != 0xFFFF) {
+ loadTexNo(0, mTexNo[0]);
+ }
+}
+
+/* 8031D1F4-8031D1F8 317B34 0004+00 1/0 0/0 0/0 .text diffTevReg__12J3DTevBlock1Fv */
+void J3DTevBlock1::diffTevReg() {
+}
+
+/* 8031D1F8-8031D2E8 317B38 00F0+00 1/0 0/0 0/0 .text diffTevStage__12J3DTevBlock1Fv */
+void J3DTevBlock1::diffTevStage() {
+ mTevStage[0].load(0);
+}
+
+/* 8031D2E8-8031D368 317C28 0080+00 1/0 0/0 0/0 .text diffTevStageIndirect__12J3DTevBlock1Fv */
+void J3DTevBlock1::diffTevStageIndirect() {
+ mIndTevStage[0].load(0);
+}
+
+/* 8031D368-8031D3D0 317CA8 0068+00 1/0 0/0 0/0 .text diffTexCoordScale__12J3DTevBlock1Fv
+ */
+void J3DTevBlock1::diffTexCoordScale() {
+ loadTexCoordScale(
+ GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
+ J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
+ );
+}
+
+/* 8031D3D0-8031D434 317D10 0064+00 1/0 0/0 0/0 .text diffTexNo__12J3DTevBlock2Fv */
+void J3DTevBlock2::diffTexNo() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) {
+ if (mTexNo[i] != 0xFFFF) {
+ loadTexNo(i, mTexNo[i]);
+ }
+ }
+}
+
+/* 8031D434-8031D4D0 317D74 009C+00 1/0 0/0 0/0 .text diffTevReg__12J3DTevBlock2Fv */
+void J3DTevBlock2::diffTevReg() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) {
+ J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+}
+
+/* 8031D4D0-8031D5E4 317E10 0114+00 1/0 0/0 0/0 .text diffTevStage__12J3DTevBlock2Fv */
+void J3DTevBlock2::diffTevStage() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mTevStage[i].load(i);
+ }
+}
+
+/* 8031D5E4-8031D694 317F24 00B0+00 1/0 0/0 0/0 .text diffTevStageIndirect__12J3DTevBlock2Fv */
+void J3DTevBlock2::diffTevStageIndirect() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mIndTevStage[i].load(i);
+ }
+}
+
+/* 8031D694-8031D758 317FD4 00C4+00 1/0 0/0 0/0 .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]
+ );
+}
+
+/* 8031D758-8031D7BC 318098 0064+00 1/0 0/0 0/0 .text diffTexNo__12J3DTevBlock4Fv */
+void J3DTevBlock4::diffTexNo() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) {
+ if (mTexNo[i] != 0xFFFF) {
+ loadTexNo(i, mTexNo[i]);
+ }
+ }
+}
+
+/* 8031D7BC-8031D858 3180FC 009C+00 1/0 0/0 0/0 .text diffTevReg__12J3DTevBlock4Fv */
+void J3DTevBlock4::diffTevReg() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) {
+ J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+}
+
+/* 8031D858-8031D96C 318198 0114+00 1/0 0/0 0/0 .text diffTevStage__12J3DTevBlock4Fv */
+void J3DTevBlock4::diffTevStage() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mTevStage[i].load(i);
+ }
+}
+/* 8031D96C-8031DA1C 3182AC 00B0+00 1/0 0/0 0/0 .text diffTevStageIndirect__12J3DTevBlock4Fv */
+void J3DTevBlock4::diffTevStageIndirect() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mIndTevStage[i].load(i);
+ }
+}
+
+/* 8031DA1C-8031DB14 31835C 00F8+00 1/0 0/0 0/0 .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]
+ );
+ }
+}
+/* 8031DB14-8031DB78 318454 0064+00 1/0 0/0 0/0 .text diffTexNo__13J3DTevBlock16Fv */
+void J3DTevBlock16::diffTexNo() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTexNo); i++) {
+ if (mTexNo[i] != 0xFFFF) {
+ loadTexNo(i, mTexNo[i]);
+ }
+ }
+}
+
+/* 8031DB78-8031DC14 3184B8 009C+00 1/0 0/0 0/0 .text diffTevReg__13J3DTevBlock16Fv */
+void J3DTevBlock16::diffTevReg() {
+ for (u32 i = 0; i < ARRAY_SIZE(mTevColor) - 1; i++) {
+ J3DGDSetTevColorS10((GXTevRegID)(i + 1), mTevColor[i]);
+ }
+ for (u32 i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
+ J3DGDSetTevKColor((GXTevKColorID)i, mTevKColor[i]);
+ }
+}
+
+/* 8031DC14-8031DD28 318554 0114+00 1/0 0/0 0/0 .text diffTevStage__13J3DTevBlock16Fv */
+void J3DTevBlock16::diffTevStage() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mTevStage[i].load(i);
+ }
+}
+
+/* 8031DD28-8031DDD8 318668 00B0+00 1/0 0/0 0/0 .text diffTevStageIndirect__13J3DTevBlock16Fv */
+void J3DTevBlock16::diffTevStageIndirect() {
+ u8 tevStageNum = mTevStageNum;
+ for (u32 i = 0; i < tevStageNum; i++) {
+ mIndTevStage[i].load(i);
+ }
+}
+
+/* 8031DDD8-8031DED0 318718 00F8+00 1/0 0/0 0/0 .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]
+ );
+ }
+}
+
+/* 8031DED0-8031DFB4 318810 00E4+00 1/0 0/0 0/0 .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();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031DFB4-8031E098 3188F4 00E4+00 1/0 0/0 0/0 .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();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031E098-8031E12C 3189D8 0094+00 5/5 1/1 0/0 .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();
+ DCStoreRange(pStart, pEnd - pStart);
+}
+
+/* 8031E12C-8031E328 318A6C 01FC+00 1/0 0/0 0/0 .text load__15J3DIndBlockFullFv */
+// regalloc
+#ifdef NONMATCHING
+void J3DIndBlockFull::load() {
+ 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),
+ mIndTexCoordScale[i].getScaleS(),
+ mIndTexCoordScale[i].getScaleT(),
+ mIndTexCoordScale[i + 1].getScaleS(),
+ mIndTexCoordScale[i + 1].getScaleT()
+ );
+ }
+ loadTexCoordScale(mIndTexOrder[0].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]);
+ loadTexCoordScale(mIndTexOrder[1].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[1].getMap() & 7]);
+ loadTexCoordScale(mIndTexOrder[2].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[2].getMap() & 7]);
+ loadTexCoordScale(mIndTexOrder[3].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[3].getMap() & 7]);
+ J3DGDSetIndTexOrder(
+ indTexStageNum,
+ mIndTexOrder[0].getCoord(),
+ mIndTexOrder[0].getMap(),
+ mIndTexOrder[1].getCoord(),
+ mIndTexOrder[1].getMap(),
+ mIndTexOrder[2].getCoord(),
+ mIndTexOrder[2].getMap(),
+ mIndTexOrder[3].getCoord(),
+ mIndTexOrder[3].getMap()
+ );
+}
+#else
+void J3DIndBlockFull::load() {
+ // NONMATCHING
+}
+#endif
+
+/* 8031E328-8031E408 318C68 00E0+00 1/0 0/0 0/0 .text diff__15J3DIndBlockFullFUl */
+void J3DIndBlockFull::diff(u32 flag) {
+ if ((flag & 0x08000000) == 0) {
+ return;
+ }
+ u8 indTexStageNum = mIndTexStageNum;
+ mIndTexMtx[0].load(0);
+ J3DGDSetIndTexCoordScale(
+ GX_INDTEXSTAGE0,
+ mIndTexCoordScale[0].getScaleS(),
+ mIndTexCoordScale[0].getScaleT(),
+ mIndTexCoordScale[1].getScaleS(),
+ mIndTexCoordScale[1].getScaleT()
+ );
+ loadTexCoordScale(mIndTexOrder[0].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]);
+ J3DGDSetIndTexOrder(
+ indTexStageNum,
+ mIndTexOrder[0].getCoord(),
+ mIndTexOrder[0].getMap(),
+ mIndTexOrder[1].getCoord(),
+ mIndTexOrder[1].getMap(),
+ mIndTexOrder[2].getCoord(),
+ mIndTexOrder[2].getMap(),
+ mIndTexOrder[3].getCoord(),
+ mIndTexOrder[3].getMap()
+ );
+}
+
+/* 8031E408-8031E6C8 318D48 02C0+00 1/0 0/0 0/0 .text load__13J3DPEBlockOpaFv */
+// vtable
+#ifdef NONMATCHING
+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);
+}
+#else
+extern "C" void load__13J3DPEBlockOpaFv() {
+ // asm void J3DPEBlockOpa::load() {
+ // NONMATCHING
+}
+#endif
+
+/* 8031E6C8-8031E98C 319008 02C4+00 1/0 0/0 0/0 .text load__17J3DPEBlockTexEdgeFv */
+// vtable
+#ifdef NONMATCHING
+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);
+}
+#else
+extern "C" void load__17J3DPEBlockTexEdgeFv() {
+ // asm void J3DPEBlockTexEdge::load() {
+ // NONMATCHING
+}
+#endif
+
+/* 8031E98C-8031EC50 3192CC 02C4+00 1/0 0/0 0/0 .text load__13J3DPEBlockXluFv */
+// vtable
+#ifdef NONMATCHING
+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);
+}
+#else
+extern "C" void load__13J3DPEBlockXluFv() {
+ // asm void J3DPEBlockXlu::load() {
+ // NONMATCHING
+}
+#endif
+
+inline void loadZCompLoc(u8 compLoc) {
+ J3DGDSetZCompLoc(compLoc);
+}
+
+/* 8031EC50-8031F0D8 319590 0488+00 1/0 0/0 0/0 .text load__16J3DPEBlockFogOffFv */
+void J3DPEBlockFogOff::load() {
+ GDOverflowCheck(0x1e);
+ mAlphaComp.load();
+ mBlend.load(mDither);
+ mZMode.load();
+ loadZCompLoc(mZCompLoc);
+}
+
+/* 8031F0D8-8031F3C0 319A18 02E8+00 1/0 0/0 0/0 .text diffBlend__16J3DPEBlockFogOffFv */
+void J3DPEBlockFogOff::diffBlend() {
+ GDOverflowCheck(0xf);
+ mBlend.load(mDither);
+ mZMode.load();
+}
+
+
+/* 8031F3C0-8031F890 319D00 04D0+00 1/0 0/0 0/0 .text load__14J3DPEBlockFullFv */
+void J3DPEBlockFull::load() {
+ mFogOffset = GDGetCurrOffset();
+ GDOverflowCheck(0x55);
+ mFog.load();
+ mAlphaComp.load();
+ mBlend.load(mDither);
+ mZMode.load();
+ loadZCompLoc(mZCompLoc);
+}
+
+/* 8031F890-8031F940 31A1D0 00B0+00 1/0 0/0 0/0 .text patch__14J3DPEBlockFullFv */
+void J3DPEBlockFull::patch() {
+ GDSetCurrOffset(mFogOffset);
+ GDOverflowCheck(0x37);
+ u8* start = GDGetCurrPointer();
+ mFog.load();
+ u8* end = GDGetCurrPointer();
+ DCStoreRange(start, end - start);
+}
+
+/* 8031F940-8031F9B8 31A280 0078+00 1/0 0/0 0/0 .text diffFog__14J3DPEBlockFullFv */
+void J3DPEBlockFull::diffFog() {
+ GDOverflowCheck(0x37);
+ mFog.load();
+}
+
+/* 8031F9B8-8031FCA0 31A2F8 02E8+00 1/0 0/0 0/0 .text diffBlend__14J3DPEBlockFullFv */
+void J3DPEBlockFull::diffBlend() {
+ GDOverflowCheck(0xf);
+ mBlend.load(mDither);
+ mZMode.load();
+}
+
+/* 8031FCA0-8031FD08 31A5E0 0068+00 1/0 0/0 0/0 .text diff__14J3DPEBlockFullFUl */
+void J3DPEBlockFull::diff(u32 flag) {
+ if ((flag & 0x10000000)) {
+ diffFog();
+ }
+ if ((flag & 0x20000000)) {
+ diffBlend();
+ }
+}
+
+/* 8031FD08-8031FDE4 31A648 00DC+00 1/0 0/0 0/0 .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);
+ }
+}
+
+/* 8031FDE4-8031FF34 31A724 0150+00 1/0 0/0 0/0 .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);
+ }
+ }
+}
+
+/* 8031FF34-80320084 31A874 0150+00 1/0 0/0 0/0 .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);
+ }
+ }
+}
+
+/* ############################################################################################## */
+/* 803A1EA8-803A1EA8 02E508 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+#pragma push
+#pragma force_active on
+SECTION_DEAD static char const* const stringBase_803A1EA8 = "Error : TexMtx[%d] is Null.\n";
+/* @stringBase0 padding */
+SECTION_DEAD static char const* const pad_803A1EC5 = "\0\0";
+#pragma pop
+
+/* 80320084-803201A0 31A9C4 011C+00 1/0 0/0 0/0 .text
+ * reset__21J3DTexGenBlockPatchedFP14J3DTexGenBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+ }
+ }
+ }
+}
+#else
+extern "C" void reset__21J3DTexGenBlockPatchedFP14J3DTexGenBlock() {
+ // asm void J3DTexGenBlockPatched::reset(J3DTexGenBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803201A0-803202DC 31AAE0 013C+00 1/0 0/0 0/0 .text reset__15J3DTexGenBlock4FP14J3DTexGenBlock
+ */
+// vtable
+#ifdef NONMATCHING
+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();
+}
+#else
+extern "C" void reset__15J3DTexGenBlock4FP14J3DTexGenBlock() {
+ // asm void J3DTexGenBlock4::reset(J3DTexGenBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803202DC-80320418 31AC1C 013C+00 1/0 0/0 0/0 .text
+ * reset__19J3DTexGenBlockBasicFP14J3DTexGenBlock */
+// vtable
+#ifdef NONMATCHING
+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();
+}
+#else
+extern "C" void reset__19J3DTexGenBlockBasicFP14J3DTexGenBlock() {
+ // asm void J3DTexGenBlockBasic::reset(J3DTexGenBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 80320418-803205D4 31AD58 01BC+00 1/0 0/0 0/0 .text reset__18J3DTevBlockPatchedFP11J3DTevBlock
+ */
+#ifdef NONMATCHING
+// vtable
+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);
+ }
+}
+#else
+extern "C" void reset__18J3DTevBlockPatchedFP11J3DTevBlock() {
+ // asm void J3DTevBlockPatched::reset(J3DTevBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803205D4-803206AC 31AF14 00D8+00 1/0 0/0 0/0 .text reset__12J3DTevBlock1FP11J3DTevBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+}
+#else
+extern "C" void reset__12J3DTevBlock1FP11J3DTevBlock() {
+ // asm void J3DTevBlock1::reset(J3DTevBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803206AC-8032098C 31AFEC 02E0+00 1/0 0/0 0/0 .text reset__12J3DTevBlock2FP11J3DTevBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+ }
+}
+#else
+extern "C" void reset__12J3DTevBlock2FP11J3DTevBlock() {
+ // asm void J3DTevBlock2::reset(J3DTevBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 8032098C-80320E24 31B2CC 0498+00 1/0 0/0 0/0 .text reset__12J3DTevBlock4FP11J3DTevBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+}
+#else
+extern "C" void reset__12J3DTevBlock4FP11J3DTevBlock() {
+ // asm void J3DTevBlock4::reset(J3DTevBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 80320E24-803210B0 31B764 028C+00 1/0 0/0 0/0 .text reset__13J3DTevBlock16FP11J3DTevBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+ }
+}
+#else
+extern "C" void reset__13J3DTevBlock16FP11J3DTevBlock() {
+ // asm void J3DTevBlock16::reset(J3DTevBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803210B0-803211B4 31B9F0 0104+00 1/0 0/0 0/0 .text reset__15J3DIndBlockFullFP11J3DIndBlock */
+// vtable
+#ifdef NONMATCHING
+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);
+ }
+}
+#else
+extern "C" void reset__15J3DIndBlockFullFP11J3DIndBlock() {
+ // asm void J3DIndBlockFull::reset(J3DIndBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 803211B4-8032129C 31BAF4 00E8+00 1/0 0/0 0/0 .text reset__16J3DPEBlockFogOffFP10J3DPEBlock */
+// vtable
+#ifdef NONMATCHING
+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;
+ }
+}
+#else
+extern "C" void reset__16J3DPEBlockFogOffFP10J3DPEBlock() {
+ // asm void J3DPEBlockFogOff::reset(J3DPEBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* 8032129C-803213C0 31BBDC 0124+00 1/0 0/0 0/0 .text reset__14J3DPEBlockFullFP10J3DPEBlock */
+// vtable
+#ifdef NONMATCHING
+void J3DPEBlockFull::reset(J3DPEBlock* pBlock) {
+ if (pBlock->getFog() != NULL) {
+ mFog = *pBlock->getFog();
+ }
+
+ switch (pBlock->getType()) {
+ case 'PEFL':
+ case 'PEFG':
+ mAlphaComp = *pBlock->getAlphaComp();
+ mBlend = *pBlock->getBlend();
+ mZMode = *pBlock->getZMode();
+ mZCompLoc = pBlock->getZCompLoc();
+ break;
+ }
+}
+#else
+extern "C" void reset__14J3DPEBlockFullFP10J3DPEBlock() {
+ // asm void J3DPEBlockFull::reset(J3DPEBlock* param_0) {
+ // NONMATCHING
+}
+#endif
+
+/* ############################################################################################## */
+/* 803CDF30-803CDF60 -00001 0030+00 1/1 0/0 0/0 .data @5062 */
+SECTION_DATA static void* lit_5062[12] = {
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x188),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0xC8),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0xF8),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x188),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x13C),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0xC8),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0xF8),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x13C),
+ (void*)(((char*)calc__21J3DTexGenBlockPatchedFPA4_Cf) + 0x13C),
+};
+
+/* 804563AC-804563B0 0049AC 0004+00 3/3 0/0 0/0 .sdata2 @5060 */
+SECTION_SDATA2 static u8 lit_5060[4] = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+};
+
+/* 803213C0-80321584 31BD00 01C4+00 4/0 0/0 0/0 .text calc__21J3DTexGenBlockPatchedFPA4_Cf */
+void J3DTexGenBlockPatched::calc(const Mtx modelMtx) {
+ Mtx viewMtx;
+ for (int i = 0; i < 8; i++) {
+ if (mTexMtx[i] != NULL) {
+ u8 texMtxMode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x3f;
+ mTexCoord[i].resetTexMtxReg();
+ switch (texMtxMode) {
+ case J3DTexMtxMode_EnvmapBasic:
+ case J3DTexMtxMode_EnvmapOld:
+ case J3DTexMtxMode_Envmap:
+
+ if (j3dSys.checkFlag(8) == 0) {
+ MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx);
+ } else {
+ MTXCopy(j3dSys.getViewMtx(), viewMtx);
+ }
+ viewMtx[0][3] = 0.0f;
+ viewMtx[1][3] = 0.0f;
+ viewMtx[2][3] = 0.0f;
+ mTexMtx[i]->calc(viewMtx);
+ break;
+ case J3DTexMtxMode_ProjmapBasic:
+ case J3DTexMtxMode_Projmap:
+ if (j3dSys.checkFlag(4) == 0) {
+ mTexMtx[i]->calc(modelMtx);
+ } else {
+ mTexMtx[i]->calc(j3dDefaultMtx);
+ }
+ break;
+ case J3DTexMtxMode_ViewProjmapBasic:
+ case J3DTexMtxMode_ViewProjmap:
+ if (j3dSys.checkFlag(4) == 0) {
+ MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx);
+ mTexMtx[i]->calc( viewMtx);
+ } else {
+ mTexMtx[i]->calc(j3dSys.getViewMtx());
+ }
+ break;
+ case J3DTexMtxMode_Unknown5:
+ case J3DTexMtxMode_EnvmapOldEffectMtx:
+ case J3DTexMtxMode_EnvmapEffectMtx:
+ if (j3dSys.checkFlag(8) == 0) {
+ MTXCopy(modelMtx, viewMtx);
+ viewMtx[0][3] = 0.0f;
+ viewMtx[1][3] = 0.0f;
+ viewMtx[2][3] = 0.0f;
+ mTexMtx[i]->calc(viewMtx);
+ } else {
+ mTexMtx[i]->calc(j3dDefaultMtx);
+ }
+ break;
+ default:
+ mTexMtx[i]->calc(j3dDefaultMtx);
+ break;
+ }
+ }
+ }
+}
+
+
+/* ############################################################################################## */
+/* 803CDF60-803CDF90 -00001 0030+00 1/1 0/0 0/0 .data @5110 */
+SECTION_DATA static void* lit_5110[12] = {
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x118),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x88),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xB8),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x118),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xCC),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x74),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x88),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xB8),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xCC),
+ (void*)(((char*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xCC),
+};
+
+/* 80321584-803216D8 31BEC4 0154+00 4/0 0/0 0/0 .text
+ * calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf */
+void J3DTexGenBlockPatched::calcWithoutViewMtx(f32 const (*param_0)[4]) {
+ // NONMATCHING
+}
+
+/* ############################################################################################## */
+/* 803CDF90-803CDFC0 -00001 0030+00 1/1 0/0 0/0 .data @5150 */
+SECTION_DATA static void* lit_5150[12] = {
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x100),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x84),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xAC),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x100),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xC8),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x84),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xAC),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xC8),
+ (void*)(((char*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xC8),
+};
+
+/* 803216D8-8032181C 31C018 0144+00 4/0 0/0 0/0 .text
+ * calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf */
+void J3DTexGenBlockPatched::calcPostTexMtx(f32 const (*param_0)[4]) {
+ // NONMATCHING
+}
+
+/* ############################################################################################## */
+/* 803CDFC0-803CDFF0 -00001 0030+00 1/1 0/0 0/0 .data @5187 */
+SECTION_DATA static void* lit_5187[12] = {
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xD8),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x84),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xA0),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xD8),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xBC),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x68),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0x84),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xA0),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xBC),
+ (void*)(((char*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf) + 0xBC),
+};
+
+/* 8032181C-80321938 31C15C 011C+00 4/0 0/0 0/0 .text
+ * calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf */
+void J3DTexGenBlockPatched::calcPostTexMtxWithoutViewMtx(f32 const (*param_0)[4]) {
+ // NONMATCHING
+}
+
+/* 80321938-8032193C 31C278 0004+00 1/0 1/0 0/0 .text diffTevReg__11J3DTevBlockFv */
+void J3DTevBlock::diffTevReg() {
+}
+
+/* 8032193C-80321940 31C27C 0004+00 1/0 1/0 0/0 .text diffTevStageIndirect__11J3DTevBlockFv */
+void J3DTevBlock::diffTevStageIndirect() {
+}
+
+/* 80321940-80321944 31C280 0004+00 1/0 1/0 0/0 .text diffTevStage__11J3DTevBlockFv */
+void J3DTevBlock::diffTevStage() {
+}
+
+/* 80321944-80321948 31C284 0004+00 1/0 1/0 0/0 .text diffTexCoordScale__11J3DTevBlockFv
+ */
+void J3DTevBlock::diffTexCoordScale() {
+}
+
+/* 80321948-8032194C 31C288 0004+00 1/0 1/0 0/0 .text diffTexNo__11J3DTevBlockFv */
+void J3DTevBlock::diffTexNo() {
+}
+
+/* 8032194C-80321958 31C28C 000C+00 1/0 0/0 0/0 .text getType__14J3DPEBlockFullFv */
+u32 J3DPEBlockFull::getType() {
+ return 'PEFL';
+}
+
+/* 80321958-8032197C 31C298 0024+00 1/0 0/0 0/0 .text setFog__14J3DPEBlockFullFP6J3DFog
+ */
+void J3DPEBlockFull::setFog(J3DFog* pFog) {
+ mFog.setFogInfo(pFog->getFogInfo());
+}
+
+/* 8032197C-803219A0 31C2BC 0024+00 1/0 0/0 0/0 .text setFog__14J3DPEBlockFullF6J3DFog */
+void J3DPEBlockFull::setFog(J3DFog fog) {
+ mFog.setFogInfo(fog.getFogInfo());
+}
+
+/* 803219A0-803219A8 31C2E0 0008+00 1/0 0/0 0/0 .text getFog__14J3DPEBlockFullFv */
+J3DFog* J3DPEBlockFull::getFog() {
+ return &mFog;
+}
+
+/* 803219A8-803219C4 31C2E8 001C+00 1/0 0/0 0/0 .text
+ * setAlphaComp__14J3DPEBlockFullFRC12J3DAlphaComp */
+void J3DPEBlockFull::setAlphaComp(J3DAlphaComp const& alphaComp) {
+ mAlphaComp = alphaComp;
+}
+
+/* 803219C4-803219E0 31C304 001C+00 1/0 0/0 0/0 .text
+ * setAlphaComp__14J3DPEBlockFullFPC12J3DAlphaComp */
+void J3DPEBlockFull::setAlphaComp(J3DAlphaComp const* alphaComp) {
+ mAlphaComp = *alphaComp;
+}
+
+/* 803219E0-803219E8 31C320 0008+00 1/0 0/0 0/0 .text getAlphaComp__14J3DPEBlockFullFv */
+J3DAlphaComp* J3DPEBlockFull::getAlphaComp() {
+ return &mAlphaComp;
+}
+
+/* 803219E8-803219F4 31C328 000C+00 1/0 0/0 0/0 .text setBlend__14J3DPEBlockFullFRC8J3DBlend */
+void J3DPEBlockFull::setBlend(J3DBlend const& blend) {
+ mBlend = blend;
+}
+
+/* 803219F4-80321A00 31C334 000C+00 1/0 0/0 0/0 .text setBlend__14J3DPEBlockFullFPC8J3DBlend */
+void J3DPEBlockFull::setBlend(J3DBlend const* blend) {
+ mBlend = *blend;
+}
+
+/* 80321A00-80321A08 31C340 0008+00 1/0 0/0 0/0 .text getBlend__14J3DPEBlockFullFv */
+J3DBlend* J3DPEBlockFull::getBlend() {
+ return &mBlend;
+}
+
+/* 80321A08-80321A14 31C348 000C+00 1/0 0/0 0/0 .text setZMode__14J3DPEBlockFullF8J3DZMode */
+void J3DPEBlockFull::setZMode(J3DZMode zMode) {
+ mZMode = zMode;
+}
+
+/* 80321A14-80321A20 31C354 000C+00 1/0 0/0 0/0 .text setZMode__14J3DPEBlockFullFPC8J3DZMode */
+void J3DPEBlockFull::setZMode(J3DZMode const* zMode) {
+ mZMode = *zMode;
+}
+
+/* 80321A20-80321A28 31C360 0008+00 1/0 0/0 0/0 .text getZMode__14J3DPEBlockFullFv */
+J3DZMode* J3DPEBlockFull::getZMode() {
+ return &mZMode;
+}
+
+/* 80321A28-80321A30 -00001 0008+00 0/0 0/0 0/0 .text setZCompLoc__14J3DPEBlockFullFUc */
+void J3DPEBlockFull::setZCompLoc(u8 zCompLoc) {
+ mZCompLoc = zCompLoc;
+}
+
+/* 80321A30-80321A3C 31C370 000C+00 1/0 0/0 0/0 .text setZCompLoc__14J3DPEBlockFullFPCUc
+ */
+void J3DPEBlockFull::setZCompLoc(u8 const* zCompLoc) {
+ mZCompLoc = *zCompLoc;
+}
+
+/* 80321A3C-80321A44 31C37C 0008+00 1/0 0/0 0/0 .text getZCompLoc__14J3DPEBlockFullCFv */
+u8 J3DPEBlockFull::getZCompLoc() const {
+ return mZCompLoc;
+}
+
+/* 80321A44-80321A4C -00001 0008+00 0/0 0/0 0/0 .text setDither__14J3DPEBlockFullFUc */
+void J3DPEBlockFull::setDither(u8 dither) {
+ mDither = dither;
+}
+
+/* 80321A4C-80321A58 31C38C 000C+00 1/0 0/0 0/0 .text setDither__14J3DPEBlockFullFPCUc */
+void J3DPEBlockFull::setDither(u8 const* dither) {
+ mDither = *dither;
+}
+
+/* 80321A58-80321A60 31C398 0008+00 1/0 0/0 0/0 .text getDither__14J3DPEBlockFullCFv */
+u8 J3DPEBlockFull::getDither() const {
+ return mDither;
+}
+
+/* 80321A60-80321A68 31C3A0 0008+00 1/0 0/0 0/0 .text getFogOffset__14J3DPEBlockFullCFv
+ */
+u32 J3DPEBlockFull::getFogOffset() const {
+ return mFogOffset;
+}
+
+/* 80321A68-80321A70 -00001 0008+00 0/0 0/0 0/0 .text setFogOffset__14J3DPEBlockFullFUl
+ */
+void J3DPEBlockFull::setFogOffset(u32 fogOffset) {
+ mFogOffset = fogOffset;
+}
+
+/* ############################################################################################## */
+/* 803CDFF0-803CE06C 02B110 007C+00 1/1 1/1 0/0 .data __vt__14J3DPEBlockFull */
+SECTION_DATA extern void* __vt__14J3DPEBlockFull[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__14J3DPEBlockFullFP10J3DPEBlock,
+ (void*)load__14J3DPEBlockFullFv,
+ (void*)patch__14J3DPEBlockFullFv,
+ (void*)diff__14J3DPEBlockFullFUl,
+ (void*)diffFog__14J3DPEBlockFullFv,
+ (void*)diffBlend__14J3DPEBlockFullFv,
+ (void*)countDLSize__14J3DPEBlockFullFv,
+ (void*)getType__14J3DPEBlockFullFv,
+ (void*)setFog__14J3DPEBlockFullF6J3DFog,
+ (void*)setFog__14J3DPEBlockFullFP6J3DFog,
+ (void*)getFog__14J3DPEBlockFullFv,
+ (void*)setAlphaComp__14J3DPEBlockFullFPC12J3DAlphaComp,
+ (void*)setAlphaComp__14J3DPEBlockFullFRC12J3DAlphaComp,
+ (void*)getAlphaComp__14J3DPEBlockFullFv,
+ (void*)setBlend__14J3DPEBlockFullFPC8J3DBlend,
+ (void*)setBlend__14J3DPEBlockFullFRC8J3DBlend,
+ (void*)getBlend__14J3DPEBlockFullFv,
+ (void*)setZMode__14J3DPEBlockFullFPC8J3DZMode,
+ (void*)setZMode__14J3DPEBlockFullF8J3DZMode,
+ (void*)getZMode__14J3DPEBlockFullFv,
+ (void*)setZCompLoc__14J3DPEBlockFullFPCUc,
+ (void*)setZCompLoc__14J3DPEBlockFullFUc,
+ (void*)getZCompLoc__14J3DPEBlockFullCFv,
+ (void*)setDither__14J3DPEBlockFullFPCUc,
+ (void*)setDither__14J3DPEBlockFullFUc,
+ (void*)getDither__14J3DPEBlockFullCFv,
+ (void*)getFogOffset__14J3DPEBlockFullCFv,
+ (void*)setFogOffset__14J3DPEBlockFullFUl,
+ (void*)__dt__14J3DPEBlockFullFv,
+};
+
+/* 80321A70-80321ACC 31C3B0 005C+00 1/0 0/0 0/0 .text __dt__14J3DPEBlockFullFv */
+J3DPEBlockFull::~J3DPEBlockFull() {}
+
+/* 80321ACC-80321B00 31C40C 0034+00 1/0 0/0 0/0 .text diff__16J3DPEBlockFogOffFUl */
+void J3DPEBlockFogOff::diff(u32 param_1) {
+ if ((param_1 & 0x20000000) != 0) {
+ diffBlend();
+ }
+}
+
+/* 80321B00-80321B0C 31C440 000C+00 1/0 0/0 0/0 .text getType__16J3DPEBlockFogOffFv */
+u32 J3DPEBlockFogOff::getType() {
+ return 'PEFG';
+}
+
+/* 80321B0C-80321B28 31C44C 001C+00 1/0 0/0 0/0 .text
+ * setAlphaComp__16J3DPEBlockFogOffFRC12J3DAlphaComp */
+void J3DPEBlockFogOff::setAlphaComp(J3DAlphaComp const& alphaComp) {
+ mAlphaComp = alphaComp;
+}
+
+/* 80321B28-80321B44 31C468 001C+00 1/0 0/0 0/0 .text
+ * setAlphaComp__16J3DPEBlockFogOffFPC12J3DAlphaComp */
+void J3DPEBlockFogOff::setAlphaComp(J3DAlphaComp const* alphaComp) {
+ mAlphaComp = *alphaComp;
+}
+
+/* 80321B44-80321B4C 31C484 0008+00 1/0 0/0 0/0 .text getAlphaComp__16J3DPEBlockFogOffFv
+ */
+J3DAlphaComp* J3DPEBlockFogOff::getAlphaComp() {
+ return &mAlphaComp;
+}
+
+/* 80321B4C-80321B58 31C48C 000C+00 1/0 0/0 0/0 .text setBlend__16J3DPEBlockFogOffFRC8J3DBlend */
+void J3DPEBlockFogOff::setBlend(J3DBlend const& blend) {
+ mBlend = blend;
+}
+
+/* 80321B58-80321B64 31C498 000C+00 1/0 0/0 0/0 .text setBlend__16J3DPEBlockFogOffFPC8J3DBlend */
+void J3DPEBlockFogOff::setBlend(J3DBlend const* blend) {
+ mBlend = *blend;
+}
+
+/* 80321B64-80321B6C 31C4A4 0008+00 1/0 0/0 0/0 .text getBlend__16J3DPEBlockFogOffFv */
+J3DBlend* J3DPEBlockFogOff::getBlend() {
+ return &mBlend;
+}
+
+/* 80321B6C-80321B78 31C4AC 000C+00 1/0 0/0 0/0 .text setZMode__16J3DPEBlockFogOffF8J3DZMode */
+void J3DPEBlockFogOff::setZMode(J3DZMode zMode) {
+ mZMode = zMode;
+}
+
+/* 80321B78-80321B84 31C4B8 000C+00 1/0 0/0 0/0 .text setZMode__16J3DPEBlockFogOffFPC8J3DZMode */
+void J3DPEBlockFogOff::setZMode(J3DZMode const* zMode) {
+ mZMode = *zMode;
+}
+
+/* 80321B84-80321B8C 31C4C4 0008+00 1/0 0/0 0/0 .text getZMode__16J3DPEBlockFogOffFv */
+J3DZMode* J3DPEBlockFogOff::getZMode() {
+ return &mZMode;
+}
+
+/* 80321B8C-80321B94 -00001 0008+00 0/0 0/0 0/0 .text setZCompLoc__16J3DPEBlockFogOffFUc
+ */
+void J3DPEBlockFogOff::setZCompLoc(u8 zCompLoc) {
+ mZCompLoc = zCompLoc;
+}
+
+/* 80321B94-80321BA0 31C4D4 000C+00 1/0 0/0 0/0 .text setZCompLoc__16J3DPEBlockFogOffFPCUc */
+void J3DPEBlockFogOff::setZCompLoc(u8 const* zCompLoc) {
+ mZCompLoc = *zCompLoc;
+}
+
+/* 80321BA0-80321BA8 31C4E0 0008+00 1/0 0/0 0/0 .text getZCompLoc__16J3DPEBlockFogOffCFv
+ */
+u8 J3DPEBlockFogOff::getZCompLoc() const {
+ return mZCompLoc;
+}
+
+/* 80321BA8-80321BB0 -00001 0008+00 0/0 0/0 0/0 .text setDither__16J3DPEBlockFogOffFUc */
+void J3DPEBlockFogOff::setDither(u8 dither) {
+ mDither = dither;
+}
+
+/* 80321BB0-80321BBC 31C4F0 000C+00 1/0 0/0 0/0 .text setDither__16J3DPEBlockFogOffFPCUc
+ */
+void J3DPEBlockFogOff::setDither(u8 const* dither) {
+ mDither = *dither;
+}
+
+/* 80321BBC-80321BC4 31C4FC 0008+00 1/0 0/0 0/0 .text getDither__16J3DPEBlockFogOffCFv */
+u8 J3DPEBlockFogOff::getDither() const {
+ return mDither;
+}
+
+/* ############################################################################################## */
+/* 803CE06C-803CE0E8 02B18C 007C+00 1/1 1/1 0/0 .data __vt__16J3DPEBlockFogOff */
+SECTION_DATA extern void* __vt__16J3DPEBlockFogOff[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__16J3DPEBlockFogOffFP10J3DPEBlock,
+ (void*)load__16J3DPEBlockFogOffFv,
+ (void*)patch__10J3DPEBlockFv,
+ (void*)diff__16J3DPEBlockFogOffFUl,
+ (void*)diffFog__10J3DPEBlockFv,
+ (void*)diffBlend__16J3DPEBlockFogOffFv,
+ (void*)countDLSize__16J3DPEBlockFogOffFv,
+ (void*)getType__16J3DPEBlockFogOffFv,
+ (void*)setFog__10J3DPEBlockF6J3DFog,
+ (void*)setFog__10J3DPEBlockFP6J3DFog,
+ (void*)getFog__10J3DPEBlockFv,
+ (void*)setAlphaComp__16J3DPEBlockFogOffFPC12J3DAlphaComp,
+ (void*)setAlphaComp__16J3DPEBlockFogOffFRC12J3DAlphaComp,
+ (void*)getAlphaComp__16J3DPEBlockFogOffFv,
+ (void*)setBlend__16J3DPEBlockFogOffFPC8J3DBlend,
+ (void*)setBlend__16J3DPEBlockFogOffFRC8J3DBlend,
+ (void*)getBlend__16J3DPEBlockFogOffFv,
+ (void*)setZMode__16J3DPEBlockFogOffFPC8J3DZMode,
+ (void*)setZMode__16J3DPEBlockFogOffF8J3DZMode,
+ (void*)getZMode__16J3DPEBlockFogOffFv,
+ (void*)setZCompLoc__16J3DPEBlockFogOffFPCUc,
+ (void*)setZCompLoc__16J3DPEBlockFogOffFUc,
+ (void*)getZCompLoc__16J3DPEBlockFogOffCFv,
+ (void*)setDither__16J3DPEBlockFogOffFPCUc,
+ (void*)setDither__16J3DPEBlockFogOffFUc,
+ (void*)getDither__16J3DPEBlockFogOffCFv,
+ (void*)getFogOffset__10J3DPEBlockCFv,
+ (void*)setFogOffset__10J3DPEBlockFUl,
+ (void*)__dt__16J3DPEBlockFogOffFv,
+};
+
+/* 80321BC4-80321C20 31C504 005C+00 1/0 0/0 0/0 .text __dt__16J3DPEBlockFogOffFv */
+J3DPEBlockFogOff::~J3DPEBlockFogOff() {}
+
+/* 80321C20-80321C44 31C560 0024+00 1/0 0/0 0/0 .text indexToPtr__13J3DTevBlock16Fv */
+void J3DTevBlock16::indexToPtr() {
+ indexToPtr_private(mTexNoOffset);
+}
+
+/* 80321C44-80321C50 31C584 000C+00 1/0 0/0 0/0 .text getType__13J3DTevBlock16Fv */
+u32 J3DTevBlock16::getType() {
+ return 'TV16';
+}
+
+/* 80321C50-80321C60 31C590 0010+00 1/0 0/0 0/0 .text setTexNo__13J3DTevBlock16FUlUs */
+void J3DTevBlock16::setTexNo(u32 param_1, u16 param_2) {
+ mTexNo[param_1] = param_2;
+}
+
+/* 80321C60-80321C74 31C5A0 0014+00 1/0 0/0 0/0 .text setTexNo__13J3DTevBlock16FUlPCUs */
+void J3DTevBlock16::setTexNo(u32 param_0, u16 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321C74-80321C84 31C5B4 0010+00 1/0 0/0 0/0 .text getTexNo__13J3DTevBlock16CFUl */
+u16 J3DTevBlock16::getTexNo(u32 param_0) const {
+ // NONMATCHING
+}
+
+/* 80321C84-80321C98 31C5C4 0014+00 1/0 0/0 0/0 .text setTevOrder__13J3DTevBlock16FUl11J3DTevOrder
+ */
+void J3DTevBlock16::setTevOrder(u32 param_0, J3DTevOrder param_1) {
+ // NONMATCHING
+}
+
+/* 80321C98-80321CAC 31C5D8 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__13J3DTevBlock16FUlPC11J3DTevOrder */
+void J3DTevBlock16::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321CAC-80321CC0 31C5EC 0014+00 1/0 0/0 0/0 .text getTevOrder__13J3DTevBlock16FUl */
+J3DTevOrder* J3DTevBlock16::getTevOrder(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321CC0-80321CEC 31C600 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__13J3DTevBlock16FUl13J3DGXColorS10 */
+void J3DTevBlock16::setTevColor(u32 param_0, J3DGXColorS10 param_1) {
+ // NONMATCHING
+}
+
+/* 80321CEC-80321D18 31C62C 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__13J3DTevBlock16FUlPC13J3DGXColorS10 */
+void J3DTevBlock16::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321D18-80321D2C 31C658 0014+00 1/0 0/0 0/0 .text getTevColor__13J3DTevBlock16FUl */
+J3DGXColorS10* J3DTevBlock16::getTevColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321D2C-80321D58 31C66C 002C+00 1/0 0/0 0/0 .text setTevKColor__13J3DTevBlock16FUl10J3DGXColor
+ */
+void J3DTevBlock16::setTevKColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 80321D58-80321D84 31C698 002C+00 1/0 0/0 0/0 .text
+ * setTevKColor__13J3DTevBlock16FUlPC10J3DGXColor */
+void J3DTevBlock16::setTevKColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321D84-80321D98 31C6C4 0014+00 1/0 0/0 0/0 .text getTevKColor__13J3DTevBlock16FUl */
+J3DGXColor* J3DTevBlock16::getTevKColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321D98-80321DA4 31C6D8 000C+00 1/0 0/0 0/0 .text setTevKColorSel__13J3DTevBlock16FUlUc */
+void J3DTevBlock16::setTevKColorSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80321DA4-80321DB4 31C6E4 0010+00 1/0 0/0 0/0 .text setTevKColorSel__13J3DTevBlock16FUlPCUc */
+void J3DTevBlock16::setTevKColorSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321DB4-80321DC0 31C6F4 000C+00 1/0 0/0 0/0 .text getTevKColorSel__13J3DTevBlock16FUl
+ */
+bool J3DTevBlock16::getTevKColorSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321DC0-80321DCC 31C700 000C+00 1/0 0/0 0/0 .text setTevKAlphaSel__13J3DTevBlock16FUlUc */
+void J3DTevBlock16::setTevKAlphaSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80321DCC-80321DDC 31C70C 0010+00 1/0 0/0 0/0 .text setTevKAlphaSel__13J3DTevBlock16FUlPCUc */
+void J3DTevBlock16::setTevKAlphaSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321DDC-80321DE8 31C71C 000C+00 1/0 0/0 0/0 .text getTevKAlphaSel__13J3DTevBlock16FUl
+ */
+bool J3DTevBlock16::getTevKAlphaSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321DE8-80321DF0 -00001 0008+00 0/0 0/0 0/0 .text setTevStageNum__13J3DTevBlock16FUc
+ */
+void J3DTevBlock16::setTevStageNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 88) /* this->field_0x58 */ = (u8)(param_0);
+}
+
+/* 80321DF0-80321DFC 31C730 000C+00 1/0 0/0 0/0 .text setTevStageNum__13J3DTevBlock16FPCUc */
+void J3DTevBlock16::setTevStageNum(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 80321DFC-80321E04 31C73C 0008+00 1/0 0/0 0/0 .text getTevStageNum__13J3DTevBlock16CFv
+ */
+u8 J3DTevBlock16::getTevStageNum() const {
+ // NONMATCHING
+}
+
+/* 80321E04-80321E40 31C744 003C+00 1/0 0/0 0/0 .text setTevStage__13J3DTevBlock16FUl11J3DTevStage
+ */
+void J3DTevBlock16::setTevStage(u32 param_0, J3DTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80321E40-80321E7C 31C780 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__13J3DTevBlock16FUlPC11J3DTevStage */
+void J3DTevBlock16::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321E7C-80321E90 31C7BC 0014+00 1/0 0/0 0/0 .text getTevStage__13J3DTevBlock16FUl */
+J3DTevStage* J3DTevBlock16::getTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321E90-80321EC8 31C7D0 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__13J3DTevBlock16FUl18J3DTevSwapModeInfo */
+void J3DTevBlock16::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo param_1) {
+ // NONMATCHING
+}
+
+/* 80321EC8-80321F00 31C808 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__13J3DTevBlock16FUlPC18J3DTevSwapModeInfo */
+void J3DTevBlock16::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321F00-80321F10 31C840 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__13J3DTevBlock16FUl19J3DTevSwapModeTable */
+void J3DTevBlock16::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable param_1) {
+ // NONMATCHING
+}
+
+/* 80321F10-80321F20 31C850 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__13J3DTevBlock16FUlPC19J3DTevSwapModeTable */
+void J3DTevBlock16::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321F20-80321F30 31C860 0010+00 1/0 0/0 0/0 .text getTevSwapModeTable__13J3DTevBlock16FUl */
+J3DTevSwapModeTable* J3DTevBlock16::getTevSwapModeTable(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321F30-80321F44 31C870 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__13J3DTevBlock16FUl14J3DIndTevStage */
+void J3DTevBlock16::setIndTevStage(u32 param_0, J3DIndTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80321F44-80321F58 31C884 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__13J3DTevBlock16FUlPC14J3DIndTevStage */
+void J3DTevBlock16::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80321F58-80321F6C 31C898 0014+00 1/0 0/0 0/0 .text getIndTevStage__13J3DTevBlock16FUl
+ */
+J3DIndTevStage* J3DTevBlock16::getIndTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80321F6C-80321F74 31C8AC 0008+00 1/0 0/0 0/0 .text getTexNoOffset__13J3DTevBlock16CFv
+ */
+u32 J3DTevBlock16::getTexNoOffset() const {
+ // NONMATCHING
+}
+
+/* 80321F74-80321F7C 31C8B4 0008+00 1/0 0/0 0/0 .text getTevRegOffset__13J3DTevBlock16CFv
+ */
+bool J3DTevBlock16::getTevRegOffset() const {
+ // NONMATCHING
+}
+
+/* 80321F7C-80321F84 -00001 0008+00 0/0 0/0 0/0 .text setTevRegOffset__13J3DTevBlock16FUl
+ */
+void J3DTevBlock16::setTevRegOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 368) /* this->field_0x170 */ = (u32)(param_0);
+}
+
+/* ############################################################################################## */
+/* 803CE0E8-803CE1C4 02B208 00DC+00 1/1 1/1 0/0 .data __vt__13J3DTevBlock16 */
+SECTION_DATA extern void* __vt__13J3DTevBlock16[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__13J3DTevBlock16FP11J3DTevBlock,
+ (void*)load__13J3DTevBlock16Fv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__13J3DTevBlock16Fv,
+ (void*)diffTevReg__13J3DTevBlock16Fv,
+ (void*)diffTexCoordScale__13J3DTevBlock16Fv,
+ (void*)diffTevStage__13J3DTevBlock16Fv,
+ (void*)diffTevStageIndirect__13J3DTevBlock16Fv,
+ (void*)patch__13J3DTevBlock16Fv,
+ (void*)patchTexNo__13J3DTevBlock16Fv,
+ (void*)patchTevReg__13J3DTevBlock16Fv,
+ (void*)patchTexNoAndTexCoordScale__13J3DTevBlock16Fv,
+ (void*)ptrToIndex__13J3DTevBlock16Fv,
+ (void*)indexToPtr__13J3DTevBlock16Fv,
+ (void*)getType__13J3DTevBlock16Fv,
+ (void*)countDLSize__13J3DTevBlock16Fv,
+ (void*)setTexNo__13J3DTevBlock16FUlPCUs,
+ (void*)setTexNo__13J3DTevBlock16FUlUs,
+ (void*)getTexNo__13J3DTevBlock16CFUl,
+ (void*)setTevOrder__13J3DTevBlock16FUlPC11J3DTevOrder,
+ (void*)setTevOrder__13J3DTevBlock16FUl11J3DTevOrder,
+ (void*)getTevOrder__13J3DTevBlock16FUl,
+ (void*)setTevColor__13J3DTevBlock16FUlPC13J3DGXColorS10,
+ (void*)setTevColor__13J3DTevBlock16FUl13J3DGXColorS10,
+ (void*)getTevColor__13J3DTevBlock16FUl,
+ (void*)setTevKColor__13J3DTevBlock16FUlPC10J3DGXColor,
+ (void*)setTevKColor__13J3DTevBlock16FUl10J3DGXColor,
+ (void*)getTevKColor__13J3DTevBlock16FUl,
+ (void*)setTevKColorSel__13J3DTevBlock16FUlPCUc,
+ (void*)setTevKColorSel__13J3DTevBlock16FUlUc,
+ (void*)getTevKColorSel__13J3DTevBlock16FUl,
+ (void*)setTevKAlphaSel__13J3DTevBlock16FUlPCUc,
+ (void*)setTevKAlphaSel__13J3DTevBlock16FUlUc,
+ (void*)getTevKAlphaSel__13J3DTevBlock16FUl,
+ (void*)setTevStageNum__13J3DTevBlock16FPCUc,
+ (void*)setTevStageNum__13J3DTevBlock16FUc,
+ (void*)getTevStageNum__13J3DTevBlock16CFv,
+ (void*)setTevStage__13J3DTevBlock16FUlPC11J3DTevStage,
+ (void*)setTevStage__13J3DTevBlock16FUl11J3DTevStage,
+ (void*)getTevStage__13J3DTevBlock16FUl,
+ (void*)setTevSwapModeInfo__13J3DTevBlock16FUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__13J3DTevBlock16FUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__13J3DTevBlock16FUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__13J3DTevBlock16FUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__13J3DTevBlock16FUl,
+ (void*)setIndTevStage__13J3DTevBlock16FUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__13J3DTevBlock16FUl14J3DIndTevStage,
+ (void*)getIndTevStage__13J3DTevBlock16FUl,
+ (void*)getTexNoOffset__13J3DTevBlock16CFv,
+ (void*)getTevRegOffset__13J3DTevBlock16CFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__13J3DTevBlock16FUl,
+ (void*)__dt__13J3DTevBlock16Fv,
+};
+
+/* 803CE1C4-803CE2A0 02B2E4 00DC+00 1/1 1/1 0/0 .data __vt__12J3DTevBlock4 */
+SECTION_DATA extern void* __vt__12J3DTevBlock4[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__12J3DTevBlock4FP11J3DTevBlock,
+ (void*)load__12J3DTevBlock4Fv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__12J3DTevBlock4Fv,
+ (void*)diffTevReg__12J3DTevBlock4Fv,
+ (void*)diffTexCoordScale__12J3DTevBlock4Fv,
+ (void*)diffTevStage__12J3DTevBlock4Fv,
+ (void*)diffTevStageIndirect__12J3DTevBlock4Fv,
+ (void*)patch__12J3DTevBlock4Fv,
+ (void*)patchTexNo__12J3DTevBlock4Fv,
+ (void*)patchTevReg__12J3DTevBlock4Fv,
+ (void*)patchTexNoAndTexCoordScale__12J3DTevBlock4Fv,
+ (void*)ptrToIndex__12J3DTevBlock4Fv,
+ (void*)indexToPtr__12J3DTevBlock4Fv,
+ (void*)getType__12J3DTevBlock4Fv,
+ (void*)countDLSize__12J3DTevBlock4Fv,
+ (void*)setTexNo__12J3DTevBlock4FUlPCUs,
+ (void*)setTexNo__12J3DTevBlock4FUlUs,
+ (void*)getTexNo__12J3DTevBlock4CFUl,
+ (void*)setTevOrder__12J3DTevBlock4FUlPC11J3DTevOrder,
+ (void*)setTevOrder__12J3DTevBlock4FUl11J3DTevOrder,
+ (void*)getTevOrder__12J3DTevBlock4FUl,
+ (void*)setTevColor__12J3DTevBlock4FUlPC13J3DGXColorS10,
+ (void*)setTevColor__12J3DTevBlock4FUl13J3DGXColorS10,
+ (void*)getTevColor__12J3DTevBlock4FUl,
+ (void*)setTevKColor__12J3DTevBlock4FUlPC10J3DGXColor,
+ (void*)setTevKColor__12J3DTevBlock4FUl10J3DGXColor,
+ (void*)getTevKColor__12J3DTevBlock4FUl,
+ (void*)setTevKColorSel__12J3DTevBlock4FUlPCUc,
+ (void*)setTevKColorSel__12J3DTevBlock4FUlUc,
+ (void*)getTevKColorSel__12J3DTevBlock4FUl,
+ (void*)setTevKAlphaSel__12J3DTevBlock4FUlPCUc,
+ (void*)setTevKAlphaSel__12J3DTevBlock4FUlUc,
+ (void*)getTevKAlphaSel__12J3DTevBlock4FUl,
+ (void*)setTevStageNum__12J3DTevBlock4FPCUc,
+ (void*)setTevStageNum__12J3DTevBlock4FUc,
+ (void*)getTevStageNum__12J3DTevBlock4CFv,
+ (void*)setTevStage__12J3DTevBlock4FUlPC11J3DTevStage,
+ (void*)setTevStage__12J3DTevBlock4FUl11J3DTevStage,
+ (void*)getTevStage__12J3DTevBlock4FUl,
+ (void*)setTevSwapModeInfo__12J3DTevBlock4FUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__12J3DTevBlock4FUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__12J3DTevBlock4FUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__12J3DTevBlock4FUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__12J3DTevBlock4FUl,
+ (void*)setIndTevStage__12J3DTevBlock4FUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__12J3DTevBlock4FUl14J3DIndTevStage,
+ (void*)getIndTevStage__12J3DTevBlock4FUl,
+ (void*)getTexNoOffset__12J3DTevBlock4CFv,
+ (void*)getTevRegOffset__12J3DTevBlock4CFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__12J3DTevBlock4FUl,
+ (void*)__dt__12J3DTevBlock4Fv,
+};
+
+/* 803CE2A0-803CE37C 02B3C0 00DC+00 1/1 1/1 0/0 .data __vt__12J3DTevBlock2 */
+SECTION_DATA extern void* __vt__12J3DTevBlock2[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__12J3DTevBlock2FP11J3DTevBlock,
+ (void*)load__12J3DTevBlock2Fv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__12J3DTevBlock2Fv,
+ (void*)diffTevReg__12J3DTevBlock2Fv,
+ (void*)diffTexCoordScale__12J3DTevBlock2Fv,
+ (void*)diffTevStage__12J3DTevBlock2Fv,
+ (void*)diffTevStageIndirect__12J3DTevBlock2Fv,
+ (void*)patch__12J3DTevBlock2Fv,
+ (void*)patchTexNo__12J3DTevBlock2Fv,
+ (void*)patchTevReg__12J3DTevBlock2Fv,
+ (void*)patchTexNoAndTexCoordScale__12J3DTevBlock2Fv,
+ (void*)ptrToIndex__12J3DTevBlock2Fv,
+ (void*)indexToPtr__12J3DTevBlock2Fv,
+ (void*)getType__12J3DTevBlock2Fv,
+ (void*)countDLSize__12J3DTevBlock2Fv,
+ (void*)setTexNo__12J3DTevBlock2FUlPCUs,
+ (void*)setTexNo__12J3DTevBlock2FUlUs,
+ (void*)getTexNo__12J3DTevBlock2CFUl,
+ (void*)setTevOrder__12J3DTevBlock2FUlPC11J3DTevOrder,
+ (void*)setTevOrder__12J3DTevBlock2FUl11J3DTevOrder,
+ (void*)getTevOrder__12J3DTevBlock2FUl,
+ (void*)setTevColor__12J3DTevBlock2FUlPC13J3DGXColorS10,
+ (void*)setTevColor__12J3DTevBlock2FUl13J3DGXColorS10,
+ (void*)getTevColor__12J3DTevBlock2FUl,
+ (void*)setTevKColor__12J3DTevBlock2FUlPC10J3DGXColor,
+ (void*)setTevKColor__12J3DTevBlock2FUl10J3DGXColor,
+ (void*)getTevKColor__12J3DTevBlock2FUl,
+ (void*)setTevKColorSel__12J3DTevBlock2FUlPCUc,
+ (void*)setTevKColorSel__12J3DTevBlock2FUlUc,
+ (void*)getTevKColorSel__12J3DTevBlock2FUl,
+ (void*)setTevKAlphaSel__12J3DTevBlock2FUlPCUc,
+ (void*)setTevKAlphaSel__12J3DTevBlock2FUlUc,
+ (void*)getTevKAlphaSel__12J3DTevBlock2FUl,
+ (void*)setTevStageNum__12J3DTevBlock2FPCUc,
+ (void*)setTevStageNum__12J3DTevBlock2FUc,
+ (void*)getTevStageNum__12J3DTevBlock2CFv,
+ (void*)setTevStage__12J3DTevBlock2FUlPC11J3DTevStage,
+ (void*)setTevStage__12J3DTevBlock2FUl11J3DTevStage,
+ (void*)getTevStage__12J3DTevBlock2FUl,
+ (void*)setTevSwapModeInfo__12J3DTevBlock2FUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__12J3DTevBlock2FUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__12J3DTevBlock2FUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__12J3DTevBlock2FUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__12J3DTevBlock2FUl,
+ (void*)setIndTevStage__12J3DTevBlock2FUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__12J3DTevBlock2FUl14J3DIndTevStage,
+ (void*)getIndTevStage__12J3DTevBlock2FUl,
+ (void*)getTexNoOffset__12J3DTevBlock2CFv,
+ (void*)getTevRegOffset__12J3DTevBlock2CFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__12J3DTevBlock2FUl,
+ (void*)__dt__12J3DTevBlock2Fv,
+};
+
+/* 803CE37C-803CE458 02B49C 00DC+00 1/1 1/1 0/0 .data __vt__12J3DTevBlock1 */
+SECTION_DATA extern void* __vt__12J3DTevBlock1[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__12J3DTevBlock1FP11J3DTevBlock,
+ (void*)load__12J3DTevBlock1Fv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__12J3DTevBlock1Fv,
+ (void*)diffTevReg__12J3DTevBlock1Fv,
+ (void*)diffTexCoordScale__12J3DTevBlock1Fv,
+ (void*)diffTevStage__12J3DTevBlock1Fv,
+ (void*)diffTevStageIndirect__12J3DTevBlock1Fv,
+ (void*)patch__12J3DTevBlock1Fv,
+ (void*)patchTexNo__12J3DTevBlock1Fv,
+ (void*)patchTevReg__12J3DTevBlock1Fv,
+ (void*)patchTexNoAndTexCoordScale__12J3DTevBlock1Fv,
+ (void*)ptrToIndex__12J3DTevBlock1Fv,
+ (void*)indexToPtr__12J3DTevBlock1Fv,
+ (void*)getType__12J3DTevBlock1Fv,
+ (void*)countDLSize__12J3DTevBlock1Fv,
+ (void*)setTexNo__12J3DTevBlock1FUlPCUs,
+ (void*)setTexNo__12J3DTevBlock1FUlUs,
+ (void*)getTexNo__12J3DTevBlock1CFUl,
+ (void*)setTevOrder__12J3DTevBlock1FUlPC11J3DTevOrder,
+ (void*)setTevOrder__12J3DTevBlock1FUl11J3DTevOrder,
+ (void*)getTevOrder__12J3DTevBlock1FUl,
+ (void*)setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10,
+ (void*)setTevColor__11J3DTevBlockFUl13J3DGXColorS10,
+ (void*)getTevColor__11J3DTevBlockFUl,
+ (void*)setTevKColor__11J3DTevBlockFUlPC10J3DGXColor,
+ (void*)setTevKColor__11J3DTevBlockFUl10J3DGXColor,
+ (void*)getTevKColor__11J3DTevBlockFUl,
+ (void*)setTevKColorSel__11J3DTevBlockFUlPCUc,
+ (void*)setTevKColorSel__11J3DTevBlockFUlUc,
+ (void*)getTevKColorSel__11J3DTevBlockFUl,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlPCUc,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlUc,
+ (void*)getTevKAlphaSel__11J3DTevBlockFUl,
+ (void*)setTevStageNum__12J3DTevBlock1FPCUc,
+ (void*)setTevStageNum__12J3DTevBlock1FUc,
+ (void*)getTevStageNum__12J3DTevBlock1CFv,
+ (void*)setTevStage__12J3DTevBlock1FUlPC11J3DTevStage,
+ (void*)setTevStage__12J3DTevBlock1FUl11J3DTevStage,
+ (void*)getTevStage__12J3DTevBlock1FUl,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__11J3DTevBlockFUl,
+ (void*)setIndTevStage__12J3DTevBlock1FUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__12J3DTevBlock1FUl14J3DIndTevStage,
+ (void*)getIndTevStage__12J3DTevBlock1FUl,
+ (void*)getTexNoOffset__12J3DTevBlock1CFv,
+ (void*)getTevRegOffset__11J3DTevBlockCFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__11J3DTevBlockFUl,
+ (void*)__dt__12J3DTevBlock1Fv,
+};
+
+/* 803CE458-803CE534 02B578 00DC+00 1/1 1/1 0/0 .data __vt__18J3DTevBlockPatched */
+SECTION_DATA extern void* __vt__18J3DTevBlockPatched[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__18J3DTevBlockPatchedFP11J3DTevBlock,
+ (void*)load__18J3DTevBlockPatchedFv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__18J3DTevBlockPatchedFv,
+ (void*)diffTevReg__18J3DTevBlockPatchedFv,
+ (void*)diffTexCoordScale__18J3DTevBlockPatchedFv,
+ (void*)diffTevStage__18J3DTevBlockPatchedFv,
+ (void*)diffTevStageIndirect__18J3DTevBlockPatchedFv,
+ (void*)patch__18J3DTevBlockPatchedFv,
+ (void*)patchTexNo__18J3DTevBlockPatchedFv,
+ (void*)patchTevReg__18J3DTevBlockPatchedFv,
+ (void*)patchTexNoAndTexCoordScale__18J3DTevBlockPatchedFv,
+ (void*)ptrToIndex__18J3DTevBlockPatchedFv,
+ (void*)indexToPtr__18J3DTevBlockPatchedFv,
+ (void*)getType__18J3DTevBlockPatchedFv,
+ (void*)countDLSize__18J3DTevBlockPatchedFv,
+ (void*)setTexNo__18J3DTevBlockPatchedFUlPCUs,
+ (void*)setTexNo__18J3DTevBlockPatchedFUlUs,
+ (void*)getTexNo__18J3DTevBlockPatchedCFUl,
+ (void*)setTevOrder__18J3DTevBlockPatchedFUlPC11J3DTevOrder,
+ (void*)setTevOrder__18J3DTevBlockPatchedFUl11J3DTevOrder,
+ (void*)getTevOrder__18J3DTevBlockPatchedFUl,
+ (void*)setTevColor__18J3DTevBlockPatchedFUlPC13J3DGXColorS10,
+ (void*)setTevColor__18J3DTevBlockPatchedFUl13J3DGXColorS10,
+ (void*)getTevColor__18J3DTevBlockPatchedFUl,
+ (void*)setTevKColor__18J3DTevBlockPatchedFUlPC10J3DGXColor,
+ (void*)setTevKColor__18J3DTevBlockPatchedFUl10J3DGXColor,
+ (void*)getTevKColor__18J3DTevBlockPatchedFUl,
+ (void*)setTevKColorSel__18J3DTevBlockPatchedFUlPCUc,
+ (void*)setTevKColorSel__18J3DTevBlockPatchedFUlUc,
+ (void*)getTevKColorSel__18J3DTevBlockPatchedFUl,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlPCUc,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlUc,
+ (void*)getTevKAlphaSel__11J3DTevBlockFUl,
+ (void*)setTevStageNum__18J3DTevBlockPatchedFPCUc,
+ (void*)setTevStageNum__18J3DTevBlockPatchedFUc,
+ (void*)getTevStageNum__18J3DTevBlockPatchedCFv,
+ (void*)setTevStage__18J3DTevBlockPatchedFUlPC11J3DTevStage,
+ (void*)setTevStage__18J3DTevBlockPatchedFUl11J3DTevStage,
+ (void*)getTevStage__18J3DTevBlockPatchedFUl,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__11J3DTevBlockFUl,
+ (void*)setIndTevStage__18J3DTevBlockPatchedFUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__18J3DTevBlockPatchedFUl14J3DIndTevStage,
+ (void*)getIndTevStage__18J3DTevBlockPatchedFUl,
+ (void*)getTexNoOffset__18J3DTevBlockPatchedCFv,
+ (void*)getTevRegOffset__18J3DTevBlockPatchedCFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__18J3DTevBlockPatchedFUl,
+ (void*)__dt__18J3DTevBlockPatchedFv,
+};
+
+/* 803CE534-803CE5A0 02B654 006C+00 1/1 1/1 0/0 .data __vt__19J3DTexGenBlockBasic */
+SECTION_DATA extern void* __vt__19J3DTexGenBlockBasic[27] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__19J3DTexGenBlockBasicFP14J3DTexGenBlock,
+ (void*)calc__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)load__19J3DTexGenBlockBasicFv,
+ (void*)patch__19J3DTexGenBlockBasicFv,
+ (void*)diff__21J3DTexGenBlockPatchedFUl,
+ (void*)diffTexMtx__21J3DTexGenBlockPatchedFv,
+ (void*)diffTexGen__21J3DTexGenBlockPatchedFv,
+ (void*)countDLSize__19J3DTexGenBlockBasicFv,
+ (void*)getType__19J3DTexGenBlockBasicFv,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFPCUl,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFUl,
+ (void*)getTexGenNum__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord,
+ (void*)getTexCoord__21J3DTexGenBlockPatchedFUl,
+ (void*)setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx,
+ (void*)getTexMtx__21J3DTexGenBlockPatchedFUl,
+ (void*)setNBTScale__19J3DTexGenBlockBasicFPC11J3DNBTScale,
+ (void*)setNBTScale__19J3DTexGenBlockBasicF11J3DNBTScale,
+ (void*)getNBTScale__19J3DTexGenBlockBasicFv,
+ (void*)getTexMtxOffset__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexMtxOffset__21J3DTexGenBlockPatchedFUl,
+ (void*)__dt__19J3DTexGenBlockBasicFv,
+};
+
+/* 803CE5A0-803CE60C 02B6C0 006C+00 1/1 1/1 0/0 .data __vt__15J3DTexGenBlock4 */
+SECTION_DATA extern void* __vt__15J3DTexGenBlock4[27] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__15J3DTexGenBlock4FP14J3DTexGenBlock,
+ (void*)calc__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)load__15J3DTexGenBlock4Fv,
+ (void*)patch__15J3DTexGenBlock4Fv,
+ (void*)diff__21J3DTexGenBlockPatchedFUl,
+ (void*)diffTexMtx__21J3DTexGenBlockPatchedFv,
+ (void*)diffTexGen__21J3DTexGenBlockPatchedFv,
+ (void*)countDLSize__15J3DTexGenBlock4Fv,
+ (void*)getType__15J3DTexGenBlock4Fv,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFPCUl,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFUl,
+ (void*)getTexGenNum__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord,
+ (void*)getTexCoord__21J3DTexGenBlockPatchedFUl,
+ (void*)setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx,
+ (void*)getTexMtx__21J3DTexGenBlockPatchedFUl,
+ (void*)setNBTScale__15J3DTexGenBlock4FPC11J3DNBTScale,
+ (void*)setNBTScale__15J3DTexGenBlock4F11J3DNBTScale,
+ (void*)getNBTScale__15J3DTexGenBlock4Fv,
+ (void*)getTexMtxOffset__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexMtxOffset__21J3DTexGenBlockPatchedFUl,
+ (void*)__dt__15J3DTexGenBlock4Fv,
+};
+
+/* 803CE60C-803CE678 02B72C 006C+00 2/2 3/3 0/0 .data __vt__21J3DTexGenBlockPatched */
+SECTION_DATA extern void* __vt__21J3DTexGenBlockPatched[27] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__21J3DTexGenBlockPatchedFP14J3DTexGenBlock,
+ (void*)calc__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)calcPostTexMtxWithoutViewMtx__21J3DTexGenBlockPatchedFPA4_Cf,
+ (void*)load__21J3DTexGenBlockPatchedFv,
+ (void*)patch__21J3DTexGenBlockPatchedFv,
+ (void*)diff__21J3DTexGenBlockPatchedFUl,
+ (void*)diffTexMtx__21J3DTexGenBlockPatchedFv,
+ (void*)diffTexGen__21J3DTexGenBlockPatchedFv,
+ (void*)countDLSize__21J3DTexGenBlockPatchedFv,
+ (void*)getType__21J3DTexGenBlockPatchedFv,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFPCUl,
+ (void*)setTexGenNum__21J3DTexGenBlockPatchedFUl,
+ (void*)getTexGenNum__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord,
+ (void*)getTexCoord__21J3DTexGenBlockPatchedFUl,
+ (void*)setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx,
+ (void*)getTexMtx__21J3DTexGenBlockPatchedFUl,
+ (void*)setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale,
+ (void*)setNBTScale__14J3DTexGenBlockF11J3DNBTScale,
+ (void*)getNBTScale__14J3DTexGenBlockFv,
+ (void*)getTexMtxOffset__21J3DTexGenBlockPatchedCFv,
+ (void*)setTexMtxOffset__21J3DTexGenBlockPatchedFUl,
+ (void*)__dt__21J3DTexGenBlockPatchedFv,
+};
+
+/* 803CE678-803CE708 02B798 0090+00 1/1 1/1 0/0 .data __vt__20J3DColorBlockLightOn */
+SECTION_DATA extern void* __vt__20J3DColorBlockLightOn[36] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)load__20J3DColorBlockLightOnFv,
+ (void*)reset__20J3DColorBlockLightOnFP13J3DColorBlock,
+ (void*)patch__20J3DColorBlockLightOnFv,
+ (void*)patchMatColor__20J3DColorBlockLightOnFv,
+ (void*)patchLight__20J3DColorBlockLightOnFv,
+ (void*)diff__20J3DColorBlockLightOnFUl,
+ (void*)diffAmbColor__20J3DColorBlockLightOnFv,
+ (void*)diffMatColor__20J3DColorBlockLightOnFv,
+ (void*)diffColorChan__20J3DColorBlockLightOnFv,
+ (void*)diffLightObj__20J3DColorBlockLightOnFUl,
+ (void*)countDLSize__20J3DColorBlockLightOnFv,
+ (void*)getType__20J3DColorBlockLightOnFv,
+ (void*)setMatColor__20J3DColorBlockLightOnFUlPC10J3DGXColor,
+ (void*)setMatColor__20J3DColorBlockLightOnFUl10J3DGXColor,
+ (void*)getMatColor__20J3DColorBlockLightOnFUl,
+ (void*)setAmbColor__20J3DColorBlockLightOnFUlPC10J3DGXColor,
+ (void*)setAmbColor__20J3DColorBlockLightOnFUl10J3DGXColor,
+ (void*)getAmbColor__20J3DColorBlockLightOnFUl,
+ (void*)setColorChanNum__20J3DColorBlockLightOnFUc,
+ (void*)setColorChanNum__20J3DColorBlockLightOnFPCUc,
+ (void*)getColorChanNum__20J3DColorBlockLightOnCFv,
+ (void*)setColorChan__20J3DColorBlockLightOnFUlRC12J3DColorChan,
+ (void*)setColorChan__20J3DColorBlockLightOnFUlPC12J3DColorChan,
+ (void*)getColorChan__20J3DColorBlockLightOnFUl,
+ (void*)setLight__20J3DColorBlockLightOnFUlP11J3DLightObj,
+ (void*)getLight__20J3DColorBlockLightOnFUl,
+ (void*)setCullMode__20J3DColorBlockLightOnFPCUc,
+ (void*)setCullMode__20J3DColorBlockLightOnFUc,
+ (void*)getCullMode__20J3DColorBlockLightOnCFv,
+ (void*)getMatColorOffset__20J3DColorBlockLightOnCFv,
+ (void*)getColorChanOffset__20J3DColorBlockLightOnCFv,
+ (void*)setMatColorOffset__20J3DColorBlockLightOnFUl,
+ (void*)setColorChanOffset__20J3DColorBlockLightOnFUl,
+ (void*)__dt__20J3DColorBlockLightOnFv,
+};
+
+/* 803CE708-803CE798 02B828 0090+00 1/1 1/1 0/0 .data __vt__22J3DColorBlockAmbientOn */
+SECTION_DATA extern void* __vt__22J3DColorBlockAmbientOn[36] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)load__22J3DColorBlockAmbientOnFv,
+ (void*)reset__22J3DColorBlockAmbientOnFP13J3DColorBlock,
+ (void*)patch__21J3DColorBlockLightOffFv,
+ (void*)patchMatColor__21J3DColorBlockLightOffFv,
+ (void*)patchLight__21J3DColorBlockLightOffFv,
+ (void*)diff__21J3DColorBlockLightOffFUl,
+ (void*)diffAmbColor__13J3DColorBlockFv,
+ (void*)diffMatColor__21J3DColorBlockLightOffFv,
+ (void*)diffColorChan__21J3DColorBlockLightOffFv,
+ (void*)diffLightObj__13J3DColorBlockFUl,
+ (void*)countDLSize__22J3DColorBlockAmbientOnFv,
+ (void*)getType__22J3DColorBlockAmbientOnFv,
+ (void*)setMatColor__21J3DColorBlockLightOffFUlPC10J3DGXColor,
+ (void*)setMatColor__21J3DColorBlockLightOffFUl10J3DGXColor,
+ (void*)getMatColor__21J3DColorBlockLightOffFUl,
+ (void*)setAmbColor__22J3DColorBlockAmbientOnFUlPC10J3DGXColor,
+ (void*)setAmbColor__22J3DColorBlockAmbientOnFUl10J3DGXColor,
+ (void*)getAmbColor__22J3DColorBlockAmbientOnFUl,
+ (void*)setColorChanNum__21J3DColorBlockLightOffFUc,
+ (void*)setColorChanNum__21J3DColorBlockLightOffFPCUc,
+ (void*)getColorChanNum__21J3DColorBlockLightOffCFv,
+ (void*)setColorChan__21J3DColorBlockLightOffFUlRC12J3DColorChan,
+ (void*)setColorChan__21J3DColorBlockLightOffFUlPC12J3DColorChan,
+ (void*)getColorChan__21J3DColorBlockLightOffFUl,
+ (void*)setLight__13J3DColorBlockFUlP11J3DLightObj,
+ (void*)getLight__13J3DColorBlockFUl,
+ (void*)setCullMode__21J3DColorBlockLightOffFPCUc,
+ (void*)setCullMode__21J3DColorBlockLightOffFUc,
+ (void*)getCullMode__21J3DColorBlockLightOffCFv,
+ (void*)getMatColorOffset__21J3DColorBlockLightOffCFv,
+ (void*)getColorChanOffset__21J3DColorBlockLightOffCFv,
+ (void*)setMatColorOffset__21J3DColorBlockLightOffFUl,
+ (void*)setColorChanOffset__21J3DColorBlockLightOffFUl,
+ (void*)__dt__22J3DColorBlockAmbientOnFv,
+};
+
+/* 803CE798-803CE814 02B8B8 007C+00 1/1 1/1 0/0 .data __vt__13J3DPEBlockXlu */
+SECTION_DATA extern void* __vt__13J3DPEBlockXlu[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__10J3DPEBlockFP10J3DPEBlock,
+ (void*)load__13J3DPEBlockXluFv,
+ (void*)patch__10J3DPEBlockFv,
+ (void*)diff__10J3DPEBlockFUl,
+ (void*)diffFog__10J3DPEBlockFv,
+ (void*)diffBlend__10J3DPEBlockFv,
+ (void*)countDLSize__13J3DPEBlockXluFv,
+ (void*)getType__13J3DPEBlockXluFv,
+ (void*)setFog__10J3DPEBlockF6J3DFog,
+ (void*)setFog__10J3DPEBlockFP6J3DFog,
+ (void*)getFog__10J3DPEBlockFv,
+ (void*)setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp,
+ (void*)setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp,
+ (void*)getAlphaComp__10J3DPEBlockFv,
+ (void*)setBlend__10J3DPEBlockFPC8J3DBlend,
+ (void*)setBlend__10J3DPEBlockFRC8J3DBlend,
+ (void*)getBlend__10J3DPEBlockFv,
+ (void*)setZMode__10J3DPEBlockFPC8J3DZMode,
+ (void*)setZMode__10J3DPEBlockF8J3DZMode,
+ (void*)getZMode__10J3DPEBlockFv,
+ (void*)setZCompLoc__10J3DPEBlockFPCUc,
+ (void*)setZCompLoc__10J3DPEBlockFUc,
+ (void*)getZCompLoc__10J3DPEBlockCFv,
+ (void*)setDither__10J3DPEBlockFPCUc,
+ (void*)setDither__10J3DPEBlockFUc,
+ (void*)getDither__10J3DPEBlockCFv,
+ (void*)getFogOffset__10J3DPEBlockCFv,
+ (void*)setFogOffset__10J3DPEBlockFUl,
+ (void*)__dt__13J3DPEBlockXluFv,
+};
+
+/* 803CE814-803CE890 02B934 007C+00 1/1 1/1 0/0 .data __vt__17J3DPEBlockTexEdge */
+SECTION_DATA extern void* __vt__17J3DPEBlockTexEdge[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__10J3DPEBlockFP10J3DPEBlock,
+ (void*)load__17J3DPEBlockTexEdgeFv,
+ (void*)patch__10J3DPEBlockFv,
+ (void*)diff__10J3DPEBlockFUl,
+ (void*)diffFog__10J3DPEBlockFv,
+ (void*)diffBlend__10J3DPEBlockFv,
+ (void*)countDLSize__17J3DPEBlockTexEdgeFv,
+ (void*)getType__17J3DPEBlockTexEdgeFv,
+ (void*)setFog__10J3DPEBlockF6J3DFog,
+ (void*)setFog__10J3DPEBlockFP6J3DFog,
+ (void*)getFog__10J3DPEBlockFv,
+ (void*)setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp,
+ (void*)setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp,
+ (void*)getAlphaComp__10J3DPEBlockFv,
+ (void*)setBlend__10J3DPEBlockFPC8J3DBlend,
+ (void*)setBlend__10J3DPEBlockFRC8J3DBlend,
+ (void*)getBlend__10J3DPEBlockFv,
+ (void*)setZMode__10J3DPEBlockFPC8J3DZMode,
+ (void*)setZMode__10J3DPEBlockF8J3DZMode,
+ (void*)getZMode__10J3DPEBlockFv,
+ (void*)setZCompLoc__10J3DPEBlockFPCUc,
+ (void*)setZCompLoc__10J3DPEBlockFUc,
+ (void*)getZCompLoc__10J3DPEBlockCFv,
+ (void*)setDither__10J3DPEBlockFPCUc,
+ (void*)setDither__10J3DPEBlockFUc,
+ (void*)getDither__10J3DPEBlockCFv,
+ (void*)getFogOffset__10J3DPEBlockCFv,
+ (void*)setFogOffset__10J3DPEBlockFUl,
+ (void*)__dt__17J3DPEBlockTexEdgeFv,
+};
+
+/* 803CE890-803CE90C 02B9B0 007C+00 1/1 1/1 0/0 .data __vt__13J3DPEBlockOpa */
+SECTION_DATA extern void* __vt__13J3DPEBlockOpa[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__10J3DPEBlockFP10J3DPEBlock,
+ (void*)load__13J3DPEBlockOpaFv,
+ (void*)patch__10J3DPEBlockFv,
+ (void*)diff__10J3DPEBlockFUl,
+ (void*)diffFog__10J3DPEBlockFv,
+ (void*)diffBlend__10J3DPEBlockFv,
+ (void*)countDLSize__13J3DPEBlockOpaFv,
+ (void*)getType__13J3DPEBlockOpaFv,
+ (void*)setFog__10J3DPEBlockF6J3DFog,
+ (void*)setFog__10J3DPEBlockFP6J3DFog,
+ (void*)getFog__10J3DPEBlockFv,
+ (void*)setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp,
+ (void*)setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp,
+ (void*)getAlphaComp__10J3DPEBlockFv,
+ (void*)setBlend__10J3DPEBlockFPC8J3DBlend,
+ (void*)setBlend__10J3DPEBlockFRC8J3DBlend,
+ (void*)getBlend__10J3DPEBlockFv,
+ (void*)setZMode__10J3DPEBlockFPC8J3DZMode,
+ (void*)setZMode__10J3DPEBlockF8J3DZMode,
+ (void*)getZMode__10J3DPEBlockFv,
+ (void*)setZCompLoc__10J3DPEBlockFPCUc,
+ (void*)setZCompLoc__10J3DPEBlockFUc,
+ (void*)getZCompLoc__10J3DPEBlockCFv,
+ (void*)setDither__10J3DPEBlockFPCUc,
+ (void*)setDither__10J3DPEBlockFUc,
+ (void*)getDither__10J3DPEBlockCFv,
+ (void*)getFogOffset__10J3DPEBlockCFv,
+ (void*)setFogOffset__10J3DPEBlockFUl,
+ (void*)__dt__13J3DPEBlockOpaFv,
+};
+
+/* 803CE90C-803CE958 02BA2C 004C+00 1/1 1/1 0/0 .data __vt__15J3DIndBlockFull */
+SECTION_DATA extern void* __vt__15J3DIndBlockFull[19] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__15J3DIndBlockFullFP11J3DIndBlock,
+ (void*)diff__15J3DIndBlockFullFUl,
+ (void*)load__15J3DIndBlockFullFv,
+ (void*)countDLSize__15J3DIndBlockFullFv,
+ (void*)getType__15J3DIndBlockFullFv,
+ (void*)setIndTexStageNum__15J3DIndBlockFullFUc,
+ (void*)getIndTexStageNum__15J3DIndBlockFullCFv,
+ (void*)setIndTexOrder__15J3DIndBlockFullFUl14J3DIndTexOrder,
+ (void*)setIndTexOrder__15J3DIndBlockFullFUlPC14J3DIndTexOrder,
+ (void*)getIndTexOrder__15J3DIndBlockFullFUl,
+ (void*)setIndTexMtx__15J3DIndBlockFullFUlPC12J3DIndTexMtx,
+ (void*)setIndTexMtx__15J3DIndBlockFullFUl12J3DIndTexMtx,
+ (void*)getIndTexMtx__15J3DIndBlockFullFUl,
+ (void*)setIndTexCoordScale__15J3DIndBlockFullFUlPC19J3DIndTexCoordScale,
+ (void*)setIndTexCoordScale__15J3DIndBlockFullFUl19J3DIndTexCoordScale,
+ (void*)getIndTexCoordScale__15J3DIndBlockFullFUl,
+ (void*)__dt__15J3DIndBlockFullFv,
+};
+
+/* 803CE958-803CEA34 02BA78 00DC+00 5/5 5/5 0/0 .data __vt__11J3DTevBlock */
+SECTION_DATA extern void* __vt__11J3DTevBlock[55] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__11J3DTevBlockFP11J3DTevBlock,
+ (void*)load__11J3DTevBlockFv,
+ (void*)diff__11J3DTevBlockFUl,
+ (void*)diffTexNo__11J3DTevBlockFv,
+ (void*)diffTevReg__11J3DTevBlockFv,
+ (void*)diffTexCoordScale__11J3DTevBlockFv,
+ (void*)diffTevStage__11J3DTevBlockFv,
+ (void*)diffTevStageIndirect__11J3DTevBlockFv,
+ (void*)patch__11J3DTevBlockFv,
+ (void*)patchTexNo__11J3DTevBlockFv,
+ (void*)patchTevReg__11J3DTevBlockFv,
+ (void*)patchTexNoAndTexCoordScale__11J3DTevBlockFv,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)countDLSize__11J3DTevBlockFv,
+ (void*)setTexNo__11J3DTevBlockFUlPCUs,
+ (void*)setTexNo__11J3DTevBlockFUlUs,
+ (void*)getTexNo__11J3DTevBlockCFUl,
+ (void*)setTevOrder__11J3DTevBlockFUlPC11J3DTevOrder,
+ (void*)setTevOrder__11J3DTevBlockFUl11J3DTevOrder,
+ (void*)getTevOrder__11J3DTevBlockFUl,
+ (void*)setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10,
+ (void*)setTevColor__11J3DTevBlockFUl13J3DGXColorS10,
+ (void*)getTevColor__11J3DTevBlockFUl,
+ (void*)setTevKColor__11J3DTevBlockFUlPC10J3DGXColor,
+ (void*)setTevKColor__11J3DTevBlockFUl10J3DGXColor,
+ (void*)getTevKColor__11J3DTevBlockFUl,
+ (void*)setTevKColorSel__11J3DTevBlockFUlPCUc,
+ (void*)setTevKColorSel__11J3DTevBlockFUlUc,
+ (void*)getTevKColorSel__11J3DTevBlockFUl,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlPCUc,
+ (void*)setTevKAlphaSel__11J3DTevBlockFUlUc,
+ (void*)getTevKAlphaSel__11J3DTevBlockFUl,
+ (void*)setTevStageNum__11J3DTevBlockFPCUc,
+ (void*)setTevStageNum__11J3DTevBlockFUc,
+ (void*)getTevStageNum__11J3DTevBlockCFv,
+ (void*)setTevStage__11J3DTevBlockFUlPC11J3DTevStage,
+ (void*)setTevStage__11J3DTevBlockFUl11J3DTevStage,
+ (void*)getTevStage__11J3DTevBlockFUl,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable,
+ (void*)setTevSwapModeTable__11J3DTevBlockFUl19J3DTevSwapModeTable,
+ (void*)getTevSwapModeTable__11J3DTevBlockFUl,
+ (void*)setIndTevStage__11J3DTevBlockFUlPC14J3DIndTevStage,
+ (void*)setIndTevStage__11J3DTevBlockFUl14J3DIndTevStage,
+ (void*)getIndTevStage__11J3DTevBlockFUl,
+ (void*)getTexNoOffset__11J3DTevBlockCFv,
+ (void*)getTevRegOffset__11J3DTevBlockCFv,
+ (void*)setTexNoOffset__11J3DTevBlockFUl,
+ (void*)setTevRegOffset__11J3DTevBlockFUl,
+ (void*)__dt__11J3DTevBlockFv,
+};
+
+/* 80321F84-80321FE0 31C8C4 005C+00 1/0 0/0 0/0 .text __dt__13J3DTevBlock16Fv */
+J3DTevBlock16::~J3DTevBlock16() {
+ // NONMATCHING
+}
+
+/* 80321FE0-80321FE8 -00001 0008+00 0/0 0/0 0/0 .text setTexNoOffset__11J3DTevBlockFUl */
+void J3DTevBlock::setTexNoOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 4) /* this->field_0x4 */ = (u32)(param_0);
+}
+
+/* 80321FE8-80321FEC 31C928 0004+00 1/0 0/0 0/0 .text ptrToIndex__12J3DTevBlock4Fv */
+void J3DTevBlock4::ptrToIndex() {
+ /* empty function */
+}
+
+/* 80321FEC-80322010 31C92C 0024+00 1/0 0/0 0/0 .text indexToPtr__12J3DTevBlock4Fv */
+void J3DTevBlock4::indexToPtr() {
+ // NONMATCHING
+}
+
+/* 80322010-8032201C 31C950 000C+00 1/0 0/0 0/0 .text getType__12J3DTevBlock4Fv */
+u32 J3DTevBlock4::getType() {
+ return 'TVB4';
+}
+
+/* 8032201C-8032202C 31C95C 0010+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock4FUlUs */
+void J3DTevBlock4::setTexNo(u32 param_0, u16 param_1) {
+ // NONMATCHING
+}
+
+/* 8032202C-80322040 31C96C 0014+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock4FUlPCUs */
+void J3DTevBlock4::setTexNo(u32 param_0, u16 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322040-80322050 31C980 0010+00 1/0 0/0 0/0 .text getTexNo__12J3DTevBlock4CFUl */
+u16 J3DTevBlock4::getTexNo(u32 param_0) const {
+ // NONMATCHING
+}
+
+/* 80322050-80322064 31C990 0014+00 1/0 0/0 0/0 .text setTevOrder__12J3DTevBlock4FUl11J3DTevOrder
+ */
+void J3DTevBlock4::setTevOrder(u32 param_0, J3DTevOrder param_1) {
+ // NONMATCHING
+}
+
+/* 80322064-80322078 31C9A4 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__12J3DTevBlock4FUlPC11J3DTevOrder */
+void J3DTevBlock4::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322078-8032208C 31C9B8 0014+00 1/0 0/0 0/0 .text getTevOrder__12J3DTevBlock4FUl */
+J3DTevOrder* J3DTevBlock4::getTevOrder(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 8032208C-803220B8 31C9CC 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__12J3DTevBlock4FUl13J3DGXColorS10 */
+void J3DTevBlock4::setTevColor(u32 param_0, J3DGXColorS10 param_1) {
+ // NONMATCHING
+}
+
+/* 803220B8-803220E4 31C9F8 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__12J3DTevBlock4FUlPC13J3DGXColorS10 */
+void J3DTevBlock4::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {
+ // NONMATCHING
+}
+
+/* 803220E4-803220F8 31CA24 0014+00 1/0 0/0 0/0 .text getTevColor__12J3DTevBlock4FUl */
+J3DGXColorS10* J3DTevBlock4::getTevColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803220F8-80322124 31CA38 002C+00 1/0 0/0 0/0 .text setTevKColor__12J3DTevBlock4FUl10J3DGXColor
+ */
+void J3DTevBlock4::setTevKColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 80322124-80322150 31CA64 002C+00 1/0 0/0 0/0 .text
+ * setTevKColor__12J3DTevBlock4FUlPC10J3DGXColor */
+void J3DTevBlock4::setTevKColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322150-80322164 31CA90 0014+00 1/0 0/0 0/0 .text getTevKColor__12J3DTevBlock4FUl */
+J3DGXColor* J3DTevBlock4::getTevKColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322164-80322170 31CAA4 000C+00 1/0 0/0 0/0 .text setTevKColorSel__12J3DTevBlock4FUlUc */
+void J3DTevBlock4::setTevKColorSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80322170-80322180 31CAB0 0010+00 1/0 0/0 0/0 .text setTevKColorSel__12J3DTevBlock4FUlPCUc */
+void J3DTevBlock4::setTevKColorSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322180-8032218C 31CAC0 000C+00 1/0 0/0 0/0 .text getTevKColorSel__12J3DTevBlock4FUl
+ */
+bool J3DTevBlock4::getTevKColorSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 8032218C-80322198 31CACC 000C+00 1/0 0/0 0/0 .text setTevKAlphaSel__12J3DTevBlock4FUlUc */
+void J3DTevBlock4::setTevKAlphaSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80322198-803221A8 31CAD8 0010+00 1/0 0/0 0/0 .text setTevKAlphaSel__12J3DTevBlock4FUlPCUc */
+void J3DTevBlock4::setTevKAlphaSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 803221A8-803221B4 31CAE8 000C+00 1/0 0/0 0/0 .text getTevKAlphaSel__12J3DTevBlock4FUl
+ */
+bool J3DTevBlock4::getTevKAlphaSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803221B4-803221BC -00001 0008+00 0/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock4FUc
+ */
+void J3DTevBlock4::setTevStageNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 32) /* this->field_0x20 */ = (u8)(param_0);
+}
+
+/* 803221BC-803221C8 31CAFC 000C+00 1/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock4FPCUc
+ */
+void J3DTevBlock4::setTevStageNum(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 803221C8-803221D0 31CB08 0008+00 1/0 0/0 0/0 .text getTevStageNum__12J3DTevBlock4CFv
+ */
+u8 J3DTevBlock4::getTevStageNum() const {
+ // NONMATCHING
+}
+
+/* 803221D0-8032220C 31CB10 003C+00 1/0 0/0 0/0 .text setTevStage__12J3DTevBlock4FUl11J3DTevStage
+ */
+void J3DTevBlock4::setTevStage(u32 param_0, J3DTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 8032220C-80322248 31CB4C 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__12J3DTevBlock4FUlPC11J3DTevStage */
+void J3DTevBlock4::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322248-8032225C 31CB88 0014+00 1/0 0/0 0/0 .text getTevStage__12J3DTevBlock4FUl */
+J3DTevStage* J3DTevBlock4::getTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 8032225C-80322294 31CB9C 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__12J3DTevBlock4FUl18J3DTevSwapModeInfo */
+void J3DTevBlock4::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo param_1) {
+ // NONMATCHING
+}
+
+/* 80322294-803222CC 31CBD4 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__12J3DTevBlock4FUlPC18J3DTevSwapModeInfo */
+void J3DTevBlock4::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo const* param_1) {
+ // NONMATCHING
+}
+
+/* 803222CC-803222DC 31CC0C 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__12J3DTevBlock4FUl19J3DTevSwapModeTable */
+void J3DTevBlock4::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable param_1) {
+ // NONMATCHING
+}
+
+/* 803222DC-803222EC 31CC1C 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__12J3DTevBlock4FUlPC19J3DTevSwapModeTable */
+void J3DTevBlock4::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable const* param_1) {
+ // NONMATCHING
+}
+
+/* 803222EC-803222FC 31CC2C 0010+00 1/0 0/0 0/0 .text getTevSwapModeTable__12J3DTevBlock4FUl */
+J3DTevSwapModeTable* J3DTevBlock4::getTevSwapModeTable(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803222FC-80322310 31CC3C 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock4FUl14J3DIndTevStage */
+void J3DTevBlock4::setIndTevStage(u32 param_0, J3DIndTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80322310-80322324 31CC50 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock4FUlPC14J3DIndTevStage */
+void J3DTevBlock4::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322324-80322338 31CC64 0014+00 1/0 0/0 0/0 .text getIndTevStage__12J3DTevBlock4FUl
+ */
+J3DIndTevStage* J3DTevBlock4::getIndTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322338-80322340 31CC78 0008+00 1/0 0/0 0/0 .text getTexNoOffset__12J3DTevBlock4CFv
+ */
+u32 J3DTevBlock4::getTexNoOffset() const {
+ // NONMATCHING
+}
+
+/* 80322340-80322348 31CC80 0008+00 1/0 0/0 0/0 .text getTevRegOffset__12J3DTevBlock4CFv
+ */
+bool J3DTevBlock4::getTevRegOffset() const {
+ // NONMATCHING
+}
+
+/* 80322348-80322350 -00001 0008+00 0/0 0/0 0/0 .text setTevRegOffset__12J3DTevBlock4FUl
+ */
+void J3DTevBlock4::setTevRegOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 144) /* this->field_0x90 */ = (u32)(param_0);
+}
+
+/* 80322350-803223AC 31CC90 005C+00 1/0 0/0 0/0 .text __dt__12J3DTevBlock4Fv */
+J3DTevBlock4::~J3DTevBlock4() {
+ // NONMATCHING
+}
+
+/* 803223AC-803223B0 31CCEC 0004+00 1/0 0/0 0/0 .text ptrToIndex__12J3DTevBlock2Fv */
+void J3DTevBlock2::ptrToIndex() {
+ /* empty function */
+}
+
+/* 803223B0-803223D4 31CCF0 0024+00 1/0 0/0 0/0 .text indexToPtr__12J3DTevBlock2Fv */
+void J3DTevBlock2::indexToPtr() {
+ // NONMATCHING
+}
+
+/* 803223D4-803223E0 31CD14 000C+00 1/0 0/0 0/0 .text getType__12J3DTevBlock2Fv */
+u32 J3DTevBlock2::getType() {
+ return 'TVB2';
+}
+
+/* 803223E0-803223F0 31CD20 0010+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock2FUlUs */
+void J3DTevBlock2::setTexNo(u32 param_0, u16 param_1) {
+ // NONMATCHING
+}
+
+/* 803223F0-80322404 31CD30 0014+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock2FUlPCUs */
+void J3DTevBlock2::setTexNo(u32 param_0, u16 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322404-80322414 31CD44 0010+00 1/0 0/0 0/0 .text getTexNo__12J3DTevBlock2CFUl */
+u16 J3DTevBlock2::getTexNo(u32 param_0) const {
+ // NONMATCHING
+}
+
+/* 80322414-80322428 31CD54 0014+00 1/0 0/0 0/0 .text setTevOrder__12J3DTevBlock2FUl11J3DTevOrder
+ */
+void J3DTevBlock2::setTevOrder(u32 param_0, J3DTevOrder param_1) {
+ // NONMATCHING
+}
+
+/* 80322428-8032243C 31CD68 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__12J3DTevBlock2FUlPC11J3DTevOrder */
+void J3DTevBlock2::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+ // NONMATCHING
+}
+
+/* 8032243C-80322450 31CD7C 0014+00 1/0 0/0 0/0 .text getTevOrder__12J3DTevBlock2FUl */
+J3DTevOrder* J3DTevBlock2::getTevOrder(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322450-8032247C 31CD90 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__12J3DTevBlock2FUl13J3DGXColorS10 */
+void J3DTevBlock2::setTevColor(u32 param_0, J3DGXColorS10 param_1) {
+ // NONMATCHING
+}
+
+/* 8032247C-803224A8 31CDBC 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__12J3DTevBlock2FUlPC13J3DGXColorS10 */
+void J3DTevBlock2::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {
+ // NONMATCHING
+}
+
+/* 803224A8-803224BC 31CDE8 0014+00 1/0 0/0 0/0 .text getTevColor__12J3DTevBlock2FUl */
+J3DGXColorS10* J3DTevBlock2::getTevColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803224BC-803224E8 31CDFC 002C+00 1/0 0/0 0/0 .text setTevKColor__12J3DTevBlock2FUl10J3DGXColor
+ */
+void J3DTevBlock2::setTevKColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 803224E8-80322514 31CE28 002C+00 1/0 0/0 0/0 .text
+ * setTevKColor__12J3DTevBlock2FUlPC10J3DGXColor */
+void J3DTevBlock2::setTevKColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322514-80322528 31CE54 0014+00 1/0 0/0 0/0 .text getTevKColor__12J3DTevBlock2FUl */
+J3DGXColor* J3DTevBlock2::getTevKColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322528-80322534 31CE68 000C+00 1/0 0/0 0/0 .text setTevKColorSel__12J3DTevBlock2FUlUc */
+void J3DTevBlock2::setTevKColorSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80322534-80322544 31CE74 0010+00 1/0 0/0 0/0 .text setTevKColorSel__12J3DTevBlock2FUlPCUc */
+void J3DTevBlock2::setTevKColorSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322544-80322550 31CE84 000C+00 1/0 0/0 0/0 .text getTevKColorSel__12J3DTevBlock2FUl
+ */
+bool J3DTevBlock2::getTevKColorSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322550-8032255C 31CE90 000C+00 1/0 0/0 0/0 .text setTevKAlphaSel__12J3DTevBlock2FUlUc */
+void J3DTevBlock2::setTevKAlphaSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 8032255C-8032256C 31CE9C 0010+00 1/0 0/0 0/0 .text setTevKAlphaSel__12J3DTevBlock2FUlPCUc */
+void J3DTevBlock2::setTevKAlphaSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 8032256C-80322578 31CEAC 000C+00 1/0 0/0 0/0 .text getTevKAlphaSel__12J3DTevBlock2FUl
+ */
+bool J3DTevBlock2::getTevKAlphaSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322578-80322580 -00001 0008+00 0/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock2FUc
+ */
+void J3DTevBlock2::setTevStageNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 52) /* this->field_0x34 */ = (u8)(param_0);
+}
+
+/* 80322580-8032258C 31CEC0 000C+00 1/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock2FPCUc
+ */
+void J3DTevBlock2::setTevStageNum(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 8032258C-80322594 31CECC 0008+00 1/0 0/0 0/0 .text getTevStageNum__12J3DTevBlock2CFv
+ */
+u8 J3DTevBlock2::getTevStageNum() const {
+ // NONMATCHING
+}
+
+/* 80322594-803225D0 31CED4 003C+00 1/0 0/0 0/0 .text setTevStage__12J3DTevBlock2FUl11J3DTevStage
+ */
+void J3DTevBlock2::setTevStage(u32 param_0, J3DTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 803225D0-8032260C 31CF10 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__12J3DTevBlock2FUlPC11J3DTevStage */
+void J3DTevBlock2::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 8032260C-80322620 31CF4C 0014+00 1/0 0/0 0/0 .text getTevStage__12J3DTevBlock2FUl */
+J3DTevStage* J3DTevBlock2::getTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322620-80322658 31CF60 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__12J3DTevBlock2FUl18J3DTevSwapModeInfo */
+void J3DTevBlock2::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo param_1) {
+ // NONMATCHING
+}
+
+/* 80322658-80322690 31CF98 0038+00 1/0 0/0 0/0 .text
+ * setTevSwapModeInfo__12J3DTevBlock2FUlPC18J3DTevSwapModeInfo */
+void J3DTevBlock2::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322690-803226A0 31CFD0 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__12J3DTevBlock2FUl19J3DTevSwapModeTable */
+void J3DTevBlock2::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable param_1) {
+ // NONMATCHING
+}
+
+/* 803226A0-803226B0 31CFE0 0010+00 1/0 0/0 0/0 .text
+ * setTevSwapModeTable__12J3DTevBlock2FUlPC19J3DTevSwapModeTable */
+void J3DTevBlock2::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable const* param_1) {
+ // NONMATCHING
+}
+
+/* 803226B0-803226C0 31CFF0 0010+00 1/0 0/0 0/0 .text getTevSwapModeTable__12J3DTevBlock2FUl */
+J3DTevSwapModeTable* J3DTevBlock2::getTevSwapModeTable(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803226C0-803226D4 31D000 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock2FUl14J3DIndTevStage */
+void J3DTevBlock2::setIndTevStage(u32 param_0, J3DIndTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 803226D4-803226E8 31D014 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock2FUlPC14J3DIndTevStage */
+void J3DTevBlock2::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 803226E8-803226FC 31D028 0014+00 1/0 0/0 0/0 .text getIndTevStage__12J3DTevBlock2FUl
+ */
+J3DIndTevStage* J3DTevBlock2::getIndTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803226FC-80322704 31D03C 0008+00 1/0 0/0 0/0 .text getTexNoOffset__12J3DTevBlock2CFv
+ */
+u32 J3DTevBlock2::getTexNoOffset() const {
+ // NONMATCHING
+}
+
+/* 80322704-8032270C 31D044 0008+00 1/0 0/0 0/0 .text getTevRegOffset__12J3DTevBlock2CFv
+ */
+bool J3DTevBlock2::getTevRegOffset() const {
+ // NONMATCHING
+}
+
+/* 8032270C-80322714 -00001 0008+00 0/0 0/0 0/0 .text setTevRegOffset__12J3DTevBlock2FUl
+ */
+void J3DTevBlock2::setTevRegOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 104) /* this->field_0x68 */ = (u32)(param_0);
+}
+
+/* 80322714-80322770 31D054 005C+00 1/0 0/0 0/0 .text __dt__12J3DTevBlock2Fv */
+J3DTevBlock2::~J3DTevBlock2() {
+ // NONMATCHING
+}
+
+/* 80322770-80322774 31D0B0 0004+00 1/0 0/0 0/0 .text ptrToIndex__12J3DTevBlock1Fv */
+void J3DTevBlock1::ptrToIndex() {
+ /* empty function */
+}
+
+/* 80322774-80322798 31D0B4 0024+00 1/0 0/0 0/0 .text indexToPtr__12J3DTevBlock1Fv */
+void J3DTevBlock1::indexToPtr() {
+ // NONMATCHING
+}
+
+/* 80322798-803227A4 31D0D8 000C+00 1/0 0/0 0/0 .text getType__12J3DTevBlock1Fv */
+u32 J3DTevBlock1::getType() {
+ return 'TVB1';
+}
+
+/* 803227A4-803227B4 31D0E4 0010+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock1FUlUs */
+void J3DTevBlock1::setTexNo(u32 param_0, u16 param_1) {
+ // NONMATCHING
+}
+
+/* 803227B4-803227C8 31D0F4 0014+00 1/0 0/0 0/0 .text setTexNo__12J3DTevBlock1FUlPCUs */
+void J3DTevBlock1::setTexNo(u32 param_0, u16 const* param_1) {
+ // NONMATCHING
+}
+
+/* 803227C8-803227D8 31D108 0010+00 1/0 0/0 0/0 .text getTexNo__12J3DTevBlock1CFUl */
+u16 J3DTevBlock1::getTexNo(u32 param_0) const {
+ // NONMATCHING
+}
+
+/* 803227D8-803227EC 31D118 0014+00 1/0 0/0 0/0 .text setTevOrder__12J3DTevBlock1FUl11J3DTevOrder
+ */
+void J3DTevBlock1::setTevOrder(u32 param_0, J3DTevOrder param_1) {
+ // NONMATCHING
+}
+
+/* 803227EC-80322800 31D12C 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__12J3DTevBlock1FUlPC11J3DTevOrder */
+void J3DTevBlock1::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322800-80322814 31D140 0014+00 1/0 0/0 0/0 .text getTevOrder__12J3DTevBlock1FUl */
+J3DTevOrder* J3DTevBlock1::getTevOrder(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322814-80322818 31D154 0004+00 1/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock1FUc
+ */
+void J3DTevBlock1::setTevStageNum(u8 param_0) {
+ /* empty function */
+}
+
+/* 80322818-8032281C 31D158 0004+00 1/0 0/0 0/0 .text setTevStageNum__12J3DTevBlock1FPCUc
+ */
+void J3DTevBlock1::setTevStageNum(u8 const* param_0) {
+ /* empty function */
+}
+
+/* 8032281C-80322824 31D15C 0008+00 1/0 0/0 0/0 .text getTevStageNum__12J3DTevBlock1CFv
+ */
+u8 J3DTevBlock1::getTevStageNum() const {
+ return true;
+}
+
+/* 80322824-80322860 31D164 003C+00 1/0 0/0 0/0 .text setTevStage__12J3DTevBlock1FUl11J3DTevStage
+ */
+void J3DTevBlock1::setTevStage(u32 param_0, J3DTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80322860-8032289C 31D1A0 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__12J3DTevBlock1FUlPC11J3DTevStage */
+void J3DTevBlock1::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 8032289C-803228B0 31D1DC 0014+00 1/0 0/0 0/0 .text getTevStage__12J3DTevBlock1FUl */
+J3DTevStage* J3DTevBlock1::getTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803228B0-803228C4 31D1F0 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock1FUl14J3DIndTevStage */
+void J3DTevBlock1::setIndTevStage(u32 param_0, J3DIndTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 803228C4-803228D8 31D204 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__12J3DTevBlock1FUlPC14J3DIndTevStage */
+void J3DTevBlock1::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 803228D8-803228EC 31D218 0014+00 1/0 0/0 0/0 .text getIndTevStage__12J3DTevBlock1FUl
+ */
+J3DIndTevStage* J3DTevBlock1::getIndTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 803228EC-803228F4 31D22C 0008+00 1/0 0/0 0/0 .text getTexNoOffset__12J3DTevBlock1CFv
+ */
+u32 J3DTevBlock1::getTexNoOffset() const {
+ // NONMATCHING
+}
+
+/* 803228F4-80322950 31D234 005C+00 1/0 0/0 0/0 .text __dt__12J3DTevBlock1Fv */
+J3DTevBlock1::~J3DTevBlock1() {
+ // NONMATCHING
+}
+
+/* 80322950-80322954 31D290 0004+00 2/0 1/0 0/0 .text setTevKColorSel__11J3DTevBlockFUlPCUc */
+void J3DTevBlock::setTevKColorSel(u32 param_0, u8 const* param_1) {
+ /* empty function */
+}
+
+/* 80322954-80322958 31D294 0004+00 3/0 1/0 0/0 .text setTevKAlphaSel__11J3DTevBlockFUlPCUc */
+void J3DTevBlock::setTevKAlphaSel(u32 param_0, u8 const* param_1) {
+ /* empty function */
+}
+
+/* 80322958-8032295C 31D298 0004+00 3/0 1/0 0/0 .text
+ * setTevSwapModeInfo__11J3DTevBlockFUl18J3DTevSwapModeInfo */
+void J3DTevBlock::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo param_1) {
+ /* empty function */
+}
+
+/* 8032295C-80322960 31D29C 0004+00 3/0 1/0 0/0 .text
+ * setTevSwapModeInfo__11J3DTevBlockFUlPC18J3DTevSwapModeInfo */
+void J3DTevBlock::setTevSwapModeInfo(u32 param_0, J3DTevSwapModeInfo const* param_1) {
+ /* empty function */
+}
+
+/* 80322960-80322964 31D2A0 0004+00 3/0 1/0 0/0 .text
+ * setTevSwapModeTable__11J3DTevBlockFUlPC19J3DTevSwapModeTable */
+void J3DTevBlock::setTevSwapModeTable(u32 param_0, J3DTevSwapModeTable const* param_1) {
+ /* empty function */
+}
+
+/* 80322964-8032296C 31D2A4 0008+00 2/0 1/0 0/0 .text getTevRegOffset__11J3DTevBlockCFv
+ */
+bool J3DTevBlock::getTevRegOffset() const {
+ return false;
+}
+
+/* 8032296C-80322970 31D2AC 0004+00 2/0 1/0 0/0 .text setTevRegOffset__11J3DTevBlockFUl
+ */
+void J3DTevBlock::setTevRegOffset(u32 param_0) {
+ /* empty function */
+}
+
+/* 80322970-80322974 31D2B0 0004+00 1/0 0/0 0/0 .text load__18J3DTevBlockPatchedFv */
+void J3DTevBlockPatched::load() {
+ /* empty function */
+}
+
+/* 80322974-80322998 31D2B4 0024+00 1/0 0/0 0/0 .text indexToPtr__18J3DTevBlockPatchedFv
+ */
+void J3DTevBlockPatched::indexToPtr() {
+ // NONMATCHING
+}
+
+/* 80322998-803229A4 31D2D8 000C+00 1/0 0/0 0/0 .text getType__18J3DTevBlockPatchedFv */
+u32 J3DTevBlockPatched::getType() {
+ return 'TVPT';
+}
+
+/* 803229A4-803229AC -00001 0008+00 0/0 0/0 0/0 .text setTevStageNum__18J3DTevBlockPatchedFUc */
+void J3DTevBlockPatched::setTevStageNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 208) /* this->field_0xd0 */ = (u8)(param_0);
+}
+
+/* 803229AC-803229B8 31D2EC 000C+00 1/0 0/0 0/0 .text setTevStageNum__18J3DTevBlockPatchedFPCUc */
+void J3DTevBlockPatched::setTevStageNum(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 803229B8-803229C0 31D2F8 0008+00 1/0 0/0 0/0 .text getTevStageNum__18J3DTevBlockPatchedCFv */
+u8 J3DTevBlockPatched::getTevStageNum() const {
+ // NONMATCHING
+}
+
+/* 803229C0-803229D0 31D300 0010+00 1/0 0/0 0/0 .text setTexNo__18J3DTevBlockPatchedFUlUs
+ */
+void J3DTevBlockPatched::setTexNo(u32 param_0, u16 param_1) {
+ // NONMATCHING
+}
+
+/* 803229D0-803229E4 31D310 0014+00 1/0 0/0 0/0 .text setTexNo__18J3DTevBlockPatchedFUlPCUs */
+void J3DTevBlockPatched::setTexNo(u32 param_0, u16 const* param_1) {
+ // NONMATCHING
+}
+
+/* 803229E4-803229F4 31D324 0010+00 1/0 0/0 0/0 .text getTexNo__18J3DTevBlockPatchedCFUl
+ */
+u16 J3DTevBlockPatched::getTexNo(u32 param_0) const {
+ // NONMATCHING
+}
+
+/* 803229F4-80322A08 31D334 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__18J3DTevBlockPatchedFUl11J3DTevOrder */
+void J3DTevBlockPatched::setTevOrder(u32 param_0, J3DTevOrder param_1) {
+ // NONMATCHING
+}
+
+/* 80322A08-80322A1C 31D348 0014+00 1/0 0/0 0/0 .text
+ * setTevOrder__18J3DTevBlockPatchedFUlPC11J3DTevOrder */
+void J3DTevBlockPatched::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322A1C-80322A30 31D35C 0014+00 1/0 0/0 0/0 .text getTevOrder__18J3DTevBlockPatchedFUl */
+J3DTevOrder* J3DTevBlockPatched::getTevOrder(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322A30-80322A6C 31D370 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__18J3DTevBlockPatchedFUl11J3DTevStage */
+void J3DTevBlockPatched::setTevStage(u32 param_0, J3DTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80322A6C-80322AA8 31D3AC 003C+00 1/0 0/0 0/0 .text
+ * setTevStage__18J3DTevBlockPatchedFUlPC11J3DTevStage */
+void J3DTevBlockPatched::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322AA8-80322ABC 31D3E8 0014+00 1/0 0/0 0/0 .text getTevStage__18J3DTevBlockPatchedFUl */
+J3DTevStage* J3DTevBlockPatched::getTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322ABC-80322AD0 31D3FC 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__18J3DTevBlockPatchedFUl14J3DIndTevStage */
+void J3DTevBlockPatched::setIndTevStage(u32 param_0, J3DIndTevStage param_1) {
+ // NONMATCHING
+}
+
+/* 80322AD0-80322AE4 31D410 0014+00 1/0 0/0 0/0 .text
+ * setIndTevStage__18J3DTevBlockPatchedFUlPC14J3DIndTevStage */
+void J3DTevBlockPatched::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322AE4-80322AF8 31D424 0014+00 1/0 0/0 0/0 .text getIndTevStage__18J3DTevBlockPatchedFUl */
+J3DIndTevStage* J3DTevBlockPatched::getIndTevStage(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322AF8-80322B24 31D438 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__18J3DTevBlockPatchedFUl13J3DGXColorS10 */
+void J3DTevBlockPatched::setTevColor(u32 param_0, J3DGXColorS10 param_1) {
+ // NONMATCHING
+}
+
+/* 80322B24-80322B50 31D464 002C+00 1/0 0/0 0/0 .text
+ * setTevColor__18J3DTevBlockPatchedFUlPC13J3DGXColorS10 */
+void J3DTevBlockPatched::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322B50-80322B64 31D490 0014+00 1/0 0/0 0/0 .text getTevColor__18J3DTevBlockPatchedFUl */
+J3DGXColorS10* J3DTevBlockPatched::getTevColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322B64-80322B90 31D4A4 002C+00 1/0 0/0 0/0 .text
+ * setTevKColor__18J3DTevBlockPatchedFUl10J3DGXColor */
+void J3DTevBlockPatched::setTevKColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 80322B90-80322BBC 31D4D0 002C+00 1/0 0/0 0/0 .text
+ * setTevKColor__18J3DTevBlockPatchedFUlPC10J3DGXColor */
+void J3DTevBlockPatched::setTevKColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322BBC-80322BD0 31D4FC 0014+00 1/0 0/0 0/0 .text getTevKColor__18J3DTevBlockPatchedFUl */
+J3DGXColor* J3DTevBlockPatched::getTevKColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322BD0-80322BDC 31D510 000C+00 1/0 0/0 0/0 .text setTevKColorSel__18J3DTevBlockPatchedFUlUc
+ */
+void J3DTevBlockPatched::setTevKColorSel(u32 param_0, u8 param_1) {
+ // NONMATCHING
+}
+
+/* 80322BDC-80322BEC 31D51C 0010+00 1/0 0/0 0/0 .text setTevKColorSel__18J3DTevBlockPatchedFUlPCUc
+ */
+void J3DTevBlockPatched::setTevKColorSel(u32 param_0, u8 const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322BEC-80322BF8 31D52C 000C+00 1/0 0/0 0/0 .text getTevKColorSel__18J3DTevBlockPatchedFUl */
+bool J3DTevBlockPatched::getTevKColorSel(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322BF8-80322C00 31D538 0008+00 1/0 0/0 0/0 .text getTexNoOffset__18J3DTevBlockPatchedCFv */
+u32 J3DTevBlockPatched::getTexNoOffset() const {
+ // NONMATCHING
+}
+
+/* 80322C00-80322C08 31D540 0008+00 1/0 0/0 0/0 .text getTevRegOffset__18J3DTevBlockPatchedCFv */
+bool J3DTevBlockPatched::getTevRegOffset() const {
+ // NONMATCHING
+}
+
+/* 80322C08-80322C10 -00001 0008+00 0/0 0/0 0/0 .text setTevRegOffset__18J3DTevBlockPatchedFUl */
+void J3DTevBlockPatched::setTevRegOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 212) /* this->field_0xd4 */ = (u32)(param_0);
+}
+
+/* 80322C10-80322C6C 31D550 005C+00 1/0 0/0 0/0 .text __dt__18J3DTevBlockPatchedFv */
+J3DTevBlockPatched::~J3DTevBlockPatched() {
+ // NONMATCHING
+}
+
+/* 80322C6C-80322C78 31D5AC 000C+00 1/0 0/0 0/0 .text getType__19J3DTexGenBlockBasicFv */
+u32 J3DTexGenBlockBasic::getType() {
+ return 'TGBC';
+}
+
+/* 80322C78-80322C9C 31D5B8 0024+00 1/0 0/0 0/0 .text
+ * setNBTScale__19J3DTexGenBlockBasicF11J3DNBTScale */
+void J3DTexGenBlockBasic::setNBTScale(J3DNBTScale param_0) {
+ // NONMATCHING
+}
+
+/* 80322C9C-80322CC0 31D5DC 0024+00 1/0 0/0 0/0 .text
+ * setNBTScale__19J3DTexGenBlockBasicFPC11J3DNBTScale */
+void J3DTexGenBlockBasic::setNBTScale(J3DNBTScale const* param_0) {
+ // NONMATCHING
+}
+
+/* 80322CC0-80322CC8 31D600 0008+00 1/0 0/0 0/0 .text getNBTScale__19J3DTexGenBlockBasicFv */
+J3DNBTScale* J3DTexGenBlockBasic::getNBTScale() {
+ // NONMATCHING
+}
+
+/* 80322CC8-80322D34 31D608 006C+00 1/0 0/0 0/0 .text __dt__19J3DTexGenBlockBasicFv */
+J3DTexGenBlockBasic::~J3DTexGenBlockBasic() {
+ // NONMATCHING
+}
+
+/* 80322D34-80322D3C -00001 0008+00 0/0 0/0 0/0 .text setTexGenNum__21J3DTexGenBlockPatchedFUl */
+void J3DTexGenBlockPatched::setTexGenNum(u32 param_0) {
+ *(u32*)(((u8*)this) + 4) /* this->field_0x4 */ = (u32)(param_0);
+}
+
+/* 80322D3C-80322D48 31D67C 000C+00 3/0 0/0 0/0 .text setTexGenNum__21J3DTexGenBlockPatchedFPCUl
+ */
+void J3DTexGenBlockPatched::setTexGenNum(u32 const* param_0) {
+ // NONMATCHING
+}
+
+/* 80322D48-80322D50 31D688 0008+00 3/0 0/0 0/0 .text getTexGenNum__21J3DTexGenBlockPatchedCFv */
+u32 J3DTexGenBlockPatched::getTexGenNum() const {
+ // NONMATCHING
+}
+
+/* 80322D50-80322D64 31D690 0014+00 3/0 0/0 0/0 .text
+ * setTexCoord__21J3DTexGenBlockPatchedFUlPC11J3DTexCoord */
+void J3DTexGenBlockPatched::setTexCoord(u32 param_0, J3DTexCoord const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322D64-80322D78 31D6A4 0014+00 3/0 0/0 0/0 .text getTexCoord__21J3DTexGenBlockPatchedFUl */
+J3DTexCoord* J3DTexGenBlockPatched::getTexCoord(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322D78-80322D88 31D6B8 0010+00 3/0 0/0 0/0 .text
+ * setTexMtx__21J3DTexGenBlockPatchedFUlP9J3DTexMtx */
+void J3DTexGenBlockPatched::setTexMtx(u32 param_0, J3DTexMtx* param_1) {
+ // NONMATCHING
+}
+
+/* 80322D88-80322D98 31D6C8 0010+00 3/0 0/0 0/0 .text getTexMtx__21J3DTexGenBlockPatchedFUl */
+J3DTexMtx* J3DTexGenBlockPatched::getTexMtx(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322D98-80322DA0 31D6D8 0008+00 3/0 0/0 0/0 .text getTexMtxOffset__21J3DTexGenBlockPatchedCFv
+ */
+bool J3DTexGenBlockPatched::getTexMtxOffset() const {
+ // NONMATCHING
+}
+
+/* 80322DA0-80322DA8 -00001 0008+00 0/0 0/0 0/0 .text setTexMtxOffset__21J3DTexGenBlockPatchedFUl
+ */
+void J3DTexGenBlockPatched::setTexMtxOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 88) /* this->field_0x58 */ = (u32)(param_0);
+}
+
+/* 80322DA8-80322DB4 31D6E8 000C+00 1/0 0/0 0/0 .text getType__15J3DTexGenBlock4Fv */
+u32 J3DTexGenBlock4::getType() {
+ return 'TGB4';
+}
+
+/* 80322DB4-80322DD8 31D6F4 0024+00 1/0 0/0 0/0 .text setNBTScale__15J3DTexGenBlock4F11J3DNBTScale
+ */
+void J3DTexGenBlock4::setNBTScale(J3DNBTScale param_0) {
+ // NONMATCHING
+}
+
+/* 80322DD8-80322DFC 31D718 0024+00 1/0 0/0 0/0 .text
+ * setNBTScale__15J3DTexGenBlock4FPC11J3DNBTScale */
+void J3DTexGenBlock4::setNBTScale(J3DNBTScale const* param_0) {
+ // NONMATCHING
+}
+
+/* 80322DFC-80322E04 31D73C 0008+00 1/0 0/0 0/0 .text getNBTScale__15J3DTexGenBlock4Fv */
+J3DNBTScale* J3DTexGenBlock4::getNBTScale() {
+ // NONMATCHING
+}
+
+/* 80322E04-80322E70 31D744 006C+00 1/0 0/0 0/0 .text __dt__15J3DTexGenBlock4Fv */
+J3DTexGenBlock4::~J3DTexGenBlock4() {
+ // NONMATCHING
+}
+
+/* 80322E70-80322E74 31D7B0 0004+00 1/0 0/0 0/0 .text load__21J3DTexGenBlockPatchedFv */
+void J3DTexGenBlockPatched::load() {
+ /* empty function */
+}
+
+/* 80322E74-80322E80 31D7B4 000C+00 1/0 0/0 0/0 .text getType__21J3DTexGenBlockPatchedFv
+ */
+u32 J3DTexGenBlockPatched::getType() {
+ return 'TGPT';
+}
+
+/* 80322E80-80322E8C 31D7C0 000C+00 1/0 0/0 0/0 .text getType__20J3DColorBlockLightOnFv
+ */
+u32 J3DColorBlockLightOn::getType() {
+ return 'CLON';
+}
+
+/* 80322E8C-80322EB8 31D7CC 002C+00 1/0 0/0 0/0 .text
+ * setMatColor__20J3DColorBlockLightOnFUl10J3DGXColor */
+void J3DColorBlockLightOn::setMatColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 80322EB8-80322EE4 31D7F8 002C+00 1/0 0/0 0/0 .text
+ * setMatColor__20J3DColorBlockLightOnFUlPC10J3DGXColor */
+void J3DColorBlockLightOn::setMatColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322EE4-80322EF8 31D824 0014+00 1/0 0/0 0/0 .text getMatColor__20J3DColorBlockLightOnFUl */
+J3DGXColor* J3DColorBlockLightOn::getMatColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322EF8-80322F24 31D838 002C+00 1/0 0/0 0/0 .text
+ * setAmbColor__20J3DColorBlockLightOnFUl10J3DGXColor */
+void J3DColorBlockLightOn::setAmbColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 80322F24-80322F50 31D864 002C+00 1/0 0/0 0/0 .text
+ * setAmbColor__20J3DColorBlockLightOnFUlPC10J3DGXColor */
+void J3DColorBlockLightOn::setAmbColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322F50-80322F64 31D890 0014+00 1/0 0/0 0/0 .text getAmbColor__20J3DColorBlockLightOnFUl */
+J3DGXColor* J3DColorBlockLightOn::getAmbColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322F64-80322F70 31D8A4 000C+00 1/0 0/0 0/0 .text setColorChanNum__20J3DColorBlockLightOnFPCUc
+ */
+void J3DColorBlockLightOn::setColorChanNum(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 80322F70-80322F78 -00001 0008+00 0/0 0/0 0/0 .text setColorChanNum__20J3DColorBlockLightOnFUc
+ */
+void J3DColorBlockLightOn::setColorChanNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 20) /* this->field_0x14 */ = (u8)(param_0);
+}
+
+/* 80322F78-80322F80 31D8B8 0008+00 1/0 0/0 0/0 .text getColorChanNum__20J3DColorBlockLightOnCFv
+ */
+u8 J3DColorBlockLightOn::getColorChanNum() const {
+ // NONMATCHING
+}
+
+/* 80322F80-80322F94 31D8C0 0014+00 1/0 0/0 0/0 .text
+ * setColorChan__20J3DColorBlockLightOnFUlPC12J3DColorChan */
+void J3DColorBlockLightOn::setColorChan(u32 param_0, J3DColorChan const* param_1) {
+ // NONMATCHING
+}
+
+/* 80322F94-80322FA8 31D8D4 0014+00 1/0 0/0 0/0 .text
+ * setColorChan__20J3DColorBlockLightOnFUlRC12J3DColorChan */
+void J3DColorBlockLightOn::setColorChan(u32 param_0, J3DColorChan const& param_1) {
+ // NONMATCHING
+}
+
+/* 80322FA8-80322FBC 31D8E8 0014+00 1/0 0/0 0/0 .text getColorChan__20J3DColorBlockLightOnFUl */
+J3DColorChan* J3DColorBlockLightOn::getColorChan(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322FBC-80322FCC 31D8FC 0010+00 1/0 0/0 0/0 .text
+ * setLight__20J3DColorBlockLightOnFUlP11J3DLightObj */
+void J3DColorBlockLightOn::setLight(u32 param_0, J3DLightObj* param_1) {
+ // NONMATCHING
+}
+
+/* 80322FCC-80322FDC 31D90C 0010+00 1/0 0/0 0/0 .text getLight__20J3DColorBlockLightOnFUl
+ */
+bool J3DColorBlockLightOn::getLight(u32 param_0) {
+ // NONMATCHING
+}
+
+/* 80322FDC-80322FE4 -00001 0008+00 0/0 0/0 0/0 .text setCullMode__20J3DColorBlockLightOnFUc */
+void J3DColorBlockLightOn::setCullMode(u8 param_0) {
+ *(u8*)(((u8*)this) + 64) /* this->field_0x40 */ = (u8)(param_0);
+}
+
+/* 80322FE4-80322FF0 31D924 000C+00 1/0 0/0 0/0 .text setCullMode__20J3DColorBlockLightOnFPCUc */
+void J3DColorBlockLightOn::setCullMode(u8 const* param_0) {
+ // NONMATCHING
+}
+
+/* 80322FF0-80322FF8 31D930 0008+00 1/0 0/0 0/0 .text getCullMode__20J3DColorBlockLightOnCFv */
+s32 J3DColorBlockLightOn::getCullMode() const {
+ // NONMATCHING
+}
+
+/* 80322FF8-80323000 31D938 0008+00 1/0 0/0 0/0 .text getMatColorOffset__20J3DColorBlockLightOnCFv
+ */
+u32 J3DColorBlockLightOn::getMatColorOffset() const {
+ // NONMATCHING
+}
+
+/* 80323000-80323008 31D940 0008+00 1/0 0/0 0/0 .text
+ * getColorChanOffset__20J3DColorBlockLightOnCFv */
+u32 J3DColorBlockLightOn::getColorChanOffset() const {
+ // NONMATCHING
+}
+
+/* 80323008-80323010 -00001 0008+00 0/0 0/0 0/0 .text setMatColorOffset__20J3DColorBlockLightOnFUl
+ */
+void J3DColorBlockLightOn::setMatColorOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 68) /* this->field_0x44 */ = (u32)(param_0);
+}
+
+/* 80323010-80323018 -00001 0008+00 0/0 0/0 0/0 .text
+ * setColorChanOffset__20J3DColorBlockLightOnFUl */
+void J3DColorBlockLightOn::setColorChanOffset(u32 param_0) {
+ *(u32*)(((u8*)this) + 72) /* this->field_0x48 */ = (u32)(param_0);
+}
+
+/* 80323018-80323074 31D958 005C+00 1/0 0/0 0/0 .text __dt__20J3DColorBlockLightOnFv */
+J3DColorBlockLightOn::~J3DColorBlockLightOn() {
+ // NONMATCHING
+}
+
+/* 80323074-80323080 31D9B4 000C+00 1/0 0/0 0/0 .text getType__22J3DColorBlockAmbientOnFv
+ */
+u32 J3DColorBlockAmbientOn::getType() {
+ return 'CLAB';
+}
+
+/* 80323080-803230AC 31D9C0 002C+00 1/0 0/0 0/0 .text
+ * setAmbColor__22J3DColorBlockAmbientOnFUl10J3DGXColor */
+void J3DColorBlockAmbientOn::setAmbColor(u32 param_0, J3DGXColor param_1) {
+ // NONMATCHING
+}
+
+/* 803230AC-803230D8 31D9EC 002C+00 1/0 0/0 0/0 .text
+ * setAmbColor__22J3DColorBlockAmbientOnFUlPC10J3DGXColor */
+void J3DColorBlockAmbientOn::setAmbColor(u32 param_0, J3DGXColor const* param_1) {
+ // NONMATCHING
+}
+
+/* 803230D8-803230EC 31DA18 0014+00 1/0 0/0 0/0 .text getAmbColor__22J3DColorBlockAmbientOnFUl */
+J3DGXColor* J3DColorBlockAmbientOn::getAmbColor(u32 param_0) {
+ // NONMATCHING
+}
+
+/* ############################################################################################## */
+/* 803CEA34-803CEAC8 02BB54 0090+04 1/1 2/2 0/0 .data __vt__21J3DColorBlockLightOff */
+SECTION_DATA extern void* __vt__21J3DColorBlockLightOff[36 + 1 /* padding */] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)load__21J3DColorBlockLightOffFv,
+ (void*)reset__21J3DColorBlockLightOffFP13J3DColorBlock,
+ (void*)patch__21J3DColorBlockLightOffFv,
+ (void*)patchMatColor__21J3DColorBlockLightOffFv,
+ (void*)patchLight__21J3DColorBlockLightOffFv,
+ (void*)diff__21J3DColorBlockLightOffFUl,
+ (void*)diffAmbColor__13J3DColorBlockFv,
+ (void*)diffMatColor__21J3DColorBlockLightOffFv,
+ (void*)diffColorChan__21J3DColorBlockLightOffFv,
+ (void*)diffLightObj__13J3DColorBlockFUl,
+ (void*)countDLSize__21J3DColorBlockLightOffFv,
+ (void*)getType__21J3DColorBlockLightOffFv,
+ (void*)setMatColor__21J3DColorBlockLightOffFUlPC10J3DGXColor,
+ (void*)setMatColor__21J3DColorBlockLightOffFUl10J3DGXColor,
+ (void*)getMatColor__21J3DColorBlockLightOffFUl,
+ (void*)setAmbColor__13J3DColorBlockFUlPC10J3DGXColor,
+ (void*)setAmbColor__13J3DColorBlockFUl10J3DGXColor,
+ (void*)getAmbColor__13J3DColorBlockFUl,
+ (void*)setColorChanNum__21J3DColorBlockLightOffFUc,
+ (void*)setColorChanNum__21J3DColorBlockLightOffFPCUc,
+ (void*)getColorChanNum__21J3DColorBlockLightOffCFv,
+ (void*)setColorChan__21J3DColorBlockLightOffFUlRC12J3DColorChan,
+ (void*)setColorChan__21J3DColorBlockLightOffFUlPC12J3DColorChan,
+ (void*)getColorChan__21J3DColorBlockLightOffFUl,
+ (void*)setLight__13J3DColorBlockFUlP11J3DLightObj,
+ (void*)getLight__13J3DColorBlockFUl,
+ (void*)setCullMode__21J3DColorBlockLightOffFPCUc,
+ (void*)setCullMode__21J3DColorBlockLightOffFUc,
+ (void*)getCullMode__21J3DColorBlockLightOffCFv,
+ (void*)getMatColorOffset__21J3DColorBlockLightOffCFv,
+ (void*)getColorChanOffset__21J3DColorBlockLightOffCFv,
+ (void*)setMatColorOffset__21J3DColorBlockLightOffFUl,
+ (void*)setColorChanOffset__21J3DColorBlockLightOffFUl,
+ (void*)__dt__21J3DColorBlockLightOffFv,
+ /* padding */
+ NULL,
+};
+
+/* 803230EC-80323158 31DA2C 006C+00 1/0 0/0 0/0 .text __dt__22J3DColorBlockAmbientOnFv */
+J3DColorBlockAmbientOn::~J3DColorBlockAmbientOn() {}
+
+/* 80323158-80323184 31DA98 002C+00 2/0 0/0 0/0 .text
+ * setMatColor__21J3DColorBlockLightOffFUl10J3DGXColor */
+void J3DColorBlockLightOff::setMatColor(u32 param_0, J3DGXColor param_1) {
+ mMatColor[param_0] = param_1;
+}
+
+/* 80323184-803231B0 31DAC4 002C+00 2/0 0/0 0/0 .text
+ * setMatColor__21J3DColorBlockLightOffFUlPC10J3DGXColor */
+void J3DColorBlockLightOff::setMatColor(u32 param_0, J3DGXColor const* param_1) {
+ mMatColor[param_0] = *param_1;
+}
+
+/* 803231B0-803231C4 31DAF0 0014+00 2/0 0/0 0/0 .text getMatColor__21J3DColorBlockLightOffFUl */
+J3DGXColor* J3DColorBlockLightOff::getMatColor(u32 param_0) {
+ return &mMatColor[param_0];
+}
+
+/* 803231C4-803231D0 31DB04 000C+00 2/0 0/0 0/0 .text
+ * setColorChanNum__21J3DColorBlockLightOffFPCUc */
+void J3DColorBlockLightOff::setColorChanNum(u8 const* param_0) {
+ mColorChanNum = *param_0;
+}
+
+/* 803231D0-803231D8 -00001 0008+00 0/0 0/0 0/0 .text setColorChanNum__21J3DColorBlockLightOffFUc
+ */
+void J3DColorBlockLightOff::setColorChanNum(u8 param_0) {
+ mColorChanNum = param_0;
+}
+
+/* 803231D8-803231E0 31DB18 0008+00 2/0 0/0 0/0 .text getColorChanNum__21J3DColorBlockLightOffCFv
+ */
+u8 J3DColorBlockLightOff::getColorChanNum() const {
+ return mColorChanNum;
+}
+
+/* 803231E0-803231F4 31DB20 0014+00 2/0 0/0 0/0 .text
+ * setColorChan__21J3DColorBlockLightOffFUlPC12J3DColorChan */
+void J3DColorBlockLightOff::setColorChan(u32 param_0, J3DColorChan const* param_1) {
+ mColorChan[param_0] = *param_1;
+}
+
+/* 803231F4-80323208 31DB34 0014+00 2/0 0/0 0/0 .text
+ * setColorChan__21J3DColorBlockLightOffFUlRC12J3DColorChan */
+void J3DColorBlockLightOff::setColorChan(u32 param_0, J3DColorChan const& param_1) {
+ mColorChan[param_0] = param_1;
+}
+
+/* 80323208-8032321C 31DB48 0014+00 2/0 0/0 0/0 .text getColorChan__21J3DColorBlockLightOffFUl */
+J3DColorChan* J3DColorBlockLightOff::getColorChan(u32 param_0) {
+ return &mColorChan[param_0];
+}
+
+/* 8032321C-80323224 -00001 0008+00 0/0 0/0 0/0 .text setCullMode__21J3DColorBlockLightOffFUc */
+void J3DColorBlockLightOff::setCullMode(u8 param_0) {
+ mCullMode = param_0;
+}
+
+/* 80323224-80323230 31DB64 000C+00 2/0 0/0 0/0 .text setCullMode__21J3DColorBlockLightOffFPCUc */
+void J3DColorBlockLightOff::setCullMode(u8 const* param_0) {
+ mCullMode = *param_0;
+}
+
+/* 80323230-80323238 31DB70 0008+00 2/0 0/0 0/0 .text getCullMode__21J3DColorBlockLightOffCFv */
+s32 J3DColorBlockLightOff::getCullMode() const {
+ return mCullMode;
+}
+
+/* 80323238-80323240 31DB78 0008+00 2/0 0/0 0/0 .text
+ * getMatColorOffset__21J3DColorBlockLightOffCFv */
+u32 J3DColorBlockLightOff::getMatColorOffset() const {
+ return mMatColorOffset;
+}
+
+/* 80323240-80323248 31DB80 0008+00 2/0 0/0 0/0 .text
+ * getColorChanOffset__21J3DColorBlockLightOffCFv */
+u32 J3DColorBlockLightOff::getColorChanOffset() const {
+ return mColorChanOffset;
+}
+
+/* 80323248-80323250 -00001 0008+00 0/0 0/0 0/0 .text
+ * setMatColorOffset__21J3DColorBlockLightOffFUl */
+void J3DColorBlockLightOff::setMatColorOffset(u32 param_0) {
+ mMatColorOffset = param_0;
+}
+
+/* 80323250-80323258 -00001 0008+00 0/0 0/0 0/0 .text
+ * setColorChanOffset__21J3DColorBlockLightOffFUl */
+void J3DColorBlockLightOff::setColorChanOffset(u32 param_0) {
+ mColorChanOffset = param_0;
+}
+
+/* 80323258-80323264 31DB98 000C+00 1/0 0/0 0/0 .text getType__13J3DPEBlockXluFv */
+u32 J3DPEBlockXlu::getType() {
+ return 'PEXL';
+}
+
+/* 80323264-803232C0 31DBA4 005C+00 1/0 0/0 0/0 .text __dt__13J3DPEBlockXluFv */
+J3DPEBlockXlu::~J3DPEBlockXlu() {}
+
+/* 803232C0-803232CC 31DC00 000C+00 1/0 0/0 0/0 .text getType__17J3DPEBlockTexEdgeFv */
+u32 J3DPEBlockTexEdge::getType() {
+ return 'PEED';
+}
+
+/* 803232CC-80323328 31DC0C 005C+00 1/0 0/0 0/0 .text __dt__17J3DPEBlockTexEdgeFv */
+J3DPEBlockTexEdge::~J3DPEBlockTexEdge() {}
+
+/* 80323328-80323334 31DC68 000C+00 1/0 0/0 0/0 .text getType__13J3DPEBlockOpaFv */
+u32 J3DPEBlockOpa::getType() {
+ return 'PEOP';
+}
+
+/* 80323334-80323390 31DC74 005C+00 1/0 0/0 0/0 .text __dt__13J3DPEBlockOpaFv */
+J3DPEBlockOpa::~J3DPEBlockOpa() {}
+
+/* 80323390-8032339C 31DCD0 000C+00 1/0 0/0 0/0 .text getType__15J3DIndBlockFullFv */
+u32 J3DIndBlockFull::getType() {
+ return 'IBLF';
+}
+
+/* 8032339C-803233A4 -00001 0008+00 0/0 0/0 0/0 .text setIndTexStageNum__15J3DIndBlockFullFUc */
+void J3DIndBlockFull::setIndTexStageNum(u8 param_0) {
+ *(u8*)(((u8*)this) + 4) /* this->field_0x4 */ = (u8)(param_0);
+}
+
+/* 803233A4-803233AC 31DCE4 0008+00 1/0 0/0 0/0 .text getIndTexStageNum__15J3DIndBlockFullCFv */
+u8 J3DIndBlockFull::getIndTexStageNum() const {
+ return mIndTexStageNum;
+}
+
+/* 803233AC-803233C0 31DCEC 0014+00 1/0 0/0 0/0 .text
+ * setIndTexOrder__15J3DIndBlockFullFUl14J3DIndTexOrder */
+void J3DIndBlockFull::setIndTexOrder(u32 param_0, J3DIndTexOrder param_1) {
+ mIndTexOrder[param_0] = param_1;
+}
+
+/* 803233C0-803233D4 31DD00 0014+00 1/0 0/0 0/0 .text
+ * setIndTexOrder__15J3DIndBlockFullFUlPC14J3DIndTexOrder */
+void J3DIndBlockFull::setIndTexOrder(u32 param_0, J3DIndTexOrder const* param_1) {
+ mIndTexOrder[param_0] = *param_1;
+}
+
+/* 803233D4-803233E8 31DD14 0014+00 1/0 0/0 0/0 .text getIndTexOrder__15J3DIndBlockFullFUl */
+J3DIndTexOrder* J3DIndBlockFull::getIndTexOrder(u32 param_0) {
+ return &mIndTexOrder[param_0];
+}
+
+/* 803233E8-8032341C 31DD28 0034+00 1/0 0/0 0/0 .text
+ * setIndTexMtx__15J3DIndBlockFullFUl12J3DIndTexMtx */
+void J3DIndBlockFull::setIndTexMtx(u32 param_0, J3DIndTexMtx param_1) {
+ mIndTexMtx[param_0] = param_1;
+}
+
+/* 8032341C-80323450 31DD5C 0034+00 1/0 0/0 0/0 .text
+ * setIndTexMtx__15J3DIndBlockFullFUlPC12J3DIndTexMtx */
+void J3DIndBlockFull::setIndTexMtx(u32 param_0, J3DIndTexMtx const* param_1) {
+ mIndTexMtx[param_0] = *param_1;
+}
+
+/* 80323450-80323464 31DD90 0014+00 1/0 0/0 0/0 .text getIndTexMtx__15J3DIndBlockFullFUl
+ */
+J3DIndTexMtx* J3DIndBlockFull::getIndTexMtx(u32 param_0) {
+ return &mIndTexMtx[param_0];
+}
+
+/* 80323464-80323478 31DDA4 0014+00 1/0 0/0 0/0 .text
+ * setIndTexCoordScale__15J3DIndBlockFullFUl19J3DIndTexCoordScale */
+void J3DIndBlockFull::setIndTexCoordScale(u32 param_0, J3DIndTexCoordScale param_1) {
+ mIndTexCoordScale[param_0] = param_1;
+}
+
+/* 80323478-8032348C 31DDB8 0014+00 1/0 0/0 0/0 .text
+ * setIndTexCoordScale__15J3DIndBlockFullFUlPC19J3DIndTexCoordScale */
+void J3DIndBlockFull::setIndTexCoordScale(u32 param_0, J3DIndTexCoordScale const* param_1) {
+ mIndTexCoordScale[param_0] = *param_1;
+}
+
+/* 8032348C-803234A0 31DDCC 0014+00 1/0 0/0 0/0 .text getIndTexCoordScale__15J3DIndBlockFullFUl */
+J3DIndTexCoordScale* J3DIndBlockFull::getIndTexCoordScale(u32 param_0) {
+ return &mIndTexCoordScale[param_0];
+}
+
+/* 803234A0-8032353C 31DDE0 009C+00 1/0 0/0 0/0 .text __dt__15J3DIndBlockFullFv */
+J3DIndBlockFull::~J3DIndBlockFull() {}
+
+/* 8032353C-80323540 31DE7C 0004+00 1/0 1/0 0/0 .text patchTexNo__11J3DTevBlockFv */
+void J3DTevBlock::patchTexNo() {
+}
+
+/* 80323540-80323544 31DE80 0004+00 1/0 1/0 0/0 .text patchTevReg__11J3DTevBlockFv */
+void J3DTevBlock::patchTevReg() {
+}
+
+/* 80323544-80323548 31DE84 0004+00 1/0 1/0 0/0 .text setTexNo__11J3DTevBlockFUlPCUs */
+void J3DTevBlock::setTexNo(u32 param_0, u16 const* param_1) {
+}
+
+/* 80323548-8032354C 31DE88 0004+00 1/0 1/0 0/0 .text setTevOrder__11J3DTevBlockFUlPC11J3DTevOrder
+ */
+void J3DTevBlock::setTevOrder(u32 param_0, J3DTevOrder const* param_1) {
+}
+
+/* 8032354C-80323550 31DE8C 0004+00 1/0 1/0 0/0 .text setTevStageNum__11J3DTevBlockFPCUc
+ */
+void J3DTevBlock::setTevStageNum(u8 const* param_0) {
+}
+
+/* 80323550-80323554 31DE90 0004+00 1/0 1/0 0/0 .text setTevStage__11J3DTevBlockFUlPC11J3DTevStage
+ */
+void J3DTevBlock::setTevStage(u32 param_0, J3DTevStage const* param_1) {
+}
+
+/* 80323554-80323558 31DE94 0004+00 1/0 1/0 0/0 .text
+ * setIndTevStage__11J3DTevBlockFUlPC14J3DIndTevStage */
+void J3DTevBlock::setIndTevStage(u32 param_0, J3DIndTevStage const* param_1) {
+}
+
+/* 80323558-80323560 31DE98 0008+00 1/0 1/0 0/0 .text getTexNoOffset__11J3DTevBlockCFv */
+u32 J3DTevBlock::getTexNoOffset() const {
+ return 0;
+}
+
+/* 80323560-8032356C 31DEA0 000C+00 1/0 0/0 0/0 .text getType__21J3DColorBlockLightOffFv
+ */
+u32 J3DColorBlockLightOff::getType() {
+ return 'CLOF';
+}
+
+/* 803A1EA8-803A1EA8 02E508 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DMaterial.cpp b/src/JSystem/J3DGraphBase/J3DMaterial.cpp
new file mode 100644
index 0000000000..fcdf40ea6b
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DMaterial.cpp
@@ -0,0 +1,1276 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DMaterial
+//
+
+#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
+#include "dol2asm.h"
+
+//
+// Forward References:
+//
+
+extern "C" void createColorBlock__11J3DMaterialFUl();
+extern "C" void createTexGenBlock__11J3DMaterialFUl();
+extern "C" void createTevBlock__11J3DMaterialFi();
+extern "C" void createIndBlock__11J3DMaterialFi();
+extern "C" void createPEBlock__11J3DMaterialFUlUl();
+extern "C" void calcSizeColorBlock__11J3DMaterialFUl();
+extern "C" void calcSizeTexGenBlock__11J3DMaterialFUl();
+extern "C" void calcSizeTevBlock__11J3DMaterialFi();
+extern "C" void calcSizeIndBlock__11J3DMaterialFi();
+extern "C" void calcSizePEBlock__11J3DMaterialFUlUl();
+extern "C" void initialize__11J3DMaterialFv();
+extern "C" void countDLSize__11J3DMaterialFv();
+extern "C" void makeDisplayList_private__11J3DMaterialFP17J3DDisplayListObj();
+extern "C" void makeDisplayList__11J3DMaterialFv();
+extern "C" void makeSharedDisplayList__11J3DMaterialFv();
+extern "C" void load__11J3DMaterialFv();
+extern "C" void loadSharedDL__11J3DMaterialFv();
+extern "C" void patch__11J3DMaterialFv();
+extern "C" void diff__11J3DMaterialFUl();
+extern "C" void calc__11J3DMaterialFPA4_Cf();
+extern "C" void calcDiffTexMtx__11J3DMaterialFPA4_Cf();
+extern "C" void setCurrentMtx__11J3DMaterialFv();
+extern "C" void calcCurrentMtx__11J3DMaterialFv();
+extern "C" void copy__11J3DMaterialFP11J3DMaterial();
+extern "C" void reset__11J3DMaterialFv();
+extern "C" void change__11J3DMaterialFv();
+extern "C" void newSharedDisplayList__11J3DMaterialFUl();
+extern "C" void newSingleSharedDisplayList__11J3DMaterialFUl();
+extern "C" void initialize__18J3DPatchedMaterialFv();
+extern "C" void makeDisplayList__18J3DPatchedMaterialFv();
+extern "C" void makeSharedDisplayList__18J3DPatchedMaterialFv();
+extern "C" void load__18J3DPatchedMaterialFv();
+extern "C" void loadSharedDL__18J3DPatchedMaterialFv();
+extern "C" void reset__18J3DPatchedMaterialFv();
+extern "C" void change__18J3DPatchedMaterialFv();
+extern "C" void initialize__17J3DLockedMaterialFv();
+extern "C" void makeDisplayList__17J3DLockedMaterialFv();
+extern "C" void makeSharedDisplayList__17J3DLockedMaterialFv();
+extern "C" void load__17J3DLockedMaterialFv();
+extern "C" void loadSharedDL__17J3DLockedMaterialFv();
+extern "C" void patch__17J3DLockedMaterialFv();
+extern "C" void diff__17J3DLockedMaterialFUl();
+extern "C" void calc__17J3DLockedMaterialFPA4_Cf();
+extern "C" void reset__17J3DLockedMaterialFv();
+extern "C" void change__17J3DLockedMaterialFv();
+extern "C" void __dt__21J3DColorBlockLightOffFv();
+extern "C" void __dt__13J3DColorBlockFv();
+extern "C" void __dt__21J3DTexGenBlockPatchedFv();
+extern "C" void __dt__14J3DTexGenBlockFv();
+extern "C" void __dt__11J3DTevBlockFv();
+extern "C" void __dt__11J3DIndBlockFv();
+extern "C" void __dt__10J3DPEBlockFv();
+extern "C" bool countDLSize__14J3DTexGenBlockFv();
+extern "C" bool countDLSize__13J3DColorBlockFv();
+extern "C" bool countDLSize__11J3DTevBlockFv();
+extern "C" bool countDLSize__11J3DIndBlockFv();
+extern "C" bool countDLSize__10J3DPEBlockFv();
+extern "C" void load__13J3DColorBlockFv();
+extern "C" s32 getCullMode__13J3DColorBlockCFv();
+extern "C" void load__11J3DTevBlockFv();
+extern "C" J3DNBTScale* getNBTScale__14J3DTexGenBlockFv();
+extern "C" void patch__13J3DColorBlockFv();
+extern "C" void diff__13J3DColorBlockFUl();
+extern "C" void diff__10J3DPEBlockFUl();
+extern "C" void reset__10J3DPEBlockFP10J3DPEBlock();
+extern "C" void reset__11J3DIndBlockFP11J3DIndBlock();
+extern "C" void reset__11J3DTevBlockFP11J3DTevBlock(J3DTevBlock* param_0);
+extern "C" void reset__14J3DTexGenBlockFP14J3DTexGenBlock();
+extern "C" void reset__13J3DColorBlockFP13J3DColorBlock();
+extern "C" void diffFog__10J3DPEBlockFv();
+extern "C" void diffBlend__10J3DPEBlockFv();
+extern "C" void setFog__10J3DPEBlockFP6J3DFog();
+extern "C" void setFog__10J3DPEBlockF6J3DFog();
+extern "C" void setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp();
+extern "C" void setBlend__10J3DPEBlockFPC8J3DBlend();
+extern "C" void setZMode__10J3DPEBlockFPC8J3DZMode();
+extern "C" void setZCompLoc__10J3DPEBlockFPCUc();
+extern "C" void setDither__10J3DPEBlockFUc();
+extern "C" void setDither__10J3DPEBlockFPCUc();
+extern "C" bool getDither__10J3DPEBlockCFv();
+extern "C" bool getFogOffset__10J3DPEBlockCFv();
+extern "C" void setFogOffset__10J3DPEBlockFUl();
+extern "C" void diff__15J3DIndBlockNullFUl();
+extern "C" void load__15J3DIndBlockNullFv();
+extern "C" void reset__15J3DIndBlockNullFP11J3DIndBlock();
+extern "C" void getType__15J3DIndBlockNullFv();
+extern "C" void __dt__15J3DIndBlockNullFv();
+extern "C" void setIndTexOrder__11J3DIndBlockFUlPC14J3DIndTexOrder();
+extern "C" void setIndTexOrder__11J3DIndBlockFUl14J3DIndTexOrder();
+extern "C" void setIndTexMtx__11J3DIndBlockFUlPC12J3DIndTexMtx();
+extern "C" void setIndTexCoordScale__11J3DIndBlockFUlPC19J3DIndTexCoordScale();
+extern "C" void setTexGenNum__14J3DTexGenBlockFPCUl();
+extern "C" void setNBTScale__14J3DTexGenBlockF11J3DNBTScale();
+extern "C" void setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale();
+extern "C" bool getTexMtxOffset__14J3DTexGenBlockCFv();
+extern "C" void setTexMtxOffset__14J3DTexGenBlockFUl();
+extern "C" void patchMatColor__13J3DColorBlockFv();
+extern "C" void diffAmbColor__13J3DColorBlockFv();
+extern "C" void diffMatColor__13J3DColorBlockFv();
+extern "C" void diffColorChan__13J3DColorBlockFv();
+extern "C" void diffLightObj__13J3DColorBlockFUl();
+extern "C" void setMatColor__13J3DColorBlockFUlPC10J3DGXColor();
+extern "C" void setColorChanNum__13J3DColorBlockFPCUc();
+extern "C" void setColorChan__13J3DColorBlockFUlPC12J3DColorChan();
+extern "C" bool getLight__13J3DColorBlockFUl();
+extern "C" void setCullMode__13J3DColorBlockFUc();
+extern "C" void setCullMode__13J3DColorBlockFPCUc();
+extern "C" u32 getMatColorOffset__13J3DColorBlockCFv();
+extern "C" bool getColorChanOffset__13J3DColorBlockCFv();
+extern "C" void setMatColorOffset__13J3DColorBlockFUl();
+extern "C" void setColorChanOffset__13J3DColorBlockFUl();
+
+//
+// External References:
+//
+
+extern "C" void patch__10J3DPEBlockFv();
+extern "C" void patchLight__13J3DColorBlockFv();
+extern "C" bool getZCompLoc__10J3DPEBlockCFv();
+extern "C" bool getZMode__10J3DPEBlockFv();
+extern "C" bool getBlend__10J3DPEBlockFv();
+extern "C" bool getAlphaComp__10J3DPEBlockFv();
+extern "C" bool getFog__10J3DPEBlockFv();
+extern "C" bool getIndTexCoordScale__11J3DIndBlockFUl();
+extern "C" bool getIndTexMtx__11J3DIndBlockFUl();
+extern "C" bool getIndTexOrder__11J3DIndBlockFUl();
+extern "C" bool getIndTexStageNum__11J3DIndBlockCFv();
+extern "C" bool getTexMtx__14J3DTexGenBlockFUl();
+extern "C" bool getTexCoord__14J3DTexGenBlockFUl();
+extern "C" bool getTexGenNum__14J3DTexGenBlockCFv();
+extern "C" bool getAmbColor__13J3DColorBlockFUl();
+extern "C" bool getColorChan__13J3DColorBlockFUl();
+extern "C" bool getMatColor__13J3DColorBlockFUl();
+extern "C" bool getColorChanNum__13J3DColorBlockCFv();
+extern "C" void setZCompLoc__10J3DPEBlockFUc();
+extern "C" void setZMode__10J3DPEBlockF8J3DZMode();
+extern "C" void setBlend__10J3DPEBlockFRC8J3DBlend();
+extern "C" void setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp();
+extern "C" void setIndTexCoordScale__11J3DIndBlockFUl19J3DIndTexCoordScale();
+extern "C" void __dt__19J3DIndTexCoordScaleFv();
+extern "C" void setIndTexMtx__11J3DIndBlockFUl12J3DIndTexMtx();
+extern "C" void __dt__12J3DIndTexMtxFv();
+extern "C" void setIndTexStageNum__11J3DIndBlockFUc();
+extern "C" void setTexCoord__14J3DTexGenBlockFUlPC11J3DTexCoord();
+extern "C" void setTexGenNum__14J3DTexGenBlockFUl();
+extern "C" void setAmbColor__13J3DColorBlockFUl10J3DGXColor();
+extern "C" void setColorChan__13J3DColorBlockFUlRC12J3DColorChan();
+extern "C" void setMatColor__13J3DColorBlockFUl10J3DGXColor();
+extern "C" void setColorChanNum__13J3DColorBlockFUc();
+extern "C" void __ct__19J3DIndTexCoordScaleFv();
+extern "C" void __ct__12J3DIndTexMtxFv();
+extern "C" void __ct__14J3DIndTexOrderFv();
+extern "C" void __ct__19J3DTevSwapModeTableFv();
+extern "C" void __ct__11J3DTevOrderFv();
+extern "C" void __ct__14J3DIndTevStageFv();
+extern "C" void __ct__11J3DTevStageFv();
+extern "C" void __ct__13J3DGXColorS10Fv();
+extern "C" void __ct__11J3DTexCoordFv();
+extern "C" void __ct__12J3DColorChanFv();
+extern "C" void __ct__10J3DGXColorFv();
+extern "C" void setTexMtx__14J3DTexGenBlockFUlP9J3DTexMtx();
+extern "C" void setLight__13J3DColorBlockFUlP11J3DLightObj();
+extern "C" void setAmbColor__13J3DColorBlockFUlPC10J3DGXColor();
+extern "C" void* __nw__FUl();
+extern "C" void __dl__FPv();
+extern "C" void J3DGDSetGenMode__FUcUcUcUc11_GXCullMode();
+extern "C" void J3DGDSetGenMode_3Param__FUcUcUc();
+extern "C" void newDisplayList__17J3DDisplayListObjFUl();
+extern "C" void newSingleDisplayList__17J3DDisplayListObjFUl();
+extern "C" void callDL__17J3DDisplayListObjCFv();
+extern "C" void beginDL__17J3DDisplayListObjFv();
+extern "C" void endDL__17J3DDisplayListObjFv();
+extern "C" void beginPatch__17J3DDisplayListObjFv();
+extern "C" void endPatch__17J3DDisplayListObjFv();
+extern "C" void beginDiff__12J3DMatPacketFv();
+extern "C" void endDiff__12J3DMatPacketFv();
+extern "C" void initialize__21J3DColorBlockLightOffFv();
+extern "C" void initialize__22J3DColorBlockAmbientOnFv();
+extern "C" void initialize__20J3DColorBlockLightOnFv();
+extern "C" void initialize__21J3DTexGenBlockPatchedFv();
+extern "C" void initialize__15J3DTexGenBlock4Fv();
+extern "C" void initialize__19J3DTexGenBlockBasicFv();
+extern "C" void initialize__12J3DTevBlock1Fv();
+extern "C" void initialize__12J3DTevBlock2Fv();
+extern "C" void initialize__12J3DTevBlock4Fv();
+extern "C" void initialize__13J3DTevBlock16Fv();
+extern "C" void initialize__15J3DIndBlockFullFv();
+extern "C" void initialize__16J3DPEBlockFogOffFv();
+extern "C" void initialize__14J3DPEBlockFullFv();
+extern "C" void loadNBTScale__FR11J3DNBTScale();
+extern "C" void __as__10J3DFogInfoFRC10J3DFogInfo();
+extern "C" void __construct_array();
+extern "C" void _savegpr_24();
+extern "C" void _savegpr_26();
+extern "C" void _savegpr_27();
+extern "C" void _savegpr_29();
+extern "C" void _restgpr_24();
+extern "C" void _restgpr_26();
+extern "C" void _restgpr_27();
+extern "C" void _restgpr_29();
+extern "C" extern void* __vt__14J3DPEBlockFull[31];
+extern "C" extern void* __vt__16J3DPEBlockFogOff[31];
+extern "C" extern void* __vt__13J3DTevBlock16[55];
+extern "C" extern void* __vt__12J3DTevBlock4[55];
+extern "C" extern void* __vt__12J3DTevBlock2[55];
+extern "C" extern void* __vt__12J3DTevBlock1[55];
+extern "C" extern void* __vt__19J3DTexGenBlockBasic[27];
+extern "C" extern void* __vt__15J3DTexGenBlock4[27];
+extern "C" extern void* __vt__21J3DTexGenBlockPatched[27];
+extern "C" extern void* __vt__20J3DColorBlockLightOn[36];
+extern "C" extern void* __vt__22J3DColorBlockAmbientOn[36];
+extern "C" extern void* __vt__13J3DPEBlockXlu[31];
+extern "C" extern void* __vt__17J3DPEBlockTexEdge[31];
+extern "C" extern void* __vt__13J3DPEBlockOpa[31];
+extern "C" extern void* __vt__15J3DIndBlockFull[19];
+extern "C" extern void* __vt__11J3DTevBlock[55];
+extern "C" extern void* __vt__21J3DColorBlockLightOff[36 + 1 /* padding */];
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+/* 803CDC90-803CDCC0 02ADB0 0030+00 0/0 1/1 0/0 .data __vt__17J3DLockedMaterial */
+SECTION_DATA extern void* __vt__17J3DLockedMaterial[12] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)calc__17J3DLockedMaterialFPA4_Cf,
+ (void*)calcDiffTexMtx__11J3DMaterialFPA4_Cf,
+ (void*)makeDisplayList__17J3DLockedMaterialFv,
+ (void*)makeSharedDisplayList__17J3DLockedMaterialFv,
+ (void*)load__17J3DLockedMaterialFv,
+ (void*)loadSharedDL__17J3DLockedMaterialFv,
+ (void*)patch__17J3DLockedMaterialFv,
+ (void*)diff__17J3DLockedMaterialFUl,
+ (void*)reset__17J3DLockedMaterialFv,
+ (void*)change__17J3DLockedMaterialFv,
+};
+
+/* 803CDCC0-803CDCF0 02ADE0 0030+00 0/0 1/1 0/0 .data __vt__18J3DPatchedMaterial */
+SECTION_DATA extern void* __vt__18J3DPatchedMaterial[12] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)calc__11J3DMaterialFPA4_Cf,
+ (void*)calcDiffTexMtx__11J3DMaterialFPA4_Cf,
+ (void*)makeDisplayList__18J3DPatchedMaterialFv,
+ (void*)makeSharedDisplayList__18J3DPatchedMaterialFv,
+ (void*)load__18J3DPatchedMaterialFv,
+ (void*)loadSharedDL__18J3DPatchedMaterialFv,
+ (void*)patch__11J3DMaterialFv,
+ (void*)diff__11J3DMaterialFUl,
+ (void*)reset__18J3DPatchedMaterialFv,
+ (void*)change__18J3DPatchedMaterialFv,
+};
+
+/* 803CDCF0-803CDD20 02AE10 0030+00 0/0 6/6 0/0 .data __vt__11J3DMaterial */
+SECTION_DATA extern void* __vt__11J3DMaterial[12] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)calc__11J3DMaterialFPA4_Cf,
+ (void*)calcDiffTexMtx__11J3DMaterialFPA4_Cf,
+ (void*)makeDisplayList__11J3DMaterialFv,
+ (void*)makeSharedDisplayList__11J3DMaterialFv,
+ (void*)load__11J3DMaterialFv,
+ (void*)loadSharedDL__11J3DMaterialFv,
+ (void*)patch__11J3DMaterialFv,
+ (void*)diff__11J3DMaterialFUl,
+ (void*)reset__11J3DMaterialFv,
+ (void*)change__11J3DMaterialFv,
+};
+
+/* 803CDD20-803CDD9C 02AE40 007C+00 2/2 7/7 0/0 .data __vt__10J3DPEBlock */
+SECTION_DATA extern void* __vt__10J3DPEBlock[31] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__10J3DPEBlockFP10J3DPEBlock,
+ (void*)NULL,
+ (void*)patch__10J3DPEBlockFv,
+ (void*)diff__10J3DPEBlockFUl,
+ (void*)diffFog__10J3DPEBlockFv,
+ (void*)diffBlend__10J3DPEBlockFv,
+ (void*)countDLSize__10J3DPEBlockFv,
+ (void*)NULL,
+ (void*)setFog__10J3DPEBlockF6J3DFog,
+ (void*)setFog__10J3DPEBlockFP6J3DFog,
+ (void*)getFog__10J3DPEBlockFv,
+ (void*)setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp,
+ (void*)setAlphaComp__10J3DPEBlockFRC12J3DAlphaComp,
+ (void*)getAlphaComp__10J3DPEBlockFv,
+ (void*)setBlend__10J3DPEBlockFPC8J3DBlend,
+ (void*)setBlend__10J3DPEBlockFRC8J3DBlend,
+ (void*)getBlend__10J3DPEBlockFv,
+ (void*)setZMode__10J3DPEBlockFPC8J3DZMode,
+ (void*)setZMode__10J3DPEBlockF8J3DZMode,
+ (void*)getZMode__10J3DPEBlockFv,
+ (void*)setZCompLoc__10J3DPEBlockFPCUc,
+ (void*)setZCompLoc__10J3DPEBlockFUc,
+ (void*)getZCompLoc__10J3DPEBlockCFv,
+ (void*)setDither__10J3DPEBlockFPCUc,
+ (void*)setDither__10J3DPEBlockFUc,
+ (void*)getDither__10J3DPEBlockCFv,
+ (void*)getFogOffset__10J3DPEBlockCFv,
+ (void*)setFogOffset__10J3DPEBlockFUl,
+ (void*)__dt__10J3DPEBlockFv,
+};
+
+/* 803CDD9C-803CDDE8 02AEBC 004C+00 2/2 1/1 0/0 .data __vt__15J3DIndBlockNull */
+SECTION_DATA extern void* __vt__15J3DIndBlockNull[19] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__15J3DIndBlockNullFP11J3DIndBlock,
+ (void*)diff__15J3DIndBlockNullFUl,
+ (void*)load__15J3DIndBlockNullFv,
+ (void*)countDLSize__11J3DIndBlockFv,
+ (void*)getType__15J3DIndBlockNullFv,
+ (void*)setIndTexStageNum__11J3DIndBlockFUc,
+ (void*)getIndTexStageNum__11J3DIndBlockCFv,
+ (void*)setIndTexOrder__11J3DIndBlockFUl14J3DIndTexOrder,
+ (void*)setIndTexOrder__11J3DIndBlockFUlPC14J3DIndTexOrder,
+ (void*)getIndTexOrder__11J3DIndBlockFUl,
+ (void*)setIndTexMtx__11J3DIndBlockFUlPC12J3DIndTexMtx,
+ (void*)setIndTexMtx__11J3DIndBlockFUl12J3DIndTexMtx,
+ (void*)getIndTexMtx__11J3DIndBlockFUl,
+ (void*)setIndTexCoordScale__11J3DIndBlockFUlPC19J3DIndTexCoordScale,
+ (void*)setIndTexCoordScale__11J3DIndBlockFUl19J3DIndTexCoordScale,
+ (void*)getIndTexCoordScale__11J3DIndBlockFUl,
+ (void*)__dt__15J3DIndBlockNullFv,
+};
+
+/* 803CDDE8-803CDE34 02AF08 004C+00 3/3 2/2 0/0 .data __vt__11J3DIndBlock */
+SECTION_DATA extern void* __vt__11J3DIndBlock[19] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__11J3DIndBlockFP11J3DIndBlock,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)countDLSize__11J3DIndBlockFv,
+ (void*)NULL,
+ (void*)setIndTexStageNum__11J3DIndBlockFUc,
+ (void*)getIndTexStageNum__11J3DIndBlockCFv,
+ (void*)setIndTexOrder__11J3DIndBlockFUl14J3DIndTexOrder,
+ (void*)setIndTexOrder__11J3DIndBlockFUlPC14J3DIndTexOrder,
+ (void*)getIndTexOrder__11J3DIndBlockFUl,
+ (void*)setIndTexMtx__11J3DIndBlockFUlPC12J3DIndTexMtx,
+ (void*)setIndTexMtx__11J3DIndBlockFUl12J3DIndTexMtx,
+ (void*)getIndTexMtx__11J3DIndBlockFUl,
+ (void*)setIndTexCoordScale__11J3DIndBlockFUlPC19J3DIndTexCoordScale,
+ (void*)setIndTexCoordScale__11J3DIndBlockFUl19J3DIndTexCoordScale,
+ (void*)getIndTexCoordScale__11J3DIndBlockFUl,
+ (void*)__dt__11J3DIndBlockFv,
+};
+
+/* 803CDE34-803CDEA0 02AF54 006C+00 3/3 5/5 0/0 .data __vt__14J3DTexGenBlock */
+SECTION_DATA extern void* __vt__14J3DTexGenBlock[27] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)reset__14J3DTexGenBlockFP14J3DTexGenBlock,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)NULL,
+ (void*)countDLSize__14J3DTexGenBlockFv,
+ (void*)NULL,
+ (void*)setTexGenNum__14J3DTexGenBlockFPCUl,
+ (void*)setTexGenNum__14J3DTexGenBlockFUl,
+ (void*)getTexGenNum__14J3DTexGenBlockCFv,
+ (void*)setTexCoord__14J3DTexGenBlockFUlPC11J3DTexCoord,
+ (void*)getTexCoord__14J3DTexGenBlockFUl,
+ (void*)setTexMtx__14J3DTexGenBlockFUlP9J3DTexMtx,
+ (void*)getTexMtx__14J3DTexGenBlockFUl,
+ (void*)setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale,
+ (void*)setNBTScale__14J3DTexGenBlockF11J3DNBTScale,
+ (void*)getNBTScale__14J3DTexGenBlockFv,
+ (void*)getTexMtxOffset__14J3DTexGenBlockCFv,
+ (void*)setTexMtxOffset__14J3DTexGenBlockFUl,
+ (void*)__dt__14J3DTexGenBlockFv,
+};
+
+/* 803CDEA0-803CDF30 02AFC0 0090+00 3/3 4/4 0/0 .data __vt__13J3DColorBlock */
+SECTION_DATA extern void* __vt__13J3DColorBlock[36] = {
+ (void*)NULL /* RTTI */,
+ (void*)NULL,
+ (void*)load__13J3DColorBlockFv,
+ (void*)reset__13J3DColorBlockFP13J3DColorBlock,
+ (void*)patch__13J3DColorBlockFv,
+ (void*)patchMatColor__13J3DColorBlockFv,
+ (void*)patchLight__13J3DColorBlockFv,
+ (void*)diff__13J3DColorBlockFUl,
+ (void*)diffAmbColor__13J3DColorBlockFv,
+ (void*)diffMatColor__13J3DColorBlockFv,
+ (void*)diffColorChan__13J3DColorBlockFv,
+ (void*)diffLightObj__13J3DColorBlockFUl,
+ (void*)countDLSize__13J3DColorBlockFv,
+ (void*)NULL,
+ (void*)setMatColor__13J3DColorBlockFUlPC10J3DGXColor,
+ (void*)setMatColor__13J3DColorBlockFUl10J3DGXColor,
+ (void*)getMatColor__13J3DColorBlockFUl,
+ (void*)setAmbColor__13J3DColorBlockFUlPC10J3DGXColor,
+ (void*)setAmbColor__13J3DColorBlockFUl10J3DGXColor,
+ (void*)getAmbColor__13J3DColorBlockFUl,
+ (void*)setColorChanNum__13J3DColorBlockFUc,
+ (void*)setColorChanNum__13J3DColorBlockFPCUc,
+ (void*)getColorChanNum__13J3DColorBlockCFv,
+ (void*)setColorChan__13J3DColorBlockFUlRC12J3DColorChan,
+ (void*)setColorChan__13J3DColorBlockFUlPC12J3DColorChan,
+ (void*)getColorChan__13J3DColorBlockFUl,
+ (void*)setLight__13J3DColorBlockFUlP11J3DLightObj,
+ (void*)getLight__13J3DColorBlockFUl,
+ (void*)setCullMode__13J3DColorBlockFPCUc,
+ (void*)setCullMode__13J3DColorBlockFUc,
+ (void*)getCullMode__13J3DColorBlockCFv,
+ (void*)getMatColorOffset__13J3DColorBlockCFv,
+ (void*)getColorChanOffset__13J3DColorBlockCFv,
+ (void*)setMatColorOffset__13J3DColorBlockFUl,
+ (void*)setColorChanOffset__13J3DColorBlockFUl,
+ (void*)__dt__13J3DColorBlockFv,
+};
+
+/* 803157A0-803159A0 3100E0 0200+00 0/0 3/3 0/0 .text createColorBlock__11J3DMaterialFUl
+ */
+J3DColorBlock* J3DMaterial::createColorBlock(u32 param_0) {
+ J3DColorBlock* rv = NULL;
+ switch (param_0) {
+ case 0:
+ rv = new J3DColorBlockLightOff();
+ break;
+ case 0x40000000:
+ rv = new J3DColorBlockLightOn();
+ break;
+ case 0x80000000:
+ rv = new J3DColorBlockAmbientOn();
+ break;
+ }
+
+ return rv;
+}
+
+/* 803159A0-80315B04 3102E0 0164+00 0/0 2/2 0/0 .text createTexGenBlock__11J3DMaterialFUl
+ */
+J3DTexGenBlock* J3DMaterial::createTexGenBlock(u32 param_0) {
+ switch (param_0) {
+ case 0x8000000:
+ return new J3DTexGenBlock4();
+ case 0:
+ default:
+ return new J3DTexGenBlockBasic();
+ }
+}
+
+/* 80315B04-80315E78 310444 0374+00 0/0 2/2 0/0 .text createTevBlock__11J3DMaterialFi */
+J3DTevBlock* J3DMaterial::createTevBlock(int param_0) {
+ J3DTevBlock* rv = NULL;
+ if (param_0 <= 1) {
+ rv = new J3DTevBlock1();
+ } else if (param_0 == 2) {
+ rv = new J3DTevBlock2();
+ } else if (param_0 <= 4) {
+ rv = new J3DTevBlock4();
+ } else if (param_0 <= 16) {
+ rv = new J3DTevBlock16();
+ }
+ return rv;
+}
+
+/* 80315E78-80315F60 3107B8 00E8+00 0/0 3/3 0/0 .text createIndBlock__11J3DMaterialFi */
+J3DIndBlock* J3DMaterial::createIndBlock(int param_0) {
+ if (param_0 != 0) {
+ return new J3DIndBlockFull();
+ }
+
+ return new J3DIndBlockNull();
+}
+
+/* 80315F60-80316100 3108A0 01A0+00 0/0 3/3 0/0 .text createPEBlock__11J3DMaterialFUlUl
+ */
+J3DPEBlock* J3DMaterial::createPEBlock(u32 createFlag, u32 materialMode) {
+ J3DPEBlock* rv = NULL;
+
+ if (createFlag == 0) {
+ if (materialMode & 1) {
+ rv = new J3DPEBlockOpa();
+ return rv;
+ } else if (materialMode & 2) {
+ rv = new J3DPEBlockTexEdge();
+ return rv;
+ } else if (materialMode & 4) {
+ rv = new J3DPEBlockXlu();
+ return rv;
+ }
+ }
+
+ if (createFlag == 0x10000000) {
+ rv = new J3DPEBlockFull();
+ } else if (createFlag == 0x20000000) {
+ rv = new J3DPEBlockFogOff();
+ }
+
+ return rv;
+}
+
+/* 80316100-80316150 310A40 0050+00 0/0 2/2 0/0 .text calcSizeColorBlock__11J3DMaterialFUl */
+u32 J3DMaterial::calcSizeColorBlock(u32 param_0) {
+ u32 rv = 0;
+ switch (param_0) {
+ case 0:
+ rv = sizeof(J3DColorBlockLightOff);
+ break;
+ case 0x40000000:
+ rv = sizeof(J3DColorBlockLightOn);
+ break;
+ case 0x80000000:
+ rv = sizeof(J3DColorBlockAmbientOn);
+ break;
+ }
+
+ return rv;
+}
+
+/* 80316150-8031617C 310A90 002C+00 0/0 1/1 0/0 .text calcSizeTexGenBlock__11J3DMaterialFUl */
+u32 J3DMaterial::calcSizeTexGenBlock(u32 param_0) {
+ switch (param_0) {
+ case 0x8000000:
+ return sizeof(J3DTexGenBlock4);
+ case 0:
+ default:
+ return sizeof(J3DTexGenBlockBasic);
+ }
+}
+
+/* 8031617C-803161C4 310ABC 0048+00 0/0 1/1 0/0 .text calcSizeTevBlock__11J3DMaterialFi
+ */
+u32 J3DMaterial::calcSizeTevBlock(int param_0) {
+ u32 rv = 0;
+ if (param_0 <= 1) {
+ rv = sizeof(J3DTevBlock1);
+ } else if (param_0 == 2) {
+ rv = sizeof(J3DTevBlock2);
+ } else if (param_0 <= 4) {
+ rv = sizeof(J3DTevBlock4);
+ } else if (param_0 <= 16) {
+ rv = sizeof(J3DTevBlock16);
+ }
+ return rv;
+}
+
+/* 803161C4-803161D8 310B04 0014+00 0/0 2/2 0/0 .text calcSizeIndBlock__11J3DMaterialFi
+ */
+u32 J3DMaterial::calcSizeIndBlock(int param_0) {
+ if (param_0 != 0) {
+ return sizeof(J3DIndBlockFull);
+ }
+
+ return sizeof(J3DIndBlockNull);
+}
+
+/* 803161D8-80316240 310B18 0068+00 0/0 2/2 0/0 .text calcSizePEBlock__11J3DMaterialFUlUl
+ */
+u32 J3DMaterial::calcSizePEBlock(u32 param_0, u32 param_1) {
+ u32 rv = 0;
+ if (param_0 == 0) {
+ if (param_1 & 1) {
+ rv = sizeof(J3DPEBlockOpa);
+ } else if (param_1 & 2) {
+ rv = sizeof(J3DPEBlockTexEdge);
+ } else if (param_1 & 4) {
+ rv = sizeof(J3DPEBlockXlu);
+ }
+ }
+ else if (param_0 == 0x10000000) {
+ rv = sizeof(J3DPEBlockFull);
+ } else if (param_0 == 0x20000000) {
+ rv = sizeof(J3DPEBlockFogOff);
+ }
+ return rv;
+}
+
+/* 80316240-80316290 310B80 0050+00 2/2 5/5 0/0 .text initialize__11J3DMaterialFv */
+void J3DMaterial::initialize() {
+ mShape = NULL;
+ mNext = NULL;
+ mJoint = NULL;
+ mMaterialMode = 1;
+ mIndex = -1;
+ mInvalid = 0;
+ mDiffFlag = 0;
+ mColorBlock = NULL;
+ mTexGenBlock = NULL;
+ mTevBlock = NULL;
+ mIndBlock = NULL;
+ mPEBlock = NULL;
+ mpOrigMaterial = NULL;
+ mMaterialAnm = NULL;
+ mSharedDLObj = NULL;
+}
+
+/* 80316290-80316344 310BD0 00B4+00 0/0 2/2 0/0 .text countDLSize__11J3DMaterialFv */
+u32 J3DMaterial::countDLSize() {
+ return (mColorBlock->countDLSize() + mTexGenBlock->countDLSize() + mTevBlock->countDLSize() +
+ mIndBlock->countDLSize() + mPEBlock->countDLSize() + 31) & ~0x1f;
+}
+
+/* 80316344-80316620 310C84 02DC+00 2/2 0/0 0/0 .text
+ * makeDisplayList_private__11J3DMaterialFP17J3DDisplayListObj */
+void J3DMaterial::makeDisplayList_private(J3DDisplayListObj* param_0) {
+ param_0->beginDL();
+ mTevBlock->load();
+ mIndBlock->load();
+ mPEBlock->load();
+ J3DGDSetGenMode(mTexGenBlock->getTexGenNum(), mColorBlock->getColorChanNum(), mTevBlock->getTevStageNum(), mIndBlock->getIndTexStageNum(), (GXCullMode)(u8)mColorBlock->getCullMode());
+ mTexGenBlock->load();
+ mColorBlock->load();
+ J3DGDSetNumChans(mColorBlock->getColorChanNum());
+ J3DGDSetNumTexGens(mTexGenBlock->getTexGenNum());
+ param_0->endDL();
+}
+
+/* 80316620-80316668 310F60 0048+00 1/0 0/0 0/0 .text makeDisplayList__11J3DMaterialFv */
+void J3DMaterial::makeDisplayList() {
+ if (!j3dSys.getMatPacket()->isLocked()) {
+ j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
+ makeDisplayList_private(j3dSys.getMatPacket()->getDisplayListObj());
+ }
+}
+
+/* 80316668-8031668C 310FA8 0024+00 1/0 0/0 0/0 .text makeSharedDisplayList__11J3DMaterialFv */
+void J3DMaterial::makeSharedDisplayList() {
+ makeDisplayList_private(mSharedDLObj);
+}
+
+/* 8031668C-803166DC 310FCC 0050+00 1/0 0/0 0/0 .text load__11J3DMaterialFv */
+void J3DMaterial::load() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(2)) {
+ loadNBTScale(*mTexGenBlock->getNBTScale());
+ }
+}
+
+/* 803166DC-80316740 31101C 0064+00 1/0 0/0 0/0 .text loadSharedDL__11J3DMaterialFv */
+void J3DMaterial::loadSharedDL() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(2)) {
+ mSharedDLObj->callDL();
+ loadNBTScale(*mTexGenBlock->getNBTScale());
+ }
+}
+
+/* 80316740-803167D8 311080 0098+00 2/0 0/0 0/0 .text patch__11J3DMaterialFv */
+void J3DMaterial::patch() {
+ j3dSys.getMatPacket()->mDiffFlag = mDiffFlag;
+ j3dSys.getMatPacket()->beginPatch();
+ mTevBlock->patch();
+ mColorBlock->patch();
+ mTexGenBlock->patch();
+ j3dSys.getMatPacket()->endPatch();
+}
+
+/* 803167D8-803169DC 311118 0204+00 2/0 0/0 0/0 .text diff__11J3DMaterialFUl */
+void J3DMaterial::diff(u32 param_0) {
+ if (j3dSys.getMatPacket()->isEnabled_Diff()) {
+ j3dSys.getMatPacket()->beginDiff();
+ mTevBlock->diff(param_0);
+ mIndBlock->diff(param_0);
+ mPEBlock->diff(param_0);
+ if (param_0 & 0x2000000) {
+ J3DGDSetGenMode_3Param(mTexGenBlock->getTexGenNum(), mTevBlock->getTevStageNum(), mIndBlock->getIndTexStageNum());
+ J3DGDSetNumTexGens(mTexGenBlock->getTexGenNum());
+ }
+ mTexGenBlock->diff(param_0);
+ mColorBlock->diff(param_0);
+ j3dSys.getMatPacket()->endDiff();
+ }
+}
+
+/* 803169DC-80316A54 31131C 0078+00 2/0 0/0 0/0 .text calc__11J3DMaterialFPA4_Cf */
+// Matches but changes order of TU vtables (?!)
+#ifdef NONMATCHING
+void J3DMaterial::calc(f32 const (*param_0)[4]) {
+ if (j3dSys.checkFlag(0x40000000)) {
+ mTexGenBlock->calcPostTexMtx(param_0);
+ } else {
+ mTexGenBlock->calc(param_0);
+ }
+
+ calcCurrentMtx();
+ setCurrentMtx();
+}
+#else
+extern "C" void calc__11J3DMaterialFPA4_Cf() {
+ // asm void J3DMaterial::calc(f32 const (*param_0)[4]) {
+ // NONMATCHING
+}
+#endif
+
+/* 80316A54-80316AB0 311394 005C+00 3/0 0/0 0/0 .text calcDiffTexMtx__11J3DMaterialFPA4_Cf */
+void J3DMaterial::calcDiffTexMtx(f32 const (*param_0)[4]) {
+ if (j3dSys.checkFlag(0x40000000)) {
+ mTexGenBlock->calcPostTexMtxWithoutViewMtx(param_0);
+ } else {
+ mTexGenBlock->calcWithoutViewMtx(param_0);
+ }
+}
+
+/* 80316AB0-80316AC8 3113F0 0018+00 1/1 1/1 0/0 .text setCurrentMtx__11J3DMaterialFv */
+void J3DMaterial::setCurrentMtx() {
+ mShape->setCurrentMtx(mCurrentMtx);
+}
+
+/* 80316AC8-80316D68 311408 02A0+00 1/1 0/0 0/0 .text calcCurrentMtx__11J3DMaterialFv */
+// Issues with setCurrentTexMtx
+#ifdef NONMATCHING
+void J3DMaterial::calcCurrentMtx() {
+ if (!j3dSys.checkFlag(0x40000000)) {
+ mCurrentMtx.setCurrentTexMtx(
+ mTexGenBlock->getTexCoord(0)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(1)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(2)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(3)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(4)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(5)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(6)->getTexGenMtx(),
+ mTexGenBlock->getTexCoord(7)->getTexGenMtx()
+ );
+ } else {
+ mCurrentMtx.setCurrentTexMtx(
+ mTexGenBlock->getTexCoord(0)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(1)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(2)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(3)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(4)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(5)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(6)->getTexMtxReg(),
+ mTexGenBlock->getTexCoord(7)->getTexMtxReg()
+ );
+ }
+}
+#else
+void J3DMaterial::calcCurrentMtx() {
+ // NONMATCHING
+}
+#endif
+
+/* 80316D68-80316E14 3116A8 00AC+00 1/1 0/0 0/0 .text copy__11J3DMaterialFP11J3DMaterial
+ */
+void J3DMaterial::copy(J3DMaterial* param_0) {
+ mColorBlock->reset(param_0->mColorBlock);
+ mTexGenBlock->reset(param_0->mTexGenBlock);
+ mTevBlock->reset(param_0->mTevBlock);
+ mIndBlock->reset(param_0->mIndBlock);
+ mPEBlock->reset(param_0->mPEBlock);
+}
+
+/* 80316E14-80316E70 311754 005C+00 1/0 0/0 0/0 .text reset__11J3DMaterialFv */
+void J3DMaterial::reset() {
+ if ((~mDiffFlag & 0x80000000) == 0) {
+ mDiffFlag &= ~0x80000000;
+ mMaterialMode = mpOrigMaterial->mMaterialMode;
+ mInvalid = mpOrigMaterial->mInvalid;
+ mMaterialAnm = NULL;
+ copy(mpOrigMaterial);
+ }
+}
+
+/* 80316E70-80316E90 3117B0 0020+00 1/0 0/0 0/0 .text change__11J3DMaterialFv */
+void J3DMaterial::change() {
+ if ((mDiffFlag & 0xc0000000) == 0) {
+ mDiffFlag |= 0x80000000;
+ mMaterialAnm = NULL;
+ }
+}
+
+/* 80316E90-80316F24 3117D0 0094+00 0/0 2/2 0/0 .text newSharedDisplayList__11J3DMaterialFUl */
+s32 J3DMaterial::newSharedDisplayList(u32 param_0) {
+ if (mSharedDLObj == NULL) {
+ mSharedDLObj = new J3DDisplayListObj();
+ if (mSharedDLObj == NULL) {
+ return 4;
+ }
+ s32 res = mSharedDLObj->newDisplayList(param_0);
+ switch (res) {
+ case kJ3DError_Success:
+ break;
+ default:
+ return res;
+ }
+ }
+ return 0;
+}
+
+/* 80316F24-80316FB8 311864 0094+00 0/0 2/2 0/0 .text newSingleSharedDisplayList__11J3DMaterialFUl
+ */
+s32 J3DMaterial::newSingleSharedDisplayList(u32 param_0) {
+ if (mSharedDLObj == NULL) {
+ mSharedDLObj = new J3DDisplayListObj();
+ if (mSharedDLObj == NULL) {
+ return 4;
+ }
+ s32 res = mSharedDLObj->newSingleDisplayList(param_0);
+ switch (res) {
+ case kJ3DError_Success:
+ break;
+ default:
+ return res;
+ }
+ }
+ return 0;
+}
+
+/* 80316FB8-80316FD8 3118F8 0020+00 0/0 1/1 0/0 .text initialize__18J3DPatchedMaterialFv
+ */
+void J3DPatchedMaterial::initialize() {
+ J3DMaterial::initialize();
+}
+
+/* 80316FD8-80316FDC 311918 0004+00 1/0 0/0 0/0 .text makeDisplayList__18J3DPatchedMaterialFv */
+extern "C" void makeDisplayList__18J3DPatchedMaterialFv() {
+//void J3DPatchedMaterial::makeDisplayList() {
+ /* empty function */
+}
+
+/* 80316FDC-80316FE0 31191C 0004+00 1/0 0/0 0/0 .text
+ * makeSharedDisplayList__18J3DPatchedMaterialFv */
+void J3DPatchedMaterial::makeSharedDisplayList() {
+ /* empty function */
+}
+
+/* 80316FE0-80316FFC 311920 001C+00 1/0 0/0 0/0 .text load__18J3DPatchedMaterialFv */
+void J3DPatchedMaterial::load() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (j3dSys.checkFlag(2)) {
+ return;
+ }
+}
+
+/* 80316FFC-8031703C 31193C 0040+00 1/0 0/0 0/0 .text loadSharedDL__18J3DPatchedMaterialFv */
+void J3DPatchedMaterial::loadSharedDL() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(0x02))
+ mSharedDLObj->callDL();
+}
+
+/* 8031703C-80317040 31197C 0004+00 1/0 0/0 0/0 .text reset__18J3DPatchedMaterialFv */
+void J3DPatchedMaterial::reset() {
+ /* empty function */
+}
+
+/* 80317040-80317044 311980 0004+00 1/0 0/0 0/0 .text change__18J3DPatchedMaterialFv */
+void J3DPatchedMaterial::change() {
+ /* empty function */
+}
+
+/* 80317044-80317064 311984 0020+00 0/0 1/1 0/0 .text initialize__17J3DLockedMaterialFv
+ */
+void J3DLockedMaterial::initialize() {
+ J3DMaterial::initialize();
+}
+
+/* 80317064-80317068 3119A4 0004+00 1/0 0/0 0/0 .text makeDisplayList__17J3DLockedMaterialFv */
+void J3DLockedMaterial::makeDisplayList() {
+ /* empty function */
+}
+
+/* 80317068-8031706C 3119A8 0004+00 1/0 0/0 0/0 .text makeSharedDisplayList__17J3DLockedMaterialFv
+ */
+void J3DLockedMaterial::makeSharedDisplayList() {
+ /* empty function */
+}
+
+/* 8031706C-80317088 3119AC 001C+00 1/0 0/0 0/0 .text load__17J3DLockedMaterialFv */
+void J3DLockedMaterial::load() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (j3dSys.checkFlag(2)) {
+ return;
+ }
+}
+
+/* 80317088-803170C8 3119C8 0040+00 1/0 0/0 0/0 .text loadSharedDL__17J3DLockedMaterialFv
+ */
+void J3DLockedMaterial::loadSharedDL() {
+ j3dSys.setMaterialMode(mMaterialMode);
+ if (!j3dSys.checkFlag(0x02))
+ mSharedDLObj->callDL();
+}
+
+/* 803170C8-803170CC 311A08 0004+00 1/0 0/0 0/0 .text patch__17J3DLockedMaterialFv */
+void J3DLockedMaterial::patch() {
+ /* empty function */
+}
+
+/* 803170CC-803170D0 311A0C 0004+00 1/0 0/0 0/0 .text diff__17J3DLockedMaterialFUl */
+void J3DLockedMaterial::diff(u32 param_0) {
+ /* empty function */
+}
+
+/* 803170D0-803170D4 311A10 0004+00 1/0 0/0 0/0 .text calc__17J3DLockedMaterialFPA4_Cf */
+extern "C" void calc__17J3DLockedMaterialFPA4_Cf() {
+ /* empty function */
+}
+
+/* 803170D4-803170D8 311A14 0004+00 1/0 0/0 0/0 .text reset__17J3DLockedMaterialFv */
+void J3DLockedMaterial::reset() {
+ /* empty function */
+}
+
+/* 803170D8-803170DC 311A18 0004+00 1/0 0/0 0/0 .text change__17J3DLockedMaterialFv */
+void J3DLockedMaterial::change() {
+ /* empty function */
+}
+
+/* 803170DC-80317138 311A1C 005C+00 0/0 1/0 0/0 .text __dt__21J3DColorBlockLightOffFv */
+void __dt__21J3DColorBlockLightOffFv() {
+//asm J3DColorBlockLightOff::~J3DColorBlockLightOff() {
+ // NONMATCHING
+}
+
+/* 80317138-80317180 311A78 0048+00 1/0 0/0 0/0 .text __dt__13J3DColorBlockFv */
+// J3DColorBlock::~J3DColorBlock() {
+extern "C" void __dt__13J3DColorBlockFv() {
+ // NONMATCHING
+}
+
+/* 80317180-803171DC 311AC0 005C+00 0/0 1/0 0/0 .text __dt__21J3DTexGenBlockPatchedFv */
+J3DTexGenBlockPatched::~J3DTexGenBlockPatched() {
+ // NONMATCHING
+}
+
+/* 803171DC-80317224 311B1C 0048+00 1/0 0/0 0/0 .text __dt__14J3DTexGenBlockFv */
+// J3DTexGenBlock::~J3DTexGenBlock() {
+extern "C" void __dt__14J3DTexGenBlockFv() {
+ // NONMATCHING
+}
+
+/* 80317224-8031726C 311B64 0048+00 0/0 1/0 0/0 .text __dt__11J3DTevBlockFv */
+// J3DTevBlock::~J3DTevBlock() {
+extern "C" void __dt__11J3DTevBlockFv() {
+ // NONMATCHING
+}
+
+/* 8031726C-803172B4 311BAC 0048+00 1/0 0/0 0/0 .text __dt__11J3DIndBlockFv */
+void __dt__11J3DIndBlockFv() {
+ // NONMATCHING
+}
+
+/* 803172B4-803172FC 311BF4 0048+00 1/0 0/0 0/0 .text __dt__10J3DPEBlockFv */
+// J3DPEBlock::~J3DPEBlock() {
+extern "C" void __dt__10J3DPEBlockFv() {
+ // NONMATCHING
+}
+
+/* 803172FC-80317304 311C3C 0008+00 1/0 1/0 0/0 .text countDLSize__14J3DTexGenBlockFv */
+s32 J3DTexGenBlock::countDLSize() {
+ return false;
+}
+
+/* 80317304-8031730C 311C44 0008+00 1/0 1/0 0/0 .text countDLSize__13J3DColorBlockFv */
+s32 J3DColorBlock::countDLSize() {
+ return false;
+}
+
+/* 8031730C-80317314 311C4C 0008+00 0/0 2/0 0/0 .text countDLSize__11J3DTevBlockFv */
+s32 J3DTevBlock::countDLSize() {
+ return false;
+}
+
+/* 80317314-8031731C 311C54 0008+00 2/0 0/0 0/0 .text countDLSize__11J3DIndBlockFv */
+s32 J3DIndBlock::countDLSize() {
+ return false;
+}
+
+/* 8031731C-80317324 311C5C 0008+00 1/0 1/0 0/0 .text countDLSize__10J3DPEBlockFv */
+s32 J3DPEBlock::countDLSize() {
+ return false;
+}
+
+/* 80317324-80317328 311C64 0004+00 1/0 1/0 0/0 .text load__13J3DColorBlockFv */
+extern "C" void load__13J3DColorBlockFv() {
+ /* empty function */
+}
+
+/* 80317328-80317330 311C68 0008+00 1/0 1/0 0/0 .text getCullMode__13J3DColorBlockCFv */
+s32 J3DColorBlock::getCullMode() const {
+ return 2;
+}
+
+/* 80317330-80317334 311C70 0004+00 0/0 2/0 0/0 .text load__11J3DTevBlockFv */
+void J3DTevBlock::load() {
+ /* empty function */
+}
+
+/* 80317334-8031733C 311C74 0008+00 1/0 2/0 0/0 .text getNBTScale__14J3DTexGenBlockFv */
+J3DNBTScale* J3DTexGenBlock::getNBTScale() {
+ return NULL;
+}
+
+/* 8031733C-80317340 311C7C 0004+00 1/0 1/0 0/0 .text patch__13J3DColorBlockFv */
+void J3DColorBlock::patch() {
+ /* empty function */
+}
+
+/* 80317340-80317344 311C80 0004+00 1/0 1/0 0/0 .text diff__13J3DColorBlockFUl */
+void J3DColorBlock::diff(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317344-80317348 311C84 0004+00 1/0 4/0 0/0 .text diff__10J3DPEBlockFUl */
+void J3DPEBlock::diff(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317348-8031734C 311C88 0004+00 1/0 4/0 0/0 .text reset__10J3DPEBlockFP10J3DPEBlock
+ */
+extern "C" void reset__10J3DPEBlockFP10J3DPEBlock() {
+ /* empty function */
+}
+
+/* 8031734C-80317350 311C8C 0004+00 1/0 0/0 0/0 .text reset__11J3DIndBlockFP11J3DIndBlock
+ */
+extern "C" void reset__11J3DIndBlockFP11J3DIndBlock() {
+ /* empty function */
+}
+
+/* 80317350-80317354 311C90 0004+00 0/0 1/0 0/0 .text reset__11J3DTevBlockFP11J3DTevBlock
+ */
+extern "C" void reset__11J3DTevBlockFP11J3DTevBlock(J3DTevBlock* param_0) {
+ /* empty function */
+}
+
+/* 80317354-80317358 311C94 0004+00 1/0 1/0 0/0 .text reset__14J3DTexGenBlockFP14J3DTexGenBlock */
+extern "C" void reset__14J3DTexGenBlockFP14J3DTexGenBlock() {
+ /* empty function */
+}
+
+/* 80317358-8031735C 311C98 0004+00 1/0 1/0 0/0 .text reset__13J3DColorBlockFP13J3DColorBlock */
+void J3DColorBlock::reset(J3DColorBlock* param_0) {
+ /* empty function */
+}
+
+/* 8031735C-80317360 311C9C 0004+00 1/0 5/0 0/0 .text diffFog__10J3DPEBlockFv */
+void J3DPEBlock::diffFog() {
+ /* empty function */
+}
+
+/* 80317360-80317364 311CA0 0004+00 1/0 4/0 0/0 .text diffBlend__10J3DPEBlockFv */
+void J3DPEBlock::diffBlend() {
+ /* empty function */
+}
+
+/* 80317364-80317368 311CA4 0004+00 1/0 5/0 0/0 .text setFog__10J3DPEBlockFP6J3DFog */
+void J3DPEBlock::setFog(J3DFog* param_0) {
+ /* empty function */
+}
+
+/* 80317368-8031736C 311CA8 0004+00 1/0 5/0 0/0 .text setFog__10J3DPEBlockF6J3DFog */
+void J3DPEBlock::setFog(J3DFog param_0) {
+ /* empty function */
+}
+
+/* 8031736C-80317370 311CAC 0004+00 1/0 4/0 0/0 .text setAlphaComp__10J3DPEBlockFPC12J3DAlphaComp
+ */
+void J3DPEBlock::setAlphaComp(J3DAlphaComp const* param_0) {
+ /* empty function */
+}
+
+/* 80317370-80317374 311CB0 0004+00 1/0 4/0 0/0 .text setBlend__10J3DPEBlockFPC8J3DBlend
+ */
+void J3DPEBlock::setBlend(J3DBlend const* param_0) {
+ /* empty function */
+}
+
+/* 80317374-80317378 311CB4 0004+00 1/0 4/0 0/0 .text setZMode__10J3DPEBlockFPC8J3DZMode
+ */
+void J3DPEBlock::setZMode(J3DZMode const* param_0) {
+ /* empty function */
+}
+
+/* 80317378-8031737C 311CB8 0004+00 1/0 4/0 0/0 .text setZCompLoc__10J3DPEBlockFPCUc */
+void J3DPEBlock::setZCompLoc(u8 const* param_0) {
+ /* empty function */
+}
+
+/* 8031737C-80317380 311CBC 0004+00 1/0 4/0 0/0 .text setDither__10J3DPEBlockFUc */
+void J3DPEBlock::setDither(u8 param_0) {
+ /* empty function */
+}
+
+/* 80317380-80317384 311CC0 0004+00 1/0 4/0 0/0 .text setDither__10J3DPEBlockFPCUc */
+void J3DPEBlock::setDither(u8 const* param_0) {
+ /* empty function */
+}
+
+/* 80317384-8031738C 311CC4 0008+00 1/0 4/0 0/0 .text getDither__10J3DPEBlockCFv */
+u8 J3DPEBlock::getDither() const {
+ return 0;
+}
+
+/* 8031738C-80317394 311CCC 0008+00 1/0 5/0 0/0 .text getFogOffset__10J3DPEBlockCFv */
+u32 J3DPEBlock::getFogOffset() const {
+ return 0;
+}
+
+/* 80317394-80317398 311CD4 0004+00 1/0 5/0 0/0 .text setFogOffset__10J3DPEBlockFUl */
+void J3DPEBlock::setFogOffset(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317398-8031739C 311CD8 0004+00 1/0 0/0 0/0 .text diff__15J3DIndBlockNullFUl */
+void J3DIndBlockNull::diff(u32 param_0) {
+ /* empty function */
+}
+
+/* 8031739C-803173A0 311CDC 0004+00 1/0 0/0 0/0 .text load__15J3DIndBlockNullFv */
+void J3DIndBlockNull::load() {
+ /* empty function */
+}
+
+/* 803173A0-803173A4 311CE0 0004+00 1/0 0/0 0/0 .text reset__15J3DIndBlockNullFP11J3DIndBlock */
+extern "C" void reset__15J3DIndBlockNullFP11J3DIndBlock() {
+ /* empty function */
+}
+
+/* 803173A4-803173B0 311CE4 000C+00 1/0 0/0 0/0 .text getType__15J3DIndBlockNullFv */
+u32 J3DIndBlockNull::getType() {
+ return 'IBLN';
+}
+
+/* 803173B0-8031740C 311CF0 005C+00 1/0 0/0 0/0 .text __dt__15J3DIndBlockNullFv */
+J3DIndBlockNull::~J3DIndBlockNull() {
+ // NONMATCHING
+}
+
+/* 8031740C-80317410 311D4C 0004+00 2/0 0/0 0/0 .text
+ * setIndTexOrder__11J3DIndBlockFUlPC14J3DIndTexOrder */
+void J3DIndBlock::setIndTexOrder(u32 param_0, J3DIndTexOrder const* param_1) {
+ /* empty function */
+}
+
+/* 80317410-80317414 311D50 0004+00 2/0 0/0 0/0 .text
+ * setIndTexOrder__11J3DIndBlockFUl14J3DIndTexOrder */
+void J3DIndBlock::setIndTexOrder(u32 param_0, J3DIndTexOrder param_1) {
+ /* empty function */
+}
+
+/* 80317414-80317418 311D54 0004+00 2/0 0/0 0/0 .text
+ * setIndTexMtx__11J3DIndBlockFUlPC12J3DIndTexMtx */
+void J3DIndBlock::setIndTexMtx(u32 param_0, J3DIndTexMtx const* param_1) {
+ /* empty function */
+}
+
+/* 80317418-8031741C 311D58 0004+00 2/0 0/0 0/0 .text
+ * setIndTexCoordScale__11J3DIndBlockFUlPC19J3DIndTexCoordScale */
+void J3DIndBlock::setIndTexCoordScale(u32 param_0, J3DIndTexCoordScale const* param_1) {
+ /* empty function */
+}
+
+/* 8031741C-80317420 311D5C 0004+00 1/0 1/0 0/0 .text setTexGenNum__14J3DTexGenBlockFPCUl
+ */
+void J3DTexGenBlock::setTexGenNum(u32 const* param_0) {
+ /* empty function */
+}
+
+/* 80317420-80317424 311D60 0004+00 1/0 2/0 0/0 .text setNBTScale__14J3DTexGenBlockF11J3DNBTScale
+ */
+void J3DTexGenBlock::setNBTScale(J3DNBTScale param_0) {
+ /* empty function */
+}
+
+/* 80317424-80317428 311D64 0004+00 1/0 2/0 0/0 .text
+ * setNBTScale__14J3DTexGenBlockFPC11J3DNBTScale */
+void J3DTexGenBlock::setNBTScale(J3DNBTScale const* param_0) {
+ /* empty function */
+}
+
+/* 80317428-80317430 311D68 0008+00 1/0 1/0 0/0 .text getTexMtxOffset__14J3DTexGenBlockCFv */
+bool J3DTexGenBlock::getTexMtxOffset() const {
+ return false;
+}
+
+/* 80317430-80317434 311D70 0004+00 1/0 1/0 0/0 .text setTexMtxOffset__14J3DTexGenBlockFUl */
+void J3DTexGenBlock::setTexMtxOffset(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317434-80317438 311D74 0004+00 1/0 1/0 0/0 .text patchMatColor__13J3DColorBlockFv */
+void J3DColorBlock::patchMatColor() {
+ /* empty function */
+}
+
+/* 80317438-8031743C 311D78 0004+00 1/0 3/0 0/0 .text diffAmbColor__13J3DColorBlockFv */
+void J3DColorBlock::diffAmbColor() {
+ /* empty function */
+}
+
+/* 8031743C-80317440 311D7C 0004+00 1/0 1/0 0/0 .text diffMatColor__13J3DColorBlockFv */
+void J3DColorBlock::diffMatColor() {
+ /* empty function */
+}
+
+/* 80317440-80317444 311D80 0004+00 1/0 1/0 0/0 .text diffColorChan__13J3DColorBlockFv */
+void J3DColorBlock::diffColorChan() {
+ /* empty function */
+}
+
+/* 80317444-80317448 311D84 0004+00 1/0 3/0 0/0 .text diffLightObj__13J3DColorBlockFUl */
+void J3DColorBlock::diffLightObj(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317448-8031744C 311D88 0004+00 1/0 1/0 0/0 .text
+ * setMatColor__13J3DColorBlockFUlPC10J3DGXColor */
+void J3DColorBlock::setMatColor(u32 param_0, J3DGXColor const* param_1) {
+ /* empty function */
+}
+
+/* 8031744C-80317450 311D8C 0004+00 1/0 1/0 0/0 .text setColorChanNum__13J3DColorBlockFPCUc */
+void J3DColorBlock::setColorChanNum(u8 const* param_0) {
+ /* empty function */
+}
+
+/* 80317450-80317454 311D90 0004+00 1/0 1/0 0/0 .text
+ * setColorChan__13J3DColorBlockFUlPC12J3DColorChan */
+void J3DColorBlock::setColorChan(u32 param_0, J3DColorChan const* param_1) {
+ /* empty function */
+}
+
+/* 80317454-8031745C 311D94 0008+00 1/0 3/0 0/0 .text getLight__13J3DColorBlockFUl */
+bool J3DColorBlock::getLight(u32 param_0) {
+ return false;
+}
+
+/* 8031745C-80317460 311D9C 0004+00 1/0 1/0 0/0 .text setCullMode__13J3DColorBlockFUc */
+void J3DColorBlock::setCullMode(u8 param_0) {
+ /* empty function */
+}
+
+/* 80317460-80317464 311DA0 0004+00 1/0 1/0 0/0 .text setCullMode__13J3DColorBlockFPCUc
+ */
+void J3DColorBlock::setCullMode(u8 const* param_0) {
+ /* empty function */
+}
+
+/* 80317464-8031746C 311DA4 0008+00 1/0 1/0 0/0 .text getMatColorOffset__13J3DColorBlockCFv */
+u32 J3DColorBlock::getMatColorOffset() const {
+ return 0;
+}
+
+/* 8031746C-80317474 311DAC 0008+00 1/0 1/0 0/0 .text getColorChanOffset__13J3DColorBlockCFv */
+u32 J3DColorBlock::getColorChanOffset() const {
+ return 0;
+}
+
+/* 80317474-80317478 311DB4 0004+00 1/0 1/0 0/0 .text setMatColorOffset__13J3DColorBlockFUl */
+void J3DColorBlock::setMatColorOffset(u32 param_0) {
+ /* empty function */
+}
+
+/* 80317478-8031747C 311DB8 0004+00 1/0 1/0 0/0 .text setColorChanOffset__13J3DColorBlockFUl */
+void J3DColorBlock::setColorChanOffset(u32 param_0) {
+ /* empty function */
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DPacket.cpp b/src/JSystem/J3DGraphBase/J3DPacket.cpp
new file mode 100644
index 0000000000..c43cce816c
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DPacket.cpp
@@ -0,0 +1,403 @@
+#include "JSystem/J3DGraphBase/J3DPacket.h"
+#include "JSystem/J3DGraphAnimator/J3DModel.h"
+#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
+#include "JSystem/J3DGraphBase/J3DMaterial.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "dolphin/os/OSCache.h"
+#include "dolphin/os/OSInterrupt.h"
+#include "string.h"
+
+J3DError J3DDisplayListObj::newDisplayList(u32 capacity) {
+ mCapacity = ALIGN_NEXT(capacity, 0x20);
+ mpData[0] = new (0x20) char[mCapacity];
+ mpData[1] = new (0x20) char[mCapacity];
+ mSize = 0;
+
+ if (mpData[0] == NULL || mpData[1] == NULL)
+ return kJ3DError_Alloc;
+
+ return kJ3DError_Success;
+}
+
+J3DError J3DDisplayListObj::newSingleDisplayList(u32 capacity) {
+ mCapacity = ALIGN_NEXT(capacity, 0x20);
+ mpData[0] = new (0x20) char[mCapacity];
+ mpData[1] = mpData[0];
+ mSize = 0;
+
+ if (mpData[0] == NULL)
+ return kJ3DError_Alloc;
+
+ return kJ3DError_Success;
+}
+
+/* 8031256C-803125E4 30CEAC 0078+00 0/0 1/1 0/0 .text single_To_Double__17J3DDisplayListObjFv */
+J3DError J3DDisplayListObj::single_To_Double() {
+ if (mpData[0] == mpData[1]) {
+ mpData[1] = new (0x20) char[mCapacity];
+
+ if (mpData[1] == NULL)
+ return kJ3DError_Alloc;
+
+ memcpy(mpData[1], mpData[0], mCapacity);
+ DCStoreRange(mpData[1], mCapacity);
+ }
+
+ return kJ3DError_Success;
+}
+
+void J3DDisplayListObj::setSingleDisplayList(void* pDLData, u32 size) {
+ mCapacity = ALIGN_NEXT(size, 0x20);
+ mpData[0] = pDLData;
+ mpData[1] = mpData[0];
+ mSize = size;
+}
+
+void J3DDisplayListObj::swapBuffer() {
+ void* pTmp = mpData[0];
+ mpData[0] = mpData[1];
+ mpData[1] = pTmp;
+}
+
+void J3DDisplayListObj::callDL() const {
+ GXCallDisplayList(mpData[0], mSize);
+}
+
+/* ############################################################################################## */
+/* 80434C70-80434C80 061990 0010+00 2/2 3/3 0/0 .bss sGDLObj__17J3DDisplayListObj */
+GDLObj J3DDisplayListObj::sGDLObj;
+
+/* 804515A0-804515A8 000AA0 0004+04 3/3 0/0 0/0 .sbss sInterruptFlag__17J3DDisplayListObj
+ */
+s32 J3DDisplayListObj::sInterruptFlag;
+
+/* 80312644-80312698 30CF84 0054+00 2/2 1/1 0/0 .text beginDL__17J3DDisplayListObjFv */
+void J3DDisplayListObj::beginDL() {
+ swapBuffer();
+ sInterruptFlag = OSDisableInterrupts();
+ GDInitGDLObj(&sGDLObj, (u8*)mpData[0], mCapacity);
+ GDSetCurrent(&sGDLObj);
+}
+
+/* 80312698-803126F4 30CFD8 005C+00 1/1 1/1 0/0 .text endDL__17J3DDisplayListObjFv */
+u32 J3DDisplayListObj::endDL() {
+ GDPadCurr32();
+ OSRestoreInterrupts(sInterruptFlag);
+ mSize = GDGetGDLObjOffset(&sGDLObj);
+ GDFlushCurrToMem();
+ GDSetCurrent(NULL);
+ return mSize;
+}
+
+/* 803126F4-80312714 30D034 0020+00 0/0 1/1 0/0 .text beginPatch__17J3DDisplayListObjFv
+ */
+void J3DDisplayListObj::beginPatch() {
+ beginDL();
+}
+
+/* 80312714-80312750 30D054 003C+00 0/0 1/1 0/0 .text endPatch__17J3DDisplayListObjFv */
+u32 J3DDisplayListObj::endPatch() {
+ OSRestoreInterrupts(sInterruptFlag);
+ GDSetCurrent(NULL);
+ return mSize;
+}
+
+/* 80312750-80312758 30D090 0008+00 3/0 16/0 10/0 .text entry__9J3DPacketFP13J3DDrawBuffer */
+int J3DPacket::entry(J3DDrawBuffer*) {
+ return 1;
+}
+
+void J3DPacket::addChildPacket(J3DPacket* pPacket) {
+ if (mpFirstChild == NULL) {
+ mpFirstChild = pPacket;
+ } else {
+ pPacket->mpNextPacket = mpFirstChild;
+ mpFirstChild = pPacket;
+ }
+}
+
+/* ############################################################################################## */
+/* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */
+static u32 sDifferedRegister[8] = {
+ 0x00000004, 0x00000001, 0x00000002, 0x01000000, 0x10000000, 0x20000000, 0x02000000, 0x08000000,
+};
+
+/* 803CD920-803CD940 02AA40 0020+00 1/1 0/0 0/0 .data sSizeOfDiffered */
+static s32 sSizeOfDiffered[8] = {
+ 13, 13, 21, 120, 55, 15, 19, 45,
+};
+
+/* 80312778-803127B0 30D0B8 0038+00 2/2 0/0 0/0 .text __ct__13J3DDrawPacketFv */
+J3DDrawPacket::J3DDrawPacket() {
+ mFlags = 0;
+ mpDisplayListObj = NULL;
+ mpTexMtxObj = NULL;
+}
+
+/* 803127B0-8031280C 30D0F0 005C+00 3/2 0/0 0/0 .text __dt__13J3DDrawPacketFv */
+J3DDrawPacket::~J3DDrawPacket() {}
+
+/* 8031280C-80312898 30D14C 008C+00 1/1 1/1 0/0 .text newDisplayList__13J3DDrawPacketFUl
+ */
+J3DError J3DDrawPacket::newDisplayList(u32 size) {
+ mpDisplayListObj = new J3DDisplayListObj();
+
+ if (mpDisplayListObj == NULL)
+ return kJ3DError_Alloc;
+
+ J3DError ret = mpDisplayListObj->newDisplayList(size);
+ if (ret != kJ3DError_Success)
+ return ret;
+
+ return kJ3DError_Success;
+}
+
+/* 80312898-80312924 30D1D8 008C+00 0/0 1/1 0/0 .text newSingleDisplayList__13J3DDrawPacketFUl */
+J3DError J3DDrawPacket::newSingleDisplayList(u32 size) {
+ mpDisplayListObj = new J3DDisplayListObj();
+
+ if (mpDisplayListObj == NULL)
+ return kJ3DError_Alloc;
+
+ J3DError ret = mpDisplayListObj->newSingleDisplayList(size);
+ if (ret != kJ3DError_Success)
+ return ret;
+
+ return kJ3DError_Success;
+}
+
+void J3DDrawPacket::draw() {
+ mpDisplayListObj->callDL();
+}
+
+/* 80312948-803129A4 30D288 005C+00 0/0 1/1 0/0 .text __ct__12J3DMatPacketFv */
+J3DMatPacket::J3DMatPacket() {
+ mpInitShapePacket = NULL;
+ mpShapePacket = NULL;
+ mpMaterial = NULL;
+ mDiffFlag = -1;
+ mpTexture = NULL;
+ mpMaterialAnm = NULL;
+}
+
+/* 803129A4-80312A04 30D2E4 0060+00 1/0 1/1 0/0 .text __dt__12J3DMatPacketFv */
+J3DMatPacket::~J3DMatPacket() {}
+
+void J3DMatPacket::addShapePacket(J3DShapePacket* pShape) {
+ if (mpShapePacket == NULL) {
+ mpShapePacket = pShape;
+ } else {
+ pShape->mpNextPacket = mpShapePacket;
+ mpShapePacket = pShape;
+ }
+}
+
+void J3DMatPacket::beginDiff() {
+ mpInitShapePacket->mpDisplayListObj->beginDL();
+}
+
+void J3DMatPacket::endDiff() {
+ mpInitShapePacket->mpDisplayListObj->endDL();
+}
+
+/* 80312A74-80312A9C 30D3B4 0028+00 0/0 1/1 0/0 .text isSame__12J3DMatPacketCFP12J3DMatPacket */
+bool J3DMatPacket::isSame(J3DMatPacket* pOther) const {
+ bool isSame = false;
+
+ if (mDiffFlag == pOther->mDiffFlag && !(mDiffFlag >> 0x1F)) {
+ isSame = true;
+ }
+ return isSame;
+}
+
+/* 80312A9C-80312B20 30D3DC 0084+00 1/0 0/0 0/0 .text draw__12J3DMatPacketFv */
+void J3DMatPacket::draw() {
+ mpMaterial->load();
+ callDL();
+ J3DShapePacket* packet = getShapePacket();
+
+ J3DShape* shape = packet->getShape();
+ shape->loadPreDrawSetting();
+
+ while (packet != NULL) {
+ if (packet->getDisplayListObj() != NULL) {
+ packet->getDisplayListObj()->callDL();
+ }
+
+ packet->drawFast();
+ packet = (J3DShapePacket*)packet->getNextPacket();
+ }
+
+ shape->resetVcdVatCache();
+}
+
+/* 80312B20-80312B74 30D460 0054+00 0/0 1/1 0/0 .text __ct__14J3DShapePacketFv */
+J3DShapePacket::J3DShapePacket() {
+ mpShape = NULL;
+ mpMtxBuffer = NULL;
+ mpBaseMtxPtr = NULL;
+ mDiffFlag = 0;
+ mpModel = NULL;
+}
+
+/* 80312B74-80312BD4 30D4B4 0060+00 1/0 1/1 0/0 .text __dt__14J3DShapePacketFv */
+J3DShapePacket::~J3DShapePacket() {}
+
+/* 80312BD4-80312DBC 30D514 01E8+00 1/1 0/0 0/0 .text calcDifferedBufferSize__14J3DShapePacketFUl
+ */
+u32 J3DShapePacket::calcDifferedBufferSize(u32 flag) {
+ int iVar5 = 0;
+ for (int i = 0; i < 8; i++) {
+ if ((flag & sDifferedRegister[i]) != 0) {
+ iVar5 += sSizeOfDiffered[i];
+ }
+ }
+
+ iVar5 += getDiffFlag_LightObjNum(flag) * 0x48;
+ u32 uVar2 = getDiffFlag_TexGenNum(flag);
+ if (uVar2 != 0) {
+ u32 local_4c = mpShape->getMaterial()->getTexGenNum();
+ if (uVar2 > local_4c) {
+ local_4c = uVar2;
+ }
+ if ((flag & 0x1000)) {
+ iVar5 += calcDifferedBufferSize_TexGenSize(local_4c);
+ } else {
+ iVar5 += calcDifferedBufferSize_TexMtxSize(local_4c);
+ }
+ }
+
+ uVar2 = getDiffFlag_TexNoNum(flag);
+ if (uVar2 != 0) {
+ u8 local_58;
+ if (mpShape->getMaterial()->getTevStageNum() > 8) {
+ local_58 = 8;
+ } else {
+ local_58 = mpShape->getMaterial()->getTevStageNum();
+ }
+ u32 local_50 = local_58;
+ local_50 = uVar2 > local_50 ? uVar2 : local_50;
+ if ((flag & 0x4000000)) {
+ iVar5 += calcDifferedBufferSize_TexNoAndTexCoordScaleSize(local_50);
+ } else {
+ iVar5 += calcDifferedBufferSize_TexNoSize(local_50);
+ }
+ }
+
+ uVar2 = getDiffFlag_TevStageNum(flag);
+ if (uVar2 != 0) {
+ u8 local_58;
+ if (mpShape->getMaterial()->getTevStageNum() > 8) {
+ local_58 = 8;
+ } else {
+ local_58 = mpShape->getMaterial()->getTevStageNum();
+ }
+ u32 local_50 = local_58;
+ local_50 = uVar2 > local_50 ? uVar2 : local_50;
+ iVar5 += calcDifferedBufferSize_TevStageSize(local_50);
+ if (flag & 0x8000000) {
+ iVar5 += calcDifferedBufferSize_TevStageDirectSize(local_50);
+ }
+ }
+
+ return (iVar5 + 0x1f) & ~0x1f;
+}
+
+/* 80312DBC-80312E08 30D6FC 004C+00 0/0 1/1 0/0 .text newDifferedDisplayList__14J3DShapePacketFUl
+ */
+J3DError J3DShapePacket::newDifferedDisplayList(u32 flag) {
+ mDiffFlag = flag;
+ u32 bufSize = calcDifferedBufferSize(flag);
+ J3DError error = newDisplayList(bufSize);
+
+ if (error != kJ3DError_Success) {
+ return error;
+ }
+
+ setDisplayListObj(getDisplayListObj());
+ return kJ3DError_Success;
+}
+
+/* 80312E08-80312F24 30D748 011C+00 2/2 0/0 0/0 .text prepareDraw__14J3DShapePacketCFv */
+void J3DShapePacket::prepareDraw() const {
+ mpModel->getVertexBuffer()->setArray();
+ j3dSys.setModel(mpModel);
+ j3dSys.setShapePacket((J3DShapePacket*)this);
+
+ // the way that the LOD flag is set seems to be wrong...
+ J3DShapeMtx::setLODFlag(mpModel->checkFlag(0x10));
+
+ if (mpModel->checkFlag(J3DMdlFlag_SkinPosCpu)) {
+ mpShape->onFlag(J3DShpFlag_SkinPosCpu);
+ } else {
+ mpShape->offFlag(J3DShpFlag_SkinPosCpu);
+ }
+
+ if (mpModel->checkFlag(J3DMdlFlag_SkinNrmCpu) &&
+ mpShape->checkFlag(J3DShpFlag_EnableLod) == false)
+ {
+ mpShape->onFlag(J3DShpFlag_SkinNrmCpu);
+ } else {
+ mpShape->offFlag(J3DShpFlag_SkinNrmCpu);
+ }
+
+ J3DMtxBuffer* buffer = mpMtxBuffer;
+ mpShape->setCurrentViewNoPtr(buffer->getCurrentViewNoPtr());
+ mpShape->setScaleFlagArray(buffer->getScaleFlagArray());
+ mpShape->setDrawMtx(buffer->getDrawMtxPtrPtr());
+
+ if (!mpShape->getNBTFlag()) {
+ mpShape->setNrmMtx(buffer->getNrmMtxPtrPtr());
+ } else {
+ mpShape->setNrmMtx(buffer->getBumpMtxPtrPtr()[mpShape->getBumpMtxOffset()]);
+ }
+
+ mpModel->getModelData()->syncJ3DSysFlags();
+}
+
+/* 80312F24-80312FBC 30D864 0098+00 1/0 0/0 0/0 .text draw__14J3DShapePacketFv */
+void J3DShapePacket::draw() {
+ if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
+ prepareDraw();
+
+ if (mpTexMtxObj != NULL) {
+ J3DMaterial* material = mpShape->getMaterial();
+ J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
+ J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj();
+ } else {
+ J3DDifferedTexMtx::sTexGenBlock = NULL;
+ }
+
+ if (mpDisplayListObj != NULL) {
+ mpDisplayListObj->callDL();
+ }
+
+ mpShape->draw();
+ }
+}
+
+/* 80312FBC-80313044 30D8FC 0088+00 1/1 2/2 1/1 .text drawFast__14J3DShapePacketFv */
+void J3DShapePacket::drawFast() {
+ if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
+ prepareDraw();
+
+ if (mpTexMtxObj != NULL) {
+ J3DMaterial* material = mpShape->getMaterial();
+ J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
+ J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj();
+ } else {
+ J3DDifferedTexMtx::sTexGenBlock = NULL;
+ }
+
+ mpShape->drawFast();
+ }
+}
+
+/* 80313044-80313048 30D984 0004+00 1/0 0/0 0/0 .text draw__9J3DPacketFv */
+void J3DPacket::draw() {}
+
+/* 80313048-803130A8 30D988 0060+00 1/0 0/0 0/0 .text entry__12J3DMatPacketFP13J3DDrawBuffer */
+int J3DMatPacket::entry(J3DDrawBuffer* i_buffer) {
+ sortFunc func = J3DDrawBuffer::sortFuncTable[i_buffer->mSortType];
+ return (i_buffer->*func)(this);
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp
new file mode 100644
index 0000000000..17dab88daf
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DShape.cpp
@@ -0,0 +1,354 @@
+#include "JSystem/J3DGraphBase/J3DShape.h"
+#include "JSystem/J3DGraphBase/J3DPacket.h"
+#include "JSystem/J3DGraphBase/J3DVertex.h"
+#include "dolphin/gd.h"
+#include "dolphin/os.h"
+
+void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool);
+void J3DFifoLoadPosMtxImm(Mtx, u32);
+void J3DFifoLoadNrmMtxImm(Mtx, u32);
+
+
+enum {
+ kVcdVatDLSize = 0xC0,
+};
+
+void J3DShape::initialize() {
+ mMaterial = NULL;
+ mIndex = -1;
+ mMtxGroupNum = 0;
+ mFlags = 0;
+ mRadius = 0.0f;
+ mMin.x = 0.0f;
+ mMin.y = 0.0f;
+ mMin.z = 0.0f;
+ mMax.x = 0.0f;
+ mMax.y = 0.0f;
+ mMax.z = 0.0f;
+ mVtxDesc = NULL;
+ mShapeMtx = NULL;
+ mShapeDraw = NULL;
+ mVertexData = NULL;
+ mDrawMtxData = NULL;
+ mScaleFlagArray = NULL;
+ mDrawMtx = NULL;
+ mNrmMtx = NULL;
+ mCurrentViewNo = &j3dDefaultViewNo;
+ mHasNBT = false;
+ mHasPNMTXIdx = false;
+}
+
+/* 80314BB8-80314CBC 30F4F8 0104+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__8J3DShapeF7_GXAttrUl */
+void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) {
+ u32 kSize[] = {0, 1, 1, 2};
+
+ s32 pnmtxidxOffs = -1;
+ s32 attrOffs = -1;
+ s32 stride = 0;
+ bool found = false;
+
+ for (GXVtxDescList* vtxDesc = mVtxDesc; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
+ if (vtxDesc->attr == GX_VA_PNMTXIDX)
+ pnmtxidxOffs = stride;
+
+ if (attr < vtxDesc->attr && !found) {
+ attrOffs = stride;
+ found = true;
+ }
+
+ stride = stride + kSize[vtxDesc->type];
+ }
+
+ if (pnmtxidxOffs == -1)
+ return;
+
+ for (u16 i = 0; i < getMtxGroupNum(); i++)
+ getShapeDraw(i)->addTexMtxIndexInDL(stride, attrOffs, (s32)valueBase);
+}
+
+/* 80314CBC-80314DA8 30F5FC 00EC+00 0/0 1/1 0/0 .text addTexMtxIndexInVcd__8J3DShapeF7_GXAttr */
+void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
+ s32 attrIdx = -1;
+ GXVtxDescList* vtxDesc = mVtxDesc;
+ s32 attrCount = 0;
+
+ for (; vtxDesc->attr != GX_VA_NULL; attrCount++, vtxDesc++) {
+ if (vtxDesc->attr == GX_VA_PNMTXIDX)
+ attrIdx = 0;
+ }
+
+ if (attrIdx == -1)
+ return;
+
+ GXVtxDescList* newVtxDesc = new GXVtxDescList[attrCount + 2];
+ bool inserted = false;
+
+ vtxDesc = mVtxDesc;
+ GXVtxDescList* dst = newVtxDesc;
+ for (; vtxDesc->attr != GX_VA_NULL; dst++, vtxDesc++) {
+ if ((attr < vtxDesc->attr) && !inserted) {
+ dst->attr = attr;
+ dst->type = GX_DIRECT;
+ inserted = true;
+ dst++;
+ }
+
+ *dst = *vtxDesc;
+ }
+
+ dst->attr = GX_VA_NULL;
+ dst->type = GX_NONE;
+ mVtxDesc = newVtxDesc;
+ makeVcdVatCmd();
+}
+
+/* 80314DA8-80314E28 30F6E8 0080+00 0/0 1/1 0/0 .text
+ * calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */
+void J3DShape::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
+ for (u16 i = 0; i < getMtxGroupNum(); i++)
+ getShapeMtx(i)->calcNBTScale(param_0, param_1, param_2);
+}
+
+/* 80314E28-80314E98 30F768 0070+00 0/0 1/1 0/0 .text countBumpMtxNum__8J3DShapeCFv */
+u32 J3DShape::countBumpMtxNum() const {
+ u32 num = 0;
+ for (u16 i = 0; i < getMtxGroupNum(); i++)
+ num += getShapeMtx(i)->getUseMtxNum();
+ return num;
+}
+
+/* 80314E98-80314EB0 30F7D8 0018+00 1/1 0/0 0/0 .text J3DLoadCPCmd__FUcUl */
+void J3DLoadCPCmd(u8 cmd, u32 param) {
+ GXWGFifo.u8 = GX_CMD_LOAD_CP_REG;
+ GXWGFifo.u8 = cmd;
+ GXWGFifo.u32 = param;
+}
+
+/* 80314EB0-80314EEC 30F7F0 003C+00 1/1 0/0 0/0 .text J3DLoadArrayBasePtr__F7_GXAttrPv */
+static void J3DLoadArrayBasePtr(_GXAttr attr, void* data) {
+ u32 idx = (attr == GX_VA_NBT) ? 1 : (attr - GX_VA_POS);
+ J3DLoadCPCmd(0xA0 + idx, ((u32)data & 0x7FFFFFFF));
+}
+
+/* 80314EEC-80314F5C 30F82C 0070+00 3/3 0/0 0/0 .text loadVtxArray__8J3DShapeCFv */
+void J3DShape::loadVtxArray() const {
+ J3DLoadArrayBasePtr(GX_VA_POS, j3dSys.getVtxPos());
+ if (!mHasNBT) {
+ J3DLoadArrayBasePtr(GX_VA_NRM, j3dSys.getVtxNrm());
+ }
+ J3DLoadArrayBasePtr(GX_VA_CLR0, j3dSys.getVtxCol());
+}
+
+/* 80314F5C-80314F98 30F89C 003C+00 0/0 1/1 0/0 .text isSameVcdVatCmd__8J3DShapeFP8J3DShape */
+bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
+ u8* a = other->mVcdVatCmd;
+ u8* b = mVcdVatCmd;
+ for (u32 i = 0; i < kVcdVatDLSize; i++)
+ if (a[i] != b[i])
+ return false;
+ return true;
+}
+
+/* 80314F98-80315260 30F8D8 02C8+00 1/1 0/0 0/0 .text makeVtxArrayCmd__8J3DShapeFv */
+void J3DShape::makeVtxArrayCmd() {
+ GXVtxAttrFmtList* vtxAttr = mVertexData->getVtxAttrFmtList();
+
+ u8 stride[0x0C];
+ void* array[0x0C];
+ for (u32 i = 0; i < 0x0C; i++) {
+ stride[i] = 0;
+ array[i] = 0;
+ }
+
+ for (; vtxAttr->mAttrib != GX_VA_NULL; vtxAttr++) {
+ switch (vtxAttr->mAttrib) {
+ case GX_VA_POS: {
+ if (vtxAttr->mCompType == GX_F32)
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
+ else
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
+ array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxPosArray();
+ mVertexData->setVtxPosFrac(vtxAttr->mCompShift);
+ mVertexData->setVtxPosType((GXCompType)vtxAttr->mCompType);
+ } break;
+ case GX_VA_NRM: {
+ if (vtxAttr->mCompType == GX_F32)
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
+ else
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
+ array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxNrmArray();
+ mVertexData->setVtxNrmFrac(vtxAttr->mCompShift);
+ mVertexData->setVtxNrmType((GXCompType)vtxAttr->mCompType);
+ } break;
+ case GX_VA_CLR0:
+ case GX_VA_CLR1: {
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
+ array[vtxAttr->mAttrib - GX_VA_POS] =
+ mVertexData->getVtxColorArray(vtxAttr->mAttrib - GX_VA_CLR0);
+ } break;
+ case GX_VA_TEX0:
+ case GX_VA_TEX1:
+ case GX_VA_TEX2:
+ case GX_VA_TEX3:
+ case GX_VA_TEX4:
+ case GX_VA_TEX5:
+ case GX_VA_TEX6:
+ case GX_VA_TEX7: {
+ if (vtxAttr->mCompType == GX_F32)
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x08;
+ else
+ stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
+ array[vtxAttr->mAttrib - GX_VA_POS] =
+ mVertexData->getVtxTexCoordArray(vtxAttr->mAttrib - GX_VA_TEX0);
+ } break;
+ default:
+ break;
+ }
+ }
+
+ GXVtxDescList* vtxDesc = mVtxDesc;
+ mHasPNMTXIdx = false;
+ for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
+ if (vtxDesc->attr == GX_VA_NBT && vtxDesc->type != GX_NONE) {
+ mHasNBT = true;
+ stride[GX_VA_NRM - GX_VA_POS] *= 3;
+ array[GX_VA_NRM - GX_VA_POS] = mVertexData->getVtxNBTArray();
+ } else if (vtxDesc->attr == GX_VA_PNMTXIDX && vtxDesc->type != GX_NONE) {
+ mHasPNMTXIdx = true;
+ }
+ }
+
+ for (u32 i = 0; i < 0x0C; i++) {
+ if (array[i] != 0)
+ GDSetArray((GXAttr)(i + GX_VA_POS), array[i], stride[i]);
+ else
+ GDSetArrayRaw((GXAttr)(i + GX_VA_POS), NULL, stride[i]);
+ }
+}
+
+/* ############################################################################################## */
+/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */
+static s32 sInterruptFlag;
+
+/* 804515CC-804515D0 000ACC 0004+00 1/1 0/0 0/0 .sbss None */
+static s8 sInitInterruptFlag;
+
+/* 80315260-80315300 30FBA0 00A0+00 1/1 2/2 0/0 .text makeVcdVatCmd__8J3DShapeFv */
+void J3DShape::makeVcdVatCmd() {
+ if (!sInitInterruptFlag) {
+ sInterruptFlag = OSDisableInterrupts();
+ sInitInterruptFlag = true;
+ }
+ OSDisableScheduler();
+
+ GDLObj gdl_obj;
+ GDInitGDLObj(&gdl_obj, mVcdVatCmd, kVcdVatDLSize);
+ GDSetCurrent(&gdl_obj);
+ GDSetVtxDescv(mVtxDesc);
+ makeVtxArrayCmd();
+ J3DGDSetVtxAttrFmtv(GX_VTXFMT0, mVertexData->getVtxAttrFmtList(), mHasNBT);
+ GDPadCurr32();
+ GDFlushCurrToMem();
+ GDSetCurrent(NULL);
+ OSEnableScheduler();
+ OSRestoreInterrupts(sInterruptFlag);
+}
+
+/* ############################################################################################## */
+/* 804515D0-804515D4 000AD0 0004+00 5/5 25/25 9/9 .sbss sOldVcdVatCmd__8J3DShape */
+void* J3DShape::sOldVcdVatCmd;
+
+/* 80315300-80315398 30FC40 0098+00 2/2 6/6 3/3 .text loadPreDrawSetting__8J3DShapeCFv */
+void J3DShape::loadPreDrawSetting() const {
+ if (sOldVcdVatCmd != mVcdVatCmd) {
+ GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
+ sOldVcdVatCmd = mVcdVatCmd;
+ }
+
+ mCurrentMtx.load();
+}
+
+/* ############################################################################################## */
+/* 804515D4-804515D8 000AD4 0004+00 3/3 0/0 0/0 .sbss None */
+static u8 data_804515D4[4];
+
+/* 80315398-8031544C 30FCD8 00B4+00 1/1 0/0 0/0 .text setArrayAndBindPipeline__8J3DShapeCFv */
+void J3DShape::setArrayAndBindPipeline() const {
+ J3DShapeMtx::setCurrentPipeline(getPipeline());
+ loadVtxArray();
+ j3dSys.setModelDrawMtx(mDrawMtx[*mCurrentViewNo]);
+ j3dSys.setModelNrmMtx(mNrmMtx[*mCurrentViewNo]);
+ J3DShapeMtx::sCurrentScaleFlag = mScaleFlagArray;
+ // The below struct_804515B0 is actually a continuation of sCurrentScaleFlag, I believe?
+ // Also, there seems to be an extra entry in the array that's only there in DEBUG builds.
+ J3DShapeMtx::sNBTFlag = mHasNBT;
+ data_804515D4[0] = mHasPNMTXIdx;
+ J3DShapeMtx::sTexMtxLoadType = getTexMtxLoadType();
+}
+
+/* 8031544C-803155E0 30FD8C 0194+00 1/0 0/0 0/0 .text drawFast__8J3DShapeCFv */
+void J3DShape::drawFast() const {
+ if (sOldVcdVatCmd != mVcdVatCmd) {
+ GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
+ sOldVcdVatCmd = mVcdVatCmd;
+ }
+
+ if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
+ mCurrentMtx.load();
+
+ setArrayAndBindPipeline();
+ if (!checkFlag(J3DShpFlag_NoMtx)) {
+ // LOD flag shenanigans
+ if (J3DShapeMtx::getLODFlag() != 0)
+ J3DShapeMtx::resetMtxLoadCache();
+
+ for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
+ if (getShapeMtx(i) != NULL)
+ getShapeMtx(i)->load();
+ if (getShapeDraw(i) != NULL)
+ getShapeDraw(i)->draw();
+ }
+ } else {
+ J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
+ J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
+ for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
+ if (getShapeDraw(i) != NULL)
+ getShapeDraw(i)->draw();
+ }
+}
+
+/* 803155E0-80315628 30FF20 0048+00 1/0 0/0 0/0 .text draw__8J3DShapeCFv */
+void J3DShape::draw() const {
+ sOldVcdVatCmd = NULL;
+ loadPreDrawSetting();
+ drawFast();
+}
+
+/* 80315628-803156AC 30FF68 0084+00 1/0 0/0 0/0 .text simpleDraw__8J3DShapeCFv */
+void J3DShape::simpleDraw() const {
+ resetVcdVatCache();
+ loadPreDrawSetting();
+ J3DShapeMtx::setCurrentPipeline(getPipeline());
+ loadVtxArray();
+ for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
+ if (getShapeDraw(i) != NULL) {
+ getShapeDraw(i)->draw();
+ }
+ }
+}
+
+/* 803156AC-803157A0 30FFEC 00F4+00 1/0 0/0 0/0 .text simpleDrawCache__8J3DShapeCFv */
+void J3DShape::simpleDrawCache() const {
+ if (sOldVcdVatCmd != mVcdVatCmd) {
+ GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
+ sOldVcdVatCmd = mVcdVatCmd;
+ }
+
+ if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
+ mCurrentMtx.load();
+
+ loadVtxArray();
+ for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
+ if (getShapeDraw(i) != NULL)
+ getShapeDraw(i)->draw();
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp b/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp
new file mode 100644
index 0000000000..61efef6fa8
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DShapeDraw.cpp
@@ -0,0 +1,100 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DShapeDraw
+//
+
+#include "JSystem/J3DGraphBase/J3DShapeDraw.h"
+#include "string.h"
+#include "dolphin/gx.h"
+#include "dolphin/os/OSCache.h"
+#include "global.h"
+
+//
+// External References:
+//
+
+extern "C" void countVertex__12J3DShapeDrawFUl();
+extern "C" void* __nwa__FUli();
+extern "C" void __dl__FPv();
+extern "C" void _savegpr_18();
+extern "C" void _restgpr_18();
+
+/* 80314924-80314974 30F264 0050+00 1/1 0/0 0/0 .text countVertex__12J3DShapeDrawFUl */
+u32 J3DShapeDraw::countVertex(u32 stride) {
+ u32 count = 0;
+ u32 dlStart = (u32)getDisplayList();
+ for (u8* dl = (u8*)dlStart; ((u32)dl - dlStart) < getDisplayListSize();) {
+ if (*dl != GX_TRIANGLEFAN && *dl != GX_TRIANGLESTRIP)
+ break;
+ u16 vtxNum = *((u16*)(dl + 1));
+ count += vtxNum;
+ dl += stride * vtxNum;
+ dl += 3;
+ }
+ return count;
+}
+
+#ifdef NONMATCHING
+/* 80314974-80314ABC 30F2B4 0148+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl */
+void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
+ u32 byteNum = countVertex(stride);
+ u32 newSize = ALIGN_NEXT(mDisplayListSize + byteNum, 0x20);
+ u8* newDLStart = new (0x20) u8[newSize];
+ u8* oldDLStart = getDisplayList();
+ u8* oldDL = oldDLStart;
+ u8* newDL = newDLStart;
+ for (; (oldDL - oldDLStart) < mDisplayListSize;) {
+ // Copy command
+ u8 h = *oldDL;
+ *newDL++ = h;
+
+ if (h != GX_TRIANGLEFAN && h != GX_TRIANGLESTRIP)
+ break;
+
+ // Copy count
+ // regalloc (I suspect there's a way to shove this in a u16 temp without an mr)
+ u32 vtxNum = *((u16*)(oldDL + 1));
+ *((u16*)newDL) = vtxNum;
+ newDL += 2;
+
+ for (s32 i = 0; i < (u16)vtxNum; i++) {
+ // mul arg swap
+ u8* oldDLVtx = (&oldDL[stride * i + 3]);
+ u8 pnmtxidx = *oldDLVtx;
+ memcpy(newDL, oldDLVtx, attrOffs);
+ u8* newDL1 = &newDL[attrOffs];
+ *newDL1++ = valueBase + pnmtxidx;
+ memcpy(newDL1, oldDLVtx + attrOffs, stride - attrOffs);
+ newDL = newDL1 + (stride - attrOffs);
+ }
+
+ oldDL += stride * vtxNum;
+ oldDL += 3;
+ }
+
+ u32 realSize = ALIGN_NEXT((u32)newDL - (u32)newDLStart, 0x20);
+ for (; (newDL - newDLStart) < newSize; newDL++)
+ *newDL = 0;
+ mDisplayListSize = realSize;
+ mDisplayList = newDLStart;
+ DCStoreRange(newDLStart, mDisplayListSize);
+}
+#else
+void J3DShapeDraw::addTexMtxIndexInDL(u32 param_0, u32 param_1, u32 param_2) {
+ // NONMATCHING
+}
+#endif
+
+/* 80314ABC-80314AD4 30F3FC 0018+00 0/0 1/1 0/0 .text __ct__12J3DShapeDrawFPCUcUl */
+J3DShapeDraw::J3DShapeDraw(u8 const* displayList, u32 displayListSize) {
+ mDisplayList = (void*)displayList;
+ mDisplayListSize = displayListSize;
+}
+
+/* 80314AD4-80314B00 30F414 002C+00 0/0 3/3 0/0 .text draw__12J3DShapeDrawCFv */
+void J3DShapeDraw::draw() const {
+ GXCallDisplayList(mDisplayList, mDisplayListSize);
+}
+
+/* 80314B00-80314B48 30F440 0048+00 1/0 0/0 0/0 .text __dt__12J3DShapeDrawFv */
+J3DShapeDraw::~J3DShapeDraw() {} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp
new file mode 100644
index 0000000000..591b917e8c
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp
@@ -0,0 +1,760 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DShapeMtx
+//
+
+#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
+#include "JSystem/J3DGraphAnimator/J3DModel.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
+#include "dol2asm.h"
+#include "dolphin/types.h"
+
+//
+// Forward References:
+//
+
+extern "C" void resetMtxLoadCache__11J3DShapeMtxFv();
+extern "C" void loadMtxIndx_PNGP__11J3DShapeMtxCFiUs();
+extern "C" void loadMtxIndx_PCPU__11J3DShapeMtxCFiUs();
+extern "C" void loadMtxIndx_NCPU__11J3DShapeMtxCFiUs();
+extern "C" void loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs();
+extern "C" void loadExecute__17J3DDifferedTexMtxFPA4_Cf();
+extern "C" void loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void load__11J3DShapeMtxCFv();
+extern "C" void calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f();
+extern "C" void load__21J3DShapeMtxConcatViewCFv();
+extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f();
+extern "C" void load__16J3DShapeMtxMultiCFv();
+extern "C" void calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f();
+extern "C" void load__26J3DShapeMtxMultiConcatViewCFv();
+extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f();
+extern "C" void load__27J3DShapeMtxBBoardConcatViewCFv();
+extern "C" void load__28J3DShapeMtxYBBoardConcatViewCFv();
+extern "C" void __dt__28J3DShapeMtxYBBoardConcatViewFv();
+extern "C" void getType__28J3DShapeMtxYBBoardConcatViewCFv();
+extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUs();
+extern "C" void getUseMtxIndex__11J3DShapeMtxCFUs();
+extern "C" void __dt__27J3DShapeMtxBBoardConcatViewFv();
+extern "C" void getType__27J3DShapeMtxBBoardConcatViewCFv();
+extern "C" void __dt__26J3DShapeMtxMultiConcatViewFv();
+extern "C" void getType__26J3DShapeMtxMultiConcatViewCFv();
+extern "C" void getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv();
+extern "C" void getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs();
+extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs();
+extern "C" void __dt__16J3DShapeMtxMultiFv();
+extern "C" void getType__16J3DShapeMtxMultiCFv();
+extern "C" void getUseMtxNum__16J3DShapeMtxMultiCFv();
+extern "C" void getUseMtxIndex__16J3DShapeMtxMultiCFUs();
+extern "C" void __dt__21J3DShapeMtxConcatViewFv();
+extern "C" void getType__21J3DShapeMtxConcatViewCFv();
+extern "C" void __dt__11J3DShapeMtxFv();
+extern "C" void getType__11J3DShapeMtxCFv();
+extern "C" void __sinit_J3DShapeMtx_cpp();
+extern "C" u8 sMtxLoadPipeline__11J3DShapeMtx[48];
+extern "C" u8 sMtxLoadPipeline__21J3DShapeMtxConcatView[48];
+extern "C" u8 sMtxLoadLODPipeline__21J3DShapeMtxConcatView[48];
+extern "C" u8 sMtxLoadCache__11J3DShapeMtx[20 + 4 /* padding */];
+extern "C" u8 sCurrentPipeline__11J3DShapeMtx[4];
+extern "C" u8 sCurrentScaleFlag__11J3DShapeMtx[4];
+extern "C" u8 sTexMtxLoadType__11J3DShapeMtx[4];
+extern "C" u8 sMtxPtrTbl__21J3DShapeMtxConcatView[8];
+extern "C" u8 sTexGenBlock__17J3DDifferedTexMtx[4];
+extern "C" u8 sTexMtxObj__17J3DDifferedTexMtx[4];
+
+//
+// External References:
+//
+
+void J3DFifoLoadPosMtxImm(Mtx, u32);
+void J3DFifoLoadNrmMtxImm(Mtx, u32);
+void J3DFifoLoadNrmMtxImm3x3(Mtx33, u32);
+void J3DFifoLoadNrmMtxToTexMtx(Mtx, u32);
+void J3DFifoLoadNrmMtxToTexMtx33(Mtx33, u32);
+
+extern "C" bool getUseMtxNum__11J3DShapeMtxCFv();
+extern "C" void __dl__FPv();
+extern "C" void J3DFifoLoadPosMtxImm__FPA4_fUl();
+extern "C" void J3DFifoLoadNrmMtxImm__FPA4_fUl();
+extern "C" void J3DFifoLoadNrmMtxImm3x3__FPA3_fUl();
+extern "C" void J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl();
+extern "C" void J3DFifoLoadNrmMtxToTexMtx3x3__FPA3_fUl();
+extern "C" void loadPosMtxIndx__6J3DSysCFiUs();
+extern "C" void loadNrmMtxIndx__6J3DSysCFiUs();
+extern "C" void J3DCalcBBoardMtx__FPA4_f();
+extern "C" void J3DCalcYBBoardMtx__FPA4_f();
+extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
+extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f();
+extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f();
+extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f();
+extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f();
+extern "C" void J3DScaleNrmMtx__FPA4_fRC3Vec();
+extern "C" void J3DScaleNrmMtx33__FPA3_fRC3Vec();
+extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f();
+extern "C" void __ptmf_scall();
+extern "C" void _savegpr_22();
+extern "C" void _savegpr_25();
+extern "C" void _savegpr_27();
+extern "C" void _savegpr_28();
+extern "C" void _savegpr_29();
+extern "C" void _restgpr_22();
+extern "C" void _restgpr_25();
+extern "C" void _restgpr_27();
+extern "C" void _restgpr_28();
+extern "C" void _restgpr_29();
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+/* 80434C80-80434C98 0619A0 0014+04 2/2 0/0 0/0 .bss sMtxLoadCache__11J3DShapeMtx */
+u16 J3DShapeMtx::sMtxLoadCache[10 + 2 /* padding */];
+
+/* 803130A8-803130E4 30D9E8 003C+00 0/0 1/1 0/0 .text resetMtxLoadCache__11J3DShapeMtxFv
+ */
+void J3DShapeMtx::resetMtxLoadCache() {
+ sMtxLoadCache[9] = 0xFFFF;
+ sMtxLoadCache[8] = 0xFFFF;
+ sMtxLoadCache[7] = 0xFFFF;
+ sMtxLoadCache[6] = 0xFFFF;
+ sMtxLoadCache[5] = 0xFFFF;
+ sMtxLoadCache[4] = 0xFFFF;
+ sMtxLoadCache[3] = 0xFFFF;
+ sMtxLoadCache[2] = 0xFFFF;
+ sMtxLoadCache[1] = 0xFFFF;
+ sMtxLoadCache[0] = 0xFFFF;
+}
+
+/* 803130E4-80313128 30DA24 0044+00 1/0 0/0 0/0 .text loadMtxIndx_PNGP__11J3DShapeMtxCFiUs */
+void J3DShapeMtx::loadMtxIndx_PNGP(int slot, u16 indx) const {
+ // inlined J3DFifoLoadPosMtxIndx
+ J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, indx, 0xB000 | ((u16)(slot * 0x0C)));
+ // inlined J3DFifoLoadNrmMtxIndx3x3
+ J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, indx, 0x8000 | ((u16)((slot * 0x09) + 0x400)));
+}
+
+/* 80313128-80313188 30DA68 0060+00 1/0 0/0 0/0 .text loadMtxIndx_PCPU__11J3DShapeMtxCFiUs */
+void J3DShapeMtx::loadMtxIndx_PCPU(int slot, u16 indx) const {
+ J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ j3dSys.loadNrmMtxIndx(slot, indx);
+}
+
+/* 80313188-803131D4 30DAC8 004C+00 1/0 0/0 0/0 .text loadMtxIndx_NCPU__11J3DShapeMtxCFiUs */
+void J3DShapeMtx::loadMtxIndx_NCPU(int slot, u16 indx) const {
+ j3dSys.loadPosMtxIndx(slot, indx);
+ J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+}
+
+/* 803131D4-8031322C 30DB14 0058+00 1/0 0/0 0/0 .text loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs */
+void J3DShapeMtx::loadMtxIndx_PNCPU(int slot, u16 indx) const {
+ J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+}
+
+/* 803CD9C0-803CD9F0 02AAE0 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__11J3DShapeMtx */
+J3DShapeMtx_LoadFunc J3DShapeMtx::sMtxLoadPipeline[4] = {
+ &loadMtxIndx_PNGP,
+ &loadMtxIndx_PCPU,
+ &loadMtxIndx_NCPU,
+ &loadMtxIndx_PNCPU,
+};
+
+/* 803CDA20-803CDA50 02AB40 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__21J3DShapeMtxConcatView */
+J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadPipeline[4] = {
+ &loadMtxConcatView_PNGP,
+ &loadMtxConcatView_PCPU,
+ &loadMtxConcatView_NCPU,
+ &loadMtxConcatView_PNCPU,
+};
+
+/* 803CDA80-803CDAB0 02ABA0 0030+00 1/2 0/0 0/0 .data sMtxLoadLODPipeline__21J3DShapeMtxConcatView
+ */
+J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadLODPipeline[4] = {
+ &loadMtxConcatView_PNGP_LOD,
+ &loadMtxConcatView_PCPU,
+ &loadMtxConcatView_NCPU,
+ &loadMtxConcatView_PNCPU,
+};
+
+#ifndef NONMATCHING
+/* 803CDAB0-803CDAE0 02ABD0 0030+00 1/1 0/0 0/0 .data qMtx$895 */
+SECTION_DATA static u8 qMtx[48] = {
+ 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* 803CDAE0-803CDB10 02AC00 0030+00 1/1 0/0 0/0 .data qMtx2$896 */
+SECTION_DATA static u8 qMtx2[48] = {
+ 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* 803CDB10-803CDB40 -00001 0030+00 1/1 0/0 0/0 .data @1035 */
+SECTION_DATA static void* lit_1035[12] = {
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3DC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x510),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x46C),
+};
+
+/* 803CDB40-803CDB70 -00001 0030+00 1/1 0/0 0/0 .data @1034 */
+SECTION_DATA static void* lit_1034[12] = {
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x110),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x224),
+ (void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x190),
+};
+#endif
+
+/* 804515A8-804515AC 000AA8 0004+00 4/4 2/2 0/0 .sbss sCurrentPipeline__11J3DShapeMtx */
+u32 J3DShapeMtx::sCurrentPipeline;
+
+/* 804515AC-804515B0 000AAC 0004+00 3/3 1/1 0/0 .sbss sCurrentScaleFlag__11J3DShapeMtx */
+u8* J3DShapeMtx::sCurrentScaleFlag;
+
+// This below is technically part of J3DScaleFlag.
+
+/* 804515B0-804515B4 -00001 0004+00 5/5 3/3 0/0 .sbss None */
+/* 804515B0 0001+00 data_804515B0 None */
+/* 804515B1 0003+00 data_804515B1 None */
+extern u8 struct_804515B0; // temporary
+u8 J3DShapeMtx::sNBTFlag;
+u8 J3DShapeMtx::sLODFlag;
+
+/* 804515B4-804515B8 000AB4 0004+00 4/4 1/1 0/0 .sbss sTexMtxLoadType__11J3DShapeMtx */
+u32 J3DShapeMtx::sTexMtxLoadType;
+
+/* 804515B8-804515C0 000AB8 0008+00 2/2 0/0 0/0 .sbss sMtxPtrTbl__21J3DShapeMtxConcatView
+ */
+MtxP J3DShapeMtxConcatView::sMtxPtrTbl[2];
+
+/* 804515C0-804515C4 000AC0 0004+00 6/6 2/2 0/0 .sbss sTexGenBlock__17J3DDifferedTexMtx
+ */
+J3DTexGenBlock* J3DDifferedTexMtx::sTexGenBlock;
+
+/* 804515C4-804515C8 000AC4 0004+00 1/1 2/2 0/0 .sbss sTexMtxObj__17J3DDifferedTexMtx */
+J3DTexMtxObj* J3DDifferedTexMtx::sTexMtxObj;
+
+/* 80456398-8045639C 004998 0004+00 2/2 0/0 0/0 .sdata2 @1032 */
+SECTION_SDATA2 static u8 lit_1032[4] = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+};
+
+/* 8031322C-80313828 30DB6C 05FC+00 7/5 0/0 0/0 .text loadExecute__17J3DDifferedTexMtxFPA4_Cf */
+#ifdef NONMATCHING
+void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
+// regalloc
+ static Mtx qMtx = {
+ {0.5f, 0.0f, 0.5f, 0.0f},
+ {0.0f, -0.5f, 0.5f, 0.0f},
+ {0.0f, 0.0f, 1.0f, 0.0f},
+ };
+ static Mtx qMtx2 = {
+ {0.5f, 0.0f, 0.0f, 0.5f},
+ {0.0f, -0.5f, 0.0f, 0.5f},
+ {0.0f, 0.0f, 1.0f, 0.0f}
+ };
+ J3DTexCoord* tex_coord;
+ J3DTexMtx* tex_mtx;
+ Mtx* mtx;
+ Mtx44* eff_mtx;
+ Mtx tmp2;
+ Mtx44 tmp1, tmp0;
+ J3DTexMtxInfo* tex_mtx_info;
+ J3DTexGenBlock* tex_gen_block = sTexGenBlock;
+ J3DTexMtxObj* tex_mtx_obj = sTexMtxObj;
+ u16 tex_mtx_num = tex_mtx_obj->getNumTexMtx();
+ if ((j3dSys.checkFlag(J3DSysFlag_PostTexMtx))) {
+ for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
+ tex_coord = tex_gen_block->getTexCoord(i);
+ int tex_gen_type = tex_coord->getTexGenType();
+ if (tex_gen_type == 1 || tex_gen_type == 0) {
+ tex_mtx = tex_gen_block->getTexMtx(i);
+ u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo;
+ u32 unk;
+ switch (tex_gen_src & 0x3f) {
+ case 3:
+ case 9:
+ Mtx& tmp5 = tex_mtx_obj->getMtx(i);
+ mtx = &tmp5;
+ break;
+ case 1:
+ case 6:
+ case 7:
+ Mtx& tmp6 = tex_mtx_obj->getMtx(i);
+ mtx = &tmp6;
+ break;
+ case 2:
+ case 8:
+ PSMTXInverse(j3dSys.mViewMtx, tmp2);
+ PSMTXConcat(tex_mtx_obj->getMtx(i), tmp2, tmp2);
+ mtx = &tmp2;
+ break;
+ case 5:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ case 10:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ PSMTXConcat(tmp0, qMtx2, tmp0);
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ case 11:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ PSMTXConcat(tmp0, qMtx, tmp0);
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ default:
+ Mtx& tmp7 = tex_mtx_obj->getMtx(i);
+ mtx = &tmp7;
+ break;
+ }
+ GXLoadTexMtxImm(*mtx, i * 3 + 0x40, GX_MTX3x4);
+ }
+ }
+ } else {
+ for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
+ int tex_gen_type = tex_gen_block->getTexCoord(i)->getTexGenType();
+ if (tex_gen_type == 1 || tex_gen_type == 0) {
+ tex_mtx = tex_gen_block->getTexMtx(i);
+ u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo;
+ u32 unk;
+ switch (tex_gen_src & 0x3f) {
+ case 3:
+ case 9:
+ PSMTXConcat(tex_mtx_obj->getMtx(i), param_0, tmp2);
+ mtx = &tmp2;
+ break;
+ case 1:
+ case 6:
+ case 7:
+ PSMTXCopy(param_0, tmp1);
+ tmp1[2][3] = 0.0f;
+ tmp1[1][3] = 0.0f;
+ tmp1[0][3] = 0.0f;
+ PSMTXConcat(tex_mtx_obj->getMtx(i), tmp1, tmp2);
+ mtx = &tmp2;
+ break;
+ case 2:
+ case 8:
+ mtx = &tex_mtx_obj->getMtx(i);
+ break;
+ case 5:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ PSMTXConcat(tmp2, param_0, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ case 10:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ PSMTXConcat(tmp0, qMtx2, tmp0);
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ PSMTXConcat(tmp2, param_0, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ case 11:
+ tex_mtx_info = &tex_mtx->getTexMtxInfo();
+ unk = (tex_gen_src & 0x80) >> 7;
+ if (unk == 0) {
+ J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
+ } else if (unk == 1) {
+ J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
+ }
+ PSMTXConcat(tmp0, qMtx, tmp0);
+ eff_mtx = &tex_mtx_obj->getEffectMtx(i);
+ J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
+ PSMTXInverse(j3dSys.mViewMtx, tmp1);
+ PSMTXConcat(tmp2, tmp1, tmp2);
+ PSMTXConcat(tmp2, param_0, tmp2);
+ tmp2[2][3] = 0.0f;
+ tmp2[1][3] = 0.0f;
+ tmp2[0][3] = 0.0f;
+ mtx = &tmp2;
+ break;
+ default:
+ mtx = &tex_mtx_obj->getMtx(i);
+ break;
+ }
+ GXLoadTexMtxImm(*mtx, i * 3 + 0x1e,
+ (GXTexMtxType)tex_mtx->getTexMtxInfo().mProjection);
+ }
+ }
+ }
+}
+#else
+void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
+ // NONMATCHING
+}
+#endif
+
+/* 80313828-803138C8 30E168 00A0+00 1/0 0/0 0/0 .text
+ * loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs */
+void J3DShapeMtxConcatView::loadMtxConcatView_PNGP(int slot, u16 drw) const {
+ Mtx m;
+ MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
+ J3DDifferedTexMtx::load(m);
+ J3DFifoLoadPosMtxImm(m, slot * 3);
+ loadNrmMtx(slot, drw, m);
+}
+
+/* 803138C8-8031396C 30E208 00A4+00 2/0 0/0 0/0 .text
+ * loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs */
+void J3DShapeMtxConcatView::loadMtxConcatView_PCPU(int slot, u16 drw) const {
+ Mtx m;
+ MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
+ J3DDifferedTexMtx::load(m);
+ J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ loadNrmMtx(slot, drw, m);
+}
+
+/* 8031396C-80313A14 30E2AC 00A8+00 2/0 0/0 0/0 .text
+ * loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs */
+void J3DShapeMtxConcatView::loadMtxConcatView_NCPU(int slot, u16 drw) const {
+ Mtx m;
+ MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
+ J3DDifferedTexMtx::load(m);
+ J3DFifoLoadPosMtxImm(m, slot * 3);
+ J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ if (J3DShapeMtx::sTexMtxLoadType == 0x2000)
+ J3DFifoLoadNrmMtxToTexMtx(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3 + GX_TEXMTX0);
+}
+
+/* 80313A14-80313AC8 30E354 00B4+00 2/0 0/0 0/0 .text
+ * loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs */
+void J3DShapeMtxConcatView::loadMtxConcatView_PNCPU(int slot, u16 drw) const {
+ Mtx m;
+ if (J3DDifferedTexMtx::sTexGenBlock != NULL) {
+ MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
+ J3DDifferedTexMtx::loadExecute(m);
+ }
+ J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
+ if (J3DShapeMtx::sTexMtxLoadType == 0x2000)
+ J3DFifoLoadNrmMtxToTexMtx(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3 + GX_TEXMTX0);
+}
+
+/* 80313AC8-80313B94 30E408 00CC+00 1/0 0/0 0/0 .text
+ * loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs */
+void J3DShapeMtxConcatView::loadMtxConcatView_PNGP_LOD(int slot, u16 drw) const {
+ Mtx m;
+ MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
+ MTXConcat(m, j3dSys.mModel->getModelData()->getInvJointMtx(drw), m);
+ J3DDifferedTexMtx::load(m);
+ J3DFifoLoadPosMtxImm(m, slot * 3);
+ loadNrmMtx(slot, drw, m);
+}
+
+/* 80313B94-80313BF0 30E4D4 005C+00 1/0 0/0 0/0 .text load__11J3DShapeMtxCFv */
+void J3DShapeMtx::load() const {
+ J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
+ (this->*func)(0, mUseMtxIndex);
+}
+
+/* 80313BF0-80313C54 30E530 0064+00 5/0 0/0 0/0 .text
+ * calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f */
+void J3DShapeMtx::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
+ J3DPSMtx33Copy(param_1[mUseMtxIndex], param_2[mUseMtxIndex]);
+ J3DScaleNrmMtx33(param_2[mUseMtxIndex], param_0);
+}
+
+/* 80313C54-80313D28 30E594 00D4+00 1/0 0/0 0/0 .text load__21J3DShapeMtxConcatViewCFv */
+void J3DShapeMtxConcatView::load() const {
+ sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
+ sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
+ J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
+ u32 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
+ j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
+ u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
+ (this->*func)(0, draw_mtx_index);
+}
+
+/* 80313D28-80313E4C 30E668 0124+00 3/0 0/0 0/0 .text
+ * loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f */
+void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
+ if (sCurrentScaleFlag[param_1] == 1) {
+ if (sTexMtxLoadType == 0x2000) {
+ J3DFifoLoadNrmMtxToTexMtx(param_2, 0x1e);
+ }
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm(param_2, 0);
+ } else {
+ Mtx33 mtx;
+ Vec* scale = j3dSys.getNBTScale();
+ J3DPSMtx33CopyFrom34(param_2, mtx);
+ J3DScaleNrmMtx33(mtx, *scale);
+ J3DFifoLoadNrmMtxImm3x3(mtx, 0);
+ }
+ } else {
+ Mtx33 mtx;
+ J3DPSCalcInverseTranspose(param_2, mtx);
+ if (sTexMtxLoadType == 0x2000) {
+ J3DFifoLoadNrmMtxToTexMtx3x3(mtx, 0x1e);
+ }
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm3x3(mtx, 0);
+ } else {
+ Vec* scale = j3dSys.getNBTScale();
+ J3DScaleNrmMtx33(mtx, *scale);
+ J3DFifoLoadNrmMtxImm3x3(mtx, 0);
+ }
+ }
+}
+
+/* 80313E4C-80313EEC 30E78C 00A0+00 1/0 0/0 0/0 .text load__16J3DShapeMtxMultiCFv */
+void J3DShapeMtxMulti::load() const {
+ J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
+ int use_mtx_num = mUseMtxNum;
+ for (int i = 0; i < use_mtx_num; i++) {
+ u16 use_mtx_index = mUseMtxIndexTable[i];
+ if (use_mtx_index != 0xffff) {
+ (this->*func)(i, use_mtx_index);
+ }
+ }
+}
+
+/* 80313EEC-80313FA4 30E82C 00B8+00 1/0 0/0 0/0 .text
+ * calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f */
+void J3DShapeMtxMulti::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
+ int use_mtx_num = mUseMtxNum;
+ for (int i = 0; i < use_mtx_num; i++) {
+ u16 use_mtx_index = mUseMtxIndexTable[i];
+ if (use_mtx_index != 0xffff) {
+ J3DPSMtx33Copy(param_1[use_mtx_index], param_2[use_mtx_index]);
+ J3DScaleNrmMtx33(param_2[mUseMtxIndexTable[i]], param_0);
+ }
+ }
+}
+
+/* 80313FA4-8031419C 30E8E4 01F8+00 1/0 0/0 0/0 .text load__26J3DShapeMtxMultiConcatViewCFv */
+void J3DShapeMtxMultiConcatView::load() const {
+ sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
+ sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
+ if (!sLODFlag) {
+ J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
+ int use_mtx_num = mUseMtxNum;
+ for (int i = 0; i < use_mtx_num; i++) {
+ u16 use_mtx_index = mUseMtxIndexTable[i];
+ if (use_mtx_index != 0xffff) {
+ u16 draw_mtx_index =
+ j3dSys.getModel()->getModelData()->getDrawMtxIndex(use_mtx_index);
+ u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
+ j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
+ (this->*func)(i, draw_mtx_index);
+ }
+ }
+ } else {
+ u16* important_mtx_indices = j3dSys.getModel()->getModelData()->getWEvlpImportantMtxIndex();
+ j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[0]);
+ int use_mtx_num = mUseMtxNum;
+ for (int i = 0; i < use_mtx_num; i++) {
+ u32 current_pipeline = sCurrentPipeline;
+ J3DShapeMtxConcatView_LoadFunc func = sMtxLoadLODPipeline[current_pipeline];
+ u16 use_mtx_index = mUseMtxIndexTable[i];
+ if (use_mtx_index != 0xffff) {
+ u16 important_mtx_index = important_mtx_indices[use_mtx_index];
+ if (important_mtx_index != sMtxLoadCache[i]) {
+ u8 draw_mtx_flag =
+ j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
+ if (draw_mtx_flag == 0) {
+ func = sMtxLoadPipeline[current_pipeline];
+ }
+ (this->*func)(i, important_mtx_index);
+ sMtxLoadCache[i] = important_mtx_index;
+ }
+ }
+ }
+ }
+}
+
+/* 8031419C-803142D4 30EADC 0138+00 1/0 0/0 0/0 .text
+ * loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f */
+void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
+ Mtx33 mtx1, mtx2;
+ if (sCurrentScaleFlag[param_1] == 1) {
+ if (sTexMtxLoadType == 0x2000) {
+ J3DFifoLoadNrmMtxToTexMtx(param_2, param_0 * 3 + 0x1e);
+ }
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm(param_2, param_0 * 3);
+ } else {
+ Vec* nbt_scale = j3dSys.getNBTScale();
+ J3DPSMtx33CopyFrom34(param_2, mtx1);
+ J3DScaleNrmMtx33(mtx1, *nbt_scale);
+ J3DFifoLoadNrmMtxImm3x3(mtx1, 0);
+ }
+ } else {
+ J3DPSCalcInverseTranspose(param_2, mtx2);
+ if (sTexMtxLoadType == 0x2000) {
+ J3DFifoLoadNrmMtxToTexMtx3x3(mtx2, param_0 * 3 + 0x1e);
+ }
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
+ } else {
+ Vec* nbt_scale = j3dSys.getNBTScale();
+ J3DScaleNrmMtx33(mtx2, *nbt_scale);
+ J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
+ }
+ }
+}
+
+/* 803142D4-803143E4 30EC14 0110+00 1/0 0/0 0/0 .text load__27J3DShapeMtxBBoardConcatViewCFv */
+void J3DShapeMtxBBoardConcatView::load() const {
+ Mtx mtx;
+ u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
+ u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
+ if (draw_mtx_flag == 0) {
+ MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
+ PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx);
+ } else {
+ MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
+ PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx);
+ }
+ J3DCalcBBoardMtx(mtx);
+ J3DFifoLoadPosMtxImm(mtx, 0);
+ mtx[0][0] = 1.0f / mtx[0][0];
+ mtx[1][1] = 1.0f / mtx[1][1];
+ mtx[2][2] = 1.0f / mtx[2][2];
+ mtx[0][3] = FLOAT_LABEL(lit_1032); // 0.0f;
+ mtx[1][3] = FLOAT_LABEL(lit_1032); // 0.0f;
+ mtx[2][3] = FLOAT_LABEL(lit_1032); // 0.0f;
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm(mtx, 0);
+ } else {
+ Vec* nbt_scale = j3dSys.getNBTScale();
+ J3DScaleNrmMtx(mtx, *nbt_scale);
+ J3DFifoLoadNrmMtxImm(mtx, 0);
+ }
+}
+
+/* 803143E4-80314520 30ED24 013C+00 1/0 0/0 0/0 .text load__28J3DShapeMtxYBBoardConcatViewCFv */
+void J3DShapeMtxYBBoardConcatView::load() const {
+ Mtx mtx1;
+ Mtx33 mtx2;
+ u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
+ u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
+ if (draw_mtx_flag == 0) {
+ MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
+ PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx1);
+ } else {
+ MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
+ PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx1);
+ }
+ J3DCalcYBBoardMtx(mtx1);
+ J3DFifoLoadPosMtxImm(mtx1, 0);
+ if (sCurrentScaleFlag[mUseMtxIndex] == 1) {
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm(mtx1, 0);
+ } else {
+ Vec* nbt_scale = j3dSys.getNBTScale();
+ J3DScaleNrmMtx(mtx1, *nbt_scale);
+ J3DFifoLoadNrmMtxImm(mtx1, 0);
+ }
+ } else {
+ J3DPSCalcInverseTranspose(mtx1, mtx2);
+ if (!sNBTFlag) {
+ J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
+ } else {
+ Vec* nbt_scale = j3dSys.getNBTScale();
+ J3DScaleNrmMtx33(mtx2, *nbt_scale);
+ J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
+ }
+ }
+}
+
+/* ############################################################################################## */
+/* 803CDB70-803CDB84 02AC90 0014+00 0/0 0/0 0/0 .data mtxCache$1263 */
+#pragma push
+#pragma force_active on
+SECTION_DATA static u8 mtxCache[20] = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+};
+#pragma pop \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DStruct.cpp b/src/JSystem/J3DGraphBase/J3DStruct.cpp
new file mode 100644
index 0000000000..8ee47fc799
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DStruct.cpp
@@ -0,0 +1,75 @@
+//
+// J3DStruct
+//
+
+#include "JSystem/J3DGraphBase/J3DStruct.h"
+#include "JSystem/JMath/JMath.h"
+
+/* 803256C4-80325718 320004 0054+00 0/0 11/11 24/24 .text __as__12J3DLightInfoFRC12J3DLightInfo */
+J3DLightInfo& J3DLightInfo::operator=(J3DLightInfo const& param_0) {
+ JMath::gekko_ps_copy6(&mLightPosition, &param_0.mLightPosition);
+ mColor = param_0.mColor;
+ JMath::gekko_ps_copy6(&mCosAtten, &param_0.mCosAtten);
+ return *this;
+}
+
+/* 80325718-80325794 320058 007C+00 0/0 4/4 0/0 .text __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo */
+J3DTexMtxInfo& J3DTexMtxInfo::operator=(J3DTexMtxInfo const& param_0) {
+ mProjection = param_0.mProjection;
+ mInfo = param_0.mInfo;
+ JMath::gekko_ps_copy3(&mCenter, &param_0.mCenter);
+ mSRT = param_0.mSRT;
+ JMath::gekko_ps_copy16(&mEffectMtx, &param_0.mEffectMtx);
+ return *this;
+}
+
+// Helper functions to set float literal order
+static f32 dummyLiteralOrder() {
+ return 1.0f;
+}
+
+/* 80325794-803257DC 3200D4 0048+00 0/0 2/2 7/7 .text setEffectMtx__13J3DTexMtxInfoFPA4_f
+ */
+void J3DTexMtxInfo::setEffectMtx(Mtx param_0) {
+ JMath::gekko_ps_copy12(&mEffectMtx, param_0);
+ register f32 zero = 0.0f;
+ register f32* mtx = (f32*)mEffectMtx;
+ asm {
+ psq_st zero, 0x30(mtx), 0, 0
+ };
+ mEffectMtx[3][2] = 0.0f;
+ mEffectMtx[3][3] = 1.0f;
+}
+
+/* 803257DC-80325800 32011C 0024+00 0/0 5/5 0/0 .text
+ * __as__16J3DIndTexMtxInfoFRC16J3DIndTexMtxInfo */
+J3DIndTexMtxInfo& J3DIndTexMtxInfo::operator=(J3DIndTexMtxInfo const& param_0) {
+ JMath::gekko_ps_copy6(field_0x0, param_0.field_0x0);
+ field_0x18 = param_0.field_0x18;
+ return *this;
+}
+
+/* 80325800-8032587C 320140 007C+00 0/0 6/6 0/0 .text __as__10J3DFogInfoFRC10J3DFogInfo
+ */
+J3DFogInfo& J3DFogInfo::operator=(J3DFogInfo const& param_0) {
+ mType = param_0.mType;
+ mAdjEnable = param_0.mAdjEnable;
+ mCenter = param_0.mCenter;
+ mStartZ = param_0.mStartZ;
+ mEndZ = param_0.mEndZ;
+ mNearZ = param_0.mNearZ;
+ mFarZ = param_0.mFarZ;
+ mColor = param_0.mColor;
+ for (int i = 0; i < 10; i++) {
+ mFogAdjTable.fogVals[i] = param_0.mFogAdjTable.fogVals[i];
+ }
+ return *this;
+}
+
+/* 8032587C-803258A0 3201BC 0024+00 0/0 6/6 0/0 .text __as__15J3DNBTScaleInfoFRC15J3DNBTScaleInfo
+ */
+J3DNBTScaleInfo& J3DNBTScaleInfo::operator=(J3DNBTScaleInfo const& param_0) {
+ mbHasScale = param_0.mbHasScale;
+ mScale = param_0.mScale;
+ return *this;
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp
new file mode 100644
index 0000000000..8e6e64f7ab
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DSys.cpp
@@ -0,0 +1,400 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DSys
+//
+
+#include "JSystem/J3DGraphBase/J3DSys.h"
+
+#include "dol2asm.h"
+#include "dolphin/gx/GXPixel.h"
+#include "dolphin/os.h"
+#include "dolphin/types.h"
+#include "global.h"
+
+#include "JSystem/J3DGraphBase/J3DTevs.h"
+
+#include "JSystem/J3DGraphBase/J3DTexture.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
+
+//
+// Forward References:
+//
+
+extern void J3DFifoLoadTexCached(GXTexMapID, u32, GXTexCacheSize, u32, GXTexCacheSize);
+extern void makeTexCoordTable();
+extern void makeAlphaCmpTable();
+extern void makeZModeTable();
+extern void makeTevSwapTable();
+extern "C" void GXInvalidateVtxCache();
+
+extern "C" extern const GXColor j3dDefaultColInfo;
+extern "C" extern u8 data_804563C8;
+
+//
+// Declarations:
+//
+
+/* ############################################################################################## */
+/* 80434AC8-80434BE4 0617E8 011C+00 1/1 151/151 486/486 .bss j3dSys */
+J3DSys j3dSys;
+
+/* 80434BE4-80434C14 061904 0030+00 0/0 17/17 154/154 .bss mCurrentMtx__6J3DSys */
+Mtx J3DSys::mCurrentMtx;
+
+/* 80434C14-80434C20 061934 000C+00 0/0 6/6 0/0 .bss mCurrentS__6J3DSys */
+Vec J3DSys::mCurrentS;
+
+/* 80434C20-80434C2C 061940 000C+00 0/0 5/5 0/0 .bss mParentS__6J3DSys */
+Vec J3DSys::mParentS;
+
+/* 80434C2C-80434C70 06194C 0040+04 1/1 17/17 0/0 .bss sTexCoordScaleTable__6J3DSys */
+J3DTexCoordScaleInfo J3DSys::sTexCoordScaleTable[8];
+
+/* 8030FDE8-8030FEC0 30A728 00D8+00 1/1 0/0 0/0 .text __ct__6J3DSysFv */
+J3DSys::J3DSys() {
+ makeTexCoordTable();
+ makeTevSwapTable();
+ makeAlphaCmpTable();
+ makeZModeTable();
+
+ mFlags = 0;
+ MTXIdentity(mViewMtx);
+ mDrawMode = 1;
+ mMaterialMode = 0;
+ mModel = NULL;
+ mShape = NULL;
+ for (u32 i = 0; i < ARRAY_SIZE(mDrawBuffer); i++)
+ mDrawBuffer[i] = NULL;
+ mTexture = NULL;
+ mMatPacket = NULL;
+ mShapePacket = NULL;
+ mModelDrawMtx = NULL;
+ mModelNrmMtx = NULL;
+ mVtxPos = NULL;
+ mVtxNrm = NULL;
+ mVtxCol = NULL;
+
+ for (u32 i = 0; i < 8; i++) {
+ sTexCoordScaleTable[i].field_0x00 = 1;
+ sTexCoordScaleTable[i].field_0x02 = 1;
+ sTexCoordScaleTable[i].field_0x04 = 0;
+ sTexCoordScaleTable[i].field_0x06 = 0;
+ }
+}
+
+/* 8030FEC0-8030FEE4 30A800 0024+00 0/0 1/1 0/0 .text loadPosMtxIndx__6J3DSysCFiUs */
+void J3DSys::loadPosMtxIndx(int addr, u16 indx) const {
+ J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, indx, 0xB000 | ((u16)(addr * 0x0C)));
+}
+
+/* 8030FEE4-8030FF0C 30A824 0028+00 0/0 1/1 0/0 .text loadNrmMtxIndx__6J3DSysCFiUs */
+void J3DSys::loadNrmMtxIndx(int addr, u16 indx) const {
+ J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, indx, 0x8000 | ((u16)((addr * 0x09) + 0x400)));
+}
+
+/* 8030FF0C-803100BC 30A84C 01B0+00 1/1 0/0 0/0 .text setTexCacheRegion__6J3DSysF15_GXTexCacheSize
+ */
+void J3DSys::setTexCacheRegion(GXTexCacheSize size) {
+ const u32 kSize[] = {
+ 0x00008000,
+ 0x00020000,
+ 0x00080000,
+ 0x00000000,
+ };
+ const u32 kRegionNum[] = {8, 4, 1, 0};
+
+ u32 regionNum = kRegionNum[size];
+ mTexCacheRegionNum = regionNum;
+
+ if (!!(mFlags & 0x80000000)) {
+ for (u32 i = 0; i < regionNum; i++) {
+ if (!!(i & 1)) {
+ GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size] + 0x80000, size,
+ i * kSize[size], size);
+ J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size] + 0x80000, size,
+ i * kSize[size], size);
+ } else {
+ GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size,
+ i * kSize[size] + 0x80000, size);
+ J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size], size,
+ i * kSize[size] + 0x80000, size);
+ }
+ }
+ } else {
+ for (u32 i = 0; i < regionNum; i++) {
+ GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size,
+ i * kSize[size] + 0x80000, size);
+ J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size], size, i * kSize[size] + 0x80000,
+ size);
+ }
+ }
+}
+
+/* 803CD8A0-803CD8B0 02A9C0 0010+00 1/1 0/0 0/0 .data NullTexData */
+SECTION_DATA static u8 NullTexData[16] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* 803CD8B0-803CD8E0 02A9D0 0030+00 1/1 0/0 0/0 .data j3dIdentityMtx */
+SECTION_DATA static Mtx j3dIdentityMtx = {
+ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
+};
+
+/* 803100BC-8031073C 30A9FC 0680+00 0/0 3/3 0/0 .text drawInit__6J3DSysFv */
+void J3DSys::drawInit() {
+ GXInvalidateVtxCache();
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXSetCullMode(GX_CULL_BACK);
+ GXSetCoPlanar(GX_FALSE);
+ GXSetClipMode(GX_CLIP_ENABLE);
+ GXSetColorUpdate(GX_TRUE);
+ GXSetDither(GX_TRUE);
+ GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
+ GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
+ GXSetZCompLoc(GX_TRUE);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR1, GX_CLR_RGBA, GX_RGBA8, 0);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX3, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX4, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX5, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX6, GX_CLR_RGBA, GX_RGBA4, 7);
+ GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX7, GX_CLR_RGBA, GX_RGBA4, 7);
+
+ GXSetNumIndStages(0);
+ reinitTexture();
+
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+
+ for (u32 i = 0; i < 10; i++)
+ GXLoadTexMtxImm(j3dIdentityMtx, GX_TEXMTX0 + i * 3, GX_MTX3x4);
+
+ Mtx23 indTexMtx = {
+ {0.5f, 0.0f, 0.0f},
+ {0.0f, 0.5f, 0.0f},
+ };
+
+ u8 i;
+ for (i = 0; i < 3; i++)
+ GXSetIndTexMtx((GXIndTexMtxID)(GX_ITM_0 + i), (f32*)indTexMtx, 1);
+
+ GXSetChanMatColor(GX_COLOR0A0, j3dDefaultColInfo);
+ GXSetChanMatColor(GX_COLOR1A1, j3dDefaultColInfo);
+
+ GXSetNumChans(data_804563C8);
+ GXSetNumTexGens(1);
+ GXSetNumTevStages(1);
+ GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
+ GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
+
+ for (i = 0; i < GX_MAX_TEXMAP; i++)
+ GXSetTexCoordGen2((GXTexCoordID)i, (GXTexGenType)j3dDefaultTexCoordInfo[i].mTexGenType,
+ (GXTexGenSrc)j3dDefaultTexCoordInfo[i].mTexGenSrc,
+ j3dDefaultTexCoordInfo[i].mTexGenMtx, GX_FALSE, GX_PTIDENTITY);
+
+ for (i = 0; i < GX_MAX_INDTEXSTAGE; i++)
+ GXSetIndTexCoordScale((GXIndTexStageID)i, GX_ITS_1, GX_ITS_1);
+
+ for (i = 0; i < GX_MAX_TEVREG; i++)
+ GXSetTevKColor((GXTevKColorID)i, j3dDefaultTevKColor);
+
+ for (i = 0; i < GX_MAX_TEVREG; i++)
+ GXSetTevColorS10((GXTevRegID)i, j3dDefaultTevColor);
+
+ for (i = 0; i < GX_MAX_TEVSTAGE; i++) {
+ GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+ GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+ }
+
+ for (i = 0; i < GX_MAX_TEVSTAGE; i++)
+ GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0);
+
+ GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
+
+ for (i = 0; i < GX_MAX_TEVSTAGE; i++)
+ GXSetTevIndirect((GXTevStageID)i, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_NONE, GX_ITM_OFF,
+ GX_ITW_OFF, GX_ITW_OFF, GX_FALSE, GX_FALSE, GX_ITBA_OFF);
+
+ OSInitFastCast();
+ setTexCacheRegion(GX_TEXCACHE_32K);
+}
+
+/* 8031073C-8031079C 30B07C 0060+00 0/0 16/16 6/6 .text reinitGX__6J3DSysFv */
+void J3DSys::reinitGX() {
+ reinitGenMode();
+ reinitLighting();
+ reinitTransform();
+ reinitTexture();
+ reinitTevStages();
+ reinitIndStages();
+ reinitPixelProc();
+ GXFlush();
+}
+
+/* 8031079C-803107E8 30B0DC 004C+00 1/1 0/0 0/0 .text reinitGenMode__6J3DSysFv */
+void J3DSys::reinitGenMode() {
+ GXSetNumChans(0);
+ GXSetNumTexGens(1);
+ GXSetNumTevStages(1);
+ GXSetNumIndStages(0);
+ GXSetCullMode(GX_CULL_BACK);
+ GXSetCoPlanar(GX_FALSE);
+}
+
+/* ############################################################################################## */
+/* 80450950-80450954 0003D0 0004+00 2/2 0/0 0/0 .sdata ColorBlack */
+SECTION_SDATA static GXColor ColorBlack = {0x00, 0x00, 0x00, 0x00};
+
+/* 80450954-80450958 0003D4 0004+00 2/2 0/0 0/0 .sdata ColorWhite */
+SECTION_SDATA static GXColor ColorWhite = {0xFF, 0xFF, 0xFF, 0xFF};
+
+/* 803107E8-80310894 30B128 00AC+00 1/1 0/0 0/0 .text reinitLighting__6J3DSysFv */
+void J3DSys::reinitLighting() {
+ GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
+ GX_AF_NONE);
+ GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
+ GX_AF_NONE);
+ GXSetChanAmbColor(GX_COLOR0A0, ColorBlack);
+ GXSetChanAmbColor(GX_COLOR1A1, ColorBlack);
+ GXSetChanMatColor(GX_COLOR0A0, ColorWhite);
+ GXSetChanMatColor(GX_COLOR1A1, ColorWhite);
+}
+
+/* 80310894-80310998 30B1D4 0104+00 1/1 0/0 0/0 .text reinitTransform__6J3DSysFv */
+void J3DSys::reinitTransform() {
+ GXSetCurrentMtx(GX_PNMTX0);
+ GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+ GXSetTexCoordGen2(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
+}
+
+/* 80310998-80310A3C 30B2D8 00A4+00 2/2 0/0 0/0 .text reinitTexture__6J3DSysFv */
+void J3DSys::reinitTexture() {
+ GXTexObj texObj;
+ GXInitTexObj(&texObj, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE);
+ GXLoadTexObj(&texObj, GX_TEXMAP0);
+ GXLoadTexObj(&texObj, GX_TEXMAP1);
+ GXLoadTexObj(&texObj, GX_TEXMAP2);
+ GXLoadTexObj(&texObj, GX_TEXMAP3);
+ GXLoadTexObj(&texObj, GX_TEXMAP4);
+ GXLoadTexObj(&texObj, GX_TEXMAP5);
+ GXLoadTexObj(&texObj, GX_TEXMAP6);
+ GXLoadTexObj(&texObj, GX_TEXMAP7);
+}
+
+/* 80310A3C-80310D44 30B37C 0308+00 1/1 0/0 0/0 .text reinitTevStages__6J3DSysFv */
+void J3DSys::reinitTevStages() {
+ GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+ GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
+
+ GXSetTevColor(GX_TEVREG0, ColorWhite);
+ GXSetTevColor(GX_TEVREG1, ColorWhite);
+ GXSetTevColor(GX_TEVREG2, ColorWhite);
+ GXSetTevKColor(GX_KCOLOR0, ColorWhite);
+ GXSetTevKColor(GX_KCOLOR1, ColorWhite);
+ GXSetTevKColor(GX_KCOLOR2, ColorWhite);
+ GXSetTevKColor(GX_KCOLOR3, ColorWhite);
+
+ for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) {
+ GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
+ GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+ GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
+ GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
+ GX_TEVPREV);
+ GXSetTevKColorSel((GXTevStageID)i, GX_TEV_KCSEL_1_4);
+ GXSetTevKAlphaSel((GXTevStageID)i, GX_TEV_KASEL_1);
+ GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0);
+ }
+
+ GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA);
+ GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
+ GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
+}
+
+/* ############################################################################################## */
+/* 803CD8E0-803CD8F8 02AA00 0018+00 1/1 0/0 0/0 .data IndMtx */
+SECTION_DATA static Mtx23 IndMtx = {0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f};
+
+/* 80310D44-80310E3C 30B684 00F8+00 1/1 0/0 0/0 .text reinitIndStages__6J3DSysFv */
+void J3DSys::reinitIndStages() {
+ for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) {
+ GXSetTevDirect((GXTevStageID)i);
+ }
+
+ GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0);
+ GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1);
+ GXSetIndTexOrder(GX_INDTEXSTAGE2, GX_TEXCOORD2, GX_TEXMAP2);
+ GXSetIndTexOrder(GX_INDTEXSTAGE3, GX_TEXCOORD3, GX_TEXMAP3);
+ GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
+ GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1);
+ GXSetIndTexCoordScale(GX_INDTEXSTAGE2, GX_ITS_1, GX_ITS_1);
+ GXSetIndTexCoordScale(GX_INDTEXSTAGE3, GX_ITS_1, GX_ITS_1);
+ GXSetIndTexMtx(GX_ITM_0, (f32*)IndMtx, 1);
+ GXSetIndTexMtx(GX_ITM_1, (f32*)IndMtx, 1);
+ GXSetIndTexMtx(GX_ITM_2, (f32*)IndMtx, 1);
+}
+
+/* 80310E3C-80310ED0 30B77C 0094+00 1/1 0/0 0/0 .text reinitPixelProc__6J3DSysFv */
+void J3DSys::reinitPixelProc() {
+ GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
+ GXSetColorUpdate(GX_TRUE);
+ GXSetAlphaUpdate(GX_FALSE);
+ GXSetDither(GX_TRUE);
+ GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, ColorBlack);
+ GXSetFogRangeAdj(GX_FALSE, 0, NULL);
+ GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
+ GXSetZCompLoc(GX_TRUE);
+}
+
+/* ############################################################################################## */
+/* 80451598-804515A0 000A98 0004+04 0/0 1/1 0/0 .sbss j3dDefaultViewNo */
+u32 j3dDefaultViewNo; \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DTevs.cpp b/src/JSystem/J3DGraphBase/J3DTevs.cpp
new file mode 100644
index 0000000000..47071e924f
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DTevs.cpp
@@ -0,0 +1,565 @@
+//
+// J3DTevs
+//
+
+#include "JSystem/J3DGraphBase/J3DTevs.h"
+#include "JSystem/J3DGraphBase/J3DGD.h"
+#include "JSystem/J3DGraphBase/J3DMatBlock.h"
+#include "JSystem/J3DGraphBase/J3DSys.h"
+#include "JSystem/J3DGraphBase/J3DTransform.h"
+
+static void J3DGDLoadTexMtxImm(f32 (*)[4], u32, _GXTexMtxType);
+static void J3DGDLoadPostTexMtxImm(f32 (*)[4], u32);
+
+/* 80323590-80323644 31DED0 00B4+00 0/0 3/3 0/0 .text load__11J3DLightObjCFUl */
+void J3DLightObj::load(u32 lightIdx) const {
+ GDOverflowCheck(0x48);
+ J3DGDSetLightPos(GXLightID(1 << lightIdx), mInfo.mLightPosition.x, mInfo.mLightPosition.y, mInfo.mLightPosition.z);
+ J3DGDSetLightAttn(GXLightID(1 << lightIdx), mInfo.mCosAtten.x, mInfo.mCosAtten.y, mInfo.mCosAtten.z, mInfo.mDistAtten.x, mInfo.mDistAtten.y, mInfo.mDistAtten.z);
+ J3DGDSetLightColor(GXLightID(1 << lightIdx), mInfo.mColor);
+ J3DGDSetLightDir(GXLightID(1 << lightIdx), mInfo.mLightDirection.x, mInfo.mLightDirection.y, mInfo.mLightDirection.z);
+}
+
+/* 80323644-803238C4 31DF84 0280+00 0/0 3/3 0/0 .text loadTexCoordGens__FUlP11J3DTexCoord
+ */
+void loadTexCoordGens(u32 param_0, J3DTexCoord* param_1) {
+ GDOverflowCheck(param_0 * 8 + 10);
+ J3DGDWriteXFCmdHdr(0x1040, param_0);
+ for (int i = 0; i < param_0; i++) {
+ J3DGDSetTexCoordGen(
+ GXTexGenType(param_1[i].getTexGenType()),
+ GXTexGenSrc(param_1[i].getTexGenSrc())
+ );
+ }
+ J3DGDWriteXFCmdHdr(0x1050, param_0);
+ if (j3dSys.checkFlag(0x40000000)) {
+ for (int i = 0; i < param_0; i++) {
+ J3DGDWrite_u32(param_1[i].getTexGenMtx() == 60 ? 61 : i * 3);
+ }
+ } else {
+ for (int i = 0; i < param_0; i++) {
+ J3DGDWrite_u32(61);
+ }
+ }
+}
+
+/* 803238C4-80323900 31E204 003C+00 0/0 6/6 0/0 .text load__9J3DTexMtxCFUl */
+void J3DTexMtx::load(u32 mtxIdx) const {
+ if (j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
+ loadPostTexMtx(mtxIdx);
+ } else {
+ loadTexMtx(mtxIdx);
+ }
+}
+
+/* 80323900-80323920 31E240 0020+00 0/0 2/2 0/0 .text calc__9J3DTexMtxFPA4_Cf */
+void J3DTexMtx::calc(f32 const (*param_0)[4]) {
+ calcTexMtx(param_0);
+}
+
+/* 80323920-80323C0C 31E260 02EC+00 2/1 0/0 0/0 .text calcTexMtx__9J3DTexMtxFPA4_Cf */
+void J3DTexMtx::calcTexMtx(const Mtx param_0) {
+ Mtx44 mtx1;
+ Mtx44 mtx2;
+
+ static Mtx qMtx = {
+ 0.5f, 0.0f, 0.5f, 0.0f,
+ 0.0f, -0.5f, 0.5f, 0.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+ static Mtx qMtx2 = {
+ 0.5f, 0.0f, 0.0f, 0.5f,
+ 0.0f, -0.5f, 0.0f, 0.5f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+
+ u8 r28 = mTexMtxInfo.mInfo & 0x3f;
+ u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1;
+ switch (r28) {
+ case 8:
+ case 9:
+ case 11:
+ if (r30 == 0) {
+ J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
+ }
+ MTXConcat(mtx2, qMtx, mtx2);
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 7:
+ if (r30 == 0) {
+ J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx1);
+ }
+ MTXConcat(mtx1, qMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 10:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ MTXConcat(mtx2, qMtx2, mtx2);
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 6:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
+ }
+ MTXConcat(mtx1, qMtx2, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 1:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
+ }
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 2:
+ case 3:
+ case 5:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 4:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
+ break;
+ default:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
+ }
+ break;
+ }
+}
+
+/* 80323C0C-80323F64 31E54C 0358+00 1/0 2/2 0/0 .text calcPostTexMtx__9J3DTexMtxFPA4_Cf
+ */
+void J3DTexMtx::calcPostTexMtx(const Mtx param_0) {
+ Mtx44 mtx1;
+ Mtx44 mtx2;
+
+ static Mtx qMtx = {
+ 0.5f, 0.0f, 0.5f, 0.0f,
+ 0.0f, -0.5f, 0.5f, 0.0f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+ static Mtx qMtx2 = {
+ 0.5f, 0.0f, 0.0f, 0.5f,
+ 0.0f, -0.5f, 0.0f, 0.5f,
+ 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+
+ u8 r29 = mTexMtxInfo.mInfo & 0x3f;
+ u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1;
+ switch (r29) {
+ case 8:
+ case 11:
+ if (r30 == 0) {
+ J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
+ }
+ MTXConcat(mtx2, qMtx, mtx2);
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 9:
+ if (r30 == 0) {
+ J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
+ }
+ MTXConcat(mtx2, qMtx, mtx2);
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
+ break;
+ case 7:
+ if (r30 == 0) {
+ J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx1);
+ }
+ MTXConcat(mtx1, qMtx, mMtx);
+ break;
+ case 10:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ MTXConcat(mtx2, qMtx2, mtx2);
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 6:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
+ }
+ MTXConcat(mtx1, qMtx2, mMtx);
+ break;
+ case 1:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
+ }
+ break;
+ case 2:
+ case 5:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
+ MTXConcat(mtx1, param_0, mMtx);
+ break;
+ case 3:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
+ break;
+ case 4:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
+ }
+ J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
+ break;
+ default:
+ if (r30 == 0) {
+ J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
+ } else if (r30 == 1) {
+ J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
+ }
+ break;
+ }
+}
+
+/* 80323F64-80323F88 31E8A4 0024+00 0/0 1/1 0/0 .text isTexNoReg__FPv */
+bool isTexNoReg(void* param_0) {
+ u8 r31 = ((u8*)param_0)[1];
+ if (r31 >= 0x80 && r31 <= 0xbb) {
+ return true;
+ }
+ return false;
+}
+
+/* 80323F88-80323F94 31E8C8 000C+00 0/0 1/1 0/0 .text getTexNoReg__FPv */
+u16 getTexNoReg(void* param_0) {
+ return *(u32*)((u8*)param_0 + 1);
+}
+
+/* 80323F94-8032413C 31E8D4 01A8+00 0/0 20/20 0/0 .text loadTexNo__FUlRCUs */
+void loadTexNo(u32 param_0, u16 const& param_1) {
+ ResTIMG* resTIMG = j3dSys.getTexture()->getResTIMG(param_1);
+ J3DSys::sTexCoordScaleTable[param_0].field_0x00 = resTIMG->width;
+ J3DSys::sTexCoordScaleTable[param_0].field_0x02 = resTIMG->height;
+ GDOverflowCheck(0x14);
+ J3DGDSetTexImgPtr(GXTexMapID(param_0), (u8*)resTIMG + resTIMG->imageOffset);
+ J3DGDSetTexImgAttr(GXTexMapID(param_0), resTIMG->width, resTIMG->height, GXTexFmt(resTIMG->format & 0x0f));
+ J3DGDSetTexLookupMode(GXTexMapID(param_0), GXTexWrapMode(resTIMG->wrapS), GXTexWrapMode(resTIMG->wrapT), GXTexFilter(resTIMG->minFilter), GXTexFilter(resTIMG->magFilter), resTIMG->minLOD * 0.125f, resTIMG->maxLOD * 0.125f, resTIMG->LODBias * 0.01f, resTIMG->biasClamp, resTIMG->doEdgeLOD, GXAnisotropy(resTIMG->maxAnisotropy));
+ if (resTIMG->indexTexture == true) {
+ GXTlutSize tlutSize = resTIMG->numColors > 16 ? GX_TLUT_256 : GX_TLUT_16;
+ GDOverflowCheck(0x14);
+ J3DGDLoadTlut((u8*)resTIMG + resTIMG->paletteOffset, (param_0 << 13) + 0xf0000, tlutSize);
+ J3DGDSetTexTlut(GXTexMapID(param_0), (param_0 << 13) + 0xf0000, GXTlutFmt(resTIMG->colorFormat));
+ }
+}
+
+/* 8032413C-80324160 31EA7C 0024+00 0/0 2/2 0/0 .text patchTexNo_PtrToIdx__FUlRCUs */
+void patchTexNo_PtrToIdx(u32 texID, u16 const& idx) {
+ J3DGDSetTexImgPtrRaw(GXTexMapID(texID), idx);
+}
+
+/* 80324160-80324194 31EAA0 0034+00 0/0 2/2 0/0 .text loadNBTScale__FR11J3DNBTScale */
+void loadNBTScale(J3DNBTScale& param_0) {
+ if (param_0.mbHasScale == true) {
+ j3dSys.setNBTScale(&param_0.mScale);
+ } else {
+ j3dSys.setNBTScale(NULL);
+ }
+}
+
+/* ############################################################################################## */
+/* 803A1EC8-803A1EFC 02E528 0034+00 0/0 9/9 24/24 .rodata j3dDefaultLightInfo */
+extern const J3DLightInfo j3dDefaultLightInfo = {
+ 0.0f, 0.0f, 0.0f,
+ 0.0f, -1.0f, 0.0f,
+ 0xff, 0xff, 0xff, 0xff,
+ 1.0f, 0.0f, 0.0f,
+ 1.0f, 0.0f, 0.0f,
+};
+
+/* 803A1EFC-803A1F1C 02E55C 0020+00 0/0 5/5 0/0 .rodata j3dDefaultTexCoordInfo */
+extern J3DTexCoordInfo const j3dDefaultTexCoordInfo[8] = {
+ {GX_MTX2x4, GX_TG_TEX0, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX1, GX_IDENTITY, 0},
+ {GX_MTX2x4, GX_TG_TEX2, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX3, GX_IDENTITY, 0},
+ {GX_MTX2x4, GX_TG_TEX4, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX5, GX_IDENTITY, 0},
+ {GX_MTX2x4, GX_TG_TEX6, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX7, GX_IDENTITY, 0},
+};
+
+/* 803A1F1C-803A1F80 02E57C 0064+00 0/0 1/1 0/0 .rodata j3dDefaultTexMtxInfo */
+extern J3DTexMtxInfo const j3dDefaultTexMtxInfo = {
+ 0x01,
+ 0x00,
+ 0xFF,
+ 0xFF,
+ {0.0f, 0.0f, 0.0f},
+ {1.0f, 1.0f, 0, 0.0f, 0.0f},
+ {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 1.0f},
+};
+
+/* 803A1F80-803A1F9C 02E5E0 001C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTexMtxInfo */
+extern J3DIndTexMtxInfo const j3dDefaultIndTexMtxInfo = {
+ 0.5f, 0.0f, 0.0f,
+ 0.0f, 0.5f, 0.0f,
+ 1
+};
+
+/* 803A1F9C-803A1FB0 02E5FC 0014+00 0/0 1/1 0/0 .rodata j3dDefaultTevStageInfo */
+extern J3DTevStageInfo const j3dDefaultTevStageInfo = {
+ 0x04, 0x0A, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+};
+
+/* 803A1FB0-803A1FBC 02E610 000C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTevStageInfo */
+extern J3DIndTevStageInfo const j3dDefaultIndTevStageInfo = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* 803A1FBC-803A1FE8 02E61C 002C+00 0/0 3/3 0/0 .rodata j3dDefaultFogInfo */
+extern J3DFogInfo const j3dDefaultFogInfo = {
+ 0x00, 0x00, 0x0140, 0.0f, 0.0f, 0.1f, 10000.0f, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+};
+
+/* 803A1FE8-803A1FF8 02E648 0010+00 0/0 3/3 0/0 .rodata j3dDefaultNBTScaleInfo */
+extern J3DNBTScaleInfo const j3dDefaultNBTScaleInfo = {
+ 0x00, 1.0f, 1.0f, 1.0f,
+};
+
+/* 80434C98-80436A60 0619B8 1DC7+01 1/1 0/0 0/0 .bss j3dTexCoordTable */
+static u8 j3dTexCoordTable[7623 + 1 /* padding */];
+
+/* 80324194-8032423C 31EAD4 00A8+00 0/0 1/1 0/0 .text makeTexCoordTable__Fv */
+void makeTexCoordTable() {
+ u8 texMtx[] = {
+ GX_TEXMTX0,
+ GX_TEXMTX1,
+ GX_TEXMTX2,
+ GX_TEXMTX3,
+ GX_TEXMTX4,
+ GX_TEXMTX5,
+ GX_TEXMTX6,
+ GX_TEXMTX7,
+ GX_TEXMTX8,
+ GX_TEXMTX9,
+ GX_IDENTITY,
+ };
+
+ u8* table = j3dTexCoordTable;
+ for (u32 i = 0; i < 11; i++) {
+ for (u32 j = 0; j < 21; j++) {
+ for (int k = 0; k < ARRAY_SIZE(texMtx); k++) {
+ u32 idx = j * 11 + i * 0xe7 + k;
+ table[idx * 3 + 0] = i;
+ table[idx * 3 + 1] = j;
+ table[idx * 3 + 2] = texMtx[k];
+ }
+ }
+ }
+}
+
+/* ############################################################################################## */
+/* 80436A60-80436E60 063780 0400+00 1/1 3/3 0/0 .bss j3dTevSwapTableTable */
+u8 j3dTevSwapTableTable[1024];
+
+/* 80436E60-80437160 063B80 0300+00 1/1 2/2 0/0 .bss j3dAlphaCmpTable */
+u8 j3dAlphaCmpTable[768];
+
+/* 8032423C-803242A8 31EB7C 006C+00 0/0 1/1 0/0 .text makeAlphaCmpTable__Fv */
+void makeAlphaCmpTable() {
+ u8* table = j3dAlphaCmpTable;
+ for (u32 i = 0; i < 8; i++) {
+ for (int j = 0; j < 4; j++) {
+ for (u32 k = 0; k < 8; k++) {
+ u32 idx = i * 32 + j * 8 + k;
+ table[idx * 3] = i;
+ table[idx * 3 + 1] = j;
+ table[idx * 3 + 2] = k;
+ }
+ }
+ }
+}
+
+/* ############################################################################################## */
+/* 80437160-804371C0 063E80 0060+00 1/1 4/4 5/5 .bss j3dZModeTable */
+extern u8 j3dZModeTable[96];
+u8 j3dZModeTable[96];
+
+/* 803242A8-80324314 31EBE8 006C+00 0/0 1/1 0/0 .text makeZModeTable__Fv */
+void makeZModeTable() {
+ u8* table = j3dZModeTable;
+ for (int i = 0; i < 2; i++) {
+ for (u32 j = 0; j < 8; j++) {
+ for (int k = 0; k < 2; k++) {
+ u32 idx = j * 2 + i * 16 + k;
+ table[idx * 3 + 0] = i;
+ table[idx * 3 + 1] = j;
+ table[idx * 3 + 2] = k;
+ }
+ }
+ }
+}
+
+/* 80324314-80324358 31EC54 0044+00 0/0 1/1 0/0 .text makeTevSwapTable__Fv */
+void makeTevSwapTable() {
+ u8* table = j3dTevSwapTableTable;
+ int i = 0;
+ do {
+ table[0] = i >> 6;
+ table[1] = (i >> 4) & 3;
+ table[2] = (i >> 2) & 3;
+ table[3] = i & 3;
+ i++;
+ table += 4;
+ } while (i < 256);
+}
+
+/* 80324358-803243BC 31EC98 0064+00 1/1 0/0 0/0 .text loadTexMtx__9J3DTexMtxCFUl */
+void J3DTexMtx::loadTexMtx(u32 param_0) const {
+ GDOverflowCheck(0x35);
+ J3DGDLoadTexMtxImm((MtxP)mMtx, param_0 * 3 + 30, (_GXTexMtxType)mTexMtxInfo.mProjection);
+}
+
+/* 803243BC-8032441C 31ECFC 0060+00 1/1 0/0 0/0 .text loadPostTexMtx__9J3DTexMtxCFUl */
+void J3DTexMtx::loadPostTexMtx(u32 param_0) const {
+ GDOverflowCheck(0x35);
+ J3DGDLoadPostTexMtxImm((MtxP)mMtx, param_0 * 3 + 0x40);
+}
+
+/* 8032441C-8032499C 31ED5C 0580+00 1/1 0/0 0/0 .text J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType
+ */
+static void J3DGDLoadTexMtxImm(f32 (*param_1)[4], u32 param_2, _GXTexMtxType param_3) {
+ u16 addr = param_2 << 2;
+ u8 len = param_3 == GX_MTX2x4 ? 8 : 12;
+ J3DGDWriteXFCmdHdr(addr & 0xffff, len);
+ J3DGDWrite_f32(param_1[0][0]);
+ J3DGDWrite_f32(param_1[0][1]);
+ J3DGDWrite_f32(param_1[0][2]);
+ J3DGDWrite_f32(param_1[0][3]);
+ J3DGDWrite_f32(param_1[1][0]);
+ J3DGDWrite_f32(param_1[1][1]);
+ J3DGDWrite_f32(param_1[1][2]);
+ J3DGDWrite_f32(param_1[1][3]);
+ if (param_3 == GX_MTX3x4) {
+ J3DGDWrite_f32(param_1[2][0]);
+ J3DGDWrite_f32(param_1[2][1]);
+ J3DGDWrite_f32(param_1[2][2]);
+ J3DGDWrite_f32(param_1[2][3]);
+ }
+}
+
+/* 8032499C-80324F08 31F2DC 056C+00 1/1 0/0 0/0 .text J3DGDLoadPostTexMtxImm__FPA4_fUl */
+static void J3DGDLoadPostTexMtxImm(f32 (*param_1)[4], u32 param_2) {
+ u16 addr = (param_2 - 0x40) * 4 + 0x500;
+ J3DGDWriteXFCmdHdr(addr, 12);
+ J3DGDWrite_f32(param_1[0][0]);
+ J3DGDWrite_f32(param_1[0][1]);
+ J3DGDWrite_f32(param_1[0][2]);
+ J3DGDWrite_f32(param_1[0][3]);
+ J3DGDWrite_f32(param_1[1][0]);
+ J3DGDWrite_f32(param_1[1][1]);
+ J3DGDWrite_f32(param_1[1][2]);
+ J3DGDWrite_f32(param_1[1][3]);
+ J3DGDWrite_f32(param_1[2][0]);
+ J3DGDWrite_f32(param_1[2][1]);
+ J3DGDWrite_f32(param_1[2][2]);
+ J3DGDWrite_f32(param_1[2][3]);
+}
+
+/* ############################################################################################## */
+/* 804563C0-804563C4 0049C0 0004+00 0/0 4/4 0/0 .sdata2 j3dDefaultColInfo */
+extern const GXColor j3dDefaultColInfo = {0xFF, 0xFF, 0xFF, 0xFF};
+
+/* 804563C4-804563C8 0049C4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultAmbInfo */
+extern const GXColor j3dDefaultAmbInfo = {0x32, 0x32, 0x32, 0x32};
+
+/* 804563C8-804563CC 0049C8 0004+00 0/0 1/1 0/0 .sdata2 None */
+extern const u8 data_804563C8 = 0x01;
+
+/* 804563CC-804563D0 0049CC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultTevOrderInfoNull */
+extern const J3DTevOrderInfo j3dDefaultTevOrderInfoNull = {0xFF, 0xFF, 0xFF, 0x00};
+
+/* 804563D0-804563D4 0049D0 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexOrderNull */
+extern const J3DIndTexOrderInfo j3dDefaultIndTexOrderNull = {0xFF, 0xFF, 0x00, 0x00};
+
+/* 804563D4-804563D8 0049D4 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevColor */
+extern const GXColorS10 j3dDefaultTevColor = {0xFF, 0xFF, 0xFF, 0xFF};
+
+/* 804563DC-804563E0 0049DC 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexCoordScaleInfo */
+extern const J3DIndTexCoordScaleInfo j3dDefaultIndTexCoordScaleInfo = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+};
+
+/* 804563E0-804563E4 0049E0 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevKColor */
+extern const GXColor j3dDefaultTevKColor = {0xFF, 0xFF, 0xFF, 0xFF};
+
+/* 804563E4-804563E8 0049E4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapMode */
+extern J3DTevSwapModeInfo const j3dDefaultTevSwapMode = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+};
+
+/* 804563E8-804563EC 0049E8 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapModeTable */
+extern const J3DTevSwapModeTableInfo j3dDefaultTevSwapModeTable = {0x00, 0x01, 0x02, 0x03};
+
+/* 804563EC-804563F0 0049EC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultBlendInfo */
+extern const J3DBlendInfo j3dDefaultBlendInfo = {GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP};
+
+/* 804563F0-804563F8 0049F0 0008+00 0/0 3/3 0/0 .sdata2 j3dDefaultColorChanInfo */
+extern const J3DColorChanInfo j3dDefaultColorChanInfo = {
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0xFF, 0xFF,
+};
+
+/* 804563F8-804563FA 0049F8 0002+00 0/0 1/1 0/0 .sdata2 None */
+extern const u16 data_804563F8 = 0x1B00;
+
+/* 804563FA-804563FC 0049FA 0002+00 0/0 1/1 0/0 .sdata2 j3dDefaultAlphaCmpID */
+const u16 j3dDefaultAlphaCmpID = 0x00E7;
+
+/* 804563FC-80456400 0049FC 0002+02 0/0 3/3 0/0 .sdata2 j3dDefaultZModeID */
+const u16 j3dDefaultZModeID = 0x0017; \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DTexture.cpp b/src/JSystem/J3DGraphBase/J3DTexture.cpp
new file mode 100644
index 0000000000..0eb87b63e5
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DTexture.cpp
@@ -0,0 +1,70 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DTexture
+//
+
+#include "JSystem/J3DGraphBase/J3DTexture.h"
+#include "dolphin/gx.h"
+
+/* 8031204C-803121A4 30C98C 0158+00 0/0 1/1 0/0 .text loadGX__10J3DTextureCFUs11_GXTexMapID */
+void J3DTexture::loadGX(u16 idx, GXTexMapID texMapID) const {
+ ResTIMG* timg = getResTIMG(idx);
+ GXTexObj texObj;
+
+ if (!timg->indexTexture) {
+ GXInitTexObj(&texObj, ((u8*)timg) + timg->imageOffset, timg->width, timg->height,
+ (GXTexFmt)timg->format, (GXTexWrapMode)timg->wrapS, (GXTexWrapMode)timg->wrapT,
+ (GXBool)timg->mipmapEnabled);
+ } else {
+ GXTlutObj tlutObj;
+
+ GXInitTexObjCI(&texObj, ((u8*)timg) + timg->imageOffset, timg->width, timg->height,
+ (GXCITexFmt)timg->format, (GXTexWrapMode)timg->wrapS,
+ (GXTexWrapMode)timg->wrapT, (GXBool)timg->mipmapEnabled, (u32)texMapID);
+ GXInitTlutObj(&tlutObj, ((u8*)timg) + timg->paletteOffset, (GXTlutFmt)timg->colorFormat,
+ timg->numColors);
+ GXLoadTlut(&tlutObj, texMapID);
+ }
+
+ const f32 kLODClampScale = 1.0f / 8.0f;
+ const f32 kLODBiasScale = 1.0f / 100.0f;
+ GXInitTexObjLOD(&texObj, (GXTexFilter)timg->minFilter, (GXTexFilter)timg->magFilter,
+ timg->minLOD * kLODClampScale, timg->maxLOD * kLODClampScale,
+ timg->LODBias * kLODBiasScale, (GXBool)timg->biasClamp, (GXBool)timg->doEdgeLOD,
+ (GXAnisotropy)timg->maxAnisotropy);
+ GXLoadTexObj(&texObj, texMapID);
+}
+
+/* 803121A4-8031221C 30CAE4 0078+00 1/1 0/0 0/0 .text entryNum__10J3DTextureFUs */
+void J3DTexture::entryNum(u16 num) {
+ mNum = num;
+ mpRes = new ResTIMG[num]();
+
+ for (s32 i = 0; i < mNum; i++) {
+ mpRes[i].paletteOffset = 0;
+ mpRes[i].imageOffset = 0;
+ }
+}
+
+/* 8031221C-80312488 30CB5C 026C+00 0/0 1/1 0/0 .text addResTIMG__10J3DTextureFUsPC7ResTIMG */
+void J3DTexture::addResTIMG(u16 newNum, ResTIMG const* newRes) {
+ if (newNum == 0)
+ return;
+
+ u16 oldNum = mNum;
+ ResTIMG* oldRes = mpRes;
+
+ entryNum(mNum + newNum);
+
+ for (u16 i = 0; i < oldNum; i++) {
+ mpRes[i] = oldRes[i];
+ mpRes[i].imageOffset = (u32)(&oldRes[i]) + mpRes[i].imageOffset - (u32)(&mpRes[i]);
+ mpRes[i].paletteOffset = (u32)(&oldRes[i]) + mpRes[i].paletteOffset - (u32)(&mpRes[i]);
+ }
+
+ for (u16 i = oldNum; i < mNum; i++) {
+ mpRes[i] = newRes[i];
+ mpRes[i].imageOffset = (u32)(&newRes[i]) + mpRes[i].imageOffset - (u32)(&mpRes[i]);
+ mpRes[i].paletteOffset = (u32)(&newRes[i]) + mpRes[i].paletteOffset - (u32)(&mpRes[i]);
+ }
+} \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DTransform.cpp b/src/JSystem/J3DGraphBase/J3DTransform.cpp
new file mode 100644
index 0000000000..2ea8c60e34
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DTransform.cpp
@@ -0,0 +1,378 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DTransform
+//
+
+#include "JSystem/J3DGraphBase/J3DTransform.h"
+#include "JSystem/JMath/JMATrigonometric.h"
+#include "JSystem/J3DGraphBase/J3DStruct.h"
+#include "dol2asm.h"
+#include "dolphin/base/PPCArch.h"
+
+//
+// Forward References:
+//
+
+extern "C" void __MTGQR7__FUl();
+extern "C" void J3DGQRSetup7__FUlUlUlUl();
+extern "C" void J3DCalcBBoardMtx__FPA4_f();
+extern "C" void J3DCalcYBBoardMtx__FPA4_f();
+extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
+extern "C" void J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f();
+extern "C" void J3DGetTranslateRotateMtx__FsssfffPA4_f();
+extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f();
+extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f();
+extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f();
+extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f();
+extern "C" void J3DScaleNrmMtx__FPA4_fRC3Vec();
+extern "C" void J3DScaleNrmMtx33__FPA3_fRC3Vec();
+extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f();
+extern "C" void J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl();
+extern "C" extern f32 PSMulUnit01[2];
+
+//
+// External References:
+//
+
+extern "C" u8 sincosTable___5JMath[65536];
+
+//
+// Declarations:
+//
+
+/* 80311630-80311638 -00001 0008+00 0/0 0/0 0/0 .text __MTGQR7__FUl */
+void __MTGQR7(register u32 v) {
+ // clang-format off
+ asm {
+ mtspr GQR7, v
+ }
+ // clang-format on
+}
+
+/* 80311638-80311670 30BF78 0038+00 0/0 2/2 0/0 .text J3DGQRSetup7__FUlUlUlUl */
+void J3DGQRSetup7(u32 r0, u32 r1, u32 r2, u32 r3) {
+ u32 v = (((r0 << 8) + r1) << 16) | ((r2 << 8) + r3);
+ __MTGQR7(v);
+}
+
+/* ############################################################################################## */
+/* 80456378-8045637C 004978 0004+00 6/6 0/0 0/0 .sdata2 @435 */
+SECTION_SDATA2 static u8 lit_435[4] = {
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+};
+
+/* 80311670-80311760 30BFB0 00F0+00 0/0 2/2 0/0 .text J3DCalcBBoardMtx__FPA4_f */
+// this uses a non-standard sqrtf, not sure why or how its supposed to be setup
+#ifdef NONMATCHING
+static inline f32 sqrtf2(f32 x) {
+ if (x > 0.0f) {
+ f32 guess = (f32)__frsqrte(x);
+ return (f32)(x * guess);
+ }
+ return x;
+}
+
+void J3DCalcBBoardMtx(Mtx mtx) {
+ f32 x = (mtx[0][0] * mtx[0][0]) + (mtx[1][0] * mtx[1][0]) + (mtx[2][0] * mtx[2][0]);
+ f32 y = (mtx[0][1] * mtx[0][1]) + (mtx[1][1] * mtx[1][1]) + (mtx[2][1] * mtx[2][1]);
+ f32 z = (mtx[0][2] * mtx[0][2]) + (mtx[1][2] * mtx[1][2]) + (mtx[2][2] * mtx[2][2]);
+
+ if (x > 0.0f) {
+ x *= sqrtf2(x);
+ }
+ if (y > 0.0f) {
+ y *= sqrtf2(y);
+ }
+ if (z > 0.0f) {
+ z *= sqrtf2(z);
+ }
+
+ mtx[0][0] = x;
+ mtx[0][1] = 0.0f;
+ mtx[0][2] = 0.0f;
+
+ mtx[1][0] = 0.0f;
+ mtx[1][1] = y;
+ mtx[1][2] = 0.0f;
+
+ mtx[2][0] = 0.0f;
+ mtx[2][1] = 0.0f;
+ mtx[2][2] = z;
+}
+#else
+void J3DCalcBBoardMtx(f32 (*param_0)[4]) {
+ // NONMATCHING
+}
+#endif
+
+/* ############################################################################################## */
+/* 803A1E30-803A1E50 02E490 0020+00 0/0 1/1 0/0 .rodata j3dDefaultTransformInfo */
+extern J3DTransformInfo const j3dDefaultTransformInfo = {
+ {1.0f, 1.0f, 1.0f}, {0, 0, 0}, {0.0f, 0.0f, 0.0f}};
+
+/* 803A1E50-803A1E5C 02E4B0 000C+00 0/0 1/1 0/0 .rodata j3dDefaultScale */
+extern Vec const j3dDefaultScale = {1.0f, 1.0f, 1.0f};
+
+/* 803A1E5C-803A1E8C 02E4BC 0030+00 0/0 8/8 7/7 .rodata j3dDefaultMtx */
+extern Mtx const j3dDefaultMtx = {
+ {1.0f, 0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}};
+
+/* 803A1E8C-803A1E98 02E4EC 000C+00 1/1 0/0 0/0 .rodata @443 */
+SECTION_RODATA static u8 const lit_443[12] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+COMPILER_STRIP_GATE(0x803A1E8C, &lit_443);
+
+/* 80311760-8031189C 30C0A0 013C+00 0/0 2/2 0/0 .text J3DCalcYBBoardMtx__FPA4_f */
+void J3DCalcYBBoardMtx(f32 (*param_0)[4]) {
+ // NONMATCHING
+}
+
+/* 8031189C-80311964 30C1DC 00C8+00 0/0 6/6 0/0 .text J3DPSCalcInverseTranspose__FPA4_fPA3_f */
+void J3DPSCalcInverseTranspose(f32 (*param_0)[4], f32 (*param_1)[3]) {
+ // NONMATCHING
+}
+
+/* 80311964-80311A24 30C2A4 00C0+00 0/0 2/2 2/2 .text
+ * J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f */
+void J3DGetTranslateRotateMtx(const J3DTransformInfo& tx, Mtx dst) {
+ f32 sx = JMASSin(tx.mRotation.x), cx = JMASCos(tx.mRotation.x);
+ f32 sy = JMASSin(tx.mRotation.y), cy = JMASCos(tx.mRotation.y);
+ f32 sz = JMASSin(tx.mRotation.z), cz = JMASCos(tx.mRotation.z);
+
+ dst[2][0] = -sy;
+ dst[0][0] = cz * cy;
+ dst[1][0] = sz * cy;
+ dst[2][1] = cy * sx;
+ dst[2][2] = cy * cx;
+
+ f32 cxsz = cx * sz;
+ f32 sxcz = sx * cz;
+ dst[0][1] = sxcz * sy - cxsz;
+ dst[1][2] = cxsz * sy - sxcz;
+
+ f32 sxsz = sx * sz;
+ f32 cxcz = cx * cz;
+ dst[0][2] = cxcz * sy + sxsz;
+ dst[1][1] = sxsz * sy + cxcz;
+
+ dst[0][3] = tx.mTranslate.x;
+ dst[1][3] = tx.mTranslate.y;
+ dst[2][3] = tx.mTranslate.z;
+}
+
+/* 80311A24-80311ACC 30C364 00A8+00 0/0 1/1 0/0 .text J3DGetTranslateRotateMtx__FsssfffPA4_f */
+void J3DGetTranslateRotateMtx(s16 rx, s16 ry, s16 rz, f32 tx, f32 ty, f32 tz, Mtx dst) {
+ f32 sx = JMASSin(rx), cx = JMASCos(rx);
+ f32 sy = JMASSin(ry), cy = JMASCos(ry);
+ f32 sz = JMASSin(rz), cz = JMASCos(rz);
+
+ dst[2][0] = -sy;
+ dst[0][0] = cz * cy;
+ dst[1][0] = sz * cy;
+ dst[2][1] = cy * sx;
+ dst[2][2] = cy * cx;
+
+ f32 cxsz = cx * sz;
+ f32 sxcz = sx * cz;
+ dst[0][1] = sxcz * sy - cxsz;
+ dst[1][2] = cxsz * sy - sxcz;
+
+ f32 sxsz = sx * sz;
+ f32 cxcz = cx * cz;
+ dst[0][2] = cxcz * sy + sxsz;
+ dst[1][1] = sxsz * sy + cxcz;
+
+ dst[0][3] = tx;
+ dst[1][3] = ty;
+ dst[2][3] = tz;
+}
+
+/* ############################################################################################## */
+/* 8045637C-80456380 00497C 0004+00 4/4 0/0 0/0 .sdata2 @526 */
+SECTION_SDATA2 static f32 lit_526 = 1.0f;
+
+/* 80311ACC-80311B80 30C40C 00B4+00 0/0 3/3 0/0 .text
+ * J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f */
+void J3DGetTextureMtx(const J3DTextureSRTInfo& srt, const Vec& center, Mtx dst) {
+ f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
+
+ f32 cx = srt.mScaleX * cr;
+ f32 sx = srt.mScaleX * sr;
+ f32 sy = srt.mScaleY * sr;
+ f32 cy = srt.mScaleY * cr;
+
+ dst[0][0] = cx;
+ dst[0][1] = -sx;
+ dst[0][2] = (-cx * center.x + sx * center.y) + center.x + srt.mTranslationX;
+
+ dst[1][0] = sy;
+ dst[1][1] = cy;
+ dst[1][2] = (-sy * center.x - cy * center.y) + center.y + srt.mTranslationY;
+
+ dst[2][3] = 0.0f;
+ dst[2][1] = 0.0f;
+ dst[2][0] = 0.0f;
+ dst[1][3] = 0.0f;
+ dst[0][3] = 0.0f;
+ dst[2][2] = 1.0f;
+}
+
+
+/* 80311B80-80311C34 30C4C0 00B4+00 0/0 3/3 0/0 .text
+ * J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f */
+void J3DGetTextureMtxOld(const J3DTextureSRTInfo& srt, const Vec& center, Mtx dst) {
+ f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
+
+ f32 cx = srt.mScaleX * cr;
+ f32 sx = srt.mScaleX * sr;
+ f32 sy = srt.mScaleY * sr;
+ f32 cy = srt.mScaleY * cr;
+
+ dst[0][0] = cx;
+ dst[0][1] = -sx;
+ dst[0][3] = (-cx * center.x + sx * center.y) + center.x + srt.mTranslationX;
+
+ dst[1][0] = sy;
+ dst[1][1] = cy;
+ dst[1][3] = (-sy * center.x - cy * center.y) + center.y + srt.mTranslationY;
+
+ dst[2][3] = 0.0f;
+ dst[2][1] = 0.0f;
+ dst[2][0] = 0.0f;
+ dst[1][2] = 0.0f;
+ dst[0][2] = 0.0f;
+ dst[2][2] = 1.0f;
+}
+
+
+/* ############################################################################################## */
+/* 80456380-80456388 004980 0004+04 2/2 0/0 0/0 .sdata2 @557 */
+SECTION_SDATA2 static f32 lit_557[1 + 1 /* padding */] = {
+ 0.5f,
+ /* padding */
+ 0.0f,
+};
+
+/* 80311C34-80311CE4 30C574 00B0+00 0/0 3/3 0/0 .text
+ * J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f */
+void J3DGetTextureMtxMaya(const J3DTextureSRTInfo& srt, Mtx dst) {
+ f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
+ f32 tx = srt.mTranslationX - 0.5f;
+ f32 ty = srt.mTranslationY - 0.5f;
+
+ dst[0][0] = srt.mScaleX * cr;
+ dst[0][1] = srt.mScaleY * sr;
+ dst[0][2] = tx * cr - sr * (ty + srt.mScaleY) + 0.5f;
+
+ dst[1][0] = -srt.mScaleX * sr;
+ dst[1][1] = srt.mScaleY * cr;
+ dst[1][2] = -tx * sr - cr * (ty + srt.mScaleY) + 0.5f;
+
+ dst[2][3] = 0.0f;
+ dst[2][1] = 0.0f;
+ dst[2][0] = 0.0f;
+ dst[1][3] = 0.0f;
+ dst[0][3] = 0.0f;
+ dst[2][2] = 1.0f;
+}
+
+
+/* 80311CE4-80311D94 30C624 00B0+00 0/0 3/3 0/0 .text
+ * J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f */
+void J3DGetTextureMtxMayaOld(const J3DTextureSRTInfo& srt, Mtx dst) {
+ f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
+ f32 tx = srt.mTranslationX - 0.5f;
+ f32 ty = srt.mTranslationY - 0.5f;
+
+ dst[0][0] = srt.mScaleX * cr;
+ dst[0][1] = srt.mScaleY * sr;
+ dst[0][3] = tx * cr - sr * (ty + srt.mScaleY) + 0.5f;
+
+ dst[1][0] = -srt.mScaleX * sr;
+ dst[1][1] = srt.mScaleY * cr;
+ dst[1][3] = -tx * sr - cr * (ty + srt.mScaleY) + 0.5f;
+
+ dst[2][3] = 0.0f;
+ dst[2][1] = 0.0f;
+ dst[2][0] = 0.0f;
+ dst[1][2] = 0.0f;
+ dst[0][2] = 0.0f;
+ dst[2][2] = 1.0f;
+}
+
+
+/* 80311D94-80311DF8 30C6D4 0064+00 0/0 2/2 0/0 .text J3DScaleNrmMtx__FPA4_fRC3Vec */
+#ifdef NONMATCHING
+void J3DScaleNrmMtx(register Mtx mtx, const register Vec& scl) {
+ register f32 mtx_xy, mtx_z_, scl_xy, scl_z_;
+
+ asm {
+ /* Row 0 */
+ psq_l scl_xy, 0(scl), 0, 0
+ psq_l mtx_xy, 0(mtx), 0, 0
+ lfs scl_z_, 8(scl)
+ lfs mtx_z_, 8(mtx)
+ ps_mul f4, mtx_xy, scl_xy
+ psq_st f4, 0(mtx), 0, 0
+ fmuls f4, mtx_z_, scl_z_
+ stfs f4, 8(mtx)
+
+ /* Row 1 */
+ psq_l scl_xy, 0(scl), 0, 0
+ psq_l mtx_xy, 16(mtx), 0, 0
+ lfs scl_z_, 8(scl)
+ lfs mtx_z_, 24(mtx)
+ ps_mul f4, mtx_xy, scl_xy
+ psq_st f4, 16(mtx), 0, 0
+ fmuls f4, mtx_z_, scl_z_
+ stfs f4, 24(mtx)
+
+ /* Row 2 */
+ psq_l scl_xy, 0(scl), 0, 0
+ psq_l mtx_xy, 32(mtx), 0, 0
+ lfs scl_z_, 8(scl)
+ lfs mtx_z_, 40(mtx)
+ ps_mul f4, mtx_xy, scl_xy
+ psq_st f4, 32(mtx), 0, 0
+ fmuls f4, mtx_z_, scl_z_
+ stfs f4, 40(mtx)
+ }
+}
+#else
+void J3DScaleNrmMtx(f32 (*param_0)[4], Vec const& param_1) {
+ // NONMATCHING
+}
+#endif
+
+/* 80311DF8-80311E4C 30C738 0054+00 0/0 5/5 0/0 .text J3DScaleNrmMtx33__FPA3_fRC3Vec */
+void J3DScaleNrmMtx33(f32 (*param_0)[3], Vec const& param_1) {
+ // NONMATCHING
+}
+
+/* 80311E4C-80311F70 30C78C 0124+00 0/0 3/3 0/0 .text J3DMtxProjConcat__FPA4_fPA4_fPA4_f
+ */
+void J3DMtxProjConcat(f32 (*param_0)[4], f32 (*param_1)[4], f32 (*param_2)[4]) {
+ // NONMATCHING
+}
+
+/* ############################################################################################## */
+/* 80450958-80450960 0003D8 0008+00 1/1 0/0 0/0 .sdata Unit01 */
+SECTION_SDATA static u8 Unit01[8] = {
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
+};
+
+/* 80311F70-8031204C 30C8B0 00DC+00 0/0 1/1 0/0 .text J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl */
+void J3DPSMtxArrayConcat(f32 (*param_0)[4], f32 (*param_1)[4], f32 (*param_2)[4], u32 param_3) {
+ // NONMATCHING
+}
+
+/* ############################################################################################## */
+/* 803CD8F8-803CD900 02AA18 0008+00 0/0 2/2 0/0 .data PSMulUnit01 */
+SECTION_DATA extern f32 PSMulUnit01[2] = {
+ 0.0f,
+ -1.0f,
+}; \ No newline at end of file
diff --git a/src/JSystem/J3DGraphBase/J3DVertex.cpp b/src/JSystem/J3DGraphBase/J3DVertex.cpp
new file mode 100644
index 0000000000..96f42dedb9
--- /dev/null
+++ b/src/JSystem/J3DGraphBase/J3DVertex.cpp
@@ -0,0 +1,244 @@
+//
+// Generated By: dol2asm
+// Translation Unit: J3DVertex
+//
+
+#include "JSystem/J3DGraphBase/J3DVertex.h"
+#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
+#include "JSystem/J3DGraphBase/J3DSys.h"
+#include "JSystem/JKernel/JKRHeap.h"
+#include "string.h"
+#include "dolphin/os/OSCache.h"
+
+/* 80310EF8-80310F78 30B838 0080+00 0/0 1/1 0/0 .text __ct__13J3DVertexDataFv */
+J3DVertexData::J3DVertexData() {
+ mVtxNum = 0;
+ mNrmNum = 0;
+ mColNum = 0;
+ mTexCoordNum = 0;
+ mPacketNum = 0;
+
+ mVtxAttrFmtList = NULL;
+ mVtxPosArray = NULL;
+ mVtxNrmArray = NULL;
+ mVtxNBTArray = NULL;
+
+ for (int i = 0; i < ARRAY_SIZE(mVtxColorArray); i++)
+ mVtxColorArray[i] = NULL;
+
+ for (int i = 0; i < ARRAY_SIZE(mVtxTexCoordArray); i++)
+ mVtxTexCoordArray[i] = NULL;
+
+ mVtxPosFrac = 0;
+ mVtxPosType = GX_F32;
+ mVtxNrmFrac = 0;
+ mVtxNrmType = GX_F32;
+}
+
+/* 80310F78-80310FD8 30B8B8 0060+00 0/0 1/1 0/0 .text
+ * setVertexData__15J3DVertexBufferFP13J3DVertexData */
+void J3DVertexBuffer::setVertexData(J3DVertexData* pVtxData) {
+ mVtxData = pVtxData;
+ mVtxPosArray[0] = pVtxData->getVtxPosArray();
+ mVtxNrmArray[0] = pVtxData->getVtxNrmArray();
+ mVtxColArray[0] = pVtxData->getVtxColorArray(0);
+ mVtxPosArray[1] = NULL;
+ mVtxNrmArray[1] = NULL;
+ mVtxColArray[1] = NULL;
+
+ mTransformedVtxPosArray[0] = pVtxData->getVtxPosArray();
+ mTransformedVtxNrmArray[0] = pVtxData->getVtxNrmArray();
+ mTransformedVtxPosArray[1] = NULL;
+ mTransformedVtxNrmArray[1] = NULL;
+
+ frameInit();
+}
+
+/* 80310FD8-80311030 30B918 0058+00 0/0 3/3 0/0 .text init__15J3DVertexBufferFv */
+void J3DVertexBuffer::init() {
+ mVtxData = NULL;
+
+ mVtxPosArray[1] = NULL;
+ mVtxPosArray[0] = NULL;
+
+ mVtxNrmArray[1] = NULL;
+ mVtxNrmArray[0] = NULL;
+
+ mVtxColArray[1] = NULL;
+ mVtxColArray[0] = NULL;
+
+ mTransformedVtxPosArray[1] = NULL;
+ mTransformedVtxPosArray[0] = NULL;
+
+ mTransformedVtxNrmArray[1] = NULL;
+ mTransformedVtxNrmArray[0] = NULL;
+
+ mCurrentVtxPos = NULL;
+ mCurrentVtxNrm = NULL;
+ mCurrentVtxCol = NULL;
+
+ frameInit();
+}
+
+/* 80311030-8031106C 30B970 003C+00 0/0 1/1 0/0 .text __dt__15J3DVertexBufferFv */
+J3DVertexBuffer::~J3DVertexBuffer() {}
+
+/* 8031106C-80311090 30B9AC 0024+00 0/0 1/1 0/0 .text setArray__15J3DVertexBufferCFv */
+void J3DVertexBuffer::setArray() const {
+ j3dSys.setVtxPos(mCurrentVtxPos);
+ j3dSys.setVtxNrm(mCurrentVtxNrm);
+ j3dSys.setVtxCol(mCurrentVtxCol);
+}
+
+/* 80311090-803111B0 30B9D0 0120+00 1/1 0/0 0/0 .text copyLocalVtxPosArray__15J3DVertexBufferFUl
+ */
+s32 J3DVertexBuffer::copyLocalVtxPosArray(u32 flag) {
+ if (flag & 1) {
+ for (int i = 0; i < 2; i++) {
+ mVtxPosArray[i] = new (0x20) Vec[mVtxData->getVtxNum()];
+
+ if (mVtxPosArray[i] == NULL) {
+ return kJ3DError_Alloc;
+ }
+ memcpy(mVtxPosArray[i], mVtxData->getVtxPosArray(), mVtxData->getVtxNum() * 12);
+ DCStoreRange(mVtxPosArray[i], mVtxData->getVtxNum() * 12);
+ }
+ } else {
+ mVtxPosArray[0] = mVtxData->getVtxPosArray();
+
+ if (mVtxPosArray[1] == NULL) {
+ mVtxPosArray[1] = new (0x20) Vec[mVtxData->getVtxNum()];
+ if (mVtxPosArray[1] == NULL) {
+ return kJ3DError_Alloc;
+ }
+ }
+ memcpy(mVtxPosArray[1], mVtxData->getVtxPosArray(), mVtxData->getVtxNum() * 12);
+ DCStoreRange(mVtxPosArray[1], mVtxData->getVtxNum() * 12);
+ }
+
+ return kJ3DError_Success;
+}
+
+/* 803111B0-803112D0 30BAF0 0120+00 1/1 0/0 0/0 .text copyLocalVtxNrmArray__15J3DVertexBufferFUl
+ */
+s32 J3DVertexBuffer::copyLocalVtxNrmArray(u32 flag) {
+ if (flag & 1) {
+ for (int i = 0; i < 2; i++) {
+ mVtxNrmArray[i] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
+
+ if (mVtxNrmArray[i] == NULL) {
+ return kJ3DError_Alloc;
+ }
+ memcpy(mVtxNrmArray[i], mVtxData->getVtxNrmArray(), mVtxData->getNrmNum() * 12);
+ DCStoreRange(mVtxNrmArray[i], mVtxData->getNrmNum() * 12);
+ }
+ } else {
+ mVtxNrmArray[0] = mVtxData->getVtxNrmArray();
+
+ if (mVtxNrmArray[1] == NULL) {
+ mVtxNrmArray[1] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
+ if (mVtxNrmArray[1] == NULL) {
+ return kJ3DError_Alloc;
+ }
+ }
+ memcpy(mVtxNrmArray[1], mVtxData->getVtxNrmArray(), mVtxData->getNrmNum() * 12);
+ DCStoreRange(mVtxNrmArray[1], mVtxData->getNrmNum() * 12);
+ }
+
+ return kJ3DError_Success;
+}
+
+/* 803112D0-80311478 30BC10 01A8+00 0/0 1/1 0/0 .text copyLocalVtxArray__15J3DVertexBufferFUl */
+s32 J3DVertexBuffer::copyLocalVtxArray(u32 flag) {
+ void* oldPosArray[2];
+ void* oldNrmArray[2];
+
+ for (int i = 0; i < 2; i++)
+ oldPosArray[i] = mVtxPosArray[i];
+
+ if (~flag & 2) {
+ s32 ret = copyLocalVtxPosArray(flag);
+ if (ret != 0) {
+ for (int i = 0; i < 2; i++) {
+ if (oldPosArray[i] != mVtxPosArray[i]) {
+ if (mVtxPosArray[i] != mVtxData->getVtxPosArray())
+ delete mVtxPosArray[i];
+ mVtxPosArray[i] = oldPosArray[i];
+ }
+ }
+ return ret;
+ }
+ } else {
+ mVtxPosArray[0] = mVtxPosArray[1] = mVtxData->getVtxPosArray();
+ }
+
+ for (int i = 0; i < 2; i++)
+ oldNrmArray[i] = mVtxNrmArray[i];
+
+ if (~flag & 4) {
+ s32 ret = copyLocalVtxNrmArray(flag);
+ if (ret != 0) {
+ for (int i = 0; i < 2; i++) {
+ if (oldPosArray[i] != mVtxPosArray[i]) {
+ if (mVtxPosArray[i] != mVtxData->getVtxPosArray())
+ delete mVtxPosArray[i];
+ mVtxPosArray[i] = oldPosArray[i];
+ }
+ if (oldNrmArray[i] != mVtxNrmArray[i]) {
+ if (mVtxNrmArray[i] != mVtxData->getVtxNrmArray())
+ delete mVtxNrmArray[i];
+ mVtxNrmArray[i] = oldNrmArray[i];
+ }
+ }
+ return ret;
+ }
+ } else {
+ mVtxNrmArray[0] = mVtxNrmArray[1] = mVtxData->getVtxNrmArray();
+ }
+
+ return kJ3DError_Success;
+}
+
+/* 80311478-8031152C 30BDB8 00B4+00 0/0 1/1 0/0 .text
+ * allocTransformedVtxPosArray__15J3DVertexBufferFv */
+s32 J3DVertexBuffer::allocTransformedVtxPosArray() {
+ if (mTransformedVtxPosArray[0] != NULL && mTransformedVtxPosArray[1] != NULL)
+ return kJ3DError_Success;
+
+ for (int i = 0; i < 2; i++) {
+ if (i == 0 || mTransformedVtxPosArray[i] == NULL) {
+ mTransformedVtxPosArray[i] = new (0x20) Vec[mVtxData->getVtxNum()];
+ if (mTransformedVtxPosArray[i] == NULL)
+ return kJ3DError_Alloc;
+ }
+ }
+
+ return kJ3DError_Success;
+}
+
+/* 8031152C-803115E0 30BE6C 00B4+00 0/0 1/1 0/0 .text
+ * allocTransformedVtxNrmArray__15J3DVertexBufferFv */
+s32 J3DVertexBuffer::allocTransformedVtxNrmArray() {
+ if (mTransformedVtxNrmArray[0] != NULL && mTransformedVtxNrmArray[1] != NULL)
+ return kJ3DError_Success;
+
+ for (int i = 0; i < 2; i++) {
+ if (i == 0 || mTransformedVtxNrmArray[i] == NULL) {
+ mTransformedVtxNrmArray[i] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
+ if (mTransformedVtxNrmArray[i] == NULL)
+ return kJ3DError_Alloc;
+ }
+ }
+
+ return kJ3DError_Success;
+}
+
+/* 803115E0-803115F4 30BF20 0014+00 0/0 1/1 0/0 .text __ct__14J3DDrawMtxDataFv */
+J3DDrawMtxData::J3DDrawMtxData() {
+ mEntryNum = 0;
+ mDrawMtxFlag = NULL;
+ mDrawMtxIndex = NULL;
+}
+
+/* 803115F4-80311630 30BF34 003C+00 0/0 2/2 0/0 .text __dt__14J3DDrawMtxDataFv */
+J3DDrawMtxData::~J3DDrawMtxData() {} \ No newline at end of file