diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index dcad5d765..2904592de 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -217,8 +217,8 @@ inline JKRCompression JKRConvertAttrToCompressionType(u32 attr) { return JKRArchive::convertAttrToCompressionType(attr); } -inline void* JKRGetResource(u32 node, const char* path, JKRArchive* archive) { - return JKRArchive::getGlbResource(node, path, archive); +inline void* JKRGetResource(u32 node, const char* path, JKRArchive* arc) { + return JKRArchive::getGlbResource(node, path, arc); } inline void* JKRGetTypeResource(u32 tag, const char* name, JKRArchive* arc) { diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h index 8e3e6d661..0b53a3f7f 100644 --- a/include/JSystem/JParticle/JPAParticle.h +++ b/include/JSystem/JParticle/JPAParticle.h @@ -66,6 +66,7 @@ public: /* 0xC6 */ u16 mTexIdx; /* 0xC8 */ JPACallBackBase2* mpCallBack2; /* 0xCC */ u32 mStatus; + /* 0xD0 */ u32 field_0xd0; }; class JPAParticleCallBack { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index ab145354d..07a087c47 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -429,6 +429,7 @@ public: void setTmsgArchive(JKRArchive * pArc) { mpTmsgArchive = pArc; } JKRArchive* getTmsgArchive() { return mpTmsgArchive; } void setMenuArchive(JKRArchive * pArc) { mpMenuArchive = pArc; } + JKRArchive* getMenuArchive() { return mpMenuArchive; } void setFont0Archive(JKRArchive * pArc) { mpFont0Archive = pArc; } void setFont1Archive(JKRArchive * pArc) { mpFont1Archive = pArc; } JKRArchive* getFontArchive() { return mpFont0Archive; } @@ -2214,6 +2215,7 @@ inline void dComIfGp_setDmsgArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play inline void dComIfGp_setTmsgArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setTmsgArchive(pArc); } inline JKRArchive* dComIfGp_getTmsgArchive() { return g_dComIfG_gameInfo.play.getTmsgArchive(); } inline void dComIfGp_setMenuArchive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setMenuArchive(pArc); } +inline JKRArchive* dComIfGp_getMenuArchive() { return g_dComIfG_gameInfo.play.getMenuArchive(); } inline void dComIfGp_setFont0Archive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setFont0Archive(pArc); } inline void dComIfGp_setFont1Archive(JKRArchive * pArc) { g_dComIfG_gameInfo.play.setFont1Archive(pArc); } inline JKRArchive* dComIfGp_getFontArchive() { return g_dComIfG_gameInfo.play.getFontArchive(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 47f18f704..e373e72ca 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -41,6 +41,11 @@ public: class dDlst_2DPoint_c : public dDlst_base_c { public: virtual void draw(); + + /* 0x04 */ s16 mPosX; + /* 0x06 */ s16 mPosY; + /* 0x08 */ GXColor mColor; + /* 0x0C */ u8 mPointSize; }; class dDlst_2DT_c : public dDlst_base_c { @@ -52,6 +57,19 @@ class dDlst_2DT2_c : public dDlst_base_c { public: void init(ResTIMG* pTimg, f32, f32, f32, f32, u8, u8, u8, f32, f32); virtual void draw(); + +public: + /* 0x04 */ GXTexObj mTex; + /* 0x24 */ f32 mX; + /* 0x28 */ f32 mY; + /* 0x2C */ f32 mW; + /* 0x30 */ f32 mH; + /* 0x34 */ f32 mScrollS; + /* 0x38 */ f32 mScrollT; + /* 0x3C */ GXColor mColor; + /* 0x40 */ u8 mMirrorS; + /* 0x41 */ u8 mMirrorT; + /* 0x42 */ u8 mAlpha; }; class dDlst_2DM_c : public dDlst_base_c { @@ -209,14 +227,14 @@ public: dDlst_shadowReal_c() { mState = 0; } bool isNoUse() { return mState == 0; } - bool isUse() { return mState == 1; } + bool isUse() { return mState != 0; } bool checkKey(u32 i_key) { return mKey == i_key; } enum { MODEL_MAX = 0x1A }; private: /* 0x0000 */ u8 mState; - /* 0x0001 */ u8 field_0x1; + /* 0x0001 */ s8 field_0x1; /* 0x0002 */ u8 mAlpha; /* 0x0003 */ u8 mModelNum; /* 0x0004 */ u32 mKey; @@ -322,11 +340,19 @@ public: struct dDlst_alphaVolPacket : public J3DPacket { public: virtual void draw(); + +public: + /* 0x04 */ u32 field_0x04[3]; + /* 0x10 */ Mtx mtx; }; struct dDlst_alphaInvVolPacket : public J3DPacket { public: virtual void draw(); + +public: + /* 0x04 */ u32 field_0x04[3]; + /* 0x10 */ Mtx mtx; }; class dDlst_list_c { @@ -407,6 +433,10 @@ public: void newPeekZdata(s16 x, s16 y, u32 * data) { mPeekZ.newData(x, y, data); } static bool mWipe; + static GXColor mWipeColor; + static f32 mWipeRate; + static f32 mWipeSpeed; + static dDlst_2DT2_c mWipeDlst; /* 0x00000 */ J3DDrawBuffer* mpOpaListSky; /* 0x00004 */ J3DDrawBuffer* mpXluListSky; diff --git a/include/dolphin/gx/GX.h b/include/dolphin/gx/GX.h index 6deccd578..244b146ab 100644 --- a/include/dolphin/gx/GX.h +++ b/include/dolphin/gx/GX.h @@ -105,7 +105,7 @@ inline void GXPosition2s8(s8 x, s8 y) { GFX_FIFO(s8) = y; } -inline void i_GXPosition3s16(s16 x, s16 y, s16 z) { +inline void GXPosition3s16(s16 x, s16 y, s16 z) { GFX_FIFO(s16) = x; GFX_FIFO(s16) = y; GFX_FIFO(s16) = z; diff --git a/src/JSystem/JAudio/JASTrack.cpp b/src/JSystem/JAudio/JASTrack.cpp index 3dd868a5d..00690ccaf 100644 --- a/src/JSystem/JAudio/JASTrack.cpp +++ b/src/JSystem/JAudio/JASTrack.cpp @@ -513,7 +513,8 @@ bool JASystem::TTrack::stopSeq() { /* 80282908-80282944 .text stopSeqMain__Q28JASystem6TTrackFv */ void JASystem::TTrack::stopSeqMain() { - /* Nonmatching */ + updateSeq(0, 1); + close(); } /* 80282944-802829DC .text noteOffAll__Q28JASystem6TTrackFv */ diff --git a/src/JSystem/JParticle/JPAParticle.cpp b/src/JSystem/JParticle/JPAParticle.cpp index 16a3575ca..0b94c4164 100644 --- a/src/JSystem/JParticle/JPAParticle.cpp +++ b/src/JSystem/JParticle/JPAParticle.cpp @@ -5,15 +5,28 @@ #include "JSystem/JParticle/JPAParticle.h" #include "JSystem/JParticle/JPAEmitter.h" -#include "dolphin/types.h" +#include "JSystem/JParticle/JPASweepShape.h" +#include "dolphin/mtx/mtxvec.h" /* 8025DEF4-8025E62C .text initParticle__15JPABaseParticleFv */ void JPABaseParticle::initParticle() { - /* Nonmatching */ + JPABaseEmitter * emtr = JPABaseEmitter::emtrInfo.mpCurEmitter; + mStatus = 0x01; + mFieldAccel.set(1.0f, 1.0f, 1.0f); + mFieldDrag = 1.0f; + mDrag = 1.0f; + MTXMultVec(JPABaseEmitter::emtrInfo.mEmitterGlobalSR, JPABaseEmitter::emtrInfo.mVolumePos, mLocalPosition); + if ((emtr->mDataFlag & 0x08) != 0) + mStatus |= 0x20; + mGlobalPosition = JPABaseEmitter::emtrInfo.mEmitterGlobalCenter; + // TODO: calculate vel/pos + mpCallBack2 = emtr->mpParticleCallBack; + emtr->mFieldManager.init(this); + field_0xd0 = 0; } /* 8025E62C-8025EB28 .text initChild__15JPABaseParticleFP15JPABaseParticle */ -void JPABaseParticle::initChild(JPABaseParticle*) { +void JPABaseParticle::initChild(JPABaseParticle* parent) { /* Nonmatching */ } @@ -35,10 +48,9 @@ void JPABaseParticle::incFrame() { /* 8025EB90-8025ECE8 .text calcVelocity__15JPABaseParticleFv */ void JPABaseParticle::calcVelocity() { - /* Nonmatching */ mFieldVel.zero(); if (mStatus & 0x20) - mGlobalPosition = JPABaseEmitter::emtrInfo.mEmitterGlobalCenter; + mGlobalPosition.set(JPABaseEmitter::emtrInfo.mEmitterGlobalCenter); mBaseVel.x += mAccel.x; mBaseVel.y += mAccel.y; mBaseVel.z += mAccel.z; @@ -64,20 +76,27 @@ void JPABaseParticle::calcVelocity() { /* 8025ECE8-8025ED6C .text calcPosition__15JPABaseParticleFv */ void JPABaseParticle::calcPosition() { - /* Nonmatching */ mLocalPosition.x += mVelocity.x; mLocalPosition.y += mVelocity.y; mLocalPosition.z += mVelocity.z; - JGeometry::TVec3 pos; - pos.x = mGlobalPosition.x + JPABaseEmitter::emtrInfo.mPublicScale.x * mLocalPosition.x; - pos.y = mGlobalPosition.y + JPABaseEmitter::emtrInfo.mPublicScale.y * mLocalPosition.y; - pos.z = mGlobalPosition.z + JPABaseEmitter::emtrInfo.mPublicScale.z * mLocalPosition.z; - - mPosition = pos; + mPosition.set( + mLocalPosition.x * JPABaseEmitter::emtrInfo.mPublicScale.x + mGlobalPosition.x, + mLocalPosition.y * JPABaseEmitter::emtrInfo.mPublicScale.y + mGlobalPosition.y, + mLocalPosition.z * JPABaseEmitter::emtrInfo.mPublicScale.z + mGlobalPosition.z + ); } /* 8025ED6C-8025EE44 .text checkCreateChild__15JPABaseParticleFv */ bool JPABaseParticle::checkCreateChild() { - /* Nonmatching */ + JPASweepShape * ssp = JPABaseEmitter::emtrInfo.mpCurEmitter->mpDataLinkInfo->getSweepShape(); + bool ret = false; + f32 time = mLifeTime > 1.0f ? (mCurFrame / (mLifeTime - 1.0f)) : 1.0f; + if (time >= ssp->getTiming()) { + f32 frame = mCurFrame; + s32 step = (ssp->getStep() & 0xFF) + 1; + if (((s32)frame % step) == 0) + ret = true; + } + return ret; } diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index c6ccba200..52dfe7eb5 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -9,9 +9,18 @@ #include "m_Do/m_Do_mtx.h" #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "SSystem/SComponent/c_rnd.h" #include "SSystem/SComponent/c_bg_s_shdw_draw.h" +GXTexObj dDlst_shadowControl_c::mSimpleTexObj; + +bool dDlst_list_c::mWipe; +f32 dDlst_list_c::mWipeRate = 0.0f; +f32 dDlst_list_c::mWipeSpeed = 0.0f; +GXColor dDlst_list_c::mWipeColor = { 0, 0, 0, 0 }; +dDlst_2DT2_c dDlst_list_c::mWipeDlst; + /* 800804A4-800804C0 .text setViewPort__14dDlst_window_cFffffff */ void dDlst_window_c::setViewPort(f32 x, f32 y, f32 w, f32 h, f32 n, f32 f) { mViewport.mXOrig = x; @@ -37,7 +46,20 @@ void dDlst_2DTri_c::draw() { /* 80080694-80080784 .text draw__15dDlst_2DPoint_cFv */ void dDlst_2DPoint_c::draw() { - /* Nonmatching */ + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); + GXSetChanMatColor(GX_COLOR0A0, mColor); + 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(mPointSize, GX_TO_ZERO); + GXBegin(GX_POINTS, GX_VTXFMT0, 1); + GXPosition3s16(mPosX, mPosY, 0); + GXEnd(); } /* 80080784-80080A50 .text draw__11dDlst_2DT_cFv */ @@ -48,11 +70,250 @@ void dDlst_2DT_c::draw() { /* 80080A50-800811E8 .text draw__12dDlst_2DT2_cFv */ void dDlst_2DT2_c::draw() { /* Nonmatching */ + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXLoadTexObj(&mTex, GX_TEXMAP0); + GXSetNumChans(0); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV); + if (mAlpha) + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + else + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV); + GXSetZCompLoc(0); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); + GXSetBlendMode(GX_BM_NONE, 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); + GXSetClipMode(GX_CLIP_DISABLE); + GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + + f32 x0 = mX, x1 = x0 + mW; + f32 y0 = mY, y1 = y0 + mH; + + if (mMirrorS && mMirrorT) { + f32 xH = mX + mW * 0.5f; + f32 yH = mY + mH * 0.5f; + + f32 s0, s1, t0, t1; + + if (mScrollS == 0.0f) { + s0 = 0.0f; + s1 = 0.0f; + } else { + s0 = 1.0f - 1.0f / mScrollS; + s1 = 1.0f; + } + + if (mScrollT == 0.0f) { + t0 = 0.0f; + t1 = 0.0f; + } else { + t0 = 1.0f - 1.0f / mScrollT; + t1 = 1.0f; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 16); + + // TL + GXPosition2f32(mX, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(xH, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(xH, yH); + GXTexCoord2f32(s1, t1); + GXPosition2f32(mX, yH); + GXTexCoord2f32(s0, t1); + + // TR + GXPosition2f32(xH, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(x1, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(x1, yH); + GXTexCoord2f32(s0, t1); + GXPosition2f32(xH, yH); + GXTexCoord2f32(s1, t1); + + // BL + GXPosition2f32(mX, yH); + GXTexCoord2f32(s0, t1); + GXPosition2f32(xH, yH); + GXTexCoord2f32(s1, t1); + GXPosition2f32(xH, y1); + GXTexCoord2f32(s1, t0); + GXPosition2f32(mX, y1); + GXTexCoord2f32(s0, t0); + + // BR + GXPosition2f32(xH, yH); + GXTexCoord2f32(s1, t1); + GXPosition2f32(x1, yH); + GXTexCoord2f32(s0, t1); + GXPosition2f32(x1, y1); + GXTexCoord2f32(s0, t0); + GXPosition2f32(xH, y1); + GXTexCoord2f32(s1, t0); + + GXEnd(); + } else if (mMirrorS) { + f32 xH = mX + mW * 0.5f; + + f32 s0, s1, t0, t1; + + if (mScrollS == 0.0f) { + s0 = 0.0f; + s1 = 0.0f; + } else { + s0 = 1.0f - 1.0f / mScrollS; + s1 = 1.0f; + } + + if (mScrollT == 0.0f) { + t0 = 0.0f; + t1 = 0.0f; + } else { + f32 h = (1.0f / mScrollT) * 0.5f; + t0 = 0.5f - h; + t1 = 0.5f + h; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 8); + + // L + GXPosition2f32(mX, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(xH, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(xH, y1); + GXTexCoord2f32(s1, t1); + GXPosition2f32(mX, y1); + GXTexCoord2f32(s0, t1); + + // R + GXPosition2f32(xH, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(x1, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(x1, y1); + GXTexCoord2f32(s0, t1); + GXPosition2f32(xH, y1); + GXTexCoord2f32(s1, t1); + + GXEnd(); + } else if (mMirrorT) { + f32 yH = mY + mH * 0.5f; + + f32 s0, s1, t0, t1; + + if (mScrollS == 0.0f) { + s0 = 0.0f; + s1 = 0.0f; + } else { + f32 h = 0.5f - (1.0f / mScrollS) * 0.5f; + s0 = 0.5f - h; + s1 = 0.5f + h; + } + + if (mScrollT == 0.0f) { + t0 = 0.0f; + t1 = 0.0f; + } else { + t0 = 1.0f - 1.0f / mScrollT; + t1 = 1.0f; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 8); + + // T + GXPosition2f32(mX, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(x1, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(x1, yH); + GXTexCoord2f32(s1, t1); + GXPosition2f32(mX, yH); + GXTexCoord2f32(s0, t1); + + // B + GXPosition2f32(mX, yH); + GXTexCoord2f32(s0, t1); + GXPosition2f32(x1, yH); + GXTexCoord2f32(s1, t1); + GXPosition2f32(x1, y1); + GXTexCoord2f32(s1, t0); + GXPosition2f32(mX, y1); + GXTexCoord2f32(s0, t0); + + GXEnd(); + } else { + f32 s0, s1, t0, t1; + + if (mScrollS == 0.0f) { + s0 = 0.0f; + s1 = 0.0f; + } else { + f32 h = (1.0f / mScrollS) * 0.5f; + s0 = 0.5f - h; + s1 = 0.5f + h; + } + + if (mScrollT == 0.0f) { + t0 = 0.0f; + t1 = 0.0f; + } else { + f32 h = (1.0f / mScrollT) * 0.5f; + t0 = 0.5f - h; + t1 = 0.5f + h; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2f32(mX, mY); + GXTexCoord2f32(s0, t0); + GXPosition2f32(x1, mY); + GXTexCoord2f32(s1, t0); + GXPosition2f32(x1, y1); + GXTexCoord2f32(s1, t1); + GXPosition2f32(mX, y1); + GXTexCoord2f32(s0, t1); + GXEnd(); + } + + GXSetClipMode(GX_CLIP_ENABLE); + dComIfGp_getCurrentGrafPort()->setup2D(); } /* 800811E8-800812F4 .text init__12dDlst_2DT2_cFP7ResTIMGffffUcUcUcff */ -void dDlst_2DT2_c::init(ResTIMG*, f32, f32, f32, f32, u8, u8, u8, f32, f32) { - /* Nonmatching */ +void dDlst_2DT2_c::init(ResTIMG* tex, f32 x, f32 y, f32 w, f32 h, u8 p0, u8 p1, u8 p2, f32 f0, f32 f1) { + mDoLib_setResTimgObj(tex, &mTex, 0, NULL); + mX = x; + mY = y; + mW = w; + mH = h; + mScrollS = f0; + mScrollT = f1; + GXColor black = { 0x00, 0x00, 0x00, 0xFF }; + mColor = black; + + mMirrorS = p1; + if (mMirrorS && GXGetTexObjWrapS(&mTex) == GX_MIRROR) + mMirrorS = 0; + mMirrorT = p2; + if (mMirrorT && GXGetTexObjWrapT(&mTex) == GX_MIRROR) + mMirrorT = 0; + mAlpha = p0; } /* 800812F4-800817CC .text draw__11dDlst_2DM_cFv */ @@ -401,6 +662,46 @@ BOOL dDlst_alphaModel_c::draw(Mtx mtx) { return TRUE; } +char l_frontMat[] = { + 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, +}; + +char l_backSubMat[] = { + 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, +}; + +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 }, +}; + +char l_shadowVolumeDL[] = { + 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, +}; + /* 80083064-800832C4 .text draw__22dDlst_alphaModelPacketFv */ void dDlst_alphaModelPacket::draw() { /* Nonmatching */ @@ -430,7 +731,7 @@ void dDlst_shadowReal_c::init() { GXInitTexObjLOD(&mTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_ANISO_1); mpCallBack = new J3DCallBackPacket(); - mpDrawBuffer = new J3DDrawBuffer(); + mpDrawBuffer = new J3DDrawBuffer(0x20); mpDrawBuffer->setInvalidSort(); } @@ -552,8 +853,25 @@ void dDlst_shadowControl_c::draw(Mtx) { } /* 800850D4-80085170 .text setReal__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -int dDlst_shadowControl_c::setReal(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { +int dDlst_shadowControl_c::setReal(u32 key, s8 size, J3DModel* model, cXyz* pos, f32 f0, f32 f1, dKy_tevstr_c* tevstr) { /* Nonmatching */ + if (key != 0) { + dDlst_shadowReal_c * real = &mReal[0]; + for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { + if (real->isUse() && real->checkKey(key)) { + return real->set(key, size, model, pos, f0, f1, tevstr); + } + } + } + + dDlst_shadowReal_c * real = &mReal[0]; + for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { + if (real->isNoUse()) { + return real->set(i, size, model, pos, f0, f1, tevstr); + } + } + + return 0; } /* 80085170-8008520C .text setReal2__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ @@ -562,16 +880,30 @@ int dDlst_shadowControl_c::setReal2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tev } /* 8008520C-80085274 .text addReal__21dDlst_shadowControl_cFUlP8J3DModel */ -bool dDlst_shadowControl_c::addReal(u32, J3DModel*) { - /* Nonmatching */ +bool dDlst_shadowControl_c::addReal(u32 key, J3DModel* model) { + if (key == 0) + return false; + + dDlst_shadowReal_c * real = &mReal[0]; + for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { + if (real->isUse() && real->checkKey(key)) { + return real->add(model); + } + } + + return false; } /* 80085274-800852D8 .text setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj */ -int dDlst_shadowControl_c::setSimple(cXyz*, f32, f32, cXyz*, s16, f32, _GXTexObj*) { +int dDlst_shadowControl_c::setSimple(cXyz* pos, f32 f0, f32 f1, cXyz* floor_nrm, s16 rotY, f32 f2, GXTexObj* tex) { /* Nonmatching */ -} + if (floor_nrm == NULL || mSimpleNum >= ARRAY_SIZE(mSimple)) + return false; -GXTexObj dDlst_shadowControl_c::mSimpleTexObj; + mSimple[mSimpleNum].set(pos, f0, f1, floor_nrm, rotY, f2, tex); + mSimpleNum++; + return true; +} /* 800852D8-80085348 .text setSimpleTex__21dDlst_shadowControl_cFPv */ void dDlst_shadowControl_c::setSimpleTex(void* pImg) { @@ -604,12 +936,41 @@ void dDlst_mirrorPacket::update(Mtx, u8, f32) { /* 800859DC-80085AF4 .text draw__20dDlst_alphaVolPacketFv */ void dDlst_alphaVolPacket::draw() { - /* Nonmatching */ + GXSetChanCtrl(GX_ALPHA0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetTevColor(GX_TEVREG0, g_whiteColor); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetArray(GX_VA_POS, (void*)l_simpleShadowPos, ARRAY_SIZE(l_simpleShadowPos)); + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + GXCallDisplayList(l_frontMat, 0x40); + GXCallDisplayList(l_shadowVolumeDL, 0x40); + GXCallDisplayList(l_backSubMat, 0x20); + GXCallDisplayList(l_shadowVolumeDL, 0x40); + GXSetColorUpdate(GX_TRUE); + GXSetAlphaUpdate(GX_FALSE); + J3DShape::resetVcdVatCache(); } /* 80085AF4-80085BBC .text draw__23dDlst_alphaInvVolPacketFv */ void dDlst_alphaInvVolPacket::draw() { - /* Nonmatching */ + static char l_backMat[0x60] = { + }; + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetArray(GX_VA_POS, (void*)l_simpleShadowPos, ARRAY_SIZE(l_simpleShadowPos)); + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXSetCurrentMtx(GX_PNMTX0); + GXSetTevColor(GX_TEVREG0, g_whiteColor); + GXCallDisplayList(l_backMat, 0x60); + GXCallDisplayList(l_shadowVolumeDL, 0x40); + GXSetColorUpdate(GX_TRUE); + GXSetAlphaUpdate(GX_FALSE); + J3DShape::resetVcdVatCache(); } /* 80085BBC-80085BFC .text newData__13dDlst_peekZ_cFssPUl */ @@ -719,7 +1080,25 @@ bool dDlst_list_c::init() { /* 800861F4-80086368 .text __dt__12dDlst_list_cFv */ dDlst_list_c::~dDlst_list_c() { - /* Nonmatching */ + delete mpOpaListSky; + delete mpXluListSky; + delete mpOpaListP0; + delete mpOpaListP1; + delete mpXluListP1; + delete mpOpaListBG; + delete mpXluListBG; + delete mpOpaList; + delete mpXluList; + delete mpOpaListFilter; + delete mpOpaListMaskOff; + delete mpXluListMaskOff; + delete mpOpaListInvisible; + delete mpXluListInvisible; + delete mpOpaList2D; + if (mpAlphaModel != NULL) + delete mpAlphaModel; + if (mpSpotModel != NULL) + delete mpSpotModel; } /* 80086368-80086490 .text reset__12dDlst_list_cFv */ @@ -785,8 +1164,14 @@ void dDlst_list_c::draw(dDlst_base_c** pList, dDlst_base_c** pEnd) { } /* 800865C8-800866C8 .text wipeIn__12dDlst_list_cFfR8_GXColor */ -void dDlst_list_c::wipeIn(f32, _GXColor&) { - /* Nonmatching */ +void dDlst_list_c::wipeIn(f32 speed, GXColor& color) { + mWipe = true; + mWipeSpeed = speed; + mWipeColor = color; + mWipeRate = speed >= 0.0f ? 1.0f : 0.0f; + ResTIMG* texture = (ResTIMG*)JKRGetResource('TIMG', "wipe_00.bti", dComIfGp_getMenuArchive()); + JUT_ASSERT(0x1637, texture != 0); + mWipeDlst.init(texture, -9.0f, -21.0f, 659.0f, 524.0f, 0, 1, 1, 2.0f, 2.436f); } /* 800866C8-800866F0 .text wipeIn__12dDlst_list_cFf */ @@ -796,7 +1181,21 @@ void dDlst_list_c::wipeIn(f32 time) { /* 800866F0-80086790 .text calcWipe__12dDlst_list_cFv */ void dDlst_list_c::calcWipe() { - /* Nonmatching */ + if (mWipe) { + mWipeRate += mWipeSpeed; + if (mWipeRate < 0.0f) { + mWipeRate = 0.0f; + } else { + if (mWipeRate > 1.0f) { + mWipeRate = 1.0f; + mWipe = false; + } + } + + mWipeDlst.mScrollS = mWipeRate * 2.0f; + mWipeDlst.mScrollT = mWipeDlst.mScrollS * 1.218f; + set2DXlu(&mWipeDlst); + } } /* 80086790-8008696C .text dDlst_texSpecmapST__FPC4cXyzPC12dKy_tevstr_cP12J3DModelDataf */ diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index 43013c479..ed4be8356 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -12,7 +12,7 @@ dPa_modelEmitter_c::dPa_modelEmitter_c() { } /* 8007A514-8007A804 .text __ct__21dPa_J3DmodelEmitter_cFP14JPABaseEmitterP12J3DModelDataR12dKy_tevstr_cP16J3DAnmTexPatternUsi */ -dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c&, J3DAnmTexPattern*, unsigned short, int) { +dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c&, J3DAnmTexPattern*, u16, int) { /* Nonmatching */ } @@ -61,7 +61,7 @@ void dPa_modelControl_c::draw() { } /* 8007B158-8007B194 .text __ct__19dPa_followEcallBackFUcUc */ -dPa_followEcallBack::dPa_followEcallBack(unsigned char, unsigned char) { +dPa_followEcallBack::dPa_followEcallBack(u8, u8) { /* Nonmatching */ } @@ -76,7 +76,7 @@ void dPa_followEcallBack::draw(JPABaseEmitter*) { } /* 8007B2C8-8007B360 .text setup__19dPa_followEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_followEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_followEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -86,22 +86,22 @@ void dPa_followEcallBack::end() { } /* 8007B3B0-8007B444 .text __ct__18dPa_smokeEcallBackFUc */ -dPa_smokeEcallBack::dPa_smokeEcallBack(unsigned char) { +dPa_smokeEcallBack::dPa_smokeEcallBack(u8) { /* Nonmatching */ } /* 8007B4B0-8007B558 .text __ct__18dPa_smokeEcallBackFUcUcUcUc */ -dPa_smokeEcallBack::dPa_smokeEcallBack(unsigned char, unsigned char, unsigned char, unsigned char) { +dPa_smokeEcallBack::dPa_smokeEcallBack(u8, u8, u8, u8) { /* Nonmatching */ } /* 8007B558-8007B5E8 .text __ct__18dPa_smokeEcallBackFRC8_GXColorP12dKy_tevstr_cUc */ -dPa_smokeEcallBack::dPa_smokeEcallBack(const _GXColor&, dKy_tevstr_c*, unsigned char) { +dPa_smokeEcallBack::dPa_smokeEcallBack(const _GXColor&, dKy_tevstr_c*, u8) { /* Nonmatching */ } /* 8007B5E8-8007B698 .text setup__18dPa_smokeEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_smokeEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_smokeEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -111,7 +111,7 @@ void initiateLighting(_GXColorS10&, _GXColor&, _GXColor&) { } /* 8007B804-8007BB44 .text smokeEcallBack__FP14JPABaseEmitterP12dKy_tevstr_cSc8_GXColor */ -void smokeEcallBack(JPABaseEmitter*, dKy_tevstr_c*, signed char, _GXColor) { +void smokeEcallBack(JPABaseEmitter*, dKy_tevstr_c*, s8, _GXColor) { /* Nonmatching */ } @@ -167,7 +167,7 @@ void dPa_simpleEcallBack::draw(JPABaseEmitter*) { } /* 8007C6EC-8007C774 .text create__19dPa_simpleEcallBackFP17JPAEmitterManagerUsUc */ -void dPa_simpleEcallBack::create(JPAEmitterManager*, unsigned short, unsigned char) { +void dPa_simpleEcallBack::create(JPAEmitterManager*, u16, u8) { /* Nonmatching */ } @@ -177,7 +177,7 @@ void dPa_simpleEcallBack::createEmitter(JPAEmitterManager*) { } /* 8007C840-8007C8C4 .text set__19dPa_simpleEcallBackFPC4cXyzUcRC8_GXColorRC8_GXColori */ -void dPa_simpleEcallBack::set(const cXyz*, unsigned char, const _GXColor&, const _GXColor&, int) { +void dPa_simpleEcallBack::set(const cXyz*, u8, const _GXColor&, const _GXColor&, int) { /* Nonmatching */ } @@ -192,7 +192,7 @@ dPa_control_c::dPa_control_c() { } /* 8007CA28-8007CA30 .text getRM_ID__13dPa_control_cFUs */ -void dPa_control_c::getRM_ID(unsigned short) { +void dPa_control_c::getRM_ID(u16) { /* Nonmatching */ } @@ -212,7 +212,7 @@ void dPa_control_c::createRoomScene(const void*) { } /* 8007CE50-8007CF20 .text readScene__13dPa_control_cFUcPP21mDoDvdThd_toMainRam_c */ -bool dPa_control_c::readScene(unsigned char, mDoDvdThd_toMainRam_c**) { +bool dPa_control_c::readScene(u8, mDoDvdThd_toMainRam_c**) { /* Nonmatching */ } @@ -247,17 +247,17 @@ void dPa_control_c::calcMenu() { } /* 8007D16C-8007D1DC .text draw__13dPa_control_cFP11JPADrawInfoUc */ -void dPa_control_c::draw(JPADrawInfo*, unsigned char) { +void dPa_control_c::draw(JPADrawInfo*, u8) { /* Nonmatching */ } /* 8007D1DC-8007D378 .text set__13dPa_control_cFUcUsPC4cXyzPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyz */ -JPABaseEmitter* dPa_control_c::set(unsigned char, unsigned short, const cXyz*, const csXyz*, const cXyz*, unsigned char, dPa_levelEcallBack*, signed char, const _GXColor*, const _GXColor*, const cXyz*) { +JPABaseEmitter* dPa_control_c::set(u8, u16, const cXyz*, const csXyz*, const cXyz*, u8, dPa_levelEcallBack*, s8, const _GXColor*, const _GXColor*, const cXyz*) { /* Nonmatching */ } /* 8007D378-8007D414 .text setBombSmoke__13dPa_control_cFUsPC4cXyzPC5csXyzPC4cXyzUc */ -JPABaseEmitter* dPa_control_c::setBombSmoke(unsigned short, const cXyz*, const csXyz*, const cXyz*, unsigned char) { +JPABaseEmitter* dPa_control_c::setBombSmoke(u16, const cXyz*, const csXyz*, const cXyz*, u8) { /* Nonmatching */ } @@ -277,27 +277,27 @@ void dPa_control_c::checkAtrCodeEffect(int) { } /* 8007DAA8-8007DB34 .text setNormalStripes__13dPa_control_cFUsPC4cXyzPC5csXyzPC4cXyzUcUs */ -void dPa_control_c::setNormalStripes(unsigned short, const cXyz*, const csXyz*, const cXyz*, unsigned char, unsigned short) { +void dPa_control_c::setNormalStripes(u16, const cXyz*, const csXyz*, const cXyz*, u8, u16) { /* Nonmatching */ } /* 8007DB34-8007DBC4 .text newSimple__13dPa_control_cFUsUc */ -void dPa_control_c::newSimple(unsigned short, unsigned char) { +void dPa_control_c::newSimple(u16, u8) { /* Nonmatching */ } /* 8007DBC4-8007DC30 .text setSimple__13dPa_control_cFUsPC4cXyzUcRC8_GXColorRC8_GXColori */ -void dPa_control_c::setSimple(unsigned short, const cXyz*, unsigned char, const _GXColor&, const _GXColor&, int) { +void dPa_control_c::setSimple(u16, const cXyz*, u8, const _GXColor&, const _GXColor&, int) { /* Nonmatching */ } /* 8007DC30-8007DC6C .text getSimple__13dPa_control_cFUs */ -void dPa_control_c::getSimple(unsigned short) { +void dPa_control_c::getSimple(u16) { /* Nonmatching */ } /* 8007DC6C-8007DC94 .text setup__19dPa_rippleEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_rippleEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_rippleEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -317,7 +317,7 @@ void dPa_rippleEcallBack::draw(JPABaseEmitter*) { } /* 8007DDA8-8007DDB4 .text setup__25dPa_singleRippleEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_singleRippleEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_singleRippleEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -342,7 +342,7 @@ void dPa_ripplePcallBack::draw(JPABaseEmitter*, JPABaseParticle*) { } /* 8007E254-8007E288 .text setup__17dPa_waveEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_waveEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_waveEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -362,7 +362,7 @@ void dPa_waveEcallBack::draw(JPABaseEmitter*) { } /* 8007E804-8007E81C .text setup__19dPa_splashEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_splashEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_splashEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -377,7 +377,7 @@ void dPa_splashEcallBack::execute(JPABaseEmitter*) { } /* 8007E9B8-8007E9D4 .text setup__22dPa_cutTurnEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_cutTurnEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_cutTurnEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -412,7 +412,7 @@ void dPa_trackEcallBack::getMaxWaterY(JGeometry::TVec3*) { } /* 8007F1A8-8007F1C0 .text setup__18dPa_trackEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_trackEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { +void dPa_trackEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { /* Nonmatching */ } @@ -432,26 +432,22 @@ void dPa_trackEcallBack::draw(JPABaseEmitter*) { } /* 8007F704-8007F708 .text setup__22dPa_bombSmokeEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_bombSmokeEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ +void dPa_bombSmokeEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { } /* 8007F7D0-8007F7D4 .text setup__20dPa_stripesEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_stripesEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ +void dPa_stripesEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { } /* 8007FAE8-8007FAEC .text setup__22dPa_selectTexEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_selectTexEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ +void dPa_selectTexEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { } /* 8007FF78-8007FFA8 .text draw__21dPa_setColorEcallBackFP14JPABaseEmitter */ void dPa_setColorEcallBack::draw(JPABaseEmitter*) { - /* Nonmatching */ + GXSetTevColor(GX_TEVREG1, mColor); } /* 8007FFA8-8007FFAC .text setup__21dPa_setColorEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void dPa_setColorEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char) { - /* Nonmatching */ +void dPa_setColorEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { }