// // Generated By: dol2asm // Translation Unit: JPAExtraShape // #include "JSystem/JParticle/JPAExtraShape.h" #include "JSystem/JMath/JMATrigonometric.h" #include "JSystem/JParticle/JPAParticle.h" #include "JSystem/JParticle/JPAResource.h" #include "JSystem/JParticle/JPAResourceManager.h" #include "dol2asm.h" #include "dolphin/os/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; } }