mirror of https://github.com/zeldaret/tp
2001 lines
73 KiB
C++
2001 lines
73 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: d/d_drawlist
|
|
//
|
|
|
|
#include "d/d_drawlist.h"
|
|
#include "d/d_s_play.h"
|
|
#include "JSystem/J2DGraph/J2DScreen.h"
|
|
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
|
|
#include "SSystem/SComponent/c_bg_s_shdw_draw.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "dol2asm.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "m_Do/m_Do_lib.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "JSystem/J2DGraph/J2DGrafContext.h"
|
|
|
|
class dDlst_blo_c : public dDlst_base_c {
|
|
public:
|
|
/* 80053B64 */ virtual void draw();
|
|
|
|
/* 0x004 */ int field_0x4;
|
|
/* 0x008 */ J2DScreen mScreen;
|
|
/* 0x120 */ f32 field_0x120;
|
|
/* 0x124 */ f32 field_0x124;
|
|
};
|
|
|
|
class dDlst_2Dm_c {
|
|
public:
|
|
/* 8005312C */ virtual void draw();
|
|
|
|
/* 0x04 */ s16 field_0x4;
|
|
/* 0x06 */ s16 field_0x6;
|
|
/* 0x08 */ s16 field_0x8;
|
|
/* 0x0A */ s16 field_0xa;
|
|
/* 0x0C */ f32 field_0xc;
|
|
/* 0x10 */ f32 field_0x10;
|
|
/* 0x14 */ GXColor field_0x14;
|
|
/* 0x18 */ GXColor field_0x18;
|
|
/* 0x1C */ GXTexObj field_0x1c;
|
|
/* 0x3C */ GXTlutObj field_0x3c;
|
|
/* 0x48 */ s16 field_0x48;
|
|
/* 0x4A */ s16 field_0x4a;
|
|
/* 0x4C */ u8 field_0x4c;
|
|
/* 0x50 */ GXTexObj field_0x50;
|
|
/* 0x70 */ GXTlutObj field_0x70;
|
|
/* 0x7C */ s16 field_0x7c;
|
|
/* 0x7E */ s16 field_0x7e;
|
|
/* 0x80 */ u8 field_0x80;
|
|
};
|
|
|
|
class dDlst_2DTri_c {
|
|
public:
|
|
/* 80051AF0 */ virtual void draw();
|
|
|
|
/* 0x04 */ s16 field_0x4;
|
|
/* 0x06 */ s16 field_0x6;
|
|
/* 0x08 */ GXColor field_0x8;
|
|
/* 0x0C */ s16 field_0xc;
|
|
/* 0x10 */ f32 field_0x10;
|
|
/* 0x14 */ f32 field_0x14;
|
|
};
|
|
|
|
class dDlst_2DT_c : public dDlst_base_c {
|
|
public:
|
|
dDlst_2DT_c() {}
|
|
/* 80051F98 */ virtual void draw();
|
|
|
|
/* 0x04 */ u8* field_0x4;
|
|
/* 0x08 */ u32 field_0x8;
|
|
/* 0x0C */ u8 field_0xc;
|
|
/* 0x0D */ u8 field_0xd;
|
|
/* 0x0E */ u16 field_0xe;
|
|
/* 0x10 */ u16 field_0x10;
|
|
/* 0x12 */ s16 field_0x12;
|
|
/* 0x14 */ s16 field_0x14;
|
|
/* 0x16 */ s16 field_0x16;
|
|
/* 0x18 */ s16 field_0x18;
|
|
/* 0x1C */ f32 field_0x1c;
|
|
/* 0x20 */ f32 field_0x20;
|
|
/* 0x24 */ f32 field_0x24;
|
|
/* 0x28 */ f32 field_0x28;
|
|
};
|
|
|
|
class dDlst_2DQuad_c {
|
|
public:
|
|
dDlst_2DQuad_c() {}
|
|
/* 80051CF0 */ virtual void draw();
|
|
|
|
/* 0x04 */ s16 field_0x4;
|
|
/* 0x06 */ s16 field_0x6;
|
|
/* 0x08 */ s16 field_0x8;
|
|
/* 0x0A */ s16 field_0xa;
|
|
/* 0x0C */ GXColor field_0xc;
|
|
};
|
|
|
|
class dDlst_2DPoint_c {
|
|
public:
|
|
/* 80051E5C */ virtual void draw();
|
|
|
|
/* 0x04 */ s16 field_0x4;
|
|
/* 0x06 */ s16 field_0x6;
|
|
/* 0x08 */ GXColor field_0x8;
|
|
/* 0x0C */ u8 field_0xc;
|
|
};
|
|
|
|
class dDlst_2DMt_tex_c {
|
|
public:
|
|
u8 check() { return field_0x0; }
|
|
int getCI() { return mCI; }
|
|
GXTexObj* getTexObj() { return &mTexObj; }
|
|
GXTlutObj* getTlutObj() { return &mTlutObj; }
|
|
GXColor getColor() { return mColor; }
|
|
f32 getS() { return mS; }
|
|
f32 getT() { return mT; }
|
|
f32 getSw() { return mSw; }
|
|
f32 getTw() { return mTw; }
|
|
|
|
/* 0x00 */ u8 field_0x0;
|
|
/* 0x01 */ u8 mCI;
|
|
/* 0x04 */ GXTexObj mTexObj;
|
|
/* 0x24 */ GXTlutObj mTlutObj;
|
|
/* 0x30 */ GXColor mColor;
|
|
/* 0x34 */ f32 mS;
|
|
/* 0x38 */ f32 mT;
|
|
/* 0x3C */ f32 mSw;
|
|
/* 0x40 */ f32 mTw;
|
|
};
|
|
|
|
class dDlst_2DMt_c {
|
|
public:
|
|
/* 8005364C */ virtual void draw();
|
|
|
|
/* 0x04 */ u8 field_0x4;
|
|
/* 0x08 */ dDlst_2DMt_tex_c* field_0x8;
|
|
/* 0x0C */ s16 field_0xc;
|
|
/* 0x0E */ s16 field_0xe;
|
|
/* 0x10 */ s16 field_0x10;
|
|
/* 0x12 */ s16 field_0x12;
|
|
};
|
|
|
|
class dDlst_2DM_c {
|
|
public:
|
|
/* 80052C58 */ virtual void draw();
|
|
|
|
/* 0x04 */ s16 field_0x4;
|
|
/* 0x06 */ s16 field_0x6;
|
|
/* 0x08 */ s16 field_0x8;
|
|
/* 0x0A */ s16 field_0xa;
|
|
/* 0x0C */ u8 field_0xc;
|
|
/* 0x0D */ GXColor field_0xd;
|
|
/* 0x11 */ GXColor field_0x11;
|
|
/* 0x18 */ void* field_0x18;
|
|
/* 0x1C */ u8 field_0x1c;
|
|
/* 0x1E */ u16 field_0x1e;
|
|
/* 0x20 */ u16 field_0x20;
|
|
/* 0x22 */ s16 field_0x22;
|
|
/* 0x24 */ s16 field_0x24;
|
|
/* 0x28 */ void* field_0x28;
|
|
/* 0x2C */ u8 field_0x2c;
|
|
/* 0x2E */ u16 field_0x2e;
|
|
/* 0x30 */ u16 field_0x30;
|
|
/* 0x32 */ s16 field_0x32;
|
|
/* 0x34 */ s16 field_0x34;
|
|
};
|
|
|
|
class ShdwDrawPoly_c : public cBgS_ShdwDraw {
|
|
public:
|
|
/* 80054A6C */ virtual ~ShdwDrawPoly_c() {}
|
|
|
|
void setCenter(cXyz* center) { mCenter = center; }
|
|
cXyz* getCenter() { return mCenter; }
|
|
void setLightVec(cXyz* lightVec) { mLightVec = lightVec; }
|
|
cXyz* getLightVec() { return mLightVec; }
|
|
void setPoly(dDlst_shadowPoly_c* poly) { mPoly = poly; }
|
|
dDlst_shadowPoly_c* getPoly() { return mPoly; }
|
|
|
|
/* 0x34 */ cXyz* mCenter;
|
|
/* 0x38 */ cXyz* mLightVec;
|
|
/* 0x3c */ dDlst_shadowPoly_c* mPoly;
|
|
};
|
|
|
|
/* 80051AC0-80051ADC 04C400 001C+00 0/0 3/3 0/0 .text setViewPort__14dDlst_window_cFffffff */
|
|
void dDlst_window_c::setViewPort(f32 xOrig, f32 yOrig, f32 width, f32 height, f32 nearZ, f32 farZ) {
|
|
mViewport.x_orig = xOrig;
|
|
mViewport.y_orig = yOrig;
|
|
mViewport.width = width;
|
|
mViewport.height = height;
|
|
mViewport.near_z = nearZ;
|
|
mViewport.far_z = farZ;
|
|
}
|
|
|
|
/* 80051ADC-80051AF0 04C41C 0014+00 0/0 4/4 0/0 .text setScissor__14dDlst_window_cFffff
|
|
*/
|
|
void dDlst_window_c::setScissor(f32 xOrig, f32 yOrig, f32 width, f32 height) {
|
|
mViewport.scissor.x_orig = xOrig;
|
|
mViewport.scissor.y_orig = yOrig;
|
|
mViewport.scissor.width = width;
|
|
mViewport.scissor.height = height;
|
|
}
|
|
|
|
/* 80051AF0-80051CF0 04C430 0200+00 1/0 0/0 0/0 .text draw__13dDlst_2DTri_cFv */
|
|
void dDlst_2DTri_c::draw() {
|
|
f32 f2 = cM_scos(field_0xc);
|
|
f32 f3 = cM_ssin(field_0xc);
|
|
s16 x[3];
|
|
s16 y[3];
|
|
int r8 = 0;
|
|
for (int i = 0; i < 3; i++) {
|
|
f32 f4 = field_0x10 * cM_ssin(r8);
|
|
f32 f5 = field_0x14 * cM_scos(r8);
|
|
x[i] = field_0x4 + s16(f4 * f2 + f5 * f3);
|
|
y[i] = field_0x6 + s16(f5 * f2 - f4 * f3);
|
|
r8 -= 0x5555;
|
|
}
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
GXSetChanMatColor(GX_COLOR0A0, field_0x8);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3);
|
|
GXPosition3s16(x[0], y[0], 0);
|
|
GXPosition3s16(x[1], y[1], 0);
|
|
GXPosition3s16(x[2], y[2], 0);
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
/* 80051CF0-80051E5C 04C630 016C+00 1/0 0/0 0/0 .text draw__14dDlst_2DQuad_cFv */
|
|
void dDlst_2DQuad_c::draw() {
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
GXSetChanMatColor(GX_COLOR0A0, field_0xc);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0);
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
/* 80051E5C-80051F98 04C79C 013C+00 1/0 0/0 0/0 .text draw__15dDlst_2DPoint_cFv */
|
|
void dDlst_2DPoint_c::draw() {
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
GXSetChanMatColor(GX_COLOR0A0, field_0x8);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXSetPointSize(field_0xc, GX_TO_ZERO);
|
|
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXBegin(GX_POINTS, GX_VTXFMT0, 1);
|
|
GXPosition3s16(field_0x4, field_0x6, 0);
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
/* 80051F98-80052354 04C8D8 03BC+00 1/0 0/0 0/0 .text draw__11dDlst_2DT_cFv */
|
|
void dDlst_2DT_c::draw() {
|
|
static GXColor l_color = {0xFF, 0xFF, 0xFF, 0xE0};
|
|
f32 var5 = field_0xe;
|
|
f32 var6 = field_0x10;
|
|
f32 var11 = (field_0x16 - field_0x12) * 0.5f / field_0x24;
|
|
f32 var12 = (field_0x18 - field_0x14) * 0.5f / field_0x28;
|
|
u16 var1 = (field_0x1c - var11) / var5 * 32768.0f;
|
|
u16 var2 = (field_0x20 - var12) / var6 * 32768.0f;
|
|
u16 var3 = (field_0x1c + var11) / var5 * 32768.0f;
|
|
u16 var4 = (field_0x20 + var12) / var6 * 32768.0f;
|
|
|
|
GXTexObj tex;
|
|
GXInitTexObj(&tex, field_0x4, field_0xe, field_0x10, (GXTexFmt)field_0xc, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
|
GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
|
|
GXLoadTexObj(&tex, GX_TEXMAP0);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
l_color.a = field_0xd;
|
|
GXSetNumTexGens(1);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
|
|
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
|
|
GXSetZCompLoc(GX_FALSE);
|
|
GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE);
|
|
GXSetBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_SET);
|
|
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
|
|
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
|
|
GXSetCullMode(GX_CULL_NONE);
|
|
GXSetDither(GX_TRUE);
|
|
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
|
|
GXSetChanMatColor(GX_COLOR0A0, l_color);
|
|
GXSetClipMode(GX_CLIP_DISABLE);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3s16((s32)field_0x12, (s32)field_0x14, 0);
|
|
GXColor1u32(0xffffffff);
|
|
GXTexCoord2u16(var1, var2);
|
|
GXPosition3s16((s32)field_0x16, (s32)field_0x14, 0);
|
|
GXColor1u32(0xffffffff);
|
|
GXTexCoord2u16(var3, var2);
|
|
GXPosition3s16((s32)field_0x16, (s32)field_0x18, 0);
|
|
GXColor1u32(0xffffffff);
|
|
GXTexCoord2u16(var3, var4);
|
|
GXPosition3s16((s32)field_0x12, (s32)field_0x18, 0);
|
|
GXColor1u32(0xffffffff);
|
|
GXTexCoord2u16(var1, var4);
|
|
GXEnd();
|
|
GXSetClipMode(GX_CLIP_ENABLE);
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
/* 80052354-80052B00 04CC94 07AC+00 1/0 0/0 0/0 .text draw__12dDlst_2DT2_cFv */
|
|
void dDlst_2DT2_c::draw() {
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA6, 0);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXLoadTexObj(&mTexObj, GX_TEXMAP0);
|
|
GXSetNumChans(0);
|
|
GXSetTevColor(GX_TEVREG0, field_0x3c);
|
|
GXSetTevColor(GX_TEVREG1, field_0x40);
|
|
GXSetNumTexGens(1);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
if (field_0x46) {
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
|
|
} else {
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A1, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
|
}
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetZCompLoc(GX_FALSE);
|
|
GXSetZMode(GX_DISABLE, GX_ALWAYS, GX_DISABLE);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
|
|
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
|
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
|
|
GXSetCullMode(GX_CULL_NONE);
|
|
GXSetDither(GX_TRUE);
|
|
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
|
|
GXSetClipMode(GX_CLIP_DISABLE);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
f32 f31 = field_0x24 + field_0x2c;
|
|
f32 f30 = field_0x28 + field_0x30;
|
|
if (field_0x44 && field_0x45) {
|
|
f32 f29 = field_0x24 + field_0x2c * 0.5f;
|
|
f32 f28 = field_0x28 + field_0x30 * 0.5f;
|
|
f32 f27;
|
|
f32 f26;
|
|
if (mScaleX == 0.0f) {
|
|
f27 = 0.0f;
|
|
f26 = 0.0f;
|
|
} else {
|
|
f27 = 1.0f - 1.0f / mScaleX;
|
|
f26 = 1.0f;
|
|
}
|
|
f32 f25;
|
|
f32 f24;
|
|
if (mScaleY == 0.0f) {
|
|
f25 = 0.0f;
|
|
f24 = 0.0f;
|
|
} else {
|
|
f25 = 1.0f - 1.0f / mScaleY;
|
|
f24 = 1.0f;
|
|
}
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 16);
|
|
GXPosition2f32(field_0x24, field_0x28);
|
|
GXTexCoord2f32(f27, f25);
|
|
GXPosition2f32(f29, field_0x28);
|
|
GXTexCoord2f32(f26, f25);
|
|
GXPosition2f32(f29, f28);
|
|
GXTexCoord2f32(f26, f24);
|
|
GXPosition2f32(field_0x24, f28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f29, field_0x28);
|
|
GXTexCoord2f32(f26, f25);
|
|
GXPosition2f32(f31, field_0x28);
|
|
GXTexCoord2f32(f27, f25);
|
|
GXPosition2f32(f31, f28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f29, f28);
|
|
GXTexCoord2f32(f26, f24);
|
|
GXPosition2f32(field_0x24, f28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f29, f28);
|
|
GXTexCoord2f32(f26, f24);
|
|
GXPosition2f32(f29, f30);
|
|
GXTexCoord2f32(f26, f25);
|
|
GXPosition2f32(field_0x24, f30);
|
|
GXTexCoord2f32(f27, f25);
|
|
GXPosition2f32(f29, f28);
|
|
GXTexCoord2f32(f26, f24);
|
|
GXPosition2f32(f31, f28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f31, f30);
|
|
GXTexCoord2f32(f27, f25);
|
|
GXPosition2f32(f29, f30);
|
|
GXTexCoord2f32(f26, f25);
|
|
GXEnd();
|
|
} else if (field_0x44) {
|
|
f32 f28 = field_0x24 + field_0x2c * 0.5f;
|
|
f32 f29;
|
|
f32 f27;
|
|
if (mScaleX == 0.0f) {
|
|
f29 = 0.0f;
|
|
f27 = 0.0f;
|
|
} else {
|
|
f29 = 1.0f - 1.0f / mScaleX;
|
|
f27 = 1.0f;
|
|
}
|
|
f32 f24;
|
|
if (mScaleY == 0.0f) {
|
|
f24 = 1.0f;
|
|
} else {
|
|
f24 = 0.5f - (1.0f / mScaleY) * 0.5f;
|
|
}
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 8);
|
|
GXPosition2f32(field_0x24, field_0x28);
|
|
GXTexCoord2f32(f29, f24);
|
|
GXPosition2f32(f28, field_0x28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f28, f30);
|
|
GXTexCoord2f32(f27, 1.0f);
|
|
GXPosition2f32(field_0x24, f30);
|
|
GXTexCoord2f32(f29, 1.0f);
|
|
GXPosition2f32(f28, field_0x28);
|
|
GXTexCoord2f32(f27, f24);
|
|
GXPosition2f32(f31, field_0x28);
|
|
GXTexCoord2f32(f29, f24);
|
|
GXPosition2f32(f31, f30);
|
|
GXTexCoord2f32(f29, 1.0f);
|
|
GXPosition2f32(f28, f30);
|
|
GXTexCoord2f32(f27, 1.0f);
|
|
GXEnd();
|
|
} else if (field_0x45) {
|
|
f32 f24 = field_0x28 + 0.5f * field_0x30;
|
|
f32 f25;
|
|
f32 f26;
|
|
if (mScaleX == 0.0f) {
|
|
f25 = 1.0f;
|
|
f26 = 1.0f;
|
|
} else {
|
|
f25 = 0.5f - (1.0f / mScaleX * 0.5f);
|
|
f26 = 0.5f + (1.0f / mScaleX * 0.5f);
|
|
}
|
|
f32 f27;
|
|
f32 f28;
|
|
if (mScaleY == 0.0f) {
|
|
f27 = 0.0f;
|
|
f28 = 0.0f;
|
|
} else {
|
|
f27 = 1.0f - 1.0f / mScaleY;
|
|
f28 = 1.0f;
|
|
}
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 8);
|
|
GXPosition2f32(field_0x24, field_0x28);
|
|
GXTexCoord2f32(f25, f27);
|
|
GXPosition2f32(f31, field_0x28);
|
|
GXTexCoord2f32(f26, f27);
|
|
GXPosition2f32(f31, f24);
|
|
GXTexCoord2f32(f26, f28);
|
|
GXPosition2f32(field_0x24, f24);
|
|
GXTexCoord2f32(f25, f28);
|
|
GXPosition2f32(field_0x24, f24);
|
|
GXTexCoord2f32(f25, f28);
|
|
GXPosition2f32(f31, f24);
|
|
GXTexCoord2f32(f26, f28);
|
|
GXPosition2f32(f31, f30);
|
|
GXTexCoord2f32(f26, f27);
|
|
GXPosition2f32(field_0x24, f30);
|
|
GXTexCoord2f32(f25, f27);
|
|
GXEnd();
|
|
} else {
|
|
f32 f24;
|
|
f32 f25;
|
|
if (mScaleX == 0.0f) {
|
|
f24 = 0.0f;
|
|
f25 = 0.0f;
|
|
} else {
|
|
f24 = 0.5f - (1.0f / mScaleX * 0.5f);
|
|
f25 = 0.5f + (1.0f / mScaleX * 0.5f);
|
|
}
|
|
f32 f26;
|
|
f32 f27;
|
|
if (mScaleY == 0.0f) {
|
|
f26 = 0.0f;
|
|
f27 = 0.0f;
|
|
} else {
|
|
f26 = 0.5f - (1.0f / mScaleY * 0.5f);
|
|
f27 = 0.5f + (1.0f / mScaleY * 0.5f);
|
|
}
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition2f32(field_0x24, field_0x28);
|
|
GXTexCoord2f32(f24, f26);
|
|
GXPosition2f32(f31, field_0x28);
|
|
GXTexCoord2f32(f25, f26);
|
|
GXPosition2f32(f31, f30);
|
|
GXTexCoord2f32(f25, f27);
|
|
GXPosition2f32(field_0x24, f30);
|
|
GXTexCoord2f32(f24, f27);
|
|
GXEnd();
|
|
}
|
|
GXSetClipMode(GX_CLIP_ENABLE);
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
/* 803A87A0-803A87C0 0058C0 000C+14 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
|
|
static u8 cNullVec__6Z2Calc[12] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A87C0-803A8800 0058E0 003C+04 0/0 0/0 0/0 .data l_frontZMat */
|
|
static u8 l_frontZMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x40, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10,
|
|
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8800-803A882C 005920 002A+02 0/0 0/0 0/0 .data l_frontNoZSubMat */
|
|
static u8 l_frontNoZSubMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x40, 0x00, 0x00, 0x06, 0x61, 0x41, 0x00, 0x09, 0x35, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A882C-803A88A0 00594C 0060+14 0/1 0/0 0/0 .data l_shadowVolPos */
|
|
static Vec l_shadowVolPos[] = {
|
|
{-1.0f, -1.0f, 0.0f}, {-1.0f, -1.0f, -300.0f}, {-1.0f, 1.0f, 0.0f}, {-1.0f, 1.0f, -300.0f},
|
|
{1.0f, -1.0f, 0.0f}, {1.0f, -1.0f, -300.0f}, {1.0f, 1.0f, 0.0f}, {1.0f, 1.0f, -300.0f},
|
|
};
|
|
|
|
/* 803A88A0-803A88E0 0059C0 003B+05 0/0 0/0 0/0 .data l_shadowVolDL */
|
|
static u8 l_shadowVolDL[] ALIGN_DECL(32) = {
|
|
0x80, 0x00, 0x18, 0x06, 0x02, 0x03, 0x07, 0x00, 0x04, 0x05, 0x01, 0x06, 0x04, 0x00, 0x02,
|
|
0x07, 0x05, 0x04, 0x06, 0x03, 0x01, 0x05, 0x07, 0x02, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A88E0-803A8940 005A00 005A+06 1/1 0/0 0/0 .data l_shadowProjMat */
|
|
static u8 l_shadowProjMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x03, 0xC0, 0x61, 0xC0, 0x08, 0xFF, 0xFF, 0x61, 0xC1, 0x08, 0xE6, 0x70,
|
|
0x61, 0x43, 0x00, 0x00, 0x01, 0x61, 0x40, 0x00, 0x00, 0x07, 0x61, 0x41, 0x00, 0x04, 0xAD,
|
|
0x61, 0xF3, 0x64, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10,
|
|
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8940-803A89A0 005A60 005A+06 0/0 0/0 0/0 .data l_shadowVolMat */
|
|
static u8 l_shadowVolMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFC, 0x61, 0xC1, 0x08, 0xFF, 0x90,
|
|
0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x0D, 0x61, 0x41, 0x00, 0x01, 0x35,
|
|
0x61, 0xF3, 0x7F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10,
|
|
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A89A0-803A8A00 005AC0 0055+0B 0/1 0/0 0/0 .data l_clearMat */
|
|
static u8 l_clearMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFF, 0x61, 0xC1, 0x08, 0xFF, 0xA0,
|
|
0x61, 0x40, 0x00, 0x00, 0x06, 0x61, 0x41, 0x00, 0x00, 0x14, 0x61, 0xF3, 0x7F, 0x00, 0x00,
|
|
0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00,
|
|
0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8A00-803A8A60 005B20 0055+0B 0/1 0/0 0/0 .data l_frontMat */
|
|
static u8 l_frontMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFF, 0x61, 0xC1, 0x08, 0xFF, 0x90,
|
|
0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x07, 0x61, 0x41, 0x00, 0x01, 0x15,
|
|
0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00,
|
|
0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8A60-803A8A9C 005B80 003C+00 0/1 0/0 0/0 .data l_backSubMat */
|
|
static u8 l_backSubMat[] ALIGN_DECL(32) = {
|
|
0x61, 0x41, 0x00, 0x09, 0x35, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10,
|
|
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8A9C-803A8B60 005BBC 00A8+1C 0/1 0/0 0/0 .data l_simpleShadowPos */
|
|
static Vec l_simpleShadowPos[] = {
|
|
{0.0f, -1.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, -1.0f, -1.0f}, {1.0f, 0.0f, -1.0f},
|
|
{-1.0f, -1.0f, -1.0f}, {-1.0f, 0.0f, -1.0f}, {-1.0f, -1.0f, 1.0f}, {-1.0f, 0.0f, 1.0f},
|
|
{1.0f, -1.0f, 1.0f}, {1.0f, 0.0f, 1.0f}, {-1.0f, 1.0f, -1.0f}, {1.0f, 1.0f, -1.0f},
|
|
{1.0f, 1.0f, 1.0f}, {-1.0f, 1.0f, 1.0f},
|
|
};
|
|
|
|
/* 803A8B60-803A8BC0 005C80 0058+08 0/1 0/0 0/0 .data l_shadowVolumeDL */
|
|
static u8 l_shadowVolumeDL[] ALIGN_DECL(32) = {
|
|
0x98, 0x00, 0x05, 0x03, 0x09, 0x01, 0x07, 0x05, 0x98, 0x00, 0x05, 0x04, 0x06, 0x00, 0x08,
|
|
0x02, 0x98, 0x00, 0x04, 0x04, 0x05, 0x06, 0x07, 0x98, 0x00, 0x04, 0x02, 0x03, 0x04, 0x05,
|
|
0x98, 0x00, 0x04, 0x08, 0x09, 0x02, 0x03, 0x98, 0x00, 0x04, 0x06, 0x07, 0x08, 0x09, 0x98,
|
|
0x00, 0x03, 0x01, 0x05, 0x03, 0x98, 0x00, 0x03, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8BC0-803A8C20 005CE0 0055+0B 0/1 0/0 0/0 .data l_shadowSealTexDL */
|
|
static u8 l_shadowSealTexDL[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x03, 0xC0, 0x61, 0x40, 0x00, 0x00, 0x06, 0x61, 0x41, 0x00, 0x06, 0x15,
|
|
0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00,
|
|
0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x04, 0x0A, 0x00, 0x00, 0x0B,
|
|
0x01, 0x00, 0x0C, 0x01, 0x01, 0x0D, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8C20-803A8C80 005D40 0055+0B 0/1 0/0 0/0 .data l_shadowSealTex2DL */
|
|
static u8 l_shadowSealTex2DL[] ALIGN_DECL(32) = {
|
|
0x61, 0x28, 0x38, 0x03, 0xC0, 0x61, 0x40, 0x00, 0x00, 0x06, 0x61, 0x41, 0x00, 0x06, 0x15,
|
|
0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00,
|
|
0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x04, 0x0A, 0x00, 0x00, 0x0B,
|
|
0x02, 0x00, 0x0C, 0x02, 0x01, 0x0D, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 803A8C80-803A8D00 005DA0 0069+17 0/1 0/0 0/0 .data l_shadowSealDL */
|
|
static u8 l_shadowSealDL[] ALIGN_DECL(32) = {
|
|
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,
|
|
0x00, 0x05, 0x00, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFF, 0x61, 0xC1,
|
|
0x08, 0xFF, 0xB0, 0x61, 0x40, 0x00, 0x00, 0x06, 0x61, 0x41, 0x00, 0x06, 0xED, 0x10, 0x00,
|
|
0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00,
|
|
0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x80, 0x00, 0x04, 0x0A, 0x0B, 0x0C, 0x0D, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 80052B00-80052B4C 04D440 004C+00 1/1 0/0 0/0 .text __ct__12dDlst_2DT2_cFv */
|
|
dDlst_2DT2_c::dDlst_2DT2_c() {
|
|
field_0x40 = (GXColor){0, 0, 0, 0};
|
|
}
|
|
|
|
/* 80052B4C-80052C58 04D48C 010C+00 1/1 0/0 0/0 .text init__12dDlst_2DT2_cFP7ResTIMGffffUcUcUcff
|
|
*/
|
|
void dDlst_2DT2_c::init(ResTIMG* i_timg, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
|
|
u8 param_5, u8 param_6, u8 param_7, f32 i_scaleX, f32 i_scaleY) {
|
|
mDoLib_setResTimgObj(i_timg, &mTexObj, 0, NULL);
|
|
field_0x24 = param_1;
|
|
field_0x28 = param_2;
|
|
field_0x2c = param_3;
|
|
field_0x30 = param_4;
|
|
mScaleX = i_scaleX;
|
|
mScaleY = i_scaleY;
|
|
field_0x3c = (GXColor){0, 0, 0, 255};
|
|
|
|
field_0x44 = param_6;
|
|
if (field_0x44 != 0 && GXGetTexObjWrapS(&mTexObj) == 2) {
|
|
field_0x44 = 0;
|
|
}
|
|
|
|
field_0x45 = param_7;
|
|
if (field_0x45 != 0 && GXGetTexObjWrapT(&mTexObj) == 2) {
|
|
field_0x45 = 0;
|
|
}
|
|
|
|
field_0x46 = param_5;
|
|
}
|
|
|
|
/* 80052C58-8005312C 04D598 04D4+00 1/0 0/0 0/0 .text draw__11dDlst_2DM_cFv */
|
|
void dDlst_2DM_c::draw() {
|
|
s16 r31 = field_0x22;
|
|
s16 r30 = field_0x24;
|
|
int r29 = field_0x22 + 256.0f;
|
|
int r28 = field_0x24 + 256.0f;
|
|
f32 f4 = 256.0f / field_0x2e;
|
|
f32 f3 = 256.0f / field_0x30;
|
|
int r27 = field_0x32 * f4;
|
|
int r26 = field_0x34 * f3;
|
|
s16 r25 = r27 + s16(field_0x1e * f4);
|
|
s16 r24 = r26 + s16(field_0x20 * f3);
|
|
GXTexObj tex[2];
|
|
GXInitTexObj(&tex[0], field_0x18, field_0x1e, field_0x20, GXTexFmt(field_0x1c), GX_CLAMP, GX_CLAMP, 0);
|
|
GXInitTexObjLOD(&tex[0], GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
|
|
GXTexWrapMode wrap = field_0xc ? GX_REPEAT : GX_CLAMP;
|
|
GXInitTexObj(&tex[1], field_0x28, field_0x2e, field_0x30, GXTexFmt(field_0x2c), wrap, wrap, 0);
|
|
GXInitTexObjLOD(&tex[1], GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
|
|
GXLoadTexObj(&tex[0], GX_TEXMAP0);
|
|
GXLoadTexObj(&tex[1], GX_TEXMAP1);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
|
|
GXSetNumChans(0);
|
|
GXSetTevColor(GX_TEVREG0, field_0xd);
|
|
GXSetTevColor(GX_TEVREG1, field_0x11);
|
|
GXSetNumTexGens(2);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
|
GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY);
|
|
GXSetNumTevStages(2);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A1, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0);
|
|
GXTexCoord2s16(r31, r30);
|
|
GXTexCoord2s16(r27, r26);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0);
|
|
GXTexCoord2s16(r29, r30);
|
|
GXTexCoord2s16(r25, r26);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0);
|
|
GXTexCoord2s16(r29, r28);
|
|
GXTexCoord2s16(r25, r24);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0);
|
|
GXTexCoord2s16(r31, r28);
|
|
GXTexCoord2s16(r27, r24);
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
|
|
/* 8005312C-8005364C 04DA6C 0520+00 1/0 0/0 0/0 .text draw__11dDlst_2Dm_cFv */
|
|
void dDlst_2Dm_c::draw() {
|
|
s16 r31 = field_0x48;
|
|
s16 r30 = field_0x4a;
|
|
int r29 = field_0x48 + 256.0f;
|
|
int r28 = field_0x4a + 256.0f;
|
|
f32 f31 = field_0xc * 256.0f / GXGetTexObjWidth(&field_0x50);
|
|
f32 f30 = field_0x10 * 256.0f / GXGetTexObjHeight(&field_0x50);
|
|
int r27 = field_0x7c * f31;
|
|
int r26 = field_0x7e * f30;
|
|
s16 r25 = r27 + s16(f31 * GXGetTexObjWidth(&field_0x1c));
|
|
s16 r24 = r26 + s16(f30 * GXGetTexObjHeight(&field_0x1c));
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 8);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
|
|
GXLoadTexObj(&field_0x1c, GX_TEXMAP0);
|
|
if (field_0x4c) {
|
|
GXLoadTlut(&field_0x3c, GXGetTexObjTlut(&field_0x1c));
|
|
}
|
|
GXLoadTexObj(&field_0x50, GX_TEXMAP1);
|
|
if (field_0x80) {
|
|
GXLoadTlut(&field_0x70, GXGetTexObjTlut(&field_0x50));
|
|
}
|
|
GXSetNumChans(0);
|
|
GXSetTevColor(GX_TEVREG0, field_0x14);
|
|
GXSetTevColor(GX_TEVREG1, field_0x18);
|
|
GXSetNumTexGens(2);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
|
GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY);
|
|
GXSetNumTevStages(2);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A1, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
|
|
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0);
|
|
GXSetCurrentMtx(0);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0);
|
|
GXTexCoord2s16(r31, r30);
|
|
GXTexCoord2s16(r27, r26);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0);
|
|
GXTexCoord2s16(r29, r30);
|
|
GXTexCoord2s16(r25, r26);
|
|
GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0);
|
|
GXTexCoord2s16(r29, r28);
|
|
GXTexCoord2s16(r25, r24);
|
|
GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0);
|
|
GXTexCoord2s16(r31, r28);
|
|
GXTexCoord2s16(r27, r24);
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
|
|
|
|
/* 8005364C-800539DC 04DF8C 0390+00 1/0 0/0 0/0 .text draw__12dDlst_2DMt_cFv */
|
|
void dDlst_2DMt_c::draw() {
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
dDlst_2DMt_tex_c* r27 = field_0x8;
|
|
int r28 = 0;
|
|
for (int i = 0; i < field_0x4; i++) {
|
|
if (r27->check()) {
|
|
if (r27->getCI()) {
|
|
GXLoadTlut(r27->getTlutObj(), i);
|
|
}
|
|
GXLoadTexObj(r27->getTexObj(), GXTexMapID(r28));
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GXAttr(GX_VA_TEX0 + r28), GX_CLR_RGBA, GX_RGBA6, 0);
|
|
GXSetVtxDesc(GXAttr(GX_VA_TEX0 + r28), GX_DIRECT);
|
|
GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), r27->mColor);
|
|
GXSetTexCoordGen(GXTexCoordID(r28), GX_TG_MTX2x4, GXTexGenSrc(GX_TG_TEX0 + r28), GX_IDENTITY);
|
|
GXSetTevOrder(GXTevStageID(r28), GXTexCoordID(r28), GXTexMapID(r28), GX_COLOR_NULL);
|
|
GXSetTevColorIn(GXTevStageID(r28), GX_CC_ZERO, GXTevColorArg(GX_CC_C0 + r28*2), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO);
|
|
GXSetTevColorOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GXTevStageID(r28), GX_CA_ZERO, GXTevAlphaArg(GX_CA_A0 + r28), GX_CA_TEXA, r28 ? GX_CA_APREV : GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
r28++;
|
|
if (r28 >= 3) {
|
|
break;
|
|
}
|
|
}
|
|
r27++;
|
|
}
|
|
if (r28) {
|
|
GXSetNumChans(0);
|
|
GXSetNumTexGens(r28);
|
|
GXSetNumTevStages(r28);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
|
|
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
|
GXPosition3s16(field_0xc, field_0xe, 0);
|
|
dDlst_2DMt_tex_c* tmp = field_0x8;
|
|
for (int i = 0; i < field_0x4; i++) {
|
|
if (tmp->check()) {
|
|
GXTexCoord2f32(tmp->getS(), tmp->getT());
|
|
}
|
|
tmp++;
|
|
}
|
|
GXPosition3s16(field_0x10, field_0xe, 0);
|
|
tmp = field_0x8;
|
|
for (int i = 0; i < field_0x4; i++) {
|
|
if (tmp->check()) {
|
|
GXTexCoord2f32(tmp->getS() + tmp->getSw(), tmp->getT());
|
|
}
|
|
tmp++;
|
|
}
|
|
GXPosition3s16(field_0x10, field_0x12, 0);
|
|
tmp = field_0x8;
|
|
for (int i = 0; i < field_0x4; i++) {
|
|
if (tmp->check()) {
|
|
GXTexCoord2f32(tmp->getS() + tmp->getSw(), tmp->getT() + tmp->getTw());
|
|
}
|
|
tmp++;
|
|
}
|
|
GXPosition3s16(field_0xc, field_0x12, 0);
|
|
tmp = field_0x8;
|
|
for (int i = 0; i < field_0x4; i++) {
|
|
if (tmp->check()) {
|
|
GXTexCoord2f32(tmp->getS(), tmp->getT() + tmp->getTw());
|
|
}
|
|
tmp++;
|
|
}
|
|
GXEnd();
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
}
|
|
}
|
|
|
|
/* 800539DC-80053A00 04E31C 0024+00 0/0 1/0 0/0 .text getTexture__10J2DPictureCFUc */
|
|
// Should be inline
|
|
JUTTexture* J2DPicture::getTexture(u8 param_0) const {
|
|
if (param_0 < 2) {
|
|
return mTexture[param_0];
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 80053A00-80053A9C 04E340 009C+00 0/0 1/1 0/0 .text __ct__10dDlst_2D_cFP7ResTIMGssssUc
|
|
*/
|
|
dDlst_2D_c::dDlst_2D_c(ResTIMG* i_timg, s16 i_posX, s16 i_posY, s16 i_sizeX, s16 i_sizeY,
|
|
u8 i_alpha) {
|
|
mpPicture.initiate(i_timg, NULL);
|
|
mPosX = i_posX;
|
|
mPosY = i_posY;
|
|
mSizeX = i_sizeX;
|
|
mSizeY = i_sizeY;
|
|
mAlpha = i_alpha;
|
|
}
|
|
|
|
/* 80053A9C-80053B64 04E3DC 00C8+00 1/0 0/0 0/0 .text draw__10dDlst_2D_cFv */
|
|
void dDlst_2D_c::draw() {
|
|
mpPicture.setAlpha(mAlpha);
|
|
mpPicture.draw(mPosX, mPosY, mSizeX, mSizeY, false, false, false);
|
|
}
|
|
|
|
/* 80053B64-80053BA0 04E4A4 003C+00 1/0 0/0 0/0 .text draw__11dDlst_blo_cFv */
|
|
void dDlst_blo_c::draw() {
|
|
mScreen.draw(field_0x120, field_0x124, dComIfGp_getCurrentGrafPort());
|
|
}
|
|
|
|
/* 80053CDC-80053CEC 04E61C 0010+00 0/0 2/2 0/0 .text init__8cM_rnd_cFiii */
|
|
void cM_rnd_c::init(int s0, int s1, int s2) {
|
|
seed0 = s0;
|
|
seed1 = s1;
|
|
seed2 = s2;
|
|
}
|
|
|
|
/* 80053CEC-80053DE0 04E62C 00F4+00 2/2 0/0 0/0 .text get__8cM_rnd_cFv */
|
|
f32 cM_rnd_c::get() {
|
|
seed0 = seed0 * 171 % 30269;
|
|
seed1 = seed1 * 172 % 30307;
|
|
seed2 = seed2 * 170 % 30323;
|
|
f32 rm = fmodf((seed0 / 30269.0f) + (seed1 / 30307.0f) + (seed2 / 30323.0f), 1.0);
|
|
|
|
return fabsf(rm);
|
|
}
|
|
|
|
/* 80053DE0-80053E18 04E720 0038+00 1/1 0/0 0/0 .text getF__8cM_rnd_cFf */
|
|
f32 cM_rnd_c::getF(f32 param_0) {
|
|
return get() * param_0;
|
|
}
|
|
|
|
/* 80053E18-80053E60 04E758 0048+00 1/1 0/0 0/0 .text getFX__8cM_rnd_cFf */
|
|
f32 cM_rnd_c::getFX(f32 param_0) {
|
|
return ((get() - 0.5f) * param_0) * 2.0f;
|
|
}
|
|
|
|
/* 80053E60-80053E9C 04E7A0 003C+00 1/1 0/0 0/0 .text getValue__8cM_rnd_cFff */
|
|
f32 cM_rnd_c::getValue(f32 param_0, f32 param_1) {
|
|
return param_0 + getF(param_1);
|
|
}
|
|
|
|
/* 80053E9C-800541F4 04E7DC 0358+00 1/0 0/0 0/0 .text draw__18dDlst_effectLine_cFv */
|
|
void dDlst_effectLine_c::draw() {
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetNumChans(1);
|
|
GXSetChanCtrl(GX_COLOR0, 0, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
|
|
GXSetNumTexGens(0);
|
|
GXSetNumTevStages(1);
|
|
GXSetTevColor(GX_TEVREG0, mLineColor);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
|
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
|
|
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
|
|
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
|
|
GXSetCullMode(GX_CULL_NONE);
|
|
GXLoadPosMtxImm(j3dSys.mViewMtx, GX_PNMTX0);
|
|
GXSetClipMode(GX_CLIP_ENABLE);
|
|
GXSetCurrentMtx(0);
|
|
int r31 = getRndValue(field_0x20, field_0x22);
|
|
cXyz local_68;
|
|
cXyz local_74;
|
|
for (int i = 0; i < r31; i++) {
|
|
int r23 = getRndFX(32767.0f);
|
|
float tmp = getRndValue(field_0x28, field_0x2c);
|
|
local_68.x = field_0x10.x + tmp * cM_ssin(r23);
|
|
local_68.y = field_0x10.y + tmp * cM_scos(r23);
|
|
local_68.z = field_0x10.z;
|
|
tmp = getRndValue(field_0x30, field_0x34);
|
|
local_74.x = local_68.x + tmp * cM_ssin(r23);
|
|
local_74.y = local_68.y + tmp * cM_scos(r23);
|
|
local_74.z = field_0x10.z;
|
|
cMtx_multVec(dComIfGd_getInvViewMtx(), &local_68, &local_68);
|
|
cMtx_multVec(dComIfGd_getInvViewMtx(), &local_74, &local_74);
|
|
GXSetLineWidth(getRndValue(field_0x24, field_0x26), GX_TO_ZERO);
|
|
GXBegin(GX_LINES, GX_VTXFMT0, 2);
|
|
GXPosition3f32(local_68.x, local_68.y, local_68.z);
|
|
GXPosition3f32(local_74.x, local_74.y, local_74.z);
|
|
GXEnd();
|
|
}
|
|
}
|
|
|
|
/* 800541F4-80054288 04EB34 0094+00 0/0 1/1 0/0 .text
|
|
* update__18dDlst_effectLine_cFR4cXyzR8_GXColorUsUsUsUsffff */
|
|
void dDlst_effectLine_c::update(cXyz& param_0, _GXColor& i_lineColor, u16 param_2, u16 param_3,
|
|
u16 param_4, u16 param_5, f32 param_6, f32 param_7, f32 param_8,
|
|
f32 param_9) {
|
|
field_0x10 = param_0;
|
|
mLineColor = i_lineColor;
|
|
field_0x20 = param_2;
|
|
field_0x22 = param_3;
|
|
field_0x24 = param_4;
|
|
field_0x26 = param_5;
|
|
field_0x28 = param_6;
|
|
field_0x2c = param_7;
|
|
field_0x30 = param_8;
|
|
field_0x34 = param_9;
|
|
|
|
dComIfGd_set2DOpa(this);
|
|
}
|
|
|
|
/* 80054288-800543B4 04EBC8 012C+00 1/1 0/0 0/0 .text
|
|
* set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla */
|
|
int dDlst_shadowPoly_c::set(cBgD_Vtx_t* i_vtx, u16 param_1, u16 param_2, u16 param_3,
|
|
cM3dGPla* i_plane) {
|
|
if (mCount >= getTriMax()) {
|
|
return 0;
|
|
}
|
|
|
|
dDlst_shadowTri_c* dst = getTri() + mCount;
|
|
|
|
cXyz b(*i_plane->GetNP());
|
|
f32 temp_f3 = (1.0f - fabsf(b.y));
|
|
temp_f3 *= temp_f3;
|
|
|
|
b.x *= temp_f3;
|
|
b.z *= temp_f3;
|
|
b *= 2.0f;
|
|
|
|
VECAdd(&i_vtx[param_1], &b, &dst->mPos[0]);
|
|
VECAdd(&i_vtx[param_2], &b, &dst->mPos[1]);
|
|
VECAdd(&i_vtx[param_3], &b, &dst->mPos[2]);
|
|
mCount++;
|
|
return 1;
|
|
}
|
|
|
|
|
|
/* 800543B4-80054478 04ECF4 00C4+00 1/1 0/0 0/0 .text draw__18dDlst_shadowPoly_cFv */
|
|
void dDlst_shadowPoly_c::draw() {
|
|
dDlst_shadowTri_c* tri = getTri();
|
|
|
|
GXBegin(GX_TRIANGLES, GX_VTXFMT0, mCount * 3);
|
|
for (int i = 0; i < mCount; i++) {
|
|
GXPosition3f32(tri->mPos[2].x, tri->mPos[2].y, tri->mPos[2].z);
|
|
GXPosition3f32(tri->mPos[1].x, tri->mPos[1].y, tri->mPos[1].z);
|
|
GXPosition3f32(tri->mPos[0].x, tri->mPos[0].y, tri->mPos[0].z);
|
|
tri++;
|
|
}
|
|
|
|
GXEnd();
|
|
}
|
|
|
|
/* 80054478-800544F0 04EDB8 0078+00 1/1 0/0 0/0 .text J3DDrawBuffer__create__FUl */
|
|
static J3DDrawBuffer* J3DDrawBuffer__create(u32 size) {
|
|
J3DDrawBuffer* buffer = new J3DDrawBuffer();
|
|
|
|
if (buffer) {
|
|
if (buffer->allocBuffer(size) == kJ3DError_Success) {
|
|
return buffer;
|
|
}
|
|
delete buffer;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 800544F0-80054500 04EE30 0010+00 2/2 0/0 0/0 .text reset__18dDlst_shadowReal_cFv */
|
|
void dDlst_shadowReal_c::reset() {
|
|
mState = 0;
|
|
mModelNum = 0;
|
|
}
|
|
|
|
/* 80054500-800545D4 04EE40 00D4+00 1/1 0/0 0/0 .text imageDraw__18dDlst_shadowReal_cFPA4_f */
|
|
void dDlst_shadowReal_c::imageDraw(Mtx param_0) {
|
|
GXSetProjection(mRenderProjMtx, GX_ORTHOGRAPHIC);
|
|
J3DModel** models = mpModels;
|
|
|
|
for (u8 i = 0; i < mModelNum; i++) {
|
|
J3DModelData* model_data = (*models)->getModelData();
|
|
model_data->getShapeNodePointer(0)->loadPreDrawSetting();
|
|
|
|
for (u16 j = 0; j < model_data->getShapeNum(); j++) {
|
|
if (!model_data->getShapeNodePointer(j)->checkFlag(1)) {
|
|
J3DShapePacket* shape_pkt = (*models)->getShapePacket(j);
|
|
shape_pkt->setBaseMtxPtr(&mViewMtx);
|
|
shape_pkt->drawFast();
|
|
shape_pkt->setBaseMtxPtr((Mtx*)param_0);
|
|
}
|
|
}
|
|
|
|
models++;
|
|
}
|
|
}
|
|
|
|
/* 800545D4-80054688 04EF14 00B4+00 1/1 0/0 0/0 .text draw__18dDlst_shadowReal_cFv */
|
|
void dDlst_shadowReal_c::draw() {
|
|
static GXColor l_color = {0, 0, 0, 64};
|
|
l_color.a = field_0x1;
|
|
|
|
GXSetTevColor(GX_TEVREG0, l_color);
|
|
GXCallDisplayList(l_shadowProjMat, 0x40);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXLoadTexMtxImm(mReceiverProjMtx, GX_TEXMTX0, GX_MTX3x4);
|
|
mShadowRealPoly.draw();
|
|
}
|
|
|
|
/* 80054688-80054854 04EFC8 01CC+00 1/1 0/0 0/0 .text
|
|
* psdRealCallBack__FP13cBgS_ShdwDrawP10cBgD_Vtx_tiiiP8cM3dGPla */
|
|
static int psdRealCallBack(cBgS_ShdwDraw* param_0, cBgD_Vtx_t* param_1, int param_2,
|
|
int param_3, int param_4, cM3dGPla* param_5) {
|
|
ShdwDrawPoly_c* shdwDrawPoly = (ShdwDrawPoly_c*)param_0;
|
|
const cXyz* normal = param_5->GetNP();
|
|
if (shdwDrawPoly->getLightVec()->inprod(*normal) < -0.2f) {
|
|
cXyz* center = shdwDrawPoly->getCenter();
|
|
if (normal->x * center->x + normal->y * center->y + normal->z * center->z + param_5->GetD() > -90.f) {
|
|
const cXyz* min = shdwDrawPoly->GetBndP()->GetMinP();
|
|
const cXyz* max = shdwDrawPoly->GetBndP()->GetMaxP();
|
|
cBgD_Vtx_t* vert1 = param_1 + param_2;
|
|
cBgD_Vtx_t* vert2 = param_1 + param_3;
|
|
cBgD_Vtx_t* vert3 = param_1 + param_4;
|
|
if ((vert1->y < min->y && vert2->y < min->y && vert3->y < min->y)
|
|
|| (vert1->y > max->y && vert2->y > max->y && vert3->y > max->y)
|
|
|| (vert1->x < min->x && vert2->x < min->x && vert3->x < min->x)
|
|
|| (vert1->x > max->x && vert2->x > max->x && vert3->x > max->x)
|
|
|| (vert1->z < min->z && vert2->z < min->z && vert3->z < min->z)
|
|
|| (vert1->z > max->z && vert2->z > max->z && vert3->z > max->z)) {
|
|
return 1;
|
|
} else {
|
|
return shdwDrawPoly->getPoly()->set(param_1, param_2, param_3, param_4, param_5);
|
|
}
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 80054854-80054A6C 04F194 0218+00 1/1 0/0 0/0 .text
|
|
* realPolygonCheck__FP4cXyzffP4cXyzP18dDlst_shadowPoly_c */
|
|
static BOOL realPolygonCheck(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
|
|
dDlst_shadowPoly_c* param_4) {
|
|
ShdwDrawPoly_c shdwDrawPoly;
|
|
cXyz local_8c;
|
|
cXyz local_98;
|
|
f32 tmp1 = param_1 * param_1 * 0.002f;
|
|
f32 tmp2 = cLib_maxLimit(tmp1, 120.0f);
|
|
f32 var1 = param_1 + param_2 - tmp2;
|
|
local_8c.y = param_0->y - var1;
|
|
local_98.y = param_0->y + param_1 * 0.15f;
|
|
local_98.x = param_0->x + param_3->x * var1;
|
|
if (local_98.x < param_0->x) {
|
|
local_8c.x = local_98.x;
|
|
local_98.x = param_0->x;
|
|
} else {
|
|
local_8c.x = param_0->x;
|
|
}
|
|
local_8c.x -= param_1;
|
|
local_98.x += param_1;
|
|
var1 = param_0->z + param_3->z * var1;
|
|
local_98.z = var1;
|
|
if (var1 < param_0->z) {
|
|
local_8c.z = local_98.z;
|
|
local_98.z = param_0->z;
|
|
} else {
|
|
local_8c.z = param_0->z;
|
|
}
|
|
local_8c.z -= param_1;
|
|
local_98.z += param_1;
|
|
mDoLib_clipper::changeFar(mDoLib_clipper::getFovyRate() * 10000.0f);
|
|
s32 clip = mDoLib_clipper::clip(j3dSys.getViewMtx(), &local_98, &local_8c);
|
|
mDoLib_clipper::resetFar();
|
|
if (clip) {
|
|
return FALSE;
|
|
}
|
|
shdwDrawPoly.Set(local_8c, local_98);
|
|
shdwDrawPoly.SetCallback(psdRealCallBack);
|
|
shdwDrawPoly.setCenter(param_0);
|
|
shdwDrawPoly.setLightVec(param_3);
|
|
shdwDrawPoly.setPoly(param_4);
|
|
dComIfG_Bgsp().ShdwDraw(&shdwDrawPoly);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 80054ACC-80054BD0 04F40C 0104+00 2/2 0/0 0/0 .text setkankyoShadow__FP12dKy_tevstr_cPf
|
|
*/
|
|
static void setkankyoShadow(dKy_tevstr_c* param_0, f32* param_1) {
|
|
dScnKy_env_light_c* env_light = dKy_getEnvlight();
|
|
|
|
if (param_0 != NULL) {
|
|
*param_1 *= param_0->field_0x344;
|
|
} else {
|
|
*param_1 *= env_light->field_0x1238;
|
|
}
|
|
|
|
if ((env_light->shadow_mode & 4) && param_0 != NULL) {
|
|
*param_1 *= param_0->field_0x344;
|
|
}
|
|
|
|
if (env_light->mThunderEff.mState != 0 && env_light->mThunderEff.mState < 10) {
|
|
*param_1 += env_light->mThunderEff.mFlashTimer;
|
|
}
|
|
|
|
if (g_env_light.eflight.mState == 2) {
|
|
f32 fvar1 = g_env_light.eflight.mFrame / 15.0f;
|
|
if (fvar1 > 1.0f) {
|
|
fvar1 = 1.0f;
|
|
}
|
|
|
|
*param_1 += (1.0f - fvar1) * (0.65f - *param_1);
|
|
}
|
|
|
|
if (*param_1 > 1.0f) {
|
|
*param_1 = 1.0f;
|
|
}
|
|
}
|
|
|
|
/* 80054BD0-80055028 04F510 0458+00 1/1 0/0 0/0 .text
|
|
* setShadowRealMtx__18dDlst_shadowReal_cFP4cXyzP4cXyzfffP12dKy_tevstr_c */
|
|
u8 dDlst_shadowReal_c::setShadowRealMtx(cXyz* param_0, cXyz* param_1, f32 param_2, f32 param_3,
|
|
f32 param_4, dKy_tevstr_c* param_5) {
|
|
mShadowRealPoly.reset();
|
|
setkankyoShadow(param_5, ¶m_4);
|
|
int r29 = g_envHIO.mOther.mShadowDensity * param_4;
|
|
cXyz local_64 = *param_0 - *param_1;
|
|
u8 r28 = 0;
|
|
if (param_5) {
|
|
cLib_chaseUC(¶m_5->field_0x385, param_3 > 50.0f ? 0 : 0xff, 60);
|
|
r28 = param_5->field_0x385;
|
|
}
|
|
f32 f29 = local_64.abs2();
|
|
if (!cM3d_IsZero(f29)) {
|
|
f32 tmp = JMAFastSqrt(f29);
|
|
if (local_64.y / tmp < 0.8f) {
|
|
local_64.y = tmp * 0.8f;
|
|
f32 tmp2 = local_64.abs2XZ();
|
|
if (!cM3d_IsZero(tmp2)) {
|
|
f32 tmp3 = JMAFastSqrt((f29 - local_64.y * local_64.y) / tmp2);
|
|
local_64.x *= tmp3;
|
|
local_64.z *= tmp3;
|
|
}
|
|
}
|
|
if (r28 == 0) {
|
|
local_64.x = 0.0f;
|
|
local_64.z = 0.0f;
|
|
} else if (r28 < 0xff) {
|
|
f32 tmp4 = r28 / 255.0f;
|
|
local_64.x *= tmp4;
|
|
local_64.z *= tmp4;
|
|
}
|
|
f29 = local_64.abs();
|
|
if (!cM3d_IsZero(f29)) {
|
|
f29 = (param_2 * 0.5f) / f29;
|
|
}
|
|
}
|
|
local_64 *= f29;
|
|
local_64 += *param_1;
|
|
param_2 = param_2 * 0.4f;
|
|
cXyz local_70 = *param_1 - local_64;
|
|
if (local_70.isZero()) {
|
|
local_70.y = -1.0f;
|
|
local_64.y = param_1->y + 1.0f;
|
|
} else {
|
|
local_70.normalize();
|
|
}
|
|
if (!realPolygonCheck(param_1, param_2, param_3, &local_70, &mShadowRealPoly)) {
|
|
return 0;
|
|
}
|
|
cMtx_lookAt(mViewMtx, &local_64, param_1, 0);
|
|
C_MTXOrtho(mRenderProjMtx, param_2, -param_2, -param_2, param_2, 1.0f, 10000.0f);
|
|
C_MTXLightOrtho(mReceiverProjMtx, param_2, -param_2, -param_2, param_2, 0.5f, -0.5f, 0.5f, 0.5f);
|
|
cMtx_concat(mReceiverProjMtx, mViewMtx, mReceiverProjMtx);
|
|
return r29;
|
|
}
|
|
|
|
|
|
/* 80055028-800551D4 04F968 01AC+00 1/1 0/0 0/0 .text
|
|
* set__18dDlst_shadowReal_cFUlP8J3DModelP4cXyzffP12dKy_tevstr_cff */
|
|
u32 dDlst_shadowReal_c::set(u32 i_key, J3DModel* i_model, cXyz* param_2, f32 param_3, f32 param_4,
|
|
dKy_tevstr_c* param_5, f32 i_cameraZ, f32 param_7) {
|
|
dScnKy_env_light_c* env_light = dKy_getEnvlight();
|
|
|
|
if (mModelNum == 0) {
|
|
cXyz sp60;
|
|
|
|
if (param_5 != NULL) {
|
|
sp60 = param_5->mLightPosWorld;
|
|
} else {
|
|
sp60 = dKy_plight_near_pos();
|
|
|
|
if (!(env_light->shadow_mode & 4) &&
|
|
((env_light->shadow_mode & 1) || (env_light->shadow_mode & 2)))
|
|
{
|
|
sp60 = g_env_light.field_0x10a0;
|
|
param_5->mLightPosWorld = g_env_light.field_0x10a0;
|
|
}
|
|
}
|
|
|
|
field_0x1 = setShadowRealMtx(&sp60, param_2, param_3, param_4, param_7, param_5);
|
|
if (!field_0x1) {
|
|
return 0;
|
|
}
|
|
|
|
mState = 1;
|
|
mKey = i_key;
|
|
mModelNum = 0;
|
|
mCameraZ = i_cameraZ;
|
|
mZsortPre = NULL;
|
|
mZsortNext = NULL;
|
|
}
|
|
|
|
u8 last_model_num = mModelNum;
|
|
mModelNum++;
|
|
mpModels[last_model_num] = i_model;
|
|
return mKey;
|
|
}
|
|
|
|
/* 800551D4-8005520C 04FB14 0038+00 1/1 0/0 0/0 .text add__18dDlst_shadowReal_cFP8J3DModel */
|
|
bool dDlst_shadowReal_c::add(J3DModel* i_model) {
|
|
u8 cur_model_num = mModelNum;
|
|
|
|
if (cur_model_num == 0 || i_model == NULL) {
|
|
return false;
|
|
}
|
|
|
|
mModelNum++;
|
|
mpModels[cur_model_num] = i_model;
|
|
return true;
|
|
}
|
|
|
|
/* 8005520C-800553EC 04FB4C 01E0+00 1/1 0/0 0/0 .text draw__20dDlst_shadowSimple_cFv */
|
|
void dDlst_shadowSimple_c::draw() {
|
|
static GXColor l_color = {0, 0, 0, 64};
|
|
l_color.a = mAlpha;
|
|
|
|
GXSetTevColor(GX_TEVREG0, l_color);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
|
GXLoadPosMtxImm(mVolumeMtx, GX_PNMTX0);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXCallDisplayList(l_frontMat, 0x40);
|
|
GXCallDisplayList(l_shadowVolumeDL, 0x40);
|
|
GXCallDisplayList(l_backSubMat, 0x20);
|
|
GXCallDisplayList(l_shadowVolumeDL, 0x40);
|
|
GXLoadPosMtxImm(mMtx, GX_PNMTX1);
|
|
GXSetCurrentMtx(GX_PNMTX1);
|
|
|
|
if (mpTexObj != NULL) {
|
|
GXLoadTexObj(mpTexObj, GX_TEXMAP0);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
|
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
|
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
|
|
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A2, GX_CA_ZERO);
|
|
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
|
|
|
if (GXGetTexObjWidth(mpTexObj) == GXGetTexObjHeight(mpTexObj)) {
|
|
GXCallDisplayList(l_shadowSealTexDL, 0x40);
|
|
} else {
|
|
GXCallDisplayList(l_shadowSealTex2DL, 0x40);
|
|
}
|
|
}
|
|
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
|
GXCallDisplayList(l_shadowSealDL, 0x60);
|
|
GXClearVtxDesc();
|
|
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
|
GXSetCurrentMtx(GX_PNMTX0);
|
|
GXCallDisplayList(l_clearMat, 0x40);
|
|
GXCallDisplayList(l_shadowVolumeDL, 0x40);
|
|
}
|
|
|
|
/* 800553EC-80055684 04FD2C 0298+00 1/1 0/0 0/0 .text
|
|
* set__20dDlst_shadowSimple_cFP4cXyzffP4cXyzsfP9_GXTexObj */
|
|
void dDlst_shadowSimple_c::set(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
|
|
s16 param_4, f32 param_5, _GXTexObj* param_6) {
|
|
if (param_5 < 0.0f) {
|
|
mAlpha = param_5 * -255.0f;
|
|
param_5 = 1.0f;
|
|
} else {
|
|
float local_a4 = 1.0f - (param_0->y - param_1) * 0.0007f;
|
|
if (local_a4 < 0.0f) {
|
|
local_a4 = 0.0f;
|
|
} else if (local_a4 > 1.0f) {
|
|
local_a4 = 1.0f;
|
|
}
|
|
setkankyoShadow(NULL, &local_a4);
|
|
local_a4 *= 1.4f;
|
|
if (local_a4 > 1.0f) {
|
|
local_a4 = 1.0f;
|
|
}
|
|
mAlpha = g_envHIO.mOther.mShadowDensity * local_a4;
|
|
}
|
|
f32 f30 = param_2 * 16.0f * (1.0f - param_3->y) + 2.0f;
|
|
mDoMtx_stack_c::transS(param_0->x, param_1 + f30, param_0->z);
|
|
mDoMtx_stack_c::YrotM(param_4);
|
|
mDoMtx_stack_c::scaleM(param_2, f30 + f30 + 16.0f, param_2 * param_5);
|
|
cMtx_concat(j3dSys.getViewMtx(), mDoMtx_stack_c::get(), mVolumeMtx);
|
|
f32 f31 = JMAFastSqrt(1.0f - param_3->x * param_3->x);
|
|
f32 f29;
|
|
f32 f28;
|
|
if (0.0f != f31) {
|
|
f29 = param_3->y * f31;
|
|
f28 = -param_3->z * f31;
|
|
} else {
|
|
f29 = 0.0f;
|
|
f28 = 0.0f;
|
|
}
|
|
mDoMtx_stack_c::get()[0][0] = f31;
|
|
mDoMtx_stack_c::get()[0][1] = param_3->x;
|
|
mDoMtx_stack_c::get()[0][2] = 0.0f;
|
|
mDoMtx_stack_c::get()[0][3] = param_0->x;
|
|
mDoMtx_stack_c::get()[1][0] = -param_3->x * f29;
|
|
mDoMtx_stack_c::get()[1][1] = param_3->y;
|
|
mDoMtx_stack_c::get()[1][2] = f28;
|
|
mDoMtx_stack_c::get()[1][3] = param_1;
|
|
mDoMtx_stack_c::get()[2][0] = param_3->x * f28;
|
|
mDoMtx_stack_c::get()[2][1] = param_3->z;
|
|
mDoMtx_stack_c::get()[2][2] = f29;
|
|
mDoMtx_stack_c::get()[2][3] = param_0->z;
|
|
mDoMtx_stack_c::YrotM(param_4);
|
|
mDoMtx_stack_c::scaleM(param_2, 1.0f, param_2 * param_5);
|
|
cMtx_concat(j3dSys.getViewMtx(), mDoMtx_stack_c::get(), mMtx);
|
|
mpTexObj = param_6;
|
|
}
|
|
|
|
/* 80055684-80055768 04FFC4 00E4+00 1/1 0/0 0/0 .text init__21dDlst_shadowControl_cFv */
|
|
void dDlst_shadowControl_c::init() {
|
|
static u16 l_realImageSize[2] = {192, 64};
|
|
for (int i = 0; i < 2; i++) {
|
|
u16 size = l_realImageSize[i];
|
|
|
|
u32 buffer_size = GXGetTexBufferSize(size, size, 5, GX_DISABLE, 0);
|
|
field_0x15ef0[i] = new (0x20) u8[buffer_size];
|
|
GXInitTexObj(&field_0x15eb0[i], field_0x15ef0[i], size, size, GX_TF_RGB5A3, GX_CLAMP,
|
|
GX_CLAMP, GX_DISABLE);
|
|
GXInitTexObjLOD(&field_0x15eb0[i], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE,
|
|
GX_FALSE, GX_ANISO_1);
|
|
}
|
|
}
|
|
|
|
|
|
/* 80055768-800557C8 0500A8 0060+00 1/1 0/0 0/0 .text reset__21dDlst_shadowControl_cFv */
|
|
void dDlst_shadowControl_c::reset() {
|
|
dDlst_shadowReal_c* shadowReal = mReal;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
shadowReal->reset();
|
|
shadowReal++;
|
|
}
|
|
|
|
mSimpleNum = 0;
|
|
mRealNum = 0;
|
|
field_0x4 = NULL;
|
|
}
|
|
|
|
/* 800557C8-80055A14 050108 024C+00 0/0 1/1 0/0 .text imageDraw__21dDlst_shadowControl_cFPA4_f */
|
|
void dDlst_shadowControl_c::imageDraw(Mtx param_0) {
|
|
static u8 l_matDL[] ALIGN_DECL(32) = {
|
|
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10,
|
|
0x00, 0x00, 0x04, 0x00, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xF2,
|
|
0x61, 0xC1, 0x08, 0xFF, 0x90, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0xF3, 0x7F, 0x00,
|
|
0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10,
|
|
0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x61, 0xEE, 0x00, 0x00,
|
|
0x00, 0x61, 0xEF, 0x00, 0x00, 0x00, 0x61, 0xF0, 0x00, 0x00, 0x00, 0x61, 0xF1, 0x00,
|
|
0x00, 0x00, 0x61, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
static GXColor l_imageDrawColor[4] = {
|
|
{255, 0, 0, 0},
|
|
{0, 255, 0, 0},
|
|
{0, 0, 255, 0},
|
|
{0, 0, 0, 255},
|
|
};
|
|
|
|
|
|
GXCallDisplayList(l_matDL, 0x60);
|
|
GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE);
|
|
GXSetZCompLoc(GX_TRUE);
|
|
GXSetBlendMode(GX_BM_LOGIC, GX_BL_ONE, GX_BL_ONE, GX_LO_OR);
|
|
GXSetClipMode(GX_CLIP_DISABLE);
|
|
j3dSys.setDrawModeOpaTexEdge();
|
|
J3DShape::resetVcdVatCache();
|
|
dDlst_shadowReal_c* shadowReal = field_0x4;
|
|
int r29 = 0;
|
|
int tex = 0;
|
|
u16 r27;
|
|
u16 r26;
|
|
for (; shadowReal; shadowReal = shadowReal->getZsortNext()) {
|
|
if (shadowReal->isUse()) {
|
|
if (r29 == 0) {
|
|
r27 = GXGetTexObjWidth(field_0x15eb0 + tex);
|
|
r26 = r27 * 2;
|
|
GXSetViewport(0.0f, 0.0f, r26, r26, 0.0f, 1.0f);
|
|
GXSetScissor(0, 0, r26, r26);
|
|
}
|
|
GXSetTevColor(GX_TEVREG0, l_imageDrawColor[r29]);
|
|
if (r29 == 3) {
|
|
GXSetColorUpdate(GX_DISABLE);
|
|
GXSetAlphaUpdate(GX_ENABLE);
|
|
}
|
|
shadowReal->imageDraw(param_0);
|
|
r29 = (r29 + 1) % 4;
|
|
if (r29 == 0) {
|
|
GXSetTexCopySrc(0, 0, r26, r26);
|
|
GXSetTexCopyDst(r27, r27, GX_TF_RGB5A3, GX_TRUE);
|
|
GXSetColorUpdate(GX_ENABLE);
|
|
GXCopyTex(field_0x15ef0[tex++], GX_TRUE);
|
|
GXPixModeSync();
|
|
GXSetAlphaUpdate(GX_DISABLE);
|
|
}
|
|
}
|
|
}
|
|
if (r29) {
|
|
GXSetTexCopySrc(0, 0, r26, r26);
|
|
GXSetTexCopyDst(r27, r27, GX_TF_RGB5A3, GX_TRUE);
|
|
GXCopyTex(field_0x15ef0[tex], GX_TRUE);
|
|
GXPixModeSync();
|
|
GXSetAlphaUpdate(GX_DISABLE);
|
|
}
|
|
GXSetClipMode(GX_CLIP_ENABLE);
|
|
GXSetDither(GX_TRUE);
|
|
}
|
|
|
|
/* 80055A14-80055C74 050354 0260+00 0/0 1/1 0/0 .text draw__21dDlst_shadowControl_cFPA4_f
|
|
*/
|
|
void dDlst_shadowControl_c::draw(Mtx param_0) {
|
|
static GXTevColor l_tevColorChan[4] = {
|
|
GX_CH_RED,
|
|
GX_CH_GREEN,
|
|
GX_CH_BLUE,
|
|
GX_CH_ALPHA,
|
|
};
|
|
|
|
j3dSys.reinitGX();
|
|
GXSetNumIndStages(0);
|
|
dKy_GxFog_set();
|
|
|
|
GXSetChanCtrl(GX_ALPHA0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
|
GXSetArray(GX_VA_POS, l_shadowVolPos, 12);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0);
|
|
GXSetNumTevStages(1);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
|
GXLoadPosMtxImm(param_0, GX_PNMTX0);
|
|
GXColor matColor = {0, 0, 0, 0x20};
|
|
GXSetChanMatColor(GX_ALPHA0, matColor);
|
|
|
|
static GXColor clearColor = {0x00, 0x00, 0x00, 0x40};
|
|
clearColor.a = mDoGph_gInf_c::getBackColor().a;
|
|
GXSetTevColor(GX_TEVREG1, clearColor);
|
|
GXSetTevColor(GX_TEVREG2, g_whiteColor);
|
|
|
|
dDlst_shadowReal_c* real = field_0x4;
|
|
for (int i2 = 0, i3 = 0; real != NULL; real = real->getZsortNext()) {
|
|
if (real->isUse()) {
|
|
if (i2 == 0) {
|
|
GXTexObj* obj = &field_0x15eb0[i3];
|
|
i3++;
|
|
|
|
GXLoadTexObj(obj, GX_TEXMAP0);
|
|
}
|
|
|
|
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE,
|
|
l_tevColorChan[i2]);
|
|
real->draw();
|
|
i2 = (i2 + 1) % 4;
|
|
}
|
|
}
|
|
|
|
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
|
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0);
|
|
GXSetArray(GX_VA_POS, l_simpleShadowPos, 12);
|
|
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
|
|
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
|
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
|
|
|
|
dDlst_shadowSimple_c* simple = mSimple;
|
|
for (int i = 0; i < mSimpleNum; i++) {
|
|
simple->draw();
|
|
simple++;
|
|
}
|
|
|
|
GXSetColorUpdate(GX_ENABLE);
|
|
GXSetAlphaUpdate(GX_DISABLE);
|
|
}
|
|
|
|
/* 803A8D9C-803A8DCC 005EBC 0030+00 0/0 0/0 0/0 .data mtx_adj$5842 */
|
|
#pragma push
|
|
#pragma force_active on
|
|
SECTION_DATA static Mtx mtx_adj = {
|
|
{0.5f, 0.0f, 0.0f, 0.5f},
|
|
{0.0f, -0.5f, 0.0f, 0.5f},
|
|
{0.0f, 0.0f, 1.0f, 0.0f},
|
|
};
|
|
#pragma pop
|
|
|
|
/* 80055C74-80055F1C 0505B4 02A8+00 0/0 1/1 1/1 .text
|
|
* setReal__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */
|
|
int dDlst_shadowControl_c::setReal(u32 param_1, s8 param_2, J3DModel* param_3, cXyz* param_4,
|
|
f32 param_5, f32 param_6, dKy_tevstr_c* param_7) {
|
|
f32 fVar1;
|
|
f32 dVar16 = (param_2 == 0) ? 1.0f : (1.0f - 0.003000000026077032f * param_6);
|
|
if (dVar16 <= 0.0f) {
|
|
return 0;
|
|
}
|
|
if (dVar16 > 1.0f) {
|
|
dVar16 = 1.0f;
|
|
}
|
|
cXyz acStack_94;
|
|
cMtx_multVec(j3dSys.getViewMtx(), param_4, &acStack_94);
|
|
if ((acStack_94.z - param_5) >= 0.0f) {
|
|
return 0;
|
|
}
|
|
f32 dVar17 = acStack_94.z + param_5;
|
|
if (dVar17 < -1000.0f) {
|
|
f32 fVar1 = 0.0010000000474974513f *
|
|
(-1000.0f - dVar17);
|
|
if (fVar1 >= 1.0f) {
|
|
return 0;
|
|
}
|
|
dVar16 = (dVar16 * (1.0f - fVar1));
|
|
}
|
|
if (param_2 == 0) {
|
|
dVar17 = FLT_MAX;
|
|
}
|
|
dDlst_shadowReal_c* pdVar11;
|
|
dDlst_shadowReal_c* pdVar10 = NULL;
|
|
dDlst_shadowReal_c* local_98 = field_0x4;
|
|
pdVar11 = NULL;
|
|
while (local_98 != NULL) {
|
|
pdVar11 = local_98;
|
|
if (dVar17 > local_98->getCameraZ()) {
|
|
pdVar10 = local_98;
|
|
local_98 = NULL;
|
|
} else {
|
|
local_98 = local_98->getZsortNext();
|
|
}
|
|
}
|
|
dDlst_shadowReal_c* pdVar12;
|
|
if (mRealNum >= 8) {
|
|
if (pdVar10 == NULL) {
|
|
return 0;
|
|
}
|
|
pdVar12 = field_0x8;
|
|
field_0x8 = pdVar12->getZsortPre();
|
|
field_0x8->setZsortNext(NULL);
|
|
if (pdVar12 == pdVar10) {
|
|
pdVar10 = NULL;
|
|
pdVar11 = field_0x8;
|
|
}
|
|
pdVar12->reset();
|
|
mRealNum--;
|
|
} else {
|
|
pdVar12 = mReal;
|
|
for (int i = 0; i < 8; i++, pdVar12++) {
|
|
if (pdVar12->isNoUse()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
do {
|
|
} while (++mNextID == 0);
|
|
u32 rv = pdVar12->set(mNextID, param_3, param_4, param_5, param_6, param_7, dVar17, dVar16);
|
|
if (!rv) {
|
|
return 0;
|
|
}
|
|
mRealNum++;
|
|
if (pdVar10 == NULL) {
|
|
if (pdVar11 == NULL) {
|
|
field_0x4 = pdVar12;
|
|
} else {
|
|
pdVar11->setZsortNext(pdVar12);
|
|
pdVar12->setZsortPre(pdVar11);
|
|
}
|
|
field_0x8 = pdVar12;
|
|
} else {
|
|
pdVar11 = pdVar10->getZsortPre();
|
|
if (pdVar11 == NULL) {
|
|
field_0x4 = pdVar12;
|
|
} else {
|
|
pdVar11->setZsortNext(pdVar12);
|
|
pdVar12->setZsortPre(pdVar11);
|
|
}
|
|
pdVar12->setZsortNext(pdVar10);
|
|
pdVar10->setZsortPre(pdVar12);
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
/* 80055F1C-80055F84 05085C 0068+00 0/0 1/1 45/45 .text
|
|
* addReal__21dDlst_shadowControl_cFUlP8J3DModel */
|
|
bool dDlst_shadowControl_c::addReal(u32 i_key, J3DModel* param_1) {
|
|
if (i_key == 0) {
|
|
return false;
|
|
}
|
|
|
|
for (dDlst_shadowReal_c* i = field_0x4; i != NULL; i = i->getZsortNext()) {
|
|
if (!i->isNoUse() && i->checkKey(i_key)) {
|
|
return i->add(param_1);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 80055F84-80055FE8 0508C4 0064+00 0/0 1/1 10/10 .text
|
|
* setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj */
|
|
int dDlst_shadowControl_c::setSimple(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3,
|
|
s16 param_4, f32 param_5, GXTexObj* param_6) {
|
|
if (param_3 == NULL || mSimpleNum >= 128) {
|
|
return 0;
|
|
}
|
|
|
|
mSimple[mSimpleNum].set(param_0, param_1, param_2, param_3, param_4, param_5, param_6);
|
|
mSimpleNum++;
|
|
return 1;
|
|
}
|
|
|
|
/* 804248D0-804248F0 0515F0 0020+00 1/1 6/6 173/173 .bss mSimpleTexObj__21dDlst_shadowControl_c */
|
|
GXTexObj dDlst_shadowControl_c::mSimpleTexObj;
|
|
|
|
/* 80055FE8-80056018 050928 0030+00 0/0 1/1 0/0 .text
|
|
* setSimpleTex__21dDlst_shadowControl_cFPC7ResTIMG */
|
|
void dDlst_shadowControl_c::setSimpleTex(ResTIMG const* i_timg) {
|
|
mDoLib_setResTimgObj(i_timg, &mSimpleTexObj, 0, NULL);
|
|
}
|
|
|
|
/* 80056018-80056080 050958 0068+00 0/0 3/3 9/9 .text newData__13dDlst_peekZ_cFssPUl */
|
|
int dDlst_peekZ_c::newData(s16 x, s16 y, u32* dst) {
|
|
if (mCount >= 64 || x < 0 || x > 607 || y < 0 || y > 447) {
|
|
return 0;
|
|
}
|
|
|
|
dDlst_peekZ_entry* entry = &mEntries[mCount];
|
|
entry->x = x;
|
|
entry->y = y;
|
|
entry->dst = dst;
|
|
mCount++;
|
|
return 1;
|
|
}
|
|
|
|
/* 80056080-800560F0 0509C0 0070+00 0/0 1/1 0/0 .text peekData__13dDlst_peekZ_cFv */
|
|
void dDlst_peekZ_c::peekData() {
|
|
dDlst_peekZ_entry* entry = mEntries;
|
|
|
|
for (int i = 0; i < mCount; i++) {
|
|
GXPeekZ(entry->x, entry->y, entry->dst);
|
|
entry++;
|
|
}
|
|
|
|
mCount = 0;
|
|
}
|
|
|
|
/* 800560F0-800561C8 050A30 00D8+00 0/0 1/1 0/0 .text __ct__12dDlst_list_cFv */
|
|
dDlst_list_c::dDlst_list_c() {
|
|
mpCopy2DEnd = &mpCopy2DDrawLists[4];
|
|
mp2DOpaTopEnd = &mp2DOpaTopDrawLists[16];
|
|
mp2DOpaEnd = &mp2DOpaDrawLists[64];
|
|
mp2DXluEnd = &mp2DXluDrawLists[32];
|
|
|
|
J3DDrawBuffer** buffer = mDrawBuffers;
|
|
for (int i = 0; i < 21; i++) {
|
|
*buffer = NULL;
|
|
buffer++;
|
|
}
|
|
}
|
|
|
|
/* 8005638C-80056390 050CCC 0004+00 1/1 0/0 0/0 .text __ct__20dDlst_shadowSimple_cFv */
|
|
dDlst_shadowSimple_c::dDlst_shadowSimple_c() {}
|
|
|
|
/* ############################################################################################## */
|
|
/* 8037A178-8037A1A4 0067D8 002A+02 1/1 0/0 0/0 .rodata l_drawlistSize$5656 */
|
|
static u16 const l_drawlistSize[21] = {
|
|
0x0001, 0x0001, 0x0001, 0x0080, 0x0001, 0x0001, 0x0001, 0x0080, 0x0100, 0x0001, 0x0100,
|
|
0x0001, 0x0020, 0x0010, 0x0010, 0x0020, 0x0020, 0x0100, 0x0001, 0x0004, 0x0004,
|
|
};
|
|
|
|
/* 8037A1A4-8037A1B0 006804 0009+03 1/1 0/0 0/0 .rodata l_nonSortId$5662 */
|
|
static u8 const l_nonSortId[9] = {
|
|
0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x09, 0x12, 0x0D,
|
|
};
|
|
|
|
/* 804520C4-804520CC 0006C4 0006+02 1/1 0/0 0/0 .sdata2 l_zSortId$5668 */
|
|
static const u8 l_zSortId[6] = {
|
|
0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x11,
|
|
};
|
|
|
|
/* 80056390-8005648C 050CD0 00FC+00 0/0 1/1 0/0 .text init__12dDlst_list_cFv */
|
|
void dDlst_list_c::init() {
|
|
J3DDrawBuffer** var_r30 = mDrawBuffers;
|
|
const u16* var_r29 = l_drawlistSize;
|
|
|
|
for (int i = 0; i < 21; i++) {
|
|
*var_r30 = J3DDrawBuffer__create(*var_r29++);
|
|
var_r30++;
|
|
}
|
|
|
|
const u8* var_r5 = l_nonSortId;
|
|
for (int i = 0; i < 9; i++) {
|
|
mDrawBuffers[*var_r5++]->setNonSort();
|
|
}
|
|
|
|
const u8* var_r5_2 = l_zSortId;
|
|
for (int i = 0; i < 6; i++) {
|
|
mDrawBuffers[*var_r5_2++]->setZSort();
|
|
}
|
|
|
|
setOpaList();
|
|
setXluList();
|
|
mpCopy2DStart = mpCopy2DDrawLists;
|
|
mp2DOpaTopStart = mp2DOpaTopDrawLists;
|
|
mp2DOpaStart = mp2DOpaDrawLists;
|
|
mp2DXluStart = mp2DXluDrawLists;
|
|
|
|
mShadowControl.init();
|
|
}
|
|
|
|
/* 8005648C-80056538 050DCC 00AC+00 0/0 1/1 0/0 .text __dt__12dDlst_list_cFv */
|
|
dDlst_list_c::~dDlst_list_c() {
|
|
J3DDrawBuffer** buffer = mDrawBuffers;
|
|
for (int i = 0; i < 21; i++) {
|
|
J3DDrawBuffer* tmp = *buffer;
|
|
buffer++;
|
|
|
|
delete tmp;
|
|
}
|
|
}
|
|
|
|
/* 80056538-800565EC 050E78 00B4+00 0/0 1/1 0/0 .text reset__12dDlst_list_cFv */
|
|
void dDlst_list_c::reset() {
|
|
J3DDrawBuffer** buffer = mDrawBuffers;
|
|
for (int i = 0; i < 21; i++) {
|
|
J3DDrawBuffer* tmp = *buffer;
|
|
buffer++;
|
|
|
|
tmp->frameInit();
|
|
}
|
|
|
|
setOpaList();
|
|
setXluList();
|
|
|
|
mpCopy2DStart = mpCopy2DDrawLists;
|
|
mp2DOpaTopStart = mp2DOpaTopDrawLists;
|
|
mp2DOpaStart = mp2DOpaDrawLists;
|
|
mp2DXluStart = mp2DXluDrawLists;
|
|
mShadowControl.reset();
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
m3DLineMatSortPacket[i].reset();
|
|
}
|
|
}
|
|
|
|
/* 800565EC-800566D4 050F2C 00E8+00 0/0 2/2 0/0 .text
|
|
* entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz */
|
|
void dDlst_list_c::entryZSortXluDrawList(J3DDrawBuffer* param_0, J3DPacket* param_1,
|
|
cXyz& param_2) {
|
|
f32 z_value = -J3DCalcZValue(j3dSys.getViewMtx(), param_2);
|
|
u32 size = param_0->getEntryTableSize();
|
|
f32 fsize = size;
|
|
fsize = 9999.0f / fsize;
|
|
|
|
u16 var_r0;
|
|
if (fsize + 1.0f < z_value) {
|
|
if (10000.0f - fsize > z_value) {
|
|
var_r0 = z_value / fsize;
|
|
} else {
|
|
var_r0 = size - 1;
|
|
}
|
|
} else {
|
|
var_r0 = 0;
|
|
}
|
|
|
|
var_r0 = (size - 1) - var_r0;
|
|
param_0->entryImm(param_1, var_r0);
|
|
}
|
|
|
|
|
|
/* 800566D4-80056710 051014 003C+00 1/1 1/1 0/0 .text
|
|
* drawOpaDrawList__12dDlst_list_cFP13J3DDrawBuffer */
|
|
void dDlst_list_c::drawOpaDrawList(J3DDrawBuffer* pDrawBuf) {
|
|
J3DShape::resetVcdVatCache();
|
|
j3dSys.setDrawModeOpaTexEdge();
|
|
pDrawBuf->draw();
|
|
}
|
|
|
|
/* 80056710-8005674C 051050 003C+00 1/1 1/1 0/0 .text
|
|
* drawXluDrawList__12dDlst_list_cFP13J3DDrawBuffer */
|
|
void dDlst_list_c::drawXluDrawList(J3DDrawBuffer* pDrawBuf) {
|
|
J3DShape::resetVcdVatCache();
|
|
j3dSys.setDrawModeXlu();
|
|
pDrawBuf->draw();
|
|
}
|
|
|
|
/* 8005674C-80056770 05108C 0024+00 0/0 1/1 0/0 .text drawOpaListItem3d__12dDlst_list_cFv
|
|
*/
|
|
void dDlst_list_c::drawOpaListItem3d() {
|
|
drawOpaDrawList(mDrawBuffers[DB_OPA_LIST_ITEM3D]);
|
|
}
|
|
|
|
/* 80056770-80056794 0510B0 0024+00 0/0 1/1 0/0 .text drawXluListItem3d__12dDlst_list_cFv
|
|
*/
|
|
void dDlst_list_c::drawXluListItem3d() {
|
|
drawXluDrawList(mDrawBuffers[DB_XLU_LIST_ITEM3D]);
|
|
}
|
|
|
|
/* 80056794-800567C4 0510D4 0030+00 2/2 35/35 6/6 .text
|
|
* set__12dDlst_list_cFRPP12dDlst_base_cRPP12dDlst_base_cP12dDlst_base_c */
|
|
int dDlst_list_c::set(dDlst_base_c**& p_start, dDlst_base_c**& p_end, dDlst_base_c* p_newDlst) {
|
|
if (p_start >= p_end) {
|
|
return 0;
|
|
}
|
|
*p_start = p_newDlst;
|
|
*p_start++;
|
|
return 1;
|
|
}
|
|
|
|
/* 800567C4-8005681C 051104 0058+00 0/0 1/1 0/0 .text
|
|
* draw__12dDlst_list_cFPP12dDlst_base_cPP12dDlst_base_c */
|
|
void dDlst_list_c::draw(dDlst_base_c** p_start, dDlst_base_c** p_end) {
|
|
for (; p_start < p_end; p_start++) {
|
|
dDlst_base_c* dlst = *p_start;
|
|
dlst->draw();
|
|
}
|
|
}
|
|
|
|
/* 804248F0-80424938 051610 0048+00 3/3 0/0 0/0 .bss mWipeDlst__12dDlst_list_c */
|
|
dDlst_2DT2_c dDlst_list_c::mWipeDlst;
|
|
|
|
/* 8045065C-80450660 0000DC 0004+00 1/1 0/0 0/0 .sdata mWipeColor__12dDlst_list_c */
|
|
GXColor dDlst_list_c::mWipeColor = {0, 0, 0, 0};
|
|
|
|
/* 80450ED0-80450ED4 0003D0 0004+00 2/2 1/1 0/0 .sbss None */
|
|
u8 dDlst_list_c::mWipe;
|
|
|
|
/* 80450ED4-80450ED8 0003D4 0004+00 2/2 1/1 0/0 .sbss mWipeRate__12dDlst_list_c */
|
|
f32 dDlst_list_c::mWipeRate;
|
|
|
|
/* 80450ED8-80450EE0 0003D8 0004+04 2/2 0/0 0/0 .sbss mWipeSpeed__12dDlst_list_c */
|
|
f32 dDlst_list_c::mWipeSpeed;
|
|
|
|
/* 8005681C-800568D8 05115C 00BC+00 1/1 0/0 0/0 .text wipeIn__12dDlst_list_cFfR8_GXColor
|
|
*/
|
|
void dDlst_list_c::wipeIn(f32 i_wipeSpeed, GXColor& i_wipeColor) {
|
|
mWipe = true;
|
|
mWipeSpeed = i_wipeSpeed;
|
|
mWipeColor = i_wipeColor;
|
|
mWipeRate = i_wipeSpeed >= 0.0f ? 0.0f : 1.0f;
|
|
|
|
JKRArchive* main2d = dComIfGp_getMain2DArchive();
|
|
ResTIMG* texture = (ResTIMG*)JKRArchive::getGlbResource('TIMG', "wipe_00.bti", main2d);
|
|
|
|
mWipeDlst.init(texture, mDoGph_gInf_c::getMinX(), mDoGph_gInf_c::getMinY(),
|
|
mDoGph_gInf_c::getWidth(), mDoGph_gInf_c::getHeight(), 0, 1, 1, 2.0f, 2.436f);
|
|
}
|
|
|
|
|
|
/* 800568D8-80056900 051218 0028+00 0/0 1/1 0/0 .text wipeIn__12dDlst_list_cFf */
|
|
void dDlst_list_c::wipeIn(f32 i_wipeSpeed) {
|
|
wipeIn(-i_wipeSpeed, g_blackColor);
|
|
}
|
|
|
|
/* 80056900-800569A0 051240 00A0+00 0/0 1/1 0/0 .text calcWipe__12dDlst_list_cFv */
|
|
void dDlst_list_c::calcWipe() {
|
|
if (mWipe) {
|
|
mWipeRate += mWipeSpeed;
|
|
if (mWipeRate < 0.0f) {
|
|
mWipeRate = 0.0f;
|
|
} else if (mWipeRate > 1.0f) {
|
|
mWipeRate = 1.0f;
|
|
mWipe = false;
|
|
}
|
|
mWipeDlst.setScaleX(mWipeRate * 2.0f);
|
|
mWipeDlst.setScaleY(mWipeDlst.getScaleX() * 1.218f);
|
|
dComIfGd_set2DXlu(&mWipeDlst);
|
|
}
|
|
}
|