mirror of
https://github.com/zeldaret/tp
synced 2026-06-18 07:25:50 -04:00
JParticle mostly done (#2235)
This commit is contained in:
@@ -4,443 +4,299 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAFieldBlock.h"
|
||||
#include "dol2asm.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JPAEmitterWorkData {};
|
||||
|
||||
struct JKRHeap {};
|
||||
|
||||
struct JPAFieldBlock {
|
||||
/* 8027D088 */ JPAFieldBlock(u8 const*, JKRHeap*);
|
||||
/* 8027D0C0 */ void init(JKRHeap*);
|
||||
};
|
||||
|
||||
struct JPABaseParticle {};
|
||||
|
||||
struct JPAFieldVortex {
|
||||
/* 8027C56C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027C674 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D564 */ ~JPAFieldVortex();
|
||||
};
|
||||
|
||||
struct JPAFieldSpin {
|
||||
/* 8027CE64 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027CFA8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D3F4 */ ~JPAFieldSpin();
|
||||
};
|
||||
|
||||
struct JPAFieldRandom {
|
||||
/* 8027CCCC */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D4AC */ ~JPAFieldRandom();
|
||||
};
|
||||
|
||||
struct JPAFieldNewton {
|
||||
/* 8027C36C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027C3E0 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D5C0 */ ~JPAFieldNewton();
|
||||
};
|
||||
|
||||
struct JPAFieldMagnet {
|
||||
/* 8027C24C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027C29C */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D61C */ ~JPAFieldMagnet();
|
||||
};
|
||||
|
||||
struct JPAFieldGravity {
|
||||
/* 8027BFB4 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027C054 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D6D4 */ ~JPAFieldGravity();
|
||||
};
|
||||
|
||||
struct JPAFieldDrag {
|
||||
/* 8027CDE4 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D450 */ ~JPAFieldDrag();
|
||||
};
|
||||
|
||||
struct JPAFieldConvection {
|
||||
/* 8027C814 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027CA94 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D508 */ ~JPAFieldConvection();
|
||||
};
|
||||
|
||||
struct JPAFieldBase {
|
||||
/* 80276A8C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027BDEC */ void calcAffect(JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027BF18 */ void calcFadeAffect(JPAFieldBlock*, f32) const;
|
||||
/* 8027D3AC */ ~JPAFieldBase();
|
||||
};
|
||||
|
||||
struct JPAFieldAir {
|
||||
/* 8027C07C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
|
||||
/* 8027C1B8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
|
||||
/* 8027D678 */ ~JPAFieldAir();
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void calcFadeAffect__12JPAFieldBaseCFP13JPAFieldBlockf();
|
||||
extern "C" void prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void
|
||||
calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void calc__12JPAFieldDragFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle();
|
||||
extern "C" void __ct__13JPAFieldBlockFPCUcP7JKRHeap();
|
||||
extern "C" void init__13JPAFieldBlockFP7JKRHeap();
|
||||
extern "C" void __dt__12JPAFieldBaseFv();
|
||||
extern "C" void __dt__12JPAFieldSpinFv();
|
||||
extern "C" void __dt__12JPAFieldDragFv();
|
||||
extern "C" void __dt__14JPAFieldRandomFv();
|
||||
extern "C" void __dt__18JPAFieldConvectionFv();
|
||||
extern "C" void __dt__14JPAFieldVortexFv();
|
||||
extern "C" void __dt__14JPAFieldNewtonFv();
|
||||
extern "C" void __dt__14JPAFieldMagnetFv();
|
||||
extern "C" void __dt__11JPAFieldAirFv();
|
||||
extern "C" void __dt__15JPAFieldGravityFv();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void __dl__FPv();
|
||||
extern "C" void PSMTXRotAxisRad();
|
||||
extern "C" void PSMTXMultVecSR();
|
||||
extern "C" void PSVECMag();
|
||||
extern "C" void PSVECCrossProduct();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern u32 __float_epsilon;
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
|
||||
/* 8027BDEC-8027BF18 27672C 012C+00 8/8 0/0 0/0 .text
|
||||
* calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldBase::calcAffect(JPAFieldBlock* param_0, JPABaseParticle* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
JGeometry::TVec3<f32> vec = mAccel;
|
||||
if (!ptcl->checkStatus(4) && block->checkStatus(0x78)) {
|
||||
vec.scale(calcFadeAffect(block, ptcl->mTime));
|
||||
}
|
||||
|
||||
switch (block->getAddType()) {
|
||||
case 0:
|
||||
ptcl->mVelType0.add(vec);
|
||||
break;
|
||||
case 1:
|
||||
ptcl->mVelType1.add(vec);
|
||||
break;
|
||||
case 2:
|
||||
ptcl->mVelType2.add(vec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80455338-8045533C 003938 0004+00 6/6 0/0 0/0 .sdata2 @2353 */
|
||||
SECTION_SDATA2 static f32 lit_2353 = 1.0f;
|
||||
|
||||
/* 8045533C-80455340 00393C 0004+00 11/11 0/0 0/0 .sdata2 @2354 */
|
||||
SECTION_SDATA2 static u8 lit_2354[4] = {
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
};
|
||||
|
||||
/* 8027BF18-8027BFB4 276858 009C+00 2/2 0/0 0/0 .text
|
||||
* calcFadeAffect__12JPAFieldBaseCFP13JPAFieldBlockf */
|
||||
void JPAFieldBase::calcFadeAffect(JPAFieldBlock* param_0, f32 param_1) const {
|
||||
// NONMATCHING
|
||||
f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
|
||||
f32 fade = 1.0f;
|
||||
if ((block->checkStatus(8) && time < block->getEnTime())
|
||||
|| (block->checkStatus(0x10) && time >= block->getDisTime()))
|
||||
{
|
||||
fade = 0.0f;
|
||||
} else if (block->checkStatus(0x40) && time >= block->getFadeOutTime()) {
|
||||
fade = (block->getDisTime() - time) * block->getFadeOutRate();
|
||||
} else if (block->checkStatus(0x20) && time < block->getFadeInTime()) {
|
||||
fade = (time - block->getEnTime()) * block->getFadeInRate();
|
||||
}
|
||||
return fade;
|
||||
}
|
||||
|
||||
/* 8027BFB4-8027C054 2768F4 00A0+00 1/0 0/0 0/0 .text
|
||||
* prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldGravity::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
if (block->checkStatus(2)) {
|
||||
mAccel.scale(block->getMag(), block->getDir());
|
||||
} else {
|
||||
MTXMultVecSR(work->mRotationMtx, &block->getDir(), &mAccel);
|
||||
mAccel.scale(block->getMag());
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027C054-8027C07C 276994 0028+00 1/0 0/0 0/0 .text
|
||||
* calc__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldGravity::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldGravity::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80455340-80455344 003940 0004+00 8/8 0/0 0/0 .sdata2 @2459 */
|
||||
SECTION_SDATA2 static f32 lit_2459 = 32.0f;
|
||||
|
||||
/* 80455344-80455348 003944 0004+00 9/9 0/0 0/0 .sdata2 @2460 */
|
||||
SECTION_SDATA2 static f32 lit_2460 = 0.5f;
|
||||
|
||||
/* 80455348-8045534C 003948 0004+00 8/8 0/0 0/0 .sdata2 @2461 */
|
||||
SECTION_SDATA2 static f32 lit_2461 = 3.0f;
|
||||
|
||||
/* 8027C07C-8027C1B8 2769BC 013C+00 1/0 0/0 0/0 .text
|
||||
* prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldAir::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
JGeometry::TVec3<f32> vec;
|
||||
vec.normalize(block->getDir());
|
||||
if (block->checkStatus(2)) {
|
||||
mAccel.scale(block->getMag(), vec);
|
||||
} else {
|
||||
MTXMultVecSR(work->mRotationMtx, vec, mAccel);
|
||||
mAccel.scale(block->getMag());
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027C1B8-8027C24C 276AF8 0094+00 1/0 0/0 0/0 .text
|
||||
* calc__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldAir::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
calcAffect(block, ptcl);
|
||||
if (block->checkStatus(4)) {
|
||||
f32 len = ptcl->mVelType1.length();
|
||||
if (len > block->getMagRndm()) {
|
||||
ptcl->mVelType1.scale(block->getMagRndm() / len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027C24C-8027C29C 276B8C 0050+00 1/0 0/0 0/0 .text
|
||||
* prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldMagnet::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldMagnet::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
mDir.sub(block->getPos(), work->mEmitterPos);
|
||||
MTXMultVecSR(work->mRotationMtx, &mDir, &mDir);
|
||||
}
|
||||
|
||||
/* 8027C29C-8027C36C 276BDC 00D0+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldMagnet::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldMagnet::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
mAccel.sub(mDir, ptcl->mLocalPosition);
|
||||
mAccel.setLength(block->getMag());
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* 8027C36C-8027C3E0 276CAC 0074+00 1/0 0/0 0/0 .text
|
||||
* prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldNewton::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldNewton::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
mDir.sub(block->getPos(), work->mEmitterPos);
|
||||
MTXMultVecSR(work->mRotationMtx, &mDir, &mDir);
|
||||
mCutoff = block->getVal1() * block->getVal1();
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8045534C-80455350 00394C 0004+00 1/1 0/0 0/0 .sdata2 @2656 */
|
||||
SECTION_SDATA2 static f32 lit_2656 = 10.0f;
|
||||
|
||||
/* 8027C3E0-8027C56C 276D20 018C+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldNewton::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
mAccel.sub(mDir, ptcl->mLocalPosition);
|
||||
f32 len_sq = mAccel.squared();
|
||||
if (len_sq > mCutoff) {
|
||||
mAccel.setLength(mCutoff * (block->getMag() * 10.0f) / len_sq);
|
||||
} else {
|
||||
mAccel.setLength(block->getMag() * 10.0f);
|
||||
}
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* 8027C56C-8027C674 276EAC 0108+00 1/0 0/0 0/0 .text
|
||||
* prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldVortex::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
MTXMultVecSR(work->mGlobalRot, &block->getDir(), &field_0x10);
|
||||
field_0x10.normalize();
|
||||
field_0x1c = block->getPos().z * block->getPos().z;
|
||||
field_0x20 = 1.0f / field_0x1c;
|
||||
}
|
||||
|
||||
/* 8027C674-8027C814 276FB4 01A0+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldVortex::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
// NONMATCHING regalloc. may need to rewrite dot in a way that doesn't break Z2Audience::calcPitchDoppler_
|
||||
void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
JGeometry::TVec3<f32> vec;
|
||||
vec.scale(field_0x10.dot(ptcl->mLocalPosition), field_0x10);
|
||||
vec.sub(ptcl->mLocalPosition, vec);
|
||||
f32 mag = vec.squared();
|
||||
if (mag > field_0x1c) {
|
||||
mag = block->getMagRndm();
|
||||
} else {
|
||||
mag *= field_0x20;
|
||||
mag = (1.0f - mag) * block->getMag() + mag * block->getMagRndm();
|
||||
}
|
||||
vec.normalize();
|
||||
mAccel.cross(vec, field_0x10);
|
||||
mAccel.scale(mag);
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* 8027C814-8027CA94 277154 0280+00 1/0 0/0 0/0 .text
|
||||
* prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldConvection::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
JGeometry::TVec3<f32> vec1, vec2;
|
||||
vec2.cross(block->getPos(), block->getDir());
|
||||
vec1.cross(block->getDir(), vec2);
|
||||
MTXMultVecSR(work->mGlobalRot, &vec1, &field_0x10);
|
||||
MTXMultVecSR(work->mGlobalRot, &block->getDir(), field_0x1c);
|
||||
MTXMultVecSR(work->mGlobalRot, &vec2, &field_0x28);
|
||||
field_0x10.normalize();
|
||||
field_0x1c.normalize();
|
||||
field_0x28.normalize();
|
||||
}
|
||||
|
||||
/* 8027CA94-8027CCCC 2773D4 0238+00 1/0 0/0 0/0 .text
|
||||
* calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldConvection::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
// NONMATCHING regalloc problems with TVec3 inlines
|
||||
void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
|
||||
JPABaseParticle* ptcl) {
|
||||
JGeometry::TVec3<f32> vec1, vec2, vec3;
|
||||
vec1.scale(field_0x10.dot(ptcl->mLocalPosition), field_0x10);
|
||||
vec3.scale(field_0x28.dot(ptcl->mLocalPosition), field_0x28);
|
||||
vec1.add(vec3);
|
||||
vec1.setLength(vec1, block->getVal1());
|
||||
vec2.sub(ptcl->mLocalPosition, vec1);
|
||||
vec3.cross(field_0x1c, vec1);
|
||||
mAccel.cross(vec3, vec2);
|
||||
mAccel.setLength(block->getMag());
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* 8027CCCC-8027CDE4 27760C 0118+00 1/0 0/0 0/0 .text
|
||||
* calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldRandom::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
// NONMATCHING missing clrlwi
|
||||
void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
if (ptcl->mAge == 0 || (block->getCycle() != 0 && ptcl->mAge % block->getCycle() == 0)) {
|
||||
JPABaseEmitter* emtr = work->mpEmtr;
|
||||
mAccel.set(emtr->get_r_zh(), emtr->get_r_zh(), emtr->get_r_zh());
|
||||
mAccel.scale(block->getMag());
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027CDE4-8027CE64 277724 0080+00 1/0 0/0 0/0 .text
|
||||
* calc__12JPAFieldDragFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldDrag::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
if (!ptcl->checkStatus(4)) {
|
||||
f32 fade = calcFadeAffect(block, ptcl->mTime);
|
||||
ptcl->mDrag *= 1.0f - fade * (1.0f - block->getMag());
|
||||
} else {
|
||||
ptcl->mDrag *= block->getMag();
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027CE64-8027CFA8 2777A4 0144+00 1/0 0/0 0/0 .text
|
||||
* prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock */
|
||||
void JPAFieldSpin::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
|
||||
// NONMATCHING
|
||||
void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
|
||||
JGeometry::TVec3<f32> axis;
|
||||
MTXMultVecSR(work->mGlobalRot, &block->getDir(), &axis);
|
||||
axis.normalize();
|
||||
Mtx mtx;
|
||||
MTXRotAxisRad(mtx, &axis, block->getMag());
|
||||
field_0x10.set(mtx[0][0], mtx[1][0], mtx[2][0]);
|
||||
field_0x1c.set(mtx[0][1], mtx[1][1], mtx[2][1]);
|
||||
field_0x28.set(mtx[0][2], mtx[1][2], mtx[2][2]);
|
||||
}
|
||||
|
||||
/* 8027CFA8-8027D088 2778E8 00E0+00 1/0 0/0 0/0 .text
|
||||
* calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
|
||||
void JPAFieldSpin::calc(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1,
|
||||
JPABaseParticle* param_2) {
|
||||
// NONMATCHING
|
||||
void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
|
||||
Mtx mtx;
|
||||
mtx[0][0] = field_0x10.x;
|
||||
mtx[1][0] = field_0x10.y;
|
||||
mtx[2][0] = field_0x10.z;
|
||||
mtx[0][1] = field_0x1c.x;
|
||||
mtx[1][1] = field_0x1c.y;
|
||||
mtx[2][1] = field_0x1c.z;
|
||||
mtx[0][2] = field_0x28.x;
|
||||
mtx[1][2] = field_0x28.y;
|
||||
mtx[2][2] = field_0x28.z;
|
||||
mtx[0][3] = mtx[1][3] = mtx[2][3] = 0.0f;
|
||||
Vec vec;
|
||||
MTXMultVecSR(mtx, &ptcl->mLocalPosition, &vec);
|
||||
mAccel.set(vec.x - ptcl->mLocalPosition.x, vec.y - ptcl->mLocalPosition.y,
|
||||
vec.z - ptcl->mLocalPosition.z);
|
||||
calcAffect(block, ptcl);
|
||||
}
|
||||
|
||||
/* 8027D088-8027D0C0 2779C8 0038+00 0/0 1/1 0/0 .text __ct__13JPAFieldBlockFPCUcP7JKRHeap
|
||||
*/
|
||||
JPAFieldBlock::JPAFieldBlock(u8 const* param_0, JKRHeap* param_1) {
|
||||
// NONMATCHING
|
||||
JPAFieldBlock::JPAFieldBlock(u8 const* data, JKRHeap* heap)
|
||||
: mpData((const JPAFieldBlockData*)data) {
|
||||
init(heap);
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803C44A8-803C44CC -00001 0024+00 1/1 0/0 0/0 .data @3259 */
|
||||
SECTION_DATA static void* lit_3259[9] = {
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0xFC),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x130),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x164),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x198),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x1CC),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x200),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x234),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x268),
|
||||
(void*)(((char*)init__13JPAFieldBlockFP7JKRHeap) + 0x29C),
|
||||
};
|
||||
|
||||
/* 803C44CC-803C44E0 0215EC 0014+00 11/11 0/0 0/0 .data __vt__12JPAFieldBase */
|
||||
SECTION_DATA extern void* __vt__12JPAFieldBase[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JPAFieldBaseFv,
|
||||
(void*)prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)NULL,
|
||||
};
|
||||
|
||||
/* 803C44E0-803C44F4 021600 0014+00 2/2 0/0 0/0 .data __vt__12JPAFieldSpin */
|
||||
SECTION_DATA extern void* __vt__12JPAFieldSpin[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JPAFieldSpinFv,
|
||||
(void*)prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C44F4-803C4508 021614 0014+00 2/2 0/0 0/0 .data __vt__12JPAFieldDrag */
|
||||
SECTION_DATA extern void* __vt__12JPAFieldDrag[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__12JPAFieldDragFv,
|
||||
(void*)prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__12JPAFieldDragFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C4508-803C451C 021628 0014+00 2/2 0/0 0/0 .data __vt__14JPAFieldRandom */
|
||||
SECTION_DATA extern void* __vt__14JPAFieldRandom[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__14JPAFieldRandomFv,
|
||||
(void*)prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C451C-803C4530 02163C 0014+00 2/2 0/0 0/0 .data __vt__18JPAFieldConvection */
|
||||
SECTION_DATA extern void* __vt__18JPAFieldConvection[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__18JPAFieldConvectionFv,
|
||||
(void*)prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C4530-803C4544 021650 0014+00 2/2 0/0 0/0 .data __vt__14JPAFieldVortex */
|
||||
SECTION_DATA extern void* __vt__14JPAFieldVortex[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__14JPAFieldVortexFv,
|
||||
(void*)prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C4544-803C4558 021664 0014+00 2/2 0/0 0/0 .data __vt__14JPAFieldNewton */
|
||||
SECTION_DATA extern void* __vt__14JPAFieldNewton[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__14JPAFieldNewtonFv,
|
||||
(void*)prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C4558-803C456C 021678 0014+00 2/2 0/0 0/0 .data __vt__14JPAFieldMagnet */
|
||||
SECTION_DATA extern void* __vt__14JPAFieldMagnet[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__14JPAFieldMagnetFv,
|
||||
(void*)prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C456C-803C4580 02168C 0014+00 2/2 0/0 0/0 .data __vt__11JPAFieldAir */
|
||||
SECTION_DATA extern void* __vt__11JPAFieldAir[5] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__11JPAFieldAirFv,
|
||||
(void*)prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
};
|
||||
|
||||
/* 803C4580-803C4598 0216A0 0014+04 2/2 0/0 0/0 .data __vt__15JPAFieldGravity */
|
||||
SECTION_DATA extern void* __vt__15JPAFieldGravity[5 + 1 /* padding */] = {
|
||||
(void*)NULL /* RTTI */,
|
||||
(void*)NULL,
|
||||
(void*)__dt__15JPAFieldGravityFv,
|
||||
(void*)prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock,
|
||||
(void*)calc__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle,
|
||||
/* padding */
|
||||
NULL,
|
||||
};
|
||||
|
||||
/* 8027D0C0-8027D3AC 277A00 02EC+00 2/1 0/0 0/0 .text init__13JPAFieldBlockFP7JKRHeap */
|
||||
void JPAFieldBlock::init(JKRHeap* param_0) {
|
||||
// NONMATCHING
|
||||
}
|
||||
void JPAFieldBlock::init(JKRHeap* heap) {
|
||||
mFadeInRate = getFadeInTime() - getEnTime();
|
||||
if (mFadeInRate == 0.0f) {
|
||||
mFadeInRate = 1.0f;
|
||||
} else {
|
||||
mFadeInRate = 1.0f / mFadeInRate;
|
||||
}
|
||||
|
||||
/* 8027D3AC-8027D3F4 277CEC 0048+00 1/0 0/0 0/0 .text __dt__12JPAFieldBaseFv */
|
||||
JPAFieldBase::~JPAFieldBase() {
|
||||
// NONMATCHING
|
||||
}
|
||||
mFadeOutRate = getDisTime() - getFadeOutTime();
|
||||
if (mFadeOutRate == 0.0f) {
|
||||
mFadeOutRate = 1.0f;
|
||||
} else {
|
||||
mFadeOutRate = 1.0f / mFadeOutRate;
|
||||
}
|
||||
|
||||
/* 8027D3F4-8027D450 277D34 005C+00 1/0 0/0 0/0 .text __dt__12JPAFieldSpinFv */
|
||||
JPAFieldSpin::~JPAFieldSpin() {
|
||||
// NONMATCHING
|
||||
}
|
||||
getPosOrig(&mPos);
|
||||
getDirOrig(&mDir);
|
||||
mMag = getMagOrig();
|
||||
|
||||
/* 8027D450-8027D4AC 277D90 005C+00 1/0 0/0 0/0 .text __dt__12JPAFieldDragFv */
|
||||
JPAFieldDrag::~JPAFieldDrag() {
|
||||
// NONMATCHING
|
||||
switch (getType()) {
|
||||
case FIELD_GRAVITY:
|
||||
mpField = new (heap, 0) JPAFieldGravity();
|
||||
break;
|
||||
case FIELD_AIR:
|
||||
mpField = new (heap, 0) JPAFieldAir();
|
||||
break;
|
||||
case FIELD_MAGNET:
|
||||
mpField = new (heap, 0) JPAFieldMagnet();
|
||||
break;
|
||||
case FIELD_NEWTON:
|
||||
mpField = new (heap, 0) JPAFieldNewton();
|
||||
break;
|
||||
case FIELD_VORTEX:
|
||||
mpField = new (heap, 0) JPAFieldVortex();
|
||||
break;
|
||||
case FIELD_RANDOM:
|
||||
mpField = new (heap, 0) JPAFieldRandom();
|
||||
break;
|
||||
case FIELD_DRAG:
|
||||
mpField = new (heap, 0) JPAFieldDrag();
|
||||
break;
|
||||
case FIELD_CONVECTION:
|
||||
mpField = new (heap, 0) JPAFieldConvection();
|
||||
break;
|
||||
case FIELD_SPIN:
|
||||
mpField = new (heap, 0) JPAFieldSpin();
|
||||
break;
|
||||
default:
|
||||
mpField = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8027D4AC-8027D508 277DEC 005C+00 1/0 0/0 0/0 .text __dt__14JPAFieldRandomFv */
|
||||
JPAFieldRandom::~JPAFieldRandom() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D508-8027D564 277E48 005C+00 1/0 0/0 0/0 .text __dt__18JPAFieldConvectionFv */
|
||||
JPAFieldConvection::~JPAFieldConvection() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D564-8027D5C0 277EA4 005C+00 1/0 0/0 0/0 .text __dt__14JPAFieldVortexFv */
|
||||
JPAFieldVortex::~JPAFieldVortex() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D5C0-8027D61C 277F00 005C+00 1/0 0/0 0/0 .text __dt__14JPAFieldNewtonFv */
|
||||
JPAFieldNewton::~JPAFieldNewton() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D61C-8027D678 277F5C 005C+00 1/0 0/0 0/0 .text __dt__14JPAFieldMagnetFv */
|
||||
JPAFieldMagnet::~JPAFieldMagnet() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D678-8027D6D4 277FB8 005C+00 1/0 0/0 0/0 .text __dt__11JPAFieldAirFv */
|
||||
JPAFieldAir::~JPAFieldAir() {
|
||||
// NONMATCHING
|
||||
}
|
||||
|
||||
/* 8027D6D4-8027D730 278014 005C+00 1/0 0/0 0/0 .text __dt__15JPAFieldGravityFv */
|
||||
JPAFieldGravity::~JPAFieldGravity() {
|
||||
// NONMATCHING
|
||||
}
|
||||
Reference in New Issue
Block a user