diff --git a/include/Game/Entities/BigFoot.h b/include/Game/Entities/BigFoot.h index 76870dc2a..a20c16b08 100644 --- a/include/Game/Entities/BigFoot.h +++ b/include/Game/Entities/BigFoot.h @@ -123,34 +123,34 @@ struct Obj : public EnemyBase { // _00 = VTBL // _00-_2BC = EnemyBase - FSM* m_fsm; // _2BC - f32 m_stateTimer; // _2C0 - StateID m_nextState; // _2C4 - Vector3f m_targetPosition; // _2C8 - f32 _2D4; // _2D4 - f32 m_flickWalkTimeMax; // _2D8 - u8 _2DC; // _2DC - u8 _2DD; // _2DD - bool m_isEnraged; // _2DE, next walk cycle will be fast - IKSystemMgr* m_IKSystemMgr; // _2E0 - IKSystemParms* m_IKSystemParms; // _2E4 - BigFootGroundCallBack* m_groundCallBack; // _2E8 - BigFootShadowMgr* m_shadowMgr; // _2EC - Vector3f _2F0[16]; // _2F0 - efx::TChasePos2* _3B0[4]; // _3B0 - efx::TDamaFootw* _3C0[4]; // _3C0 - efx::TDamaSmoke* _3D0[3]; // _3D0 - efx::TOdamaHahen* _3DC[3][4]; // _3DC - efx::TDamaDeadElecA* _40C[3][4]; // _40C - efx::TDamaDeadElecB* _43C[2][4]; // _43C - efx::TOdamaDeadHahenA* _45C[2][4]; // _45C - efx::TOdamaDeadHahenB* _47C[4]; // _47C - efx::TOdamaDeadHahenC1* _48C; // _48C - efx::TOdamaDeadHahenC2* _490; // _490 - efx::TOdamaFur1* _494; // _494 - efx::TOdamaFur2* _498[4]; // _498 - Sys::MatLoopAnimator* m_matLoopAnimator; // _4A8 - // _4AC = PelletView + FSM* m_fsm; // _2BC + f32 m_stateTimer; // _2C0 + StateID m_nextState; // _2C4 + Vector3f m_targetPosition; // _2C8 + f32 _2D4; // _2D4 + f32 m_flickWalkTimeMax; // _2D8 + bool _2DC; // _2DC + bool m_isSmoking; // _2DD + bool m_isEnraged; // _2DE, next walk cycle will be fast + IKSystemMgr* m_ikSystemMgr; // _2E0 + IKSystemParms* m_ikSystemParms; // _2E4 + BigFootGroundCallBack* m_groundCallBack; // _2E8 + BigFootShadowMgr* m_shadowMgr; // _2EC + Vector3f m_jointPositions[4][4]; // _2F0 + efx::TChasePos2* _3B0[4]; // _3B0 + efx::TDamaFootw* _3C0[4]; // _3C0 + efx::TDamaSmoke* _3D0[3]; // _3D0 + efx::TOdamaHahen* _3DC[3][4]; // _3DC + efx::TDamaDeadElecA* m_fxElectricDeath1[3][4]; // _40C + efx::TDamaDeadElecB* m_fxElectricDeath2[2][4]; // _43C + efx::TOdamaDeadHahenA* m_fxShards1[2][4]; // _45C + efx::TOdamaDeadHahenB* m_fxShards2[4]; // _47C + efx::TOdamaDeadHahenC1* m_fxShards3; // _48C + efx::TOdamaDeadHahenC2* m_fxShards4; // _490 + efx::TOdamaFur1* m_fxMainHair; // _494 + efx::TOdamaFur2* m_fxLegHair[4]; // _498 + Sys::MatLoopAnimator* m_matLoopAnimator; // _4A8 + // _4AC = PelletView }; struct Mgr : public EnemyMgrBase { diff --git a/src/plugProjectNishimuraU/BigFoot.cpp b/src/plugProjectNishimuraU/BigFoot.cpp index 3cf290624..93fdaa2a0 100644 --- a/src/plugProjectNishimuraU/BigFoot.cpp +++ b/src/plugProjectNishimuraU/BigFoot.cpp @@ -2,6 +2,7 @@ #include "Game/EnemyFunc.h" #include "Game/IKSystemBase.h" #include "nans.h" +#include "Dolphin/rand.h" namespace Game { namespace BigFoot { @@ -476,7 +477,7 @@ void Obj::doFinishStoneState() { EnemyBase::doFinishStoneState(); EnemyFunc::flickStickPikmin(this, 1.0f, 10.0f, 0.0f, -1000.0f, nullptr); - if (_2DD) { + if (m_isSmoking) { startPinchJointEffect(); } @@ -907,8 +908,8 @@ lbl_802C8CD0: */ void Obj::createIKSystem() { - m_IKSystemMgr = new IKSystemMgr; - m_IKSystemParms = new IKSystemParms; + m_ikSystemMgr = new IKSystemMgr; + m_ikSystemParms = new IKSystemParms; m_groundCallBack = new BigFootGroundCallBack(this); } @@ -919,7 +920,7 @@ void Obj::createIKSystem() */ void Obj::setupIKSystem() { - m_IKSystemMgr->init(this, nullptr); + m_ikSystemMgr->init(this, nullptr); char* lfoot[] = { "lfoot1jnt", "lfoot2jnt", "lfoot3jnt" }; char* rfoot[] = { "rfoot1jnt", "rfoot2jnt", "rfoot3jnt" }; @@ -928,15 +929,15 @@ void Obj::setupIKSystem() char** joints[] = { rhand, lhand, rfoot, lfoot }; - m_IKSystemMgr->setupJoint(m_model, 0, joints[0]); - m_IKSystemMgr->setupJoint(m_model, 1, joints[1]); - m_IKSystemMgr->setupJoint(m_model, 2, joints[2]); - m_IKSystemMgr->setupJoint(m_model, 3, joints[3]); - m_IKSystemMgr->setupCallBack(m_model, "rhand3jnt"); + m_ikSystemMgr->setupJoint(m_model, 0, joints[0]); + m_ikSystemMgr->setupJoint(m_model, 1, joints[1]); + m_ikSystemMgr->setupJoint(m_model, 2, joints[2]); + m_ikSystemMgr->setupJoint(m_model, 3, joints[3]); + m_ikSystemMgr->setupCallBack(m_model, "rhand3jnt"); setIKParameter(); - m_IKSystemMgr->setParameters(m_IKSystemParms); - m_IKSystemMgr->m_jointGroundCallBack = m_groundCallBack; + m_ikSystemMgr->setParameters(m_ikSystemParms); + m_ikSystemMgr->m_jointGroundCallBack = m_groundCallBack; /* stwu r1, -0x50(r1) mflr r0 @@ -1106,7 +1107,7 @@ lbl_802C8FF0: * Address: 802C9054 * Size: 000020 */ -void Obj::setIKSystemTargetPosition(Vector3f& targetPos) { m_IKSystemMgr->m_targetPosition = targetPos; } +void Obj::setIKSystemTargetPosition(Vector3f& targetPos) { m_ikSystemMgr->m_targetPosition = targetPos; } /* * --INFO-- @@ -1115,9 +1116,9 @@ void Obj::setIKSystemTargetPosition(Vector3f& targetPos) { m_IKSystemMgr->m_targ */ void Obj::updateIKSystem() { - m_IKSystemMgr->doUpdate(); - m_position = Vector3f(m_IKSystemMgr->_38); - m_faceDir = m_IKSystemMgr->m_faceDir; + m_ikSystemMgr->doUpdate(); + m_position = Vector3f(m_ikSystemMgr->_38); + m_faceDir = m_ikSystemMgr->m_faceDir; m_rotation.y = m_faceDir; } @@ -1128,8 +1129,8 @@ void Obj::updateIKSystem() */ void Obj::doAnimationIKSystem() { - m_IKSystemMgr->setAnimationCallBack(); - Vector3f translation = Vector3f(m_IKSystemMgr->m_traceCentrePosition); + m_ikSystemMgr->setAnimationCallBack(); + Vector3f translation = Vector3f(m_ikSystemMgr->m_traceCentrePosition); m_objMatrix.makeSRT(m_scale, m_rotation, translation); } @@ -1138,70 +1139,70 @@ void Obj::doAnimationIKSystem() * Address: 802C9134 * Size: 000024 */ -void Obj::finishAnimationIKSystem() { m_IKSystemMgr->resetAnimationCallBack(); } +void Obj::finishAnimationIKSystem() { m_ikSystemMgr->resetAnimationCallBack(); } /* * --INFO-- * Address: 802C9158 * Size: 000024 */ -void Obj::startProgramedIK() { m_IKSystemMgr->startProgramedIK(); } +void Obj::startProgramedIK() { m_ikSystemMgr->startProgramedIK(); } /* * --INFO-- * Address: 802C917C * Size: 000024 */ -void Obj::startIKMotion() { m_IKSystemMgr->startIKMotion(); } +void Obj::startIKMotion() { m_ikSystemMgr->startIKMotion(); } /* * --INFO-- * Address: 802C91A0 * Size: 000024 */ -void Obj::finishIKMotion() { m_IKSystemMgr->finishIKMotion(); } +void Obj::finishIKMotion() { m_ikSystemMgr->finishIKMotion(); } /* * --INFO-- * Address: 802C91C4 * Size: 000024 */ -void Obj::forceFinishIKMotion() { m_IKSystemMgr->forceFinishIKMotion(); } +void Obj::forceFinishIKMotion() { m_ikSystemMgr->forceFinishIKMotion(); } /* * --INFO-- * Address: 802C91E8 * Size: 000024 */ -bool Obj::isFinishIKMotion() { return m_IKSystemMgr->isFinishIKMotion(); } +bool Obj::isFinishIKMotion() { return m_ikSystemMgr->isFinishIKMotion(); } /* * --INFO-- * Address: 802C920C * Size: 000024 */ -void Obj::startBlendMotion() { m_IKSystemMgr->startBlendMotion(); } +void Obj::startBlendMotion() { m_ikSystemMgr->startBlendMotion(); } /* * --INFO-- * Address: 802C9230 * Size: 000024 */ -void Obj::finishBlendMotion() { m_IKSystemMgr->finishBlendMotion(); } +void Obj::finishBlendMotion() { m_ikSystemMgr->finishBlendMotion(); } /* * --INFO-- * Address: 802C9254 * Size: 000020 */ -Vector3f Obj::getTraceCentrePosition() { return m_IKSystemMgr->m_traceCentrePosition; } +Vector3f Obj::getTraceCentrePosition() { return m_ikSystemMgr->m_traceCentrePosition; } /* * --INFO-- * Address: 802C9274 * Size: 000024 */ -bool Obj::isCollisionCheck(CollPart* collpart) { return m_IKSystemMgr->isCollisionCheck(collpart); } +bool Obj::isCollisionCheck(CollPart* collpart) { return m_ikSystemMgr->isCollisionCheck(collpart); } /* * --INFO-- @@ -1217,41 +1218,12 @@ void Obj::createShadowSystem() { m_shadowMgr = new BigFootShadowMgr(this); } */ void Obj::setupShadowSystem() { - /* - stwu r1, -0x20(r1) - mflr r0 - stw r0, 0x24(r1) - stmw r27, 0xc(r1) - mr r27, r3 - lwz r3, 0x2ec(r3) - bl init__Q34Game7BigFoot16BigFootShadowMgrFv - li r29, 0 - mr r30, r27 - -lbl_802C9304: - li r28, 0 - mr r31, r30 - -lbl_802C930C: - lwz r3, 0x2ec(r27) - mr r4, r29 - mr r5, r28 - addi r6, r31, 0x2f0 - bl "setJointPosPtr__Q34Game7BigFoot16BigFootShadowMgrFiiP10Vector3" - addi r28, r28, 1 - addi r31, r31, 0xc - cmpwi r28, 4 - blt lbl_802C930C - addi r29, r29, 1 - addi r30, r30, 0x30 - cmpwi r29, 4 - blt lbl_802C9304 - lmw r27, 0xc(r1) - lwz r0, 0x24(r1) - mtlr r0 - addi r1, r1, 0x20 - blr - */ + m_shadowMgr->init(); + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + m_shadowMgr->setJointPosPtr(i, j, &m_jointPositions[i][j]); + } + } } /* @@ -1259,54 +1231,14 @@ lbl_802C930C: * Address: 802C9354 * Size: 000024 */ -void Obj::doAnimationShadowSystem() -{ - /* - stwu r1, -0x10(r1) - mflr r0 - stw r0, 0x14(r1) - lwz r3, 0x2ec(r3) - bl update__Q34Game7BigFoot16BigFootShadowMgrFv - lwz r0, 0x14(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ -} +void Obj::doAnimationShadowSystem() { m_shadowMgr->update(); } /* * --INFO-- * Address: 802C9378 * Size: 000054 */ -void Obj::createMaterialAnimation() -{ - /* - stwu r1, -0x10(r1) - mflr r0 - stw r0, 0x14(r1) - stw r31, 0xc(r1) - stw r30, 8(r1) - mr r30, r3 - li r3, 0xc - bl __nw__FUl - or. r31, r3, r3 - beq lbl_802C93B0 - bl __ct__Q23Sys15MatBaseAnimatorFv - lis r3, __vt__Q23Sys15MatLoopAnimator@ha - addi r0, r3, __vt__Q23Sys15MatLoopAnimator@l - stw r0, 0(r31) - -lbl_802C93B0: - stw r31, 0x4a8(r30) - lwz r0, 0x14(r1) - lwz r31, 0xc(r1) - lwz r30, 8(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ -} +void Obj::createMaterialAnimation() { m_matLoopAnimator = new Sys::MatLoopAnimator(); } /* * --INFO-- @@ -1315,23 +1247,8 @@ lbl_802C93B0: */ void Obj::startMaterialAnimation() { - /* - stwu r1, -0x10(r1) - mflr r0 - mr r4, r3 - stw r0, 0x14(r1) - lwz r3, 0x4a8(r3) - lwz r4, 0x180(r4) - lwz r12, 0(r3) - lwz r4, 0x44(r4) - lwz r12, 8(r12) - mtctr r12 - bctrl - lwz r0, 0x14(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ + Mgr* mgr = static_cast(m_mgr); + m_matLoopAnimator->start((Sys::MatBaseAnimation*)mgr->m_tevRegAnimation); // silly cast } /* @@ -1341,6 +1258,8 @@ void Obj::startMaterialAnimation() */ void Obj::updateMaterialAnimation() { + if (_2DC) { } + /* stwu r1, -0x20(r1) mflr r0 @@ -3088,32 +3007,9 @@ lbl_802CA9F8: */ void Obj::finishPinchJointEffect() { - /* - stwu r1, -0x10(r1) - mflr r0 - stw r0, 0x14(r1) - stw r31, 0xc(r1) - mr r31, r3 - stw r30, 8(r1) - li r30, 0 - -lbl_802CAA94: - lwz r3, 0x3d0(r31) - lwz r12, 0(r3) - lwz r12, 0x10(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 3 - blt lbl_802CAA94 - lwz r0, 0x14(r1) - lwz r31, 0xc(r1) - lwz r30, 8(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ + for (int i = 0; i < 3; i++) { + _3D0[i]->fade(); + } } /* @@ -3256,6 +3152,33 @@ lbl_802CAC58: */ void Obj::updatePinchLife() { + if (!isAlive()) { + return; + } + + f32 healthRatio = m_health / C_PARMS->m_general.m_health.m_value; + if (m_isSmoking) { + if (healthRatio > 0.35f) { + for (int i = 0; i < 3; i++) { + _3D0[i]->fade(); + } + + m_isSmoking = false; + } + } else if (healthRatio < 0.35f) { + f32 values[3]; + + for (int i = 0; i < 3; i++) { + values[i] = randWeightFloat(2.0f); + } + + for (int i = 0; i < 3; i++) { + *_3D0[i]->m_position = m_jointPositions[i][3] * values[i]; + } + + m_isSmoking = true; + getJAIObject()->startSound(PSSE_EN_DAMAGUMO_SMOKE, 0); + } /* stwu r1, -0x80(r1) mflr r0 @@ -3428,39 +3351,10 @@ lbl_802CAEB8: */ void Obj::startFurEffect() { - /* - stwu r1, -0x10(r1) - mflr r0 - li r4, 0 - stw r0, 0x14(r1) - stw r31, 0xc(r1) - mr r31, r3 - stw r30, 8(r1) - lwz r3, 0x494(r3) - lwz r12, 0(r3) - lwz r12, 8(r12) - mtctr r12 - bctrl - li r30, 0 - -lbl_802CAF18: - lwz r3, 0x498(r31) - li r4, 0 - lwz r12, 0(r3) - lwz r12, 8(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 4 - blt lbl_802CAF18 - lwz r0, 0x14(r1) - lwz r31, 0xc(r1) - lwz r30, 8(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ + m_fxMainHair->endDemoDrawOn(); + for (int i = 0; i < 4; i++) { + m_fxLegHair[i]->endDemoDrawOn(); + } } /* @@ -3470,37 +3364,10 @@ lbl_802CAF18: */ void Obj::finishFurEffect() { - /* - stwu r1, -0x10(r1) - mflr r0 - stw r0, 0x14(r1) - stw r31, 0xc(r1) - mr r31, r3 - stw r30, 8(r1) - lwz r3, 0x494(r3) - lwz r12, 0(r3) - lwz r12, 0x10(r12) - mtctr r12 - bctrl - li r30, 0 - -lbl_802CAF88: - lwz r3, 0x498(r31) - lwz r12, 0(r3) - lwz r12, 0x10(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 4 - blt lbl_802CAF88 - lwz r0, 0x14(r1) - lwz r31, 0xc(r1) - lwz r30, 8(r1) - mtlr r0 - addi r1, r1, 0x10 - blr - */ + m_fxMainHair->fade(); + for (int i = 0; i < 4; i++) { + m_fxLegHair[i]->fade(); + } } /* @@ -3510,326 +3377,98 @@ lbl_802CAF88: */ void Obj::updateDeadFurEffect() { - /* - stwu r1, -0x20(r1) - mflr r0 - stw r0, 0x24(r1) - stw r31, 0x1c(r1) - stw r30, 0x18(r1) - stw r29, 0x14(r1) - mr r29, r3 - lwz r3, 0x494(r3) - lfs f1, 0x2d4(r29) - bl setGlobalScale__Q23efx10TOdamaFur1Ff - li r30, 0 - mr r31, r29 - -lbl_802CAFF4: - lwz r3, 0x498(r31) - lfs f1, 0x2d4(r29) - bl setGlobalScale__Q23efx10TOdamaFur2Ff - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 4 - blt lbl_802CAFF4 - lwz r0, 0x24(r1) - lwz r31, 0x1c(r1) - lwz r30, 0x18(r1) - lwz r29, 0x14(r1) - mtlr r0 - addi r1, r1, 0x20 - blr - */ + m_fxMainHair->setGlobalScale(_2D4); + for (int i = 0; i < 4; i++) { + m_fxLegHair[i]->setGlobalScale(_2D4); + } } /* * --INFO-- * Address: 802CB02C * Size: 0001D8 + * Matches besides some bullshit. */ void Obj::effectDrawOn() { - /* - stwu r1, -0x20(r1) - mflr r0 - stw r0, 0x24(r1) - stmw r27, 0xc(r1) - mr r27, r3 - li r30, 0 - mr r31, r27 + for (int i = 0; i < 4; i++) { + _3B0[i]->endDemoDrawOn(); + _3C0[i]->endDemoDrawOn(); + } -lbl_802CB048: - lwz r3, 0x3b0(r31) - lwz r12, 0(r3) - lwz r12, 0x18(r12) - mtctr r12 - bctrl - lwz r3, 0x3c0(r31) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 4 - blt lbl_802CB048 - li r30, 0 - mr r31, r27 + for (int i = 0; i < 3; i++) { + _3D0[i]->endDemoDrawOn(); + } -lbl_802CB088: - lwz r3, 0x3d0(r31) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 3 - blt lbl_802CB088 - li r29, 0 - mr r30, r27 + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 3; j++) { + _3DC[i][j]->endDemoDrawOn(); + m_fxElectricDeath1[i][j]->endDemoDrawOn(); + } + } -lbl_802CB0B4: - li r28, 0 - mr r31, r30 + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 2; j++) { + m_fxElectricDeath2[i][j]->endDemoDrawOn(); + m_fxShards1[i][j]->endDemoDrawOn(); + } + } -lbl_802CB0BC: - lwz r3, 0x3dc(r31) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - lwz r3, 0x40c(r31) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r31, r31, 4 - cmpwi r28, 3 - blt lbl_802CB0BC - addi r29, r29, 1 - addi r30, r30, 0xc - cmpwi r29, 4 - blt lbl_802CB0B4 - li r28, 0 - mr r31, r27 + for (int i = 0; i < 4; i++) { + m_fxShards2[i]->endDemoDrawOn(); + } -lbl_802CB10C: - li r29, 0 - mr r30, r31 + m_fxShards3->endDemoDrawOn(); + m_fxShards4->endDemoDrawOn(); -lbl_802CB114: - lwz r3, 0x43c(r30) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - lwz r3, 0x45c(r30) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r29, r29, 1 - addi r30, r30, 4 - cmpwi r29, 2 - blt lbl_802CB114 - addi r28, r28, 1 - addi r31, r31, 8 - cmpwi r28, 4 - blt lbl_802CB10C - li r28, 0 - mr r30, r27 - -lbl_802CB164: - lwz r3, 0x47c(r30) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r30, r30, 4 - cmpwi r28, 4 - blt lbl_802CB164 - lwz r3, 0x48c(r27) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - lwz r3, 0x490(r27) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - lwz r3, 0x494(r27) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - li r28, 0 - mr r30, r27 - -lbl_802CB1CC: - lwz r3, 0x498(r30) - lwz r12, 0(r3) - lwz r12, 0x44(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r30, r30, 4 - cmpwi r28, 4 - blt lbl_802CB1CC - lmw r27, 0xc(r1) - lwz r0, 0x24(r1) - mtlr r0 - addi r1, r1, 0x20 - blr - */ + m_fxMainHair->endDemoDrawOn(); + for (int i = 0; i < 4; i++) { + m_fxLegHair[i]->endDemoDrawOn(); + } } /* * --INFO-- * Address: 802CB204 * Size: 0001D8 + * Matches except some bullshit. */ void Obj::effectDrawOff() { - /* - stwu r1, -0x20(r1) - mflr r0 - stw r0, 0x24(r1) - stmw r27, 0xc(r1) - mr r27, r3 - li r30, 0 - mr r31, r27 + for (int i = 0; i < 4; i++) { + _3B0[i]->startDemoDrawOff(); + _3C0[i]->startDemoDrawOff(); + } -lbl_802CB220: - lwz r3, 0x3b0(r31) - lwz r12, 0(r3) - lwz r12, 0x14(r12) - mtctr r12 - bctrl - lwz r3, 0x3c0(r31) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 4 - blt lbl_802CB220 - li r30, 0 - mr r31, r27 + for (int i = 0; i < 3; i++) { + _3D0[i]->startDemoDrawOff(); + } -lbl_802CB260: - lwz r3, 0x3d0(r31) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r30, r30, 1 - addi r31, r31, 4 - cmpwi r30, 3 - blt lbl_802CB260 - li r29, 0 - mr r30, r27 + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 3; j++) { + _3DC[i][j]->startDemoDrawOff(); + m_fxElectricDeath1[i][j]->startDemoDrawOff(); + } + } -lbl_802CB28C: - li r28, 0 - mr r31, r30 + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 2; j++) { + m_fxElectricDeath2[i][j]->startDemoDrawOff(); + m_fxShards1[i][j]->startDemoDrawOff(); + } + } -lbl_802CB294: - lwz r3, 0x3dc(r31) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - lwz r3, 0x40c(r31) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r31, r31, 4 - cmpwi r28, 3 - blt lbl_802CB294 - addi r29, r29, 1 - addi r30, r30, 0xc - cmpwi r29, 4 - blt lbl_802CB28C - li r28, 0 - mr r31, r27 + for (int i = 0; i < 4; i++) { + m_fxShards2[i]->startDemoDrawOff(); + } -lbl_802CB2E4: - li r29, 0 - mr r30, r31 + m_fxShards3->startDemoDrawOff(); + m_fxShards4->startDemoDrawOff(); -lbl_802CB2EC: - lwz r3, 0x43c(r30) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - lwz r3, 0x45c(r30) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r29, r29, 1 - addi r30, r30, 4 - cmpwi r29, 2 - blt lbl_802CB2EC - addi r28, r28, 1 - addi r31, r31, 8 - cmpwi r28, 4 - blt lbl_802CB2E4 - li r28, 0 - mr r30, r27 - -lbl_802CB33C: - lwz r3, 0x47c(r30) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r30, r30, 4 - cmpwi r28, 4 - blt lbl_802CB33C - lwz r3, 0x48c(r27) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - lwz r3, 0x490(r27) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - lwz r3, 0x494(r27) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - li r28, 0 - mr r30, r27 - -lbl_802CB3A4: - lwz r3, 0x498(r30) - lwz r12, 0(r3) - lwz r12, 0x40(r12) - mtctr r12 - bctrl - addi r28, r28, 1 - addi r30, r30, 4 - cmpwi r28, 4 - blt lbl_802CB3A4 - lmw r27, 0xc(r1) - lwz r0, 0x24(r1) - mtlr r0 - addi r1, r1, 0x20 - blr - */ + m_fxMainHair->startDemoDrawOff(); + for (int i = 0; i < 4; i++) { + m_fxLegHair[i]->startDemoDrawOff(); + } } /* @@ -3839,22 +3478,12 @@ lbl_802CB3A4: */ void Obj::addShadowScale() { - /* - lfs f3, 0x2d4(r3) - lfs f2, lbl_8051C72C@sda21(r2) - fcmpo cr0, f3, f2 - bgelr - lwz r4, sys@sda21(r13) - lfs f1, lbl_8051C760@sda21(r2) - lfs f0, 0x54(r4) - fmadds f0, f1, f0, f3 - stfs f0, 0x2d4(r3) - lfs f0, 0x2d4(r3) - fcmpo cr0, f0, f2 - blelr - stfs f2, 0x2d4(r3) - blr - */ + if (_2D4 < 1.0f) { + _2D4 += 2.0f * sys->m_deltaTime; + if (_2D4 > 1.0f) { + _2D4 = 1.0f; + } + } } /*