mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-03 01:58:44 -04:00
2453c0e333
* move dolsdk2004 over * cleanup some temp work * finish and cleanup gf * b_bh done * d_a_e_mb done
2251 lines
67 KiB
C++
2251 lines
67 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: J2DMatBlock
|
|
//
|
|
|
|
#include "JSystem/J2DGraph/J2DMatBlock.h"
|
|
#include "JSystem/JUtility/JUTPalette.h"
|
|
#include "JSystem/JUtility/JUTResFont.h"
|
|
#include "JSystem/JUtility/JUTTexture.h"
|
|
#include "dolphin/gx.h"
|
|
|
|
/* 802EB394-802EB424 2E5CD4 0090+00 0/0 1/1 0/0 .text initialize__13J2DColorBlockFv */
|
|
// NONMATCHING - instruction order
|
|
void J2DColorBlock::initialize() {
|
|
for (int i = 0; i < 2; i++) {
|
|
mMatColor[i] = JUtility::TColor(j2dDefaultColInfo);
|
|
}
|
|
mColorChanNum = 2;
|
|
for (int i = 0; i < 4; i++) {
|
|
mColorChan[i].setColorChanInfo(j2dDefaultColorChanInfo);
|
|
}
|
|
mCullMode = GX_CULL_NONE;
|
|
}
|
|
|
|
/* 802EB424-802EB510 2E5D64 00EC+00 0/0 1/1 0/0 .text setGX__13J2DColorBlockFv */
|
|
void J2DColorBlock::setGX() {
|
|
for (int i = 0; i < 2; i++) {
|
|
GXSetChanMatColor(GXChannelID(GX_COLOR0A0 + i), mMatColor[i]);
|
|
}
|
|
GXSetNumChans(mColorChanNum);
|
|
const GXChannelID mapping[4] = {GX_COLOR0, GX_ALPHA0, GX_COLOR1, GX_ALPHA1};
|
|
for (int i = 0; i < mColorChanNum << 1; i++) {
|
|
GXSetChanCtrl(mapping[i], GX_DISABLE, GX_SRC_REG, (GXColorSrc)mColorChan[i].getMatSrc(), GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
}
|
|
GXSetCullMode((GXCullMode)mCullMode);
|
|
}
|
|
|
|
/* 802EB510-802EB570 2E5E50 0060+00 0/0 1/1 0/0 .text initialize__14J2DTexGenBlockFv */
|
|
void J2DTexGenBlock::initialize() {
|
|
mTexGenNum = 0;
|
|
for (int i = 0; i < 8; i++) {
|
|
mTexGenCoord[i].setTexCoordInfo(j2dDefaultTexCoordInfo[0]);
|
|
}
|
|
for (int i = 0; i < 8; i++) {
|
|
mTexMtx[i] = NULL;
|
|
}
|
|
}
|
|
|
|
/* 802EB570-802EB620 2E5EB0 00B0+00 0/0 1/1 0/0 .text setGX__14J2DTexGenBlockFv */
|
|
void J2DTexGenBlock::setGX() {
|
|
GXSetNumTexGens(mTexGenNum);
|
|
for (int i = 0; i < mTexGenNum; i++) {
|
|
GXSetTexCoordGen((GXTexCoordID)i, (GXTexGenType)mTexGenCoord[i].getTexGenType(), (GXTexGenSrc)mTexGenCoord[i].getTexGenSrc(), mTexGenCoord[i].getTexGenMtx());
|
|
}
|
|
for (u8 i = 0; i < 8; i++) {
|
|
if (mTexMtx[i]) {
|
|
mTexMtx[i]->load(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802EB620-802EB6A4 2E5F60 0084+00 1/0 1/1 0/0 .text __dt__14J2DTexGenBlockFv */
|
|
J2DTexGenBlock::~J2DTexGenBlock() {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mTexMtx[i] != NULL) {
|
|
delete mTexMtx[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802EB6A4-802EB7E0 2E5FE4 013C+00 0/0 3/3 0/0 .text setTexMtx__14J2DTexGenBlockFUlR9J2DTexMtx */
|
|
void J2DTexGenBlock::setTexMtx(u32 param_0, J2DTexMtx& param_1) {
|
|
if (!mTexMtx[param_0]) {
|
|
mTexMtx[param_0] = new J2DTexMtx(param_1.getTexMtxInfo());
|
|
if (!mTexMtx[param_0]) {
|
|
return;
|
|
}
|
|
} else {
|
|
mTexMtx[param_0]->setTexMtxInfo(param_1.getTexMtxInfo());
|
|
}
|
|
mTexMtx[param_0]->calc();
|
|
}
|
|
|
|
/* 802EB7E0-802EB87C 2E6120 009C+00 0/0 1/1 0/0 .text getTexMtx__14J2DTexGenBlockFUlR9J2DTexMtx */
|
|
void J2DTexGenBlock::getTexMtx(u32 param_0, J2DTexMtx& param_1) {
|
|
if (mTexMtx[param_0]) {
|
|
param_1.setTexMtxInfo(mTexMtx[param_0]->getTexMtxInfo());
|
|
}
|
|
}
|
|
|
|
/* 802EB87C-802EB884 2E61BC 0008+00 1/0 0/0 0/0 .text getTexture__11J2DTevBlockFUl */
|
|
JUTTexture* J2DTevBlock::getTexture(u32) {
|
|
return NULL;
|
|
}
|
|
|
|
/* 802EB884-802EB88C 2E61C4 0008+00 1/0 0/0 0/0 .text getPalette__11J2DTevBlockFUl */
|
|
JUTPalette* J2DTevBlock::getPalette(u32) {
|
|
return NULL;
|
|
}
|
|
|
|
/* 802EB88C-802EB998 2E61CC 010C+00 0/0 1/1 0/0 .text __ct__12J2DTevBlock1Fv */
|
|
J2DTevBlock1::J2DTevBlock1() {
|
|
mTexture[0] = NULL;
|
|
mUndeleteFlag = 0;
|
|
initialize();
|
|
}
|
|
|
|
/* 802EB998-802EBA50 2E62D8 00B8+00 1/0 0/0 0/0 .text __dt__12J2DTevBlock1Fv */
|
|
J2DTevBlock1::~J2DTevBlock1() {
|
|
if (mUndeleteFlag & 1) {
|
|
delete mTexture[0];
|
|
}
|
|
|
|
delete mPalette[0];
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
}
|
|
|
|
/* 802EBA50-802EBC0C 2E6390 01BC+00 1/0 0/0 0/0 .text initialize__12J2DTevBlock1Fv */
|
|
void J2DTevBlock1::initialize() {
|
|
mTexNo[0] = -1;
|
|
mFontNo = -1;
|
|
mTevOrder[0].setTevOrderInfo(j2dDefaultTevOrderInfoNull);
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevColor[i] = j2dDefaultTevColor;
|
|
}
|
|
mTevStage[0].setStageNo(0);
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevKColor[i] = j2dDefaultTevKColor;
|
|
}
|
|
mTevKColorSel[0] = -1;
|
|
mTevKAlphaSel[0] = -1;
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevSwapModeTable[i].setTevSwapModeTableInfo(j2dDefaultTevSwapModeTable);
|
|
}
|
|
mIndTevStage[0].setIndTevStageInfo(j2dDefaultIndTevStageInfo);
|
|
mPalette[0] = NULL;
|
|
mFont = NULL;
|
|
}
|
|
|
|
/* 802EBC0C-802EBCC0 2E654C 00B4+00 1/0 0/0 0/0 .text prepareTexture__12J2DTevBlock1FUc
|
|
*/
|
|
bool J2DTevBlock1::prepareTexture(u8 param_0) {
|
|
if (param_0 == 0) {
|
|
return true;
|
|
}
|
|
|
|
if (mTexture[0] == NULL) {
|
|
mTexture[0] = new JUTTexture();
|
|
|
|
if (mTexture[0] == NULL) {
|
|
return false;
|
|
}
|
|
mUndeleteFlag = (mUndeleteFlag & 0x80) | 1;
|
|
}
|
|
|
|
return param_0 <= 1;
|
|
}
|
|
|
|
/* 802EBCC0-802EBDE4 2E6600 0124+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock1FUlPC7ResTIMGP10JUTPalette */
|
|
bool J2DTevBlock1::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* p_tlut) {
|
|
if (param_0 != 0 || p_timg == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[0] != NULL && mTexture[0]->getTexInfo() != NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[0] == NULL) {
|
|
mTexture[0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
mTexture[0]->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
} else if (p_tlut == NULL) {
|
|
mTexture[0]->storeTIMG(p_timg, (u8)0);
|
|
} else {
|
|
mTexture[0]->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
|
|
mUndeleteFlag = (mUndeleteFlag & 0x80) | 1;
|
|
mPalette[0] = NULL;
|
|
mTexNo[0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EBDE4-802EBE8C 2E6724 00A8+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock1FUlP10JUTTexture */
|
|
bool J2DTevBlock1::insertTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (mTexture[0] != NULL && mTexture[0]->getTexInfo() != NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (param_0 != 0 || p_tex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 1) {
|
|
delete mTexture[0];
|
|
}
|
|
|
|
mTexture[0] = p_tex;
|
|
mUndeleteFlag &= 0x80;
|
|
mPalette[0] = NULL;
|
|
mTexNo[0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EBE8C-802EC01C 2E67CC 0190+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock1FUlPC7ResTIMG */
|
|
bool J2DTevBlock1::setTexture(u32 param_0, ResTIMG const* p_timg) {
|
|
if (param_0 != 0) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[0] == NULL) {
|
|
if (p_timg != NULL) {
|
|
mTexture[0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag = (mUndeleteFlag & 0x80) | 1;
|
|
} else {
|
|
mUndeleteFlag &= 0x80;
|
|
}
|
|
} else if (mUndeleteFlag & 1) {
|
|
if (p_timg != NULL) {
|
|
mTexture[0]->storeTIMG(p_timg, (u8)0);
|
|
} else {
|
|
delete mTexture[0];
|
|
mTexture[0] = NULL;
|
|
mUndeleteFlag &= 0x80;
|
|
}
|
|
} else {
|
|
mTexture[0] = NULL;
|
|
|
|
if (p_timg != NULL) {
|
|
mTexture[0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag = (mUndeleteFlag & 0x80) | 1;
|
|
}
|
|
}
|
|
|
|
delete mPalette[0];
|
|
mPalette[0] = NULL;
|
|
mTexNo[0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EC01C-802EC0A8 2E695C 008C+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock1FUlP10JUTTexture
|
|
*/
|
|
bool J2DTevBlock1::setTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 != 0) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 1) {
|
|
delete mTexture[0];
|
|
}
|
|
|
|
mTexture[0] = p_tex;
|
|
mUndeleteFlag &= 0x80;
|
|
delete mPalette[0];
|
|
mPalette[0] = NULL;
|
|
mTexNo[0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EC0A8-802EC124 2E69E8 007C+00 1/0 0/0 0/0 .text removeTexture__12J2DTevBlock1FUl */
|
|
bool J2DTevBlock1::removeTexture(u32 param_0) {
|
|
if (param_0 >= 1) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 1) {
|
|
delete mTexture[0];
|
|
}
|
|
|
|
mTexture[0] = NULL;
|
|
mUndeleteFlag &= 0x80;
|
|
delete mPalette[0];
|
|
mTexNo[0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EC124-802EC1D8 2E6A64 00B4+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock1FP7ResFONT
|
|
*/
|
|
bool J2DTevBlock1::setFont(ResFONT* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
JUTResFont* resFont = new JUTResFont(p_font, NULL);
|
|
if (resFont == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = resFont;
|
|
mUndeleteFlag = (mUndeleteFlag & 0x7F) | 0x80;
|
|
return true;
|
|
}
|
|
|
|
/* 802EC1D8-802EC258 2E6B18 0080+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock1FP7JUTFont
|
|
*/
|
|
bool J2DTevBlock1::setFont(JUTFont* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = (JUTResFont*)p_font;
|
|
mUndeleteFlag = mUndeleteFlag & 0x7F;
|
|
return true;
|
|
}
|
|
|
|
/* 802EC258-802EC318 2E6B98 00C0+00 1/0 0/0 0/0 .text setPalette__12J2DTevBlock1FUlPC7ResTLUT */
|
|
bool J2DTevBlock1::setPalette(u32 param_0, ResTLUT const* p_tlut) {
|
|
if (param_0 != 0) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
if (mPalette[0] == NULL) {
|
|
mPalette[0] = new JUTPalette(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
|
|
if (mPalette[0] == NULL) {
|
|
return false;
|
|
}
|
|
} else {
|
|
mPalette[0]->storeTLUT(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
}
|
|
|
|
if (mTexture[0] != NULL) {
|
|
mTexture[0]->attachPalette(mPalette[0]);
|
|
}
|
|
} else {
|
|
delete mPalette[0];
|
|
mPalette[0] = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802EC318-802EC328 2E6C58 0010+00 1/0 0/0 0/0 .text shiftDeleteFlag__12J2DTevBlock1FUcb
|
|
*/
|
|
void J2DTevBlock1::shiftDeleteFlag(u8, bool) {
|
|
mUndeleteFlag &= 0x80;
|
|
}
|
|
|
|
/* 802EC328-802EC570 2E6C68 0248+00 1/0 0/0 0/0 .text setGX__12J2DTevBlock1Fv */
|
|
void J2DTevBlock1::setGX() {
|
|
loadTexture(GX_TEXMAP0, 0);
|
|
GXSetTevOrder(GX_TEVSTAGE0, mTevOrder[0].getTexCoord(), mTevOrder[0].getTexMap(), mTevOrder[0].getColor());
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevColorS10(i != 3 ? GXTevRegID(i + 1) : GX_TEVPREV, mTevColor[i]);
|
|
}
|
|
|
|
GXSetNumTevStages(1);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GXTevColorArg(mTevStage[0].getColorA()),
|
|
GXTevColorArg(mTevStage[0].getColorB()),
|
|
GXTevColorArg(mTevStage[0].getColorC()),
|
|
GXTevColorArg(mTevStage[0].getColorD()));
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GXTevAlphaArg(mTevStage[0].getAlphaA()),
|
|
GXTevAlphaArg(mTevStage[0].getAlphaB()),
|
|
GXTevAlphaArg(mTevStage[0].getAlphaC()),
|
|
GXTevAlphaArg(mTevStage[0].getAlphaD()));
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GXTevOp(mTevStage[0].getCOp()),
|
|
GXTevBias(mTevStage[0].getCBias()), GXTevScale(mTevStage[0].getCScale()),
|
|
mTevStage[0].getCClamp(), GXTevRegID(mTevStage[0].getCReg()));
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, (GXTevOp)mTevStage[0].getAOp(),
|
|
GXTevBias(mTevStage[0].getABias()), GXTevScale(mTevStage[0].getAScale()),
|
|
mTevStage[0].getAClamp(), GXTevRegID(mTevStage[0].getAReg()));
|
|
GXSetTevKColorSel(GX_TEVSTAGE0, mTevKColorSel[0] != 0xff ? GXTevKColorSel(mTevKColorSel[0]) : GX_TEV_KCSEL_1);
|
|
GXSetTevKAlphaSel(GX_TEVSTAGE0, mTevKAlphaSel[0] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[0]) : GX_TEV_KASEL_1);
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevKColor(GXTevKColorID(i), mTevKColor[i]);
|
|
}
|
|
GXSetTevSwapMode(GX_TEVSTAGE0, GXTevSwapSel(mTevStage[0].getRasSel()), GXTevSwapSel(mTevStage[0].getTexSel()));
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevSwapModeTable(GXTevSwapSel(i), GXTevColorChan(mTevSwapModeTable[i].getR()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getG()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getB()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getA()));
|
|
}
|
|
mIndTevStage->load(0);
|
|
}
|
|
|
|
/* 802EC570-802EC5B8 2E6EB0 0048+00 1/0 0/0 0/0 .text loadTexture__12J2DTevBlock1F11_GXTexMapIDUl
|
|
*/
|
|
void J2DTevBlock1::loadTexture(GXTexMapID texmapID, u32 texIndex) {
|
|
if (texIndex == 0 && mTexture[texIndex] != NULL && mTexture[texIndex]->getTexInfo() != NULL) {
|
|
mTexture[texIndex]->load(texmapID);
|
|
}
|
|
}
|
|
|
|
/* 802EC5B8-802EC6C8 2E6EF8 0110+00 0/0 1/1 0/0 .text __ct__12J2DTevBlock2Fv */
|
|
J2DTevBlock2::J2DTevBlock2() {
|
|
mTexture[0] = NULL;
|
|
mTexture[1] = NULL;
|
|
mUndeleteFlag = 0;
|
|
initialize();
|
|
}
|
|
|
|
/* 802EC6C8-802EC7A0 2E7008 00D8+00 1/0 0/0 0/0 .text __dt__12J2DTevBlock2Fv */
|
|
J2DTevBlock2::~J2DTevBlock2() {
|
|
if (mUndeleteFlag & 1) {
|
|
delete mTexture[0];
|
|
}
|
|
|
|
if (mUndeleteFlag & 2) {
|
|
delete mTexture[1];
|
|
}
|
|
|
|
delete mPalette[0];
|
|
delete mPalette[1];
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
}
|
|
|
|
/* 802EC7A0-802ECA18 2E70E0 0278+00 1/0 0/0 0/0 .text initialize__12J2DTevBlock2Fv */
|
|
void J2DTevBlock2::initialize() {
|
|
mTexNo[0] = 0xffff;
|
|
mTexNo[1] = 0xffff;
|
|
mFontNo = 0xffff;
|
|
mTevOrder[0].setTevOrderInfo(j2dDefaultTevOrderInfoNull);
|
|
mTevOrder[1].setTevOrderInfo(j2dDefaultTevOrderInfoNull);
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevColor[i] = j2dDefaultTevColor;
|
|
}
|
|
mTevStageNum = 1;
|
|
mTevStage[0].setStageNo(0);
|
|
mTevStage[1].setStageNo(1);
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevKColor[i] = j2dDefaultTevKColor;
|
|
}
|
|
mTevKColorSel[0] = 0xff;
|
|
mTevKColorSel[1] = 0xff;
|
|
mTevKAlphaSel[0] = 0xff;
|
|
mTevKAlphaSel[1] = 0xff;
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevSwapModeTable[i].setTevSwapModeTableInfo(j2dDefaultTevSwapModeTable);
|
|
}
|
|
mIndTevStage[0].setIndTevStageInfo(j2dDefaultIndTevStageInfo);
|
|
mIndTevStage[1].setIndTevStageInfo(j2dDefaultIndTevStageInfo);
|
|
mPalette[0] = NULL;
|
|
mPalette[1] = NULL;
|
|
mFont = NULL;
|
|
}
|
|
|
|
/* 802ECA18-802ECAE8 2E7358 00D0+00 1/0 0/0 0/0 .text prepareTexture__12J2DTevBlock2FUc
|
|
*/
|
|
bool J2DTevBlock2::prepareTexture(u8 param_0) {
|
|
for (u8 i = 0; i < param_0; i++) {
|
|
if (i >= 2) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[i] == NULL) {
|
|
mTexture[i] = new JUTTexture();
|
|
|
|
if (mTexture[i] == NULL) {
|
|
return false;
|
|
}
|
|
mUndeleteFlag |= (1 << i);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802ECAE8-802ECDE8 2E7428 0300+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock2FUlPC7ResTIMGP10JUTPalette */
|
|
bool J2DTevBlock2::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* p_tlut) {
|
|
if (param_0 >= 2 || p_timg == NULL) {
|
|
return false;
|
|
}
|
|
|
|
u8 texNo = 0;
|
|
for (; texNo < 2; texNo++) {
|
|
if (mTexture[texNo] == NULL || mTexture[texNo]->getTexInfo() == NULL) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (texNo < param_0) {
|
|
return false;
|
|
}
|
|
|
|
if (texNo == 2) {
|
|
return false;
|
|
}
|
|
|
|
JUTTexture* tex;
|
|
u8 tlutid = 0;
|
|
if (p_timg->indexTexture && p_tlut == NULL) {
|
|
tex = mTexture[0];
|
|
if (tex != NULL && tex->getTexInfo() != NULL && tex->getTexInfo()->indexTexture) {
|
|
int tlutname = tex->getTlutName();
|
|
if (tlutname == GX_TLUT0 || tlutname == GX_BIGTLUT0) {
|
|
tlutid = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
tex = mTexture[texNo];
|
|
if (tex == NULL) {
|
|
JUTTexture* newtex = new JUTTexture(p_timg, tlutid);
|
|
|
|
if (newtex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
newtex->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
|
|
if (param_0 == 0) {
|
|
mTexture[1] = mTexture[0];
|
|
mPalette[1] = mPalette[0];
|
|
mTexNo[1] = mTexNo[0];
|
|
}
|
|
mTexture[param_0] = newtex;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag |= (1 << param_0);
|
|
} else {
|
|
if (p_tlut == NULL) {
|
|
tex->storeTIMG(p_timg, tlutid);
|
|
} else {
|
|
tex->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
|
|
bool local_28[2];
|
|
for (u8 i = 0; i < 2; i++) {
|
|
local_28[i] = mUndeleteFlag & (1 << i);
|
|
}
|
|
|
|
if (param_0 == 0 && texNo == 1) {
|
|
mTexture[1] = mTexture[0];
|
|
mPalette[1] = mPalette[0];
|
|
mTexNo[1] = mTexNo[0];
|
|
local_28[1] = local_28[0];
|
|
}
|
|
mTexture[param_0] = tex;
|
|
mUndeleteFlag &= 0x80;
|
|
|
|
for (u8 i = 0; i < 2; i++) {
|
|
if (local_28[i]) {
|
|
mUndeleteFlag |= (1 << i);
|
|
}
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
}
|
|
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802ECDE8-802ECF48 2E7728 0160+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock2FUlP10JUTTexture */
|
|
bool J2DTevBlock2::insertTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 2 || p_tex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
u8 texNo = 0;
|
|
for (; texNo < 2; texNo++) {
|
|
if (mTexture[texNo] == NULL || mTexture[texNo]->getTexInfo() == NULL) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (texNo < param_0) {
|
|
return false;
|
|
}
|
|
|
|
if (texNo == 2) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[1] != NULL && mTexture[1]->getTexInfo() == NULL) {
|
|
if (mUndeleteFlag & 2) {
|
|
delete mTexture[1];
|
|
}
|
|
|
|
mUndeleteFlag &= ~2;
|
|
}
|
|
|
|
if (param_0 == 0) {
|
|
mTexture[1] = mTexture[0];
|
|
mPalette[1] = mPalette[0];
|
|
mTexNo[1] = mTexNo[0];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
return true;
|
|
}
|
|
|
|
/* 802ECF48-802ED16C 2E7888 0224+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock2FUlPC7ResTIMG */
|
|
bool J2DTevBlock2::setTexture(u32 param_0, ResTIMG const* p_timg) {
|
|
if (param_0 >= 2) {
|
|
return false;
|
|
}
|
|
|
|
u8 tlutid = 0;
|
|
if (p_timg != NULL && p_timg->indexTexture) {
|
|
if (mTexture[param_0 == 0] != NULL) {
|
|
const ResTIMG* timg = mTexture[param_0 == 0]->getTexInfo();
|
|
if (timg != NULL && timg->indexTexture) {
|
|
int tlutname = mTexture[param_0 == 0]->getTlutName();
|
|
u8 tlut_no = tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
|
|
if (tlut_no == 0) {
|
|
tlutid = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, tlutid);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
} else {
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else if (mUndeleteFlag & (1 << param_0)) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0]->storeTIMG(p_timg, tlutid);
|
|
} else {
|
|
delete mTexture[param_0];
|
|
mTexture[param_0] = NULL;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else {
|
|
mTexture[param_0] = NULL;
|
|
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
}
|
|
}
|
|
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802ED16C-802ED21C 2E7AAC 00B0+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock2FUlP10JUTTexture
|
|
*/
|
|
bool J2DTevBlock2::setTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 2) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802ED21C-802ED2F0 2E7B5C 00D4+00 1/0 0/0 0/0 .text removeTexture__12J2DTevBlock2FUl */
|
|
bool J2DTevBlock2::removeTexture(u32 param_0) {
|
|
if (param_0 >= 2) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
delete mPalette[param_0];
|
|
|
|
if (param_0 == 0) {
|
|
mTexture[0] = mTexture[1];
|
|
mPalette[0] = mPalette[1];
|
|
mTexNo[0] = mTexNo[1];
|
|
}
|
|
|
|
mTexture[1] = NULL;
|
|
mPalette[1] = NULL;
|
|
mTexNo[1] = -1;
|
|
shiftDeleteFlag(param_0, false);
|
|
return true;
|
|
}
|
|
|
|
/* 802ED2F0-802ED3A4 2E7C30 00B4+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock2FP7ResFONT
|
|
*/
|
|
bool J2DTevBlock2::setFont(ResFONT* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
JUTResFont* resFont = new JUTResFont(p_font, NULL);
|
|
if (resFont == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = resFont;
|
|
mUndeleteFlag = (mUndeleteFlag & 0x7F) | 0x80;
|
|
return true;
|
|
}
|
|
|
|
/* 802ED3A4-802ED424 2E7CE4 0080+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock2FP7JUTFont
|
|
*/
|
|
bool J2DTevBlock2::setFont(JUTFont* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = (JUTResFont*)p_font;
|
|
mUndeleteFlag = mUndeleteFlag & 0x7F;
|
|
return true;
|
|
}
|
|
|
|
/* 802ED424-802ED4FC 2E7D64 00D8+00 1/0 0/0 0/0 .text setPalette__12J2DTevBlock2FUlPC7ResTLUT */
|
|
bool J2DTevBlock2::setPalette(u32 param_0, ResTLUT const* p_tlut) {
|
|
if (param_0 >= 2) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
if (mPalette[param_0] == NULL) {
|
|
mPalette[param_0] = new JUTPalette((GXTlut)param_0, (ResTLUT*)p_tlut);
|
|
|
|
if (mPalette[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
} else {
|
|
mPalette[param_0]->storeTLUT(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
}
|
|
|
|
if (mTexture[param_0] != NULL) {
|
|
mTexture[param_0]->attachPalette(mPalette[param_0]);
|
|
}
|
|
} else {
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802ED4FC-802ED584 2E7E3C 0088+00 1/0 0/0 0/0 .text shiftDeleteFlag__12J2DTevBlock2FUcb
|
|
*/
|
|
void J2DTevBlock2::shiftDeleteFlag(u8 param_0, bool param_1) {
|
|
u8 tmpFlags = mUndeleteFlag & 0x80;
|
|
mUndeleteFlag = mUndeleteFlag & 0x7F;
|
|
|
|
if (param_1) {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << param_0) - 1)) * 2);
|
|
} else {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1);
|
|
}
|
|
|
|
mUndeleteFlag |= tmpFlags;
|
|
}
|
|
|
|
/* 802ED584-802ED874 2E7EC4 02F0+00 1/0 0/0 0/0 .text setGX__12J2DTevBlock2Fv */
|
|
void J2DTevBlock2::setGX() {
|
|
for (int i = 0; i < 2; i++) {
|
|
loadTexture(GXTexMapID(i), i);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevOrder(GXTevStageID(i), mTevOrder[i].getTexCoord(), mTevOrder[i].getTexMap(), mTevOrder[i].getColor());
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevColorS10(i != 3 ? GXTevRegID(i + 1) : GX_TEVPREV, mTevColor[i]);
|
|
}
|
|
GXSetNumTevStages(mTevStageNum);
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevColorIn(GXTevStageID(i), GXTevColorArg(mTevStage[i].getColorA()),
|
|
GXTevColorArg(mTevStage[i].getColorB()),
|
|
GXTevColorArg(mTevStage[i].getColorC()),
|
|
GXTevColorArg(mTevStage[i].getColorD()));
|
|
GXSetTevAlphaIn(GXTevStageID(i), GXTevAlphaArg(mTevStage[i].getAlphaA()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaB()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaC()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaD()));
|
|
GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()),
|
|
GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()),
|
|
mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg()));
|
|
GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(),
|
|
GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()),
|
|
mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg()));
|
|
GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1);
|
|
GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevKColor(GXTevKColorID(i), mTevKColor[i]);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevSwapMode(GXTevStageID(i), GXTevSwapSel(mTevStage[i].getRasSel()), GXTevSwapSel(mTevStage[i].getTexSel()));
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevSwapModeTable(GXTevSwapSel(i), GXTevColorChan(mTevSwapModeTable[i].getR()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getG()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getB()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getA()));
|
|
}
|
|
for (u8 i = 0; i < mTevStageNum; i++) {
|
|
mIndTevStage[i].load(i);
|
|
}
|
|
}
|
|
|
|
/* 802ED874-802ED8BC 2E81B4 0048+00 1/0 0/0 0/0 .text loadTexture__12J2DTevBlock2F11_GXTexMapIDUl
|
|
*/
|
|
void J2DTevBlock2::loadTexture(GXTexMapID texmapID, u32 texIndex) {
|
|
if (texIndex < 2 && mTexture[texIndex] != NULL && mTexture[texIndex]->getTexInfo() != NULL) {
|
|
mTexture[texIndex]->load(texmapID);
|
|
}
|
|
}
|
|
|
|
/* 802ED8BC-802ED9E4 2E81FC 0128+00 0/0 1/1 0/0 .text __ct__12J2DTevBlock4Fv */
|
|
J2DTevBlock4::J2DTevBlock4() {
|
|
for (int i = 0; i < 4; i++) {
|
|
mTexture[i] = NULL;
|
|
}
|
|
|
|
mUndeleteFlag = 0;
|
|
initialize();
|
|
}
|
|
|
|
/* 802ED9E4-802EDAC4 2E8324 00E0+00 1/0 0/0 0/0 .text __dt__12J2DTevBlock4Fv */
|
|
J2DTevBlock4::~J2DTevBlock4() {
|
|
for (int i = 0; i < 4; i++) {
|
|
if (mUndeleteFlag & (1 << i)) {
|
|
delete mTexture[i];
|
|
}
|
|
delete mPalette[i];
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
}
|
|
|
|
/* 802EDAC4-802EDD34 2E8404 0270+00 1/0 0/0 0/0 .text initialize__12J2DTevBlock4Fv */
|
|
// NONMATCHING - inlines
|
|
void J2DTevBlock4::initialize() {
|
|
for (int i = 0; i < 4; i++) {
|
|
mTexNo[i] = -1;
|
|
}
|
|
mFontNo = -1;
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevOrder[i].setTevOrderInfo(j2dDefaultTevOrderInfoNull);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevColor[i] = j2dDefaultTevColor;
|
|
}
|
|
mTevStageNum = 1;
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevStage[i].setStageNo(i);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevKColor[i] = j2dDefaultTevKColor;
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevKColorSel[i] = -1;
|
|
mTevKAlphaSel[i] = -1;
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mTevSwapModeTable[i].setTevSwapModeTableInfo(j2dDefaultTevSwapModeTable);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mIndTevStage[i].setIndTevStageInfo(j2dDefaultIndTevStageInfo);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mPalette[i] = NULL;
|
|
}
|
|
mFont = NULL;
|
|
}
|
|
|
|
/* 802EDD34-802EDE04 2E8674 00D0+00 1/0 0/0 0/0 .text prepareTexture__12J2DTevBlock4FUc
|
|
*/
|
|
bool J2DTevBlock4::prepareTexture(u8 param_0) {
|
|
for (u8 i = 0; i < param_0; i++) {
|
|
if (i >= 4) {
|
|
return 0;
|
|
}
|
|
|
|
if (mTexture[i] == NULL) {
|
|
mTexture[i] = new JUTTexture();
|
|
|
|
if (mTexture[i] == NULL) {
|
|
return false;
|
|
}
|
|
mUndeleteFlag |= (1 << i);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802EDE04-802EE1D4 2E8744 03D0+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock4FUlPC7ResTIMGP10JUTPalette */
|
|
bool J2DTevBlock4::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* p_tlut) {
|
|
if (param_0 >= 4 || !p_timg) {
|
|
return false;
|
|
}
|
|
u8 idx;
|
|
for (idx = 0; idx < 4; idx++) {
|
|
if (!mTexture[idx] || !mTexture[idx]->getTexInfo()) {
|
|
break;
|
|
}
|
|
}
|
|
if (idx < param_0) {
|
|
return false;
|
|
}
|
|
if (idx == 4) {
|
|
return false;
|
|
}
|
|
u8 local_43 = 0;
|
|
if (p_timg->indexTexture && !p_tlut) {
|
|
u8 local_44 = 0;
|
|
for (int i = 0; i < 3; i++) {
|
|
if (!mTexture[i]) {
|
|
continue;
|
|
}
|
|
const ResTIMG* texInfo = mTexture[i]->getTexInfo();
|
|
if (!texInfo) {
|
|
continue;
|
|
}
|
|
if (!texInfo->indexTexture) {
|
|
continue;
|
|
}
|
|
int tlutName = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutName - (tlutName >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
if (tlut_no < 4) {
|
|
local_44 |= 1 << tlut_no;
|
|
}
|
|
}
|
|
for (u8 i = 0; i < 4; i++) {
|
|
if ((local_44 & 1 << i) == 0) {
|
|
local_43 = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!mTexture[idx]) {
|
|
JUTTexture* texture = new JUTTexture(p_timg, local_43);
|
|
if (!texture) {
|
|
return false;
|
|
}
|
|
if (p_tlut) {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
for (u8 i = 3; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag |= 1 << param_0;
|
|
} else {
|
|
JUTTexture* texture = mTexture[idx];
|
|
if (!p_tlut) {
|
|
texture->storeTIMG(p_timg, local_43);
|
|
} else {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
bool local_38[4];
|
|
for (u8 i = 0; i < 4; i++) {
|
|
local_38[i] = (mUndeleteFlag & 1 << i) != 0;
|
|
}
|
|
for (u8 i = idx; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
local_38[i] = local_38[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
mUndeleteFlag &= 0x80;
|
|
for (u8 i = 0; i < 4; i++) {
|
|
if (local_38[i]) {
|
|
mUndeleteFlag |= 1 << i;
|
|
}
|
|
}
|
|
mUndeleteFlag |= 1 << param_0;
|
|
}
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EE1D4-802EE364 2E8B14 0190+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock4FUlP10JUTTexture */
|
|
bool J2DTevBlock4::insertTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 4 || p_tex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
u8 texNo = 0;
|
|
for (; texNo < 4; texNo++) {
|
|
if (mTexture[texNo] == NULL || mTexture[texNo]->getTexInfo() == NULL) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (texNo < param_0) {
|
|
return false;
|
|
}
|
|
|
|
if (texNo == 4) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[3] != NULL && mTexture[3]->getTexInfo() == NULL) {
|
|
if (mUndeleteFlag & 8) {
|
|
delete mTexture[3];
|
|
}
|
|
|
|
mUndeleteFlag &= ~8;
|
|
}
|
|
|
|
for (u8 i = 3; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
return true;
|
|
}
|
|
|
|
/* 802EE364-802EE5F0 2E8CA4 028C+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock4FUlPC7ResTIMG */
|
|
bool J2DTevBlock4::setTexture(u32 param_0, ResTIMG const* p_timg) {
|
|
if (param_0 >= 4) {
|
|
return false;
|
|
}
|
|
|
|
u8 used_tlut;
|
|
u8 tlutid = 0;
|
|
if (p_timg != NULL && p_timg->indexTexture) {
|
|
used_tlut = 0;
|
|
for (int i = 0; i < 4; i++) {
|
|
if (i != param_0 && mTexture[i] != NULL) {
|
|
const ResTIMG* timg = mTexture[i]->getTexInfo();
|
|
if (timg != NULL && timg->indexTexture) {
|
|
int tlutname = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
|
|
if (tlut_no < 4) {
|
|
used_tlut |= 1 << tlut_no;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (u8 i = 0; i < 4; i++) {
|
|
if (!(used_tlut & 1 << i)) {
|
|
tlutid = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, tlutid);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
} else {
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else if (mUndeleteFlag & (1 << param_0)) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0]->storeTIMG(p_timg, tlutid);
|
|
} else {
|
|
delete mTexture[param_0];
|
|
mTexture[param_0] = NULL;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else {
|
|
mTexture[param_0] = NULL;
|
|
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
}
|
|
}
|
|
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EE5F0-802EE6A0 2E8F30 00B0+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock4FUlP10JUTTexture
|
|
*/
|
|
bool J2DTevBlock4::setTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 4) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EE6A0-802EE798 2E8FE0 00F8+00 1/0 0/0 0/0 .text removeTexture__12J2DTevBlock4FUl */
|
|
bool J2DTevBlock4::removeTexture(u32 param_0) {
|
|
if (param_0 >= 4) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
delete mPalette[param_0];
|
|
|
|
for (u32 i = param_0; i < 3; i++) {
|
|
mTexture[i] = mTexture[i + 1];
|
|
mPalette[i] = mPalette[i + 1];
|
|
mTexNo[i] = mTexNo[i + 1];
|
|
}
|
|
|
|
mTexture[3] = NULL;
|
|
mPalette[3] = NULL;
|
|
mTexNo[3] = -1;
|
|
shiftDeleteFlag(param_0, false);
|
|
return true;
|
|
}
|
|
|
|
/* 802EE798-802EE84C 2E90D8 00B4+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock4FP7ResFONT
|
|
*/
|
|
bool J2DTevBlock4::setFont(ResFONT* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
JUTResFont* resFont = new JUTResFont(p_font, NULL);
|
|
if (resFont == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = resFont;
|
|
mUndeleteFlag = (mUndeleteFlag & 0x7F) | 0x80;
|
|
return true;
|
|
}
|
|
|
|
/* 802EE84C-802EE8CC 2E918C 0080+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock4FP7JUTFont
|
|
*/
|
|
bool J2DTevBlock4::setFont(JUTFont* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = (JUTResFont*)p_font;
|
|
mUndeleteFlag = mUndeleteFlag & 0x7F;
|
|
return true;
|
|
}
|
|
|
|
/* 802EE8CC-802EE9A4 2E920C 00D8+00 1/0 0/0 0/0 .text setPalette__12J2DTevBlock4FUlPC7ResTLUT */
|
|
bool J2DTevBlock4::setPalette(u32 param_0, ResTLUT const* p_tlut) {
|
|
if (param_0 >= 4) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
if (mPalette[param_0] == NULL) {
|
|
mPalette[param_0] = new JUTPalette((GXTlut)param_0, (ResTLUT*)p_tlut);
|
|
|
|
if (mPalette[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
} else {
|
|
mPalette[param_0]->storeTLUT(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
}
|
|
|
|
if (mTexture[param_0] != NULL) {
|
|
mTexture[param_0]->attachPalette(mPalette[param_0]);
|
|
}
|
|
} else {
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802EE9A4-802EEA2C 2E92E4 0088+00 1/0 0/0 0/0 .text shiftDeleteFlag__12J2DTevBlock4FUcb
|
|
*/
|
|
void J2DTevBlock4::shiftDeleteFlag(u8 param_0, bool param_1) {
|
|
u8 tmpFlags = mUndeleteFlag & 0x80;
|
|
mUndeleteFlag = mUndeleteFlag & 0x7F;
|
|
|
|
if (param_1) {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << param_0) - 1)) * 2);
|
|
} else {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1);
|
|
}
|
|
|
|
mUndeleteFlag |= tmpFlags;
|
|
}
|
|
|
|
/* 802EEA2C-802EED1C 2E936C 02F0+00 1/0 0/0 0/0 .text setGX__12J2DTevBlock4Fv */
|
|
void J2DTevBlock4::setGX() {
|
|
for (int i = 0; i < 4; i++) {
|
|
loadTexture(GXTexMapID(i), i);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevOrder(GXTevStageID(i), mTevOrder[i].getTexCoord(), mTevOrder[i].getTexMap(), mTevOrder[i].getColor());
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevColorS10(i != 3 ? GXTevRegID(i + 1) : GX_TEVPREV, mTevColor[i]);
|
|
}
|
|
GXSetNumTevStages(mTevStageNum);
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevColorIn(GXTevStageID(i), GXTevColorArg(mTevStage[i].getColorA()),
|
|
GXTevColorArg(mTevStage[i].getColorB()),
|
|
GXTevColorArg(mTevStage[i].getColorC()),
|
|
GXTevColorArg(mTevStage[i].getColorD()));
|
|
GXSetTevAlphaIn(GXTevStageID(i), GXTevAlphaArg(mTevStage[i].getAlphaA()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaB()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaC()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaD()));
|
|
GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()),
|
|
GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()),
|
|
mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg()));
|
|
GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(),
|
|
GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()),
|
|
mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg()));
|
|
GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1);
|
|
GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevKColor(GXTevKColorID(i), mTevKColor[i]);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevSwapMode(GXTevStageID(i), GXTevSwapSel(mTevStage[i].getRasSel()), GXTevSwapSel(mTevStage[i].getTexSel()));
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevSwapModeTable(GXTevSwapSel(i), GXTevColorChan(mTevSwapModeTable[i].getR()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getG()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getB()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getA()));
|
|
}
|
|
for (u8 i = 0; i < mTevStageNum; i++) {
|
|
mIndTevStage[i].load(i);
|
|
}
|
|
}
|
|
|
|
/* 802EED1C-802EED64 2E965C 0048+00 1/0 0/0 0/0 .text loadTexture__12J2DTevBlock4F11_GXTexMapIDUl
|
|
*/
|
|
void J2DTevBlock4::loadTexture(GXTexMapID texmapID, u32 texIndex) {
|
|
if (texIndex < 4 && mTexture[texIndex] != NULL && mTexture[texIndex]->getTexInfo() != NULL) {
|
|
mTexture[texIndex]->load(texmapID);
|
|
}
|
|
}
|
|
|
|
/* 802EED64-802EEE8C 2E96A4 0128+00 0/0 1/1 0/0 .text __ct__12J2DTevBlock8Fv */
|
|
J2DTevBlock8::J2DTevBlock8() {
|
|
for (int i = 0; i < 8; i++) {
|
|
mTexture[i] = NULL;
|
|
}
|
|
|
|
mUndeleteFlag = 0;
|
|
initialize();
|
|
}
|
|
|
|
/* 802EEE8C-802EEF6C 2E97CC 00E0+00 1/0 0/0 0/0 .text __dt__12J2DTevBlock8Fv */
|
|
J2DTevBlock8::~J2DTevBlock8() {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mUndeleteFlag & (1 << i)) {
|
|
delete mTexture[i];
|
|
}
|
|
delete mPalette[i];
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
}
|
|
|
|
/* 802EEF6C-802EF1E0 2E98AC 0274+00 1/0 0/0 0/0 .text initialize__12J2DTevBlock8Fv */
|
|
void J2DTevBlock8::initialize() {
|
|
// NONMATCHING
|
|
}
|
|
|
|
/* 802EF1E0-802EF2B0 2E9B20 00D0+00 1/0 0/0 0/0 .text prepareTexture__12J2DTevBlock8FUc
|
|
*/
|
|
bool J2DTevBlock8::prepareTexture(u8 param_0) {
|
|
for (u8 i = 0; i < param_0; i++) {
|
|
if (i >= 8) {
|
|
return 0;
|
|
}
|
|
|
|
if (mTexture[i] == NULL) {
|
|
mTexture[i] = new JUTTexture();
|
|
|
|
if (mTexture[i] == NULL) {
|
|
return false;
|
|
}
|
|
mUndeleteFlag |= (1 << i);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802EF2B0-802EF67C 2E9BF0 03CC+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock8FUlPC7ResTIMGP10JUTPalette */
|
|
bool J2DTevBlock8::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* p_tlut) {
|
|
if (param_0 >= 8 || !p_timg) {
|
|
return false;
|
|
}
|
|
u8 idx;
|
|
for (idx = 0; idx < 8; idx++) {
|
|
if (!mTexture[idx] || !mTexture[idx]->getTexInfo()) {
|
|
break;
|
|
}
|
|
}
|
|
if (idx < param_0) {
|
|
return false;
|
|
}
|
|
if (idx == 8) {
|
|
return false;
|
|
}
|
|
u8 local_43 = 0;
|
|
if (p_timg->indexTexture && !p_tlut) {
|
|
u8 local_44 = 0;
|
|
for (int i = 0; i < 7; i++) {
|
|
if (!mTexture[i]) {
|
|
continue;
|
|
}
|
|
const ResTIMG* texInfo = mTexture[i]->getTexInfo();
|
|
if (!texInfo) {
|
|
continue;
|
|
}
|
|
if (!texInfo->indexTexture) {
|
|
continue;
|
|
}
|
|
int tlutName = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutName - (tlutName >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
if (tlut_no < 8) {
|
|
local_44 |= 1 << tlut_no;
|
|
}
|
|
}
|
|
for (u8 i = 0; i < 8; i++) {
|
|
if ((local_44 & 1 << i) == 0) {
|
|
local_43 = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!mTexture[idx]) {
|
|
JUTTexture* texture = new JUTTexture(p_timg, local_43);
|
|
if (!texture) {
|
|
return false;
|
|
}
|
|
if (p_tlut) {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
for (u8 i = 7; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag |= 1 << param_0;
|
|
} else {
|
|
JUTTexture* texture = mTexture[idx];
|
|
if (!p_tlut) {
|
|
texture->storeTIMG(p_timg, local_43);
|
|
} else {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
bool local_38[4];
|
|
for (u8 i = 0; i < 8; i++) {
|
|
local_38[i] = (mUndeleteFlag & 1 << i) != 0;
|
|
}
|
|
for (u8 i = idx; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
local_38[i] = local_38[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
mUndeleteFlag = 0;
|
|
for (u8 i = 0; i < 8; i++) {
|
|
if (local_38[i]) {
|
|
mUndeleteFlag |= 1 << i;
|
|
}
|
|
}
|
|
mUndeleteFlag |= 1 << param_0;
|
|
}
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EF67C-802EF80C 2E9FBC 0190+00 1/0 0/0 0/0 .text
|
|
* insertTexture__12J2DTevBlock8FUlP10JUTTexture */
|
|
bool J2DTevBlock8::insertTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 8 || p_tex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
u8 texNo = 0;
|
|
for (; texNo < 8; texNo++) {
|
|
if (mTexture[texNo] == NULL || mTexture[texNo]->getTexInfo() == NULL) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (texNo < param_0) {
|
|
return false;
|
|
}
|
|
|
|
if (texNo == 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[7] != NULL && mTexture[7]->getTexInfo() == NULL) {
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mTexture[7];
|
|
}
|
|
|
|
mUndeleteFlag &= 0x7F;
|
|
}
|
|
|
|
for (u8 i = 7; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
return true;
|
|
}
|
|
|
|
/* 802EF80C-802EFA98 2EA14C 028C+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock8FUlPC7ResTIMG */
|
|
bool J2DTevBlock8::setTexture(u32 param_0, ResTIMG const* p_timg) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
u8 used_tlut;
|
|
u8 tlutid = 0;
|
|
if (p_timg != NULL && p_timg->indexTexture) {
|
|
used_tlut = 0;
|
|
for (int i = 0; i < 8; i++) {
|
|
if (i != param_0 && mTexture[i] != NULL) {
|
|
const ResTIMG* timg = mTexture[i]->getTexInfo();
|
|
if (timg != NULL && timg->indexTexture) {
|
|
int tlutname = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
|
|
if (tlut_no < 8) {
|
|
used_tlut |= 1 << tlut_no;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (u8 i = 0; i < 4; i++) {
|
|
if (!(used_tlut & 1 << i)) {
|
|
tlutid = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, tlutid);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
} else {
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else if (mUndeleteFlag & (1 << param_0)) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0]->storeTIMG(p_timg, tlutid);
|
|
} else {
|
|
delete mTexture[param_0];
|
|
mTexture[param_0] = NULL;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else {
|
|
mTexture[param_0] = NULL;
|
|
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
}
|
|
}
|
|
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EFA98-802EFB48 2EA3D8 00B0+00 1/0 0/0 0/0 .text setTexture__12J2DTevBlock8FUlP10JUTTexture
|
|
*/
|
|
bool J2DTevBlock8::setTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802EFB48-802EFC40 2EA488 00F8+00 1/0 0/0 0/0 .text removeTexture__12J2DTevBlock8FUl */
|
|
bool J2DTevBlock8::removeTexture(u32 param_0) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
delete mPalette[param_0];
|
|
|
|
for (u32 i = param_0; i < 7; i++) {
|
|
mTexture[i] = mTexture[i + 1];
|
|
mPalette[i] = mPalette[i + 1];
|
|
mTexNo[i] = mTexNo[i + 1];
|
|
}
|
|
|
|
mTexture[7] = NULL;
|
|
mPalette[7] = NULL;
|
|
mTexNo[7] = -1;
|
|
shiftDeleteFlag(param_0, false);
|
|
return true;
|
|
}
|
|
|
|
/* 802EFC40-802EFCEC 2EA580 00AC+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock8FP7ResFONT
|
|
*/
|
|
bool J2DTevBlock8::setFont(ResFONT* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
JUTResFont* resFont = new JUTResFont(p_font, NULL);
|
|
if (resFont == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = resFont;
|
|
mFontUndeleteFlag = true;
|
|
return true;
|
|
}
|
|
|
|
/* 802EFCEC-802EFD68 2EA62C 007C+00 1/0 0/0 0/0 .text setFont__12J2DTevBlock8FP7JUTFont
|
|
*/
|
|
bool J2DTevBlock8::setFont(JUTFont* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = (JUTResFont*)p_font;
|
|
mFontUndeleteFlag = false;
|
|
return true;
|
|
}
|
|
|
|
/* 802EFD68-802EFE40 2EA6A8 00D8+00 1/0 0/0 0/0 .text setPalette__12J2DTevBlock8FUlPC7ResTLUT */
|
|
bool J2DTevBlock8::setPalette(u32 param_0, ResTLUT const* p_tlut) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
if (mPalette[param_0] == NULL) {
|
|
mPalette[param_0] = new JUTPalette((GXTlut)param_0, (ResTLUT*)p_tlut);
|
|
|
|
if (mPalette[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
} else {
|
|
mPalette[param_0]->storeTLUT(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
}
|
|
|
|
if (mTexture[param_0] != NULL) {
|
|
mTexture[param_0]->attachPalette(mPalette[param_0]);
|
|
}
|
|
} else {
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802EFE40-802EFEAC 2EA780 006C+00 1/0 0/0 0/0 .text shiftDeleteFlag__12J2DTevBlock8FUcb
|
|
*/
|
|
void J2DTevBlock8::shiftDeleteFlag(u8 param_0, bool param_1) {
|
|
if (param_1) {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << param_0) - 1)) * 2);
|
|
} else {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1);
|
|
}
|
|
}
|
|
|
|
/* 802EFEAC-802F019C 2EA7EC 02F0+00 1/0 0/0 0/0 .text setGX__12J2DTevBlock8Fv */
|
|
void J2DTevBlock8::setGX() {
|
|
for (int i = 0; i < 8; i++) {
|
|
loadTexture(GXTexMapID(i), i);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevOrder(GXTevStageID(i), mTevOrder[i].getTexCoord(), mTevOrder[i].getTexMap(), mTevOrder[i].getColor());
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevColorS10(i != 3 ? GXTevRegID(i + 1) : GX_TEVPREV, mTevColor[i]);
|
|
}
|
|
GXSetNumTevStages(mTevStageNum);
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevColorIn(GXTevStageID(i), GXTevColorArg(mTevStage[i].getColorA()),
|
|
GXTevColorArg(mTevStage[i].getColorB()),
|
|
GXTevColorArg(mTevStage[i].getColorC()),
|
|
GXTevColorArg(mTevStage[i].getColorD()));
|
|
GXSetTevAlphaIn(GXTevStageID(i), GXTevAlphaArg(mTevStage[i].getAlphaA()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaB()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaC()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaD()));
|
|
GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()),
|
|
GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()),
|
|
mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg()));
|
|
GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(),
|
|
GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()),
|
|
mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg()));
|
|
GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1);
|
|
GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevKColor(GXTevKColorID(i), mTevKColor[i]);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevSwapMode(GXTevStageID(i), GXTevSwapSel(mTevStage[i].getRasSel()), GXTevSwapSel(mTevStage[i].getTexSel()));
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevSwapModeTable(GXTevSwapSel(i), GXTevColorChan(mTevSwapModeTable[i].getR()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getG()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getB()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getA()));
|
|
}
|
|
for (u8 i = 0; i < mTevStageNum; i++) {
|
|
mIndTevStage[i].load(i);
|
|
}
|
|
}
|
|
|
|
/* 802F019C-802F01E4 2EAADC 0048+00 1/0 0/0 0/0 .text loadTexture__12J2DTevBlock8F11_GXTexMapIDUl
|
|
*/
|
|
void J2DTevBlock8::loadTexture(GXTexMapID texmapID, u32 texIndex) {
|
|
if (texIndex < 8 && mTexture[texIndex] != NULL && mTexture[texIndex]->getTexInfo() != NULL) {
|
|
mTexture[texIndex]->load(texmapID);
|
|
}
|
|
}
|
|
|
|
/* 802F01E4-802F030C 2EAB24 0128+00 0/0 1/1 0/0 .text __ct__13J2DTevBlock16Fv */
|
|
J2DTevBlock16::J2DTevBlock16() {
|
|
for (int i = 0; i < 8; i++) {
|
|
mTexture[i] = NULL;
|
|
}
|
|
|
|
mUndeleteFlag = 0;
|
|
initialize();
|
|
}
|
|
|
|
/* 802F030C-802F03EC 2EAC4C 00E0+00 1/0 0/0 0/0 .text __dt__13J2DTevBlock16Fv */
|
|
J2DTevBlock16::~J2DTevBlock16() {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mUndeleteFlag & (1 << i)) {
|
|
delete mTexture[i];
|
|
}
|
|
delete mPalette[i];
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
}
|
|
|
|
/* 802F03EC-802F0660 2EAD2C 0274+00 1/0 0/0 0/0 .text initialize__13J2DTevBlock16Fv */
|
|
void J2DTevBlock16::initialize() {
|
|
// NONMATCHING
|
|
}
|
|
|
|
/* 802F0660-802F0730 2EAFA0 00D0+00 1/0 0/0 0/0 .text prepareTexture__13J2DTevBlock16FUc
|
|
*/
|
|
bool J2DTevBlock16::prepareTexture(u8 param_0) {
|
|
for (u8 i = 0; i < param_0; i++) {
|
|
if (i >= 8) {
|
|
return 0;
|
|
}
|
|
|
|
if (mTexture[i] == NULL) {
|
|
mTexture[i] = new JUTTexture();
|
|
|
|
if (mTexture[i] == NULL) {
|
|
return false;
|
|
}
|
|
mUndeleteFlag |= (1 << i);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802F0730-802F0AFC 2EB070 03CC+00 1/0 0/0 0/0 .text
|
|
* insertTexture__13J2DTevBlock16FUlPC7ResTIMGP10JUTPalette */
|
|
bool J2DTevBlock16::insertTexture(u32 param_0, ResTIMG const* p_timg, JUTPalette* p_tlut) {
|
|
if (param_0 >= 8 || !p_timg) {
|
|
return false;
|
|
}
|
|
u8 idx;
|
|
for (idx = 0; idx < 8; idx++) {
|
|
if (!mTexture[idx] || !mTexture[idx]->getTexInfo()) {
|
|
break;
|
|
}
|
|
}
|
|
if (idx < param_0) {
|
|
return false;
|
|
}
|
|
if (idx == 8) {
|
|
return false;
|
|
}
|
|
u8 local_43 = 0;
|
|
if (p_timg->indexTexture && !p_tlut) {
|
|
u8 local_44 = 0;
|
|
for (int i = 0; i < 7; i++) {
|
|
if (!mTexture[i]) {
|
|
continue;
|
|
}
|
|
const ResTIMG* texInfo = mTexture[i]->getTexInfo();
|
|
if (!texInfo) {
|
|
continue;
|
|
}
|
|
if (!texInfo->indexTexture) {
|
|
continue;
|
|
}
|
|
int tlutName = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutName - (tlutName >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
if (tlut_no < 8) {
|
|
local_44 |= 1 << tlut_no;
|
|
}
|
|
}
|
|
for (u8 i = 0; i < 8; i++) {
|
|
if ((local_44 & 1 << i) == 0) {
|
|
local_43 = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!mTexture[idx]) {
|
|
JUTTexture* texture = new JUTTexture(p_timg, local_43);
|
|
if (!texture) {
|
|
return false;
|
|
}
|
|
if (p_tlut) {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
for (u8 i = 7; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag |= 1 << param_0;
|
|
} else {
|
|
JUTTexture* texture = mTexture[idx];
|
|
if (!p_tlut) {
|
|
texture->storeTIMG(p_timg, local_43);
|
|
} else {
|
|
texture->storeTIMG(p_timg, p_tlut);
|
|
}
|
|
bool local_38[8];
|
|
for (u8 i = 0; i < 8; i++) {
|
|
local_38[i] = (mUndeleteFlag & 1 << i) != 0;
|
|
}
|
|
for (u8 i = idx; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
local_38[i] = local_38[i - 1];
|
|
}
|
|
mTexture[param_0] = texture;
|
|
mUndeleteFlag = 0;
|
|
for (u8 i = 0; i < 8; i++) {
|
|
if (local_38[i]) {
|
|
mUndeleteFlag |= 1 << i;
|
|
}
|
|
}
|
|
mUndeleteFlag |= 1 << param_0;
|
|
}
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802F0AFC-802F0C8C 2EB43C 0190+00 1/0 0/0 0/0 .text
|
|
* insertTexture__13J2DTevBlock16FUlP10JUTTexture */
|
|
bool J2DTevBlock16::insertTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 8 || p_tex == NULL) {
|
|
return false;
|
|
}
|
|
|
|
u8 texNo = 0;
|
|
for (; texNo < 8; texNo++) {
|
|
if (mTexture[texNo] == NULL || mTexture[texNo]->getTexInfo() == NULL) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (texNo < param_0) {
|
|
return false;
|
|
}
|
|
|
|
if (texNo == 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mTexture[7] != NULL && mTexture[7]->getTexInfo() == NULL) {
|
|
if (mUndeleteFlag & 0x80) {
|
|
delete mTexture[7];
|
|
}
|
|
|
|
mUndeleteFlag &= 0x7F;
|
|
}
|
|
|
|
for (u8 i = 7; i > param_0; i--) {
|
|
mTexture[i] = mTexture[i - 1];
|
|
mPalette[i] = mPalette[i - 1];
|
|
mTexNo[i] = mTexNo[i - 1];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
shiftDeleteFlag(param_0, true);
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
return true;
|
|
}
|
|
|
|
/* 802F0C8C-802F0F18 2EB5CC 028C+00 1/0 0/0 0/0 .text setTexture__13J2DTevBlock16FUlPC7ResTIMG */
|
|
bool J2DTevBlock16::setTexture(u32 param_0, ResTIMG const* p_timg) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
u8 used_tlut;
|
|
u8 tlutid = 0;
|
|
if (p_timg != NULL && p_timg->indexTexture) {
|
|
used_tlut = 0;
|
|
for (int i = 0; i < 8; i++) {
|
|
if (i != param_0 && mTexture[i] != NULL) {
|
|
const ResTIMG* timg = mTexture[i]->getTexInfo();
|
|
if (timg != NULL && timg->indexTexture) {
|
|
int tlutname = mTexture[i]->getTlutName();
|
|
u8 tlut_no = tlutname - (tlutname >= GX_BIGTLUT0 ? GX_BIGTLUT0 : GX_TLUT0);
|
|
|
|
if (tlut_no < 8) {
|
|
used_tlut |= 1 << tlut_no;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (u8 i = 0; i < 4; i++) {
|
|
if (!(used_tlut & 1 << i)) {
|
|
tlutid = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, tlutid);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
} else {
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else if (mUndeleteFlag & (1 << param_0)) {
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0]->storeTIMG(p_timg, tlutid);
|
|
} else {
|
|
delete mTexture[param_0];
|
|
mTexture[param_0] = NULL;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
}
|
|
} else {
|
|
mTexture[param_0] = NULL;
|
|
|
|
if (p_timg != NULL) {
|
|
mTexture[param_0] = new JUTTexture(p_timg, 0);
|
|
|
|
if (mTexture[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mUndeleteFlag |= (1 << param_0);
|
|
}
|
|
}
|
|
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802F0F18-802F0FC8 2EB858 00B0+00 1/0 0/0 0/0 .text setTexture__13J2DTevBlock16FUlP10JUTTexture
|
|
*/
|
|
bool J2DTevBlock16::setTexture(u32 param_0, JUTTexture* p_tex) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
|
|
mTexture[param_0] = p_tex;
|
|
mUndeleteFlag &= ~(1 << param_0);
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
mTexNo[param_0] = -1;
|
|
return true;
|
|
}
|
|
|
|
/* 802F0FC8-802F10C0 2EB908 00F8+00 1/0 0/0 0/0 .text removeTexture__13J2DTevBlock16FUl
|
|
*/
|
|
bool J2DTevBlock16::removeTexture(u32 param_0) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (mUndeleteFlag & (1 << param_0)) {
|
|
delete mTexture[param_0];
|
|
}
|
|
delete mPalette[param_0];
|
|
|
|
for (u32 i = param_0; i < 7; i++) {
|
|
mTexture[i] = mTexture[i + 1];
|
|
mPalette[i] = mPalette[i + 1];
|
|
mTexNo[i] = mTexNo[i + 1];
|
|
}
|
|
|
|
mTexture[7] = NULL;
|
|
mPalette[7] = NULL;
|
|
mTexNo[7] = -1;
|
|
shiftDeleteFlag(param_0, false);
|
|
return true;
|
|
}
|
|
|
|
/* 802F10C0-802F116C 2EBA00 00AC+00 1/0 0/0 0/0 .text setFont__13J2DTevBlock16FP7ResFONT
|
|
*/
|
|
bool J2DTevBlock16::setFont(ResFONT* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
JUTResFont* resFont = new JUTResFont(p_font, NULL);
|
|
if (resFont == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = resFont;
|
|
mFontUndeleteFlag = true;
|
|
return true;
|
|
}
|
|
|
|
/* 802F116C-802F11E8 2EBAAC 007C+00 1/0 0/0 0/0 .text setFont__13J2DTevBlock16FP7JUTFont
|
|
*/
|
|
bool J2DTevBlock16::setFont(JUTFont* p_font) {
|
|
if (p_font == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mFontUndeleteFlag) {
|
|
delete mFont;
|
|
}
|
|
|
|
mFont = (JUTResFont*)p_font;
|
|
mFontUndeleteFlag = false;
|
|
return true;
|
|
}
|
|
|
|
/* 802F11E8-802F12C0 2EBB28 00D8+00 1/0 0/0 0/0 .text setPalette__13J2DTevBlock16FUlPC7ResTLUT */
|
|
bool J2DTevBlock16::setPalette(u32 param_0, ResTLUT const* p_tlut) {
|
|
if (param_0 >= 8) {
|
|
return false;
|
|
}
|
|
|
|
if (p_tlut != NULL) {
|
|
if (mPalette[param_0] == NULL) {
|
|
mPalette[param_0] = new JUTPalette((GXTlut)param_0, (ResTLUT*)p_tlut);
|
|
|
|
if (mPalette[param_0] == NULL) {
|
|
return false;
|
|
}
|
|
} else {
|
|
mPalette[param_0]->storeTLUT(GX_TLUT0, (ResTLUT*)p_tlut);
|
|
}
|
|
|
|
if (mTexture[param_0] != NULL) {
|
|
mTexture[param_0]->attachPalette(mPalette[param_0]);
|
|
}
|
|
} else {
|
|
delete mPalette[param_0];
|
|
mPalette[param_0] = NULL;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 802F12C0-802F132C 2EBC00 006C+00 1/0 0/0 0/0 .text shiftDeleteFlag__13J2DTevBlock16FUcb */
|
|
void J2DTevBlock16::shiftDeleteFlag(u8 param_0, bool param_1) {
|
|
if (param_1) {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << param_0) - 1)) * 2);
|
|
} else {
|
|
mUndeleteFlag = (mUndeleteFlag & ((1 << param_0) - 1)) | ((mUndeleteFlag & ~((1 << (param_0 + 1)) - 1)) >> 1);
|
|
}
|
|
}
|
|
|
|
/* 802F132C-802F161C 2EBC6C 02F0+00 1/0 0/0 0/0 .text setGX__13J2DTevBlock16Fv */
|
|
void J2DTevBlock16::setGX() {
|
|
for (int i = 0; i < 8; i++) {
|
|
loadTexture(GXTexMapID(i), i);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevOrder(GXTevStageID(i), mTevOrder[i].getTexCoord(), mTevOrder[i].getTexMap(), mTevOrder[i].getColor());
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevColorS10(i != 3 ? GXTevRegID(i + 1) : GX_TEVPREV, mTevColor[i]);
|
|
}
|
|
GXSetNumTevStages(mTevStageNum);
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevColorIn(GXTevStageID(i), GXTevColorArg(mTevStage[i].getColorA()),
|
|
GXTevColorArg(mTevStage[i].getColorB()),
|
|
GXTevColorArg(mTevStage[i].getColorC()),
|
|
GXTevColorArg(mTevStage[i].getColorD()));
|
|
GXSetTevAlphaIn(GXTevStageID(i), GXTevAlphaArg(mTevStage[i].getAlphaA()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaB()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaC()),
|
|
GXTevAlphaArg(mTevStage[i].getAlphaD()));
|
|
GXSetTevColorOp(GXTevStageID(i), GXTevOp(mTevStage[i].getCOp()),
|
|
GXTevBias(mTevStage[i].getCBias()), GXTevScale(mTevStage[i].getCScale()),
|
|
mTevStage[i].getCClamp(), GXTevRegID(mTevStage[i].getCReg()));
|
|
GXSetTevAlphaOp(GXTevStageID(i), (GXTevOp)mTevStage[i].getAOp(),
|
|
GXTevBias(mTevStage[i].getABias()), GXTevScale(mTevStage[i].getAScale()),
|
|
mTevStage[i].getAClamp(), GXTevRegID(mTevStage[i].getAReg()));
|
|
GXSetTevKColorSel(GXTevStageID(i), mTevKColorSel[i] != 0xff ? GXTevKColorSel(mTevKColorSel[i]) : GX_TEV_KCSEL_1);
|
|
GXSetTevKAlphaSel(GXTevStageID(i), mTevKAlphaSel[i] != 0xff ? GXTevKAlphaSel(mTevKAlphaSel[i]) : GX_TEV_KASEL_1);
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevKColor(GXTevKColorID(i), mTevKColor[i]);
|
|
}
|
|
for (int i = 0; i < mTevStageNum; i++) {
|
|
GXSetTevSwapMode(GXTevStageID(i), GXTevSwapSel(mTevStage[i].getRasSel()), GXTevSwapSel(mTevStage[i].getTexSel()));
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
GXSetTevSwapModeTable(GXTevSwapSel(i), GXTevColorChan(mTevSwapModeTable[i].getR()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getG()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getB()),
|
|
GXTevColorChan(mTevSwapModeTable[i].getA()));
|
|
}
|
|
for (u8 i = 0; i < mTevStageNum; i++) {
|
|
mIndTevStage[i].load(i);
|
|
}
|
|
}
|
|
|
|
/* 802F161C-802F1664 2EBF5C 0048+00 1/0 0/0 0/0 .text loadTexture__13J2DTevBlock16F11_GXTexMapIDUl
|
|
*/
|
|
void J2DTevBlock16::loadTexture(GXTexMapID texmapID, u32 texIndex) {
|
|
if (texIndex < 8 && mTexture[texIndex] != NULL && mTexture[texIndex]->getTexInfo() != NULL) {
|
|
mTexture[texIndex]->load(texmapID);
|
|
}
|
|
}
|
|
|
|
/* 802F1664-802F1730 2EBFA4 00CC+00 1/0 0/0 0/0 .text initialize__15J2DIndBlockFullFv */
|
|
void J2DIndBlockFull::initialize() {
|
|
mIndTexStageNum = 0;
|
|
for (int i = 0; i < 4; i++) {
|
|
mIndTexOrder[i] = j2dDefaultIndTexOrderNull;
|
|
}
|
|
for (int i = 0; i < 3; i++) {
|
|
mIndTexMtx[i] = j2dDefaultIndTexMtxInfo;
|
|
}
|
|
for (int i = 0; i < 4; i++) {
|
|
mTexCoordScale[i] = j2dDefaultIndTexCoordScaleInfo;
|
|
}
|
|
}
|
|
|
|
/* 802F1730-802F17FC 2EC070 00CC+00 1/0 0/0 0/0 .text setGX__15J2DIndBlockFullFv */
|
|
void J2DIndBlockFull::setGX() {
|
|
GXSetNumIndStages(mIndTexStageNum);
|
|
for (u8 i = 0; i < mIndTexStageNum; i++) {
|
|
mIndTexMtx[i].load(i);
|
|
}
|
|
for (u8 i = 0; i < mIndTexStageNum; i++) {
|
|
mTexCoordScale[i].load(i);
|
|
}
|
|
for (u8 i = 0; i < mIndTexStageNum; i++) {
|
|
mIndTexOrder[i].load(i);
|
|
}
|
|
}
|
|
|
|
/* 802F17FC-802F1840 2EC13C 0044+00 0/0 1/1 0/0 .text initialize__10J2DPEBlockFv */
|
|
void J2DPEBlock::initialize() {
|
|
mAlphaComp = J2DAlphaComp();
|
|
mBlend.setBlendInfo(j2dDefaultBlendInfo);
|
|
mDither = j2dDefaultPEBlockDither;
|
|
}
|
|
|
|
/* 802F1840-802F18A0 2EC180 0060+00 0/0 1/1 0/0 .text setGX__10J2DPEBlockFv */
|
|
void J2DPEBlock::setGX() {
|
|
GXSetAlphaCompare(GXCompare(mAlphaComp.getComp0()), mAlphaComp.getRef0(), GXAlphaOp(mAlphaComp.getOp()), GXCompare(mAlphaComp.getComp1()), mAlphaComp.getRef1());
|
|
GXSetBlendMode(GXBlendMode(mBlend.getType()), GXBlendFactor(mBlend.getSrcFactor()), GXBlendFactor(mBlend.getDstFactor()), GXLogicOp(mBlend.getOp()));
|
|
GXSetDither(mDither);
|
|
}
|
|
|
|
/* 802F1940-802F19A8 2EC280 0068+00 5/5 1/1 0/0 .text __ct__11J2DTevStageFv */
|
|
J2DTevStage::J2DTevStage() {
|
|
setTevStageInfo(j2dDefaultTevStageInfo);
|
|
setTevSwapModeInfo(j2dDefaultTevSwapMode);
|
|
}
|
|
|
|
/* 802F19A8-802F1B70 2EC2E8 01C8+00 1/1 1/1 0/0 .text
|
|
* setTevStageInfo__11J2DTevStageFRC15J2DTevStageInfo */
|
|
void J2DTevStage::setTevStageInfo(J2DTevStageInfo const& info) {
|
|
setColorABCD(info.mColorA, info.mColorB, info.mColorC, info.mColorD);
|
|
setTevColorOp(info.mCOp, info.mCBias, info.mCScale, info.mCClamp, info.mCReg);
|
|
setAlphaABCD(info.mAlphaA, info.mAlphaB, info.mAlphaC, info.mAlphaD);
|
|
setTevAlphaOp(info.mAOp, info.mABias, info.mAScale, info.mAClamp, info.mAReg);
|
|
}
|