mirror of
https://github.com/zeldaret/ss
synced 2026-05-25 15:25:13 -04:00
JPADynamicsBlock OK
This commit is contained in:
@@ -1759,9 +1759,13 @@ JSystem/JParticle/JPAResourceManager.cpp:
|
||||
|
||||
JSystem/JParticle/JPAResource.cpp:
|
||||
.text start:0x80316C10 end:0x803198A0 align:16
|
||||
.data start:0x80546D60 end:0x80546F80
|
||||
.sdata2 start:0x8057CE38 end:0x8057CE50
|
||||
|
||||
JSystem/JParticle/JPABaseShape.cpp:
|
||||
.text start:0x803198A0 end:0x8031D53C align:16
|
||||
.data start:0x80546F80 end:0x80547180
|
||||
.sdata start:0x80574008 end:0x80574010
|
||||
.sdata2 start:0x8057CE50 end:0x8057CE88
|
||||
|
||||
JSystem/JParticle/JPAExtraShape.cpp:
|
||||
|
||||
@@ -18467,7 +18467,7 @@ JPAGenTexCrdMtxAnm__FP18JPAEmitterWorkData = .text:0x8031A400; // type:function
|
||||
JPAGenTexCrdMtxPrj__FP18JPAEmitterWorkData = .text:0x8031A420; // type:function size:0x1C
|
||||
JPAGenCalcTexCrdMtxAnm__FP18JPAEmitterWorkData = .text:0x8031A440; // type:function size:0x244
|
||||
JPALoadCalcTexCrdMtxAnm__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031A690; // type:function size:0x22C
|
||||
fn_8031A8C0 = .text:0x8031A8C0; // type:function size:0x4C
|
||||
fn_8031A8C0__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031A8C0; // type:function size:0x4C
|
||||
JPALoadTex__FP18JPAEmitterWorkData = .text:0x8031A910; // type:function size:0x38
|
||||
JPALoadTexAnm__FP18JPAEmitterWorkData = .text:0x8031A950; // type:function size:0x34
|
||||
JPALoadTexAnm__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031A990; // type:function size:0x30
|
||||
@@ -18509,7 +18509,7 @@ JPADrawPoint__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031C080; // ty
|
||||
JPADrawLine__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031C120; // type:function size:0x174
|
||||
getNext__FP26JPANode<15JPABaseParticle> = .text:0x8031C2A0; // type:function size:0x8
|
||||
getPrev__FP26JPANode<15JPABaseParticle> = .text:0x8031C2B0; // type:function size:0x8
|
||||
fn_8031C2C0 = .text:0x8031C2C0; // type:function size:0x4C
|
||||
fn_8031C2C0__FP18JPAEmitterWorkData = .text:0x8031C2C0; // type:function size:0x4C
|
||||
JPADrawStripe__FP18JPAEmitterWorkData = .text:0x8031C310; // type:function size:0x4CC
|
||||
JPADrawStripeX__FP18JPAEmitterWorkData = .text:0x8031C7E0; // type:function size:0x844
|
||||
JPADrawEmitterCallBackB__FP18JPAEmitterWorkData = .text:0x8031D030; // type:function size:0x24
|
||||
@@ -18536,7 +18536,7 @@ JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031DD1
|
||||
__ct__13JPAChildShapeFPCUc = .text:0x8031DD40; // type:function size:0x8
|
||||
JPALoadExTex__FP18JPAEmitterWorkData = .text:0x8031DD50; // type:function size:0x114
|
||||
__ct__13JPAExTexShapeFPCUc = .text:0x8031DE70; // type:function size:0x8
|
||||
fn_8031DE80 = .text:0x8031DE80; // type:function size:0x214
|
||||
fn_8031DE80__13JPAExTexShapeFP12JPABaseShapef = .text:0x8031DE80; // type:function size:0x214
|
||||
JPAVolumePoint__FP18JPAEmitterWorkData = .text:0x8031E0A0; // type:function size:0xD4
|
||||
JPAVolumeLine__FP18JPAEmitterWorkData = .text:0x8031E180; // type:function size:0x114
|
||||
JPAVolumeCircle__FP18JPAEmitterWorkData = .text:0x8031E2A0; // type:function size:0x204
|
||||
@@ -36210,12 +36210,12 @@ lbl_80546548 = .data:0x80546548; // type:object size:0x200 data:4byte
|
||||
lbl_80546748 = .data:0x80546748; // type:object size:0x190
|
||||
lbl_805468D8 = .data:0x805468D8; // type:object size:0x3F0
|
||||
lbl_80546CC8 = .data:0x80546CC8; // type:object size:0x98
|
||||
lbl_80546D60 = .data:0x80546D60; // type:object size:0x160
|
||||
lbl_80546D60 = .data:0x80546D60; // type:object size:0x144
|
||||
JParticle__jpa_crd = .data:0x80546EC0; // type:object size:0x20
|
||||
jumptable_80546EE0 = .data:0x80546EE0; // type:object size:0x2C scope:local
|
||||
jumptable_80546F0C = .data:0x80546F0C; // type:object size:0x2C scope:local
|
||||
jumptable_80546F38 = .data:0x80546F38; // type:object size:0x48 scope:local
|
||||
jpa_dl = .data:0x80546F80; // type:object size:0x20
|
||||
jumptable_80546F38 = .data:0x80546F38; // type:object size:0x2C scope:local
|
||||
jpa_dl = .data:0x80546F80; // type:object size:0x20 align:32
|
||||
jpa_dl_x = .data:0x80546FA0; // type:object size:0x20
|
||||
p_prj = .data:0x80546FC0; // type:object size:0xC
|
||||
p_direction = .data:0x80546FCC; // type:object size:0x1B4
|
||||
|
||||
+2
-2
@@ -1209,12 +1209,12 @@ config.libs = [
|
||||
"JParticle",
|
||||
[
|
||||
Object(Matching, "JSystem/JParticle/JPAResourceManager.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPAResource.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPAResource.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPABaseShape.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPAExtraShape.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPAChildShape.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPAExTexShape.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPADynamicsBlock.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPADynamicsBlock.cpp"),
|
||||
Object(NonMatching, "JSystem/JParticle/JPAFieldBlock.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPAKeyBlock.cpp"),
|
||||
Object(Matching, "JSystem/JParticle/JPATexture.cpp"),
|
||||
|
||||
@@ -91,13 +91,13 @@ public:
|
||||
u32 getTilingT() const { return (mpData->mFlags >> 28) & 0x01; } // was 26
|
||||
BOOL isGlblClrAnm() const { return mpData->mFlags & 0x00001000; }
|
||||
BOOL isGlblTexAnm() const { return mpData->mFlags & 0x00004000; }
|
||||
BOOL isPrjTex() const { return mpData->mFlags & 0x00100000; }
|
||||
bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00200000); }
|
||||
bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x00400000); }
|
||||
bool isClipOn() const { return !!(mpData->mFlags & 0x00800000); }
|
||||
BOOL isTexCrdAnm() const { return mpData->mFlags & 0x01000000; }
|
||||
bool isNoDrawParent() const { return !!(mpData->mFlags & 0x08000000); }
|
||||
bool isNoDrawChild() const { return !!(mpData->mFlags & 0x10000000); }
|
||||
BOOL isPrjTex() const { return mpData->mFlags & 0x00400000; } // was 0x00100000
|
||||
bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00800000); } // was 0x00200000
|
||||
bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x01000000); } // was 0x00400000
|
||||
BOOL isClipOn() const { return (mpData->mFlags & 0x02000000); } // was 0x00800000
|
||||
BOOL isTexCrdAnm() const { return mpData->mFlags & 0x04000000; } // was 0x01000000
|
||||
bool isNoDrawParent() const { return !!((mpData->mFlags >> 29) & 1); } // was 0x08000000
|
||||
bool isNoDrawChild() const { return !!((mpData->mFlags >> 30) & 1); } // was 0x10000000
|
||||
|
||||
BOOL isPrmAnm() const { return mpData->mClrFlg & 0x02; }
|
||||
BOOL isEnvAnm() const { return mpData->mClrFlg & 0x08; }
|
||||
@@ -177,6 +177,8 @@ void JPACalcClrIdxMerge(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPACalcClrIdxRandom(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPACalcColorCopy(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
|
||||
// SS addition
|
||||
void fn_8031C2C0(JPAEmitterWorkData*);
|
||||
void JPADrawStripe(JPAEmitterWorkData*);
|
||||
void JPADrawStripeX(JPAEmitterWorkData*);
|
||||
void JPADrawEmitterCallBackB(JPAEmitterWorkData*);
|
||||
@@ -208,6 +210,8 @@ void JPALoadTexAnm(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPASetPointSize(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPASetLineWidth(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPALoadCalcTexCrdMtxAnm(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
// SS addition
|
||||
void fn_8031A8C0(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPARegistAlpha(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPARegistEnv(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
void JPARegistAlphaEnv(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef JPAEXTEXSHAPE_H
|
||||
#define JPAEXTEXSHAPE_H
|
||||
|
||||
#include "JSystem/JParticle/JPABaseShape.h"
|
||||
#include "common.h"
|
||||
|
||||
class JPAEmitterWorkData;
|
||||
@@ -16,8 +17,9 @@ struct JPAExTexShapeData {
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ f32 mIndTexMtx[2][3];
|
||||
/* 0x24 */ s8 mExpScale;
|
||||
/* 0x25 */ u8 _0x25[0x4E - 0x25];
|
||||
/* 0x24 */ u8 _0x24[0x4C - 0x24];
|
||||
/* 0x4C */ u8 field_0x4C;
|
||||
/* 0x4D */ s8 mExpScale;
|
||||
/* 0x4E */ s8 mIndTexIdx;
|
||||
/* 0x4F */ s8 mSecTexIdx;
|
||||
};
|
||||
@@ -31,14 +33,16 @@ public:
|
||||
JPAExTexShape(u8 const*);
|
||||
|
||||
const f32* getIndTexMtx() const { return &mpData->mIndTexMtx[0][0]; }
|
||||
u8 getfield_0x4C() const { return mpData->field_0x4C; }
|
||||
s8 getExpScale() const { return mpData->mExpScale; }
|
||||
u8 getIndTexIdx() const { return mpData->mIndTexIdx; }
|
||||
u8 getSecTexIdx() const { return mpData->mSecTexIdx; }
|
||||
bool isUseIndirect() const { return !!(mpData->mFlags & 0x01); }
|
||||
bool isUseSecTex() const { return !!(mpData->mFlags & 0x0100); }
|
||||
BOOL isUseSecTex() const { return (mpData->mFlags & 0x0100); }
|
||||
|
||||
public:
|
||||
const JPAExTexShapeData* mpData;
|
||||
void fn_8031DE80(JPABaseShape *bsp, f32);
|
||||
};
|
||||
|
||||
void JPALoadExTex(JPAEmitterWorkData*);
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
void setOffsetPosition(const EGG::Vector3f& pos) { mOffsetPosition.set(pos); }
|
||||
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
|
||||
void getOffsetPosition(EGG::Vector3f& pos) { pos.set(mOffsetPosition); }
|
||||
u16 getRotateAngle() const { return mRotateAngle; }
|
||||
s16 getRotateAngle() const { return mRotateAngle; }
|
||||
void getGlobalPosition(EGG::Vector3f& pos) const { pos.set(mPosition); }
|
||||
f32 getParticleScaleX() const { return mParticleScaleX; }
|
||||
f32 getParticleScaleY() const { return mParticleScaleY; }
|
||||
|
||||
@@ -36,6 +36,10 @@ struct Vector3f : public nw4r::math::VEC3 {
|
||||
return *this;
|
||||
}
|
||||
|
||||
void mul(const Vector3f &v, const Vector3f &w) {
|
||||
set(v.x * w.x, v.y * w.y, v.z * w.z);
|
||||
}
|
||||
|
||||
Vector3f &operator*=(const Vector3f &v) {
|
||||
set(x * v.x, y * v.y, z * v.z);
|
||||
return *this;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Translation Unit: JPABaseShape
|
||||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAExTexShape.h"
|
||||
#include "egg/core/eggHeap.h"
|
||||
#include "JSystem/JParticle/JPABaseShape.h"
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
@@ -161,13 +162,11 @@ void JPACalcClrIdxNormal(JPAEmitterWorkData* work) {
|
||||
* JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
|
||||
void JPACalcClrIdxNormal(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
|
||||
JPABaseShape* shape = work->mpRes->getBsp();
|
||||
s16 age = param_1->mAge;
|
||||
s16 maxFrm = shape->getClrAnmMaxFrm();
|
||||
s16 keyFrame;
|
||||
if (age < maxFrm) {
|
||||
keyFrame = age;
|
||||
if (param_1->mAge < shape->getClrAnmMaxFrm()) {
|
||||
keyFrame = param_1->mAge;
|
||||
} else {
|
||||
keyFrame = maxFrm;
|
||||
keyFrame = shape->getClrAnmMaxFrm();
|
||||
}
|
||||
work->mClrKeyFrame = keyFrame;
|
||||
}
|
||||
@@ -183,8 +182,7 @@ void JPACalcClrIdxRepeat(JPAEmitterWorkData* work) {
|
||||
* JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle */
|
||||
void JPACalcClrIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
|
||||
JPABaseShape* shape = work->mpRes->getBsp();
|
||||
s32 tick = shape->getClrLoopOfst(param_1->mAnmRandom);
|
||||
tick = param_1->mAge + tick;
|
||||
s32 tick = param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom);
|
||||
work->mClrKeyFrame = tick % (shape->getClrAnmMaxFrm() + 1);
|
||||
}
|
||||
|
||||
@@ -355,6 +353,10 @@ void JPALoadCalcTexCrdMtxAnm(JPAEmitterWorkData* work, JPABaseParticle* param_1)
|
||||
GXLoadTexMtxImm(local_108, 0x1e, GX_MTX2x4);
|
||||
}
|
||||
|
||||
void fn_8031A8C0(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
|
||||
work->mpRes->getEts()->fn_8031DE80(work->mpRes->getBsp(), ptcl->getAge());
|
||||
}
|
||||
|
||||
/* 802778EC-80277940 27222C 0054+00 0/0 1/1 0/0 .text JPALoadTex__FP18JPAEmitterWorkData
|
||||
*/
|
||||
void JPALoadTex(JPAEmitterWorkData* work) {
|
||||
@@ -508,13 +510,13 @@ static void loadPrjAnm(JPAEmitterWorkData const* work, const Mtx srt) {
|
||||
}
|
||||
|
||||
/* 803C42E0-803C4300 021400 0020+00 10/9 0/0 0/0 .data jpa_dl */
|
||||
static u8 jpa_dl[32] = {
|
||||
static u8 ALIGN_DECL(32) jpa_dl[32] = {
|
||||
0x80, 0x00, 0x04, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
/* 803C4300-803C4320 021420 0020+00 1/0 0/0 0/0 .data jpa_dl_x */
|
||||
static u8 jpa_dl_x[32] = {
|
||||
static u8 ALIGN_DECL(32) jpa_dl_x[32] = {
|
||||
0x80, 0x00, 0x08, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x48, 0x00, 0x49, 0x01, 0x4A,
|
||||
0x02, 0x4B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
@@ -616,8 +618,8 @@ void JPADrawRotYBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
|
||||
if (param_1->checkStatus(8) == 0) {
|
||||
EGG::Vector3f local_48;
|
||||
MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
|
||||
f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
|
||||
f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
|
||||
f32 sinRot = nw4r::math::SinIdx(param_1->mRotateAngle);
|
||||
f32 cosRot = nw4r::math::CosIdx(param_1->mRotateAngle);
|
||||
Mtx local_38;
|
||||
f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
|
||||
f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
|
||||
@@ -742,12 +744,15 @@ static void rotTypeZ(f32 param_0, f32 param_1, Mtx& param_2) {
|
||||
static void rotTypeXYZ(f32 param_0, f32 param_1, Mtx& param_2) {
|
||||
f32 f3;
|
||||
f32 fVar1;
|
||||
f32 f4;
|
||||
f32 fVar2;
|
||||
f32 f4;
|
||||
f32 tmp;
|
||||
|
||||
|
||||
f3 = 0.33333298563957214f * (1.0f - param_1);
|
||||
f4 = f3 + 0.5773500204086304f * param_0;
|
||||
fVar1 = f3 - 0.5773500204086304f * param_0;
|
||||
tmp = 0.5773500204086304f * param_0;
|
||||
f4 = f3 + tmp;
|
||||
fVar1 = f3 - tmp;
|
||||
fVar2 = f3 + param_1;
|
||||
param_2[0][0] = fVar2;
|
||||
param_2[0][1] = fVar1;
|
||||
@@ -838,12 +843,12 @@ void JPADrawDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
|
||||
EGG::Vector3f local_78;
|
||||
p_direction[param_0->mDirType](param_0, param_1, &local_6c);
|
||||
if (!local_6c.isZero()) {
|
||||
local_6c.normalize();
|
||||
local_6c.normalise();
|
||||
local_78 = param_1->mBaseAxis.cross(local_6c);
|
||||
if (!local_78.isZero()) {
|
||||
local_78.normalize();
|
||||
local_78.normalise();
|
||||
param_1->mBaseAxis = local_6c.cross(local_78);
|
||||
param_1->mBaseAxis.normalize();
|
||||
param_1->mBaseAxis.normalise();
|
||||
Mtx local_60;
|
||||
f32 fVar1 = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
|
||||
f32 fVar2 = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
|
||||
@@ -879,12 +884,12 @@ void JPADrawRotDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1)
|
||||
EGG::Vector3f local_78;
|
||||
p_direction[param_0->mDirType](param_0, param_1, &local_6c);
|
||||
if (!local_6c.isZero()) {
|
||||
local_6c.normalize();
|
||||
local_6c.normalise();
|
||||
local_78 = param_1->mBaseAxis.cross(local_6c);
|
||||
if (!local_78.isZero()) {
|
||||
local_78.normalize();
|
||||
local_78.normalise();
|
||||
param_1->mBaseAxis = local_6c.cross(local_78);
|
||||
param_1->mBaseAxis.normalize();
|
||||
param_1->mBaseAxis.normalise();
|
||||
f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
|
||||
f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
|
||||
Mtx auStack_80;
|
||||
@@ -924,7 +929,7 @@ void JPADrawDBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
|
||||
param_0->mPosCamMtx[2][2]);
|
||||
local_70 = local_70.cross(aTStack_7c);
|
||||
if (!local_70.isZero()) {
|
||||
local_70.normalize();
|
||||
local_70.normalise();
|
||||
MTXMultVecSR(param_0->mPosCamMtx, local_70, local_70);
|
||||
EGG::Vector3f local_88;
|
||||
MTXMultVec(param_0->mPosCamMtx, param_1->mPosition, local_88);
|
||||
@@ -1023,6 +1028,10 @@ JPANode<JPABaseParticle>* getPrev(JPANode<JPABaseParticle>* param_0) {
|
||||
|
||||
typedef JPANode<JPABaseParticle>* (*getNodeFunc)(JPANode<JPABaseParticle>*);
|
||||
|
||||
void fn_8031C2C0(JPAEmitterWorkData* work) {
|
||||
work->mpRes->getEts()->fn_8031DE80(work->mpRes->getBsp(), work->mpEmtr->getAge());
|
||||
}
|
||||
|
||||
/* 80279374-8027996C 273CB4 05F8+00 0/0 1/1 0/0 .text JPADrawStripe__FP18JPAEmitterWorkData */
|
||||
void JPADrawStripe(JPAEmitterWorkData* param_0) {
|
||||
JPABaseShape* shape = param_0->mpRes->getBsp();
|
||||
@@ -1074,16 +1083,16 @@ void JPADrawStripe(JPAEmitterWorkData* param_0) {
|
||||
if (local_f8.isZero()) {
|
||||
local_f8.set(0.0f, 1.0f, 0.0f);
|
||||
} else {
|
||||
local_f8.normalize();
|
||||
local_f8.normalise();
|
||||
}
|
||||
local_104 = particle->mBaseAxis.cross(local_f8);
|
||||
if (local_104.isZero()) {
|
||||
local_104.set(1.0f, 0.0f, 0.0f);
|
||||
} else {
|
||||
local_104.normalize();
|
||||
local_104.normalise();
|
||||
}
|
||||
particle->mBaseAxis = local_f8.cross( local_104);
|
||||
particle->mBaseAxis.normalize();
|
||||
particle->mBaseAxis.normalise();
|
||||
|
||||
local_c8[0][0] = local_104.x;
|
||||
local_c8[0][1] = local_f8.x;
|
||||
@@ -1164,16 +1173,16 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
|
||||
if (local_c0.isZero()) {
|
||||
local_c0.set(0.0f, 1.0f, 0.0f);
|
||||
} else {
|
||||
local_c0.normalize();
|
||||
local_c0.normalise();
|
||||
}
|
||||
local_cc = particle->mBaseAxis.cross(local_c0);
|
||||
if (local_cc.isZero()) {
|
||||
local_cc.set(1.0f, 0.0f, 0.0f);
|
||||
} else {
|
||||
local_cc.normalize();
|
||||
local_cc.normalise();
|
||||
}
|
||||
particle->mBaseAxis = local_c0.cross( local_cc);
|
||||
particle->mBaseAxis.normalize();
|
||||
particle->mBaseAxis.normalise();
|
||||
|
||||
local_90[0][0] = local_cc.x;
|
||||
local_90[0][1] = local_c0.x;
|
||||
@@ -1214,16 +1223,16 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
|
||||
if (local_c0.isZero()) {
|
||||
local_c0.set(0.0f, 1.0f, 0.0f);
|
||||
} else {
|
||||
local_c0.normalize();
|
||||
local_c0.normalise();
|
||||
}
|
||||
local_cc = particle->mBaseAxis.cross(local_c0);
|
||||
if (local_cc.isZero()) {
|
||||
local_cc.set(1.0f, 0.0f, 0.0f);
|
||||
} else {
|
||||
local_cc.normalize();
|
||||
local_cc.normalise();
|
||||
}
|
||||
particle->mBaseAxis = local_c0.cross( local_cc);
|
||||
particle->mBaseAxis.normalize();
|
||||
particle->mBaseAxis.normalise();
|
||||
|
||||
local_90[0][0] = local_cc.x;
|
||||
local_90[0][1] = local_c0.x;
|
||||
@@ -1290,10 +1299,10 @@ static void makeColorTable(GXColor** o_color_table, JPAClrAnmKeyData const* i_da
|
||||
j++;
|
||||
if (j < param_2) {
|
||||
f32 base_step = 1.0f / (i_data[j].index - i_data[j - 1].index);
|
||||
r_step = base_step * ((f32)i_data[j].color.r - r);
|
||||
g_step = base_step * ((f32)i_data[j].color.g - g);
|
||||
b_step = base_step * ((f32)i_data[j].color.b - b);
|
||||
a_step = base_step * ((f32)i_data[j].color.a - a);
|
||||
r_step = base_step * (i_data[j].color.r - r);
|
||||
g_step = base_step * (i_data[j].color.g - g);
|
||||
b_step = base_step * (i_data[j].color.b - b);
|
||||
a_step = base_step * (i_data[j].color.a - a);
|
||||
} else {
|
||||
r_step = g_step = b_step = a_step = 0.0f;
|
||||
}
|
||||
|
||||
@@ -102,8 +102,10 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
|
||||
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumeCalcData.mVolumePos.set(rad * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(theta), -rad * nw4r::math::SinIdx(phi),
|
||||
rad * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(theta));
|
||||
work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
|
||||
work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
|
||||
work->mVolumeCalcData.mVelOmni.set(
|
||||
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
|
||||
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
|
||||
);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
@@ -118,8 +120,10 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
|
||||
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
|
||||
work->mVolumeCalcData.mVolumePos.set(
|
||||
rad * nw4r::math::SinIdx(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * nw4r::math::CosIdx(theta));
|
||||
work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
|
||||
work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
|
||||
work->mVolumeCalcData.mVelOmni.set(
|
||||
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
|
||||
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
|
||||
);
|
||||
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
|
||||
work->mVolumeCalcData.mVolumePos.z);
|
||||
}
|
||||
@@ -135,8 +139,10 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) {
|
||||
work->mVolumeCalcData.mVelAxis.x + work->mVolumeSize * nw4r::math::SinIdx(theta),
|
||||
work->mVolumeCalcData.mVelAxis.y,
|
||||
work->mVolumeCalcData.mVelAxis.z + work->mVolumeSize * nw4r::math::CosIdx(theta));
|
||||
work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
|
||||
work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
|
||||
work->mVolumeCalcData.mVelOmni.set(
|
||||
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
|
||||
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
|
||||
);
|
||||
}
|
||||
|
||||
/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
|
||||
|
||||
@@ -37,3 +37,7 @@ void JPALoadExTex(JPAEmitterWorkData* work) {
|
||||
JPAExTexShape::JPAExTexShape(u8 const* data) {
|
||||
mpData = (const JPAExTexShapeData*)data;
|
||||
}
|
||||
|
||||
void JPAExTexShape::fn_8031DE80(JPABaseShape* shp, f32) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@@ -79,8 +79,9 @@ static u8 jpa_crd[32] ALIGN_DECL(32) = {
|
||||
|
||||
/* 80274080-802755E8 26E9C0 1568+00 2/0 1/1 0/0 .text init__11JPAResourceFP7EGG::Heap */
|
||||
void JPAResource::init(EGG::Heap* heap) {
|
||||
BOOL is_glbl_clr_anm = mpBaseShape->isGlblClrAnm();
|
||||
BOOL is_glbl_tex_anm = mpBaseShape->isGlblTexAnm();
|
||||
// The s32s here are probably fake but fixes the regswaps
|
||||
s32 is_glbl_clr_anm = mpBaseShape->isGlblClrAnm();
|
||||
s32 is_glbl_tex_anm = mpBaseShape->isGlblTexAnm();
|
||||
BOOL is_prm_anm = mpBaseShape->isPrmAnm();
|
||||
BOOL is_env_anm = mpBaseShape->isEnvAnm();
|
||||
BOOL is_tex_anm = mpBaseShape->isTexAnm();
|
||||
@@ -354,6 +355,9 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
|
||||
if (is_draw_parent && base_type_5_6) {
|
||||
mpDrawEmitterFuncListNum++;
|
||||
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
|
||||
mpDrawEmitterFuncListNum++;
|
||||
}
|
||||
}
|
||||
|
||||
mpDrawEmitterFuncListNum++;
|
||||
@@ -395,6 +399,10 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
mpDrawEmitterFuncList[func_no] = &JPADrawStripeX;
|
||||
func_no++;
|
||||
}
|
||||
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
|
||||
mpDrawEmitterFuncList[func_no] = &fn_8031C2C0;
|
||||
func_no++;
|
||||
}
|
||||
}
|
||||
|
||||
mpDrawEmitterFuncList[func_no] = &JPADrawEmitterCallBackB;
|
||||
@@ -473,8 +481,8 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
mpDrawEmitterChildFuncListNum++;
|
||||
}
|
||||
|
||||
if (mpChildShape != NULL && !mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
|
||||
&& !mpChildShape->isColorInherited()) {
|
||||
if (mpChildShape != NULL && ((!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
|
||||
&& !mpChildShape->isColorInherited()) || is_draw_child && child_type_5_6)) {
|
||||
mpDrawEmitterChildFuncListNum++;
|
||||
}
|
||||
|
||||
@@ -503,9 +511,12 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
func_no++;
|
||||
}
|
||||
|
||||
if (mpChildShape != NULL && !mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
|
||||
&& !mpChildShape->isColorInherited()) {
|
||||
mpDrawEmitterChildFuncList[func_no] = &JPARegistChildPrmEnv;
|
||||
if (mpChildShape != NULL) {
|
||||
if (!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited() && !mpChildShape->isColorInherited()) {
|
||||
mpDrawEmitterChildFuncList[func_no] = &JPARegistChildPrmEnv;
|
||||
} else if (is_draw_child && child_type_5_6) {
|
||||
mpDrawEmitterChildFuncList[func_no] = &fn_8031DBA0;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_draw_parent && !base_type_5_6) {
|
||||
@@ -517,9 +528,16 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
if (!is_glbl_tex_anm && is_tex_anm) {
|
||||
mpDrawParticleFuncListNum++;
|
||||
}
|
||||
|
||||
if ((base_type_0_1 && is_enable_scale_anm) || (is_tex_crd_anm && !is_prj_tex)) {
|
||||
|
||||
if (base_type_0_1 && is_enable_scale_anm) {
|
||||
mpDrawParticleFuncListNum++;
|
||||
} else {
|
||||
if (is_tex_crd_anm && !is_prj_tex) {
|
||||
mpDrawParticleFuncListNum++;
|
||||
}
|
||||
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
|
||||
mpDrawParticleFuncListNum++;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!is_glbl_clr_anm && (is_prm_anm || is_env_anm || is_enable_alpha_anm))
|
||||
@@ -591,9 +609,16 @@ void JPAResource::init(EGG::Heap* heap) {
|
||||
mpDrawParticleFuncList[func_no] = &JPASetLineWidth;
|
||||
func_no++;
|
||||
}
|
||||
} else if (is_tex_crd_anm && !is_prj_tex) {
|
||||
mpDrawParticleFuncList[func_no] = &JPALoadCalcTexCrdMtxAnm;
|
||||
func_no++;
|
||||
} else {
|
||||
if (is_tex_crd_anm && !is_prj_tex) {
|
||||
mpDrawParticleFuncList[func_no] = &JPALoadCalcTexCrdMtxAnm;
|
||||
func_no++;
|
||||
}
|
||||
|
||||
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
|
||||
mpDrawParticleFuncList[func_no] = &fn_8031A8C0;
|
||||
func_no++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_glbl_clr_anm) {
|
||||
@@ -997,7 +1022,7 @@ void JPAResource::setCTev(JPAEmitterWorkData* work) {
|
||||
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
|
||||
GXSetArray(GX_VA_TEX0, jpa_crd, 2);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP1, GX_COLOR_NULL);
|
||||
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetNumIndStages(0);
|
||||
@@ -1101,7 +1126,8 @@ void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
|
||||
MTXConcat(work->mRotationMtx, local_rot_mtx, work->mGlobalRot);
|
||||
MTXConcat(work->mGlobalRot, local_scl_mtx, work->mGlobalSR);
|
||||
work->mEmitterPos.set(work->mpEmtr->mLocalTrs);
|
||||
work->mGlobalScl *= work->mpEmtr->mLocalScl;
|
||||
work->mGlobalScl.mul(work->mpEmtr->mGlobalScl, work->mpEmtr->mLocalScl);
|
||||
|
||||
JPAGetDirMtx(work->mpEmtr->mLocalDir, work->mDirectionMtx);
|
||||
work->mPublicScale.set(work->mpEmtr->mGlobalScl);
|
||||
MTXMultVec(global_mtx, work->mpEmtr->mLocalTrs, work->mGlobalPos);
|
||||
@@ -1116,8 +1142,9 @@ void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
|
||||
MTXConcat(work->mpEmtr->mGlobalRot, mtx, work->mGlobalRot);
|
||||
MTXMultVecSR(work->mGlobalRot, work->mpEmtr->mLocalDir, work->mGlobalEmtrDir);
|
||||
}
|
||||
|
||||
/*
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
static u8 jpa_resource_padding[28] = {0};
|
||||
#pragma pop
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user