diff --git a/config/SOUE01/rels/d_a_e_skytailNP/symbols.txt b/config/SOUE01/rels/d_a_e_skytailNP/symbols.txt index 007c3a42..b37a6e32 100644 --- a/config/SOUE01/rels/d_a_e_skytailNP/symbols.txt +++ b/config/SOUE01/rels/d_a_e_skytailNP/symbols.txt @@ -17,7 +17,7 @@ __ct__Q213dAcESkytail_c17callbackAntenna_cFv = .text:0x00000640; // type:functio __dt__Q213dAcESkytail_c17callbackAntenna_cFv = .text:0x000006A0; // type:function size:0x74 timingB__Q213dAcESkytail_c14callbackBody_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x00000720; // type:function size:0x264 timingB__Q213dAcESkytail_c17callbackAntenna_cFUlPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdl = .text:0x00000990; // type:function size:0xB0 -fn_172_A40__13dAcESkytail_cFv = .text:0x00000A40; // type:function size:0x1FC +checkHit__13dAcESkytail_cFv = .text:0x00000A40; // type:function size:0x1FC ChkTgHit__8cCcD_ObjFv = .text:0x00000C40; // type:function size:0x4C changeState__82sStateMgr_c<13dAcESkytail_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000C90; // type:function size:0x10 calcTimer__4sLibFPs_s = .text:0x00000CA0; // type:function size:0x1C @@ -51,11 +51,11 @@ finalizeState_Dead__13dAcESkytail_cFv = .text:0x00003B80; // type:function size: initializeState_Skytail__13dAcESkytail_cFv = .text:0x00003B90; // type:function size:0x4 executeState_Skytail__13dAcESkytail_cFv = .text:0x00003BA0; // type:function size:0x118 finalizeState_Skytail__13dAcESkytail_cFv = .text:0x00003CC0; // type:function size:0x4 -fn_172_3CD0__13dAcESkytail_cFv = .text:0x00003CD0; // type:function size:0x570 -fn_172_4240__13dAcESkytail_cFl = .text:0x00004240; // type:function size:0x384 +wiggleBody__13dAcESkytail_cFv = .text:0x00003CD0; // type:function size:0x570 +wiggleAntenna__13dAcESkytail_cFl = .text:0x00004240; // type:function size:0x384 fn_172_45D0__13dAcESkytail_cFv = .text:0x000045D0; // type:function size:0x4 fn_172_45E0__13dAcESkytail_cFv = .text:0x000045E0; // type:function size:0x4 -fn_172_45F0__13dAcESkytail_cFv = .text:0x000045F0; // type:function size:0x40 +clampRotationX__13dAcESkytail_cFv = .text:0x000045F0; // type:function size:0x40 vt_0x88__11dAcEnBase_cFi = .text:0x00004630; // type:function size:0x8 vt_0x84__11dAcEnBase_cFv = .text:0x00004640; // type:function size:0x4 vt_0x80__11dAcEnBase_cFv = .text:0x00004650; // type:function size:0x4 diff --git a/include/d/a/e/d_a_e_skytail.h b/include/d/a/e/d_a_e_skytail.h index 9a5e1561..92b313ea 100644 --- a/include/d/a/e/d_a_e_skytail.h +++ b/include/d/a/e/d_a_e_skytail.h @@ -24,10 +24,10 @@ class dAcESkytail_c : public dAcEnBase_c { mVec3_c mPos[12]; mAng3_c mAng[12]; - f32 mScaleSpine11; - s16 field_0x10DC; - s16 field_0x10DE; - s16 field_0x10E0; + f32 mScaleRear; + s16 field_0xE0; // Unused + s16 mMouthBigAngleY; + s16 mMouthSmallAngleY; }; enum BodyNode_e { BODY_NODE_Center, @@ -129,12 +129,19 @@ public: STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcESkytail_c); STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcESkytail_c); - void fn_172_A40(); - void fn_172_3CD0(); - void fn_172_4240(s32); + void checkHit(); + void wiggleBody(); + void wiggleAntenna(s32); void fn_172_45D0(); void fn_172_45E0(); - void fn_172_45F0(); + void clampRotationX(); + + // Inline not final - Called from sky enemy + void setBirthPos(f32 x, f32 y, f32 z) { + mBirthPos.x = x; + mBirthPos.y = y; + mBirthPos.z = z; + } private: /* 0x0378 */ d3d::AnmMdlWrapper mBodyMdl; @@ -146,88 +153,97 @@ private: /* 0x0FC0 */ STATE_MGR_DECLARE(dAcESkytail_c); /* 0x0FFC */ callbackBody_c mBodyTransform; /* 0x10E4 */ callbackAntenna_c mAntennaTransform[2]; - /* 0x1234 */ mMtx_c field_0x1234; - /* 0x1264 */ mVec3_c field_0x1264; - /* 0x1270 */ mVec3_c field_0x1270; - /* 0x127C */ mVec3_c field_0x127C; - /* 0x1288 */ mVec3_c field_0x1288; - /* 0x1294 */ mVec3_c field_0x1294; - /* 0x12A0 */ mVec3_c field_0x12A0; - /* 0x12AC */ mVec3_c field_0x12AC; - /* 0x12B8 */ mVec3_c field_0x12B8; + /* 0x1234 */ mMtx_c mScratchMtx; + /* 0x1264 */ mVec3_c mScratchVec; + /* 0x1270 */ mVec3_c field_0x1270; // Unused + /* 0x127C */ mVec3_c mAccel; // Acceleration ? + /* 0x1288 */ mVec3_c field_0x1288; // Unused + /* 0x1294 */ mVec3_c field_0x1294; // Unused + /* 0x12A0 */ mVec3_c field_0x12A0; // Related to Position Target? + /* 0x12AC */ mVec3_c mParallelMoveScratchVec; + /* 0x12B8 */ mVec3_c field_0x12B8; // Unused /* 0x12C4 */ mVec3_c mBirdPosition; - /* 0x12D0 */ mVec3_c field_0x12D0; - /* 0x12DC */ mVec3_c field_0x12DC; - /* 0x12E8 */ mVec3_c field_0x12E8; - /* 0x12F4 */ mVec3_c field_0x12F4; - /* 0x1300 */ mAng3_c field_0x1300; + /* 0x12D0 */ mVec3_c mBirthPos; // Set From sky enemy as well in BirthSkytail + /* 0x12DC */ mVec3_c mCloseSkytailAdjustment; + /* 0x12E8 */ mVec3_c mCloseSkytailTarget; + /* 0x12F4 */ mVec3_c field_0x12F4; // unused + /* 0x1300 */ mAng3_c field_0x1300; // unused /* 0x1306 */ mAng3_c mBirdRotation; - /* 0x130C */ f32 field_0x130C; - /* 0x1310 */ f32 field_0x1310; - /* 0x1314 */ f32 mScaleF; - /* 0x1318 */ f32 field_0x1318; - /* 0x131C */ f32 field_0x131C; - /* 0x1310 */ f32 field_0x1320; + /* 0x130C */ f32 field_0x130C; // Bird Related + /* 0x1310 */ f32 field_0x1310; // unused + /* 0x1314 */ f32 mBodyScale; + /* 0x1318 */ f32 mRandomMoveSpeedMultiplier; + /* 0x131C */ f32 field_0x131C; // unused + /* 0x1310 */ f32 field_0x1320; // unused /* 0x1324 */ f32 mDistanceToBird; - /* 0x1328 */ f32 field_0x1328; - /* 0x132C */ f32 field_0x132C; - /* 0x1330 */ f32 field_0x1330; - /* 0x1334 */ f32 field_0x1334; - /* 0x1338 */ f32 field_0x1338; - /* 0x133C */ f32 field_0x133C; - /* 0x1340 */ f32 field_0x1340; - /* 0x1344 */ f32 field_0x1344; - /* 0x1348 */ f32 field_0x1348; - /* 0x134C */ f32 field_0x134C; + /* 0x1328 */ f32 field_0x1328; // unused + /* 0x132C */ f32 field_0x132C; // unused + + /* 0x1330 */ f32 field_0x1330; // Body wiggle X amplitude + /* 0x1334 */ f32 field_0x1334; // Body wiggle Y amplitude + /* 0x1338 */ f32 field_0x1338; // Antenna wiggle Z amplitude + /* 0x133C */ f32 field_0x133C; // Body wiggle Y amplitude adjustment + + /* 0x1340 */ f32 mParallelMoveRateShift; + /* 0x1344 */ f32 mParallelMoveRateShiftTarget; + + /* 0x1348 */ f32 field_0x1348; // (Effects Velocity) + /* 0x134C */ f32 field_0x134C; // (Effects Velocity) /* 0x1350 */ u8 _0x1350[0x135C - 0x1350]; - /* 0x135C */ s32 field_0x135C; - /* 0x1360 */ s32 field_0x1360; - /* 0x1364 */ s32 field_0x1364; - /* 0x1368 */ s16 field_0x1368; - /* 0x136A */ s16 field_0x136A; - /* 0x136C */ s16 field_0x136C; - /* 0x136E */ s16 field_0x136E; - /* 0x1370 */ s16 field_0x1370; - /* 0x1372 */ s16 field_0x1372; - /* 0x1376 */ s16 field_0x1374; - /* 0x1376 */ s16 field_0x1376; - /* 0x1378 */ s16 field_0x1378; - /* 0x137A */ s16 field_0x137A; - /* 0x137C */ s16 field_0x137C; - /* 0x137E */ s16 field_0x137E; - /* 0x1380 */ s16 field_0x1380; - /* 0x1382 */ s16 field_0x1382; - /* 0x1384 */ s16 field_0x1384; - /* 0x1386 */ s16 field_0x1386; - /* 0x1388 */ s16 field_0x1388; - /* 0x1388 */ s16 field_0x138A; - /* 0x138C */ s16 field_0x138C; - /* 0x138E */ s16 field_0x138E; - /* 0x1390 */ s16 field_0x1390; - /* 0x1392 */ s16 field_0x1392; - /* 0x1394 */ s16 field_0x1394; - /* 0x1394 */ s16 field_0x1396; - /* 0x1398 */ s16 field_0x1398; - /* 0x139A */ s16 field_0x139A; - /* 0x139A */ s16 field_0x139C; - /* 0x139E */ s16 field_0x139E; - /* 0x13A0 */ s16 field_0x13A0; - /* 0x13A2 */ s16 field_0x13A2; + /* 0x135C */ s32 mFrontAttackSubstateTimer; + /* 0x1360 */ s32 field_0x1360; // ParallelMove Follow Position Index? + /* 0x1364 */ s32 mDeadSubstate; + /* 0x1368 */ s16 mLiveTimer; // Starts at a random value and counts up always + /* 0x136A */ s16 field_0x136A; // body wiggle phase X + /* 0x136C */ s16 field_0x136C; // body wiggle phase shift X + /* 0x136E */ s16 field_0x136E; // body wiggle phase Y term + /* 0x1370 */ s16 field_0x1370; // antenna wiggle phase term + /* 0x1372 */ s16 field_0x1372; // body wiggle phase Y term + /* 0x1376 */ s16 field_0x1374; // Phase for field_0x1348 (Effects Velocity) + /* 0x1376 */ s16 field_0x1376; // Phase for field_0x134C (Effects Velocity) + /* 0x1378 */ s16 mAngleTargetY; // Angle Y Target + /* 0x137A */ s16 mAngleTargetX; // Angle X Target + /* 0x137C */ s16 mAngleStep; // Angle Step + /* 0x137E */ s16 field_0x137E; // Angle Target Step + /* 0x1380 */ s16 field_0x1380; // unused + + /* 0x1382 */ s16 field_0x1382; // Phase for RotationX (Effects Velocity) + /* 0x1384 */ s16 field_0x1384; // increment for field_0x1382 + /* 0x1386 */ s16 field_0x1386; // target angle for field_0x1384 + + /* 0x1388 */ s16 mMouthSmallPhase; + /* 0x138A */ s16 mMouthSmallPhaseIncrement; // unused + /* 0x138C */ s16 mMouthSmallPhaseIncrementTarget; + /* 0x138E */ s16 mMouthSmallAmplitudeAdd; // FrontAttack Related only + + /* 0x1390 */ s16 mMouthBigPhase; + /* 0x1392 */ s16 mMouthBigPhaseIncrement; // + /* 0x1394 */ s16 mMouthBigPhaseIncrementTarget; + /* 0x1394 */ s16 mMouthBigAmplitudeAdd; // FrontAttack Related only + + /* 0x1398 */ s16 field_0x1398; // FrontAttack Related only + /* 0x139A */ s16 field_0x139A; // ParallelMove Substate1 Timer + /* 0x139A */ s16 field_0x139C; // ParallelMove something? effectively useless + /* 0x139E */ s16 mScaleRearPhase; + /* 0x13A0 */ s16 mDeadStateTimer; + /* 0x13A2 */ s16 mHitCooldown; /* 0x13A4 */ u16 field_0x13A4[3]; - /* 0x13AA */ u16 field_0x13AA; - /* 0x13AC */ u8 field_0x13AC; - /* 0x13AD */ u8 field_0x13AD; - /* 0x13AE */ u8 field_0x13AE; - /* 0x13AF */ u8 field_0x13AF; - /* 0x13B0 */ u8 field_0x13B0; - /* 0x13B1 */ u8 field_0x13B1; - /* 0x13B2 */ u8 field_0x13B2; - /* 0x13B3 */ u8 field_0x13B3; - /* 0x13B4 */ u8 field_0x13B4; - /* 0x13B5 */ u8 field_0x13B5; - /* 0x13B6 */ u8 field_0x13B6; + /* 0x13AA */ u16 field_0x13AA; // ParallelMove Follow Position Change Timer? + + /* 0x13AC */ u8 mParallelMoveSubstate; + /* 0x13AD */ u8 field_0x13AD; // unused + /* 0x13AE */ u8 field_0x13AE; // unused + /* 0x13AF */ u8 field_0x13AF; // unused + /* 0x13B0 */ u8 field_0x13B0; // unused + /* 0x13B1 */ u8 mFrontAttackSubstate; + /* 0x13B2 */ u8 field_0x13B2; // unused + /* 0x13B3 */ u8 field_0x13B3; // unused + + /* 0x13B4 */ u8 field_0x13B4; // ParallelMove Substate3_4 Timer + /* 0x13B5 */ u8 field_0x13B5; // ParallelMove SubState2 Timer + /* 0x13B6 */ bool field_0x13B6; // Respawn from Sky Enemy Tag? /* 0x13B7 */ bool field_0x13B7; // Maybe Bird has Player? - /* 0x13B8 */ u8 field_0x13B8; + /* 0x13B8 */ bool mbNearSkytail; }; #endif diff --git a/src/REL/d/a/e/d_a_e_skytail.cpp b/src/REL/d/a/e/d_a_e_skytail.cpp index 4608fbb8..cbacdebf 100644 --- a/src/REL/d/a/e/d_a_e_skytail.cpp +++ b/src/REL/d/a/e/d_a_e_skytail.cpp @@ -163,7 +163,7 @@ void dAcESkytail_c::callbackBody_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip m.ZrotM(-mAng[idx].z); if (idx >= 10 /* Last 2 nodes */) { mMtx_c scale; - scale.scaleS(mScaleSpine11, mScaleSpine11, mScaleSpine11); + scale.scaleS(mScaleRear, mScaleRear, mScaleRear); m.concat(scale); } m.YrotM(-0x4000); @@ -172,20 +172,19 @@ void dAcESkytail_c::callbackBody_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxManip if (nodeId == BODY_NODE_LMouthBig) { result->GetMtx(m3); - m3.YrotM(field_0x10DE); + m3.YrotM(mMouthBigAngleY); result->SetMtx(m3); } else if (nodeId == BODY_NODE_LMouthSmall) { result->GetMtx(m4); - m4.YrotM(field_0x10E0); + m4.YrotM(mMouthSmallAngleY); result->SetMtx(m4); } else if (nodeId == BODY_NODE_RMouthBig) { - mMtx_c m; result->GetMtx(m5); - m5.YrotM(-field_0x10DE); + m5.YrotM(-mMouthBigAngleY); result->SetMtx(m5); } else if (nodeId == BODY_NODE_RMouthSmall) { result->GetMtx(m6); - m6.YrotM(-field_0x10E0); + m6.YrotM(-mMouthSmallAngleY); result->SetMtx(m6); } } @@ -198,8 +197,8 @@ void dAcESkytail_c::callbackAntenna_c::timingB(u32 nodeId, nw4r::g3d::WorldMtxMa result->SetMtx(m); } -void dAcESkytail_c::fn_172_A40() { - if (sLib::calcTimer(&field_0x13A2) == 0) { +void dAcESkytail_c::checkHit() { + if (sLib::calcTimer(&mHitCooldown) == 0) { u32 col = someEnemyDamageCollisionStuffMaybe(mCollider, nullptr); cCcD_Obj *pCcObj = mCollider.findTgHit(); @@ -208,13 +207,13 @@ void dAcESkytail_c::fn_172_A40() { dJEffManager_c::spawnHitMarkEffect(7, *pCcObj, nullptr, true); if (pCcObj == &mCc[COLLIDER_Rear]) { startSound(SE_ESktl_DOWN); - field_0x1364 = 0; + mDeadSubstate = 0; } else { - field_0x1364 = 1; + mDeadSubstate = 1; } mCollider.ClrTg(); - field_0x13A2 = 500; + mHitCooldown = 500; mHealth = 0; changeState(StateID_Dead); } else if (pCcObj == &mCc[COLLIDER_Rear]) { @@ -225,9 +224,9 @@ void dAcESkytail_c::fn_172_A40() { default: dJEffManager_c::spawnHitMarkEffect(7, mCc[COLLIDER_Rear], nullptr, true); startSound(SE_ESktl_DOWN); - field_0x1364 = 0; + mDeadSubstate = 0; mCollider.ClrTg(); - field_0x13A2 = 500; + mHitCooldown = 500; mHealth = 0; changeState(StateID_Dead); break; @@ -236,7 +235,7 @@ void dAcESkytail_c::fn_172_A40() { pCcObj == &mCc[COLLIDER_Spine6] || pCcObj == &mCc[COLLIDER_Spine8]) { dJEffManager_c::spawnHitMarkEffect(3, *pCcObj, nullptr, true); mCollider.ClrTg(); - field_0x13A2 = 500; + mHitCooldown = 500; } } } @@ -276,28 +275,28 @@ int dAcESkytail_c::create() { mHealth = 4; mSpeed = 70.0f; field_0x13B6 = 0; - field_0x13B8 = 0; - field_0x1364 = 2; + mbNearSkytail = false; + mDeadSubstate = 2; setStartingPosition(mPosition); - field_0x12D0.set(mPosition); + mBirthPos.set(mPosition); mCc[COLLIDER_Head].ClrAtSet(); mCollider.ClrAt(); - mBodyTransform.mScaleSpine11 = 1.0f; - field_0x1368 = cM::rndF(65536.0f); - mScaleF = 1.0f; + mBodyTransform.mScaleRear = 1.0f; + mLiveTimer = cM::rndF(65536.0f); + mBodyScale = 1.0f; field_0x1382 = cM::rndF(65536.0f); - field_0x1390 = cM::rndF(65536.0f); - field_0x1388 = field_0x1390; - field_0x138E = 0; - field_0x1396 = 0; + mMouthBigPhase = cM::rndF(65536.0f); + mMouthSmallPhase = mMouthBigPhase; + mMouthSmallAmplitudeAdd = 0; + mMouthBigAmplitudeAdd = 0; - mBodyMdl.getModel().setScale(mScaleF, mScaleF, mScaleF); + mBodyMdl.getModel().setScale(mBodyScale, mBodyScale, mBodyScale); field_0x13B7 = false; - field_0x135C = 0; + mFrontAttackSubstateTimer = 0; field_0x1338 = 0.0f; field_0x1334 = 0.0f; @@ -309,10 +308,10 @@ int dAcESkytail_c::create() { field_0x136A = 0; field_0x136E = 0; - field_0x1344 = 0.0f; - field_0x1340 = 0.0f; + mParallelMoveRateShiftTarget = 0.0f; + mParallelMoveRateShift = 0.0f; - field_0x139E = 0; + mScaleRearPhase = 0; mWorldMtx.transS(mPosition); mWorldMtx.YrotM(mRotation.y); @@ -320,11 +319,11 @@ int dAcESkytail_c::create() { mWorldMtx.ZrotM(mRotation.z); mBodyMdl.getModel().setLocalMtx(mWorldMtx); - fn_172_3CD0(); + wiggleBody(); mBodyMdl.getModel().calc(true); for (int i = 0; i < (s32)ARRAY_LENGTH(mAntennaMdl); ++i) { - fn_172_4240(i); + wiggleAntenna(i); mAntennaMdl[i].getModel().calc(true); } @@ -342,7 +341,7 @@ int dAcESkytail_c::doDelete() { } int dAcESkytail_c::actorExecute() { - field_0x1368++; + mLiveTimer++; for (int i = 0; i < 3; ++i) { if (field_0x13A4[i] != 0) { @@ -351,7 +350,7 @@ int dAcESkytail_c::actorExecute() { } if (field_0x13A4[0] == 0) { - field_0x13B8 = 0; + mbNearSkytail = false; } setStartingPosition(mPosition); @@ -367,10 +366,10 @@ int dAcESkytail_c::actorExecute() { changeState(StateID_RandomMove); } } - if (field_0x13A2 > 0) { + if (mHitCooldown > 0) { mCollider.ClrTg(); if (!pBird->fn_129_CFB0() && !isState(StateID_Dead)) { - field_0x13A2 = 0; + mHitCooldown = 0; mCollider.TgSet(); } } else { @@ -383,43 +382,43 @@ int dAcESkytail_c::actorExecute() { // Pulse the Rear Bulb if (!isState(StateID_Dead)) { - mBodyTransform.mScaleSpine11 = mAng(field_0x139E).sin() * 0.2f + 1.3f; + mBodyTransform.mScaleRear = 1.3f + mAng(mScaleRearPhase).sin() * 0.2f; f32 rate = mBodyMdl.getAnm().getRate(); if (rate > 2.0f) { rate = 2.0f; } - field_0x139E = field_0x139E + mAng::fromDeg(180.0f / (20.001f - 5.0f * rate)); + mScaleRearPhase += mAng::fromDeg(180.0f / (20.001f - 5.0f * rate)); } if (!isState(StateID_Dead)) { - fn_172_A40(); + checkHit(); } fn_172_45E0(); mRotation.set(mAngle); - fn_172_45F0(); - // Bug oops! + clampRotationX(); - if (!(field_0x1368 & 0xF) & (cM::rndF(1.0f) < 0.2f)) { + // Bug oops! + if (!(mLiveTimer & 0xF) & (cM::rndF(1.0f) < 0.2f)) { field_0x1386 = 1000.0f + cM::rndF(1000.f); - field_0x138C = field_0x1394 = field_0x1398 + 3000.0f + cM::rndF(3000.0f); + mMouthSmallPhaseIncrementTarget = mMouthBigPhaseIncrementTarget = field_0x1398 + 3000.0f + cM::rndF(3000.0f); } - field_0x1382 = (f32)field_0x1382 + (f32)field_0x1384; + field_0x1382 += (f32)field_0x1384; sLib::addCalcAngle(&field_0x1384, field_0x1386, 2, 200); - field_0x1390 += field_0x1392; - sLib::addCalcAngle(&field_0x1392, field_0x1394, 2, 200); - field_0x1388 = (f32)field_0x1388 + (f32)field_0x1392 * 2.0f; - sLib::addCalcAngle(&field_0x138A, field_0x138C, 2, 200); + mMouthBigPhase += mMouthBigPhaseIncrement; + sLib::addCalcAngle(&mMouthBigPhaseIncrement, mMouthBigPhaseIncrementTarget, 2, 200); + mMouthSmallPhase += (f32)mMouthBigPhaseIncrement * 2.0f; + sLib::addCalcAngle(&mMouthSmallPhaseIncrement, mMouthSmallPhaseIncrementTarget, 2, 200); - if (!isState(StateID_ParallelMove) || field_0x13AC != 2) { - sLib::addCalcScaled(&field_0x1340, 0.1f, 0.1f); + if (!isState(StateID_ParallelMove) || mParallelMoveSubstate != 2) { + sLib::addCalcScaled(&mParallelMoveRateShift, 0.1f, 0.1f); sLib::addCalcScaled(&field_0x133C, 0.1f, 0.1f); sLib::addCalcAngle(&field_0x1372, 0, 1, 1000); } mAng sin = mAng(field_0x1382).sin() * 3000.0f; - if (isState(StateID_ParallelMove) && (field_0x13AC == 3 || field_0x13AC == 4)) { - mVelocity = field_0x127C * mSpeed; + if (isState(StateID_ParallelMove) && (mParallelMoveSubstate == 3 || mParallelMoveSubstate == 4)) { + mVelocity = mAccel * mSpeed; } else { mMtx_c m; m.YrotS(mRotation.y); @@ -466,10 +465,10 @@ int dAcESkytail_c::actorExecute() { mWorldMtx.XrotM(mRotation.x); mWorldMtx.ZrotM(mRotation.z); mBodyMdl.getModel().setLocalMtx(mWorldMtx); - fn_172_3CD0(); + wiggleBody(); mBodyMdl.getModel().calc(false); for (int i = 0; i < (s32)ARRAY_LENGTH(mAntennaMdl); ++i) { - fn_172_4240(i); + wiggleAntenna(i); mAntennaMdl[i].getModel().calc(false); } @@ -477,22 +476,22 @@ int dAcESkytail_c::actorExecute() { if (pCcObj != nullptr && pCcObj == &mCc[COLLIDER_Head]) { dAcObjBase_c *pObj = pCcObj->GetCoActor(); if (pObj->mProfileName == fProfile::E_SKYTAIL) { - field_0x13B8 = 1; + mbNearSkytail = true; mMtx_c m; mVec3_c v = pObj->mPosition - mPosition; m.YrotS(v.atan2sX_Z()); mVec3_c in(0.0f, 0.0f, 430.0f); m.multVecSR(in); - field_0x12DC.set(in); + mCloseSkytailAdjustment.set(in); if (mPosition.y < pObj->mPosition.y) { - field_0x12DC.y -= 350.f; + mCloseSkytailAdjustment.y -= 350.f; } else { - field_0x12DC.y += 350.f; + mCloseSkytailAdjustment.y += 350.f; } - field_0x12E8.set(field_0x12A0 + field_0x12DC); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12E8); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12E8); + mCloseSkytailTarget.set(field_0x12A0 + mCloseSkytailAdjustment); + mAngleTargetY = cLib::targetAngleY(mPosition, mCloseSkytailTarget); + mAngleTargetX = -cLib::targetAngleX(mPosition, mCloseSkytailTarget); fn_172_45D0(); field_0x13A4[0] += 5; } else if (pObj->mProfileName == fProfile::B_NUSI) { @@ -512,8 +511,8 @@ int dAcESkytail_c::actorExecute() { } } - if (field_0x13B8 != 0) { - cLib::addCalcPos2(&field_0x12A0, field_0x12E8, 1.0f, 131.0f); + if (mbNearSkytail) { + cLib::addCalcPos2(&field_0x12A0, mCloseSkytailTarget, 1.0f, 131.0f); } mCc[COLLIDER_Head].SetC(mPosition); mCc[COLLIDER_Spine4].SetC(mBodyTransform.mPos[4 /* BODY_NODE_Spine04 */]); @@ -534,33 +533,33 @@ int dAcESkytail_c::draw() { void dAcESkytail_c::initializeState_RandomMove() { field_0x12A0.set( - field_0x12D0.x + cM::rndFX(2000.0f), // - field_0x12D0.y + cM::rndFX(2000.0f), // - field_0x12D0.z + cM::rndFX(2000.0f) // + mBirthPos.x + cM::rndFX(2000.0f), // + mBirthPos.y + cM::rndFX(2000.0f), // + mBirthPos.z + cM::rndFX(2000.0f) // ); setActorProperty(AC_PROP_0x1); } void dAcESkytail_c::executeState_RandomMove() { if (field_0x13A4[0] == 0) { - field_0x12A0.x = field_0x12D0.x + cM::rndFX(2000.0f); - field_0x12A0.y = field_0x12D0.y + +2000.0f + cM::rndFX(1000.0f); - field_0x12A0.z = field_0x12D0.z + cM::rndFX(2000.0f); + field_0x12A0.x = mBirthPos.x + cM::rndFX(2000.0f); + field_0x12A0.y = mBirthPos.y + +2000.0f + cM::rndFX(1000.0f); + field_0x12A0.z = mBirthPos.z + cM::rndFX(2000.0f); - field_0x137C = 0; + mAngleStep = 0; field_0x137E = cM::rndF(1000.0f) + 1000.0f; - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); - field_0x1318 = cM::rndF(0.2f) + 1.0f; + mRandomMoveSpeedMultiplier = cM::rndF(0.2f) + 1.0f; field_0x13A4[0] = cM::rndF(60.0f) + 30.0f; } s16 zTarget = mAngle.y; - sLib::addCalcAngle(mAngle.y.ref(), field_0x1378, 8, field_0x137C); - sLib::addCalcAngle(mAngle.x.ref(), field_0x137A, 8, field_0x137C); + sLib::addCalcAngle(mAngle.y.ref(), mAngleTargetY, 8, mAngleStep); + sLib::addCalcAngle(mAngle.x.ref(), mAngleTargetX, 8, mAngleStep); zTarget -= mAngle.y; sLib::addCalcAngle(mAngle.z.ref(), zTarget * 8, 2, 3000); - sLib::addCalcAngle(&field_0x137C, field_0x137E, 1, 100); - sLib::addCalcScaledDiff(&mSpeed, field_0x1318 * 50.0f, 0.1f, 1.0f); + sLib::addCalcAngle(&mAngleStep, field_0x137E, 1, 100); + sLib::addCalcScaledDiff(&mSpeed, mRandomMoveSpeedMultiplier * 50.0f, 0.1f, 1.0f); mBodyMdl.setRate(mSpeed / 50.0f); if (field_0x13B6 != 0 && field_0x13B7 != 0) { changeState(StateID_Move); @@ -571,7 +570,7 @@ void dAcESkytail_c::finalizeState_RandomMove() { } void dAcESkytail_c::initializeState_Move() { - field_0x13AC = 0; + mParallelMoveSubstate = 0; } void dAcESkytail_c::executeState_Move() { @@ -580,23 +579,23 @@ void dAcESkytail_c::executeState_Move() { f32 f = 12.0f; dBird_c::getInstance()->fn_129_C4A0(v0, f); f32 distXZ = v0.absXZTo(mPosition); - switch (field_0x13AC) { + switch (mParallelMoveSubstate) { case 0: { if (field_0x13A4[0] == 0) { - field_0x1264.set(0.0f, 0.0f, 10000.0f); + mScratchVec.set(0.0f, 0.0f, 10000.0f); field_0x12A0.set(0.0f, 0.0f, 0.0f); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(field_0x1264, field_0x12A0); + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(mScratchVec, field_0x12A0); field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); field_0x13A4[0] = 10.0f + cM::rndF(5.0f); } if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ > distf0) { - field_0x13AC = 1; + mParallelMoveSubstate = 1; field_0x13A4[0] = 0; } } else { @@ -607,14 +606,14 @@ void dAcESkytail_c::executeState_Move() { case 1: { if (field_0x13A4[0] == 0) { field_0x137E = 1000.0f + cM::rndF(500.0f); - field_0x1378 = cLib::targetAngleY(mPosition, v0); - field_0x137A = -cLib::targetAngleX(mPosition, v0); + mAngleTargetY = cLib::targetAngleY(mPosition, v0); + mAngleTargetX = -cLib::targetAngleX(mPosition, v0); fn_172_45D0(); } if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ < 4000.0f) { mVec3_c v1 = mPosition - v0; - field_0x135C = 30 + (s32)(v1.mag() / mSpeed); + mFrontAttackSubstateTimer = 30 + (s32)(v1.mag() / mSpeed); changeState(StateID_FrontAttack); return; } @@ -626,24 +625,24 @@ void dAcESkytail_c::executeState_Move() { } s16 zTarget = mAngle.y; - sLib::addCalcAngle(mAngle.y.ref(), field_0x1378, 8, field_0x137C); - sLib::addCalcAngle(mAngle.x.ref(), field_0x137A, 8, field_0x137C); + sLib::addCalcAngle(mAngle.y.ref(), mAngleTargetY, 8, mAngleStep); + sLib::addCalcAngle(mAngle.x.ref(), mAngleTargetX, 8, mAngleStep); zTarget -= mAngle.y; sLib::addCalcAngle(mAngle.z.ref(), zTarget * 8, 2, 3000); - sLib::addCalcAngle(&field_0x137C, field_0x137E, 1, 100); + sLib::addCalcAngle(&mAngleStep, field_0x137E, 1, 100); sLib::addCalcScaledDiff(&mSpeed, 70.0f, 1.0f, 3.0f); mBodyMdl.setRate(mSpeed / 50.0f); } void dAcESkytail_c::finalizeState_Move() {} void dAcESkytail_c::initializeState_ParallelMove() { - field_0x13AC = 0; + mParallelMoveSubstate = 0; field_0x13AA = 90 + cM::rndInt(60); field_0x130C = 100.0f; field_0x139A = 5 + cM::rndInt(5); field_0x13B5 = 50 + cM::rndInt(20); - field_0x1344 = 0.0f; - field_0x1340 = 0.0f; + mParallelMoveRateShiftTarget = 0.0f; + mParallelMoveRateShift = 0.0f; field_0x1380 = 0; field_0x133C = 0.0f; field_0x139C = 0; @@ -655,23 +654,23 @@ void dAcESkytail_c::executeState_ParallelMove() { f32 f = 12.0f; dBird_c::getInstance()->fn_129_C4A0(v0, f); f32 distXZ = v0.absXZTo(mPosition); - switch (field_0x13AC) { + switch (mParallelMoveSubstate) { case 0: { if (field_0x13A4[0] == 0) { - field_0x1264.set(0.0f, 0.0f, 3000.0f); + mScratchVec.set(0.0f, 0.0f, 3000.0f); field_0x12A0.set(0.0f, 0.0f, 0.0f); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(field_0x1264, field_0x12A0); + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(mScratchVec, field_0x12A0); field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); field_0x13A4[0] = 10.0f + cM::rndF(5.0f); } if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ > distf0) { - field_0x13AC = 1; + mParallelMoveSubstate = 1; field_0x13A4[0] = 0; field_0x139A = 5 + cM::rndInt(5); field_0x139C = 0; @@ -687,21 +686,21 @@ void dAcESkytail_c::executeState_ParallelMove() { field_0x1360 = 1 + cM::rndInt(3); } - field_0x12AC.set(sArrVecs[field_0x1360]); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(field_0x12AC, field_0x12AC); - field_0x12A0.set(field_0x12AC); - field_0x1264.set(0.0f, 0.0f, 3000.0f); - field_0x1234.multVecSR(field_0x1264, field_0x1264); - field_0x12A0 += field_0x1264; + mParallelMoveScratchVec.set(sArrVecs[field_0x1360]); + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(mParallelMoveScratchVec, mParallelMoveScratchVec); + field_0x12A0.set(mParallelMoveScratchVec); + mScratchVec.set(0.0f, 0.0f, 3000.0f); + mScratchMtx.multVecSR(mScratchVec, mScratchVec); + field_0x12A0 += mScratchVec; distXZ = mBirdPosition.distance(field_0x12A0); if (field_0x13A4[0] == 0) { field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); field_0x13A4[0] = 25.0f + cM::rndF(10.0f); if (field_0x139A > 0) { @@ -717,42 +716,42 @@ void dAcESkytail_c::executeState_ParallelMove() { } field_0x139C = 0; if (field_0x139A <= 0) { - field_0x13AC = 2; - field_0x1340 = 0.0f; - field_0x1344 = 1.0f; + mParallelMoveSubstate = 2; + mParallelMoveRateShift = 0.0f; + mParallelMoveRateShiftTarget = 1.0f; field_0x13B5 = 50 + cM::rndInt(20); field_0x139A = 5 + cM::rndInt(5); } } else if (dBird_c::getInstance()->getField_0xFCC() > 0 && --field_0x139A < 0) { - field_0x13AC = 2; - field_0x1340 = 0.0f; - field_0x1344 = 1.0f; + mParallelMoveSubstate = 2; + mParallelMoveRateShift = 0.0f; + mParallelMoveRateShiftTarget = 1.0f; field_0x13B5 = 50 + cM::rndInt(20); field_0x139A = 5 + cM::rndInt(5); field_0x139C = 0; } else if (++field_0x139C > 0) { - field_0x13AC = 0; + mParallelMoveSubstate = 0; field_0x13A4[0] = 0; field_0x130C = 100.0f; field_0x139C = 0; } } break; case 2: { - field_0x12AC.set(sArrVecs[field_0x1360]); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(field_0x12AC, field_0x12AC); - field_0x12A0.set(field_0x12AC); - field_0x1264.set(0.0f, 0.0f, 3000.0f); - field_0x1234.multVecSR(field_0x1264, field_0x1264); - field_0x12A0 += field_0x1264; + mParallelMoveScratchVec.set(sArrVecs[field_0x1360]); + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(mParallelMoveScratchVec, mParallelMoveScratchVec); + field_0x12A0.set(mParallelMoveScratchVec); + mScratchVec.set(0.0f, 0.0f, 3000.0f); + mScratchMtx.multVecSR(mScratchVec, mScratchVec); + field_0x12A0 += mScratchVec; distXZ = mBirdPosition.distance(field_0x12A0); if (field_0x13A4[0] == 0) { field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); field_0x13A4[0] = 20.0f + cM::rndF(10.0f); } @@ -768,31 +767,30 @@ void dAcESkytail_c::executeState_ParallelMove() { field_0x13B4 = 60; mCollider.AtSet(); startSound(SE_ESktl_V_ATTACK); - field_0x13AC = 3; - field_0x127C.set(v0 - mPosition); - field_0x127C.normalizeRS(); + mParallelMoveSubstate = 3; + mAccel.set(v0 - mPosition); + mAccel.normalizeRS(); field_0x130C = 80.0f; if (dBird_c::getInstance()->getField_0xFAC().mag() > field_0x130C) { field_0x130C = dBird_c::getInstance()->getField_0xFAC().mag(); } - field_0x1378 = cLib::targetAngleY(mPosition, v0); - field_0x137A = -cLib::targetAngleX(mPosition, v0); + mAngleTargetY = cLib::targetAngleY(mPosition, v0); + mAngleTargetX = -cLib::targetAngleX(mPosition, v0); fn_172_45D0(); } - sLib::addCalcScaledDiff(&field_0x1340, field_0x1344, 0.1f, 0.1f); + sLib::addCalcScaledDiff(&mParallelMoveRateShift, mParallelMoveRateShiftTarget, 0.1f, 0.1f); sLib::addCalcScaledDiff(&field_0x133C, 2.0f, 0.1f, 0.1f); sLib::addCalcAngle(&field_0x1372, 4000, 1, 1000); } break; - case 3: { mVec3_c v2 = v0 - mPosition; v2.normalizeRS(); - cLib::chasePos(field_0x127C, v2, 0.01f); + cLib::chasePos(mAccel, v2, 0.01f); field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, mPosition + field_0x127C * mSpeed); - field_0x137A = -cLib::targetAngleX(mPosition, mPosition + field_0x127C * mSpeed); + mAngleTargetY = cLib::targetAngleY(mPosition, mPosition + mAccel * mSpeed); + mAngleTargetX = -cLib::targetAngleX(mPosition, mPosition + mAccel * mSpeed); fn_172_45D0(); if (field_0x13B4 != 0) { field_0x13B4--; @@ -809,10 +807,10 @@ void dAcESkytail_c::executeState_ParallelMove() { if (pCcObj != nullptr) { if (pCcObj->GetAtActor()->mProfileName == fProfile::BIRD) { mCollider.ClrAt(); - field_0x13AC = 4; + mParallelMoveSubstate = 4; } else if (pCcObj->GetAtActor()->isActorPlayer()) { mCollider.ClrAt(); - field_0x13AC = 4; + mParallelMoveSubstate = 4; } } } break; @@ -831,13 +829,13 @@ void dAcESkytail_c::executeState_ParallelMove() { } s16 zTarget = mAngle.y; - sLib::addCalcAngle(mAngle.y.ref(), field_0x1378, 8, field_0x137C); - sLib::addCalcAngle(mAngle.x.ref(), field_0x137A, 8, field_0x137C); + sLib::addCalcAngle(mAngle.y.ref(), mAngleTargetY, 8, mAngleStep); + sLib::addCalcAngle(mAngle.x.ref(), mAngleTargetX, 8, mAngleStep); zTarget -= mAngle.y; sLib::addCalcAngle(mAngle.z.ref(), zTarget * 8, 2, 3000); - sLib::addCalcAngle(&field_0x137C, field_0x137E, 1, 100); + sLib::addCalcAngle(&mAngleStep, field_0x137E, 1, 100); sLib::addCalcScaledDiff(&mSpeed, field_0x130C, 1.0f, 3.0f); - f32 rate = mSpeed / 50.0f + field_0x1340; + f32 rate = mSpeed / 50.0f + mParallelMoveRateShift; if (rate > 5.0f) { mBodyMdl.setRate(5.0f); } else { @@ -851,9 +849,9 @@ void dAcESkytail_c::finalizeState_ParallelMove() { } void dAcESkytail_c::initializeState_FrontAttack() { - field_0x13B1 = 1; - field_0x1396 = 2000; - field_0x138E = 0; + mFrontAttackSubstate = 1; + mMouthBigAmplitudeAdd = 2000; + mMouthSmallAmplitudeAdd = 0; field_0x1398 = 4000; mCollider.AtSet(); field_0x13A4[0] = 10.0f + cM::rndF(5.0f); @@ -865,20 +863,20 @@ void dAcESkytail_c::executeState_FrontAttack() { dBird_c::getInstance()->fn_129_C4A0(v0, f); f32 distXZ = v0.absXZTo(mPosition); distXZ = mPosition.distance(v0); - switch (field_0x13B1) { + switch (mFrontAttackSubstate) { case 1: { if (field_0x13A4[0] == 0) { field_0x137E = 1000.0f + cM::rndF(500.0f); - field_0x1378 = cLib::targetAngleY(mPosition, v0); - field_0x137A = -cLib::targetAngleX(mPosition, v0); + mAngleTargetY = cLib::targetAngleY(mPosition, v0); + mAngleTargetX = -cLib::targetAngleX(mPosition, v0); fn_172_45D0(); field_0x13A4[0] = 10.0f + cM::rndF(5.0f); } if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ < 2500.0f) { - field_0x13B1 = 0; + mFrontAttackSubstate = 0; mVec3_c v = mPosition - v0; - field_0x135C = 30 + (s32)(v.mag() / mSpeed); + mFrontAttackSubstateTimer = 30 + (s32)(v.mag() / mSpeed); } } else { changeState(StateID_ParallelMove); @@ -886,41 +884,40 @@ void dAcESkytail_c::executeState_FrontAttack() { } } break; case 0: { - field_0x135C--; - field_0x1378 = cLib::targetAngleY(mPosition, v0); - field_0x137A = -cLib::targetAngleX(mPosition, v0); + mFrontAttackSubstateTimer--; + mAngleTargetY = cLib::targetAngleY(mPosition, v0); + mAngleTargetX = -cLib::targetAngleX(mPosition, v0); fn_172_45D0(); if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ < 1300.0f) { startSound(SE_ESktl_V_ATTACK); - field_0x13B1 = 2; + mFrontAttackSubstate = 2; mVec3_c v = mPosition - v0; - field_0x135C = 30 + (s32)(v.mag() / mSpeed); + mFrontAttackSubstateTimer = 30 + (s32)(v.mag() / mSpeed); } - - } else if (!isWithinCameraView(0.0f, 0.0f) || field_0x135C <= 0) { + } else if (!isWithinCameraView(0.0f, 0.0f) || mFrontAttackSubstateTimer <= 0) { changeState(StateID_ParallelMove); return; } } break; case 2: { - field_0x135C--; + mFrontAttackSubstateTimer--; if (isWithinCameraView(0.0f, 0.0f)) { if (distXZ < 800.0f) { - field_0x13B1 = 4; + mFrontAttackSubstate = 4; mVec3_c v = mPosition - v0; - field_0x135C = 120 + (s32)(v.mag() / mSpeed); + mFrontAttackSubstateTimer = 120 + (s32)(v.mag() / mSpeed); } - } else if (!isWithinCameraView(0.0f, 0.0f) || field_0x135C <= 0) { + } else if (!isWithinCameraView(0.0f, 0.0f) || mFrontAttackSubstateTimer <= 0) { changeState(StateID_ParallelMove); return; } } break; case 4: { - field_0x135C--; + mFrontAttackSubstateTimer--; isWithinCameraView(0.0f, 0.0f); - if (field_0x135C <= 0) { + if (mFrontAttackSubstateTimer <= 0) { if (isWithinCameraView(0.0f, 0.0f)) { changeState(StateID_Move); } else { @@ -931,11 +928,11 @@ void dAcESkytail_c::executeState_FrontAttack() { } break; } s16 zTarget = mAngle.y; - sLib::addCalcAngle(mAngle.y.ref(), field_0x1378, 8, field_0x137C); - sLib::addCalcAngle(mAngle.x.ref(), field_0x137A, 8, field_0x137C); + sLib::addCalcAngle(mAngle.y.ref(), mAngleTargetY, 8, mAngleStep); + sLib::addCalcAngle(mAngle.x.ref(), mAngleTargetX, 8, mAngleStep); zTarget -= mAngle.y; sLib::addCalcAngle(mAngle.z.ref(), zTarget * 8, 2, 3000); - sLib::addCalcAngle(&field_0x137C, field_0x137E, 1, 100); + sLib::addCalcAngle(&mAngleStep, field_0x137E, 1, 100); cCcD_Obj *pCcObj = mCollider.findAtHit(); if (pCcObj != nullptr) { if (pCcObj->GetAtActor()->mProfileName == fProfile::BIRD) { @@ -949,8 +946,8 @@ void dAcESkytail_c::executeState_FrontAttack() { } void dAcESkytail_c::finalizeState_FrontAttack() { mCollider.ClrAt(); - field_0x138E = 0; - field_0x1396 = 0; + mMouthSmallAmplitudeAdd = 0; + mMouthBigAmplitudeAdd = 0; field_0x1398 = 0; } @@ -962,7 +959,7 @@ void dAcESkytail_c::finalizeState_Charge() { void dAcESkytail_c::initializeState_Dead() { field_0x13AF = 0; - field_0x13A0 = 0; + mDeadStateTimer = 0; field_0x1334 = 8.0f + cM::rndFX(1.0f); field_0x1330 = 8.0f + cM::rndFX(1.0f); field_0x1338 = 7.0f + cM::rndFX(1.0f); @@ -977,23 +974,23 @@ void dAcESkytail_c::initializeState_Dead() { } void dAcESkytail_c::executeState_Dead() { - field_0x13A0++; - field_0x13A2 = 500; - field_0x1264.set(0.0f, 0.0f, 5000.0f); + mDeadStateTimer++; + mHitCooldown = 500; + mScratchVec.set(0.0f, 0.0f, 5000.0f); field_0x12A0.set(0.0f, 0.0f, 0.0f); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(field_0x1264, field_0x12A0); + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(mScratchVec, field_0x12A0); field_0x137E = 500.0f + cM::rndF(1000.0f); - field_0x1378 = cLib::targetAngleY(mPosition, field_0x12A0); - field_0x137A = -cLib::targetAngleX(mPosition, field_0x12A0); + mAngleTargetY = cLib::targetAngleY(mPosition, field_0x12A0); + mAngleTargetX = -cLib::targetAngleX(mPosition, field_0x12A0); fn_172_45D0(); - sLib::addCalcAngle(mAngle.y.ref(), field_0x1378, 8, field_0x137C); - sLib::addCalcAngle(mAngle.x.ref(), field_0x137A, 8, field_0x137C); + sLib::addCalcAngle(mAngle.y.ref(), mAngleTargetY, 8, mAngleStep); + sLib::addCalcAngle(mAngle.x.ref(), mAngleTargetX, 8, mAngleStep); mAngle.z += -0xAAA; field_0x1374 += -4000; @@ -1006,7 +1003,7 @@ void dAcESkytail_c::executeState_Dead() { mBodyMdl.setRate(mSpeed / 50.0f); bool bVar = false; - if (field_0x13A0 > 15) { + if (mDeadStateTimer > 15) { bVar = fn_80030570(mBodyMdl.getModel(), 1, 2.0f); for (int i = 0; i < (s32)ARRAY_LENGTH(mAntennaMdl); ++i) { fn_80030570(mAntennaMdl[i].getModel(), 0, 2.0f); @@ -1014,22 +1011,22 @@ void dAcESkytail_c::executeState_Dead() { } static mVec3_c scale(2.0f, 2.0f, 2.0f); - switch (field_0x1364) { + switch (mDeadSubstate) { case 0: { - mBodyTransform.mScaleSpine11 = 0.0f; - if (mBodyTransform.mScaleSpine11 == 0.0f) { + mBodyTransform.mScaleRear = 0.0f; + if (mBodyTransform.mScaleRear == 0.0f) { mBodyMdl.getModel().setCullMode(3, GX_CULL_ALL, false); dJEffManager_c::spawnEffect( PARTICLE_RESOURCE_ID_MAPPING_460_, mBodyTransform.mPos[10], &mRotation, &scale, nullptr, nullptr, 0, 0 ); - field_0x1364 = 2; + mDeadSubstate = 2; } } break; case 1: { - if (field_0x13A0 > 15) { + if (mDeadStateTimer > 15) { mBodyMdl.getModel().setCullMode(3, GX_CULL_ALL, false); - field_0x1364 = 2; + mDeadSubstate = 2; } } break; @@ -1060,11 +1057,11 @@ void dAcESkytail_c::executeState_Skytail() { mSpeed = 150.0f; mVec3_c v0(0.0f, -200.0f, 2100.0f); - field_0x1234.transS(mBirdPosition); - field_0x1234.ZXYrotM(mBirdRotation); - field_0x1234.multVec(v0, mPosition); - field_0x1378 = mBirdRotation.y; - field_0x137A = mBirdRotation.x; + mScratchMtx.transS(mBirdPosition); + mScratchMtx.ZXYrotM(mBirdRotation); + mScratchMtx.multVec(v0, mPosition); + mAngleTargetY = mBirdRotation.y; + mAngleTargetX = mBirdRotation.x; fn_172_45D0(); mAngle.y = mBirdRotation.y; mAngle.x = mBirdRotation.x; @@ -1074,7 +1071,7 @@ void dAcESkytail_c::executeState_Skytail() { } void dAcESkytail_c::finalizeState_Skytail() {} -void dAcESkytail_c::fn_172_3CD0() { +void dAcESkytail_c::wiggleBody() { mMtx_c m1, m0; mVec3_c v3, v0, v1, v2; mVec3_c *pos; @@ -1097,21 +1094,21 @@ void dAcESkytail_c::fn_172_3CD0() { for (u32 i = 1; i < ARRAY_LENGTH(mBodyTransform.mPos); ++i, ++pos, ++ang) { if (i >= 11) { - s16 ang0 = field_0x1368 * 0.85f * field_0x136A - (i * field_0x136C); + s16 ang0 = mLiveTimer * 0.85f * field_0x136A - (i * field_0x136C); f32 sin0 = mAng(ang0).sin(); - s16 ang1 = field_0x1368 * (field_0x136E + field_0x1372 + 0x600) - (i * 8000); + s16 ang1 = mLiveTimer * (field_0x136E + field_0x1372 + 0x600) - (i * 8000); f32 sin1 = mAng(ang1).sin(); v1.set( - fVar14 * (sin0 * 1.5f), mBodyTransform.mScaleSpine11 * (fVar2 * (sin1 * 5.0f)), - mBodyTransform.mScaleSpine11 * -10.0f + fVar14 * (sin0 * 1.5f), mBodyTransform.mScaleRear * (fVar2 * (sin1 * 5.0f)), + mBodyTransform.mScaleRear * -10.0f ); } else { - s16 ang0 = field_0x1368 * 0.85f * field_0x136A - (i * field_0x136C); + s16 ang0 = mLiveTimer * 0.85f * field_0x136A - (i * field_0x136C); f32 sin0 = mAng(ang0).sin(); - s16 ang1 = field_0x1368 * (field_0x136E + field_0x1372 + 0x600) - (i * 8000); + s16 ang1 = mLiveTimer * (field_0x136E + field_0x1372 + 0x600) - (i * 8000); f32 sin1 = mAng(ang1).sin(); sin1 = fVar2 * (sin1 * 5.0f); @@ -1132,7 +1129,7 @@ void dAcESkytail_c::fn_172_3CD0() { pos[0] = pos[-1] + v1; if (i >= 11) { - v0.z = mBodyTransform.mScaleSpine11 * 100.0f; + v0.z = mBodyTransform.mScaleRear * 100.0f; } else { v0.z = 100.0f; } @@ -1143,13 +1140,15 @@ void dAcESkytail_c::fn_172_3CD0() { fVar14 *= 1.15f; } - mBodyTransform.field_0x10DE = (field_0x1396 + 6000) * ((mAng(field_0x1390).sin() * 0.6f - 0.4f) - 0.1f); - mBodyTransform.field_0x10E0 = (field_0x138E + 4000) * ((mAng(field_0x1388).sin() * 0.6f - 0.4f) - 0.8f); + mBodyTransform.mMouthBigAngleY = + (mMouthBigAmplitudeAdd + 6000) * ((mAng(mMouthBigPhase).sin() * 0.6f - 0.4f) - 0.1f); + mBodyTransform.mMouthSmallAngleY = + (mMouthSmallAmplitudeAdd + 4000) * ((mAng(mMouthSmallPhase).sin() * 0.6f - 0.4f) - 0.8f); f32 scale = 0.8f; } -void dAcESkytail_c::fn_172_4240(s32 idx) { +void dAcESkytail_c::wiggleAntenna(s32 idx) { mMtx_c m0, m1; mVec3_c v3, v0, v1, v2; mVec3_c *pos; @@ -1186,7 +1185,7 @@ void dAcESkytail_c::fn_172_4240(s32 idx) { f32 fVar2 = 1.0f; f32 fVar3 = field_0x1338 + 1.0f; for (u32 i = 1; i < ARRAY_LENGTH(mAntennaTransform[idx].mPos); ++i, ++ang, ++pos) { - s16 angle = field_0x1368 * (field_0x1370 + 0x600) - (i * 8000); + s16 angle = mLiveTimer * (field_0x1370 + 0x600) - (i * 8000); v1.set(fVar1 * fVar2, 0.0f, 50.0f * mAng(angle).sin() * fVar3); m1.multVec(v1, v2); @@ -1219,7 +1218,7 @@ void dAcESkytail_c::fn_172_45E0() { return; } -void dAcESkytail_c::fn_172_45F0() { +void dAcESkytail_c::clampRotationX() { if (mRotation.x - 7282 <= (u32)mAng::d2s(140) - 1) { mRotation.x = 7281; // 40 deg } else if (mRotation.x + 0x8000 <= (u32)mAng::d2s(140)) {