summaryrefslogtreecommitdiff
path: root/src/m_Do/m_Do_ext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/m_Do/m_Do_ext.cpp')
-rw-r--r--src/m_Do/m_Do_ext.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp
index 3576c4c76f..15b42adaf5 100644
--- a/src/m_Do/m_Do_ext.cpp
+++ b/src/m_Do/m_Do_ext.cpp
@@ -3293,6 +3293,94 @@ asm int mDoExt_McaMorfSO::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_
#endif
/* 80010B68-80010E70 00B4A8 0308+00 1/0 0/0 0/0 .text calc__16mDoExt_McaMorfSOFv */
+#ifdef NONMATCHING
+// matches with literals
+void mDoExt_McaMorfSO::calc() {
+ if (mpModel != NULL) {
+ u16 jnt_no = J3DMtxCalc::getJoint()->getJntNo();
+ j3dSys.setCurrentMtxCalc(this);
+
+ J3DTransformInfo trans;
+ J3DTransformInfo* trans_p;
+ if (mpTransformInfo == NULL) {
+ trans_p = &trans;
+ } else {
+ trans_p = &mpTransformInfo[jnt_no];
+ }
+
+ Quaternion quat;
+ Quaternion* quat_p;
+ if (mpQuat == NULL) {
+ quat_p = &quat;
+ } else {
+ quat_p = &mpQuat[jnt_no];
+ }
+
+ if (mpAnm == NULL) {
+ *trans_p = mpModel->getModelData()->getJointNodePointer(jnt_no)->getTransformInfo();
+
+ if (mpCallback1 != NULL) {
+ mpCallback1->execute(jnt_no, trans_p);
+ }
+
+ JMAEulerToQuat(trans_p->mRotation.x, trans_p->mRotation.y, trans_p->mRotation.z,
+ quat_p);
+ J3DMtxCalcCalcTransformMaya::calcTransform(*trans_p);
+ } else if (mCurMorf >= 1.0f || mpTransformInfo == NULL || mpQuat == NULL) {
+ getTransform(jnt_no, trans_p);
+
+ if (mpCallback1 != NULL) {
+ mpCallback1->execute(jnt_no, trans_p);
+ }
+
+ JMAEulerToQuat(trans_p->mRotation.x, trans_p->mRotation.y, trans_p->mRotation.z,
+ quat_p);
+ J3DMtxCalcCalcTransformMaya::calcTransform(*trans_p);
+ } else {
+ f32 lerp_factor;
+ if (mMorfNone) {
+ lerp_factor = 1.0f;
+ } else {
+ lerp_factor = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
+ }
+ f32 inv_lerp_factor = 1.0f - lerp_factor;
+
+ J3DTransformInfo trans2;
+ getTransform(jnt_no, &trans2);
+
+ if (mpCallback1 != NULL) {
+ mpCallback1->execute(jnt_no, &trans2);
+ }
+
+ Quaternion quat2;
+ JMAEulerToQuat(trans2.mRotation.x, trans2.mRotation.y, trans2.mRotation.z, &quat2);
+ JMAQuatLerp(quat_p, &quat2, lerp_factor, quat_p);
+
+ Mtx mtx;
+ mDoMtx_quat(mtx, quat_p);
+
+ trans_p->mTranslate.x = trans_p->mTranslate.x * inv_lerp_factor
+ + trans2.mTranslate.x * lerp_factor;
+ trans_p->mTranslate.y = trans_p->mTranslate.y * inv_lerp_factor
+ + trans2.mTranslate.y * lerp_factor;
+ trans_p->mTranslate.z = trans_p->mTranslate.z * inv_lerp_factor
+ + trans2.mTranslate.z * lerp_factor;
+ trans_p->mScale.x = trans_p->mScale.x * inv_lerp_factor
+ + trans2.mScale.x * lerp_factor;
+ trans_p->mScale.y = trans_p->mScale.y * inv_lerp_factor
+ + trans2.mScale.y * lerp_factor;
+ trans_p->mScale.z = trans_p->mScale.z * inv_lerp_factor
+ + trans2.mScale.z * lerp_factor;
+
+ mDoExt_setJ3DData(mtx, trans_p, jnt_no);
+ }
+
+ if (mpCallback2 != NULL) {
+ mpCallback2->execute(jnt_no);
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -3301,9 +3389,56 @@ asm void mDoExt_McaMorfSO::calc() {
#include "asm/m_Do/m_Do_ext/calc__16mDoExt_McaMorfSOFv.s"
}
#pragma pop
+#endif
/* 80010E70-800110B0 00B7B0 0240+00 1/1 5/5 208/208 .text
* setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff */
+#ifdef NONMATCHING
+// matches with literals
+void mDoExt_McaMorfSO::setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf, f32 i_rate,
+ f32 i_start, f32 i_end) {
+ mpAnm = i_anm;
+ setStartFrame(i_start);
+
+ if (i_end < 0.0f) {
+ if (mpAnm == NULL) {
+ mFrameCtrl.init(0);
+ } else {
+ mFrameCtrl.init(mpAnm->getFrameMax());
+ }
+ } else {
+ mFrameCtrl.init(i_end);
+ }
+
+ if (i_anm != NULL && i_attr < 0) {
+ i_attr = i_anm->getAttribute();
+ }
+
+ setPlayMode(i_attr);
+ setPlaySpeed(i_rate);
+
+ if (i_rate >= 0.0f) {
+ setFrame(i_start);
+ } else {
+ setFrame(mFrameCtrl.getEnd());
+ }
+
+ setLoopFrame(getFrame());
+ setMorf(i_morf);
+
+ if (mpSound != NULL) {
+ if (i_anm != NULL) {
+ mpBas = static_cast<mDoExt_transAnmBas*>(i_anm)->getBas();
+ } else {
+ mpBas = NULL;
+ }
+
+ if (mpBas != NULL) {
+ mpSound->initAnime(mpBas, getPlaySpeed() >= 0.0f, getLoopFrame(), getFrame());
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -3313,6 +3448,7 @@ asm void mDoExt_McaMorfSO::setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf
#include "asm/m_Do/m_Do_ext/setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff.s"
}
#pragma pop
+#endif
/* 800110B0-80011154 00B9F0 00A4+00 0/0 5/5 143/143 .text play__16mDoExt_McaMorfSOFUlSc
*/