switch to dtk setup (#2203)

* switch to dtk setup

* some cleanup / fixes

* cleanup d_a_alink literals

* Restore doxygen, update CI & README.md (#1)

* Fix build image ref (#2)

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
TakaRikka
2024-10-10 07:29:58 -07:00
committed by GitHub
parent 3769ea47a6
commit 178194ccb2
33438 changed files with 370506 additions and 3055930 deletions
File diff suppressed because it is too large Load Diff
+61
View File
@@ -0,0 +1,61 @@
//
// Generated By: dol2asm
// Translation Unit: JPAChildShape
//
#include "JSystem/JParticle/JPAChildShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "dolphin/gx.h"
#include "dolphin/os.h"
//
// Types:
//
//
// Forward References:
//
//
// Declarations:
//
/* 8027AEBC-8027AFDC 2757FC 0120+00 0/0 1/1 0/0 .text JPARegistChildPrmEnv__FP18JPAEmitterWorkData
*/
void JPARegistChildPrmEnv(JPAEmitterWorkData* work) {
JPAChildShape* csp = work->mpRes->getCsp();
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm, env;
csp->getPrmClr(&prm);
csp->getEnvClr(&env);
prm.r = COLOR_MULTI(prm.r, emtr->mGlobalPrmClr.r);
prm.g = COLOR_MULTI(prm.g, emtr->mGlobalPrmClr.g);
prm.b = COLOR_MULTI(prm.b, emtr->mGlobalPrmClr.b);
prm.a = COLOR_MULTI(prm.a, emtr->mGlobalPrmClr.a);
env.r = COLOR_MULTI(env.r, emtr->mGlobalEnvClr.r);
env.g = COLOR_MULTI(env.g, emtr->mGlobalEnvClr.g);
env.b = COLOR_MULTI(env.b, emtr->mGlobalEnvClr.b);
GXSetTevColor(GX_TEVREG0, prm);
GXSetTevColor(GX_TEVREG1, env);
}
/* 8027AFDC-8027B008 27591C 002C+00 0/0 1/1 0/0 .text
* JPACalcChildAlphaOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildAlphaOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
f32 anm = (1.0f - ptcl->mTime) * 255.0f;
OSf32tou8(&anm, &ptcl->mPrmColorAlphaAnm);
}
/* 8027B008-8027B038 275948 0030+00 0/0 1/1 0/0 .text
* JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildScaleOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
// literal
ptcl->mParticleScaleX = ptcl->mScaleOut * (1.0f - ptcl->mTime);
ptcl->mParticleScaleY = ptcl->mAlphaWaveRandom * (1.0f - ptcl->mTime);
}
/* 8027B038-8027B040 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAChildShapeFPCUc */
JPAChildShape::JPAChildShape(u8 const* pData) {
mpData = (JPAChildShapeData*)pData;
}
+273
View File
@@ -0,0 +1,273 @@
//
// Generated By: dol2asm
// Translation Unit: JPADynamicsBlock
//
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "dol2asm.h"
//
// Types:
//
//
// Forward References:
//
extern "C" static void JPAVolumePoint(JPAEmitterWorkData*);
extern "C" static void JPAVolumeLine(JPAEmitterWorkData*);
extern "C" static void JPAVolumeCircle(JPAEmitterWorkData*);
extern "C" static void JPAVolumeCube(JPAEmitterWorkData*);
extern "C" static void JPAVolumeSphere(JPAEmitterWorkData*);
extern "C" static void JPAVolumeCylinder(JPAEmitterWorkData*);
extern "C" static void JPAVolumeTorus(JPAEmitterWorkData*);
extern "C" void __ct__16JPADynamicsBlockFPCUc();
extern "C" void init__16JPADynamicsBlockFv();
extern "C" void create__16JPADynamicsBlockFP18JPAEmitterWorkData();
//
// External References:
//
extern "C" void createParticle__14JPABaseEmitterFv();
extern "C" u8 sincosTable___5JMath[65536];
//
// Declarations:
//
/* ############################################################################################## */
/* 80455310-80455314 003910 0004+00 7/7 0/0 0/0 .sdata2 @2287 */
SECTION_SDATA2 static u8 lit_2287[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455314-80455318 003914 0004+00 7/7 0/0 0/0 .sdata2 @2288 */
SECTION_SDATA2 static f32 lit_2288 = 1.0f;
/* 80455318-80455320 003918 0004+04 3/3 0/0 0/0 .sdata2 @2289 */
SECTION_SDATA2 static f32 lit_2289[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */
void JPAVolumePoint(JPAEmitterWorkData* work) {
work->mVolumePos.zero();
work->mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
work->mpEmtr->get_r_zh());
work->mVelAxis.set(work->mVelOmni.x, 0.0f, work->mVelOmni.z);
}
/* ############################################################################################## */
/* 80455320-80455328 003920 0008+00 6/6 0/0 0/0 .sdata2 @2321 */
SECTION_SDATA2 static f64 lit_2321 = 4503601774854144.0 /* cast s32 to float */;
/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */
void JPAVolumeLine(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
work->mVolumePos.set(0.0f, 0.0f,
work->mVolumeSize *
((work->mVolumeEmitIdx / (work->mEmitCount - 1.0f) - 0.5f)));
work->mVolumeEmitIdx++;
} else {
work->mVolumePos.set(0.0f, 0.0f, work->mVolumeSize * work->mpEmtr->get_r_zh());
}
work->mVelOmni.set(0.0f, 0.0f, work->mVolumePos.z * work->mGlobalScl.z);
work->mVelAxis.set(0.0f, 0.0f, work->mVolumePos.z);
}
/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */
// regalloc. Could be issue with mul asm implementations
#ifdef NONMATCHING
void JPAVolumeCircle(JPAEmitterWorkData* work) {
s16 thetai;
f32 theta;
f32 distance;
f32 sizeXZ;
f32 temp;
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
theta = (s16)((work->mVolumeEmitIdx << 16) / work->mEmitCount);
thetai = theta * work->mVolumeSweep;
work->mVolumeEmitIdx++;
} else {
theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
thetai = theta;
}
distance = work->mpEmtr->get_r_f();
if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) {
distance = 1.0f - (distance * distance);
}
sizeXZ = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
work->mVolumePos.set(sizeXZ * JMASSin(thetai), 0.0f, sizeXZ * JMASCos(thetai));
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
}
#else
static void JPAVolumeCircle(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
#endif
/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */
void JPAVolumeCube(JPAEmitterWorkData* work) {
work->mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize);
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
}
/* ############################################################################################## */
/* 80455328-80455330 003928 0004+04 1/1 0/0 0/0 .sdata2 @2501 */
SECTION_SDATA2 static f32 lit_2501[1 + 1 /* padding */] = {
32768.0f,
/* padding */
0.0f,
};
/* 80455330-80455338 003930 0008+00 1/1 0/0 0/0 .sdata2 @2503 */
SECTION_SDATA2 static f64 lit_2503 = 4503599627370496.0 /* cast u32 to float */;
/* 8027B5F0-8027B87C 275F30 028C+00 1/1 0/0 0/0 .text JPAVolumeSphere__FP18JPAEmitterWorkData */
static void JPAVolumeSphere(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 8027B87C-8027B9F8 2761BC 017C+00 1/1 0/0 0/0 .text JPAVolumeCylinder__FP18JPAEmitterWorkData */
static void JPAVolumeCylinder(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 8027B9F8-8027BB18 276338 0120+00 1/1 0/0 0/0 .text JPAVolumeTorus__FP18JPAEmitterWorkData */
static void JPAVolumeTorus(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
JPADynamicsBlock::JPADynamicsBlock(u8 const* data) {
mpData = (const JPADynamicsBlockData*)data;
init();
}
enum {
VOL_Cube = 0x00,
VOL_Sphere = 0x01,
VOL_Cylinder = 0x02,
VOL_Torus = 0x03,
VOL_Point = 0x04,
VOL_Circle = 0x05,
VOL_Line = 0x06,
};
/* 8027BB4C-8027BBE8 27648C 009C+00 2/1 0/0 0/0 .text init__16JPADynamicsBlockFv */
void JPADynamicsBlock::init() {
switch (getVolumeType()) {
case VOL_Cube:
mpCalcVolumeFunc = &JPAVolumeCube;
break;
case VOL_Sphere:
mpCalcVolumeFunc = &JPAVolumeSphere;
break;
case VOL_Cylinder:
mpCalcVolumeFunc = &JPAVolumeCylinder;
break;
case VOL_Torus:
mpCalcVolumeFunc = &JPAVolumeTorus;
break;
case VOL_Point:
mpCalcVolumeFunc = &JPAVolumePoint;
break;
case VOL_Circle:
mpCalcVolumeFunc = &JPAVolumeCircle;
break;
case VOL_Line:
mpCalcVolumeFunc = &JPAVolumeLine;
break;
}
}
/* 8027BBE8-8027BDEC 276528 0204+00 0/0 1/1 0/0 .text
* create__16JPADynamicsBlockFP18JPAEmitterWorkData */
#ifdef NONMATCHING
// literal only
void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkStatus(JPAEmtrStts_RateStepEmit)) {
s32 emitCount;
s32 createCount;
// Probably an inlined function.
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
s32 count;
if (getVolumeType() == VOL_Sphere) {
count = 4 * getDivNumber() * getDivNumber() + 2;
} else {
count = getDivNumber();
}
emitCount = count;
work->mVolumeEmitIdx = 0;
} else {
f32 newPtclCount =
work->mpEmtr->mRate * (getRateRndm() * work->mpEmtr->get_r_zp() + 1.0f);
f32 newEmitCount = work->mpEmtr->mEmitCount + newPtclCount;
work->mpEmtr->mEmitCount = newEmitCount;
emitCount = (s32)newEmitCount;
work->mpEmtr->mEmitCount -= emitCount;
if (work->mpEmtr->checkStatus(JPAEmtrStts_FirstEmit) && 0.0f < newPtclCount &&
newPtclCount < 1.0f)
emitCount = 1;
}
work->mEmitCount = emitCount;
if (work->mpEmtr->checkStatus(JPAEmtrStts_StopEmit)) {
emitCount = 0;
}
// Probably an inlined function.
createCount = emitCount;
while (createCount > 0) {
JPABaseParticle* ptcl = work->mpEmtr->createParticle();
if (ptcl == NULL)
break;
createCount--;
}
}
if (++work->mpEmtr->mRateStepTimer >= (work->mpEmtr->mRateStep + 1)) {
work->mpEmtr->mRateStepTimer -= (work->mpEmtr->mRateStep + 1);
work->mpEmtr->setStatus(JPAEmtrStts_RateStepEmit);
} else {
work->mpEmtr->clearStatus(JPAEmtrStts_RateStepEmit);
}
work->mpEmtr->clearStatus(JPAEmtrStts_FirstEmit);
}
#else
void JPADynamicsBlock::create(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
#endif
+183
View File
@@ -0,0 +1,183 @@
//
// Generated By: dol2asm
// Translation Unit: JPAEmitter
//
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "dolphin/types.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8027E6A4-8027E6EC 278FE4 0048+00 0/0 14/14 16/16 .text __dt__18JPAEmitterCallBackFv */
JPAEmitterCallBack::~JPAEmitterCallBack() {
}
/* 8027E6EC-8027EA40 27902C 0354+00 0/0 1/1 0/0 .text
* init__14JPABaseEmitterFP17JPAEmitterManagerP11JPAResource */
void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
mpEmtrMgr = param_0;
mpRes = param_1;
mpRes->getDyn()->getEmitterScl(&mLocalScl);
mpRes->getDyn()->getEmitterTrs(&mLocalTrs);
mpRes->getDyn()->getEmitterDir(&mLocalDir);
mLocalDir.normalize();
mpRes->getDyn()->getEmitterRot(&mLocalRot);
mMaxFrame = mpRes->getDyn()->getMaxFrame();
mLifeTime = mpRes->getDyn()->getLifetime();
mVolumeSize = mpRes->getDyn()->getVolumeSize();
mRate = mpRes->getDyn()->getRate();
mRateStep = mpRes->getDyn()->getRateStep();
mVolumeSweep = mpRes->getDyn()->getVolumeSweep();
mVolumeMinRad = mpRes->getDyn()->getVolumeMinRad();
mAwayFromCenterSpeed = mpRes->getDyn()->getInitVelOmni();
mAwayFromAxisSpeed = mpRes->getDyn()->getInitVelAxis();
mDirSpeed = mpRes->getDyn()->getInitVelDir();
mSpread = mpRes->getDyn()->getInitVelDirSp();
mRndmDirSpeed = mpRes->getDyn()->getInitVelRndm();
mAirResist = mpRes->getDyn()->getAirRes();
mRndm.set_seed(mpEmtrMgr->mpWorkData->mRndm.get_rndm_u());
MTXIdentity(mGlobalRot);
mGlobalScl.set(1.0f, 1.0f, 1.0f);
mGlobalTrs.zero();
mGlobalPScl.set(1.0f, 1.0f);
mGlobalEnvClr.a = 0xff;
mGlobalEnvClr.b = 0xff;
mGlobalEnvClr.g = 0xff;
mGlobalEnvClr.r = 0xff;
mGlobalPrmClr.a = 0xff;
mGlobalPrmClr.b = 0xff;
mGlobalPrmClr.g = 0xff;
mGlobalPrmClr.r = 0xff;
param_1->getBsp()->getPrmClr(&mPrmClr);
param_1->getBsp()->getEnvClr(&mEnvClr);
mpUserWork = NULL;
mScaleOut = 1.0f;
mEmitCount = 0.0f;
initStatus(0x30);
mDrawTimes = 1;
mTick = 0;
mWaitTime = 0;
mRateStepTimer = 0;
mTexAnmIdx = 0;
}
/* 8027EA40-8027EB60 279380 0120+00 0/0 3/3 0/0 .text createParticle__14JPABaseEmitterFv
*/
JPABaseParticle* JPABaseEmitter::createParticle() {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclBase.push_front(node);
mpRes->getDyn()->calc(mpEmtrMgr->mpWorkData);
node->mData.init_p(mpEmtrMgr->mpWorkData);
return &node->mData;
}
return NULL;
}
/* 8027EB60-8027EC60 2794A0 0100+00 0/0 1/1 0/0 .text
* createChild__14JPABaseEmitterFP15JPABaseParticle */
JPABaseParticle* JPABaseEmitter::createChild(JPABaseParticle* parent) {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclChld.push_front(node);
node->mData.init_c(mpEmtrMgr->mpWorkData, parent);
return &node->mData;
}
return NULL;
}
/* 8027EC60-8027EDD4 2795A0 0174+00 0/0 2/2 21/21 .text deleteAllParticle__14JPABaseEmitterFv */
void JPABaseEmitter::deleteAllParticle() {
while (mAlivePtclBase.getNum())
mpPtclPool->push_front(mAlivePtclBase.pop_back());
while (mAlivePtclChld.getNum())
mpPtclPool->push_front(mAlivePtclChld.pop_back());
}
/* 8027EDD4-8027EE14 279714 0040+00 0/0 1/1 0/0 .text processTillStartFrame__14JPABaseEmitterFv */
bool JPABaseEmitter::processTillStartFrame() {
JPADynamicsBlock* dyn = mpRes->getDyn();
s16 startFrame = dyn->getStartFrame();
if (mWaitTime >= startFrame)
return true;
if (!(mStatus & 2))
mWaitTime++;
return false;
}
/* 8027EE14-8027EEB0 279754 009C+00 0/0 1/1 0/0 .text processTermination__14JPABaseEmitterFv */
bool JPABaseEmitter::processTermination() {
if (checkStatus(0x100)) {
return true;
}
if (mMaxFrame == 0) {
return false;
}
if (mMaxFrame < 0) {
setStatus(8);
return getParticleNumber() == 0;
}
if (mTick >= mMaxFrame) {
setStatus(8);
if (checkStatus(0x40)) {
return 0;
}
return getParticleNumber() == 0;
}
return false;
}
/* 8027EEB0-8027EF30 2797F0 0080+00 0/0 1/1 0/0 .text
* calcEmitterGlobalPosition__14JPABaseEmitterCFPQ29JGeometry8TVec3<f> */
void JPABaseEmitter::calcEmitterGlobalPosition(JGeometry::TVec3<f32>* dst) const {
Mtx mtx;
MTXScale(mtx, mGlobalScl.x, mGlobalScl.y, mGlobalScl.z);
MTXConcat(mGlobalRot, mtx, mtx);
mtx[0][3] = mGlobalTrs.x;
mtx[1][3] = mGlobalTrs.y;
mtx[2][3] = mGlobalTrs.z;
MTXMultVec(mtx, mLocalTrs, *dst);
}
/* 8027EF30-8027EF40 279870 0010+00 0/0 1/1 0/0 .text getCurrentCreateNumber__14JPABaseEmitterCFv
*/
u32 JPABaseEmitter::getCurrentCreateNumber() const {
return mpEmtrMgr->mpWorkData->mEmitCount;
}
/* 8027EF40-8027EF50 279880 0010+00 0/0 3/3 0/0 .text getDrawCount__14JPABaseEmitterCFv
*/
u8 JPABaseEmitter::getDrawCount() const {
return mpEmtrMgr->mpWorkData->mDrawCount;
}
/* 8027EF50-8027EFA4 279890 0054+00 0/0 1/1 0/0 .text
* loadTexture__14JPABaseEmitterFUc11_GXTexMapID */
bool JPABaseEmitter::loadTexture(u8 idx, GXTexMapID texMapID) {
mpEmtrMgr->mpWorkData->mpResMgr->load(mpRes->getTexIdx(idx), texMapID);
return true;
}
+273
View File
@@ -0,0 +1,273 @@
//
// Generated By: dol2asm
// Translation Unit: JPAEmitterManager
//
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "dolphin/gx.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc();
extern "C" void func_8027DEBC();
extern "C" void calc__17JPAEmitterManagerFUc();
extern "C" void draw__17JPAEmitterManagerFPC11JPADrawInfoUc();
extern "C" void forceDeleteAllEmitter__17JPAEmitterManagerFv();
extern "C" void forceDeleteGroupEmitter__17JPAEmitterManagerFUc();
extern "C" void forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter();
extern "C" void entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc();
extern "C" void clearResourceManager__17JPAEmitterManagerFUc();
extern "C" void calcYBBCam__17JPAEmitterManagerFv();
extern "C" void func_8027E51C(void* _this);
extern "C" void func_8027E54C(void* _this);
extern "C" void func_8027E588(void* _this);
extern "C" void func_8027E598(void* _this);
extern "C" void __dt__14JPABaseEmitterFv();
extern "C" void __ct__14JPABaseEmitterFv();
//
// External References:
//
extern "C" void getResource__18JPAResourceManagerCFUs();
extern "C" void calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter();
extern "C" void draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter();
extern "C" void init__14JPABaseEmitterFP17JPAEmitterManagerP11JPAResource();
extern "C" void deleteAllParticle__14JPABaseEmitterFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void prepend__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __construct_new_array();
extern "C" void _savegpr_24();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc
*/
// template ctors are at the end of the TU for some reason
#ifdef NONMATCHING
JPAEmitterManager::JPAEmitterManager(u32 ptclMax, u32 emtrMax, JKRHeap* pHeap, u8 grpMax,
u8 resMax) {
mEmtrMax = emtrMax;
mPtclMax = ptclMax;
mGrpMax = grpMax;
mResMax = resMax;
JPABaseEmitter* emtr = new (pHeap, 0) JPABaseEmitter[mEmtrMax];
for (u32 i = 0; i < mEmtrMax; i++)
mFreeEmtrList.prepend(&emtr[i].mLink);
JPANode<JPABaseParticle>* ptcl = new (pHeap, 0) JPANode<JPABaseParticle>[mPtclMax];
for (u32 i = 0; i < mPtclMax; i++)
mPtclPool.push_back(&ptcl[i]);
mpGrpEmtr = new (pHeap, 0) JSUList<JPABaseEmitter>[mGrpMax];
mpResMgrAry = new (pHeap, 0) JPAResourceManager*[mResMax];
for (int i = 0; i < mResMax; i++) {
mpResMgrAry[i] = NULL;
}
mpWorkData = new (pHeap, 0) JPAEmitterWorkData();
}
#else
JPAEmitterManager::JPAEmitterManager(u32 param_0, u32 param_1, JKRHeap* param_2, u8 param_3,
u8 param_4) {
// NONMATCHING
}
#endif
/* 8027DEBC-8027DFA0 2787FC 00E4+00 0/0 3/3 0/0 .text
* createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack
*/
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(JGeometry::TVec3<f32> const& pos,
u16 resID, u8 groupID, u8 resMgrID,
JPAEmitterCallBack* emtrCB,
JPAParticleCallBack* ptclCB) {
JPAResource* pRes = mpResMgrAry[resMgrID]->getResource(resID);
if (pRes != NULL && mFreeEmtrList.getNumLinks() != 0) {
JSULink<JPABaseEmitter>* pLink = mFreeEmtrList.getFirst();
mFreeEmtrList.remove(pLink);
mpGrpEmtr[groupID].append(pLink);
JPABaseEmitter* emtr = pLink->getObject();
emtr->init(this, pRes);
emtr->mpPtclPool = &mPtclPool;
emtr->mpEmtrCallBack = emtrCB;
emtr->mpPtclCallBack = ptclCB;
emtr->mGroupID = groupID;
emtr->mResMgrID = resMgrID;
emtr->mGlobalTrs.set(pos);
return emtr;
}
return NULL;
}
/* 8027DFA0-8027E028 2788E0 0088+00 0/0 3/3 0/0 .text calc__17JPAEmitterManagerFUc */
void JPAEmitterManager::calc(u8 groupID) {
for (JSULink<JPABaseEmitter>*pLink = mpGrpEmtr[groupID].getFirst(), *pNext;
pLink != mpGrpEmtr[groupID].getEnd(); pLink = pNext) {
pNext = pLink->getNext();
JPABaseEmitter* emtr = pLink->getObject();
bool done = emtr->mpRes->calc(mpWorkData, emtr);
if (done && !emtr->checkStatus(0x200))
forceDeleteEmitter(emtr);
}
}
/* 8027E028-8027E220 278968 01F8+00 0/0 1/1 0/0 .text draw__17JPAEmitterManagerFPC11JPADrawInfoUc
*/
void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 groupID) {
drawInfo->getCamMtx(&mpWorkData->mPosCamMtx);
drawInfo->getPrjMtx(&mpWorkData->mPrjMtx);
calcYBBCam();
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXEnableTexOffsets(GX_TEXCOORD0, GX_TRUE, GX_TRUE);
GXEnableTexOffsets(GX_TEXCOORD1, GX_TRUE, GX_TRUE);
GXEnableTexOffsets(GX_TEXCOORD2, GX_TRUE, GX_TRUE);
GXSetCullMode(GX_CULL_NONE);
GXSetCoPlanar(GX_FALSE);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S8, 0);
GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSetCurrentMtx(GX_PNMTX0);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetNumChans(0);
for (JSULink<JPABaseEmitter>* pLink = mpGrpEmtr[groupID].getFirst();
pLink != mpGrpEmtr[groupID].getEnd(); pLink = pLink->getNext()) {
JPABaseEmitter* emtr = pLink->getObject();
if (!emtr->checkStatus(0x04)) {
mpWorkData->mpResMgr = mpResMgrAry[emtr->mResMgrID];
emtr->mpRes->draw(mpWorkData, emtr);
}
}
}
/* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv
*/
void JPAEmitterManager::forceDeleteAllEmitter() {
for (u8 i = 0; i < mGrpMax; i++)
forceDeleteGroupEmitter(i);
}
/* 8027E278-8027E2D8 278BB8 0060+00 1/1 0/0 0/0 .text
* forceDeleteGroupEmitter__17JPAEmitterManagerFUc */
void JPAEmitterManager::forceDeleteGroupEmitter(u8 groupID) {
while (mpGrpEmtr[groupID].getNumLinks())
forceDeleteEmitter(mpGrpEmtr[groupID].getLast()->getObject());
}
/* 8027E2D8-8027E344 278C18 006C+00 3/3 1/1 0/0 .text
* forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
emtr->deleteAllParticle();
emtr->setStatus(0x300);
mpGrpEmtr[emtr->getGroupID()].remove(&emtr->mLink);
mFreeEmtrList.prepend(&emtr->mLink);
}
/* 8027E344-8027E354 278C84 0010+00 0/0 2/2 0/0 .text
* entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc */
void JPAEmitterManager::entryResourceManager(JPAResourceManager* resMgr, u8 resMgrID) {
mpResMgrAry[resMgrID] = resMgr;
}
/* 8027E354-8027E3F4 278C94 00A0+00 0/0 1/1 0/0 .text clearResourceManager__17JPAEmitterManagerFUc
*/
void JPAEmitterManager::clearResourceManager(u8 resMgrID) {
for (u8 i = 0; i < mGrpMax; i++) {
for (JSULink<JPABaseEmitter>*pLink = mpGrpEmtr[i].getFirst(), *pNext;
pLink != mpGrpEmtr[i].getEnd(); pLink = pNext) {
pNext = pLink->getNext();
if (resMgrID == pLink->getObject()->getResourceManagerID())
forceDeleteEmitter(pLink->getObject());
}
}
mpResMgrAry[resMgrID] = NULL;
}
/* ############################################################################################## */
/* 8027E3F4-8027E51C 278D34 0128+00 1/1 0/0 0/0 .text calcYBBCam__17JPAEmitterManagerFv
*/
void JPAEmitterManager::calcYBBCam() {
JGeometry::TVec3<float> v;
v.set(0.0f, mpWorkData->mPosCamMtx[1][1], mpWorkData->mPosCamMtx[2][1]);
v.normalize();
mpWorkData->mYBBCamMtx[0][0] = 1.0f;
mpWorkData->mYBBCamMtx[0][1] = 0.0f;
mpWorkData->mYBBCamMtx[0][2] = 0.0f;
mpWorkData->mYBBCamMtx[0][3] = mpWorkData->mPosCamMtx[0][3];
mpWorkData->mYBBCamMtx[1][0] = 0.0f;
mpWorkData->mYBBCamMtx[1][1] = v.y;
mpWorkData->mYBBCamMtx[1][2] = -v.z;
mpWorkData->mYBBCamMtx[1][3] = mpWorkData->mPosCamMtx[1][3];
mpWorkData->mYBBCamMtx[2][0] = 0.0f;
mpWorkData->mYBBCamMtx[2][1] = v.z;
mpWorkData->mYBBCamMtx[2][2] = v.y;
mpWorkData->mYBBCamMtx[2][3] = mpWorkData->mPosCamMtx[2][3];
}
/* 8027E51C-8027E54C 278E5C 0030+00 1/1 0/0 0/0 .text __ct__25JSUList<14JPABaseEmitter>Fv
*/
extern "C" void func_8027E51C(void* _this) {
// NONMATCHING
}
/* 8027E54C-8027E588 278E8C 003C+00 1/1 0/0 0/0 .text __dt__26JPANode<15JPABaseParticle>Fv */
extern "C" void func_8027E54C(void* _this) {
// NONMATCHING
}
/* 8027E588-8027E598 278EC8 0010+00 1/1 0/0 0/0 .text __ct__26JPANode<15JPABaseParticle>Fv */
extern "C" void func_8027E588(void* _this) {
// NONMATCHING
}
/* 8027E598-8027E5EC 278ED8 0054+00 1/1 0/0 0/0 .text __dt__25JSUList<14JPABaseEmitter>Fv
*/
extern "C" void func_8027E598(void* _this) {
// NONMATCHING
}
/* 8027E5EC-8027E64C 278F2C 0060+00 1/1 0/0 0/0 .text __dt__14JPABaseEmitterFv */
JPABaseEmitter::~JPABaseEmitter() {}
/* 8027E64C-8027E6A4 278F8C 0058+00 1/1 0/0 0/0 .text __ct__14JPABaseEmitterFv */
JPABaseEmitter::JPABaseEmitter() : mLink(this) {}
+35
View File
@@ -0,0 +1,35 @@
//
// Generated By: dol2asm
// Translation Unit: JPAExTexShape
//
#include "JSystem/JParticle/JPAExTexShape.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "dolphin/gx.h"
/* 8027B040-8027B13C 275980 00FC+00 0/0 1/1 0/0 .text JPALoadExTex__FP18JPAEmitterWorkData */
void JPALoadExTex(JPAEmitterWorkData* work) {
JPAExTexShape* ets = work->mpRes->getEts();
GXTexCoordID secTexCoordID = GX_TEXCOORD1;
if (ets->isUseIndirect()) {
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE,
GX_PTIDENTITY);
u8 texIdx = ets->getIndTexIdx();
work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP2);
secTexCoordID = GX_TEXCOORD2;
}
if (ets->isUseSecTex()) {
GXSetTexCoordGen2(secTexCoordID, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE,
GX_PTIDENTITY);
u8 texIdx = ets->getSecTexIdx();
work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP3);
}
}
/* 8027B13C-8027B144 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAExTexShapeFPCUc */
JPAExTexShape::JPAExTexShape(u8 const* data) {
mpData = (const JPAExTexShapeData*)data;
}
+157
View File
@@ -0,0 +1,157 @@
//
// Generated By: dol2asm
// Translation Unit: JPAExtraShape
//
#include "JSystem/JParticle/JPAExtraShape.h"
#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "dolphin/os.h"
#include "dolphin/types.h"
//
// Types:
//
/* 8027A918-8027A990 275258 0078+00 0/0 1/1 0/0 .text
* JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
ptcl->mParticleScaleX =
ptcl->mScaleOut * (esp->getScaleIncRateX() * work->mScaleAnm + esp->getScaleInValueX());
} else if (work->mScaleAnm > esp->getScaleOutTiming()) {
ptcl->mParticleScaleX =
ptcl->mScaleOut *
(esp->getScaleDecRateX() * (work->mScaleAnm - esp->getScaleOutTiming()) + 1.0f);
} else {
ptcl->mParticleScaleX = ptcl->mScaleOut;
}
}
/* 8027A990-8027AA08 2752D0 0078+00 0/0 1/1 0/0 .text
* JPACalcScaleY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
ptcl->mParticleScaleY =
ptcl->mScaleOut * (esp->getScaleIncRateY() * work->mScaleAnm + esp->getScaleInValueY());
} else if (work->mScaleAnm > esp->getScaleOutTiming()) {
ptcl->mParticleScaleY =
ptcl->mScaleOut *
(esp->getScaleDecRateY() * (work->mScaleAnm - esp->getScaleOutTiming()) + 1.0f);
} else {
ptcl->mParticleScaleY = ptcl->mScaleOut;
}
}
/* 8027AA08-8027AA14 275348 000C+00 0/0 1/1 0/0 .text
* JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleCopy(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
ptcl->mParticleScaleY = ptcl->mParticleScaleX;
}
/* 8027AA14-8027AA20 275354 000C+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmNormal(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mScaleAnm = ptcl->mTime;
}
/* 8027AA20-8027AA84 275360 0064+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
}
/* 8027AA84-8027AAE8 2753C4 0064+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
}
/* 8027AAE8-8027AB7C 275428 0094+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
s32 cycle = ptcl->mAge / esp->getScaleAnmCycleX();
f32 base = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f));
}
/* 8027AB7C-8027AC10 2754BC 0094+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
s32 cycle = ptcl->mAge / esp->getScaleAnmCycleY();
f32 base = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f));
}
/* 8027AC10-8027AC98 275550 0088+00 0/0 1/1 0/0 .text
* JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 alpha;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = 255.0f * (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
alpha = 255.0f * ((ptcl->mTime - esp->getAlphaOutTiming()) * esp->getAlphaDecRate() +
esp->getAlphaBaseValue());
} else {
alpha = 255.0f * esp->getAlphaBaseValue();
}
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
/* 8027AC98-8027AD88 2755D8 00F0+00 0/0 1/1 0/0 .text
* JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 alpha;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
alpha = ((ptcl->mTime - esp->getAlphaOutTiming()) * esp->getAlphaDecRate() +
esp->getAlphaBaseValue());
} else {
alpha = esp->getAlphaBaseValue();
}
s32 theta = ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq());
f32 wave = JMASSin(theta);
alpha *= (1.0f + esp->getAlphaAmp() * (wave - 1.0f) * 0.5f) * 255.0f;
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
/* 8027AD88-8027ADBC 2756C8 0034+00 0/0 1/1 0/0 .text __ct__13JPAExtraShapeFPCUc */
JPAExtraShape::JPAExtraShape(u8 const* data) {
mpData = (const JPAExtraShapeData*)data;
init();
}
/* 8027ADBC-8027AEBC 2756FC 0100+00 1/1 0/0 0/0 .text init__13JPAExtraShapeFv */
void JPAExtraShape::init() {
mAlphaIncRate = (getAlphaInTiming() != 0.0f) ?
(getAlphaBaseValue() - getAlphaInValue()) / getAlphaInTiming() :
1.0f;
mAlphaDecRate = (getAlphaOutTiming() != 1.0f) ?
(getAlphaOutValue() - getAlphaBaseValue()) / (1.0f - getAlphaOutTiming()) :
1.0f;
if (getScaleInTiming() != 0.0f) {
mScaleIncRateX = (1.0f - getScaleInValueX()) / getScaleInTiming();
mScaleIncRateY = (1.0f - getScaleInValueY()) / getScaleInTiming();
} else {
mScaleIncRateX = mScaleIncRateY = 1.0f;
}
if (getScaleOutTiming() != 1.0f) {
mScaleDecRateX = (getScaleOutValueX() - 1.0f) / (1.0f - getScaleOutTiming());
mScaleDecRateY = (getScaleOutValueY() - 1.0f) / (1.0f - getScaleOutTiming());
} else {
mScaleDecRateX = mScaleDecRateY = 1.0f;
}
}
+446
View File
@@ -0,0 +1,446 @@
//
// Generated By: dol2asm
// Translation Unit: JPAFieldBlock
//
#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:
//
/* 8027BDEC-8027BF18 27672C 012C+00 8/8 0/0 0/0 .text
* calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldBase::calcAffect(JPAFieldBlock* param_0, JPABaseParticle* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 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
}
/* 8027BFB4-8027C054 2768F4 00A0+00 1/0 0/0 0/0 .text
* prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldGravity::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* 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
}
/* ############################################################################################## */
/* 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
}
/* 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
}
/* 8027C24C-8027C29C 276B8C 0050+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldMagnet::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* 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
}
/* 8027C36C-8027C3E0 276CAC 0074+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldNewton::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 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
}
/* 8027C56C-8027C674 276EAC 0108+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldVortex::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* 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
}
/* 8027C814-8027CA94 277154 0280+00 1/0 0/0 0/0 .text
* prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldConvection::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* 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
}
/* 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
}
/* 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
}
/* 8027CE64-8027CFA8 2777A4 0144+00 1/0 0/0 0/0 .text
* prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldSpin::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
// NONMATCHING
}
/* 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
}
/* 8027D088-8027D0C0 2779C8 0038+00 0/0 1/1 0/0 .text __ct__13JPAFieldBlockFPCUcP7JKRHeap
*/
JPAFieldBlock::JPAFieldBlock(u8 const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 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
}
/* 8027D3AC-8027D3F4 277CEC 0048+00 1/0 0/0 0/0 .text __dt__12JPAFieldBaseFv */
JPAFieldBase::~JPAFieldBase() {
// NONMATCHING
}
/* 8027D3F4-8027D450 277D34 005C+00 1/0 0/0 0/0 .text __dt__12JPAFieldSpinFv */
JPAFieldSpin::~JPAFieldSpin() {
// NONMATCHING
}
/* 8027D450-8027D4AC 277D90 005C+00 1/0 0/0 0/0 .text __dt__12JPAFieldDragFv */
JPAFieldDrag::~JPAFieldDrag() {
// NONMATCHING
}
/* 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
}
+43
View File
@@ -0,0 +1,43 @@
//
// Generated By: dol2asm
// Translation Unit: JPAKeyBlock
//
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAMath.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8027D730-8027D740 278070 0010+00 0/0 1/1 0/0 .text __ct__11JPAKeyBlockFPCUc */
JPAKeyBlock::JPAKeyBlock(const u8* data)
: mDataStart(data)
, field_0x4(reinterpret_cast<const float*>(&data[0xC]))
{
}
/* ############################################################################################## */
/* 8027D740-8027D7D4 278080 0094+00 0/0 1/1 0/0 .text calc__11JPAKeyBlockFf */
void JPAKeyBlock::calc(float p1) {
if (mDataStart[0xB] != '\0') {
int v1 = (int)field_0x4[(mDataStart[9] - 1) * 4] + 1;
// p1 -= (v1 * ((int)p1 / v1));
int v2 = ((int)p1 / v1);
p1 = p1 - (v2 * v1);
}
JPACalcKeyAnmValue(p1, mDataStart[9], field_0x4);
}
+186
View File
@@ -0,0 +1,186 @@
//
// Generated By: dol2asm
// Translation Unit: JPAMath
//
#include "JSystem/JParticle/JPAMath.h"
#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/J2DGraph/J2DAnimation.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void func_80280588();
extern "C" void JPAGetYZRotateMtx__FssPA4_f();
extern "C" void JPAGetXYZRotateMtx__FsssPA4_f();
extern "C" void func_802807E0();
extern "C" void func_80280808();
extern "C" void JPACalcKeyAnmValue__FfUsPCf();
//
// External References:
//
extern "C" void _savegpr_28();
extern "C" void _restgpr_28();
extern "C" u8 sincosTable___5JMath[65536];
//
// Declarations:
//
/* ############################################################################################## */
// Probably some local function needed to change float literal order
static f32 floatDummyFunc() {
return 1.0f;
}
/* 80280588-802806C0 27AEC8 0138+00 0/0 1/1 0/0 .text JPAGetDirMtx__FRCQ29JGeometry8TVec3<f>PA4_f
*/
void JPAGetDirMtx(JGeometry::TVec3<f32> const& param_0, f32 (*param_1)[4]) {
JGeometry::TVec3<float> local_78;
f32 minusx = -param_0.x;
local_78.x = param_0.y;
local_78.y = minusx;
local_78.z = 0.0f;
f32 len = local_78.length();
if (len <= 32.0f * FLT_EPSILON) {
local_78.zero();
} else {
local_78.scale(1.0f / len);
}
f32 xsquared = local_78.x * local_78.x;
f32 ysquared = local_78.y * local_78.y;
f32 xlen = local_78.x * len;
f32 ylen = local_78.y * len;
f32 fVar5 = (1.0f - param_0.z) * (local_78.x * local_78.y);
param_1[0][0] = xsquared + param_0.z * (1.0f - xsquared);
param_1[0][1] = fVar5;
param_1[0][2] = -ylen;
param_1[0][3] = 0.0f;
param_1[1][0] = fVar5;
param_1[1][1] = ysquared + param_0.z * (1.0f - ysquared);
param_1[1][2] = xlen;
param_1[1][3] = 0.0f;
param_1[2][0] = ylen;
param_1[2][1] = -xlen;
param_1[2][2] = param_0.z;
param_1[2][3] = 0.0f;
}
/* 802806C0-80280734 27B000 0074+00 0/0 1/1 0/0 .text JPAGetYZRotateMtx__FssPA4_f */
void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
f32 cosy = JMASCos(angleY);
f32 cosz = JMASCos(angleZ);
f32 siny = JMASSin(angleY);
f32 sinz = JMASSin(angleZ);
param_2[0][0] = (cosy * cosz);
param_2[0][1] = -sinz;
param_2[0][2] = (siny * cosz);
param_2[1][0] = (cosy * sinz);
param_2[1][1] = cosz;
param_2[1][2] = (siny * sinz);
param_2[2][0] = -siny;
param_2[2][2] = cosy;
param_2[2][3] = 0.0f;
param_2[2][1] = 0.0f;
param_2[1][3] = 0.0f;
param_2[0][3] = 0.0f;
}
/* 80280734-802807E0 27B074 00AC+00 0/0 6/6 11/11 .text JPAGetXYZRotateMtx__FsssPA4_f */
void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
f32 cosx = JMASCos(x);
f32 cosy = JMASCos(y);
f32 cosz = JMASCos(z);
f32 sinx = JMASSin(x);
f32 siny = JMASSin(y);
f32 sinz = JMASSin(z);
mtx[0][0] = cosy * cosz;
mtx[1][0] = cosy * sinz;
mtx[2][0] = -siny;
mtx[2][1] = sinx * cosy;
mtx[2][2] = cosx * cosy;
f32 cosxsinz = cosx * sinz;
f32 sinxcosz = sinx * cosz;
mtx[0][1] = sinxcosz * siny - cosxsinz;
mtx[1][2] = cosxsinz * siny - sinxcosz;
f32 sinxsinz = sinx * sinz;
f32 cosxcosz = cosx * cosz;
mtx[0][2] = sinxsinz + cosxcosz * siny;
mtx[1][1] = cosxcosz + sinxsinz * siny;
mtx[2][3] = 0.0f;
mtx[1][3] = 0.0f;
mtx[0][3] = 0.0f;
}
/* 802807E0-80280808 27B120 0028+00 0/0 11/11 71/71 .text
* JPASetRMtxTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f> */
void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
JGeometry::TVec3<f32>* param_2) {
JGeometry::TVec3<f32> dummy;
JPASetRMtxSTVecfromMtx(param_0, param_1, &dummy, param_2);
}
/* 80280808-80280984 27B148 017C+00 1/1 1/1 53/53 .text
* JPASetRMtxSTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f>PQ29JGeometry8TVec3<f> */
void JPASetRMtxSTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
JGeometry::TVec3<f32>* param_2, JGeometry::TVec3<f32>* param_3) {
JGeometry::TVec3<float> aTStack_54;
aTStack_54.set(param_0[0][0], param_0[1][0], param_0[2][0]);
param_2->x = aTStack_54.length();
aTStack_54.set(param_0[0][1], param_0[1][1], param_0[2][1]);
param_2->y = aTStack_54.length();
aTStack_54.set(param_0[0][2], param_0[1][2], param_0[2][2]);
param_2->z = aTStack_54.length();
MTXIdentity(param_1);
if (param_2->x != 0.0f) {
f32 fVar5 = 1.0f / param_2->x;
param_1[0][0] = param_0[0][0] * fVar5;
param_1[1][0] = param_0[1][0] * fVar5;
param_1[2][0] = param_0[2][0] * fVar5;
}
if (param_2->y != 0.0f) {
f32 fVar5 = 1.0f / param_2->y;
param_1[0][1] = param_0[0][1] * fVar5;
param_1[1][1] = param_0[1][1] * fVar5;
param_1[2][1] = param_0[2][1] * fVar5;
}
if (param_2->z != 0.0f) {
f32 fVar5 = 1.0f / param_2->z;
param_1[0][2] = param_0[0][2] * fVar5;
param_1[1][2] = param_0[1][2] * fVar5;
param_1[2][2] = param_0[2][2] * fVar5;
}
param_3->set(param_0[0][3], param_0[1][3], param_0[2][3]);
}
/* 80280984-80280A48 27B2C4 00C4+00 0/0 2/1 0/0 .text JPACalcKeyAnmValue__FfUsPCf */
f32 JPACalcKeyAnmValue(f32 param_0, u16 param_1, f32 const* param_2) {
if (param_0 < param_2[0]) {
return param_2[1];
}
int ind = param_1 - 1;
if (param_2[ind * 4] <= param_0) {
return param_2[ind * 4 + 1];
}
int x = param_1;
while (x > 1) {
u32 uVar3 = x / 2;
if (param_0 >= param_2[uVar3 * 4]) {
param_2 += uVar3 * 4;
x -= uVar3;
} else {
x = uVar3;
}
}
return JMAHermiteInterpolation(param_0, param_2[0], param_2[1],
param_2[3], param_2[4],
param_2[5], param_2[6]);
}
+130
View File
@@ -0,0 +1,130 @@
//
// Generated By: dol2asm
// Translation Unit: JPAParticle
//
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __dt__19JPAParticleCallBackFv();
extern "C" void init_p__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void init_c__15JPABaseParticleFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calc_p__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void calc_c__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void canCreateChild__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void getWidth__15JPABaseParticleCFPC14JPABaseEmitter();
extern "C" void getHeight__15JPABaseParticleCFPC14JPABaseEmitter();
//
// External References:
//
extern "C" void calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void createChild__14JPABaseEmitterFP15JPABaseParticle();
extern "C" void JPAGetYZRotateMtx__FssPA4_f();
extern "C" void __dl__FPv();
extern "C" void JMAVECScaleAdd__FPC3VecPC3VecP3Vecf();
extern "C" void _savegpr_26();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__19JPAParticleCallBack[5];
//
// Declarations:
//
/* 8027EFA4-8027EFEC 2798E4 0048+00 0/0 11/11 1/1 .text __dt__19JPAParticleCallBackFv */
JPAParticleCallBack::~JPAParticleCallBack() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455388-8045538C 003988 0004+00 2/2 0/0 0/0 .sdata2 @2565 */
SECTION_SDATA2 static f32 lit_2565 = 1.0f;
/* 8045538C-80455390 00398C 0004+00 4/4 0/0 0/0 .sdata2 @2566 */
SECTION_SDATA2 static u8 lit_2566[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455390-80455394 003990 0004+00 2/2 0/0 0/0 .sdata2 @2567 */
SECTION_SDATA2 static f32 lit_2567 = 32.0f;
/* 80455394-80455398 003994 0004+00 2/2 0/0 0/0 .sdata2 @2568 */
SECTION_SDATA2 static f32 lit_2568 = 0.5f;
/* 80455398-8045539C 003998 0004+00 2/2 0/0 0/0 .sdata2 @2569 */
SECTION_SDATA2 static f32 lit_2569 = 3.0f;
/* 8045539C-804553A0 00399C 0004+00 1/1 0/0 0/0 .sdata2 @2570 */
SECTION_SDATA2 static f32 lit_2570 = 32768.0f;
/* 804553A0-804553A8 0039A0 0008+00 4/4 0/0 0/0 .sdata2 @2572 */
SECTION_SDATA2 static f64 lit_2572 = 4503601774854144.0 /* cast s32 to float */;
/* 804553A8-804553B0 0039A8 0008+00 2/2 0/0 0/0 .sdata2 @2574 */
SECTION_SDATA2 static f64 lit_2574 = 4503599627370496.0 /* cast u32 to float */;
/* 8027EFEC-8027F8C8 27992C 08DC+00 0/0 1/1 0/0 .text
* init_p__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::init_p(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 8027F8C8-8027FFD0 27A208 0708+00 0/0 1/1 0/0 .text
* init_c__15JPABaseParticleFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPABaseParticle::init_c(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
// NONMATCHING
}
/* 8027FFD0-80280260 27A910 0290+00 0/0 1/1 0/0 .text
* calc_p__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::calc_p(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 80280260-802804C8 27ABA0 0268+00 0/0 1/1 0/0 .text
* calc_c__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::calc_c(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 802804C8-80280548 27AE08 0080+00 1/1 0/0 0/0 .text
* canCreateChild__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::canCreateChild(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* ############################################################################################## */
/* 804553B0-804553B8 0039B0 0004+04 2/2 0/0 0/0 .sdata2 @3010 */
SECTION_SDATA2 static f32 lit_3010[1 + 1 /* padding */] = {
2.0f,
/* padding */
0.0f,
};
/* 80280548-80280568 27AE88 0020+00 0/0 3/3 0/0 .text
* getWidth__15JPABaseParticleCFPC14JPABaseEmitter */
f32 JPABaseParticle::getWidth(JPABaseEmitter const* emtr) const {
f32 scale = lit_3010[0] * mParticleScaleX;
return scale * emtr->mpEmtrMgr->mpWorkData->mGlobalPtclScl.x;
}
/* 80280568-80280588 27AEA8 0020+00 0/0 3/3 0/0 .text
* getHeight__15JPABaseParticleCFPC14JPABaseEmitter */
f32 JPABaseParticle::getHeight(JPABaseEmitter const* emtr) const {
f32 scale = lit_3010[0] * mParticleScaleY;
return scale * emtr->mpEmtrMgr->mpWorkData->mGlobalPtclScl.y;
}
+714
View File
@@ -0,0 +1,714 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResource
//
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "dol2asm.h"
#include "dolphin/gx.h"
#include "dolphin/types.h"
//
// Types:
//
struct JPAKeyBlock {
/* 8027D740 */ void calc(f32);
};
struct JPAFieldBlock {};
struct JPAFieldBase {
/* 80276A8C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
};
//
// Forward References:
//
extern "C" void __ct__11JPAResourceFv();
extern "C" void init__11JPAResourceFP7JKRHeap();
extern "C" void calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter();
extern "C" void draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter();
extern "C" void drawP__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void drawC__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void setPTev__11JPAResourceFv();
extern "C" void setCTev__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void calcKey__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void calcWorkData_c__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData();
extern "C" void prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock();
//
// External References:
//
extern "C" void JPASetPointSize__FP18JPAEmitterWorkData();
extern "C" void JPASetLineWidth__FP18JPAEmitterWorkData();
extern "C" void JPASetPointSize__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPASetLineWidth__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistPrm__FP18JPAEmitterWorkData();
extern "C" void JPARegistEnv__FP18JPAEmitterWorkData();
extern "C" void JPARegistPrmEnv__FP18JPAEmitterWorkData();
extern "C" void JPARegistAlpha__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistPrmAlpha__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistPrmAlphaEnv__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistAlphaEnv__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistEnv__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcClrIdxNormal__FP18JPAEmitterWorkData();
extern "C" void JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcClrIdxRepeat__FP18JPAEmitterWorkData();
extern "C" void JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcClrIdxReverse__FP18JPAEmitterWorkData();
extern "C" void JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcClrIdxMerge__FP18JPAEmitterWorkData();
extern "C" void JPACalcClrIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcClrIdxRandom__FP18JPAEmitterWorkData();
extern "C" void JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcPrm__FP18JPAEmitterWorkData();
extern "C" void JPACalcPrm__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcEnv__FP18JPAEmitterWorkData();
extern "C" void JPACalcEnv__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcColorCopy__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPAGenTexCrdMtxIdt__FP18JPAEmitterWorkData();
extern "C" void JPAGenTexCrdMtxAnm__FP18JPAEmitterWorkData();
extern "C" void JPAGenTexCrdMtxPrj__FP18JPAEmitterWorkData();
extern "C" void JPAGenCalcTexCrdMtxAnm__FP18JPAEmitterWorkData();
extern "C" void JPALoadCalcTexCrdMtxAnm__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPALoadTex__FP18JPAEmitterWorkData();
extern "C" void JPALoadTexAnm__FP18JPAEmitterWorkData();
extern "C" void JPALoadTexAnm__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcTexIdxNormal__FP18JPAEmitterWorkData();
extern "C" void JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcTexIdxRepeat__FP18JPAEmitterWorkData();
extern "C" void JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcTexIdxReverse__FP18JPAEmitterWorkData();
extern "C" void JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcTexIdxMerge__FP18JPAEmitterWorkData();
extern "C" void JPACalcTexIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcTexIdxRandom__FP18JPAEmitterWorkData();
extern "C" void JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPALoadPosMtxCam__FP18JPAEmitterWorkData();
extern "C" void JPADrawBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawRotBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawRotYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawDirection__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawRotDirection__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawDBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawPoint__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawLine__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPADrawStripe__FP18JPAEmitterWorkData();
extern "C" void JPADrawStripeX__FP18JPAEmitterWorkData();
extern "C" void JPADrawEmitterCallBackB__FP18JPAEmitterWorkData();
extern "C" void JPADrawParticleCallBack__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void setGX__12JPABaseShapeCFP18JPAEmitterWorkData();
extern "C" void JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleY__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPARegistChildPrmEnv__FP18JPAEmitterWorkData();
extern "C" void JPACalcChildAlphaOut__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle();
extern "C" void JPALoadExTex__FP18JPAEmitterWorkData();
extern "C" void create__16JPADynamicsBlockFP18JPAEmitterWorkData();
extern "C" void calc__11JPAKeyBlockFf();
extern "C" void processTillStartFrame__14JPABaseEmitterFv();
extern "C" void processTermination__14JPABaseEmitterFv();
extern "C" void calc_p__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void calc_c__15JPABaseParticleFP18JPAEmitterWorkData();
extern "C" void func_80280588();
extern "C" void JPAGetXYZRotateMtx__FsssPA4_f();
extern "C" void alloc__7JKRHeapFUliP7JKRHeap();
extern "C" void load__10JUTTextureF11_GXTexMapID();
extern "C" void _savegpr_14();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _restgpr_14();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
//
// Declarations:
//
/* 80274010-80274080 26E950 0070+00 0/0 1/1 0/0 .text __ct__11JPAResourceFv */
JPAResource::JPAResource() {
mpDrawEmitterChildFuncList = NULL;
mpDrawEmitterFuncList = NULL;
mpCalcEmitterFuncList = NULL;
mpDrawParticleChildFuncList = NULL;
mpCalcParticleChildFuncList = NULL;
mpDrawParticleFuncList = NULL;
mpCalcParticleFuncList = NULL;
mpBaseShape = NULL;
mpExtraShape = NULL;
mpChildShape = NULL;
mpExTexShape = NULL;
mpDynamicsBlock = NULL;
mpFieldBlocks = NULL;
mpKeyBlocks = NULL;
mpTDB1 = NULL;
mpDrawParticleChildFuncListNum = 0;
mpCalcParticleChildFuncListNum = 0;
mpDrawParticleFuncListNum = 0;
mpCalcParticleFuncListNum = 0;
mpDrawEmitterChildFuncListNum = 0;
mpDrawEmitterFuncListNum = 0;
mpCalcEmitterFuncListNum = 0;
mTDB1Num = 0;
mKeyBlockNum = 0;
mFieldBlockNum = 0;
mUsrIdx = 0;
}
/* ############################################################################################## */
/* 803C40C0-803C4220 0211E0 0144+1C 2/2 0/0 0/0 .data jpa_pos */
SECTION_DATA static u8 jpa_pos[324 + 28 /* padding */] ALIGN_DECL(32) = {
0x00,
0x00,
0x00,
0x32,
0x00,
0x00,
0x32,
0xCE,
0x00,
0x00,
0xCE,
0x00,
0xE7,
0x00,
0x00,
0x19,
0x00,
0x00,
0x19,
0xCE,
0x00,
0xE7,
0xCE,
0x00,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xCE,
0x00,
0xCE,
0xCE,
0x00,
0x00,
0x19,
0x00,
0x32,
0x19,
0x00,
0x32,
0xE7,
0x00,
0x00,
0xE7,
0x00,
0xE7,
0x19,
0x00,
0x19,
0x19,
0x00,
0x19,
0xE7,
0x00,
0xE7,
0xE7,
0x00,
0xCE,
0x19,
0x00,
0x00,
0x19,
0x00,
0x00,
0xE7,
0x00,
0xCE,
0xE7,
0x00,
0x00,
0x32,
0x00,
0x32,
0x32,
0x00,
0x32,
0x00,
0x00,
0x00,
0x00,
0x00,
0xE7,
0x32,
0x00,
0x19,
0x32,
0x00,
0x19,
0x00,
0x00,
0xE7,
0x00,
0x00,
0xCE,
0x32,
0x00,
0x00,
0x32,
0x00,
0x00,
0x00,
0x00,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x32,
0x00,
0x00,
0x32,
0x00,
0x32,
0x00,
0x00,
0x32,
0xE7,
0x00,
0x00,
0x19,
0x00,
0x00,
0x19,
0x00,
0x32,
0xE7,
0x00,
0x32,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x32,
0xCE,
0x00,
0x32,
0x00,
0x00,
0xE7,
0x32,
0x00,
0xE7,
0x32,
0x00,
0x19,
0x00,
0x00,
0x19,
0xE7,
0x00,
0xE7,
0x19,
0x00,
0xE7,
0x19,
0x00,
0x19,
0xE7,
0x00,
0x19,
0xCE,
0x00,
0xE7,
0x00,
0x00,
0xE7,
0x00,
0x00,
0x19,
0xCE,
0x00,
0x19,
0x00,
0x00,
0xCE,
0x32,
0x00,
0xCE,
0x32,
0x00,
0x00,
0x00,
0x00,
0x00,
0xE7,
0x00,
0xCE,
0x19,
0x00,
0xCE,
0x19,
0x00,
0x00,
0xE7,
0x00,
0x00,
0xCE,
0x00,
0xCE,
0x00,
0x00,
0xCE,
0x00,
0x00,
0x00,
0xCE,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x32,
0x00,
0xCE,
0x32,
0x00,
0xCE,
0x00,
0x00,
0x00,
0xE7,
0x00,
0x00,
0x19,
0x00,
0xCE,
0x19,
0x00,
0xCE,
0xE7,
0x00,
0x00,
0xCE,
0x00,
0x00,
0x00,
0x00,
0xCE,
0x00,
0x00,
0xCE,
0xCE,
0x00,
0x19,
0x00,
0x00,
0x19,
0x32,
0x00,
0xE7,
0x32,
0x00,
0xE7,
0x00,
0x00,
0x19,
0xE7,
0x00,
0x19,
0x19,
0x00,
0xE7,
0x19,
0x00,
0xE7,
0xE7,
0x00,
0x19,
0xCE,
0x00,
0x19,
0x00,
0x00,
0xE7,
0x00,
0x00,
0xE7,
0xCE,
0x00,
0x32,
0x00,
0x00,
0x32,
0x32,
0x00,
0x00,
0x32,
0x00,
0x00,
0x00,
0x00,
0x32,
0xE7,
0x00,
0x32,
0x19,
0x00,
0x00,
0x19,
0x00,
0x00,
0xE7,
0x00,
0x32,
0xCE,
0x00,
0x32,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xCE,
/* padding */
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,
};
/* 803C4220-803C4240 021340 0020+00 2/2 0/0 0/0 .data jpa_crd */
SECTION_DATA static u8 jpa_crd[32] = {
0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0x01,
0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02,
};
/* 803C4240-803C426C -00001 002C+00 1/1 0/0 0/0 .data @2829 */
SECTION_DATA static void* lit_2829[11] = {
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1488),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x149C),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x13D0),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1430),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1430),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x14AC),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x14AC),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1474),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1474),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1460),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1400),
};
/* 803C426C-803C4298 -00001 002C+00 1/1 0/0 0/0 .data @2828 */
SECTION_DATA static void* lit_2828[11] = {
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x112C),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1140),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1074),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x10D4),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x10D4),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1150),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1150),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1118),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1118),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x1104),
(void*)(((char*)init__11JPAResourceFP7JKRHeap) + 0x10A4),
};
/* 80274080-802755E8 26E9C0 1568+00 2/0 1/1 0/0 .text init__11JPAResourceFP7JKRHeap */
void JPAResource::init(JKRHeap* param_0) {
// NONMATCHING
}
/* 802755E8-80275A94 26FF28 04AC+00 0/0 1/1 0/0 .text
* calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
bool JPAResource::calc(JPAEmitterWorkData* param_0, JPABaseEmitter* param_1) {
// NONMATCHING
}
/* 80275A94-80275B74 2703D4 00E0+00 0/0 1/1 0/0 .text
* draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
void JPAResource::draw(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
work->mDrawCount = 0;
calcWorkData_d(work);
mpBaseShape->setGX(work);
for (s32 i = 1; i <= emtr->getDrawTimes(); i++) {
work->mDrawCount++;
if (mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
drawC(work);
drawP(work);
if (!mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
drawC(work);
}
}
/* ############################################################################################## */
/* 80455290-80455294 003890 0004+00 2/2 0/0 0/0 .sdata2 @3189 */
SECTION_SDATA2 static f32 lit_3189 = 51.0f / 50.0f;
/* 80455294-80455298 003894 0004+00 2/2 0/0 0/0 .sdata2 @3190 */
SECTION_SDATA2 static f32 lit_3190 = 2.0f / 5.0f;
/* 80455298-8045529C 003898 0004+00 1/1 0/0 0/0 .sdata2 @3191 */
SECTION_SDATA2 static f32 lit_3191 = 1.0f;
/* 8045529C-804552A0 00389C 0004+00 2/2 0/0 0/0 .sdata2 @3192 */
SECTION_SDATA2 static u8 lit_3192[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804552A0-804552A8 0038A0 0008+00 3/3 0/0 0/0 .sdata2 @3194 */
SECTION_SDATA2 static f64 lit_3194 = 4503599627370496.0 /* cast u32 to float */;
/* 80275B74-80275EB0 2704B4 033C+00 1/1 0/0 0/0 .text drawP__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::drawP(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 80275EB0-802761A8 2707F0 02F8+00 1/1 0/0 0/0 .text drawC__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::drawC(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 802761A8-8027642C 270AE8 0284+00 1/1 0/0 0/0 .text setPTev__11JPAResourceFv */
void JPAResource::setPTev() {
// NONMATCHING
}
/* 8027642C-8027658C 270D6C 0160+00 1/1 0/0 0/0 .text setCTev__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::setCTev(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 8027658C-80276608 270ECC 007C+00 0/0 1/1 0/0 .text
* calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_p(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
// NONMATCHING
}
/* 80276608-80276684 270F48 007C+00 0/0 1/1 0/0 .text
* calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_c(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
// NONMATCHING
}
/* 80276684-80276700 270FC4 007C+00 0/0 2/2 0/0 .text
* calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calcField(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 803C4298-803C42E0 -00001 002C+1C 1/1 0/0 0/0 .data @3454 */
SECTION_DATA static void* lit_3454[11 + 7 /* padding */] = {
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0x90),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0x9C),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0x110),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xB4),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xC0),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0x110),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xD8),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xE4),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xF0),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0xFC),
(void*)(((char*)calcKey__11JPAResourceFP18JPAEmitterWorkData) + 0x108),
/* padding */
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
};
/* 80276700-80276840 271040 0140+00 2/1 0/0 0/0 .text calcKey__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::calcKey(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 80276840-80276A0C 271180 01CC+00 1/1 0/0 0/0 .text
* calcWorkData_c__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_c(JPAEmitterWorkData* param_0) {
// NONMATCHING
}
/* 80276A0C-80276A8C 27134C 0080+00 1/1 0/0 0/0 .text
* calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
Mtx mtx;
JPAGetXYZRotateMtx(work->mpEmtr->mLocalRot.x * 0xB6, work->mpEmtr->mLocalRot.y * 0xB6,
work->mpEmtr->mLocalRot.z * 0xB6, mtx);
MTXConcat(work->mpEmtr->mGlobalRot, mtx, work->mGlobalRot);
MTXMultVecSR(work->mGlobalRot, (Vec*)&work->mpEmtr->mLocalDir, (Vec*)&work->mGlobalEmtrDir);
}
/* 80276A8C-80276A90 2713CC 0004+00 0/0 3/0 0/0 .text
* prepare__12JPAFieldBaseFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldBase::prepare(JPAEmitterWorkData* param_0, JPAFieldBlock* param_1) {
/* empty function */
}
@@ -0,0 +1,96 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResourceLoader
//
#include "JSystem/JParticle/JPAResourceLoader.h"
#include "dolphin/types.h"
//
// Types:
//
struct JPATexture {
/* 8027D7D4 */ JPATexture(u8 const*);
};
struct JKRHeap {};
struct JPAResource {
/* 80274010 */ JPAResource();
/* 80274080 */ void init(JKRHeap*);
};
struct JPAResourceManager {
/* 80273F8C */ void registRes(JPAResource*);
/* 80273FAC */ void registTex(JPATexture*);
};
struct JPAResourceLoader {
/* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
/* 8027D8E0 */ void load_jpc(u8 const*, JPAResourceManager*);
};
struct JPAKeyBlock {
/* 8027D730 */ JPAKeyBlock(u8 const*);
};
struct JPAFieldBlock {
/* 8027D088 */ JPAFieldBlock(u8 const*, JKRHeap*);
};
struct JPAExtraShape {
/* 8027AD88 */ JPAExtraShape(u8 const*);
};
struct JPADynamicsBlock {
/* 8027BB18 */ JPADynamicsBlock(u8 const*);
};
struct JPABaseShape {
/* 8027A6DC */ JPABaseShape(u8 const*, JKRHeap*);
};
//
// Forward References:
//
extern "C" void __ct__17JPAResourceLoaderFPCUcP18JPAResourceManager();
extern "C" void load_jpc__17JPAResourceLoaderFPCUcP18JPAResourceManager();
//
// External References:
//
extern "C" void registRes__18JPAResourceManagerFP11JPAResource();
extern "C" void registTex__18JPAResourceManagerFP10JPATexture();
extern "C" void __ct__11JPAResourceFv();
extern "C" void init__11JPAResourceFP7JKRHeap();
extern "C" void __ct__12JPABaseShapeFPCUcP7JKRHeap();
extern "C" void __ct__13JPAExtraShapeFPCUc();
extern "C" void __ct__13JPAChildShapeFPCUc();
extern "C" void __ct__13JPAExTexShapeFPCUc();
extern "C" void __ct__16JPADynamicsBlockFPCUc();
extern "C" void __ct__13JPAFieldBlockFPCUcP7JKRHeap();
extern "C" void __ct__11JPAKeyBlockFPCUc();
extern "C" void __ct__10JPATextureFPCUc();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void _savegpr_18();
extern "C" void _restgpr_18();
//
// Declarations:
//
/* 8027D8A0-8027D8E0 2781E0 0040+00 0/0 1/1 0/0 .text
* __ct__17JPAResourceLoaderFPCUcP18JPAResourceManager */
JPAResourceLoader::JPAResourceLoader(u8 const* param_0, JPAResourceManager* param_1) {
// NONMATCHING
}
/* 8027D8E0-8027DCA0 278220 03C0+00 1/1 0/0 0/0 .text
* load_jpc__17JPAResourceLoaderFPCUcP18JPAResourceManager */
void JPAResourceLoader::load_jpc(u8 const* param_0, JPAResourceManager* param_1) {
// NONMATCHING
}
@@ -0,0 +1,84 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResourceManager
//
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JParticle/JPAResource.h"
#include "string.h"
struct JPAResourceLoader {
/* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
};
/* 80273E10-80273E68 26E750 0058+00 0/0 2/2 0/0 .text __ct__18JPAResourceManagerFPCvP7JKRHeap */
JPAResourceManager::JPAResourceManager(void const* pData, JKRHeap* pHeap) {
mpResArr = NULL;
mpTexArr = NULL;
mResMax = 0;
mResNum = 0;
mTexMax = 0;
mTexNum = 0;
mpHeap = pHeap;
JPAResourceLoader loader((u8 const*)pData, this);
}
/* 80273E68-80273EA8 26E7A8 0040+00 1/1 1/1 0/0 .text getResource__18JPAResourceManagerCFUs */
JPAResource* JPAResourceManager::getResource(u16 usrIdx) const {
for (u16 i = 0; i < mResNum; i++)
if (mpResArr[i]->getUsrIdx() == usrIdx)
return mpResArr[i];
return NULL;
}
/* 80273EA8-80273EEC 26E7E8 0044+00 0/0 2/2 0/0 .text
* checkUserIndexDuplication__18JPAResourceManagerCFUs */
bool JPAResourceManager::checkUserIndexDuplication(u16 usrIdx) const {
for (s32 i = 0; i < mResNum; i++)
if (mpResArr[i]->getUsrIdx() == usrIdx)
return true;
return false;
}
/* 80273EEC-80273F8C 26E82C 00A0+00 0/0 2/2 0/0 .text
* swapTexture__18JPAResourceManagerFPC7ResTIMGPCc */
const ResTIMG* JPAResourceManager::swapTexture(ResTIMG const* img, char const* swapName) {
const ResTIMG* ret = NULL;
for (s32 i = 0; i < mTexNum; i++) {
if (strcmp(swapName, mpTexArr[i]->getName()) == 0) {
JUTTexture* tex = mpTexArr[i]->getJUTTexture();
ret = tex->getTexInfo();
tex->storeTIMG(img, (u8)0);
break;
}
}
return ret;
}
/* 80273F8C-80273FAC 26E8CC 0020+00 0/0 1/1 0/0 .text
* registRes__18JPAResourceManagerFP11JPAResource */
void JPAResourceManager::registRes(JPAResource* res) {
mpResArr[mResNum] = res;
mResNum++;
}
/* 80273FAC-80273FCC 26E8EC 0020+00 0/0 1/1 0/0 .text
* registTex__18JPAResourceManagerFP10JPATexture */
void JPAResourceManager::registTex(JPATexture* tex) {
mpTexArr[mTexNum] = tex;
mTexNum++;
}
/* 80273FCC-80274010 26E90C 0044+00 0/0 6/6 0/0 .text getResUserWork__18JPAResourceManagerCFUs */
u32 JPAResourceManager::getResUserWork(u16 usrIdx) const {
u32 ret = 0;
JPAResource* res = getResource(usrIdx);
if (res != NULL)
ret = res->getDyn()->getResUserWork();
return ret;
}
+15
View File
@@ -0,0 +1,15 @@
//
// Generated By: dol2asm
// Translation Unit: JPATexture
//
#include "JSystem/JParticle/JPATexture.h"
/* 8027D7D4-8027D83C 278114 0068+00 0/0 1/1 0/0 .text __ct__10JPATextureFPCUc */
JPATexture::JPATexture(u8 const* pData) {
mpData = (const JPATextureData*)pData;
mTexture.storeTIMG(&mpData->mResTIMG, (u8)0);
}
/* 8027D83C-8027D8A0 27817C 0064+00 1/0 0/0 0/0 .text __dt__10JPATextureFv */
JPATexture::~JPATexture() {}