mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-19 21:33:07 -04:00
d_particle (#1176)
This commit is contained in:
@@ -335,7 +335,7 @@ public:
|
||||
public:
|
||||
/* 0x04 */ u8 mAlpha;
|
||||
/* 0x05 */ u8 field_0x5;
|
||||
/* 0x06 */ u16 field_0x6;
|
||||
/* 0x06 */ s16 field_0x6;
|
||||
/* 0x08 */ cXyz* mPosArray;
|
||||
/* 0x0C */ JPABaseEmitter* mpBaseEmitter;
|
||||
}; // Size: 0x10
|
||||
|
||||
+232
-68
@@ -13,6 +13,7 @@
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "SSystem/SComponent/c_malloc.h"
|
||||
#include "d/actor/d_a_sea.h"
|
||||
#include "d/d_bg_s_gnd_chk.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_kankyo.h"
|
||||
@@ -30,8 +31,8 @@ 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) {
|
||||
mpBaseEmitter = param_1;
|
||||
dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter* emitter, J3DModelData* param_2, dKy_tevstr_c& param_3, J3DAnmTexPattern* param_4, u16 param_5, int param_6) {
|
||||
mpBaseEmitter = emitter;
|
||||
modelData = param_2;
|
||||
field_0x26 = param_6;
|
||||
tevStr = param_3;
|
||||
@@ -58,7 +59,7 @@ dPa_J3DmodelEmitter_c::dPa_J3DmodelEmitter_c(JPABaseEmitter* param_1, J3DModelDa
|
||||
mDoExt_adjustSolidHeap(mpHeap);
|
||||
}
|
||||
}
|
||||
param_1->becomeImmortalEmitter();
|
||||
emitter->becomeImmortalEmitter();
|
||||
}
|
||||
|
||||
/* 8007A84C-8007A8C8 .text __dt__21dPa_J3DmodelEmitter_cFv */
|
||||
@@ -167,12 +168,12 @@ void dPa_J3DmodelEmitter_c::draw() {
|
||||
/* 8007ADC4-8007AECC .text __ct__18dPa_modelControl_cFP12J3DModelData */
|
||||
dPa_modelControl_c::dPa_modelControl_c(J3DModelData* modelData) {
|
||||
mModel = new dPa_J3Dmodel_c[0x80];
|
||||
JUT_ASSERT(0x10f, mModel != NULL);
|
||||
JUT_ASSERT(271, mModel != NULL);
|
||||
|
||||
dPa_J3Dmodel_c * model = mModel;
|
||||
for (s32 i = 0; i < 0x80; i++, model++) {
|
||||
model->mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x37221223);
|
||||
JUT_ASSERT(0x120, model->mModel != NULL);
|
||||
JUT_ASSERT(288, model->mModel != NULL);
|
||||
}
|
||||
|
||||
cLs_Create(this);
|
||||
@@ -345,12 +346,12 @@ dPa_smokeEcallBack::dPa_smokeEcallBack(const GXColor& param_1, dKy_tevstr_c* par
|
||||
}
|
||||
|
||||
/* 8007B5E8-8007B698 .text setup__18dPa_smokeEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_smokeEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
void dPa_smokeEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
static dPa_smokePcallBack l_smokePcallBack;
|
||||
dPa_followEcallBack::setup(param_1, param_2, param_3, param_4);
|
||||
dPa_followEcallBack::setup(emitter, pos, rot, param_4);
|
||||
field_0x14 = param_4;
|
||||
param_1->setParticleCallBackPtr(dPa_control_c::getSmokePcallback());
|
||||
param_1->setUserWork(mWindOff);
|
||||
emitter->setParticleCallBackPtr(dPa_control_c::getSmokePcallback());
|
||||
emitter->setUserWork(mWindOff);
|
||||
}
|
||||
|
||||
/* 8007B73C-8007B804 .text initiateLighting__FR11_GXColorS10R8_GXColorR8_GXColor */
|
||||
@@ -473,21 +474,21 @@ dPa_simpleEcallBack::dPa_simpleEcallBack() {
|
||||
dPa_simpleData_c::dPa_simpleData_c() {}
|
||||
|
||||
/* 8007C460-8007C618 .text executeAfter__19dPa_simpleEcallBackFP14JPABaseEmitter */
|
||||
void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_1) {
|
||||
s32 r28 = param_1->getCurrentCreateNumber();
|
||||
void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* emitter) {
|
||||
s32 r28 = emitter->getCurrentCreateNumber();
|
||||
if (r28 <= 0) {
|
||||
mCount = 0;
|
||||
} else {
|
||||
dPa_simpleData_c* simpleData = mSimpleData;
|
||||
param_1->playCreateParticle();
|
||||
emitter->playCreateParticle();
|
||||
while (mCount != 0) {
|
||||
if (!mDoLib_clipper::clip(j3dSys.getViewMtx(), simpleData->mPos, 200.0f)) {
|
||||
param_1->setGlobalTranslation(simpleData->mPos.x, simpleData->mPos.y, simpleData->mPos.z);
|
||||
param_1->setGlobalPrmColor(simpleData->mPrmColor.r, simpleData->mPrmColor.g, simpleData->mPrmColor.b);
|
||||
param_1->setGlobalAlpha(simpleData->mPrmColor.a);
|
||||
param_1->setGlobalEnvColor(simpleData->mEnvColor[0], simpleData->mEnvColor[1], simpleData->mEnvColor[2]);
|
||||
emitter->setGlobalTranslation(simpleData->mPos.x, simpleData->mPos.y, simpleData->mPos.z);
|
||||
emitter->setGlobalPrmColor(simpleData->mPrmColor.r, simpleData->mPrmColor.g, simpleData->mPrmColor.b);
|
||||
emitter->setGlobalAlpha(simpleData->mPrmColor.a);
|
||||
emitter->setGlobalEnvColor(simpleData->mEnvColor[0], simpleData->mEnvColor[1], simpleData->mEnvColor[2]);
|
||||
for (int i = 0; i < r28; i++) {
|
||||
JPABaseParticle* particle = param_1->createParticle();
|
||||
JPABaseParticle* particle = emitter->createParticle();
|
||||
if (particle == NULL) {
|
||||
break;
|
||||
}
|
||||
@@ -502,7 +503,7 @@ void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_1) {
|
||||
simpleData++;
|
||||
}
|
||||
}
|
||||
param_1->stopCreateParticle();
|
||||
emitter->stopCreateParticle();
|
||||
}
|
||||
|
||||
/* 8007C674-8007C6EC .text draw__19dPa_simpleEcallBackFP14JPABaseEmitter */
|
||||
@@ -520,8 +521,16 @@ JPABaseEmitter* dPa_simpleEcallBack::create(JPAEmitterManager* manager, u16 effe
|
||||
mGrpID = groupID;
|
||||
mResID = effectID;
|
||||
if (createEmitter(manager)) {
|
||||
if (effectID == dPa_name::ID_AK_ST_O_BKMSATTACKSMOKE00 || effectID == dPa_name::ID_AK_ST_O_KGTT2JUMPHANDSMOKE00) {
|
||||
if (
|
||||
effectID == dPa_name::ID_AK_ST_O_BKMSATTACKSMOKE00
|
||||
#if VERSION != VERSION_DEMO
|
||||
|| effectID == dPa_name::ID_AK_ST_O_KGTT2JUMPHANDSMOKE00
|
||||
#endif
|
||||
) {
|
||||
mbIsSmoke = true;
|
||||
#if VERSION == VERSION_DEMO
|
||||
mpBaseEmitter->setEmitterCallBackPtr(dPa_control_c::getSmokeEcallback());
|
||||
#endif
|
||||
mpBaseEmitter->setParticleCallBackPtr(dPa_control_c::getSmokePcallback());
|
||||
} else {
|
||||
mbIsSmoke = false;
|
||||
@@ -602,7 +611,7 @@ u8 dPa_control_c::mStatus;
|
||||
/* 8007C8E8-8007C9A4 .text __ct__13dPa_control_cFv */
|
||||
dPa_control_c::dPa_control_c() {
|
||||
mHeap = mDoExt_createSolidHeapFromSystem(0x16e800, 0);
|
||||
JUT_ASSERT(0x4d8, mHeap != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1240, 1240, 1240, 1241), mHeap != NULL);
|
||||
mSceneNo = 0xFF;
|
||||
mCount = 0;
|
||||
mEmitterMng = NULL;
|
||||
@@ -629,13 +638,13 @@ void dPa_control_c::swapFrameBufferTexture() {
|
||||
/* 8007CA98-8007CCC8 .text createCommon__13dPa_control_cFPCv */
|
||||
void dPa_control_c::createCommon(const void* param_1) {
|
||||
mCommonResMng = new (mHeap, 0) JPAResourceManager(param_1, mHeap);
|
||||
JUT_ASSERT(1313, mCommonResMng != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1312, 1312, 1313, 1314), mCommonResMng != NULL);
|
||||
mCommonResMng->swapTexture(mDoGph_gInf_c::mFrameBufferTimg, "AK_kagerouSwap00");
|
||||
mEmitterMng = new(mHeap, 0) JPAEmitterManager(mCommonResMng, 3000, 150, 200, mHeap);
|
||||
JUT_ASSERT(1324, mEmitterMng != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1322, 1322, 1324, 1325), mEmitterMng != NULL);
|
||||
JKRHeap* oldHeap = mDoExt_setCurrentHeap(mHeap);
|
||||
mModelControl = new dPa_modelControl_c((J3DModelData*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BDL_MPM_TUBO_e));
|
||||
JUT_ASSERT(1332, mModelControl != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1329, 1329, 1332, 1333), mModelControl != NULL);
|
||||
for (u16 i = 0; i < 8; i++) {
|
||||
u16 id = dPa_name::j_o_id[i];
|
||||
if (mCommonResMng->pEmtrRes->checkUserIndexDuplication(id)) {
|
||||
@@ -646,16 +655,18 @@ void dPa_control_c::createCommon(const void* param_1) {
|
||||
}
|
||||
mNumSimpleCommon = mNumSimple;
|
||||
mDoExt_setCurrentHeap(oldHeap);
|
||||
#if VERSION >= VERSION_USA
|
||||
mDoExt_adjustSolidHeap(mHeap);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* 8007CCC8-8007CE50 .text createRoomScene__13dPa_control_cFPCv */
|
||||
void dPa_control_c::createRoomScene(const void* param_1) {
|
||||
mSceneHeap = mDoExt_createSolidHeapFromGame(0, 0);
|
||||
JUT_ASSERT(1369, mSceneHeap != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1360, 1360, 1369, 1370), mSceneHeap != NULL);
|
||||
mpData = param_1;
|
||||
mSceneResMng = new (mSceneHeap, 0) JPAResourceManager(mpData, mSceneHeap);
|
||||
JUT_ASSERT(1373, mSceneResMng != NULL);
|
||||
JUT_ASSERT(VERSION_SELECT(1364, 1364, 1373, 1374), mSceneResMng != NULL);
|
||||
mSceneResMng->swapTexture(mDoGph_gInf_c::mFrameBufferTimg, "AK_kagerouSwap00");
|
||||
mEmitterMng->pResMgrArray[1] = mSceneResMng;
|
||||
mDoExt_adjustSolidHeap(mSceneHeap);
|
||||
@@ -676,7 +687,7 @@ bool dPa_control_c::readScene(u8 i_no, mDoDvdThd_toMainRam_c** param_2) {
|
||||
return false;
|
||||
}
|
||||
if (mCount++) {
|
||||
JUT_ASSERT(1415, i_no != mSceneNo);
|
||||
JUT_ASSERT(VERSION_SELECT(1404, 1404, 1415, 1416), i_no != mSceneNo);
|
||||
return true;
|
||||
}
|
||||
mSceneNo = i_no;
|
||||
@@ -745,7 +756,9 @@ void dPa_control_c::draw(JPADrawInfo* param_1, u8 param_2) {
|
||||
dKy_setLight_again();
|
||||
mEmitterMng->draw(param_1, param_2);
|
||||
GXSetAlphaUpdate(GX_DISABLE);
|
||||
#if VERSION != VERSION_DEMO
|
||||
GXSetNumIndStages(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* 8007D1DC-8007D378 .text set__13dPa_control_cFUcUsPC4cXyzPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyz */
|
||||
@@ -798,7 +811,7 @@ JPABaseEmitter* dPa_control_c::setBombSmoke(u16 userID, const cXyz* pos, const c
|
||||
|
||||
/* 8007D414-8007D998 .text setSimpleLand__13dPa_control_cFiPC4cXyzPC5csXyzfffP12dKy_tevstr_cPii */
|
||||
JPABaseEmitter* dPa_control_c::setSimpleLand(int code, const cXyz* pos, const csXyz* angle, f32 scale1, f32 scale2, f32 scale3, dKy_tevstr_c* i_tevStr, int* i_return_id, int flag) {
|
||||
JUT_ASSERT(0x6b1, (i_tevStr != NULL) && (i_return_id != NULL));
|
||||
JUT_ASSERT(VERSION_SELECT(1698, 1702, 1713, 1714), (i_tevStr != NULL) && (i_return_id != NULL));
|
||||
*i_return_id = checkAtrCodeEffect(code);
|
||||
if (*i_return_id == -1)
|
||||
return NULL;
|
||||
@@ -928,12 +941,12 @@ dPa_simpleEcallBack* dPa_control_c::getSimple(u16 id) {
|
||||
}
|
||||
|
||||
/* 8007DC6C-8007DC94 .text setup__19dPa_rippleEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_rippleEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
param_1->setParticleCallBackPtr(dPa_control_c::getRipplePcallBack());
|
||||
mPos = param_2;
|
||||
void dPa_rippleEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
emitter->setParticleCallBackPtr(dPa_control_c::getRipplePcallBack());
|
||||
mPos = pos;
|
||||
mRate = 1.0f;
|
||||
mFlags |= 1;
|
||||
mpBaseEmitter = param_1;
|
||||
mpBaseEmitter = emitter;
|
||||
}
|
||||
|
||||
/* 8007DC94-8007DCE4 .text end__19dPa_rippleEcallBackFv */
|
||||
@@ -960,33 +973,33 @@ void dPa_rippleEcallBack::execute(JPABaseEmitter* emtr) {
|
||||
}
|
||||
|
||||
/* 8007DD70-8007DDA8 .text draw__19dPa_rippleEcallBackFP14JPABaseEmitter */
|
||||
void dPa_rippleEcallBack::draw(JPABaseEmitter*) {
|
||||
void dPa_rippleEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
if (dPa_control_c::isStatus(1)) {
|
||||
GXSetZMode(GX_FALSE, GX_NEVER, GX_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007DDA8-8007DDB4 .text setup__25dPa_singleRippleEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_singleRippleEcallBack::setup(JPABaseEmitter* param_1, const cXyz*, const csXyz*, s8) {
|
||||
param_1->setParticleCallBackPtr(dPa_control_c::getRipplePcallBack());
|
||||
void dPa_singleRippleEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8) {
|
||||
emitter->setParticleCallBackPtr(dPa_control_c::getRipplePcallBack());
|
||||
}
|
||||
|
||||
/* 8007DDB4-8007DE00 .text execute__25dPa_singleRippleEcallBackFP14JPABaseEmitter */
|
||||
void dPa_singleRippleEcallBack::execute(JPABaseEmitter* param_1) {
|
||||
void dPa_singleRippleEcallBack::execute(JPABaseEmitter* emitter) {
|
||||
GXColor c1, c2;
|
||||
dKy_get_seacolor(&c1, &c2);
|
||||
param_1->setGlobalPrmColor(c1.r, c1.g, c1.b);
|
||||
emitter->setGlobalPrmColor(c1.r, c1.g, c1.b);
|
||||
}
|
||||
|
||||
/* 8007DE00-8007DE38 .text draw__25dPa_singleRippleEcallBackFP14JPABaseEmitter */
|
||||
void dPa_singleRippleEcallBack::draw(JPABaseEmitter*) {
|
||||
void dPa_singleRippleEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
if (dPa_control_c::isStatus(1)) {
|
||||
GXSetZMode(GX_FALSE, GX_NEVER, GX_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007DE38-8007DE94 .text execute__19dPa_ripplePcallBackFP14JPABaseEmitterP15JPABaseParticle */
|
||||
void dPa_ripplePcallBack::execute(JPABaseEmitter* param_1, JPABaseParticle* ptcl) {
|
||||
void dPa_ripplePcallBack::execute(JPABaseEmitter* emitter, JPABaseParticle* ptcl) {
|
||||
/* Nonmatching - regalloc */
|
||||
JGeometry::TVec3<f32> local_18;
|
||||
ptcl->getGlobalPosition(local_18);
|
||||
@@ -998,17 +1011,17 @@ void dPa_ripplePcallBack::execute(JPABaseEmitter* param_1, JPABaseParticle* ptcl
|
||||
}
|
||||
|
||||
/* 8007DE94-8007E254 .text draw__19dPa_ripplePcallBackFP14JPABaseEmitterP15JPABaseParticle */
|
||||
void dPa_ripplePcallBack::draw(JPABaseEmitter*, JPABaseParticle*) {
|
||||
void dPa_ripplePcallBack::draw(JPABaseEmitter* emitter, JPABaseParticle* particle) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8007E254-8007E288 .text setup__17dPa_waveEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_waveEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
mpPos = param_2;
|
||||
mpRot = param_3;
|
||||
void dPa_waveEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
mpPos = pos;
|
||||
mpRot = rot;
|
||||
mVel = 0.0f;
|
||||
mVelFade2 = 1.0f;
|
||||
mpBaseEmitter = param_1;
|
||||
mpBaseEmitter = emitter;
|
||||
mMaxParticleVelocity = 10000.0f;
|
||||
mState = 0;
|
||||
mFadeTimer = 0;
|
||||
@@ -1065,15 +1078,15 @@ void dPa_waveEcallBack::executeAfter(JPABaseEmitter* emitter) {
|
||||
}
|
||||
|
||||
/* 8007E484-8007E804 .text draw__17dPa_waveEcallBackFP14JPABaseEmitter */
|
||||
void dPa_waveEcallBack::draw(JPABaseEmitter*) {
|
||||
void dPa_waveEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8007E804-8007E81C .text setup__19dPa_splashEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_splashEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
mpPos = param_2;
|
||||
mpRot = param_3;
|
||||
mpBaseEmitter = param_1;
|
||||
void dPa_splashEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
mpPos = pos;
|
||||
mpRot = rot;
|
||||
mpBaseEmitter = emitter;
|
||||
mState = 0;
|
||||
}
|
||||
|
||||
@@ -1088,21 +1101,69 @@ void dPa_splashEcallBack::remove() {
|
||||
}
|
||||
|
||||
/* 8007E850-8007E9B8 .text execute__19dPa_splashEcallBackFP14JPABaseEmitter */
|
||||
void dPa_splashEcallBack::execute(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void dPa_splashEcallBack::execute(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching - setGlobalTranslation */
|
||||
GXColor local_24;
|
||||
GXColor local_28;
|
||||
dKy_get_seacolor(&local_24, &local_28);
|
||||
emitter->setGlobalPrmColor(local_24.r, local_24.g, local_24.b);
|
||||
if (mState) {
|
||||
JGeometry::TVec3<f32> local_20;
|
||||
emitter->getGlobalParticleScale(local_20);
|
||||
if (cLib_chaseF(&local_20.x, 0.0, 0.2)) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
local_20.z = local_20.y = local_20.x;
|
||||
emitter->setGlobalDynamicsScale(local_20);
|
||||
emitter->setGlobalParticleScale(local_20);
|
||||
emitter->setDirectionalSpeed(local_20.x * 15.0f);
|
||||
} else {
|
||||
emitter->setGlobalTranslation(*mpPos);
|
||||
f32 scaleF = mScaleTimer / mMaxScaleTimer;
|
||||
s16 yaw = mpRot->y;
|
||||
if (scaleF > 1.0f) {
|
||||
scaleF = 1.0f;
|
||||
}
|
||||
JGeometry::TVec3<f32> scale(scaleF, scaleF, scaleF);
|
||||
emitter->setGlobalDynamicsScale(scale);
|
||||
emitter->setGlobalParticleScale(scale);
|
||||
emitter->setDirectionalSpeed(scaleF * 15.0f);
|
||||
JGeometry::TVec3<s16> rot(s16(0), yaw, s16(0));
|
||||
emitter->setGlobalRotation(rot);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007E9B8-8007E9D4 .text setup__22dPa_cutTurnEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_cutTurnEcallBack_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
mpBaseEmitter = param_1;
|
||||
void dPa_cutTurnEcallBack_c::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
mpBaseEmitter = emitter;
|
||||
field_0x6 = 0;
|
||||
field_0x5 = 0;
|
||||
mAlpha = 0xFF;
|
||||
}
|
||||
|
||||
/* 8007E9D4-8007EAC4 .text executeAfter__22dPa_cutTurnEcallBack_cFP14JPABaseEmitter */
|
||||
void dPa_cutTurnEcallBack_c::executeAfter(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void dPa_cutTurnEcallBack_c::executeAfter(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching - setGlobalTranslation */
|
||||
if (field_0x5) {
|
||||
emitter->becomeInvalidEmitter();
|
||||
emitter->setEmitterCallBackPtr(NULL);
|
||||
mpBaseEmitter = NULL;
|
||||
return;
|
||||
}
|
||||
if (field_0x6 > 0 && mPosArray) {
|
||||
cXyz* pos = &mPosArray[field_0x6] - 1;
|
||||
int i = field_0x6 - 1;
|
||||
for (; i >= 1; i--, pos--) {
|
||||
JPABaseParticle* particle = emitter->createParticle();
|
||||
if (particle) {
|
||||
particle->setOffsetPosition(*pos);
|
||||
}
|
||||
}
|
||||
emitter->setGlobalTranslation(*pos);
|
||||
emitter->setGlobalAlpha(mAlpha);
|
||||
field_0x6 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007EAC4-8007EB00 .text end__22dPa_cutTurnEcallBack_cFv */
|
||||
@@ -1117,31 +1178,53 @@ void dPa_cutTurnEcallBack_c::end() {
|
||||
}
|
||||
|
||||
/* 8007EB00-8007F028 .text draw__20dPa_stripesEcallBackFP14JPABaseEmitter */
|
||||
void dPa_stripesEcallBack::draw(JPABaseEmitter*) {
|
||||
void dPa_stripesEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8007F028-8007F05C .text draw__19dPa_kageroEcallBackFP14JPABaseEmitter */
|
||||
void dPa_kageroEcallBack::draw(JPABaseEmitter*) {
|
||||
void dPa_kageroEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
|
||||
}
|
||||
|
||||
/* 8007F05C-8007F108 .text execute__22dPa_bombSmokeEcallBackFP14JPABaseEmitter */
|
||||
void dPa_bombSmokeEcallBack::execute(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void dPa_bombSmokeEcallBack::execute(JPABaseEmitter* emitter) {
|
||||
u32 local_14 = emitter->getUserWork() >> 16;
|
||||
s16 r31 = emitter->getUserWork() & 0xFF;
|
||||
s16 r30 = (emitter->getUserWork() >> 8) & 0xFF;
|
||||
if (cLib_calcTimer(&local_14) == 0) {
|
||||
s16 local_18 = emitter->getGlobalAlpha();
|
||||
if (cLib_chaseS(&local_18, r31, r30)) {
|
||||
emitter->setEmitterCallBackPtr(NULL);
|
||||
}
|
||||
emitter->setGlobalAlpha(local_18);
|
||||
}
|
||||
emitter->setUserWork(local_14 << 16 | r30 << 8 | r31);
|
||||
}
|
||||
|
||||
/* 8007F108-8007F1A8 .text getMaxWaterY__18dPa_trackEcallBackFPQ29JGeometry8TVec3<f> */
|
||||
void dPa_trackEcallBack::getMaxWaterY(JGeometry::TVec3<f32>*) {
|
||||
/* Nonmatching */
|
||||
void dPa_trackEcallBack::getMaxWaterY(JGeometry::TVec3<f32>* pos) {
|
||||
if (daSea_ChkArea(pos->x, pos->z)) {
|
||||
pos->y = daSea_calcWave(pos->x, pos->z);
|
||||
if (mMinY > pos->y) {
|
||||
pos->y = mMinY;
|
||||
}
|
||||
} else {
|
||||
if (mMinY != - G_CM3D_F_INF) {
|
||||
pos->y = mMinY;
|
||||
} else {
|
||||
pos->y = mBaseY;
|
||||
}
|
||||
}
|
||||
pos->y += 2.0f;
|
||||
}
|
||||
|
||||
/* 8007F1A8-8007F1C0 .text setup__18dPa_trackEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
void dPa_trackEcallBack::setup(JPABaseEmitter* param_1, const cXyz* param_2, const csXyz* param_3, s8 param_4) {
|
||||
mpPos = param_2;
|
||||
void dPa_trackEcallBack::setup(JPABaseEmitter* emitter, const cXyz* pos, const csXyz* rot, s8 param_4) {
|
||||
mpPos = pos;
|
||||
mState = 0;
|
||||
mpRot = param_3;
|
||||
mpBaseEmitter = param_1;
|
||||
mpRot = rot;
|
||||
mpBaseEmitter = emitter;
|
||||
}
|
||||
|
||||
/* 8007F1C0-8007F1F4 .text remove__18dPa_trackEcallBackFv */
|
||||
@@ -1155,13 +1238,94 @@ void dPa_trackEcallBack::remove() {
|
||||
}
|
||||
|
||||
/* 8007F1F4-8007F3BC .text execute__18dPa_trackEcallBackFP14JPABaseEmitter */
|
||||
void dPa_trackEcallBack::execute(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void dPa_trackEcallBack::execute(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching - regalloc, setGlobalTranslation */
|
||||
GXColor local_30;
|
||||
GXColor local_34;
|
||||
dKy_get_seacolor(&local_30, &local_34);
|
||||
emitter->setGlobalPrmColor(local_30.r, local_30.g, local_30.b);
|
||||
if (mState) {
|
||||
JGeometry::TVec3<f32> local_20;
|
||||
emitter->getGlobalTranslation(local_20);
|
||||
getMaxWaterY(&local_20);
|
||||
s16 local_36 = emitter->getGlobalAlpha();
|
||||
cLib_chaseS(&local_36, 0, 10);
|
||||
emitter->setGlobalAlpha(local_36);
|
||||
if (local_36 == 0) {
|
||||
remove();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
emitter->setGlobalTranslation(*mpPos);
|
||||
JGeometry::TVec3<s16> rot(0, mVel >= 0.0f ? mpRot->y : mpRot->y + 0x8000, 0);
|
||||
emitter->setGlobalRotation(rot);
|
||||
s16 local_38 = emitter->getGlobalAlpha();
|
||||
if (std::fabsf(mVel) > mMinVel) {
|
||||
cLib_chaseS(&local_38, 255, 5);
|
||||
} else {
|
||||
cLib_chaseS(&local_38, 0, 5);
|
||||
}
|
||||
emitter->setGlobalAlpha(local_38);
|
||||
}
|
||||
for (JSULink<JPABaseParticle>* link = emitter->mActiveParticles.getFirst(); link;) {
|
||||
JSULink<JPABaseParticle>* next = link->getNext();
|
||||
JPABaseParticle* particle = link->getObject();
|
||||
JGeometry::TVec3<f32> local_2c;
|
||||
particle->getOffsetPosition(local_2c);
|
||||
getMaxWaterY(&local_2c);
|
||||
particle->setOffsetPosition(local_2c);
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007F3BC-8007F62C .text draw__18dPa_trackEcallBackFP14JPABaseEmitter */
|
||||
void dPa_trackEcallBack::draw(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void dPa_trackEcallBack::draw(JPABaseEmitter* emitter) {
|
||||
/* Nonmatching - regalloc, instruction order */
|
||||
u32 r28 = emitter->mActiveParticles.getNumLinks();
|
||||
if (r28 < 6) {
|
||||
return;
|
||||
}
|
||||
if (dPa_control_c::isStatus(1)) {
|
||||
GXSetZMode(GX_DISABLE, GX_NEVER, GX_DISABLE);
|
||||
}
|
||||
r28 = r28 * (1.0f / 3.0f);
|
||||
f32 f30 = 1.0f / (r28 - 1);
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
Mtx local_bc;
|
||||
MTXIdentity(local_bc);
|
||||
local_bc[1][1] = mExScaleY;
|
||||
local_bc[1][3] = mExTransY * emitter->getFrame();
|
||||
GXLoadTexMtxImm(local_bc, GX_TEXMTX1, GX_MTX2x4);
|
||||
GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX1);
|
||||
JSULink<JPABaseParticle>* link = emitter->mActiveParticles.getFirst();
|
||||
f32 f31 = 0.0f;
|
||||
for (u32 i = 0; i < r28; i++) {
|
||||
if (i) {
|
||||
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 6);
|
||||
f32 f27 = 0.0f;
|
||||
for (u32 j = 0; j < 3; j++) {
|
||||
JPABaseParticle* particle = link->getObject();
|
||||
JGeometry::TVec3<f32> local_c8;
|
||||
particle->getGlobalPosition(local_c8);
|
||||
getMaxWaterY(&local_c8);
|
||||
GXPosition3f32(local_c8.x, local_c8.y, local_c8.z);
|
||||
GXTexCoord2f32(f27, f31);
|
||||
GXPosition3f32(mPos[j].x, mPos[j].y, mPos[j].z);
|
||||
GXTexCoord2f32(f27, f31 - f30);
|
||||
mPos[j].set(local_c8);
|
||||
f27 += 0.5f;
|
||||
link = link->getNext();
|
||||
}
|
||||
GXEnd();
|
||||
} else {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
JPABaseParticle* particle = link->getObject();
|
||||
particle->getGlobalPosition(mPos[j]);
|
||||
link = link->getNext();
|
||||
}
|
||||
}
|
||||
f31 += f30;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007F704-8007F708 .text setup__22dPa_bombSmokeEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */
|
||||
|
||||
Reference in New Issue
Block a user