tp/src/d/actor/d_a_e_yr.cpp

2624 lines
86 KiB
C++

/**
* @file d_a_e_yr.cpp
*
*/
#include "d/dolzel_rel.h"
#include "d/actor/d_a_e_yr.h"
#include "d/actor/d_a_horse.h"
#include "d/d_cc_d.h"
#include "d/d_path.h"
#include "f_op/f_op_actor_enemy.h"
class e_yrHIO_c : public fOpAcm_HIO_entry_c {
public:
e_yrHIO_c() {
mInvulnerable = 0;
mStationary = 0;
field_0x8 = 20.0f;
field_0xc = 2500.0f;
mModelScale = 1.0f;
mAttackAMinTime = 2000;
mAttackAMaxTime = 2500;
mAttackBMinTime = 2000;
mAttackBMaxTime = 2500;
mAttackMoveSpeed = 0.35f;
mAttackFrequency = 0.5f;
mFlyPlaybackSpeed = 1.0f;
mHoveringPlaybackSpeed = 1.0f;
mAttackPlaybackSpeed = 1.0f;
field_0x38 = 1.0f;
mChancePlaybackSpeed = 1.0f;
field_0x40 = 30;
field_0x44 = 1.0f;
field_0x48 = 1.0f;
field_0x4c = 1.5f;
mBrakeStartDist = 1100;
field_0x54 = 3.5f;
mChanceTime = 60;
mLargeDamage = 60.0f;
mSmallDamage = 40.0f;
mHitOccurrenceFrame = 1;
mDetectDistSky = 8000.0f;
mDetectHeightSky = 3000.0f;
mDetectAngleSky = 20000;
mDetectDistGround = 1500.0f;
mDetectHeightGround = 2000.0f;
mDetectAngleGround = 20000;
}
/* 808282CC */ virtual ~e_yrHIO_c() {}
#if DEBUG
void genMessage(JORMContext*);
#endif
/* 0x04 */ u8 mInvulnerable;
/* 0x05 */ u8 mStationary;
/* 0x06 */ u8 mSuddenAttack;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
/* 0x10 */ f32 mTurningRadius;
/* 0x14 */ f32 mModelScale;
/* 0x18 */ s16 mAttackAMinTime;
/* 0x1A */ s16 mAttackAMaxTime;
/* 0x1C */ s16 mAttackBMinTime;
/* 0x1E */ s16 mAttackBMaxTime;
/* 0x20 */ f32 mAttackMoveSpeed;
/* 0x24 */ f32 mAttackFrequency;
/* 0x28 */ f32 mFlyPlaybackSpeed;
/* 0x2C */ f32 mHoveringPlaybackSpeed;
/* 0x30 */ f32 mAttackPlaybackSpeed;
/* 0x34 */ s16 mChanceTime;
/* 0x38 */ f32 field_0x38;
/* 0x3C */ f32 mChancePlaybackSpeed;
/* 0x40 */ s16 field_0x40;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ f32 field_0x48;
/* 0x4C */ f32 field_0x4c;
/* 0x50 */ s16 mBrakeStartDist;
/* 0x54 */ f32 field_0x54;
/* 0x58 */ f32 mLargeDamage;
/* 0x5C */ f32 mSmallDamage;
/* 0x60 */ s16 mHitOccurrenceFrame;
/* 0x64 */ f32 mDetectDistSky;
/* 0x68 */ f32 mDetectDistGround;
/* 0x6C */ s16 mDetectAngleSky;
/* 0x6E */ s16 mDetectAngleGround;
/* 0x70 */ f32 mDetectHeightSky;
/* 0x74 */ f32 mDetectHeightGround;
};
#if DEBUG
void e_yrHIO_c::genMessage(JORMContext* ctx) {
// "Kagarok"
ctx->genLabel("\u3000闇カーゴロック", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genCheckBox("不死身", &mInvulnerable, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genCheckBox("静止", &mStationary, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genCheckBox("いきなり攻撃", &mSuddenAttack, 1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("旋回半径", &mTurningRadius, 0.0, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("モデルスケール", &mModelScale, 0.0, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("A攻時間(最短)", &mAttackAMinTime, 0, 15000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("A攻時間(最長)", &mAttackAMaxTime, 0, 15000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("B攻時間(最短)", &mAttackBMinTime, 0, 15000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("B攻時間(最長)", &mAttackBMaxTime, 0, 15000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("攻撃移動速度", &mAttackMoveSpeed, 0.0, 2.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("攻撃頻度", &mAttackFrequency, 0.0, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("fly再生速度", &mFlyPlaybackSpeed, 0.0, 3.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("hovering再生速度", &mHoveringPlaybackSpeed, 0.0, 3.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
ctx->genSlider("atack再生速度", &mAttackPlaybackSpeed, 0.0, 3.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("chance再生速度", &mChancePlaybackSpeed, 0.0, 3.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
ctx->genSlider("chance時間", &mChanceTime, 0, 200, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("brake開始距離", &mBrakeStartDist, 0, 3000, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("大ダメージ力", &mLargeDamage, 0.0, 150.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("小ダメージ力", &mSmallDamage, 0.0, 150.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
ctx->genSlider("HIT発生フレーム", &mHitOccurrenceFrame, 0, 5, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("プ認距離(空)", &mDetectDistSky, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("プ認高さ(空)", &mDetectHeightSky, 0.0f, 5000.0f, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("プ認角度(空)", &mDetectAngleSky, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
ctx->genSlider("プ認距離(地)", &mDetectDistGround, 0.0f, 10000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
ctx->genSlider("プ認高さ(地)", &mDetectHeightGround, 0.0f, 5000.0f, 0, NULL, 0xffff, 0xffff,
0x200, 0x18);
ctx->genSlider("プ認角度(地)", &mDetectAngleGround, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, 0x200,
0x18);
}
#endif
/* 8082220C-808225C0 0000EC 03B4+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
static int nodeCallBack(J3DJoint* i_joint, int param_1) {
if (param_1 == 0) {
J3DJoint* joint = i_joint;
s32 jointNo = joint->getJntNo();
J3DModel* model = j3dSys.getModel();
e_yr_class* yr = (e_yr_class*)model->getUserArea();
e_yr_class* yr_2 = yr;
if (yr != NULL) {
MTXCopy(model->getAnmMtx(jointNo), *calc_mtx);
if (jointNo == 3 || jointNo == 4) {
cMtx_YrotM(*calc_mtx, yr->field_0xe84 / 2);
cMtx_XrotM(*calc_mtx, yr->field_0xe84);
cMtx_ZrotM(*calc_mtx, yr->field_0xe88 / 3);
} else if (jointNo == 8) {
cMtx_ZrotM(*calc_mtx, -(yr->field_0xe88 / 3));
} else if (jointNo == 7) {
cMtx_ZrotM(*calc_mtx, -yr->field_0xe88);
}
if (jointNo >= 10 && jointNo <= 13) {
cMtx_ZrotM(*calc_mtx, yr->field_0xea8 / 2);
cMtx_XrotM(*calc_mtx, yr->field_0xe96[jointNo - 9]);
} else {
if (jointNo >= 15 && jointNo <= 18) {
cMtx_ZrotM(*calc_mtx, yr->field_0xeaa / 2);
cMtx_XrotM(*calc_mtx, yr->field_0xe96[jointNo - 9]);
}
}
if (jointNo == 3) {
cMtx_ZrotM(*calc_mtx, yr->field_0xeb4);
} else if (jointNo == 19) {
cMtx_ZrotM(*calc_mtx, -yr->field_0xeb4);
} else if (jointNo == 20) {
cMtx_ZrotM(*calc_mtx, -yr->field_0xeb6);
} else if (jointNo == 25) {
cMtx_ZrotM(*calc_mtx, -yr->field_0xeb8);
} else if (jointNo == 30 || jointNo == 31) {
cMtx_YrotM(*calc_mtx, (s16)yr->field_0xebe);
cMtx_ZrotM(*calc_mtx, (s16)yr->field_0xebe);
}
if (jointNo == TREG_S(0)) {
cMtx_YrotM(*calc_mtx, TREG_S(1));
cMtx_XrotM(*calc_mtx, TREG_S(2));
cMtx_ZrotM(*calc_mtx, TREG_S(3));
} else if (jointNo == TREG_S(4)) {
cMtx_YrotM(*calc_mtx, TREG_S(5));
cMtx_XrotM(*calc_mtx, TREG_S(6));
cMtx_ZrotM(*calc_mtx, TREG_S(7));
}
if (yr->field_0xec4 != 0) {
if ((jointNo & 1) != 0) {
cMtx_YrotM(*calc_mtx, yr->field_0xec4);
} else if ((jointNo & 2) != 0) {
cMtx_XrotM(*calc_mtx, yr->field_0xec4);
} else if ((jointNo & 4) != 0) {
cMtx_ZrotM(*calc_mtx, yr->field_0xec4);
}
}
model->setAnmMtx(jointNo, *calc_mtx);
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
}
}
return 1;
}
/* 808225C0-80822790 0004A0 01D0+00 1/1 0/0 0/0 .text yr_disappear__FP10e_yr_class */
static void yr_disappear(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
cXyz unkXyz1;
cXyz unkXyz2(0.0f, 0.0f, 0.0f);
cXyz unkXyz3(1.0f, 1.0f, 1.0f);
dComIfGp_particle_set(0x826c, &actor->current.pos, NULL, &unkXyz3);
if (i_this->field_0x5b8 == 6) {
cMtx_YrotS(*calc_mtx, actor->shape_angle.y);
unkXyz1.x = 28.0f;
unkXyz1.y = 88.0f;
unkXyz1.z = 4.0f;
MtxPosition(&unkXyz1, &unkXyz2);
}
unkXyz2 += actor->current.pos;
dComIfGp_particle_set(0x826d, &unkXyz2, NULL, &unkXyz3);
fopAcM_seStart(actor, Z2SE_DARK_VANISH, 0);
fopAcM_createItemFromEnemyID(Z2_ENEMY_YK, &actor->current.pos, -1, -1, 0, 0, 0,
0);
if (i_this->field_0x668 != 0xff) {
dComIfGs_onSwitch(i_this->field_0x668, fopAcM_GetRoomNo(actor));
}
}
/* 80822790-80822848 000670 00B8+00 8/8 0/0 0/0 .text anm_init__FP10e_yr_classifUcf */
static void anm_init(e_yr_class* i_this, int param_1, f32 param_2, u8 param_3, f32 param_4) {
if (i_this->field_0x66b < 3) {
i_this->mpMorfSO->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_Yr", param_1), param_3,
param_2, param_4, 0.0f, -1.0f);
i_this->field_0x5b8 = param_1;
}
}
/* 80822848-80822874 000728 002C+00 3/3 0/0 0/0 .text kuti_open__FP10e_yr_classsUl */
static void kuti_open(e_yr_class* i_this, s16 param_1, u32 param_2) {
if (i_this->field_0xe8a == 0) {
i_this->field_0xe8a = param_1;
i_this->field_0xe8c = param_1 - 5;
i_this->field_0xe90 = param_2;
}
}
/* 80822874-80822954 000754 00E0+00 1/1 0/0 0/0 .text e_yr_player_bg_check__FP10e_yr_class */
static int e_yr_player_bg_check(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
dBgS_LinChk linChk;
cXyz unkXyz1;
cXyz unkXyz2;
cXyz unkXyz3;
unkXyz3 = player->current.pos;
unkXyz3.y += 100.0f;
unkXyz2 = actor->current.pos;
unkXyz2.y += 100.0f;
linChk.Set(&unkXyz2, &unkXyz3, actor);
if (dComIfG_Bgsp().LineCross(&linChk)) {
return 1;
} else {
return 0;
}
}
/* 80828DBC-80828E34 000014 0078+00 10/10 0/0 0/0 .bss l_e_yrHIO */
static e_yrHIO_c l_e_yrHIO;
/* 80822954-80822AFC 000834 01A8+00 4/4 0/0 0/0 .text e_yr_player_view_check__FP10e_yr_class */
static int e_yr_player_view_check(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
if (l_e_yrHIO.mSuddenAttack != 0) {
return 1;
}
if (i_this->field_0x665 != 0xff) {
if (i_this->mPlayerLatDist > i_this->field_0x665 * 100.0f || e_yr_player_bg_check(i_this))
{
return 0;
}
} else if (i_this->field_0x669 == 4 || i_this->field_0x669 == 7) {
if (i_this->mPlayerLatDist > l_e_yrHIO.mDetectDistGround || e_yr_player_bg_check(i_this)) {
return 0;
}
} else if (i_this->mPlayerLatDist > l_e_yrHIO.mDetectDistSky || e_yr_player_bg_check(i_this)) {
return 0;
}
s16 detectAngle;
f32 detectHeight;
if (i_this->field_0x669 == 4 || i_this->field_0x669 == 7) {
detectAngle = l_e_yrHIO.mDetectAngleGround;
detectHeight = l_e_yrHIO.mDetectHeightGround;
} else {
detectAngle = l_e_yrHIO.mDetectAngleSky;
detectHeight = l_e_yrHIO.mDetectHeightSky;
}
f32 vDistToPlayer = fabsf(player->current.pos.y - actor->eyePos.y);
if (vDistToPlayer < detectHeight) {
s16 r28 = actor->current.angle.y - i_this->field_0xe84 - i_this->mYawToPlayer;
if (r28 < 0) {
r28 = -r28;
}
if ((u16)r28 < detectAngle) {
return 1;
}
}
return 0;
}
/* 80822AFC-80822D4C 0009DC 0250+00 1/1 0/0 0/0 .text path_check__FP10e_yr_class */
static void path_check(e_yr_class* i_this) {
static u8 check_index[255];
if (i_this->field_0x6ec != 0) {
dPnt* point;
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
dBgS_LinChk linChk;
cXyz unkXyz1;
cXyz unkXyz2;
unkXyz1 = actor->current.pos;
unkXyz1.y += 100.0f;
point = i_this->field_0x6ec->m_points;
for (s32 i = 0; i < i_this->field_0x6ec->m_num; i++, point++) {
unkXyz2.x = point->m_position.x;
unkXyz2.y = point->m_position.y + 100.0f;
unkXyz2.z = point->m_position.z;
linChk.Set(&unkXyz1, &unkXyz2, actor);
if (!dComIfG_Bgsp().LineCross(&linChk)) {
check_index[i] = 1;
} else {
check_index[i] = 0;
}
}
f32 xDist;
f32 yDist;
f32 zDist;
f32 unkFloat1 = 0.0f;
bool unkFlag1 = false;
for (s32 i = 0; i < 100; i++, unkFloat1 += 50.0f) {
point = i_this->field_0x6ec->m_points;
for (s32 j = 0; j < i_this->field_0x6ec->m_num; j++, point++) {
if (check_index[j] != 0) {
xDist = actor->current.pos.x - point->m_position.x;
yDist = actor->current.pos.y - point->m_position.y;
zDist = actor->current.pos.z - point->m_position.z;
if (JMAFastSqrt(xDist * xDist + yDist * yDist + zDist * zDist) < unkFloat1) {
i_this->field_0x6ea = j - (s32)i_this->field_0x6eb;
if (i_this->field_0x6ea >= (s8)i_this->field_0x6ec->m_num) {
i_this->field_0x6ea = i_this->field_0x6ec->m_num;
} else {
if (i_this->field_0x6ea < 0) {
i_this->field_0x6ea = 0;
}
}
unkFlag1 = true;
break;
}
}
}
if (unkFlag1) {
break;
}
}
if (!unkFlag1) {
i_this->field_0x6e9 = 0;
} else {
i_this->field_0x6e9 = i_this->field_0x666 + 1;
}
}
}
/* 80822D4C-80822DB8 000C2C 006C+00 2/2 0/0 0/0 .text pl_horse_check__FP10e_yr_class */
static int pl_horse_check(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
if (daPy_getPlayerActorClass()->checkHorseRide() && dComIfGp_getHorseActor()->speedF > 20.0f) {
return 1;
} else {
return 0;
}
}
/* 80822DB8-80822E48 000C98 0090+00 1/1 0/0 0/0 .text daE_Yr_shadowDraw__FP10e_yr_class
*/
static void daE_Yr_shadowDraw(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
J3DModel* model = i_this->mpMorfSO->getModel();
cXyz unkXyz1;
unkXyz1.set(actor->current.pos.x, actor->current.pos.y + 150.0f + BREG_F(18),
actor->current.pos.z);
i_this->mShadowKey = dComIfGd_setShadow(i_this->mShadowKey, 1, model, &unkXyz1,
800.0f + BREG_F(19), 40.0f + BREG_F(17), actor->current.pos.y,
i_this->mAcch.GetGroundH(), i_this->mAcch.m_gnd, &actor->tevStr,
0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
}
/* 80822E48-80822F0C 000D28 00C4+00 1/0 0/0 0/0 .text daE_Yr_Draw__FP10e_yr_class */
static int daE_Yr_Draw(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
if (i_this->field_0x67e != 0) {
return 1;
}
J3DModel* model = i_this->mpMorfSO->getModel();
g_env_light.settingTevStruct(2, &actor->current.pos, &actor->tevStr);
g_env_light.setLightTevColorType_MAJI(model, &actor->tevStr);
dComIfGd_setListDark();
i_this->mpMorfSO->entryDL();
dComIfGd_setList();
daE_Yr_shadowDraw(i_this);
return 1;
}
/* 80822F0C-80823148 000DEC 023C+00 6/6 0/0 0/0 .text e_yr_pos_move__FP10e_yr_class */
static void e_yr_pos_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
cXyz unkXyz1;
f32 xDiff = i_this->field_0x680.x - actor->current.pos.x;
f32 yDiff = i_this->field_0x680.y - actor->current.pos.y;
f32 zDiff = i_this->field_0x680.z - actor->current.pos.z;
s16 yaw = cM_atan2s(xDiff, zDiff);
s16 pitch = -cM_atan2s(yDiff, JMAFastSqrt(xDiff * xDiff + zDiff * zDiff));
s16 angleY = actor->current.angle.y;
cLib_addCalcAngleS2(&actor->current.angle.y, yaw, 10 + TREG_S(3), i_this->field_0x69c * i_this->field_0x694);
angleY = (angleY - actor->current.angle.y) * 0x20;
s16 limit = 5500 + TREG_S(1);
if (angleY > limit) {
angleY = limit;
} else if (angleY < -limit) {
angleY = -limit;
}
cLib_addCalcAngleS2(&actor->current.angle.z, angleY, 10 + TREG_S(3),
i_this->field_0x69c * i_this->field_0x694 * 0.5f);
cLib_addCalcAngleS2(&actor->current.angle.x, pitch, 10 + TREG_S(3),
i_this->field_0x69c * i_this->field_0x694);
cLib_addCalc2(&i_this->field_0x694, 1.0f, 1.0f, 0.04f);
cLib_addCalc2(&actor->speedF, i_this->field_0x68c, 1.0f, i_this->field_0x690);
unkXyz1.x = 0.0f;
unkXyz1.y = 0.0f;
unkXyz1.z = actor->speedF;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
cMtx_XrotM(*calc_mtx, actor->current.angle.x);
MtxPosition(&unkXyz1, &actor->speed);
actor->current.pos.x += actor->speed.x;
actor->current.pos.y += actor->speed.y;
actor->current.pos.z += actor->speed.z;
if (i_this->field_0x6b0 != 0) {
i_this->field_0x6b0--;
actor->current.pos.y += 5.0f;
}
}
/* 80823148-80823284 001028 013C+00 1/1 0/0 0/0 .text e_yr_ground_pos_move__FP10e_yr_class */
static void e_yr_ground_pos_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
cXyz unkXyz1;
cXyz unkXyz2;
f32 xDiff = i_this->field_0x680.x - actor->current.pos.x;
f32 zDiff = i_this->field_0x680.z - actor->current.pos.z;
s16 yaw = cM_atan2s(xDiff, zDiff);
cLib_addCalcAngleS2(&actor->current.angle.y, yaw, TREG_S(3) + 2,
i_this->field_0x69c * i_this->field_0x694);
cLib_addCalc2(&i_this->field_0x694, 1.0f, 1.0f, 0.1f);
cLib_addCalc2(&actor->speedF, i_this->field_0x68c, 1.0f, i_this->field_0x690);
unkXyz1.x = 0.0f;
unkXyz1.y = 0.0f;
unkXyz1.z = actor->speedF;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
MtxPosition(&unkXyz1, &unkXyz2);
actor->speed.x = unkXyz2.x;
actor->speed.z = unkXyz2.z;
actor->current.pos.x += actor->speed.x;
actor->current.pos.y += actor->speed.y;
actor->current.pos.z += actor->speed.z;
actor->speed.y = actor->speed.y - 3.0f;
if (i_this->mAcch.ChkGroundHit()) {
actor->speed.y = -0.5f;
}
}
/* 80823284-808239F8 001164 0774+00 2/1 0/0 0/0 .text e_yr_path_move__FP10e_yr_class */
static void e_yr_path_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
s8 unkChar1 = 0;
i_this->field_0xe94 = 2;
s32 frame;
switch (i_this->field_0x67c) {
case 0:
frame = i_this->mpMorfSO->getFrame();
if (actor->current.pos.y > i_this->field_0x680.y &&
frame == 9 + TREG_S(0))
{
i_this->field_0x67c = 1;
anm_init(i_this, 12, 12.0f + TREG_F(0), 2, 1.0f);
}
break;
case 1:
if (actor->current.pos.y <= (i_this->field_0x680).y) {
i_this->field_0x67c = 0;
anm_init(i_this, 8, 5.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed);
}
break;
case 10:
default:
break;
}
f32 xDiff;
f32 yDiff;
f32 zDiff;
f32 dist;
dPnt* point;
switch (i_this->field_0x67d) {
case 0: {
i_this->field_0x6ea += i_this->field_0x6eb;
if (i_this->field_0x6ea >= (s8)i_this->field_0x6ec->m_num) {
if (dPath_ChkClose(i_this->field_0x6ec)) {
i_this->field_0x6ea = 0;
} else {
i_this->field_0x6eb = -1;
i_this->field_0x6ea = i_this->field_0x6ec->m_num - 2;
}
s32 nextId = i_this->field_0x6ec->m_nextID;
if (nextId != 0xffff) {
i_this->field_0x6ec = dPath_GetRoomPath(nextId, fopAcM_GetRoomNo(actor));
JUT_ASSERT(0x451, i_this->field_0x6ec != 0);
}
} else {
if (i_this->field_0x6ea < 0) {
i_this->field_0x6eb = 1;
i_this->field_0x6ea = 1;
}
}
}
case -1: {
i_this->field_0x67d = 1;
point = i_this->field_0x6ec->m_points;
point = &point[i_this->field_0x6ea];
if (i_this->field_0x6f0 != 0) {
i_this->field_0x68c = 25.0f;
i_this->field_0x690 = 2.0f;
i_this->field_0x6f0 = 0;
} else {
if (actor->current.pos.y < i_this->field_0x680.y) {
i_this->field_0x68c = 20.0f;
i_this->field_0x690 = 1.0f + TREG_F(11);
} else {
i_this->field_0x68c = 30.0f;
i_this->field_0x690 = 1.0f + TREG_F(13);
}
}
i_this->field_0x694 = TREG_F(7);
i_this->field_0x680.x = point->m_position.x;
i_this->field_0x680.y = point->m_position.y;
i_this->field_0x680.z = point->m_position.z;
if (point->mArg0 == 1) {
i_this->field_0x67d = 10;
} else if (i_this->field_0x66b == 0) {
i_this->field_0x680.x = point->m_position.x + cM_rndFX(150.0f);
i_this->field_0x680.y = point->m_position.y + cM_rndFX(150.0f);
i_this->field_0x680.z = point->m_position.z + cM_rndFX(150.0f);
}
if ((l_e_yrHIO.mSuddenAttack != 0 ||
i_this->field_0x6a4[3] == 0 && i_this->field_0x66b == 0) &&
e_yr_player_view_check(i_this) != 0)
{
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
i_this->field_0x6e9 = 0;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FIND, -1);
}
break;
}
case 1: {
cLib_addCalc2(&i_this->field_0x694, 1.0f, 1.0f, 0.04f);
xDiff = i_this->field_0x680.x - actor->current.pos.x;
yDiff = i_this->field_0x680.y - actor->current.pos.y;
zDiff = i_this->field_0x680.z - actor->current.pos.z;
dist = JMAFastSqrt(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff);
i_this->field_0x69c =
10.0f * TREG_F(5) + 100.0f + (1000.0f * TREG_F(6) + 500000.0f) / dist;
if (i_this->field_0x69c > 10.0f * TREG_F(4) + 5000.0f) {
i_this->field_0x69c = 10.0f * TREG_F(4) + 5000.0f;
}
if (dist < 10.0f * TREG_F(10) + 300.0f) {
i_this->field_0x67d = 0;
point = i_this->field_0x6ec->m_points;
point = &point[i_this->field_0x6ea];
if (point->mArg0 == 5) {
i_this->field_0x66c = 1;
} else if (point->mArg0 == 6) {
fopAcM_delete(actor);
}
}
break;
}
case 10: {
i_this->field_0x68c = 20.0f;
xDiff = i_this->field_0x680.x - actor->current.pos.x;
yDiff = i_this->field_0x680.y + 50.0f + TREG_F(8) * 10.0f -
actor->current.pos.y;
zDiff = i_this->field_0x680.z - actor->current.pos.z;
dist = JMAFastSqrt(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff);
if (dist < TREG_F(9) * 10.0f + 300.0f) {
i_this->field_0x67d = 20;
i_this->field_0x67c = 10;
actor->speed.y = 0.0f;
unkChar1 = -1;
}
break;
}
case 20: {
unkChar1 = -1;
frame = i_this->mpMorfSO->getFrame();
cLib_addCalc2(&actor->current.pos.x, i_this->field_0x680.x, 0.1f, fabsf(actor->speed.x));
cLib_addCalc2(&actor->current.pos.z, i_this->field_0x680.z, 0.1f, fabsf(actor->speed.z));
actor->current.pos.y += actor->speed.y;
if (frame > 15 + TREG_S(2)) {
actor->speed.y -= 0.8f + TREG_F(7);
}
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800);
if (i_this->mAcch.ChkGroundHit()) {
actor->speed.y = -0.5f;
}
if (frame == 44) {
}
if (i_this->field_0x6a4[2] == 0) {
i_this->field_0x67d = 23;
}
break;
}
case 22: {
unkChar1 = 1;
if (i_this->field_0x6a4[2] == 0) {
i_this->field_0x6ea++;
if (i_this->field_0x6ea >= i_this->field_0x6ec->m_num) {
i_this->field_0x6ea = 0;
}
point = i_this->field_0x6ec->m_points;
point = &point[i_this->field_0x6ea];
i_this->field_0x680.x = point->m_position.x;
i_this->field_0x680.y = point->m_position.y;
i_this->field_0x680.z = point->m_position.z;
if (point->mArg0 == 2) {
i_this->field_0x67d = 25;
} else {
i_this->field_0x67d = 23;
i_this->field_0x69c = 1000.0f;
i_this->field_0x694 = 1.0f;
}
}
i_this->field_0x68c = 0.0f;
actor->speedF = 0.0f;
break;
}
case 23: {
unkChar1 = 1;
frame = i_this->mpMorfSO->getFrame();
if (frame >= TREG_S(3) && frame <= 9 + TREG_S(4)) {
i_this->field_0x68c = i_this->field_0x6b4 * 5.0f;
actor->speedF = i_this->field_0x6b4 * 5.0f;
} else {
i_this->field_0x68c = 0.0f;
actor->speedF = 0.0f;
xDiff = i_this->field_0x680.x - actor->current.pos.x;
zDiff = i_this->field_0x680.z - actor->current.pos.z;
if (JMAFastSqrt(xDiff * xDiff + zDiff * zDiff) < 50.0f) {
i_this->field_0x67d = 22;
point = i_this->field_0x6ec->m_points;
point = &point[i_this->field_0x6ea];
if (point->mArg0 == 3) {
i_this->field_0x6a4[2] = cM_rndF(50.0f) + 50.0f;
}
}
}
break;
}
case 25: {
unkChar1 = 1;
anm_init(i_this, 8, 5.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed);
i_this->field_0x67d = 0xff;
i_this->field_0x69c = 10.0f * TREG_F(4) + 5000.0f;
i_this->field_0x68c = 25.0f;
i_this->field_0x690 = 2.0f;
actor->speedF = 0.0f;
i_this->field_0x6b0 = 10 + TREG_S(4);
break;
}
default:
break;
}
switch (unkChar1) {
case 0:
e_yr_pos_move(i_this);
break;
case 1:
e_yr_ground_pos_move(i_this);
break;
}
}
/* 808239F8-80823D3C 0018D8 0344+00 1/1 0/0 0/0 .text e_yr_auto_move__FP10e_yr_class */
static void e_yr_auto_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
cXyz unkXyz2;
i_this->field_0xe94 = 2;
s32 frame;
switch (i_this->field_0x67c) {
case 0:
frame = i_this->mpMorfSO->getFrame();
if (i_this->field_0x6a4[0] == 0 && frame == 9 + TREG_S(0)) {
i_this->field_0x67c = 1;
i_this->field_0x6a4[0] = cM_rndF(200.0f) + 50.0f;
anm_init(i_this, 12, 12.0f + TREG_F(0), 2, 1.0f);
}
break;
case 1:
if (i_this->field_0x6a4[0] == 0 && actor->current.pos.y < i_this->field_0x680.y) {
i_this->field_0x67c = 0;
i_this->field_0x6a4[0] = cM_rndF(60.0f) + 20.0f;
anm_init(i_this, 8, 5.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed);
}
break;
case 10:
break;
case 20:
frame = i_this->mpMorfSO->getFrame();
if (frame == 34) {
i_this->field_0x67c = 0;
i_this->field_0x6a4[0] = cM_rndF(60.0f) + 20.0f;
anm_init(i_this, 8, 0.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed);
}
break;
}
f32 xDiff;
f32 zDiff;
switch (i_this->field_0x67d) {
case 0:
if (i_this->field_0x6a4[1] == 0) {
xDiff =
actor->home.pos.x + cM_rndFX(l_e_yrHIO.field_0xc) - actor->current.pos.x;
zDiff =
actor->home.pos.z + cM_rndFX(l_e_yrHIO.field_0xc) - actor->current.pos.z;
if (JMAFastSqrt(xDiff * xDiff + zDiff * zDiff) > 200.0f) {
i_this->field_0x6a4[1] = cM_rndF(150.0f) + 50.0f;
i_this->field_0x680.x = xDiff + actor->current.pos.x;
i_this->field_0x680.y = actor->home.pos.y + cM_rndF(500.0f);
i_this->field_0x680.z = zDiff + actor->current.pos.z;
i_this->field_0x694 = 0.0f;
i_this->field_0x68c = 25.0f + TREG_F(10);
i_this->field_0x690 = 1.0f + TREG_F(11);
i_this->field_0x69c = cM_rndF(300.0f) + 200.0f;
if ((l_e_yrHIO.mSuddenAttack != 0 ||
i_this->field_0x6a4[3] == 0 && i_this->field_0x66b == 0) &&
e_yr_player_view_check(i_this))
{
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FIND, -1);
}
}
}
}
e_yr_pos_move(i_this);
}
/* 80823D3C-80824BBC 001C1C 0E80+00 2/1 0/0 0/0 .text e_yr_atack_move__FP10e_yr_class */
static void e_yr_atack_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player2 = (daPy_py_c*)playerActor;
f32 playerDist = fopAcM_searchPlayerDistance(actor);
cXyz unkXyz1;
s8 unkFlag1 = 0;
s8 unkFlag2 = 0;
i_this->field_0xe94 = 1;
if ((s8)i_this->field_0xec8 != 0) {
i_this->field_0xec8 = 0;
i_this->field_0x6a4[5] = l_e_yrHIO.mAttackFrequency * (cM_rndF(30.0f) + 20.0f);
anm_init(i_this, 15, 10.0f, 2, l_e_yrHIO.mHoveringPlaybackSpeed);
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
i_this->field_0x67d = 4;
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
s32 frame = i_this->mpMorfSO->getFrame();
switch (i_this->field_0x67d) {
case 0: {
i_this->field_0x67d = 1;
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
i_this->field_0x68c = 30.0f;
i_this->field_0x690 = 1.0f;
anm_init(i_this, 12, 10.0f, 2, 1.0f);
}
case 1:
case 2: {
i_this->field_0x680 = playerActor->current.pos;
i_this->field_0x680.y += 200.0f;
e_yr_pos_move(i_this);
unkXyz1 = i_this->field_0x680 - actor->current.pos;
f32 dist = unkXyz1.abs();
if (dist < 100.0f * TREG_F(9) + 500.0f) {
i_this->field_0x67d = 3;
} else {
if (i_this->field_0x67d == 1) {
i_this->field_0x69c = 400.0f;
if (dist < l_e_yrHIO.mBrakeStartDist) {
i_this->field_0x67d = 2;
anm_init(i_this, 11, 10.0f, 0, 1.0f);
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
} else {
i_this->field_0xeb0 = KREG_F(0xb) + 1000.0f;
i_this->field_0x69c = 2000.0f;
}
}
break;
}
case 3:
case 35: {
i_this->field_0x68c = 0.0f;
i_this->field_0x690 = 3.0f;
e_yr_pos_move(i_this);
if (actor->speedF <= 0.1f || i_this->mAcch.ChkWallHit())
{
i_this->field_0x67d = 4;
i_this->field_0x6a4[0] = 0;
if (i_this->field_0x664 == 4 || i_this->field_0x664 == 7) {
i_this->field_0x6a4[1] = l_e_yrHIO.mAttackBMinTime + cM_rndF(l_e_yrHIO.mAttackBMaxTime - l_e_yrHIO.mAttackBMinTime);
} else {
i_this->field_0x6a4[1] = l_e_yrHIO.mAttackAMinTime + cM_rndF(l_e_yrHIO.mAttackAMaxTime - l_e_yrHIO.mAttackAMinTime);
}
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
if (i_this->field_0x67d == 3 && actor->speedF <= 10.0f) {
i_this->field_0x67d = 35;
anm_init(i_this, 15, 5.0f, 2, l_e_yrHIO.mHoveringPlaybackSpeed);
}
break;
}
case 4: {
i_this->field_0x6e0++;
unkXyz1.x = cM_ssin(i_this->field_0x6e0 * (TREG_S(2) + 1000)) * 200.0f;
unkXyz1.y = cM_ssin(i_this->field_0x6e0 * (TREG_S(3) + 0x4b0)) * 100.0f;
unkXyz1.z = cM_scos(i_this->field_0x6e0 * (TREG_S(4) + 0x5dc)) * 200.0f;
cLib_addCalc2(&actor->current.pos.x, i_this->field_0x680.x + unkXyz1.x, 0.1f,
i_this->field_0x694 * 30.0f);
cLib_addCalc2(&actor->current.pos.y, i_this->field_0x680.y + unkXyz1.y, 0.1f,
i_this->field_0x694 * 30.0f);
cLib_addCalc2(&actor->current.pos.z, i_this->field_0x680.z + unkXyz1.z, 0.1f,
i_this->field_0x694 * 30.0f);
cLib_addCalc2(&i_this->field_0x694, l_e_yrHIO.mAttackMoveSpeed, 1.0f,
l_e_yrHIO.mAttackMoveSpeed * 0.1f);
cLib_addCalcAngleS2(&actor->current.angle.y, i_this->mYawToPlayer, 5,
i_this->field_0x698 * 1280.0f);
cLib_addCalcAngleS2(&actor->current.angle.x, i_this->mPitchToPlayer, 5,
i_this->field_0x698 * 768.0f);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, i_this->field_0x698 * 768.0f);
cLib_addCalc2(&i_this->field_0x698, 1.0f, 1.0f, 0.05f);
if (i_this->field_0x6a4[1] == 0) {
unkFlag1 = 1;
} else {
if ((i_this->field_0x6a4[0] & 0x1f) == 0 && cM_rndF(1.0f) < 0.5f) {
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
if (i_this->field_0x6a4[0] == 0) {
cMtx_YrotS(*calc_mtx, playerActor->shape_angle.y + (s16)cM_rndFX(7000.0f));
unkXyz1.x = 0.0f;
unkXyz1.y = cM_rndF(100.0f) + 250.0f + TREG_F(15);
unkXyz1.z = cM_rndF(100.0f) + 300.0f + TREG_F(16);
MtxPosition(&unkXyz1, &i_this->field_0x680);
i_this->field_0x680 += playerActor->current.pos;
i_this->field_0x6a4[0] = cM_rndF(100.0f) + 20.0f;
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
}
if (i_this->field_0x6a4[5] == 0 &&
i_this->mPlayerLatDist > 10.0f * TREG_F(5) + 300.0f &&
i_this->mPlayerLatDist < 10.0f * TREG_F(6) + 400.0f && frame >= 14 + BREG_S(7))
{
i_this->field_0x67d = 7;
i_this->field_0x6a4[5] = l_e_yrHIO.mAttackFrequency * (cM_rndF(30.0f) + 20.0f);
anm_init(i_this, 4, 2.0f, 0, l_e_yrHIO.mAttackPlaybackSpeed);
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_ATTACK, -1);
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
i_this->field_0x68c = 0.0f;
i_this->field_0x690 = 5.0f;
actor->speedF = 0.0f;
}
}
if (playerDist > 600.0f) {
i_this->field_0x67d = 5;
i_this->field_0x6a4[0] = cM_rndF(35.0f) + 35.0f;
}
break;
}
case 5: {
if (((i_this->field_0x6de & 0x3f) == 0) && cM_rndF(1.0f) < 0.5f) {
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
i_this->field_0x68c = 25.0f;
i_this->field_0x690 = 2.0f;
i_this->field_0x69c = 2000.0f;
i_this->field_0x680.x = playerActor->current.pos.x;
i_this->field_0x680.y = playerActor->current.pos.y + 200.0f + TREG_F(19);
i_this->field_0x680.z = playerActor->current.pos.z;
e_yr_pos_move(i_this);
if (playerDist < 500.0f) {
i_this->field_0x67d = 4;
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
}
if (i_this->field_0x6a4[0] == 0 && playerDist > 1350.0f) {
i_this->field_0x67d = 0;
}
if (i_this->field_0x6a4[1] == 0) {
unkFlag1 = 1;
}
break;
}
case 7: {
i_this->field_0xe94 = 0;
if (frame == 3) {
kuti_open(i_this, 25, Z2SE_SY_DUMMY);
}
if (frame == 15 + TREG_S(5)) {
i_this->field_0x68c = 30.0f + TREG_F(7);
i_this->field_0x690 = 10.0f + TREG_F(8);
}
if (frame == 25 + TREG_S(6)) {
i_this->field_0x68c = -10.0f + TREG_F(9);
i_this->field_0x690 = 5.0f + TREG_F(10);
}
if (frame <= 23) {
i_this->field_0x69c = 2000.0f;
i_this->field_0x680.x = playerActor->current.pos.x;
i_this->field_0x680.y = playerActor->current.pos.y + 100.0f;
i_this->field_0x680.z = playerActor->current.pos.z;
} else {
i_this->field_0x69c = 0.0f;
}
e_yr_pos_move(i_this);
if (i_this->mpMorfSO->isStop()) {
i_this->field_0x67d = 4;
anm_init(i_this, 15, 3.0f, 2, l_e_yrHIO.mHoveringPlaybackSpeed);
i_this->field_0x6a4[5] = l_e_yrHIO.mAttackFrequency * (cM_rndF(30.0f) + 20.0f);
cMtx_YrotS(*calc_mtx, playerActor->shape_angle.y + (s16)cM_rndFX(3000.0f));
unkXyz1.x = 0.0f;
unkXyz1.y = cM_rndF(100.0f) + 250.0f + TREG_F(15);
unkXyz1.z = cM_rndF(100.0f) + 300.0f + TREG_F(16);
MtxPosition(&unkXyz1, &i_this->field_0x680);
i_this->field_0x680 += playerActor->current.pos;
i_this->field_0x6a4[0] = cM_rndF(100.0f) + 20.0f;
i_this->field_0x694 = i_this->field_0x698 = 1.0f;
} else {
if (frame >= 15 && frame <= 27) {
unkFlag2 = 1;
if (player2->checkPlayerGuard() && i_this->mSph1.ChkAtHit()) {
i_this->field_0x6b2 = 10;
i_this->field_0x67d = 10;
i_this->field_0x6a4[0] = l_e_yrHIO.mChanceTime;
anm_init(i_this, 14, 0.0f, 0, l_e_yrHIO.field_0x38);
i_this->field_0x68c = TREG_F(7);
i_this->field_0x690 = 1.0f;
actor->speedF = -20.0f;
unkFlag2 = 0;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_DAMAGE_S, -1);
}
}
}
break;
}
case 10:
case 11: {
i_this->field_0xe94 = 0;
e_yr_pos_move(i_this);
if ((s32)i_this->mpMorfSO->getFrame() == 24) {
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FURA, -1);
}
if (i_this->mpMorfSO->isStop() && i_this->field_0x67d == 10) {
i_this->field_0x67d = 11;
anm_init(i_this, 5, 0.0f, 2, l_e_yrHIO.mChancePlaybackSpeed);
}
if (i_this->field_0x6a4[0] == 0) {
i_this->field_0x67d = 4;
i_this->field_0x6a4[5] = l_e_yrHIO.mAttackFrequency * (cM_rndF(30.0f) + 20.0f);
anm_init(i_this, 15, 10.0f, 2, l_e_yrHIO.mHoveringPlaybackSpeed);
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
}
cLib_addCalc2(&actor->current.pos.y, i_this->mAcch.GetGroundH() + 100.0f + TREG_F(17), 0.05f, 5.0f);
break;
}
}
if (i_this->field_0x664 != 3) {
unkXyz1 = i_this->field_0x680 - actor->current.pos;
f32 unusedDist = unkXyz1.abs();
if (unkFlag1) {
i_this->field_0x669 = i_this->field_0x664;
if (i_this->field_0x666 != 0xff) {
i_this->field_0x6e9 = i_this->field_0x666 + 1;
path_check(i_this);
}
if (i_this->field_0x669 == 4 || i_this->field_0x669 == 7) {
i_this->field_0x67d = 10;
anm_init(i_this, 8, 5.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed);
} else {
i_this->field_0x67d = 0;
i_this->field_0x6a4[0] = 0;
i_this->field_0x6a4[1] = 0;
i_this->field_0x67c = 1;
anm_init(i_this, 12, 12.0f + TREG_F(0), 2, 1.0f);
actor->speedF = 0.0f;
i_this->field_0x680.y = playerActor->current.pos.y + 500.0f;
i_this->field_0x6a4[3] = cM_rndF(200.0f) + 300.0f;
}
i_this->field_0x694 = 0.0f;
}
}
if (unkFlag2) {
i_this->mSph1.SetC(actor->eyePos);
dComIfG_Ccsp()->Set(&i_this->mSph1);
} else {
i_this->mSph1.ClrAtHit();
}
if ((i_this->field_0x6de & 0x3f) == 0 && pl_horse_check(i_this)) {
i_this->field_0x669 = 9;
i_this->field_0x67d = 0;
}
}
/* 80824BBC-80825484 002A9C 08C8+00 1/1 0/0 0/0 .text e_yr_horse_move__FP10e_yr_class */
static void e_yr_horse_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
cXyz unkXyz2;
i_this->field_0xe94 = 1;
s32 frame = i_this->mpMorfSO->getFrame();
f32 horseSpeed = dComIfGp_getHorseActor()->speedF;
if (horseSpeed > 60.0f) {
horseSpeed = 60.0f;
} else {
if (horseSpeed < 30.0f) {
horseSpeed = 30.0f;
}
}
s8 unkFlag1 = 0;
f32 unkFloat0;
f32 unkFloat1;
f32 unkFloat2;
switch (i_this->field_0x67d) {
case 0:
i_this->field_0x67d = 2;
i_this->field_0x694 = i_this->field_0x698 = 0.0f;
anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.2f);
i_this->field_0x6a4[1] = cM_rndF(100.0f) + 60.0f;
i_this->field_0x6c4 = playerActor->shape_angle.y;
i_this->field_0x6a4[0] = 0;
i_this->field_0x6a4[2] = 0;
i_this->field_0x6a4[3] = 0;
case 1:
if (i_this->field_0x6a4[1] == 0) {
anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.0f);
i_this->field_0x67d = 2;
i_this->field_0x6a4[1] = cM_rndF(150.0f) + 70.0f;
}
goto lbl_case2;
case 2:
if (i_this->field_0x6a4[1] == 0) {
anm_init(i_this, 12, 10.0f, 2, 1.0f);
i_this->field_0x67d = 1;
i_this->field_0x6a4[1] = cM_rndF(150.0f) + 70.0f;
}
lbl_case2:
cLib_addCalcAngleS2(&i_this->field_0x6c4, playerActor->shape_angle.y, 4, 0x200);
if (i_this->field_0x6a4[0] == 0) {
i_this->field_0x6bc = cM_rndFX(400.0f);
i_this->field_0x6c0 = cM_rndF(180.0f) + 100.0f;
i_this->field_0x6a4[0] = cM_rndF(70.0f) + 20.0f;
}
unkFloat1 = cM_ssin(i_this->field_0x6de * (KREG_S(7) + 200)) * 20.0f;
cMtx_YrotS(*calc_mtx, i_this->field_0x6c4);
unkXyz1.x = i_this->field_0x6bc;
unkXyz1.y = i_this->field_0x6c0;
unkXyz1.z = (horseSpeed - 30.0f) * (unkFloat1 + 30.0f);
MtxPosition(&unkXyz1, &unkXyz2);
i_this->field_0x680 = playerActor->current.pos + unkXyz2;
unkXyz2 = i_this->field_0x680 - actor->current.pos;
unkFloat2 = unkXyz2.abs();
if (i_this->field_0x6a4[2] == 0) {
i_this->field_0x6a4[2] = cM_rndF(30.0f) + 20.0f;
if (unkFloat2 < 300.0f) {
horseSpeed *= 0.95f;
i_this->field_0x69c = 400.0f + NREG_F(3);
} else {
horseSpeed *= 1.2f;
i_this->field_0x69c = 600.0f + NREG_F(4);
}
i_this->field_0x68c = horseSpeed;
i_this->field_0x690 = 0.4f + NREG_F(2);
if (i_this->field_0x68c - actor->speedF > 10.0f) {
if (i_this->field_0x67d == 1) {
i_this->field_0x67d = 2;
anm_init(i_this, 8, 5.0f, 2, cM_rndF(0.2f) + 1.2f);
i_this->field_0x6a4[1] = cM_rndF(100.0f) + 60.0f;
} else {
i_this->mpMorfSO->setPlaySpeed(cM_rndF(0.2f) + 1.2f);
}
}
}
if ((i_this->field_0x6de & 0x3f) == 0 && cM_rndF(1.0f) < 0.5f) {
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
if (i_this->field_0x6a4[3] == 0) {
unkXyz1 = playerActor->eyePos - actor->current.pos;
if (unkXyz1.abs() < 250.0f + JREG_F(0)) {
i_this->field_0x67d = 3;
anm_init(i_this, 10, 5.0f, 2, cM_rndF(0.1f) + 1.0f);
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_ATTACK2, -1);
i_this->field_0x6a4[0] = 20 + JREG_S(1);
}
}
break;
case 3:
unkFlag1 = 1;
if (i_this->field_0x6a4[0] == 0) {
anm_init(i_this, 9, 3.0f, 0, 1.0f);
i_this->field_0x67d = 4;
}
break;
case 4:
unkFlag1 = 1;
unkFloat0 = 30.0f + JREG_F(1);
cMtx_YrotS(*calc_mtx, playerActor->shape_angle.y);
unkXyz1.x = 0.0f;
unkXyz1.y = 0.0f;
unkXyz1.z = -100.0f + JREG_F(7);
MtxPosition(&unkXyz1, &unkXyz2);
cLib_addCalc2(&actor->current.pos.x, playerActor->eyePos.x + unkXyz2.x, 0.5f, unkFloat0);
cLib_addCalc2(&actor->current.pos.y, playerActor->eyePos.y, 0.5f, unkFloat0);
cLib_addCalc2(&actor->current.pos.z, playerActor->eyePos.z + unkXyz2.z, 0.5f, unkFloat0);
if (frame >= 10) {
i_this->mSph1.SetC(i_this->field_0xe6c[0]);
dComIfG_Ccsp()->Set(&i_this->mSph1);
} else {
i_this->mSph1.ClrAtHit();
}
if (i_this->mpMorfSO->isStop() && JREG_S(3) == 0) {
i_this->field_0x67d = 2;
i_this->field_0x6a4[1] = 0;
i_this->field_0x6a4[3] = cM_rndF(100.0f) + 60.0f;
}
break;
}
if (unkFlag1) {
cLib_addCalcAngleS2(&i_this->field_0x6c4, playerActor->shape_angle.y, 2, 0x2000);
cMtx_YrotS(*calc_mtx, i_this->field_0x6c4);
unkXyz1.x = 0.0f;
unkXyz1.y = 200.0f;
unkXyz1.z = 100.0f;
MtxPosition(&unkXyz1, &unkXyz2);
i_this->field_0x680 = playerActor->current.pos + unkXyz2;
i_this->field_0x69c = NREG_F(4) + 1000.0f;
}
e_yr_pos_move(i_this);
if ((i_this->field_0x6de & 0x3f) == 0 && !pl_horse_check(i_this)) {
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
}
}
/* 80825484-80825ADC 003364 0658+00 2/1 0/0 0/0 .text e_yr_wait_move__FP10e_yr_class */
static void e_yr_wait_move(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
cXyz unkXyz2;
s8 unkChar1 = -1;
f32 absSpeedX = fabsf(actor->speed.x);
if (absSpeedX < 5.0f) {
absSpeedX = 5.0f;
}
f32 absSpeedZ = fabsf(actor->speed.z);
if (absSpeedZ < 5.0f) {
absSpeedZ = 5.0f;
}
i_this->field_0xe94 = 2;
f32 xDiff;
f32 yDiff;
f32 zDiff;
f32 dist;
f32 yOff;
s32 old_0x6e0;
switch (i_this->field_0x67d) {
case -1:
i_this->field_0x924 = 1;
if (!i_this->mpMorfSO->isStop()) {
break;
}
i_this->field_0x67d = 0;
case 0:
anm_init(i_this, 18, 1.0f, 2, 1.0f);
i_this->field_0x67d = 1;
i_this->field_0x6a4[0] = 100;
case 1:
i_this->field_0x924 = 1;
cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300);
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800);
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.2f, absSpeedX);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.2f, absSpeedZ);
actor->current.pos.y = actor->home.pos.y;
if (i_this->field_0x6a4[0] == 0 && e_yr_player_view_check(i_this)) {
i_this->field_0x67d = 2;
i_this->field_0x6a4[0] = 30;
anm_init(i_this, 7, 5.0f, 0, 1.0f);
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FIND, -1);
}
break;
case 2:
i_this->field_0xe94 = 1;
if (i_this->field_0x6a4[0] != 0) {
break;
}
i_this->field_0x67d = 3;
anm_init(i_this, 8, 5.0f, 2, 1.5f * l_e_yrHIO.mFlyPlaybackSpeed);
i_this->field_0x6a4[0] = 70 + TREG_S(0);
case 3:
i_this->field_0xe94 = 1;
cLib_addCalcAngleS2(&actor->current.angle.y, i_this->mYawToPlayer, 10, 0x200);
unkXyz1.x = 0.0f;
unkXyz1.y = TREG_F(0) * 10.0f + 300.0f;
unkXyz1.z = TREG_F(1) * 10.0f + 300.0f;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
MtxPosition(&unkXyz1, &unkXyz2);
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x + unkXyz2.x, 0.1f, 10.0f);
cLib_addCalc2(&actor->current.pos.y, actor->home.pos.y + unkXyz2.y, 0.1f, 10.0f);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z + unkXyz2.z, 0.1f, 10.0f);
if (i_this->field_0x6a4[0] == 0) {
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
}
break;
case 10:
case 11:
case 12:
unkChar1 = 0;
i_this->field_0xe94 = 0;
unkXyz1.x = 0.0f;
unkXyz1.y = 0.0f;
unkXyz1.z = 0.0f;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
MtxPosition(&unkXyz1, &unkXyz2);
yOff = 80.0f;
if (i_this->field_0x67d == 10) {
yOff = 300.0f;
}
i_this->field_0x680.x = actor->home.pos.x + unkXyz2.x;
i_this->field_0x680.y = actor->home.pos.y + yOff;
i_this->field_0x680.z = actor->home.pos.z + unkXyz2.z;
i_this->field_0x68c = 20.0f;
i_this->field_0x690 = 5.0f;
i_this->field_0x69c = 2000.0f;
xDiff = i_this->field_0x680.x - actor->current.pos.x;
yDiff = i_this->field_0x680.y - actor->current.pos.y;
zDiff = i_this->field_0x680.z - actor->current.pos.z;
dist = JMAFastSqrt(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff);
if (i_this->field_0x67d == 10) {
if (dist < 2000.0f) {
i_this->field_0x67d = 11;
} else {
if (e_yr_player_view_check(i_this)) {
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FIND, -1);
}
}
} else if (i_this->field_0x67d == 11) {
if (dist < (f32)l_e_yrHIO.mBrakeStartDist) {
i_this->field_0x67d = 12;
anm_init(i_this, 11, 10.0f, 0, 1.0f);
}
} else if (i_this->field_0x67d == 12) {
i_this->field_0xeb0 = 1000.0f + KREG_F(11);
if (dist < 10.0f * TREG_F(9) + 300.0f) {
i_this->field_0x67d = 20;
anm_init(i_this, 13, 5.0f, 2, l_e_yrHIO.field_0x44);
i_this->field_0x67c = 10;
actor->speed.y = 0.0f;
i_this->field_0x6e0 = 0;
unkChar1 = -1;
}
}
break;
case 20:
i_this->field_0x924 = 1;
i_this->field_0xe94 = 0;
old_0x6e0 = i_this->field_0x6e0;
i_this->field_0x6e0++;
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.1f, absSpeedX);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.1f, absSpeedZ);
actor->current.pos.y += actor->speed.y;
if (old_0x6e0 > l_e_yrHIO.field_0x40) {
actor->speed.y -= 0.8f + TREG_F(7);
}
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800);
cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800);
if (actor->current.pos.y <= actor->home.pos.y) {
actor->current.pos.y = actor->home.pos.y;
actor->speed.y = -0.5f;
if (old_0x6e0 > l_e_yrHIO.field_0x40) {
anm_init(i_this, 16, 5.0f, 0, l_e_yrHIO.field_0x48);
i_this->field_0x67d = 0xff;
}
}
break;
}
switch (unkChar1) {
case 0:
e_yr_pos_move(i_this);
break;
}
}
/* 80825ADC-808260E8 0039BC 060C+00 2/1 0/0 0/0 .text e_yr_su_wait_move__FP10e_yr_class
*/
static void e_yr_su_wait_move(e_yr_class* i_this) {
s32 old_0x6e0;
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
cXyz unkXyz2;
s8 unkChar1 = -1;
f32 absSpeedX = fabsf(actor->speed.x);
if (absSpeedX < 5.0f) {
absSpeedX = 5.0f;
}
f32 absSpeedZ = fabsf(actor->speed.z);
if (absSpeedZ < 5.0f) {
absSpeedZ = 5.0f;
}
i_this->field_0xe94 = 2;
f32 xDiff;
f32 yDiff;
f32 zDiff;
f32 dist;
f32 yOff;
switch (i_this->field_0x67d) {
case -1:
i_this->field_0x924 = 1;
if (!i_this->mpMorfSO->isStop()) {
break;
}
i_this->field_0x67d = 0;
case 0:
anm_init(i_this, 18, 1.0f, 2, 1.0f);
i_this->field_0x67d = 1;
i_this->field_0x6a4[0] = 100;
case 1:
i_this->field_0x924 = 1;
cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300);
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800);
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.2f, absSpeedX);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.2f, absSpeedZ);
actor->current.pos.y = actor->home.pos.y;
if (i_this->field_0x6a4[0] == 0 && e_yr_player_view_check(i_this)) {
i_this->field_0x67d = 2;
i_this->field_0x6a4[0] = 30;
anm_init(i_this, 7, 5.0f, 0, 1.0f);
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_FIND, -1);
}
break;
case 2:
i_this->field_0xe94 = 1;
if (i_this->field_0x6a4[0] != 0) {
break;
}
i_this->field_0x67d = 3;
anm_init(i_this, 8, 5.0f, 2, l_e_yrHIO.mFlyPlaybackSpeed * 1.5f);
i_this->field_0x6a4[0] = TREG_S(0) + 0x46;
case 3:
i_this->field_0xe94 = 1;
cLib_addCalcAngleS2(&actor->current.angle.y, i_this->mYawToPlayer, 10, 0x200);
unkXyz1.x = 0.0f;
unkXyz1.y = 10.0f * TREG_F(0) + 300.0f;
unkXyz1.z = 10.0f * TREG_F(1) + 300.0f;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
MtxPosition(&unkXyz1, &unkXyz2);
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x + unkXyz2.x, 0.1f, 10.0f);
cLib_addCalc2(&actor->current.pos.y, actor->home.pos.y + unkXyz2.y, 0.1f, 10.0f);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z + unkXyz2.z, 0.1f, 10.0f);
if (i_this->field_0x6a4[0] == 0) {
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
}
break;
case 10:
case 11:
case 12:
unkChar1 = 0;
i_this->field_0xe94 = 0;
unkXyz1.x = 0.0f;
unkXyz1.y = 0.0f;
unkXyz1.z = 0.0f;
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
MtxPosition(&unkXyz1, &unkXyz2);
yOff = 80.0f;
if (i_this->field_0x67d == 10) {
yOff = 300.0f;
}
i_this->field_0x680.x = actor->home.pos.x + unkXyz2.x;
i_this->field_0x680.y = actor->home.pos.y + yOff;
i_this->field_0x680.z = actor->home.pos.z + unkXyz2.z;
i_this->field_0x68c = 20.0f;
i_this->field_0x690 = 5.0f;
i_this->field_0x69c = 2000.0f;
xDiff = i_this->field_0x680.x - actor->current.pos.x;
yDiff = i_this->field_0x680.y - actor->current.pos.y;
zDiff = i_this->field_0x680.z - actor->current.pos.z;
dist = JMAFastSqrt(xDiff * xDiff + yDiff * yDiff + zDiff * zDiff);
if (i_this->field_0x67d == 10) {
if (dist < 2000.0f) {
i_this->field_0x67d = 11;
}
} else if (i_this->field_0x67d == 11) {
if (dist < (f32)l_e_yrHIO.mBrakeStartDist) {
i_this->field_0x67d = 12;
anm_init(i_this, 11, 10.0f, 0, 1.0f);
}
} else if (i_this->field_0x67d == 12) {
i_this->field_0xeb0 = 1000.0f + KREG_F(11);
if (dist < 10.0f * TREG_F(9) + 300.0f) {
i_this->field_0x67d = 20;
anm_init(i_this, 13, 5.0f, 2, l_e_yrHIO.field_0x44);
i_this->field_0x67c = 10;
actor->speed.y = 0.0f;
i_this->field_0x6e0 = 0;
unkChar1 = -1;
}
}
break;
case 20:
i_this->field_0x924 = 1;
i_this->field_0xe94 = 0;
old_0x6e0 = i_this->field_0x6e0;
i_this->field_0x6e0++;
cLib_addCalc2(&actor->current.pos.x, actor->home.pos.x, 0.1f, absSpeedX);
cLib_addCalc2(&actor->current.pos.z, actor->home.pos.z, 0.1f, absSpeedZ);
actor->current.pos.y += actor->speed.y;
if (old_0x6e0 > l_e_yrHIO.field_0x40) {
actor->speed.y -= 0.8f + TREG_F(7);
}
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 5, 0x800);
cLib_addCalcAngleS2(&actor->current.angle.y, actor->home.angle.y, 5, 0x300);
cLib_addCalcAngleS2(&actor->current.angle.z, 0, 5, 0x800);
if (actor->current.pos.y <= actor->home.pos.y) {
actor->current.pos.y = actor->home.pos.y;
actor->speed.y = -0.5f;
if (old_0x6e0 > l_e_yrHIO.field_0x40) {
anm_init(i_this, 16, 5.0f, 0, l_e_yrHIO.field_0x48);
i_this->field_0x67d = 0xff;
}
}
break;
}
switch (unkChar1) {
case 0:
e_yr_pos_move(i_this);
break;
}
}
f32 dummy() {
return -50.0f;
}
/* 808260E8-808264F4 003FC8 040C+00 1/1 0/0 0/0 .text e_yr_damage__FP10e_yr_class */
static s8 e_yr_damage(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopEn_enemy_c* enemy = (fopEn_enemy_c*)actor;
cXyz unkXyz1;
i_this->field_0xe94 = 0;
i_this->field_0x6d0 = 10;
actor->speedF = 0.0f;
cLib_addCalcAngleS2(&actor->current.angle.x, 0, 1, 0x800);
if (enemy->checkCutDownHitFlg()) {
enemy->offCutDownHitFlg();
i_this->field_0x67d = 3;
i_this->field_0x6a4[0] = 0x46;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_DEATH, -1);
enemy->offDownFlg();
i_this->field_0xeb0 = 5000.0f + KREG_F(17);
i_this->field_0xeb6 = i_this->field_0xeb8 = 0;
i_this->field_0xeba = cM_rndF(400.0f);
i_this->field_0xebc = cM_rndF(400.0f);
i_this->field_0xec6 = 15 + TREG_S(7);
actor->health = 0;
}
s8 retVal = 0;
s8 unkFlag1 = 1;
switch (i_this->field_0x67d) {
case 0:
anm_init(i_this, 6, 0.0f, 0, 1.0f);
i_this->field_0x67d = 1;
unkXyz1.x = 0.0f;
unkXyz1.y = BREG_F(4) + 30.0f + cM_rndF(10.0f);
unkXyz1.z = -i_this->field_0x6d8;
cMtx_YrotS(*calc_mtx, i_this->field_0x6d2);
MtxPosition(&unkXyz1, &actor->speed);
i_this->field_0xebe = 8000;
i_this->field_0x6a4[0] = cM_rndF(10.0f) + 30.0f;
i_this->field_0x6a4[1] = 60;
case 1:
actor->current.pos += actor->speed;
actor->speed.y += -3.0f;
if (actor->speed.y < 0.0f) {
actor->speed.x *= 0.96f;
actor->speed.z *= 0.96f;
cLib_addCalcAngleS2(&i_this->field_0x6f2.x, -0x4000, 4, 0x180 + BREG_S(7));
}
i_this->field_0xeb0 = 3000.0f + KREG_F(14);
actor->current.angle.y = actor->current.angle.y + i_this->field_0x6dc;
if (actor->health > 0) {
if (i_this->field_0x6a4[0] == 0 || i_this->mAcch.ChkGroundHit()) {
retVal = 1;
}
} else {
unkFlag1 = 0;
if (i_this->mAcch.ChkGroundHit() || i_this->field_0x6a4[1] == 0) {
yr_disappear(i_this);
fopAcM_delete(actor);
return unkFlag1;
}
}
}
if (actor->speed.y < -30.0f) {
actor->speed.y = -30.0f;
}
if (enemy->checkDownFlg()) {
enemy->setDownPos(&actor->current.pos);
}
if (i_this->field_0xec6 != 0) {
i_this->field_0xec6--;
i_this->field_0xec4 = i_this->field_0xec6 *
cM_ssin(i_this->field_0xec6 * (TREG_S(9) + 0x3800)) *
(100.0f + TREG_F(5));
}
if (retVal) {
i_this->field_0x6d8 = 0.0f;
i_this->field_0xebe = i_this->field_0xeb6 = i_this->field_0xeb8 = 0;
i_this->field_0x669 = 3;
i_this->field_0x67d = 0;
i_this->field_0x6a4[1] = l_e_yrHIO.mAttackBMinTime +
cM_rndF(l_e_yrHIO.mAttackBMaxTime - l_e_yrHIO.mAttackBMinTime);
i_this->field_0x6e9 = 0;
i_this->field_0xec8 = 1;
actor->current.angle.x = -0x3000;
enemy->offDownFlg();
}
return unkFlag1;
}
/* 808264F4-808267C0 0043D4 02CC+00 1/1 0/0 0/0 .text damage_check__FP10e_yr_class */
static void damage_check(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* unusedPlayer = dComIfGp_getPlayer(0);
i_this->mStts.Move();
if ((i_this->mSph3.ChkTgHit() || i_this->mSph2.ChkTgHit()) && i_this->field_0x6d0 == 0) {
if (i_this->mSph3.ChkTgHit()) {
i_this->mAtInfo.mpCollider = i_this->mSph3.GetTgHitObj();
} else {
if (i_this->mSph2.ChkTgHit()) {
i_this->mAtInfo.mpCollider = i_this->mSph2.GetTgHitObj();
}
}
s16 health = actor->health;
i_this->mAtInfo.mpActor = cc_at_check(actor, &i_this->mAtInfo);
if (i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_MIDNA_LOCK | AT_TYPE_10000000 |
AT_TYPE_WOLF_CUT_TURN | AT_TYPE_WOLF_ATTACK))
{
i_this->field_0x6d0 = 20;
} else {
i_this->field_0x6d0 = 10;
}
dKy_Sound_set(actor->current.pos, 100, fopAcM_GetID(i_this), 5);
#if DEBUG
if (l_e_yrHIO.mInvulnerable) {
actor->health = 40;
}
#endif
if (i_this->mAtInfo.mAttackPower == 0) {
i_this->field_0x669 = 3;
i_this->field_0x67d = 10;
i_this->field_0x6a4[0] = l_e_yrHIO.mChanceTime;
anm_init(i_this, 14, 0.0f, 0, l_e_yrHIO.field_0x38);
i_this->field_0x68c = TREG_F(7);
i_this->field_0x690 = 1.0f;
actor->speedF = -20.0f;
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_DAMAGE_S, -1);
} else {
if (i_this->mAtInfo.mHitType == 1) {
i_this->field_0x6d2 = i_this->mYawToPlayer;
i_this->field_0x6d4 = i_this->mPitchToPlayer;
} else {
i_this->field_0x6d2 = i_this->mAtInfo.mHitDirection.y;
i_this->field_0x6d4 = 0;
}
i_this->field_0x669 = 10;
i_this->field_0x67d = 0;
if (i_this->mAtInfo.mHitStatus) {
i_this->field_0x6d8 = l_e_yrHIO.mLargeDamage;
} else {
i_this->field_0x6d8 = l_e_yrHIO.mSmallDamage;
}
if (cM_rndF(1.0f) < 0.5f) {
i_this->field_0x6dc = cM_rndF(1000.0f) + 1000.0f;
} else {
i_this->field_0x6dc = -(cM_rndF(1000.0f) + 1000.0f);
}
if (actor->health <= 0) {
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_DEATH, -1);
} else {
i_this->mSound.startCreatureVoice(Z2SE_EN_YR_V_DAMAGE, -1);
}
}
}
}
/* 808267C0-80826AFC 0046A0 033C+00 1/1 0/0 0/0 .text ground_angle_set__FP10e_yr_class */
static void ground_angle_set(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
J3DModel* model;
cXyz unkXyz1;
cXyz unkXyz2;
Vec unkVec1;
s16 unkShort1 = 0;
s16 unkShort2 = 0;
f32 xDiff;
f32 yDiff;
f32 zDiff;
if (i_this->field_0x6f2.x <= -0x1000) {
cXyz unkXyz3;
cXyz unkXyz4;
dBgS_GndChk gndChk;
f32 unkFloat1 = 75.0f;
model = i_this->mpMorfSO->getModel();
MTXCopy(model->getAnmMtx(0), *calc_mtx);
unkXyz1.set(0.0f, 0.0f, 0.0f);
MtxPosition(&unkXyz1, &unkXyz3);
unkXyz3.y += 100.0f;
unkXyz3.y += 100.0f;
gndChk.SetPos(&unkXyz3);
unkXyz3.y = dComIfG_Bgsp().GroundCross(&gndChk);
if (unkXyz3.y != -1e+09f) {
unkVec1.x = unkXyz3.x;
unkVec1.y = unkXyz3.y + 100.0f;
unkVec1.z = unkXyz3.z + unkFloat1;
gndChk.SetPos(&unkVec1);
unkVec1.y = dComIfG_Bgsp().GroundCross(&gndChk);
if (unkVec1.y != -1e+09f) {
yDiff = unkVec1.y - unkXyz3.y;
zDiff = unkVec1.z - unkXyz3.z;
unkShort2 = -cM_atan2s(yDiff, zDiff);
if (unkShort2 > 0x3000 || unkShort2 < -0x3000) {
unkShort2 = 0;
}
}
unkVec1.x = unkXyz3.x + unkFloat1;
unkVec1.y = unkXyz3.y + 100.0f;
unkVec1.z = unkXyz3.z;
gndChk.SetPos(&unkVec1);
unkVec1.y = dComIfG_Bgsp().GroundCross(&gndChk);
if (unkVec1.y != -1e+09f) {
yDiff = unkVec1.y - unkXyz3.y;
xDiff = unkVec1.x - unkXyz3.x;
unkShort1 = (s16)cM_atan2s(yDiff, xDiff);
if (unkShort1 > 0x3000 || unkShort1 < -0x3000)
{
unkShort1 = 0;
}
}
}
dBgS_LinChk linChk;
cXyz unkXyz5;
cXyz unkXyz6;
cXyz unkXyz7;
unkXyz6 = actor->current.pos;
unkXyz6.y += 30.0f + JREG_F(5);
model = i_this->mpMorfSO->getModel();
unkXyz5.set(0.0f, 0.0f, 0.0f);
MTXCopy(model->getAnmMtx(5), *calc_mtx);
MtxPosition(&unkXyz5, &unkXyz7);
unkXyz7.y += JREG_F(6) + 30.0f;
linChk.Set(&unkXyz6, &unkXyz7, actor);
if (dComIfG_Bgsp().LineCross(&linChk)) {
unkXyz5 = unkXyz6 - unkXyz7;
cMtx_YrotS(*calc_mtx, cM_atan2s(unkXyz5.x, unkXyz5.z));
unkXyz5.x = 0.0f;
unkXyz5.y = 0.0f;
unkXyz5.z = TREG_F(11) + 50.0f;
MtxPosition(&unkXyz5, &unkXyz2);
actor->current.pos += unkXyz2;
}
}
cLib_addCalcAngleS2(&i_this->field_0x6f8.x, unkShort2, 1, 0x400);
cLib_addCalcAngleS2(&i_this->field_0x6f8.z, unkShort1, 1, 0x400);
}
/* 80826AFC-8082789C 0049DC 0DA0+00 2/1 0/0 0/0 .text daE_Yr_Execute__FP10e_yr_class */
static int daE_Yr_Execute(e_yr_class* i_this) {
static s32 wing_j[4] = {12, 13, 17, 18};
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
fopAc_ac_c* playerActor = dComIfGp_getPlayer(0);
daPy_py_c* player = (daPy_py_c*)playerActor;
cXyz unkXyz1;
cXyz unkXyz2;
f32 xDiff = playerActor->current.pos.x - actor->current.pos.x;
f32 yDiff = (100.0f + playerActor->current.pos.y) - actor->current.pos.y;
f32 zDiff = playerActor->current.pos.z - actor->current.pos.z;
i_this->mPlayerLatDist = JMAFastSqrt(xDiff * xDiff + zDiff * zDiff);
i_this->mYawToPlayer = cM_atan2s(xDiff, zDiff);
i_this->mPitchToPlayer = -cM_atan2s(yDiff, i_this->mPlayerLatDist);
i_this->field_0x6de++;
if (i_this->field_0x67e != 0) {
if (dComIfGs_isSwitch(i_this->field_0x67e - 1, fopAcM_GetRoomNo(actor))) {
i_this->field_0x67e = 0;
} else {
return 1;
}
}
actor->attention_info.flags = fopAc_AttnFlag_BATTLE_e;
fopAcM_OnStatus(actor, 0);
s8 unkFlag1 = 1;
if (l_e_yrHIO.mStationary == 0) {
for (s32 i = 0; i < 6; i++) {
if (i_this->field_0x6a4[i] != 0) {
i_this->field_0x6a4[i]--;
}
}
if (i_this->field_0x6b2 != 0) {
i_this->field_0x6b2--;
}
if (i_this->field_0x6d0 != 0) {
i_this->field_0x6d0--;
}
i_this->mpMorfSO->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(actor)));
if (i_this->field_0x5b8 == 12) {
i_this->mSound.startCreatureSoundLevel(Z2SE_EN_YR_GLIDE, 0, -1);
} else if (i_this->field_0x5b8 == 15) {
i_this->mSound.startCreatureSoundLevel(Z2SE_EN_YR_V_HOVERING, 0, -1);
if (i_this->mpMorfSO->checkFrame(12.0f)) {
i_this->mSound.startCreatureSound(Z2SE_EN_YR_WING, 0, -1);
}
} else if (i_this->mpMorfSO->checkFrame(27.0f) && i_this->field_0x5b8 == 8) {
i_this->mSound.startCreatureSound(Z2SE_EN_YR_WING, 0, -1);
} else if (i_this->mpMorfSO->checkFrame(11.0f) && i_this->field_0x5b8 == 13) {
i_this->mSound.startCreatureSound(Z2SE_EN_YR_WING, 0, -1);
} else if (i_this->mpMorfSO->checkFrame(12.0f) && i_this->field_0x5b8 == 15) {
i_this->mSound.startCreatureSound(Z2SE_EN_YR_WING, 0, -1);
}
if (i_this->field_0x669 == 10) {
unkFlag1 = e_yr_damage(i_this);
} else {
actor->attention_info.distances[fopAc_attn_BATTLE_e] = 3;
s8 unkFlag2 = 0;
if (i_this->field_0x6e9 != 0) {
e_yr_path_move(i_this);
} else {
if (i_this->field_0x669 == 9) {
actor->attention_info.distances[fopAc_attn_BATTLE_e] = 22;
e_yr_horse_move(i_this);
unkFlag2 = 1;
} else if (i_this->field_0x669 == 3) {
e_yr_atack_move(i_this);
unkFlag2 = 1;
} else if (i_this->field_0x669 == 4) {
e_yr_wait_move(i_this);
} else if (i_this->field_0x669 == 7) {
e_yr_su_wait_move(i_this);
} else {
e_yr_auto_move(i_this);
}
}
if (unkFlag2 != 0) {
i_this->mSound.setLinkSearch(true);
} else {
i_this->mSound.setLinkSearch(false);
}
cLib_addCalcAngleS2(&i_this->field_0x6f2.x, 0, 4, 0x800);
}
}
if (unkFlag1 == 0) {
fopAcM_OffStatus(actor, 0);
actor->attention_info.flags = 0;
}
actor->shape_angle = actor->current.angle + i_this->field_0x6f2;
ground_angle_set(i_this);
MtxTrans(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z, 0);
cMtx_XrotM(*calc_mtx, i_this->field_0x6f8.x);
cMtx_ZrotM(*calc_mtx, i_this->field_0x6f8.z);
cMtx_YrotM(*calc_mtx, actor->shape_angle.y);
cMtx_XrotM(*calc_mtx, actor->shape_angle.x);
cMtx_ZrotM(*calc_mtx, actor->shape_angle.z);
MtxScale(l_e_yrHIO.mModelScale, l_e_yrHIO.mModelScale, l_e_yrHIO.mModelScale, 1);
J3DModel* model = i_this->mpMorfSO->getModel();
model->setBaseScale(actor->scale);
model->setBaseTRMtx(*calc_mtx);
i_this->mpMorfSO->modelCalc();
if (i_this->field_0xf1c == 0) {
static u16 e_name[5] = {0x843A, 0x843B, 0x843C, 0x843D, 0x843E};
static s32 wing_j[4] = {11, 13, 16, 18};
for (s32 i = 0; i < 5; i++) {
i_this->mEmitterIds[i] = dComIfGp_particle_set(i_this->mEmitterIds[i], e_name[i], &actor->current.pos, NULL, NULL);
if (i != 4) {
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->mEmitterIds[i]);
if (emitter != NULL) {
emitter->setGlobalRTMatrix(model->getAnmMtx(wing_j[i]));
}
}
}
}
if (i_this->field_0x5b8 == 4 && i_this->mpMorfSO->checkFrame(1.0f)) {
dComIfGp_particle_set(0x8435, &actor->current.pos, NULL, NULL);
}
if (i_this->field_0x5b8 == 6) {
static u16 e_name[2] = {0x8444, 0x8445};
static s32 wing_j[2] = {12, 17};
i_this->field_0xf1c = 1;
for (s32 i = 0; i < 2; i++) {
i_this->mEmitterIds[i + 5] = dComIfGp_particle_set(i_this->mEmitterIds[i + 5], e_name[i], &actor->current.pos, NULL, NULL);
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(i_this->mEmitterIds[i + 5]);
if (emitter != NULL) {
emitter->setGlobalRTMatrix(model->getAnmMtx(wing_j[i]));
}
}
} else {
i_this->field_0xf1c = 0;
}
MTXCopy(model->getAnmMtx(6), *calc_mtx);
unkXyz1.set(0.0f, 0.0f, 0.0f);
MtxPosition(&unkXyz1, &actor->eyePos);
actor->attention_info.position = actor->eyePos;
actor->attention_info.position.y += 50.0f + 10.0f * TREG_F(8);
MTXCopy(model->getAnmMtx(22), *calc_mtx);
MtxPosition(&unkXyz1, &i_this->field_0xe6c[0]);
MTXCopy(model->getAnmMtx(27), *calc_mtx);
MtxPosition(&unkXyz1, &i_this->field_0xe6c[1]);
if (i_this->field_0x66b != 0) {
fopAc_ac_c* unkActor1;
switch (i_this->field_0x66b) {
case 1: {
i_this->field_0x66b = 2;
break;
}
case 2: {
if ((unkActor1 = fopAcM_SearchByID(i_this->field_0x674)) != 0) {
i_this->field_0x670 = unkActor1;
i_this->field_0x66b = 3;
}
break;
}
case 3: {
unkActor1 = i_this->field_0x670;
cXyz unkXyz3;
unkXyz3.x = i_this->field_0xe6c[0].x +
(i_this->field_0xe6c[1].x - i_this->field_0xe6c[0].x) / 2;
unkXyz3.y = i_this->field_0xe6c[0].y +
(i_this->field_0xe6c[1].y - i_this->field_0xe6c[0].y) / 2;
unkXyz3.z = i_this->field_0xe6c[0].z +
(i_this->field_0xe6c[1].z - i_this->field_0xe6c[0].z) / 2;
unkActor1->current.pos = unkXyz3;
unkActor1->current.angle = actor->current.angle;
unkActor1->shape_angle = actor->current.angle;
break;
}
}
}
if (i_this->field_0x6d0 != 0) {
cXyz unkXyz4(actor->eyePos.x - 10000.0f, 10000.0f, 200000.0f);
i_this->mSph2.SetC(unkXyz4);
i_this->mSph3.SetC(unkXyz4);
i_this->mSph4.SetC(unkXyz4);
} else {
i_this->mSph2.SetC(actor->eyePos);
i_this->mSph3.SetC(actor->current.pos);
i_this->mSph4.SetC(actor->current.pos);
}
dComIfG_Ccsp()->Set(&i_this->mSph2);
dComIfG_Ccsp()->Set(&i_this->mSph3);
dComIfG_Ccsp()->Set(&i_this->mSph4);
cXyz* unkXyzP = i_this->mStts.GetCCMoveP();
if (unkXyzP != NULL) {
f32 temp_f28 = 0.3f + TREG_F(19);
actor->current.pos.x += unkXyzP->x * temp_f28;
#if DEBUG
actor->current.pos.y += unkXyzP->y * temp_f28;
#endif
actor->current.pos.z += unkXyzP->z * temp_f28;
}
if (i_this->field_0x924 == 0 || fabsf(i_this->field_0x6d8) > 0.01f) {
f32 unkFloat1 = 70.0f + TREG_F(15);
if (i_this->field_0x669 == 10) {
unkFloat1 = 5.0f + TREG_F(14);
}
#if DEBUG
actor->current.pos.y -= unkFloat1;
actor->old.pos.y -= unkFloat1;
#else
cLib_addCalc2(&i_this->field_0x928, unkFloat1, 1.0f, 2.0f);
actor->current.pos.y -= i_this->field_0x928;
actor->old.pos.y -= i_this->field_0x928;
#endif
i_this->mAcch.CrrPos(dComIfG_Bgsp());
#if DEBUG
actor->current.pos.y += unkFloat1;
actor->old.pos.y += unkFloat1;
#else
actor->current.pos.y += i_this->field_0x928;
actor->old.pos.y += i_this->field_0x928;
#endif
}
i_this->field_0x924 = 0;
damage_check(i_this);
s16 unkShort1 = 0x800;
if (i_this->field_0xe94 != 0) {
if (i_this->field_0xe94 == 1) {
xDiff = playerActor->current.pos.x - actor->current.pos.x;
zDiff = playerActor->current.pos.z - actor->current.pos.z;
s16 yaw = cM_atan2s(xDiff, zDiff);
i_this->field_0xe86 = actor->current.angle.y - yaw;
if (i_this->field_0xe86 > 10000) {
i_this->field_0xe86 = 10000;
} else if (i_this->field_0xe86 < -10000) {
i_this->field_0xe86 = -10000;
}
} else if (i_this->field_0xe94 == 2) {
unkShort1 = 0x200;
if ((i_this->field_0x6de & 0x1f) == 0 && cM_rndF(1.0f) < 0.5f) {
i_this->field_0xe86 = cM_rndFX(10000.0f);
}
if ((i_this->field_0x6de & 0x3f) == 0 && cM_rndF(1.0f) < 0.5f) {
kuti_open(i_this, 25, Z2SE_EN_YR_V_NAKU);
}
}
i_this->field_0xe94 = 0;
} else {
i_this->field_0xe86 = 0;
}
cLib_addCalcAngleS2(&i_this->field_0xe84, -(i_this->field_0xe86 / 2), 2, unkShort1);
s16 unkShort2 = 0;
if (i_this->field_0xe8a != 0) {
i_this->field_0xe8a--;
unkShort2 = 10000;
if (i_this->field_0xe8a == i_this->field_0xe8c && i_this->field_0xe90 != Z2SE_SY_DUMMY) {
i_this->mSound.startCreatureVoice(i_this->field_0xe90, -1);
}
}
cLib_addCalcAngleS2(&i_this->field_0xe88, unkShort2, 2, 2000);
for (s32 i = 0; i <= 8; i++) {
i_this->field_0xe96[i] = i_this->field_0xeb0 *
cM_ssin(i_this->field_0x6de * (7000 + KREG_S(2)) + i * (11000 + KREG_S(3)));
}
cLib_addCalc0(&i_this->field_0xeb0, 1.0f, 200.0f + TREG_F(18));
s16 unkShort3;
s16 unkShort4;
if (i_this->field_0x6d8 > 0.01f) {
s16 unkShort5 = (s16)i_this->field_0x6d2;
s16 unkShort6 = unkShort5 - actor->shape_angle.y;
if (i_this->field_0x6f2.x <= -0x1000) {
unkShort6 = 0;
}
unkShort3 = -unkShort6 + 0x4000;
if (unkShort3 > 15000) {
unkShort3 = 15000;
} else if (unkShort3 < -15000) {
unkShort3 = -15000;
}
unkShort4 = unkShort6 + 0x4000;
if (unkShort4 > 15000) {
unkShort4 = 15000;
} else if (unkShort4 < -15000) {
unkShort4 = -15000;
}
} else {
unkShort3 = unkShort4 = 0;
}
cLib_addCalcAngleS2(&i_this->field_0xea8, unkShort3, 4, 0x800);
cLib_addCalcAngleS2(&i_this->field_0xeaa, unkShort4, 4, 0x800);
i_this->field_0xeb4 = i_this->field_0xec0 * cM_ssin(i_this->field_0x6de * (7000 + NREG_S(2)));
cLib_addCalc0(&i_this->field_0xec0, 1.0f, 300.0f + NREG_F(18));
cXyz midnaBindEffSize(1.3f, 1.3f, 1.3f);
setMidnaBindEffect((fopEn_enemy_c*)actor, &i_this->mSound, &actor->eyePos, &midnaBindEffSize);
return 1;
}
/* 8082789C-808278A4 00577C 0008+00 1/0 0/0 0/0 .text daE_Yr_IsDelete__FP10e_yr_class */
static int daE_Yr_IsDelete(e_yr_class* i_this) {
return 1;
}
/* 808278A4-808278F4 005784 0050+00 1/0 0/0 0/0 .text daE_Yr_Delete__FP10e_yr_class */
static int daE_Yr_Delete(e_yr_class* i_this) {
fopAc_ac_c* actor = (fopAc_ac_c*)&i_this->mEnemy;
dComIfG_resDelete(&i_this->mPhaseReq, "E_Yr");
#if DEBUG
l_e_yrHIO.removeHIO(&i_this->mEnemy);
#endif
if (actor->heap != NULL) {
i_this->mpMorfSO->stopZelAnime();
}
return 1;
}
/* 808278F4-80827A30 0057D4 013C+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
static int useHeapInit(fopAc_ac_c* i_this) {
e_yr_class* yr = (e_yr_class*)i_this;
yr->mpMorfSO = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_Yr", 21), NULL, NULL,
(J3DAnmTransform*)dComIfG_getObjectRes("E_Yr", 12), 2, 1.0f,
0, -1, &yr->mSound, 0x80000, 0x11000084);
if (yr->mpMorfSO == NULL ||
yr->mpMorfSO->getModel() == NULL)
{
return 0;
}
J3DModel* model = yr->mpMorfSO->getModel();
model->setUserArea((int)yr);
for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) {
if (i != 0) {
model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
}
}
return 1;
}
/* 80827A30-80827D64 005910 0334+00 1/0 0/0 0/0 .text daE_Yr_Create__FP10fopAc_ac_c */
static int daE_Yr_Create(fopAc_ac_c* i_this) {
static dCcD_SrcSph at_sph_src = {
{
{0x0, {{AT_TYPE_CSTATUE_SWING, 0x1, 0xd}, {0x0, 0x0}, 0x0}}, // mObj
{dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x1}, // mGObjAt
{dCcD_SE_HARD_BODY, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 25.0f} // mSph
} // mSphAttr
};
static dCcD_SrcSph head_tg_sph_src = {
{
{0x0, {{0x0, 0x1, 0x0}, {(s32)0xd8fbfdff, 0x3}, 0x0}}, // mObj
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 62.5f} // mSph
} // mSphAttr
};
static dCcD_SrcSph body_tg_sph_src = {
{
{0x0, {{0x0, 0x1, 0x0}, {(s32)0xd8fbfdff, 0x3}, 0x0}}, // mObj
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 65.0f} // mSph
} // mSphAttr
};
static dCcD_SrcSph body_co_sph_src = {
{
{0x0, {{0x0, 0x1, 0x0}, {0x0, 0x0}, 0x75}}, // mObj
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
{0x0}, // mGObjCo
}, // mObjInf
{
{{0.0f, 0.0f, 0.0f}, 80.0f} // mSph
} // mSphAttr
};
e_yr_class* yr = (e_yr_class*)i_this;
s32 loadResult = dComIfG_resLoad(&yr->mPhaseReq, "E_Yr");
fopAcM_SetupActor(i_this, e_yr_class);
if (loadResult == cPhs_COMPLEATE_e) {
// "It won't reset because it's already been defeated"
OS_REPORT("PARAM %x\n", fopAcM_GetParam(i_this));
yr->field_0x664 = fopAcM_GetParam(i_this);
yr->field_0x669 = yr->field_0x664;
yr->field_0x665 = (fopAcM_GetParam(i_this) & 0xff00) >> 8;
yr->field_0x666 = (fopAcM_GetParam(i_this) & 0xff0000) >> 16;
yr->field_0x667 = (fopAcM_GetParam(i_this) & 0xff000000) >> 24;
yr->field_0x668 = i_this->home.angle.z;
i_this->current.angle.z = 0;
i_this->current.angle.x = 0;
if (yr->field_0x668 != 0) {
if (dComIfGs_isSwitch(yr->field_0x668, fopAcM_GetRoomNo(i_this))) {
// "It won't reset because it's already been defeated"
OS_REPORT("E_YR やられ後なので再セットしません\n");
return cPhs_ERROR_e;
}
}
if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x2340)) {
return cPhs_ERROR_e;
}
i_this->current.pos.y += 70.0f + TREG_F(5);
i_this->home.pos = i_this->current.pos;
if (yr->field_0x666 != 0xff) {
yr->field_0x6ec = dPath_GetRoomPath(yr->field_0x666, fopAcM_GetRoomNo(i_this));
if (yr->field_0x6ec == 0) {
return cPhs_ERROR_e;
}
yr->field_0x6e9 = yr->field_0x666 + 1;
yr->field_0x6eb = 1;
}
if (yr->field_0x667 != 0xff) {
yr->field_0x67e = yr->field_0x667 + 1;
}
if (yr->field_0x669 == 5 || yr->field_0x669 == 6) {
yr->field_0x66b = 1;
} else if (yr->field_0x664 == 3) {
yr->field_0x669 = 3;
}
fopAcM_SetMtx(i_this, yr->mpMorfSO->getModel()->getBaseTRMtx());
fopAcM_SetMin(i_this, -300.0f, -200.0f, -300.0f);
fopAcM_SetMax(i_this, 300.0f, 200.0f, 300.0f);
yr->mAcch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1,
&yr->mAcchCir, fopAcM_GetSpeed_p(i_this), NULL, NULL);
yr->mAcchCir.SetWall(100.0f, 100.0f);
i_this->field_0x560 = i_this->health = 0x50;
yr->mStts.Init(100, 0xff, i_this);
yr->mSph1.Set(at_sph_src);
yr->mSph2.Set(head_tg_sph_src);
yr->mSph3.Set(body_tg_sph_src);
yr->mSph4.Set(body_co_sph_src);
yr->mSph1.SetStts(&yr->mStts);
yr->mSph2.SetStts(&yr->mStts);
yr->mSph3.SetStts(&yr->mStts);
yr->mSph4.SetStts(&yr->mStts);
yr->field_0x6a4[3] = cM_rndF(200.0f) + 300.0f;
yr->field_0x6de = cM_rndF(10000.0f);
i_this->attention_info.distances[fopAc_attn_BATTLE_e] = 22;
#if DEBUG
// "Dark Kargarok"
l_e_yrHIO.entryHIO("闇カーゴロック");
#endif
yr->mSound.init(&i_this->current.pos, &i_this->eyePos, 3, 1);
yr->mSound.setEnemyName("E_yr");
yr->mAtInfo.mPowerType = 3;
yr->mAtInfo.mpSound = &yr->mSound;
daE_Yr_Execute(yr);
}
return loadResult;
}
/* ############################################################################################## */
/* 80828CD0-80828CF0 -00001 0020+00 1/0 0/0 0/0 .data l_daE_Yr_Method */
static actor_method_class l_daE_Yr_Method = {
(process_method_func)daE_Yr_Create,
(process_method_func)daE_Yr_Delete,
(process_method_func)daE_Yr_Execute,
(process_method_func)daE_Yr_IsDelete,
(process_method_func)daE_Yr_Draw,
};
/* 80828CF0-80828D20 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_YR */
extern actor_process_profile_definition g_profile_E_YR = {
(u32)fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_E_YR, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(e_yr_class), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
189, // mPriority
&l_daE_Yr_Method, // sub_method
0x10040100, // mStatus
fopAc_ENEMY_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80827D64-80827F80 005C44 021C+00 1/1 0/0 0/0 .text __ct__10e_yr_classFv */
e_yr_class::e_yr_class() {
}