d_a_e_skytail Naming and small comment pass

This commit is contained in:
elijah-thomas774
2026-09-24 23:08:50 -04:00
parent e9199fba27
commit e0c200920f
3 changed files with 310 additions and 295 deletions
@@ -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<s>__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
+100 -84
View File
@@ -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
+206 -207
View File
@@ -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)) {