d_particle work

This commit is contained in:
Jasper St. Pierre
2024-07-13 20:38:12 -07:00
parent 5f6ef2a214
commit e4024253ab
8 changed files with 224 additions and 89 deletions
+2 -2
View File
@@ -294,11 +294,11 @@ public:
void getBaseEnvColor(GXColor&) {}
void getBasePrmColor(GXColor&) {}
void getCamMtxPtr() {}
void getChildParticleList() {}
JSUList<JPABaseParticle>* getChildParticleList() { return &mChildParticles; }
void getCurrentCreateNumber() const {}
void getFrame() {}
void getGlobalParticleScale(JGeometry::TVec3<f32>&) const {}
void getParticleList() {}
JSUList<JPABaseParticle>* getParticleList() { return &mActiveParticles; }
void getgReRDirection(JGeometry::TVec3<f32>&) {}
void isChildDraw() {}
void isContinuousParticle() {}
+12 -12
View File
@@ -21,24 +21,24 @@ struct cXyz : Vec {
~cXyz() {}
/* inlined */ cXyz() {}
cXyz(f32 x, f32 y, f32 z) {
this->x = x;
this->y = y;
this->z = z;
x = x;
y = y;
z = z;
}
cXyz(const cXyz& vec) {
this->x = vec.x;
this->y = vec.y;
this->z = vec.z;
x = vec.x;
y = vec.y;
z = vec.z;
}
cXyz(const Vec& vec) {
this->x = vec.x;
this->y = vec.y;
this->z = vec.z;
x = vec.x;
y = vec.y;
z = vec.z;
}
void operator=(const Vec& vec) {
this->x = vec.x;
this->y = vec.y;
this->z = vec.z;
x = vec.x;
y = vec.y;
z = vec.z;
}
cXyz operator+(Vec const&) const;
cXyz operator-(Vec const&) const;
+5 -23
View File
@@ -212,30 +212,12 @@ public:
/* 0x10 */ JPABaseEmitter* mpBaseEmitter;
/* 0x14 */ JKRSolidHeap* mpHeap;
/* 0x18 */ J3DModelData* field_0x18;
/* 0x18 */ J3DModelData* modelData;
/* 0x1C */ J3DAnmTexPattern* field_0x1c;
/* 0x20 */ J3DTexNoAnm* field_0x20;
/* 0x24 */ u16 field_0x24;
/* 0x26 */ u8 field_0x26;
/* 0x28 */ J3DLightInfo field_0x28;
/* 0x5C */ u8 field_0x5c[0x9c - 0x5c];
/* 0x9C */ cXyz field_0x9c;
/* 0xA8 */ GXColorS10 field_0xa8;
/* 0xB0 */ GXColor field_0xb0;
/* 0xB4 */ GXColor field_0xb4;
/* 0xB8 */ GXColorS10 field_0xb8;
/* 0xC0 */ f32 field_0xc0;
/* 0xC4 */ f32 field_0xc4;
/* 0xC8 */ f32 field_0xc8;
/* 0xCC */ u8 field_0xcc;
/* 0xCD */ u8 field_0xcd;
/* 0xCE */ u8 field_0xce;
/* 0xCF */ u8 field_0xcf;
/* 0xD0 */ u8 field_0xd0;
/* 0xD1 */ u8 field_0xd1;
/* 0xD2 */ u8 field_0xd2;
/* 0xD3 */ u8 field_0xd3;
/* 0xD4 */ u8 field_0xd4;
/* 0x5C */ dKy_tevstr_c tevStr;
};
class dPa_J3Dmodel_c {
@@ -258,13 +240,13 @@ public:
class dPa_selectTexEcallBack : public dPa_levelEcallBack {
public:
dPa_selectTexEcallBack(u8 param_1) { field_0x4 = param_1; }
dPa_selectTexEcallBack(u8 tex) { mTexNo = tex; }
virtual ~dPa_selectTexEcallBack() {}
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
/* 0x04 */ u8 field_0x4;
/* 0x04 */ u8 mTexNo;
};
class dPa_windPcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*> {
@@ -378,7 +360,7 @@ public:
void createRoomScene(void const*);
bool readScene(u8, mDoDvdThd_toMainRam_c**);
void createScene(void const*);
void removeRoomScene();
bool removeRoomScene();
void removeScene();
void calc3D();
void calc2D();
+4 -4
View File
@@ -830,7 +830,7 @@ void JPADraw::drawParticle() {
for (s32 i = 0; i < execEmtrPVisNum; i++)
mpExecEmtrPVis[i]->exec(&dc);
JSUList<JPABaseParticle> * activeParticles = &dc.pbe->mActiveParticles;
JSUList<JPABaseParticle> * activeParticles = dc.pbe->getParticleList();
if (dc.pbsp->getListOrder() == 0) {
for (JSULink<JPABaseParticle> * link = activeParticles->getFirst(); link != NULL; link = link->getNext()) {
JPABaseParticle * ptcl = (JPABaseParticle*)link->getObject();
@@ -879,7 +879,7 @@ void JPADraw::drawChild() {
for (s32 i = 0; i < execEmtrCVisNum; i++)
mpExecEmtrCVis[i]->exec(&dc);
JSUList<JPABaseParticle> * childParticles = &dc.pbe->mChildParticles;
JSUList<JPABaseParticle> * childParticles = dc.pbe->getChildParticleList();
if (dc.pbsp->getListOrder() == 0) {
for (JSULink<JPABaseParticle> * link = childParticles->getFirst(); link != NULL; link = link->getNext()) {
JPABaseParticle * ptcl = (JPABaseParticle*)link->getObject();
@@ -930,7 +930,7 @@ void JPADraw::zDrawParticle() {
for (s32 i = 0; i < execEmtrPVisNum; i++)
mpExecEmtrPVis[i]->exec(&dc);
JSUList<JPABaseParticle> * activeParticles = &dc.pbe->mActiveParticles;
JSUList<JPABaseParticle> * activeParticles = dc.pbe->getParticleList();
if (dc.pbsp->getListOrder() == 0) {
for (JSULink<JPABaseParticle> * link = activeParticles->getFirst(); link != NULL; link = link->getNext()) {
JPABaseParticle * ptcl = (JPABaseParticle*)link->getObject();
@@ -979,7 +979,7 @@ void JPADraw::zDrawChild() {
for (s32 i = 0; i < execEmtrCVisNum; i++)
mpExecEmtrCVis[i]->exec(&dc);
JSUList<JPABaseParticle> * childParticles = &dc.pbe->mChildParticles;
JSUList<JPABaseParticle> * childParticles = dc.pbe->getChildParticleList();
if (dc.pbsp->getListOrder() == 0) {
for (JSULink<JPABaseParticle> * link = childParticles->getFirst(); link != NULL; link = link->getNext()) {
JPABaseParticle * ptcl = (JPABaseParticle*)link->getObject();
+1 -1
View File
@@ -41,7 +41,7 @@ void dOvlpFd2_dlst_c::draw() {
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_TRUE);
GXSetClipMode(GX_CLIP_DISABLE);
GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
+1 -1
View File
@@ -140,7 +140,7 @@ void dDlst_2Dt_Sp_c::draw() {
GXSetCullMode(GX_CULL_NONE);
GXSetDither(GX_FALSE);
GXSetClipMode(GX_CLIP_DISABLE);
GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0);
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
f32 x1, y1;
+197 -44
View File
@@ -3,12 +3,15 @@
// Translation Unit: d_particle.cpp
//
#include "d/d_kankyo_wether.h"
#include "d/d_particle.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JSupport/JSUList.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "SSystem/SComponent/c_malloc.h"
#include "d/d_com_inf_game.h"
@@ -32,29 +35,10 @@ dPa_modelEmitter_c::dPa_modelEmitter_c() {
/* 8007A514-8007A804 .text __ct__21dPa_J3DmodelEmitter_cFP14JPABaseEmitterP12J3DModelDataR12dKy_tevstr_cP16J3DAnmTexPatternUsi */
dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter* param_1, J3DModelData* param_2, dKy_tevstr_c& param_3, J3DAnmTexPattern* param_4, u16 param_5, int param_6) {
/* Nonmatching */
field_0x28 = j3dDefaultLightInfo;
mpBaseEmitter = param_1;
field_0x18 = param_2;
modelData = param_2;
field_0x26 = param_6;
field_0x28 = param_3.mLightObj.getLightInfo();
field_0x9c = param_3.mLightPosWorld;
field_0xa8 = param_3.mColorC0;
field_0xb0 = param_3.mColorK0;
field_0xb4 = param_3.mColorK1;
field_0xb8 = param_3.mFogColor;
field_0xc0 = param_3.mFogStartZ;
field_0xc4 = param_3.mFogEndZ;
field_0xc8 = param_3.mColpatBlend;
field_0xcc = param_3.mInitTimer;
field_0xcd = param_3.mEnvrIdxCurr;
field_0xce = param_3.mEnvrIdxPrev;
field_0xcf = param_3.mColpatCurr;
field_0xd0 = param_3.mColpatPrev;
field_0xd1 = param_3.mRoomNo;
field_0xd2 = param_3.mEnvrIdxOverride;
field_0xd3 = param_3.mLightMode;
field_0xd4 = param_3.mInitType;
tevStr = param_3;
field_0x1c = param_4;
if (!field_0x1c) {
mpHeap = NULL;
@@ -65,7 +49,7 @@ dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter* param_1, J3DModelDa
if (mpHeap) {
field_0x20 = new J3DTexNoAnm[r29];
if (field_0x20) {
field_0x1c->searchUpdateMaterialID(field_0x18);
field_0x1c->searchUpdateMaterialID(modelData);
J3DTexNoAnm* tex = field_0x20;
for (u16 i = 0; i < r29; i++) {
tex->setAnmIndex(i);
@@ -91,6 +75,62 @@ dPa_J3DmodelEmitter_c::~dPa_J3DmodelEmitter_c() {
/* 8007A8C8-8007ADC4 .text draw__21dPa_J3DmodelEmitter_cFv */
void dPa_J3DmodelEmitter_c::draw() {
/* Nonmatching */
mpBaseEmitter->quitImmortalEmitter();
JSUList<JPABaseParticle>* list = mpBaseEmitter->getParticleList();
if (list != NULL) {
Mtx mtx1, mtx2;
mDoMtx_identity(mtx1);
mDoMtx_identity(mtx2);
for (JSULink<JPABaseParticle>* link = list->getFirst(); link != NULL; link = link->getNext()) {
JPABaseParticle* ptcl = link->getObject();
J3DModel* model = dPa_modelControl_c::newModel(modelData);
if (model == NULL)
return;
mtx1[0][1] = ptcl->mVelocity.x;
mtx1[1][1] = ptcl->mVelocity.y;
mtx1[2][1] = ptcl->mVelocity.z;
f32 sq = mtx1[0][1]*mtx1[0][1] + mtx1[1][1]*mtx1[1][1] + mtx1[2][1]*mtx1[2][1];
if (!cM3d_IsZero(sq)) {
if (!cM3d_IsZero(sq)) {
f32 mag = sqrtf(sq);
mtx1[0][1] *= mag;
mtx1[1][1] *= mag;
mtx1[2][1] *= mag;
}
} else {
mtx1[0][1] = 0.0f;
mtx1[1][1] = 1.0f;
mtx1[2][1] = 0.0f;
}
// TODO: all the math
mtx1[0][3] = ptcl->mPosition.x;
mtx1[1][3] = ptcl->mPosition.y;
mtx1[2][3] = ptcl->mPosition.z;
g_env_light.setLightTevColorType(model, &tevStr);
if (field_0x1c != NULL && field_0x20 != NULL) {
field_0x1c->setFrame(field_0x24);
modelData->getMaterialTable().setTexNoAnimator(field_0x1c, field_0x20);
}
cXyz scale;
scale.x = mpBaseEmitter->mGlobalParticleScale.x * ptcl->mScaleX;
scale.y = mpBaseEmitter->mGlobalParticleScale.y * ptcl->mScaleY;
scale.z = mpBaseEmitter->mGlobalParticleScale.z * ptcl->mScaleX;
model->setBaseScale(scale);
model->setBaseTRMtx(mtx1);
mDoExt_modelUpdate(model);
if (field_0x1c != NULL) {
modelData->getMaterialTable().removeTexNoAnimator(field_0x1c);
}
}
}
mpBaseEmitter->stopDrawParticle();
}
/* 8007ADC4-8007AECC .text __ct__18dPa_modelControl_cFP12J3DModelData */
@@ -250,43 +290,112 @@ void dPa_smokeEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, con
}
/* 8007B73C-8007B804 .text initiateLighting__FR11_GXColorS10R8_GXColorR8_GXColor */
void initiateLighting(_GXColorS10&, _GXColor&, _GXColor&) {
/* Nonmatching */
void initiateLighting(GXColorS10& dif, GXColor& amb, GXColor& k1) {
GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_VTX, 1, GX_DF_CLAMP, GX_AF_NONE);
GXSetChanAmbColor(GX_COLOR0A0, g_blackColor);
GXSetTevColorS10(GX_TEVREG0, dif);
GXSetTevKColor(GX_KCOLOR0, amb);
GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0);
GXSetTevKColor(GX_KCOLOR1, k1);
GXSetTevKColorSel(GX_TEVSTAGE2, GX_TEV_KCSEL_K1);
}
/* 8007B804-8007BB44 .text smokeEcallBack__FP14JPABaseEmitterP12dKy_tevstr_cSc8_GXColor */
void smokeEcallBack(JPABaseEmitter*, dKy_tevstr_c*, s8, _GXColor) {
/* Nonmatching */
void smokeEcallBack(JPABaseEmitter* emtr, dKy_tevstr_c* tevStr, s8, GXColor color) {
GXFlush();
GXLoadNrmMtxImm(JPADraw::cb.mDrawMtxPtr, GX_PNMTX0);
GXInvalidateVtxCache();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
if (!(emtr->mDraw.field_0xc2 & 1)) {
GXSetNumChans(1);
if (tevStr == NULL) {
GXColorS10 dif;
dif.r = g_env_light.mActorC0.r;
dif.g = g_env_light.mActorC0.g;
dif.b = g_env_light.mActorC0.b;
dif.a = 0xFF;
GXColor amb;
amb.r = g_env_light.mActorK0.r;
amb.g = g_env_light.mActorK0.g;
amb.b = g_env_light.mActorK0.b;
amb.a = 0xFF;
initiateLighting(dif, amb, color);
} else {
initiateLighting(tevStr->mColorC0, tevStr->mColorK0, color);
}
color.a = emtr->mGlobalPrmColor.a;
GXSetNumTexGens(2);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_SRTG, GX_TG_COLOR0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
emtr->mDraw.loadTexture(1, GX_TEXMAP1);
GXSetNumTevStages(3);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C0, GX_CC_KONST, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_C0, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_APREV, GX_CA_TEXA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_CPREV, GX_CC_KONST, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_APREV);
GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
}
}
/* 8007BB44-8007BB80 .text draw__18dPa_smokeEcallBackFP14JPABaseEmitter */
void dPa_smokeEcallBack::draw(JPABaseEmitter*) {
/* Nonmatching */
void dPa_smokeEcallBack::draw(JPABaseEmitter* emtr) {
smokeEcallBack(emtr, mTevstr, field_0x14, field_0x16);
}
/* 8007BB80-8007BBD8 .text end__18dPa_smokeEcallBackFv */
void dPa_smokeEcallBack::end() {
/* Nonmatching */
if (mpEmitter == NULL)
return;
mpEmitter->becomeInvalidEmitter();
mpEmitter->quitImmortalEmitter();
mpEmitter->setEmitterCallBackPtr(&dPa_control_c::mSmokeEcallback);
mFlag |= 1;
mpEmitter = NULL;
}
/* 8007BBD8-8007BC84 .text dPa_setWindPower__FP15JPABaseParticle */
void dPa_setWindPower(JPABaseParticle*) {
void dPa_setWindPower(JPABaseParticle* ptcl) {
/* Nonmatching */
cXyz pos(ptcl->mGlobalPosition);
cXyz wind;
f32 pow;
dKyw_get_AllWind_vec(&pos, &wind, &pow);
ptcl->mGlobalPosition.add(pos, wind * (pow * 8.0f));
}
/* 8007BC84-8007BCB4 .text execute__18dPa_smokePcallBackFP14JPABaseEmitterP15JPABaseParticle */
void dPa_smokePcallBack::execute(JPABaseEmitter*, JPABaseParticle*) {
/* Nonmatching */
void dPa_smokePcallBack::execute(JPABaseEmitter* emtr, JPABaseParticle* ptcl) {
if (emtr->mUserData == 0)
dPa_setWindPower(ptcl);
}
/* 8007BCB4-8007C380 .text draw__18dPa_smokePcallBackFP14JPABaseEmitterP15JPABaseParticle */
void dPa_smokePcallBack::draw(JPABaseEmitter*, JPABaseParticle*) {
void dPa_smokePcallBack::draw(JPABaseEmitter* emtr, JPABaseParticle* ptcl) {
/* Nonmatching */
}
/* 8007C380-8007C3B0 .text draw__22dPa_selectTexEcallBackFP14JPABaseEmitter */
void dPa_selectTexEcallBack::draw(JPABaseEmitter*) {
/* Nonmatching */
void dPa_selectTexEcallBack::draw(JPABaseEmitter* emtr) {
emtr->mDraw.loadTexture(mTexNo, GX_TEXMAP0);
}
/* 8007C3B0-8007C420 .text __ct__19dPa_simpleEcallBackFv */
@@ -334,8 +443,13 @@ void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_1) {
}
/* 8007C674-8007C6EC .text draw__19dPa_simpleEcallBackFP14JPABaseEmitter */
void dPa_simpleEcallBack::draw(JPABaseEmitter*) {
void dPa_simpleEcallBack::draw(JPABaseEmitter* emtr) {
/* Nonmatching */
if (mbIsSmoke)
smokeEcallBack(emtr, NULL, -1, (GXColor){ 0xA0, 0xA0, 0x80, 0xFF });
if (emtr->mGroupID == 4)
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
}
/* 8007C6EC-8007C774 .text create__19dPa_simpleEcallBackFP17JPAEmitterManagerUsUc */
@@ -375,8 +489,8 @@ bool dPa_simpleEcallBack::set(const cXyz*, u8, const _GXColor&, const _GXColor&,
}
/* 8007C8C4-8007C8E8 .text execute__17dPa_windPcallBackFP14JPABaseEmitterP15JPABaseParticle */
void dPa_windPcallBack::execute(JPABaseEmitter*, JPABaseParticle*) {
/* Nonmatching */
void dPa_windPcallBack::execute(JPABaseEmitter* emtr, JPABaseParticle* ptcl) {
dPa_setWindPower(ptcl);
}
GXColor l_lifeBallColor[] = {
@@ -501,18 +615,32 @@ bool dPa_control_c::readScene(u8 i_no, mDoDvdThd_toMainRam_c** param_2) {
}
/* 8007CF20-8007CF98 .text createScene__13dPa_control_cFPCv */
void dPa_control_c::createScene(const void*) {
void dPa_control_c::createScene(const void* data) {
/* Nonmatching */
}
/* 8007CF98-8007D028 .text removeRoomScene__13dPa_control_cFv */
void dPa_control_c::removeRoomScene() {
/* Nonmatching */
bool dPa_control_c::removeRoomScene() {
if (mSceneHeap != NULL && mCount != 0 && --mCount == 0) {
mEmitterMng->clearResourceManager(1);
mDoExt_destroySolidHeap(mSceneHeap);
mSceneHeap = NULL;
mSceneResMng = NULL;
JKRFree((void*)mpData);
mNumSimple = mNumSimpleCommon;
return true;
} else {
return false;
}
}
/* 8007D028-8007D094 .text removeScene__13dPa_control_cFv */
void dPa_control_c::removeScene() {
/* Nonmatching */
removeRoomScene();
for (s32 i = 0; i < mNumSimpleCommon; i++)
mSimpleCallbacks[i].mpBaseEmitter = NULL;
mEmitterMng->forceDeleteAllEmitter();
mModelControl->~dPa_modelControl_c();
}
/* 8007D094-8007D0DC .text calc3D__13dPa_control_cFv */
@@ -543,8 +671,33 @@ void dPa_control_c::draw(JPADrawInfo* param_1, u8 param_2) {
}
/* 8007D1DC-8007D378 .text set__13dPa_control_cFUcUsPC4cXyzPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyz */
JPABaseEmitter* dPa_control_c::set(u8, u16, const cXyz*, const csXyz*, const cXyz*, u8, dPa_levelEcallBack*, s8, const _GXColor*, const _GXColor*, const cXyz*) {
JPABaseEmitter* dPa_control_c::set(u8 groupID, u16 userID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* prm, const GXColor* env, const cXyz* globalScale) {
/* Nonmatching */
JPABaseEmitter* emtr = mEmitterMng->createSimpleEmitterID(*pos, userID, groupID, getRM_ID(userID), NULL, NULL);
if (emtr == NULL)
return NULL;
if (angle != NULL)
emtr->setGlobalRotation(*(JGeometry::TVec3<s16>*)angle);
if (scale != NULL)
emtr->setGlobalScale(*scale);
emtr->mGlobalPrmColor.a = alpha;
if (pCallBack != NULL) {
emtr->setEmitterCallBackPtr(pCallBack);
pCallBack->setup(emtr, pos, angle, setupInfo);
} else if (!!(userID & 0x4000)) {
emtr->setEmitterCallBackPtr(&mKagero);
}
if (prm != NULL)
emtr->setGlobalPrmColor(prm->r, prm->g, prm->b);
if (env != NULL)
emtr->setGlobalEnvColor(env->r, env->g, env->b);
if (globalScale != NULL)
emtr->setGlobalParticleScale(*globalScale);
return emtr;
}
/* 8007D378-8007D414 .text setBombSmoke__13dPa_control_cFUsPC4cXyzPC5csXyzPC4cXyzUc */
@@ -553,7 +706,7 @@ JPABaseEmitter* dPa_control_c::setBombSmoke(u16, const cXyz*, const csXyz*, cons
}
/* 8007D414-8007D998 .text setSimpleLand__13dPa_control_cFiPC4cXyzPC5csXyzfffP12dKy_tevstr_cPii */
void dPa_control_c::setSimpleLand(int, const cXyz*, const csXyz*, f32, f32, f32, dKy_tevstr_c*, int*, int) {
void dPa_control_c::setSimpleLand(int type, const cXyz* pos, const csXyz* angle, f32, f32, f32, dKy_tevstr_c*, int*, int) {
/* Nonmatching */
}
+2 -2
View File
@@ -1912,7 +1912,7 @@ void mDoExt_3DlineMat0_c::setMaterial() {
GXCallDisplayList(l_matDL, 0x80);
}
GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
GXLoadNrmMtxImm(g_mDoMtx_identity, GX_PNMTX0);
GXLoadNrmMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
}
/* 80014798-800148B4 .text draw__19mDoExt_3DlineMat0_cFv */
@@ -2175,7 +2175,7 @@ void mDoExt_3DlineMat1_c::setMaterial() {
GXCallDisplayList(l_mat1DL, 0x80);
}
GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
GXLoadNrmMtxImm(g_mDoMtx_identity, GX_PNMTX0);
GXLoadNrmMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
}
/* 800155DC-80015764 .text draw__19mDoExt_3DlineMat1_cFv */