Bigfoot work with @EpochFlame

Co-Authored-By: EpochFlame <82550703+EpochFlame@users.noreply.github.com>
This commit is contained in:
intns 2023-01-14 02:04:38 +00:00
parent eb4d16db15
commit fb2be92e23
2 changed files with 174 additions and 545 deletions

View File

@ -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 {

View File

@ -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<f>"
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<Mgr*>(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;
}
}
}
/*