diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/JSystem/JParticle/JPABaseShape.cpp | 28 | ||||
| -rw-r--r-- | src/JSystem/JParticle/JPAExTexShape.cpp | 36 | ||||
| -rw-r--r-- | src/JSystem/JParticle/JPAParticle.cpp | 4 |
3 files changed, 50 insertions, 18 deletions
diff --git a/src/JSystem/JParticle/JPABaseShape.cpp b/src/JSystem/JParticle/JPABaseShape.cpp index 6e600a1d..ba13d593 100644 --- a/src/JSystem/JParticle/JPABaseShape.cpp +++ b/src/JSystem/JParticle/JPABaseShape.cpp @@ -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); diff --git a/src/JSystem/JParticle/JPAExTexShape.cpp b/src/JSystem/JParticle/JPAExTexShape.cpp index 74274c62..3264be66 100644 --- a/src/JSystem/JParticle/JPAExTexShape.cpp +++ b/src/JSystem/JParticle/JPAExTexShape.cpp @@ -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); } diff --git a/src/JSystem/JParticle/JPAParticle.cpp b/src/JSystem/JParticle/JPAParticle.cpp index 195295ad..f6aa642c 100644 --- a/src/JSystem/JParticle/JPAParticle.cpp +++ b/src/JSystem/JParticle/JPAParticle.cpp @@ -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()) { |
