Almost done

This commit is contained in:
robojumper
2025-04-27 15:34:52 +02:00
parent ca2f6bde48
commit 9e5c1c9cbb
6 changed files with 63 additions and 21 deletions
+1
View File
@@ -1778,6 +1778,7 @@ JSystem/JParticle/JPAChildShape.cpp:
JSystem/JParticle/JPAExTexShape.cpp:
.text start:0x8031DD50 end:0x8031E094 align:16
.sdata2 start:0x8057CEB8 end:0x8057CED8
JSystem/JParticle/JPADynamicsBlock.cpp:
.text start:0x8031E0A0 end:0x8031F020 align:16
+1 -1
View File
@@ -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__13JPAExTexShapeFP12JPABaseShapef = .text:0x8031DE80; // type:function size:0x214
fn_8031DE80__13JPAExTexShapeCFPC12JPABaseShapef = .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
+11 -2
View File
@@ -17,7 +17,16 @@ struct JPAExTexShapeData {
/* 0x08 */ u32 mFlags;
/* 0x0C */ f32 mIndTexMtx[2][3];
/* 0x24 */ u8 _0x24[0x4C - 0x24];
/* 0x24 */ f32 field_0x24;
/* 0x28 */ f32 field_0x28;
/* 0x2C */ f32 field_0x2C;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 field_0x38;
/* 0x3C */ f32 field_0x3C;
/* 0x40 */ f32 field_0x40;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ f32 field_0x48;
/* 0x4C */ u8 field_0x4C;
/* 0x4D */ s8 mExpScale;
/* 0x4E */ s8 mIndTexIdx;
@@ -42,7 +51,7 @@ public:
public:
const JPAExTexShapeData* mpData;
void fn_8031DE80(JPABaseShape *bsp, f32);
void fn_8031DE80(const JPABaseShape *bsp, f32) const;
};
void JPALoadExTex(JPAEmitterWorkData*);
+14 -14
View File
@@ -561,8 +561,8 @@ void JPADrawRotBillboard(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(param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx(param_1->mRotateAngle);
f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
@@ -618,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(param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx(param_1->mRotateAngle);
f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
Mtx local_38;
f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
@@ -878,8 +878,8 @@ void JPADrawDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
* JPADrawRotDirection__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
if (param_1->checkStatus(8) == 0) {
f32 sinRot = nw4r::math::SinIdx(param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx(param_1->mRotateAngle);
f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
EGG::Vector3f local_6c;
EGG::Vector3f local_78;
p_direction[param_0->mDirType](param_0, param_1, &local_6c);
@@ -959,8 +959,8 @@ void JPADrawDBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
* JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotation(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
if (param_1->checkStatus(8) == 0) {
f32 sinRot = nw4r::math::SinIdx(param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx(param_1->mRotateAngle);
f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
Mtx auStack_88;
@@ -1073,8 +1073,8 @@ void JPADrawStripe(JPAEmitterWorkData* param_0) {
param_0->mpCurNode = node;
JPABaseParticle* particle = node->getObject();
local_ec.set(particle->mPosition);
dVar11 = nw4r::math::SinIdx(particle->mRotateAngle);
dVar12 = nw4r::math::CosIdx(particle->mRotateAngle);
dVar11 = nw4r::math::SinIdx((s16)particle->mRotateAngle);
dVar12 = nw4r::math::CosIdx((s16)particle->mRotateAngle);
local_e0[0].set(-particle->mParticleScaleX * dVar14, 0.0f, 0.0f);
local_e0[0].set(local_e0[0].x * dVar12, 0.0f, local_e0[0].x * dVar11);
local_e0[1].set(particle->mParticleScaleX * dVar13, 0.0f, 0.0f);
@@ -1163,8 +1163,8 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
param_0->mpCurNode = node;
JPABaseParticle* particle = node->getObject();
local_b4.set(particle->mPosition);
dVar11 = nw4r::math::SinIdx(particle->mRotateAngle);
dVar12 = nw4r::math::CosIdx(particle->mRotateAngle);
dVar11 = nw4r::math::SinIdx((s16)particle->mRotateAngle);
dVar12 = nw4r::math::CosIdx((s16)particle->mRotateAngle);
local_a8[0].set(-particle->mParticleScaleX * local_154, 0.0f, 0.0f);
local_a8[0].set(local_a8[0].x * dVar12, 0.0f, local_a8[0].x * dVar11);
local_a8[1].set(particle->mParticleScaleX * local_158, 0.0f, 0.0f);
@@ -1213,8 +1213,8 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
param_0->mpCurNode = node;
JPABaseParticle* particle = node->getObject();
local_b4.set(particle->mPosition);
dVar11 = nw4r::math::CosIdx(particle->mRotateAngle);
dVar12 = -nw4r::math::SinIdx(particle->mRotateAngle);
dVar11 = nw4r::math::CosIdx((s16)particle->mRotateAngle);
dVar12 = -nw4r::math::SinIdx((s16)particle->mRotateAngle);
local_a8[0].set(-particle->mParticleScaleY * local_15c, 0.0f, 0.0f);
local_a8[0].set(local_a8[0].x * dVar12, 0.0f, local_a8[0].x * dVar11);
local_a8[1].set(particle->mParticleScaleY * local_160, 0.0f, 0.0f);
+34 -2
View File
@@ -6,6 +6,7 @@
#include "JSystem/JParticle/JPAExTexShape.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "nw4r/math/math_triangular.h"
#include "rvl/MTX.h"
#include "rvl/GX.h"
@@ -38,6 +39,37 @@ JPAExTexShape::JPAExTexShape(u8 const* data) {
mpData = (const JPAExTexShapeData*)data;
}
void JPAExTexShape::fn_8031DE80(JPABaseShape* shp, f32) {
// TODO
void JPAExTexShape::fn_8031DE80(const JPABaseShape *shp, f32 f) const {
f32 _0x38_x_0x24 = f * mpData->field_0x38 + mpData->field_0x24;
f32 _0x3C_x_0x28 = f * mpData->field_0x3C + mpData->field_0x28;
f32 _0x40_x_0x2C = f * mpData->field_0x40 + mpData->field_0x2C;
f32 _0x44_x_0x30 = f * mpData->field_0x44 + mpData->field_0x30;
f32 tilingS = 0.5f * (shp->getTilingS() + 1.0f);
f32 tilingT = 0.5f * (shp->getTilingT() + 1.0f);
s16 v = f * mpData->field_0x48 * 32768.0f + mpData->field_0x34 * 32768.0f;
f32 sin = nw4r::math::SinIdx(v);
f32 cos = nw4r::math::CosIdx(v);
f32 fS2 = tilingS + _0x38_x_0x24;
f32 fT2 = tilingT + _0x3C_x_0x28;
Mtx texMtx;
texMtx[0][0] = _0x40_x_0x2C * cos;
texMtx[0][1] = -_0x40_x_0x2C * sin;
texMtx[0][2] = 0.0f;
texMtx[0][3] = tilingS + _0x40_x_0x2C * (sin * fT2 - cos * fS2);
texMtx[1][0] = _0x44_x_0x30 * sin;
texMtx[1][1] = _0x44_x_0x30 * cos;
texMtx[1][2] = 0.0f;
texMtx[1][3] = tilingT + (-_0x44_x_0x30) * (sin * fS2 + cos * fT2);
texMtx[2][0] = 0.0f;
texMtx[2][1] = 0.0f;
texMtx[2][2] = 0.0f;
texMtx[2][3] = 1.0f;
GXLoadTexMtxImm(texMtx, 0x24, GX_MTX2x4);
}
+2 -2
View File
@@ -155,8 +155,8 @@ void JPABaseParticle::init_c(JPAEmitterWorkData* work, JPABaseParticle* parent)
f32 base_speed = csp->getBaseVel() * (csp->getBaseVelRndm() * emtr->get_r_zp() + 1.0f);
EGG::Vector3f base_vel(emtr->get_r_zp(), emtr->get_r_zp(), emtr->get_r_zp());
base_vel.setLength(base_speed);
mVelType1 = csp->getVelInhRate() * parent->mVelType1 + base_vel;
mVelType0 = csp->getVelInhRate() * parent->mVelType2;
mVelType1 = parent->mVelType1 * csp->getVelInhRate() + base_vel;
mVelType0 = parent->mVelType2 * csp->getVelInhRate();
mMoment = parent->mMoment;
if (csp->isFieldAffected()) {