mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-09 12:35:59 -04:00
1510 lines
51 KiB
C++
1510 lines
51 KiB
C++
/**
|
|
* d_a_ki.cpp
|
|
* Enemy - Keese
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_ki.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "m_Do/m_Do_ext.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_s_play.h"
|
|
#include "d/d_path.h"
|
|
#include "d/d_snap.h"
|
|
#include "d/d_material.h"
|
|
#include "d/res/res_ki.h"
|
|
#include "m_Do/m_Do_hostIO.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_cc_uty.h"
|
|
#include "d/d_bg_s_lin_chk.h"
|
|
#include "JSystem/JUtility/JUTReport.h"
|
|
|
|
class kiHIO_c : public JORReflexible {
|
|
public:
|
|
kiHIO_c() {
|
|
m05 = 0;
|
|
m06 = 0;
|
|
m07 = 0;
|
|
m10 = 1.0f;
|
|
m08 = 1.0f;
|
|
m14 = 1.5f;
|
|
m18 = 2.0f;
|
|
m1C = 55.0f;
|
|
m20 = 175.0f;
|
|
m24 = 60.0f;
|
|
m28 = 30.0f;
|
|
m2C = 3.0f;
|
|
m30 = 7.0f;
|
|
m44 = 30.0f;
|
|
m34 = 65.0f;
|
|
m38 = 100.0f;
|
|
m40 = 7.0f;
|
|
m3C = 15.0f;
|
|
m4C = 30;
|
|
m48 = 0.2f;
|
|
m54 = 3;
|
|
m52 = 7;
|
|
m50 = 0x12C;
|
|
m4E = 0x320;
|
|
m0C = 500.0f;
|
|
m58 = 80.0f;
|
|
}
|
|
virtual ~kiHIO_c() {}
|
|
|
|
void genMessage(JORMContext* ctx) {}
|
|
|
|
/* 0x04 */ s8 mNo;
|
|
/* 0x05 */ u8 m05;
|
|
/* 0x06 */ u8 m06;
|
|
/* 0x07 */ u8 m07;
|
|
/* 0x08 */ f32 m08;
|
|
/* 0x0C */ f32 m0C;
|
|
/* 0x10 */ f32 m10;
|
|
/* 0x14 */ f32 m14;
|
|
/* 0x18 */ f32 m18;
|
|
/* 0x1C */ f32 m1C;
|
|
/* 0x20 */ f32 m20;
|
|
/* 0x24 */ f32 m24;
|
|
/* 0x28 */ f32 m28;
|
|
/* 0x2C */ f32 m2C;
|
|
/* 0x30 */ f32 m30;
|
|
/* 0x34 */ f32 m34;
|
|
/* 0x38 */ f32 m38;
|
|
/* 0x3C */ f32 m3C;
|
|
/* 0x40 */ f32 m40;
|
|
/* 0x44 */ f32 m44;
|
|
/* 0x48 */ f32 m48;
|
|
/* 0x4C */ s16 m4C;
|
|
/* 0x4E */ s16 m4E;
|
|
/* 0x50 */ s16 m50;
|
|
/* 0x52 */ s16 m52;
|
|
/* 0x54 */ s16 m54;
|
|
/* 0x58 */ f32 m58;
|
|
}; // size = 0x5C
|
|
|
|
static bool hio_set;
|
|
static kiHIO_c l_kiHIO;
|
|
static s32 ki_all_count;
|
|
static s32 ki_fight_count;
|
|
|
|
static u16 ki_tex_anm_idx[] = {KI_BTP_AKE1, KI_BTP_TOJI1, KI_BTP_METOJI1, KI_BTP_GURU1};
|
|
static u16 ki_tex_max_frame[] = { 2, 2, 3, 2 };
|
|
static u8 ki_tex_loop[] = { 0, 0, 0, 0 };
|
|
|
|
/* 000000EC-000001B4 .text nodeCallBack__FP7J3DNodei */
|
|
static BOOL nodeCallBack(J3DNode* node, int calcTiming) {
|
|
if (calcTiming == 0) {
|
|
J3DJoint* joint = (J3DJoint*)node;
|
|
s32 jntNo = joint->getJntNo();
|
|
J3DModel* model = j3dSys.getModel();
|
|
ki_class* pvVar3 = (ki_class*)model->getUserArea();
|
|
|
|
if (pvVar3 != NULL) {
|
|
MTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
cMtx_YrotM(*calc_mtx, pvVar3->m328);
|
|
cMtx_ZrotM(*calc_mtx, pvVar3->m326);
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000001B4-0000023C .text ki_a_d_sub__FPvPv */
|
|
void* ki_a_d_sub(void* ac1, void*) {
|
|
if (fopAcM_IsActor(ac1) && fopAcM_GetName(ac1) == PROC_KI) {
|
|
ki_class* ki = (ki_class*)ac1;
|
|
ki_all_count++;
|
|
if (ki->mAction == ki_class::ACT_ATTACK_MOVE_INDEX_e && ki->mBehaviorType < 10) {
|
|
ki_fight_count++;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 0000023C-0000027C .text ki_check__FP8ki_class */
|
|
void ki_check(ki_class* i_this) {
|
|
ki_fight_count = 0;
|
|
ki_all_count = 0;
|
|
fpcM_Search(ki_a_d_sub, &i_this->actor);
|
|
}
|
|
|
|
/* 0000027C-000003A4 .text anm_init__FP8ki_classifUcfi */
|
|
void anm_init(ki_class* i_this, int anmResIdx, float morf, unsigned char loopMode, float playSpeed, int soundResIdx) {
|
|
if (soundResIdx >= 0) {
|
|
i_this->mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ki", anmResIdx), loopMode, morf, playSpeed, 0.0f, -1.0f, dComIfG_getObjectRes("Ki", soundResIdx));
|
|
} else {
|
|
i_this->mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ki", anmResIdx), loopMode, morf, playSpeed, 0.0f, -1.0f, NULL);
|
|
}
|
|
}
|
|
|
|
/* 000003A4-00000478 .text tex_anm_set__FP8ki_classUs */
|
|
void tex_anm_set(ki_class* i_this, unsigned short idx) {
|
|
J3DAnmTexPattern* pJVar2;
|
|
|
|
i_this->m335 = 1;
|
|
pJVar2 = (J3DAnmTexPattern*)dComIfG_getObjectRes("Ki", ki_tex_anm_idx[idx]);
|
|
i_this->m336 = ki_tex_max_frame[idx];
|
|
i_this->m337 = ki_tex_loop[idx];
|
|
i_this->m32C = pJVar2;
|
|
i_this->m334 = 0;
|
|
i_this->m32C->setFrame(0.0f);
|
|
|
|
u16 materialNum = pJVar2->getUpdateMaterialNum();
|
|
for (u16 i = 0; i < materialNum; i++) {
|
|
i_this->m330[i].setAnmTexPattern(pJVar2);
|
|
}
|
|
}
|
|
|
|
/* 00000478-000004C4 .text ki_eye_tex_anm__FP8ki_class */
|
|
void ki_eye_tex_anm(ki_class* i_this) {
|
|
if (i_this->m335 != 0) {
|
|
if (i_this->m334 < i_this->m336) {
|
|
i_this->m334++;
|
|
} else if (i_this->m337 != 0) {
|
|
i_this->m334 = 0;
|
|
} else {
|
|
i_this->m335 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000004C4-00000820 .text ki_player_bg_check__FP8ki_class */
|
|
BOOL ki_player_bg_check(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
if (std::fabsf(player->speedF) < 0.1f && player->checkGrabWear()) {
|
|
return TRUE;
|
|
}
|
|
|
|
dBgS_LinChk linChk;
|
|
cXyz sp14;
|
|
cXyz sp08;
|
|
|
|
sp08 = player->eyePos;
|
|
sp14 = a_this->eyePos;
|
|
linChk.Set(&sp14, &sp08, a_this);
|
|
if (dComIfG_Bgsp()->LineCross(&linChk)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000C58-00000F04 .text daKi_Draw__FP8ki_class */
|
|
static BOOL daKi_Draw(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
|
|
if (i_this->m2D4 != 0) {
|
|
return TRUE;
|
|
}
|
|
|
|
J3DModel* pModel = i_this->mpMorf->getModel();
|
|
g_env_light.setLightTevColorType(pModel, &a_this->tevStr);
|
|
|
|
if (i_this->mEnemyIce.mFreezeTimer > 0x14) {
|
|
dMat_control_c::iceEntryDL(i_this->mpMorf, -1, NULL);
|
|
return TRUE;
|
|
}
|
|
|
|
a_this->model = pModel;
|
|
dSnap_RegistFig(DSNAP_TYPE_KI, a_this, 1.0f, 1.0f, 1.0f);
|
|
pModel->getModelData()->setTexNoAnimator(i_this->m32C, i_this->m330);
|
|
i_this->m32C->setFrame(i_this->m334);
|
|
|
|
f32 fVar1 = 30.0f;
|
|
if (i_this->mDamageType == 0) {
|
|
J3DModelData* pModelData = pModel->getModelData();
|
|
J3DJoint* joint = pModelData->getJointNodePointer(0);
|
|
J3DMaterial* material = pModelData->getMaterialNodePointer(0);
|
|
J3DShape* shape = material->getShape();
|
|
|
|
shape->hide();
|
|
i_this->mpMorf->entryDL();
|
|
dComIfGd_setListMaskOff();
|
|
shape->show();
|
|
pModel->getMatPacket(0)->unlock();
|
|
|
|
material = pModelData->getMaterialNodePointer(1);
|
|
material->getShape()->hide();
|
|
joint->entryIn();
|
|
material->getShape()->show();
|
|
|
|
dComIfGd_setList();
|
|
} else {
|
|
J3DModelData* pModelData = pModel->getModelData();
|
|
i_this->m920->entry(pModelData);
|
|
|
|
dComIfGd_setListMaskOff();
|
|
i_this->mpMorf->entryDL();
|
|
dComIfGd_setList();
|
|
fVar1 = 45.0f;
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
dComIfGd_setSimpleShadow2(&a_this->current.pos, i_this->mAcch.GetGroundH(), fVar1, i_this->mAcch.m_gnd);
|
|
#else
|
|
if (i_this->m540 != 0 && strcmp(dComIfGp_getStartStageName(), "GanonK") != 0) {
|
|
cXyz sp08(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z);
|
|
i_this->m2E0 = dComIfGd_setShadow(i_this->m2E0, 1, pModel, &sp08, 400.0f, fVar1, sp08.y, i_this->mAcch.GetGroundH(), i_this->mAcch.m_gnd, &a_this->tevStr);
|
|
}
|
|
#endif
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000F04-00001118 .text ki_pos_move__FP8ki_classSc */
|
|
void ki_pos_move(ki_class* i_this, s8 arg1) {
|
|
if (arg1 == 0) {
|
|
f32 x = i_this->mPosMove.x - i_this->actor.current.pos.x;
|
|
f32 y = i_this->mPosMove.y - i_this->actor.current.pos.y;
|
|
f32 z = i_this->mPosMove.z - i_this->actor.current.pos.z;
|
|
s16 xzAngle = cM_atan2s(x, z);
|
|
s16 iVar6 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
|
|
cLib_addCalcAngleS2(&i_this->actor.current.angle.y, xzAngle, 5, i_this->m304 * i_this->mPosMoveDist);
|
|
cLib_addCalcAngleS2(&i_this->actor.current.angle.x, iVar6, 5, i_this->m304 * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&i_this->mPosMoveDist, 1.0f, 1.0f, 0.04f);
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->actor.speedF, i_this->mPosMoveTarget, 1.0f, i_this->mPosMoveMaxSpeed);
|
|
cXyz sp0C;
|
|
sp0C.x = 0.0f;
|
|
sp0C.y = 0.0f;
|
|
sp0C.z = i_this->actor.speedF;
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.current.angle.y);
|
|
cMtx_XrotM(*calc_mtx, i_this->actor.current.angle.x);
|
|
MtxPosition(&sp0C, &i_this->actor.speed);
|
|
i_this->actor.current.pos.x += i_this->actor.speed.x;
|
|
i_this->actor.current.pos.y += i_this->actor.speed.y;
|
|
i_this->actor.current.pos.z += i_this->actor.speed.z;
|
|
}
|
|
|
|
/* 00001118-0000171C .text ki_wait_move__FP8ki_class */
|
|
void ki_wait_move(ki_class* i_this) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp58;
|
|
|
|
switch(i_this->mBehaviorType) {
|
|
case 0:
|
|
anm_init(i_this, KI_BCK_WAIT1, 10.0f, 2, 1.0f, KI_BAS_WAIT1);
|
|
i_this->mBehaviorType = 1;
|
|
tex_anm_set(i_this, 2);
|
|
|
|
case 1:
|
|
sp58 = player->current.pos - i_this->actor.current.pos;
|
|
if (std::sqrtf(sp58.x * sp58.x + sp58.z * sp58.z) < i_this->mMaxAttackMoveDist300) {
|
|
sp58 = player->current.pos - player->old.pos;
|
|
if (sp58.abs() > 1.0f) {
|
|
i_this->mBehaviorType = 2;
|
|
i_this->mTimers[0] = 10;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->mTimers[0] == 0) {
|
|
i_this->mBehaviorType = 3;
|
|
tex_anm_set(i_this, 0);
|
|
i_this->mTimers[0] = 0x28;
|
|
fopAcM_monsSeStart(&i_this->actor, JA_SE_CV_KI_WAKEUP, 0);
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
i_this->m338 = 1;
|
|
if (i_this->mTimers[0] == 0) {
|
|
sp58 = player->current.pos - player->old.pos;
|
|
if (sp58.abs() > 1.0f) {
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
i_this->actor.current.angle.x = 0x4000;
|
|
} else {
|
|
i_this->mBehaviorType = 0;
|
|
}
|
|
}
|
|
|
|
sp58 = player->current.pos - i_this->actor.current.pos;
|
|
|
|
i_this->m322 = cM_atan2s(sp58.x, sp58.z) - i_this->actor.current.angle.y;
|
|
i_this->m324 = -cM_atan2s(sp58.y, std::sqrtf(sp58.x * sp58.x + sp58.z * sp58.z));
|
|
if (i_this->m322 > 10000) {
|
|
i_this->m322 = 10000;
|
|
} else if (i_this->m322 < -10000) {
|
|
i_this->m322 = -10000;
|
|
}
|
|
|
|
if (i_this->m324 > 0x2000) {
|
|
i_this->m324 = 0x1FF6;
|
|
} else if (i_this->m324 < -0x38E) {
|
|
i_this->m324 = -0x38E;
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
i_this->mPosMove = i_this->actor.home.pos;
|
|
i_this->mPosMoveTarget = 20.0f;
|
|
i_this->mPosMoveMaxSpeed = 20.0f;
|
|
i_this->m304 = 10000.0f;
|
|
i_this->mPosMoveDist = 1.0f;
|
|
ki_pos_move(i_this, 0);
|
|
|
|
sp58 = i_this->mPosMove - i_this->actor.current.pos;
|
|
if (sp58.abs() < 100.0f) {
|
|
i_this->mBehaviorType = 0xb;
|
|
i_this->mTimers[0] = 0x32;
|
|
anm_init(i_this, KI_BCK_WAIT1, 10.0f, 2, 1.0f, KI_BAS_WAIT1);
|
|
}
|
|
break;
|
|
|
|
case 0xb:
|
|
cLib_addCalc2(&i_this->actor.current.pos.x, i_this->actor.home.pos.x, 0.5f, std::fabsf(i_this->actor.speed.x) + 1.0f);
|
|
cLib_addCalc2(&i_this->actor.current.pos.y, i_this->actor.home.pos.y, 0.5f, std::fabsf(i_this->actor.speed.y) + 1.0f);
|
|
cLib_addCalc2(&i_this->actor.current.pos.z, i_this->actor.home.pos.z, 0.5f, std::fabsf(i_this->actor.speed.z) + 1.0f);
|
|
if (i_this->mTimers[0] == 0) {
|
|
i_this->mBehaviorType = 0;
|
|
i_this->mTimers[0] = cM_rndF(50.0f) + 70.0f;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.y, i_this->actor.current.angle.y, 1, 0x1000);
|
|
}
|
|
|
|
/* 0000171C-00001A34 .text ki_fly_move__FP8ki_class */
|
|
void ki_fly_move(ki_class* i_this) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
i_this->m540 = 1;
|
|
|
|
cXyz sp28 = i_this->mPosMove - i_this->actor.current.pos;
|
|
f32 sqrt = std::sqrtf(sp28.x * sp28.x + sp28.z * sp28.z);
|
|
|
|
switch (i_this->mBehaviorType) {
|
|
case 0:
|
|
anm_init(i_this, KI_BCK_FLY1, 10.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
i_this->mBehaviorType = 1;
|
|
tex_anm_set(i_this, 0);
|
|
i_this->mPosMoveTarget = l_kiHIO.m28;
|
|
i_this->mPosMoveMaxSpeed = 2.0f;
|
|
i_this->m304 = 3000.0f;
|
|
|
|
case 1:
|
|
if (i_this->mTimers[1] == 0 || sqrt < 50.0f) {
|
|
i_this->mTimers[1] = cM_rndF(50.0f) + 50.0f;
|
|
i_this->mPosMove = i_this->actor.home.pos;
|
|
i_this->mPosMove.x += cM_rndFX(l_kiHIO.m0C);
|
|
i_this->mPosMove.y -= cM_rndF(200.0f);
|
|
i_this->mPosMove.z += cM_rndFX(l_kiHIO.m0C);
|
|
i_this->mPosMoveDist = 0.0f;
|
|
}
|
|
|
|
if (i_this->mTimers[0] == 0) {
|
|
sp28 = player->current.pos - i_this->actor.current.pos;
|
|
if (std::sqrtf(sp28.x * sp28.x + sp28.z * sp28.z) < i_this->mMaxAttackMoveDist300) {
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if ((i_this->mTimers[2] == 0) && i_this->mAcch.ChkWallHit()) {
|
|
i_this->actor.current.angle.y -= -0x8000;
|
|
i_this->mTimers[2] = 20;
|
|
}
|
|
#endif
|
|
|
|
ki_pos_move(i_this, 0);
|
|
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.y, i_this->actor.current.angle.y, 1, 0x2000);
|
|
}
|
|
|
|
/* 00001A34-00001D84 .text ki_fire_set_move__FP8ki_class */
|
|
void ki_fire_set_move(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
i_this->m540 = 0;
|
|
|
|
switch (i_this->mBehaviorType) {
|
|
case 0:
|
|
a_this->speedF = REG8_F(8) + 35.0f + cM_rndF(10.0f);
|
|
a_this->speed.y = REG8_F(9) + 97.0f + cM_rndF(30.0f);
|
|
anm_init(i_this, KI_BCK_WAIT1, 1.0f, 2, 1.0f, KI_BAS_WAIT1);
|
|
i_this->mBehaviorType = 1;
|
|
i_this->m91C = dComIfGp_particle_set(dPa_name::ID_IT_SN_FIREK_FIRE_A, &a_this->current.pos, NULL, NULL, 0xFF, &i_this->m908);
|
|
|
|
case 1:
|
|
a_this->shape_angle.x += 0x1400;
|
|
a_this->shape_angle.y += 0x1000;
|
|
if (a_this->speed.y < REG8_F(11) + -70.0f) {
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
a_this->shape_angle.x = 0;
|
|
if (i_this->m91C != NULL) {
|
|
i_this->m908.remove();
|
|
dComIfGp_particle_forceDeleteEmitter(i_this->m91C);
|
|
i_this->m91C = NULL;
|
|
}
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_FIREK_FIRE_B, &a_this->current.pos);
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_FIREK_HAHEN, &a_this->current.pos);
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
anm_init(i_this, KI_BCK_FLY1, 10.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
i_this->mBehaviorType = 0xb;
|
|
i_this->mTimers[1] = 100;
|
|
|
|
case 11:
|
|
i_this->m540 = 1;
|
|
a_this->speed.y = 20.0f;
|
|
if (i_this->mTimers[1] == 0) {
|
|
i_this->m2DC = 1;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cXyz sp24;
|
|
cXyz sp18;
|
|
|
|
sp24.x = 0.0f;
|
|
sp24.y = 0.0f;
|
|
sp24.z = a_this->speedF;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
|
|
MtxPosition(&sp24, &sp18);
|
|
|
|
a_this->current.pos.x += sp18.x;
|
|
a_this->current.pos.y += a_this->speed.y;
|
|
a_this->current.pos.z += sp18.z;
|
|
a_this->speed.y -= REG8_F(10) + 8.0f;
|
|
|
|
if (fopAcM_searchPlayerDistance(a_this) > 2000.0f && ki_player_bg_check(i_this)) {
|
|
i_this->m2DC = 1;
|
|
}
|
|
}
|
|
|
|
/* 00001D84-00002A18 .text ki_atack_move__FP8ki_class */
|
|
void ki_atack_move(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp24;
|
|
|
|
i_this->m540 = 1;
|
|
s8 cVar6 = 0;
|
|
|
|
if (i_this->mTimers[3] == 0 && i_this->mBehaviorType <= 3) {
|
|
i_this->mTimers[3] = cM_rndF(14.0f) + 15.0f;
|
|
fopAcM_monsSeStart(a_this, JA_SE_CV_KI_ATTACK, 0);
|
|
}
|
|
|
|
switch(i_this->mBehaviorType) {
|
|
case 0:
|
|
anm_init(i_this, KI_BCK_FLY1, 10.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
i_this->mBehaviorType = 1;
|
|
tex_anm_set(i_this, 0);
|
|
i_this->mTimers[0] = l_kiHIO.m50 + cM_rndF(std::fabsf(l_kiHIO.m4E - l_kiHIO.m50));
|
|
i_this->mTimers[2] = 20;
|
|
|
|
case 1:
|
|
i_this->mPosMoveTarget = l_kiHIO.m28;
|
|
i_this->mPosMoveMaxSpeed = 2.0f;
|
|
i_this->mPosMove = player->current.pos;
|
|
i_this->mPosMove.y += 80.0f;
|
|
|
|
sp24 = i_this->mPosMove - a_this->current.pos;
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y, 2, 0x1000);
|
|
if (sp24.abs() < 300.0f) {
|
|
i_this->mBehaviorType = 10;
|
|
anm_init(i_this, KI_BCK_FLY2, 5.0f, 2, l_kiHIO.m14, KI_BAS_FLY2);
|
|
i_this->mPosMoveDist = 0.0f;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (i_this->mTimers[2] == 0) {
|
|
ki_check(i_this);
|
|
i_this->mTimers[2] = l_kiHIO.m4C;
|
|
f32 tmp = l_kiHIO.m48;
|
|
if (ki_fight_count >= l_kiHIO.m54) {
|
|
tmp *= 0.5f;
|
|
i_this->mTimers[2] <<= 1;
|
|
}
|
|
|
|
if (cM_rndF(1.0f) < tmp) {
|
|
i_this->mBehaviorType = 3;
|
|
anm_init(i_this, KI_BCK_ATTACK1, 5.0f, 2, l_kiHIO.m18, KI_BAS_ATTACK1);
|
|
i_this->mPosMove = player->current.pos;
|
|
i_this->mPosMove.y += 80.0f;
|
|
a_this->current.angle.y = fopAcM_searchPlayerAngleY(a_this);
|
|
a_this->speedF = 0.0f;
|
|
i_this->mPosMoveTarget = l_kiHIO.m44;
|
|
i_this->mPosMoveMaxSpeed = 3.0f;
|
|
i_this->mTimers[1] = 30;
|
|
break;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, fopAcM_searchPlayerAngleY(a_this), 2, 0x1000);
|
|
if (i_this->mTimers[1] == 0) {
|
|
i_this->mTimers[1] = cM_rndF(50.0f) + 20.0f;
|
|
s32 rndFX = cM_rndFX(l_kiHIO.m24 * 182.0444f);
|
|
cMtx_YrotS(*calc_mtx, player->current.angle.y + rndFX);
|
|
sp24.x = 0.0f;
|
|
#if VERSION == VERSION_DEMO
|
|
sp24.y = cM_rndF(80.0f) + l_kiHIO.m1C;
|
|
#else
|
|
sp24.y = cM_rndF(50.0f) + l_kiHIO.m1C;
|
|
#endif
|
|
sp24.z = l_kiHIO.m20;
|
|
MtxPosition(&sp24, &i_this->mPosMove);
|
|
i_this->mPosMove += player->current.pos;
|
|
i_this->mPosMoveDist = 0.0f;
|
|
}
|
|
|
|
sp24.x = cM_ssin(i_this->m320 * 0x76C) * 50.0f;
|
|
sp24.y = cM_ssin(i_this->m320 * 0x9C4) * 60.0f;
|
|
sp24.z = cM_scos(i_this->m320 * 0x5DC) * 50.0f;
|
|
|
|
cLib_addCalc2(&a_this->current.pos.x, i_this->mPosMove.x + sp24.x, 0.1f, l_kiHIO.m2C * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&a_this->current.pos.y, i_this->mPosMove.y + sp24.y, 0.1f, l_kiHIO.m2C * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&a_this->current.pos.z, i_this->mPosMove.z + sp24.z, 0.1f, l_kiHIO.m2C * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&i_this->mPosMoveDist, 1.0f, 1.0f, 0.05f);
|
|
cVar6 = -1;
|
|
break;
|
|
|
|
case 3:
|
|
i_this->m580.SetR(30.0f);
|
|
i_this->mDamageSphere.SetR(20.0f);
|
|
i_this->m6AC.SetR(0.0f);
|
|
if (i_this->mDamageType == 0) {
|
|
i_this->m580.SetAtAtp(1);
|
|
} else {
|
|
i_this->m580.SetAtAtp(2);
|
|
}
|
|
|
|
cVar6 = 1;
|
|
|
|
if (i_this->mTimers[1] == 10) {
|
|
i_this->mPosMoveTarget = 0.0f;
|
|
i_this->mPosMoveMaxSpeed = 3.0f;
|
|
}
|
|
|
|
if (i_this->mTimers[1] == 0) {
|
|
anm_init(i_this, KI_BCK_FLY1, 5.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
i_this->mBehaviorType = 1;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y, 2, 0x2000);
|
|
|
|
if (i_this->m580.ChkAtHit() || i_this->mDamageSphere.ChkCoHit()) {
|
|
anm_init(i_this, KI_BCK_FLY2, 2.0f, 2, l_kiHIO.m14, KI_BAS_FLY2);
|
|
i_this->mBehaviorType = 4;
|
|
i_this->mTimers[1] = 30;
|
|
a_this->speedF = -15.0f;
|
|
i_this->mPosMoveTarget = 0.0f;
|
|
i_this->mPosMoveMaxSpeed = 1.0f;
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (i_this->mTimers[1] == 0) {
|
|
anm_init(i_this, KI_BCK_FLY1, 3.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
i_this->mBehaviorType = 1;
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
i_this->mPosMoveTarget = l_kiHIO.m30;
|
|
ki_check(i_this);
|
|
|
|
if (ki_fight_count < l_kiHIO.m52) {
|
|
i_this->mBehaviorType = 2;
|
|
i_this->mTimers[2] = 50;
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, fopAcM_searchPlayerAngleY(a_this), 2, 0x1000);
|
|
if (i_this->mTimers[1] == 0) {
|
|
i_this->mTimers[1] = cM_rndF(50.0f) + 50.0f;
|
|
s32 rndFX = cM_rndFX(32768.0f);
|
|
cMtx_YrotS(*calc_mtx, player->current.angle.y + rndFX);
|
|
sp24.x = 0.0f;
|
|
sp24.y = (cM_rndFX(50.0f) + 200.0f) + REG0_F(12);
|
|
sp24.z = l_kiHIO.m20 + REG0_F(13);
|
|
MtxPosition(&sp24, &i_this->mPosMove);
|
|
i_this->mPosMove += player->current.pos;
|
|
i_this->mPosMoveDist = 0.0f;
|
|
}
|
|
|
|
sp24.x = cM_ssin(i_this->m320 * 0x76C) * 100.0f;
|
|
sp24.y = cM_ssin(i_this->m320 * 0x9C4) * 60.0f;
|
|
sp24.z = cM_scos(i_this->m320 * 0x5DC) * 100.0f;
|
|
|
|
cLib_addCalc2(&a_this->current.pos.x, i_this->mPosMove.x + sp24.x, 0.1f, l_kiHIO.m30 * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&a_this->current.pos.y, i_this->mPosMove.y + sp24.y, 0.1f, l_kiHIO.m30 * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&a_this->current.pos.z, i_this->mPosMove.z + sp24.z, 0.1f, l_kiHIO.m30 * i_this->mPosMoveDist);
|
|
cLib_addCalc2(&i_this->mPosMoveDist, 1.0f, 1.0f, 0.025f);
|
|
cVar6 = -1;
|
|
break;
|
|
}
|
|
|
|
i_this->m304 = 10000.0f;
|
|
i_this->mPosMoveDist = 1.0f;
|
|
|
|
if (cVar6 >= 0) {
|
|
ki_pos_move(i_this, cVar6);
|
|
}
|
|
|
|
if (i_this->mParameters != 3) {
|
|
if (ki_player_bg_check(i_this)) {
|
|
i_this->mTimers[0] = 0;
|
|
}
|
|
|
|
if (i_this->mTimers[0] == 0) {
|
|
i_this->mAction = i_this->mParameters;
|
|
#if VERSION > VERSION_DEMO
|
|
i_this->mTimers[2] = 0;
|
|
#endif
|
|
|
|
if (i_this->mKiPathIndex != 0xFF) {
|
|
i_this->mCurrKiPathIndex = i_this->mKiPathIndex + 1;
|
|
i_this->mBehaviorType = 0xFF;
|
|
} else if (i_this->mAction == ki_class::ACT_FIRE_SET_MOVE_e) {
|
|
i_this->mBehaviorType = 10;
|
|
} else if (i_this->mAction == ki_class::ACT_WAIT_MOVE_e) {
|
|
dBgS_LinChk linChk;
|
|
cXyz sp18 = a_this->current.pos;
|
|
sp18.y += 5000.0f;
|
|
linChk.Set(&a_this->current.pos, &sp18, a_this);
|
|
if (dComIfG_Bgsp()->LineCross(&linChk)) {
|
|
a_this->home.pos = linChk.GetCross();
|
|
a_this->home.pos.y -= 30.0f;
|
|
i_this->mBehaviorType = 10;
|
|
anm_init(i_this, KI_BCK_FLY1, 5.0f, 2, l_kiHIO.m08, KI_BAS_FLY1);
|
|
} else {
|
|
i_this->mTimers[0] = 50;
|
|
i_this->mBehaviorType = 1;
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
}
|
|
} else {
|
|
i_this->mBehaviorType = 0;
|
|
i_this->mTimers[0] = cM_rndF(50.0f) + 100.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00002A18-00002E28 .text wall_angle_get__FP8ki_class */
|
|
s16 wall_angle_get(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
dBgS_LinChk linChk;
|
|
cXyz sp2C[2];
|
|
cXyz sp20;
|
|
cXyz sp14;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp20.x = 0.0f;
|
|
sp20.y = 0.0f;
|
|
sp20.z = 100.0f;
|
|
MtxPosition(&sp20, &sp14);
|
|
sp14 += a_this->current.pos;
|
|
sp20.x = 10.0f;
|
|
sp20.y = 0.0f;
|
|
sp20.z = -300.0f;
|
|
|
|
for (s32 i = 0; i < 2; i++) {
|
|
MtxPosition(&sp20, &sp2C[i]);
|
|
sp20.x *= -1.0f;
|
|
sp2C[i] += sp14;
|
|
|
|
linChk.Set(&sp14, &sp2C[i], a_this);
|
|
|
|
if (dComIfG_Bgsp()->LineCross(&linChk)) {
|
|
sp2C[i] = linChk.GetCross();
|
|
} else {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
sp20 = sp2C[1] - sp2C[0];
|
|
return cM_atan2s(sp20.x, sp20.z) + 0x4000;
|
|
}
|
|
|
|
/* 00002E28-00003114 .text ki_damage_move__FP8ki_class */
|
|
void ki_damage_move(ki_class* i_this) {
|
|
bool bVar1 = false;
|
|
|
|
i_this->m540 = 1;
|
|
i_this->m314 = 3;
|
|
|
|
switch (i_this->mBehaviorType) {
|
|
case 0:
|
|
anm_init(i_this, KI_BCK_DAMAGE1, 2.0f, 0, 1.0f, KI_BAS_DAMAGE1);
|
|
tex_anm_set(i_this, 3);
|
|
i_this->mBehaviorType = 1;
|
|
|
|
case 1:
|
|
if (i_this->m31C > 0.1f) {
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.y, i_this->m316, 1, 0x3000);
|
|
cXyz sp1C;
|
|
sp1C.x = 0.0f;
|
|
sp1C.y = 0.0f;
|
|
sp1C.z = -i_this->m31C;
|
|
cMtx_YrotS(*calc_mtx, i_this->m316);
|
|
cMtx_XrotM(*calc_mtx, i_this->mRand2000);
|
|
|
|
if (i_this->mAcch.ChkWallHit()) {
|
|
sp1C.z = 0.0f;
|
|
if (i_this->m31C >= l_kiHIO.m3C) {
|
|
i_this->mBehaviorType = 2;
|
|
i_this->mTimers[0] = 0x32;
|
|
anm_init(i_this, KI_BCK_BITA1, 1.0f, 0, 1.0f, KI_BAS_BITA1);
|
|
tex_anm_set(i_this, 3);
|
|
i_this->actor.speed.y = 0.0f;
|
|
csXyz shapeAngle = i_this->actor.shape_angle;
|
|
shapeAngle.y -= -0x8000;
|
|
s16 sVar2 = wall_angle_get(i_this);
|
|
if (sVar2 != 1) {
|
|
i_this->actor.current.angle.y = sVar2;
|
|
}
|
|
i_this->m904 = cM_rndF(1.9f);
|
|
bVar1 = true;
|
|
}
|
|
}
|
|
|
|
cXyz sp10;
|
|
MtxPosition(&sp1C, &sp10);
|
|
i_this->actor.current.pos.x += sp10.x;
|
|
i_this->actor.current.pos.y += sp10.y;
|
|
i_this->actor.current.pos.z += sp10.z;
|
|
cLib_addCalc0(&i_this->m31C, 1.0f, l_kiHIO.m40);
|
|
i_this->actor.speedF = 0.0;
|
|
} else {
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
bVar1 = true;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.y, i_this->actor.current.angle.y, 1, 0x4000);
|
|
if (i_this->mTimers[0] < 30) {
|
|
i_this->actor.current.pos.y += i_this->actor.speed.y;
|
|
i_this->actor.speed.y -= 0.1f;
|
|
if (i_this->m904 == 0) {
|
|
i_this->actor.shape_angle.z += -0x250;
|
|
} else {
|
|
i_this->actor.shape_angle.z += 0x250;
|
|
}
|
|
}
|
|
|
|
if (i_this->mTimers[0] == 0) {
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (bVar1 && i_this->actor.health <= 0) {
|
|
i_this->mAction = ki_class::ACT_FAIL_MOVE_e;
|
|
i_this->mBehaviorType = 0;
|
|
}
|
|
}
|
|
|
|
void* bgn_s_sub(void* ac1, void*) {
|
|
if (fopAcM_IsActor(ac1) && fopAcM_GetName(ac1) == PROC_BGN) {
|
|
return ac1;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 00003114-00003278 .text ki_fail_move__FP8ki_class */
|
|
void ki_fail_move(ki_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor;
|
|
u8 dropType;
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if (fpcM_Search(bgn_s_sub, &i_this->actor) != NULL) {
|
|
#else
|
|
if (strcmp(dComIfGp_getStartStageName(), "GanonK") == 0) {
|
|
#endif
|
|
if (a_this->health != -10) {
|
|
#if VERSION == VERSION_DEMO
|
|
if (dComIfGs_getLife() <= 4) {
|
|
#else
|
|
if (dComIfGs_getLife() <= 8) {
|
|
#endif
|
|
dropType = daDisItem_HEART_e;
|
|
} else if (cM_rndF(1.0f) < 0.5f) {
|
|
#if VERSION == VERSION_DEMO
|
|
if (dComIfGs_getMagic() <= 16) {
|
|
dropType = daDisItem_MAGIC_e;
|
|
} else if (dComIfGs_getArrowNum() <= 10) {
|
|
dropType = daDisItem_ARROW_e;
|
|
} else {
|
|
dropType = daDisItem_HEART_e;
|
|
}
|
|
#else
|
|
if (dComIfGs_getArrowNum() == 0) {
|
|
dropType = daDisItem_ARROW_e;
|
|
} else if (dComIfGs_getMagic() < dComIfGs_getMaxMagic() / 2) {
|
|
dropType = daDisItem_MAGIC_e;
|
|
} else if (dComIfGs_getArrowNum() < 10) {
|
|
dropType = daDisItem_ARROW_e;
|
|
} else {
|
|
static u8 item_tbl[] = {daDisItem_HEART_e, daDisItem_MAGIC_e, daDisItem_ARROW_e, daDisItem_HEART_e};
|
|
dropType = item_tbl[(s32)cM_rndF(2.99f)];
|
|
}
|
|
#endif
|
|
} else {
|
|
dropType = daDisItem_NONE13_e;
|
|
}
|
|
} else {
|
|
dropType = daDisItem_NONE13_e;
|
|
}
|
|
fopAcM_createDisappear(a_this, &a_this->current.pos, 5, dropType, 0xFF);
|
|
} else {
|
|
fopAcM_createDisappear(a_this, &a_this->current.pos, 5, daDisItem_IBALL_e, 0xFF);
|
|
}
|
|
fopAcM_delete(a_this);
|
|
fopAcM_onActor(a_this);
|
|
}
|
|
|
|
/* 00003278-000035D0 .text ki_path_move__FP8ki_class */
|
|
void ki_path_move(ki_class* i_this) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
|
|
switch (i_this->mBehaviorType) {
|
|
case 0:
|
|
i_this->m2D6 += i_this->m2D7;
|
|
if (i_this->m2D6 >= (s8)i_this->ppd->m_num) {
|
|
if (dPath_ChkClose(i_this->ppd)) {
|
|
i_this->m2D6 = 0;
|
|
} else {
|
|
i_this->m2D7 = -1;
|
|
i_this->m2D6 = i_this->ppd->m_num - 2;
|
|
}
|
|
|
|
if ((s32)i_this->ppd->m_nextID != 0xFFFF) {
|
|
i_this->ppd = dPath_GetRoomPath(i_this->ppd->m_nextID, fopAcM_GetRoomNo(&i_this->actor));
|
|
JUT_ASSERT(DEMO_SELECT(1693, 1733), i_this->ppd != NULL)
|
|
}
|
|
} else if (i_this->m2D6 < 0) {
|
|
i_this->m2D7 = 1;
|
|
i_this->m2D6 = 1;
|
|
}
|
|
|
|
case -1: {
|
|
i_this->mBehaviorType = 1;
|
|
dPnt* point = &i_this->ppd->m_points[0];
|
|
point += i_this->m2D6;
|
|
i_this->mPosMoveTarget = cM_rndF(5.0f) + 30.0f;
|
|
i_this->mPosMoveMaxSpeed = REG0_F(13) + 1.0f;
|
|
i_this->mPosMoveDist = REG0_F(7);
|
|
i_this->mPosMove = point->m_position;
|
|
i_this->mPosMove.x = point->m_position.x + cM_rndFX(150.0f);
|
|
i_this->mPosMove.y = point->m_position.y + cM_rndFX(150.0f);
|
|
i_this->mPosMove.z = point->m_position.z + cM_rndFX(150.0f);
|
|
break;
|
|
}
|
|
case 1:
|
|
f32 x = i_this->mPosMove.x - i_this->actor.current.pos.x;
|
|
f32 y = i_this->mPosMove.y - i_this->actor.current.pos.y;
|
|
f32 z = i_this->mPosMove.z - i_this->actor.current.pos.z;
|
|
|
|
if (std::sqrtf(x * x + y * y + z * z) < REG0_F(10) * 10.0f + 200.0f) {
|
|
i_this->mBehaviorType = 0;
|
|
if (i_this->ppd->m_points[i_this->m2D6].mArg3 == 6) {
|
|
fopAcM_delete(&i_this->actor);
|
|
}
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
i_this->mPosMoveTarget = l_kiHIO.m28;
|
|
i_this->mPosMoveMaxSpeed = 2.0f;
|
|
i_this->m304 = 4000.0f;
|
|
i_this->mPosMoveDist = 1.0f;
|
|
|
|
ki_pos_move(i_this, 0);
|
|
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.y, i_this->actor.current.angle.y, 1, 0x2000);
|
|
if (fopAcM_searchPlayerDistance(&i_this->actor) < i_this->mMaxAttackMoveDist300) {
|
|
i_this->mCurrKiPathIndex = 0;
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
}
|
|
}
|
|
|
|
/* 000035D0-00003E04 .text daKi_Execute__FP8ki_class */
|
|
static BOOL daKi_Execute(ki_class* i_this) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
s32 i;
|
|
cXyz* ccMoveP;
|
|
s16 tmp;
|
|
CcAtInfo atInfo;
|
|
J3DModel* model;
|
|
|
|
i_this->actor.model = NULL;
|
|
|
|
if (enemy_ice(&i_this->mEnemyIce)) {
|
|
i_this->mpMorf->setPlayMode(J3DFrameCtrl::EMode_NONE);
|
|
i_this->mpMorf->setPlaySpeed(3.0f);
|
|
i_this->mpMorf->play(&i_this->actor.eyePos, 0, 0);
|
|
J3DModel* model = i_this->mpMorf->getModel();
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
i_this->mpMorf->calc();
|
|
return TRUE;
|
|
}
|
|
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &i_this->actor.current.pos, &i_this->actor.tevStr);
|
|
if (i_this->m2DC != 0) {
|
|
cLib_addCalc0(&i_this->actor.scale.x, 1.0f, 0.05f);
|
|
i_this->actor.scale.y = i_this->actor.scale.z = i_this->actor.scale.x;
|
|
if (i_this->actor.scale.x <= 0.04f) {
|
|
fopAcM_delete(&i_this->actor);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
if (i_this->m2D4 != 0) {
|
|
if (dComIfGs_isSwitch(i_this->m2D4 - 1, fopAcM_GetRoomNo(&i_this->actor))) {
|
|
i_this->m2D4 = 0;
|
|
i_this->actor.speedF = l_kiHIO.m28;
|
|
i_this->actor.attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
|
|
} else {
|
|
fopAcM_OnStatus(&i_this->actor, 0);
|
|
fopAcM_OffStatus(&i_this->actor, 0);
|
|
i_this->actor.attention_info.flags = 0;
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
fopAcM_OnStatus(&i_this->actor, fopAcStts_SHOWMAP_e);
|
|
|
|
if (l_kiHIO.m07 != 0) {
|
|
ki_check(i_this);
|
|
JUTReport(0x104, 0x186,"ALL %d", ki_all_count);
|
|
JUTReport(0x104, 0x19a,"READY %d", ki_all_count - ki_fight_count);
|
|
JUTReport(0x104, 0x1ae,"FIGHT %d", ki_fight_count);
|
|
}
|
|
|
|
i_this->m580.SetR(0.0f);
|
|
i_this->mDamageSphere.SetR(40.0f);
|
|
i_this->m6AC.SetR(l_kiHIO.m58);
|
|
|
|
if (l_kiHIO.m06 == 0) {
|
|
i_this->m540 = 0;
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
if (i_this->mTimers[i] != 0) {
|
|
i_this->mTimers[i]--;
|
|
}
|
|
}
|
|
|
|
if (i_this->m314 != 0) {
|
|
i_this->m314--;
|
|
}
|
|
|
|
i_this->m320++;
|
|
|
|
if (i_this->m338 == 0) {
|
|
i_this->mpMorf->play(&i_this->actor.current.pos, 0, 0);
|
|
} else {
|
|
i_this->m338 = 0;
|
|
}
|
|
|
|
if (i_this->mAction == ki_class::ACT_ATTACK_MOVE_e) {
|
|
ki_atack_move(i_this);
|
|
} else if (i_this->mCurrKiPathIndex != 0) {
|
|
ki_path_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_WAIT_MOVE_e) {
|
|
ki_wait_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_FIRE_SET_MOVE_e) {
|
|
ki_fire_set_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_FLY_MOVE_e) {
|
|
ki_fly_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_ATTACK_MOVE_INDEX_e) {
|
|
ki_atack_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_DAMAGE_MOVE_e) {
|
|
ki_damage_move(i_this);
|
|
} else if (i_this->mAction == ki_class::ACT_FAIL_MOVE_e) {
|
|
ki_fail_move(i_this);
|
|
}
|
|
ki_eye_tex_anm(i_this);
|
|
}
|
|
|
|
if (i_this->mDamageType != 0) {
|
|
i_this->m920->play();
|
|
if (i_this->mAction != ki_class::ACT_FAIL_MOVE_e) {
|
|
dComIfGp_particle_setSimple(dPa_name::ID_IT_SN_O_FIREK_KASU, &i_this->actor.current.pos);
|
|
fopAcM_seStart(&i_this->actor, JA_SE_OBJ_TORCH_BURNING, 0);
|
|
}
|
|
}
|
|
|
|
ccMoveP = i_this->mStts.GetCCMoveP();
|
|
if (ccMoveP != NULL) {
|
|
i_this->actor.current.pos.x += ccMoveP->x;
|
|
i_this->actor.current.pos.y += ccMoveP->y;
|
|
i_this->actor.current.pos.z += ccMoveP->z;
|
|
}
|
|
|
|
MtxTrans(i_this->actor.current.pos.x, i_this->actor.current.pos.y, i_this->actor.current.pos.z, false);
|
|
cMtx_YrotM(*calc_mtx, i_this->actor.shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, i_this->actor.shape_angle.x);
|
|
cMtx_ZrotM(*calc_mtx, i_this->actor.shape_angle.z);
|
|
|
|
model = i_this->mpMorf->getModel();
|
|
model->setBaseScale(i_this->actor.scale);
|
|
model->setBaseTRMtx(*calc_mtx);
|
|
i_this->mpMorf->calc();
|
|
enemy_fire(&i_this->mEnemyFire);
|
|
|
|
i_this->actor.eyePos = i_this->actor.current.pos;
|
|
i_this->actor.attention_info.position = i_this->actor.eyePos;
|
|
i_this->actor.attention_info.position.y += 50.0f;
|
|
|
|
i_this->m580.SetC(i_this->actor.current.pos);
|
|
i_this->m6AC.SetC(i_this->actor.current.pos);
|
|
i_this->mDamageSphere.SetC(i_this->actor.current.pos);
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->m580);
|
|
dComIfG_Ccsp()->Set(&i_this->m6AC);
|
|
dComIfG_Ccsp()->Set(&i_this->mDamageSphere);
|
|
|
|
if (i_this->m540 != 0) {
|
|
#if VERSION > VERSION_DEMO
|
|
i_this->actor.current.pos.y -= REG0_F(5) + 30.0f;
|
|
i_this->actor.old.pos.y -= REG0_F(5) + 30.0f;
|
|
#endif
|
|
i_this->mAcch.CrrPos(*dComIfG_Bgsp());
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
i_this->actor.current.pos.y += REG0_F(5) + 30.0f;
|
|
i_this->actor.old.pos.y += REG0_F(5) + 30.0f;
|
|
#endif
|
|
}
|
|
|
|
i_this->mStts.Move();
|
|
if (i_this->mDamageSphere.ChkTgHit() && i_this->m314 == 0) {
|
|
i_this->m314 = 10;
|
|
|
|
atInfo.mpObj = i_this->mDamageSphere.GetTgHitObj();
|
|
atInfo.pParticlePos = i_this->mDamageSphere.GetTgHitPosP();
|
|
|
|
if (atInfo.mpObj->ChkAtType(AT_TYPE_LIGHT_ARROW | AT_TYPE_ICE_ARROW)) {
|
|
if (atInfo.mpObj->ChkAtType(AT_TYPE_ICE_ARROW)) {
|
|
i_this->mEnemyIce.mFreezeDuration = REG0_S(3) + 300;
|
|
i_this->mAction = ki_class::ACT_ATTACK_MOVE_INDEX_e;
|
|
i_this->mBehaviorType = 0;
|
|
} else {
|
|
i_this->mEnemyIce.mLightShrinkTimer = 1;
|
|
}
|
|
enemy_fire_remove(&i_this->mEnemyFire);
|
|
return TRUE;
|
|
}
|
|
|
|
if (atInfo.mpObj->ChkAtType(AT_TYPE_FIRE_ARROW | AT_TYPE_FIRE)) {
|
|
i_this->mEnemyFire.mFireDuration = REG0_S(2) + 100;
|
|
i_this->m314 = 0x32;
|
|
i_this->m580.OnAtVsBitSet(cCcD_AtSPrm_VsEnemy_e);
|
|
}
|
|
|
|
if (atInfo.mpObj->ChkAtType(AT_TYPE_WIND)) {
|
|
#if VERSION == VERSION_DEMO
|
|
i_this->m31C = 130.0f;
|
|
#else
|
|
i_this->m31C = 100.0f;
|
|
#endif
|
|
} else {
|
|
atInfo.mpActor = cc_at_check(&i_this->actor, &atInfo);
|
|
|
|
if (atInfo.mpActor != NULL) {
|
|
if (fpcM_GetName(atInfo.mpActor) == PROC_BGN || fpcM_GetName(atInfo.mpActor) == PROC_BGN2 || fpcM_GetName(atInfo.mpActor) == PROC_BGN3) {
|
|
i_this->actor.health = -10;
|
|
}
|
|
}
|
|
|
|
if (l_kiHIO.m05 != 0) {
|
|
i_this->actor.health = 10;
|
|
}
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if (atInfo.mResultingAttackType == 9) {
|
|
i_this->m31C = 150.0f;
|
|
} else
|
|
#endif
|
|
if (i_this->mStts.GetAtSpl() == dCcG_At_Spl_UNK1) {
|
|
i_this->m31C = l_kiHIO.m38;
|
|
} else {
|
|
i_this->m31C = l_kiHIO.m34;
|
|
}
|
|
}
|
|
|
|
i_this->m316 = fopAcM_searchPlayerAngleY(&i_this->actor);
|
|
i_this->mRand2000 = cM_rndF(2000.0f);
|
|
i_this->mAction = ki_class::ACT_DAMAGE_MOVE_e;
|
|
i_this->mBehaviorType = 0;
|
|
|
|
fopAcM_monsSeStart(&i_this->actor, JA_SE_CV_KI_DAMAGE, 0);
|
|
}
|
|
|
|
if (i_this->m322) {
|
|
tmp = 0x1000;
|
|
} else {
|
|
tmp = 0x200;
|
|
}
|
|
cLib_addCalcAngleS2(&i_this->m326, i_this->m322, 5, tmp);
|
|
|
|
if (i_this->m324) {
|
|
tmp = 0x1000;
|
|
} else {
|
|
tmp = 0x200;
|
|
}
|
|
cLib_addCalcAngleS2(&i_this->m328, i_this->m324, 5, tmp);
|
|
|
|
i_this->m324 = 0;
|
|
i_this->m322 = 0;
|
|
cLib_addCalcAngleS2(&i_this->actor.shape_angle.z, 0, 1, 0x200);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003E04-00003E0C .text daKi_IsDelete__FP8ki_class */
|
|
static BOOL daKi_IsDelete(ki_class*) {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003E0C-00003EB8 .text daKi_Delete__FP8ki_class */
|
|
static BOOL daKi_Delete(ki_class* i_this) {
|
|
dComIfG_resDeleteDemo(&i_this->mPhase, "Ki");
|
|
|
|
if (i_this->m339 != 0) {
|
|
hio_set = false;
|
|
mDoHIO_deleteChild(l_kiHIO.mNo);
|
|
}
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if (i_this->actor.heap != NULL) {
|
|
i_this->mpMorf->stopZelAnime();
|
|
}
|
|
#endif
|
|
|
|
if (i_this->mDamageType != 0) {
|
|
i_this->m908.remove();
|
|
}
|
|
|
|
enemy_fire_remove(&i_this->mEnemyFire);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003EB8-000042B8 .text useHeapInit__FP10fopAc_ac_c */
|
|
static BOOL useHeapInit(fopAc_ac_c* a_this) {
|
|
ki_class* i_this = (ki_class*)a_this;
|
|
J3DModel* model;
|
|
|
|
if (i_this->mDamageType == 0) {
|
|
i_this->actor.gbaName = 0x17;
|
|
i_this->mpMorf = new mDoExt_McaMorf(
|
|
(J3DModelData*)dComIfG_getObjectRes("Ki", KI_BDL_KI),
|
|
NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("Ki", KI_BCK_WAIT1),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
|
|
dComIfG_getObjectRes("Ki", KI_BAS_WAIT1),
|
|
0x80000, 0x37221203
|
|
);
|
|
#if VERSION == VERSION_DEMO
|
|
model = i_this->mpMorf->getModel();
|
|
#else
|
|
if (i_this->mpMorf == NULL || (model = i_this->mpMorf->getModel()) == NULL) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
} else {
|
|
i_this->actor.gbaName = 6;
|
|
i_this->mpMorf = new mDoExt_McaMorf(
|
|
(J3DModelData*)dComIfG_getObjectRes("Ki", KI_BDL_FK),
|
|
NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("Ki", KI_BCK_WAIT1),
|
|
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
|
|
dComIfG_getObjectRes("Ki", KI_BAS_WAIT1),
|
|
0x80000, 0x37221203
|
|
);
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if (i_this->mpMorf == NULL) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|
|
model = i_this->mpMorf->getModel();
|
|
if (model == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
i_this->m920 = new mDoExt_btkAnm();
|
|
if (i_this->m920 == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (!i_this->m920->init(model->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Ki", KI_BTK_FK), true, J3DFrameCtrl::EMode_LOOP)) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) {
|
|
if (i == 14) {
|
|
model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
|
|
}
|
|
}
|
|
|
|
J3DAnmTexPattern* anmTexPattern;
|
|
for (s32 i = 0; i < 4; i++) {
|
|
anmTexPattern = (J3DAnmTexPattern*)dComIfG_getObjectRes("Ki", ki_tex_anm_idx[i]);
|
|
anmTexPattern->searchUpdateMaterialID(model->getModelData());
|
|
}
|
|
|
|
u16 materialCount = anmTexPattern->getUpdateMaterialNum();
|
|
i_this->m330 = new J3DTexNoAnm[materialCount];
|
|
for (u16 i = 0; i < materialCount; i++) {
|
|
i_this->m330[i].setAnmIndex(i);
|
|
}
|
|
|
|
tex_anm_set(i_this, 1);
|
|
i_this->mpMorf->getModel()->setUserArea((u32)i_this);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004364-000046F4 .text daKi_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daKi_Create(fopAc_ac_c* a_this) {
|
|
static dCcD_SrcSph at_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_UNK800,
|
|
/* SrcObjAt Atp */ 1,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e,
|
|
/* SrcObjTg Type */ 0,
|
|
/* SrcObjTg SPrm */ 0,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ dCcG_AtSPrm_NoConHit_e,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ 0,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 30.0f,
|
|
}},
|
|
};
|
|
static dCcD_SrcSph tg_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL & ~AT_TYPE_WATER & ~AT_TYPE_UNK20000 & ~AT_TYPE_UNK400000 & ~AT_TYPE_LIGHT,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 40.0f,
|
|
}},
|
|
};
|
|
static dCcD_SrcSph co_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ 0,
|
|
/* SrcObjTg SPrm */ 0,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsPlayer_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ 0,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 80.0f,
|
|
}},
|
|
};
|
|
|
|
ki_class* i_this = (ki_class*)a_this;
|
|
|
|
fopAcM_ct(a_this, ki_class);
|
|
|
|
cPhs_State ret = dComIfG_resLoad(&i_this->mPhase, "Ki");
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
i_this->mParameters = fopAcM_GetParam(a_this);
|
|
if (i_this->mParameters == 0xFF) {
|
|
i_this->mParameters = 0;
|
|
}
|
|
|
|
i_this->mAction = i_this->mParameters;
|
|
i_this->m2CD = fopAcM_GetParam(a_this) >> 8 & 0x7f;
|
|
i_this->mDamageType = (fopAcM_GetParam(a_this) >> 8) & 0x80;
|
|
i_this->mKiPathIndex = fopAcM_GetParam(a_this) >> 0x10;
|
|
i_this->m2CF = fopAcM_GetParam(a_this) >> 0x18;
|
|
a_this->itemTableIdx = dComIfGp_CharTbl()->GetNameIndex("keeth", 0);
|
|
|
|
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x4E00)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
switch (i_this->m2CD) {
|
|
case 0:
|
|
i_this->mMaxAttackMoveDist300 = 300.0f;
|
|
break;
|
|
|
|
case 1:
|
|
i_this->mMaxAttackMoveDist300 = 800.0f;
|
|
break;
|
|
|
|
case 2:
|
|
i_this->mMaxAttackMoveDist300 = 1500.0f;
|
|
break;
|
|
|
|
case 3:
|
|
default:
|
|
i_this->mMaxAttackMoveDist300 = 3000.0f;
|
|
break;
|
|
}
|
|
|
|
if (i_this->mKiPathIndex != 0xFF) {
|
|
i_this->ppd = dPath_GetRoomPath(i_this->mKiPathIndex, fopAcM_GetRoomNo(a_this));
|
|
if (i_this->ppd == NULL) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
i_this->mCurrKiPathIndex = i_this->mKiPathIndex + 1;
|
|
i_this->m2D7 = 1;
|
|
}
|
|
|
|
if (i_this->m2CF != 0xFF) {
|
|
i_this->m2D4 = i_this->m2CF + 1;
|
|
}
|
|
|
|
fopAcM_SetMtx(a_this, i_this->mpMorf->getModel()->getBaseTRMtx());
|
|
i_this->mAcch.Set(fopAcM_GetPosition_p(a_this), fopAcM_GetOldPosition_p(a_this),
|
|
a_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(a_this));
|
|
#if VERSION == VERSION_DEMO
|
|
i_this->mAcchCir.SetWall(10.0f, 20.0f);
|
|
i_this->mAcch.SetGroundUpY(REG0_F(8) + 30.0f);
|
|
#else
|
|
i_this->mAcchCir.SetWall(20.0f, 50.0f);
|
|
#endif
|
|
a_this->health = 1;
|
|
a_this->max_health = 1;
|
|
i_this->m320 = cM_rndF(10000.0f);
|
|
|
|
i_this->mStts.Init(0x32, 2, a_this);
|
|
|
|
i_this->m580.Set(at_sph_src);
|
|
i_this->m6AC.Set(co_sph_src);
|
|
i_this->mDamageSphere.Set(tg_sph_src);
|
|
|
|
i_this->m580.SetStts(&i_this->mStts);
|
|
i_this->m6AC.SetStts(&i_this->mStts);
|
|
i_this->mDamageSphere.SetStts(&i_this->mStts);
|
|
|
|
if (i_this->mDamageType != 0) {
|
|
i_this->m580.SetAtType(AT_TYPE_FIRE);
|
|
#if VERSION == VERSION_DEMO
|
|
i_this->mDamageSphere.SetTgType(~(AT_TYPE_WATER | AT_TYPE_FIRE | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT));
|
|
#else
|
|
i_this->mDamageSphere.SetTgType(~(AT_TYPE_WATER | AT_TYPE_FIRE | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT));
|
|
#endif
|
|
}
|
|
|
|
i_this->m580.OffAtVsBitSet(cCcD_AtSPrm_VsEnemy_e);
|
|
a_this->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
|
|
|
|
if (!hio_set) {
|
|
l_kiHIO.mNo = mDoHIO_createChild("キース", &l_kiHIO);
|
|
i_this->m339 = 1;
|
|
hio_set = true;
|
|
}
|
|
|
|
i_this->mEnemyIce.mpActor = a_this;
|
|
i_this->mEnemyIce.mWallRadius = REG0_F(4) + 30.0f;
|
|
i_this->mEnemyIce.mCylHeight = REG0_F(5) + 30.0f;
|
|
i_this->mEnemyIce.mParticleScale = 0.5f;
|
|
i_this->mEnemyIce.mYOffset = 10.0f;
|
|
i_this->mEnemyFire.mpMcaMorf = i_this->mpMorf;
|
|
i_this->mEnemyFire.mpActor = a_this;
|
|
|
|
for (s32 i = 0; i < 10; i++) {
|
|
static s8 fire_j[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
|
|
static f32 fire_sc[] = { 1.0f, 0.8f, 0.7f, 0.6f, 0.5f, 1.0f, 0.8f, 0.7f, 0.6f, 0.5f };
|
|
|
|
i_this->mEnemyFire.mFlameJntIdxs[i] = fire_j[i];
|
|
i_this->mEnemyFire.mParticleScale[i] = fire_sc[i];
|
|
}
|
|
|
|
daKi_Execute(i_this);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
static actor_method_class l_daKi_Method = {
|
|
(process_method_func)daKi_Create,
|
|
(process_method_func)daKi_Delete,
|
|
(process_method_func)daKi_Execute,
|
|
(process_method_func)daKi_IsDelete,
|
|
(process_method_func)daKi_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_KI = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_KI,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(ki_class),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_KI,
|
|
/* Actor SubMtd */ &l_daKi_Method,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ENEMY_e,
|
|
/* CullType */ fopAc_CULLBOX_0_e,
|
|
};
|