mirror of
https://github.com/zeldaret/tp
synced 2026-05-25 07:23:14 -04:00
9eea9289b1
* Fix JUT_ASSERT to be a nested define * Switch names that appear in asserts to be constants instead of defines * Replace `0` in asserts with `NULL` or `FALSE` * Fix fpclassify * Fix ARRAY_SIZE * Use G_CM3D_F_INF * More fixes for fpclassify * Remove FLOAT_LABEL * Remove incorrect FLAG_ON macro * Remove UNK_BSS macro * Silence clangd unused header warning for PCH
1973 lines
70 KiB
C++
1973 lines
70 KiB
C++
/**
|
|
* @file d_a_e_rdb.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_e_rdb.h"
|
|
#include "Z2AudioLib/Z2Instances.h"
|
|
#include "c/c_damagereaction.h"
|
|
#include "d/actor/d_a_e_rd.h"
|
|
#include "d/actor/d_a_e_wb.h"
|
|
#include "d/d_msg_object.h"
|
|
#include "m_Do/m_Do_graphic.h"
|
|
#include "f_op/f_op_actor_enemy.h"
|
|
#include "f_op/f_op_camera_mng.h"
|
|
|
|
class daE_RDB_HIO_c : public JORReflexible {
|
|
public:
|
|
/* 807650CC */ daE_RDB_HIO_c();
|
|
/* 8076AF64 */ virtual ~daE_RDB_HIO_c() {};
|
|
|
|
void genMessage(JORMContext*);
|
|
/* 0x04 */ s8 mID;
|
|
/* 0x08 */ f32 field_0x8;
|
|
};
|
|
|
|
enum Action {
|
|
/* 0x00 */ ACTION_START,
|
|
/* 0x01 */ ACTION_WAIT,
|
|
/* 0x02 */ ACTION_FIGHT,
|
|
/* 0x03 */ ACTION_ATTACK,
|
|
/* 0x04 */ ACTION_SPIN_ATTACK,
|
|
/* 0x05 */ ACTION_DEFENCE,
|
|
/* 0x06 */ ACTION_DAMAGE,
|
|
/* 0x07 */ ACTION_END,
|
|
};
|
|
|
|
/* 807650CC-807650F0 0000EC 0024+00 1/1 0/0 0/0 .text __ct__13daE_RDB_HIO_cFv */
|
|
daE_RDB_HIO_c::daE_RDB_HIO_c() {
|
|
mID = -1;
|
|
field_0x8 = 1.55f;
|
|
}
|
|
|
|
/* 807650F0-8076519C 000110 00AC+00 9/9 0/0 0/0 .text anm_init__FP11e_rdb_classifUcf */
|
|
static void anm_init(e_rdb_class* i_this, int i_index, f32 i_morf, u8 i_attr, f32 i_rate) {
|
|
i_this->mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_rdb", i_index), i_attr,
|
|
i_morf, i_rate, 0.0f, -1.0f);
|
|
i_this->mAnm = i_index;
|
|
}
|
|
|
|
/* 8076519C-80765314 0001BC 0178+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
|
|
static int nodeCallBack(J3DJoint* i_joint, int param_2) {
|
|
s16 sVar1;
|
|
if (param_2 == 0) {
|
|
int jntNo = i_joint->getJntNo();
|
|
J3DModel* model = j3dSys.getModel();
|
|
e_rdb_class* rdb_p = (e_rdb_class*)model->getUserArea();
|
|
if (rdb_p != NULL) {
|
|
PSMTXCopy(model->getAnmMtx(jntNo), *calc_mtx);
|
|
if (jntNo == 1 || jntNo == 2) {
|
|
cMtx_XrotM(*calc_mtx, rdb_p->field_0x6ca / 8);
|
|
|
|
if (jntNo == 1) {
|
|
cMtx_XrotM(*calc_mtx, rdb_p->field_0x6d0);
|
|
}
|
|
|
|
cMtx_ZrotM(*calc_mtx, -(rdb_p->field_0x6cc / 8));
|
|
} else if (jntNo == 5 || jntNo == 6) {
|
|
cMtx_YrotM(*calc_mtx, rdb_p->field_0x6d2 - rdb_p->field_0x6ca / 3);
|
|
cMtx_ZrotM(*calc_mtx, -(rdb_p->field_0x6cc / 8));
|
|
}
|
|
|
|
model->setAnmMtx(jntNo, *calc_mtx);
|
|
PSMTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80765314-80765600 000334 02EC+00 1/0 0/0 0/0 .text daE_RDB_Draw__FP11e_rdb_class */
|
|
static int daE_RDB_Draw(e_rdb_class* i_this) {
|
|
J3DMaterial* material;
|
|
if (i_this->field_0xfe6 != 0) {
|
|
return 1;
|
|
}
|
|
|
|
J3DModel* model = i_this->mpModelMorf->getModel();
|
|
g_env_light.settingTevStruct(0, &i_this->enemy.current.pos, &i_this->enemy.tevStr);
|
|
|
|
if (i_this->field_0xfcf == 0) {
|
|
g_env_light.setLightTevColorType_MAJI(model, &i_this->enemy.tevStr);
|
|
|
|
for (u16 i = 3; i <= 4; i++) {
|
|
J3DShape* shape = model->getModelData()->getMaterialNodePointer(i)->getShape();
|
|
if (shape != NULL) {
|
|
shape->hide();
|
|
}
|
|
}
|
|
|
|
for (u16 i = 0; i <= 1; i++) {
|
|
material = model->getModelData()->getMaterialNodePointer(i);
|
|
material->getTevColor(0)->r = i_this->field_0x6e0;
|
|
material->getTevColor(0)->g = i_this->field_0x6e0;
|
|
material->getTevColor(0)->b = i_this->field_0x6e0;
|
|
}
|
|
|
|
i_this->mpModelMorf->entryDL();
|
|
}
|
|
|
|
if (i_this->field_0xfcf != 1 && i_this->field_0x680 != 0) {
|
|
g_env_light.setLightTevColorType_MAJI(i_this->mpAxeModel, &i_this->enemy.tevStr);
|
|
|
|
material = i_this->mpAxeModel->getModelData()->getMaterialNodePointer(0);
|
|
material->getTevColor(0)->r = i_this->field_0x6e0;
|
|
material->getTevColor(0)->g = i_this->field_0x6e0;
|
|
material->getTevColor(0)->b = i_this->field_0x6e0;
|
|
mDoExt_modelUpdateDL(i_this->mpAxeModel);
|
|
}
|
|
|
|
if (i_this->field_0xfcf == 0) {
|
|
cXyz shadow_pos;
|
|
shadow_pos.set(i_this->enemy.current.pos.x, i_this->enemy.current.pos.y + 100.0f,
|
|
i_this->enemy.current.pos.z);
|
|
|
|
f32 fVar1 = 1700.0f;
|
|
if (i_this->mAction == 7) {
|
|
fVar1 = 2700.0f;
|
|
}
|
|
|
|
i_this->mShadowKey = dComIfGd_setShadow(
|
|
i_this->mShadowKey, 1, model, &shadow_pos, fVar1, 0.0f, i_this->enemy.current.pos.y,
|
|
i_this->mAcch.GetGroundH(), i_this->mAcch.m_gnd, &i_this->enemy.tevStr, 0, 1.0f,
|
|
dDlst_shadowControl_c::getSimpleTex());
|
|
if (i_this->mpAxeModel != NULL) {
|
|
dComIfGd_addRealShadow(i_this->mShadowKey, i_this->mpAxeModel);
|
|
}
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80765600-8076563C 000620 003C+00 1/1 0/0 0/0 .text mtx_to_posAngle__FPA4_fP4cXyzP5csXyz */
|
|
static void mtx_to_posAngle(Mtx param_1, cXyz* param_2, csXyz* param_3) {
|
|
mDoMtx_multVecZero(param_1, param_2);
|
|
mDoMtx_MtxToRot(param_1, param_3);
|
|
}
|
|
|
|
/* 8076563C-80765678 00065C 003C+00 1/1 0/0 0/0 .text player_way_check__FP11e_rdb_class
|
|
*/
|
|
static int player_way_check(e_rdb_class* i_this) {
|
|
s16 sVar1 = i_this->enemy.shape_angle.y - dComIfGp_getPlayer(0)->shape_angle.y;
|
|
if (sVar1 < 0x4000 && sVar1 > -0x4000) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80765678-807658E0 000698 0268+00 1/1 0/0 0/0 .text e_rdb_wait__FP11e_rdb_class */
|
|
static void e_rdb_wait(e_rdb_class* i_this) {
|
|
s16 sVar1 = i_this->enemy.shape_angle.y - i_this->mAngleToPlayer;
|
|
f32 fVar1 = 0.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WAIT01, 10.0f, 2, 1.0f);
|
|
i_this->mMode = 1;
|
|
i_this->field_0x6b8[0] = cM_rndF(10.0f) + 20.0f;
|
|
// [[fallthrough]]
|
|
case 1:
|
|
if (i_this->mAnm == e_rdb_class::BCK_RB_STEP) {
|
|
if (sVar1 < 512 && sVar1 > -512) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WAIT01, 5.0f, 2, 1.0f);
|
|
}
|
|
} else if (sVar1 > 512 || sVar1 < -512) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_STEP, 5.0f, 2, 1.0f);
|
|
}
|
|
|
|
if (i_this->mDistToPlayer < 350.0f) {
|
|
if (i_this->mAnm != e_rdb_class::BCK_RB_STEP) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_STEP, 5.0f, 2, 1.0f);
|
|
}
|
|
i_this->mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
fVar1 = -2.0f;
|
|
if (i_this->mDistToPlayer > 400.0f) {
|
|
i_this->mMode = 1;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->enemy.speedF, fVar1, 1.0f, 3.0f);
|
|
cLib_addCalcAngleS2(&i_this->enemy.current.angle.y, i_this->mAngleToPlayer, 2, 512);
|
|
i_this->field_0x6c8 = 1;
|
|
fVar1 = 420.0f;
|
|
if (i_this->field_0xfcc >= 2 && strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
fVar1 = 820.0f;
|
|
}
|
|
|
|
if (i_this->mDistToPlayer > fVar1) {
|
|
i_this->mAction = 2;
|
|
i_this->mMode = 0;
|
|
} else if (i_this->mDistToPlayer < fVar1 && i_this->field_0x6b8[0] == 0) {
|
|
if (i_this->field_0xfcc >= 2 && strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
i_this->mAction = 4;
|
|
} else {
|
|
i_this->mAction = 3;
|
|
}
|
|
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
/* 807658E0-80765A98 000900 01B8+00 1/1 0/0 0/0 .text e_rdb_fight__FP11e_rdb_class */
|
|
static void e_rdb_fight(e_rdb_class* i_this) {
|
|
f32 fVar1 = 0.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WALK, 10.0f, 2, 1.0f);
|
|
i_this->mMode = 1;
|
|
i_this->field_0x5cc = 1.0f;
|
|
// [[fallthrough]]
|
|
case 1:
|
|
if (i_this->mAnm == e_rdb_class::BCK_RB_WALK) {
|
|
fVar1 = 3.0f;
|
|
if (i_this->mDistToPlayer > 700.0f) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_RUN, 10.0f, 2, 1.0f);
|
|
}
|
|
} else {
|
|
fVar1 = 10.0f;
|
|
if (i_this->mDistToPlayer < 600.0f) {
|
|
i_this->field_0x5cc = 3.0f;
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WALK, 10.0f, 2, i_this->field_0x5cc);
|
|
fVar1 = 3.0f;
|
|
}
|
|
}
|
|
}
|
|
|
|
i_this->mpModelMorf->setPlaySpeed(i_this->field_0x5cc);
|
|
cLib_addCalc2(&i_this->enemy.speedF, fVar1 * i_this->field_0x5cc, 1.0f,
|
|
i_this->field_0x5cc * 3.0f);
|
|
cLib_addCalc2(&i_this->field_0x5cc, 1.0f, 1.0f, 0.1f);
|
|
cLib_addCalcAngleS2(&i_this->enemy.current.angle.y, i_this->mAngleToPlayer, 2, 512);
|
|
fVar1 = 0.0f;
|
|
|
|
if (i_this->field_0xfcc >= 2 && strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
fVar1 = 400.0f;
|
|
}
|
|
|
|
if (i_this->mDistToPlayer < fVar1 + 400.0f) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
i_this->field_0x6c8 = 1;
|
|
}
|
|
|
|
/* 80765A98-80765B70 000AB8 00D8+00 2/2 0/0 0/0 .text
|
|
* getPolyColor__FR13cBgS_PolyInfoiP8_GXColorP8_GXColorPUcPf */
|
|
static int getPolyColor(cBgS_PolyInfo& i_polyInfo, int param_2, _GXColor* p_effPrim,
|
|
_GXColor* p_effEnv, u8* p_alpha, f32* p_ratio) {
|
|
if (dComIfG_Bgsp().ChkPolySafe(i_polyInfo) == 0) {
|
|
return 0;
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
dKy_pol_eff_prim_get(&i_polyInfo, p_effPrim);
|
|
dKy_pol_eff_env_get(&i_polyInfo, p_effEnv);
|
|
*p_alpha = dKy_pol_eff_alpha_get(&i_polyInfo);
|
|
*p_ratio = dKy_pol_eff_ratio_get(&i_polyInfo);
|
|
} else {
|
|
dKy_pol_eff2_prim_get(&i_polyInfo, p_effPrim);
|
|
dKy_pol_eff2_env_get(&i_polyInfo, p_effEnv);
|
|
*p_alpha = dKy_pol_eff2_alpha_get(&i_polyInfo);
|
|
*p_ratio = dKy_pol_eff2_ratio_get(&i_polyInfo);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80765B70-80765E70 000B90 0300+00 1/1 0/0 0/0 .text e_rdb_attack__FP11e_rdb_class */
|
|
static void e_rdb_attack(e_rdb_class* i_this) {
|
|
// NONMATCHING
|
|
static u16 ap_name[3] = {
|
|
0x8A5C,
|
|
0x8A5D,
|
|
0x8A5E,
|
|
};
|
|
|
|
int frame = i_this->mpModelMorf->getFrame();
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ATTACK01, 5.0f, 0, 1.0f);
|
|
i_this->mMode = 1;
|
|
} else {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ATTACK02, 5.0f, 0, 1.0f);
|
|
i_this->mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (frame > 63 && frame < 73) {
|
|
i_this->field_0x6c4 = 1;
|
|
}
|
|
|
|
if (frame == 68) {
|
|
u8 i_alpha;
|
|
f32 i_ratio;
|
|
_GXColor i_effPrim, i_effEnv;
|
|
if (getPolyColor(i_this->mAcch.m_gnd, 0, &i_effPrim, &i_effEnv, &i_alpha, &i_ratio) !=
|
|
0)
|
|
{
|
|
cXyz i_scale(1.55f, 1.55f, 1.55);
|
|
|
|
for (int i = 0; i <= 2; i++) {
|
|
if (i == 0) {
|
|
dComIfGp_particle_setColor(ap_name[i], &i_this->enemy.current.pos,
|
|
&i_this->enemy.tevStr, &i_effPrim, &i_effEnv,
|
|
i_ratio, i_alpha, &i_this->enemy.shape_angle,
|
|
&i_scale, NULL, -1, NULL);
|
|
} else {
|
|
dComIfGp_particle_set(ap_name[i], &i_this->enemy.current.pos,
|
|
&i_this->enemy.shape_angle, &i_scale);
|
|
}
|
|
}
|
|
}
|
|
|
|
dComIfGp_getVibration().StartShock(6, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK01_HIT, 0, -1);
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (frame > 61 && frame < 72) {
|
|
i_this->field_0x6c4 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->enemy.speedF, 1.0f, 3.0f);
|
|
i_this->field_0x6c8 = 1;
|
|
}
|
|
|
|
/* 80765E70-80766188 000E90 0318+00 1/1 0/0 0/0 .text e_rdb_spin_attack__FP11e_rdb_class
|
|
*/
|
|
static void e_rdb_spin_attack(e_rdb_class* i_this) {
|
|
// NONMATCHING
|
|
static u16 ap_name[2] = {
|
|
0x8A5F,
|
|
0x8A60,
|
|
};
|
|
|
|
mDoExt_McaMorfSO* p_modelMorf = i_this->mpModelMorf;
|
|
int iVar1 = 0;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ATTACK03_START, 5.0f, 0, 1.0f);
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ATTACK, -1);
|
|
i_this->mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (!p_modelMorf->isStop())
|
|
break;
|
|
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ATTACK03_SPIN, 0.0f, 2, 1.0f);
|
|
i_this->mMode = 2;
|
|
i_this->field_0x6b8[0] = 102;
|
|
// [[fallthrough]]
|
|
case 2:
|
|
i_this->field_0x6c4 = 2;
|
|
i_this->mSound.startCreatureExtraSoundLevel(Z2SE_EN_RDB_ATTACK03, 0, -1);
|
|
i_this->enemy.current.angle.y += 7000;
|
|
i_this->enemy.shape_angle.y = i_this->enemy.current.angle.y;
|
|
i_this->field_0x6e4 = 5.0f;
|
|
i_this->field_0x6e8 = i_this->mAngleToPlayer + (u16)-0x8000;
|
|
iVar1 = 1;
|
|
if (i_this->field_0x6b8[0] == 0) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ATTACK03_END, 0.0f, 0, 1.0f);
|
|
i_this->mMode = 3;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (!p_modelMorf->isStop())
|
|
break;
|
|
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->enemy.speedF, 1.0f, 3.0f);
|
|
u8 i_alpha;
|
|
f32 i_ratio;
|
|
_GXColor i_effPrim, i_effEnv;
|
|
if (iVar1 != 0 &&
|
|
getPolyColor(i_this->mAcch.m_gnd, 0, &i_effPrim, &i_effEnv, &i_alpha, &i_ratio) != 0)
|
|
{
|
|
cXyz i_scale(1.55f, 1.55f, 1.55f);
|
|
for (int i = 0; i <= 1; i++) {
|
|
if (i == 0) {
|
|
i_this->field_0xfd0[i] = dComIfGp_particle_setColor(
|
|
i_this->field_0xfd0[i], ap_name[i], &i_this->enemy.current.pos,
|
|
&i_this->enemy.tevStr, &i_effPrim, &i_effEnv, i_ratio, i_alpha,
|
|
&i_this->enemy.shape_angle, &i_scale, NULL, -1, NULL);
|
|
} else {
|
|
i_this->field_0xfd0[i] = dComIfGp_particle_set(
|
|
i_this->field_0xfd0[i], ap_name[i], &i_this->enemy.current.pos,
|
|
&i_this->enemy.shape_angle, &i_scale);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80766188-80766294 0011A8 010C+00 1/1 0/0 0/0 .text e_rdb_defence__FP11e_rdb_class */
|
|
static int e_rdb_defence(e_rdb_class* i_this) {
|
|
i_this->field_0x6c6 = 1;
|
|
i_this->field_0x6c0 = 3;
|
|
int frame = i_this->mpModelMorf->getFrame();
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
if (i_this->mAnm != e_rdb_class::BCK_RB_GUARD) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_GUARD, 3.0f, 0, 1.0f);
|
|
} else {
|
|
if (frame > 15) {
|
|
i_this->mpModelMorf->setFrame(0.0f);
|
|
}
|
|
}
|
|
|
|
i_this->mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->enemy.speedF, 1.0f, 3.0f);
|
|
i_this->field_0x6c8 = 1;
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80766294-807665B4 0012B4 0320+00 1/1 0/0 0/0 .text e_rdb_damage__FP11e_rdb_class */
|
|
static void e_rdb_damage(e_rdb_class* i_this) {
|
|
int frame = i_this->mpModelMorf->getFrame();
|
|
int iVar1;
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
iVar1 = cM_rndF(4.99f);
|
|
if (iVar1 == 0) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DAMAGEF, 2.0f, 0, 1.0f);
|
|
} else if (iVar1 == 1) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DAMAGEFL, 2.0f, 0, 1.0f);
|
|
} else if (iVar1 == 2) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DAMAGEFR, 2.0f, 0, 1.0f);
|
|
} else if (iVar1 == 3) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DAMAGEBL, 2.0f, 0, 1.0f);
|
|
} else if (iVar1 == 4) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DAMAGEBR, 2.0f, 0, 1.0f);
|
|
}
|
|
|
|
i_this->mMode = 1;
|
|
break;
|
|
|
|
case 1:
|
|
if (i_this->field_0x6b8[3] != 0) {
|
|
i_this->enemy.onHeadLockFlg();
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
i_this->field_0xfcd = 0;
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DOWN_WAIT, 5.0f, 2, 1.0f);
|
|
i_this->field_0x6b8[0] = 60;
|
|
i_this->mMode = 11;
|
|
}
|
|
break;
|
|
|
|
case 11:
|
|
if (i_this->field_0x6b8[0] == 0) {
|
|
i_this->field_0x6c0 = 50;
|
|
if (i_this->field_0xfcc >= 2 && strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
i_this->mAction = 4;
|
|
i_this->mMode = 0;
|
|
} else {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DOWN_RETURN, 5.0f, 0, 1.0f);
|
|
i_this->mMode = 12;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 12:
|
|
if (frame >= 25 && frame <= 35) {
|
|
cLib_addCalcAngleS2(&i_this->enemy.current.angle.y, i_this->mAngleToPlayer, 2, 0x1000);
|
|
}
|
|
|
|
if (frame >= 35 && frame <= 42) {
|
|
i_this->field_0x6c4 = 1;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
i_this->mAction = 1;
|
|
i_this->mMode = 0;
|
|
i_this->field_0x6c0 = 10;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc0(&i_this->enemy.speedF, 1.0f, 3.0f);
|
|
}
|
|
|
|
/* 807665B4-80766A1C 0015D4 0468+00 2/1 0/0 0/0 .text e_rdb_end__FP11e_rdb_class */
|
|
static void e_rdb_end(e_rdb_class* i_this) {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
e_wb_class* actor = (e_wb_class*)fopAcM_SearchByName(PROC_E_WB);
|
|
int frame = i_this->mpModelMorf->getFrame();
|
|
cXyz sp40;
|
|
f32 fVar1 = 0.0f;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ED_DEMO_DOWN, 2.0f, 0, 1.0f);
|
|
i_this->mMode = 1;
|
|
if (actor != NULL) {
|
|
actor->field_0x169e = 60;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
if (frame == 3) {
|
|
PSMTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(15), *calc_mtx);
|
|
mtx_to_posAngle(*calc_mtx, &i_this->field_0x684, &i_this->field_0x69c);
|
|
i_this->field_0x680 = 2;
|
|
cMtx_YrotS(*calc_mtx, i_this->enemy.shape_angle.y);
|
|
sp40.x = 10.0f;
|
|
sp40.y = 25.0f;
|
|
sp40.z = -10.0f;
|
|
MtxPosition(&sp40, &i_this->field_0x690);
|
|
i_this->field_0x6a4 = 200;
|
|
i_this->field_0x6a2 = 700;
|
|
}
|
|
|
|
if (frame == 141) {
|
|
fopAcM_effSmokeSet1(&i_this->field_0xfd0[0], &i_this->field_0xfd0[1],
|
|
&i_this->enemy.eyePos, &i_this->enemy.shape_angle, 2.5f,
|
|
&i_this->enemy.tevStr, 1);
|
|
dComIfGp_getVibration().StartShock(2, 31, cXyz(0.0f, 1.0f, 0.0f));
|
|
i_this->mSound.startCreatureSound(Z2SE_CM_BODYFALL_L, 0, -1);
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ED_DEMO_DOWNWAIT, 2.0f, 2, 1.0f);
|
|
i_this->mMode = 2;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ED_DEMO_DOWNUP, 5.0f, 0, 1.0f);
|
|
i_this->mMode = 4;
|
|
break;
|
|
|
|
case 4:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_ED_DEMO_DOWNWALK, 3.0f, 2, 1.0f);
|
|
i_this->mMode = 5;
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
fVar1 = 5.0f;
|
|
break;
|
|
|
|
case 10:
|
|
if ((((actor->mActionID == 102 && actor->mEnemy.speedF > 40.0f) &&
|
|
player->current.pos.x > 1470.0f && player->current.pos.x < 2130.0f)) &&
|
|
((player->current.pos.z < 200.0f) &&
|
|
(player->shape_angle.y > 0x7000 || player->shape_angle.y < -0x7000)))
|
|
{
|
|
actor->field_0x169e = 80;
|
|
i_this->mMode = 11;
|
|
}
|
|
// [[fallthrough]]
|
|
case 11:
|
|
i_this->field_0x6c0 = 10;
|
|
i_this->enemy.current.pos.y = i_this->enemy.home.pos.y + 5000.0f;
|
|
i_this->enemy.speed.y = 0.0f;
|
|
i_this->field_0xfcf = 2;
|
|
fopAcM_OffStatus(&i_this->enemy, 0x100);
|
|
break;
|
|
|
|
case 20:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_LV9_END01, 2.0f, 0, 1.0f);
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_LV9_END01, -1);
|
|
i_this->mMode = 21;
|
|
i_this->mDemoMode = 10;
|
|
break;
|
|
|
|
case 21:
|
|
if (frame == 12) {
|
|
i_this->field_0x680 = 0;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_LV9_END02, 3.0f, 0, 1.0f);
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_LV9_END02, -1);
|
|
i_this->mMode = 22;
|
|
}
|
|
break;
|
|
|
|
case 22:
|
|
if (frame == 50) {
|
|
i_this->field_0x1104 = 1;
|
|
}
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->enemy.speedF, fVar1, 1.0f, 3.0f);
|
|
}
|
|
|
|
/* 80766A1C-80766DB4 001A3C 0398+00 2/1 0/0 0/0 .text e_rdb_start__FP11e_rdb_class */
|
|
static void e_rdb_start(e_rdb_class* i_this) {
|
|
int frame = i_this->mpModelMorf->getFrame();
|
|
f32 fVar1 = 0.0f;
|
|
i_this->field_0x6c0 = 3;
|
|
|
|
switch (i_this->mMode) {
|
|
case 0:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WAIT01, 10.0f, 2, 1.0f);
|
|
i_this->mMode = 1;
|
|
break;
|
|
|
|
case 2:
|
|
i_this->field_0xfcf = 0;
|
|
if (i_this->field_0x6b8[0] == 0) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WALK, 10.0f, 2, 1.0f);
|
|
i_this->mMode = 3;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
fVar1 = 3.0f;
|
|
break;
|
|
|
|
case 4:
|
|
anm_init(i_this, e_rdb_class::BCK_RB_OP_DEMO_SWING, 10.0f, 0, 1.0f);
|
|
i_this->mMode = 5;
|
|
i_this->field_0x6d8 = 3;
|
|
break;
|
|
|
|
case 5:
|
|
if ((frame >= 128 && frame <= 142) || (frame >= 166 && frame <= 175)) {
|
|
fVar1 = 10.0f;
|
|
}
|
|
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WAIT01, 10.0f, 2, 1.0f);
|
|
i_this->mMode = 6;
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
i_this->mAction = 2;
|
|
i_this->mMode = 0;
|
|
break;
|
|
|
|
case 10:
|
|
i_this->mMode = 11;
|
|
break;
|
|
|
|
case 11:
|
|
i_this->enemy.current.pos.y = i_this->enemy.home.pos.y + 20000.0f;
|
|
i_this->enemy.speed.y = 0.0f;
|
|
|
|
if (fopAcM_searchPlayerDistanceXZ(&i_this->enemy) < 500.0f) {
|
|
i_this->mMode = 12;
|
|
anm_init(i_this, e_rdb_class::BCK_RB_LV9_OP01, fVar1, 0, 1.0f);
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_LV9_OP, 0, -1);
|
|
i_this->mDemoMode = 1;
|
|
i_this->enemy.current.pos.y = i_this->enemy.home.pos.y + 2000.0f;
|
|
}
|
|
break;
|
|
|
|
case 12:
|
|
if (i_this->mAcch.ChkGroundHit()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_LV9_OP02, 0.0f, 0, 1.0f);
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_LV9_OP, -1);
|
|
i_this->mMode = 13;
|
|
dComIfGp_getVibration().StartShock(8, 79, cXyz(0.0f, 1.0f, 0.0f));
|
|
|
|
mDoAud_seStart(Z2SE_OBJ_FM_DIRTFALL, 0, 0, 0);
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_FM_DOWN, 0, -1);
|
|
fopAcM_effSmokeSet1(&i_this->field_0xfd0[0], &i_this->field_0xfd0[1],
|
|
&i_this->enemy.current.pos, &i_this->enemy.shape_angle, 3.5f,
|
|
&i_this->enemy.tevStr, 1);
|
|
}
|
|
break;
|
|
|
|
case 13:
|
|
if (i_this->mpModelMorf->isStop()) {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_WAIT01, 5.0f, 2, 1.0f);
|
|
}
|
|
}
|
|
|
|
i_this->enemy.speedF = fVar1;
|
|
}
|
|
|
|
/* 80766DB4-80767294 001DD4 04E0+00 1/1 0/0 0/0 .text damage_check__FP11e_rdb_class */
|
|
static void damage_check(e_rdb_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->enemy;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
if (i_this->field_0x6c2 == 0 && i_this->field_0xe64.ChkTgHit() != 0 &&
|
|
i_this->field_0xe64.ChkTgShield() != 0)
|
|
{
|
|
def_se_set(&i_this->mSound, i_this->field_0xe64.GetTgHitObj(), 40, NULL);
|
|
i_this->field_0x6c2 = 8;
|
|
i_this->field_0x6c0 = 8;
|
|
i_this->field_0x6e4 = 12.0f + TREG_F(7);
|
|
i_this->field_0x6e8 = a_this->shape_angle.y;
|
|
}
|
|
|
|
i_this->mStts.Move();
|
|
|
|
u32 i_soundID = 0;
|
|
s8 bVar1 = 0;
|
|
s8 bVar2 = 0;
|
|
if (i_this->field_0x6c0 == 0) {
|
|
for (int i = 0; i <= 2; i = i + 1) {
|
|
if (i_this->field_0x944[i].ChkTgHit() != 0) {
|
|
i_this->mAtInfo.mpCollider = i_this->field_0x944[i].GetTgHitObj();
|
|
cc_at_check(a_this, &i_this->mAtInfo);
|
|
OS_REPORT("E_rdb HP %d\n", a_this->health);
|
|
if (i_this->mAtInfo.mAttackPower != 0) {
|
|
u16 uVar1;
|
|
cXyz sp2c(1.0f, 1.0f, 1.0f);
|
|
if (i_this->mAtInfo.mHitStatus != 0) {
|
|
uVar1 = 3;
|
|
} else {
|
|
uVar1 = 1;
|
|
}
|
|
|
|
cXyz sp38, sp44;
|
|
cMtx_YrotS(*calc_mtx, i_this->mAngleToPlayer);
|
|
if (i_this->mAnm == e_rdb_class::BCK_RB_DOWN || i_this->mAnm == e_rdb_class::BCK_RB_DOWN_WAIT) {
|
|
sp44.x = 0.0f + YREG_F(7);
|
|
sp44.y = 120.0f + YREG_F(8);
|
|
sp44.z = 190.0f + YREG_F(9);
|
|
MtxPosition(&sp44, &sp38);
|
|
sp38 += a_this->current.pos;
|
|
} else if (daPy_getPlayerActorClass()->getCutType() ==
|
|
daPy_py_c::CUT_TYPE_HEAD_JUMP)
|
|
{
|
|
sp38 = a_this->eyePos;
|
|
sp38.y += 100.0f;
|
|
} else {
|
|
sp44.x = 0.0f + YREG_F(7);
|
|
sp44.y = 150.0f + YREG_F(8);
|
|
sp44.z = 100.0f + YREG_F(9);
|
|
MtxPosition(&sp44, &sp38);
|
|
sp38 += a_this->current.pos;
|
|
}
|
|
|
|
dComIfGp_setHitMark(uVar1, a_this, &sp38, NULL, &sp2c, 0);
|
|
if (a_this->health <= 0) {
|
|
bVar2 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
i_this->field_0x6ec |= i_this->mAtInfo.mHitBit;
|
|
if (i_this->field_0x6c7 != 0) {
|
|
i_this->field_0x6c7 = 0;
|
|
bVar1 = 1;
|
|
}
|
|
|
|
if (player->getCutType() == daPy_py_c::CUT_TYPE_JUMP &&
|
|
player->checkCutJumpCancelTurn())
|
|
{
|
|
i_this->field_0x6c0 = 3;
|
|
i_this->field_0x6c7 = 1;
|
|
} else {
|
|
i_this->field_0x6c0 = 6;
|
|
}
|
|
|
|
if ((i_this->mAction != 6 || i_this->mMode < 10) &&
|
|
(daPy_getPlayerActorClass()->getCutCount() >= 4 || bVar1))
|
|
{
|
|
int iVar1;
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
iVar1 = 6;
|
|
} else {
|
|
iVar1 = 4;
|
|
}
|
|
|
|
if (i_this->field_0xfcc >= iVar1) {
|
|
bVar2 = 1;
|
|
} else {
|
|
anm_init(i_this, e_rdb_class::BCK_RB_DOWN, 5.0f, 0, 1.0f);
|
|
i_this->mAction = 6;
|
|
i_this->mMode = 10;
|
|
i_this->field_0x6c0 = 20;
|
|
i_this->field_0xfcc++;
|
|
i_soundID = Z2SE_EN_RDB_V_DAMAGE;
|
|
}
|
|
} else if (i_this->mAction == 6 && i_this->mMode >= 10) {
|
|
i_this->field_0x6ce = 15;
|
|
s16 angle_diff = a_this->shape_angle.y - i_this->mAngleToPlayer;
|
|
if (angle_diff > 0) {
|
|
i_this->field_0x6d4 = 1.0f;
|
|
} else {
|
|
i_this->field_0x6d4 = -1.0f;
|
|
}
|
|
i_soundID = Z2SE_EN_RDB_V_DAMAGE;
|
|
} else {
|
|
i_this->mAction = 6;
|
|
i_this->mMode = 0;
|
|
if (i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_SHIELD_ATTACK) != 0) {
|
|
i_this->field_0x6b8[3] = 30;
|
|
i_this->field_0x6c0 = 30;
|
|
i_soundID = Z2SE_EN_RDB_V_AWAKE;
|
|
} else {
|
|
i_this->field_0x6b8[3] = 0;
|
|
i_soundID = Z2SE_EN_RDB_V_DAMAGE;
|
|
}
|
|
|
|
i_this->field_0xfcd++;
|
|
if (i_this->field_0xfcd >= 4) {
|
|
i_this->field_0x6c0 = 60;
|
|
}
|
|
}
|
|
|
|
if (a_this->health <= 1) {
|
|
i_this->field_0x944[i].SetTgHitMark((CcG_Tg_HitMark)3);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bVar2 != 0) {
|
|
i_this->mAction = 7;
|
|
i_this->field_0xfcd = 0;
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
i_this->mMode = 20;
|
|
} else {
|
|
i_this->mMode = 0;
|
|
}
|
|
|
|
i_this->field_0x6c0 = 1000;
|
|
i_soundID = Z2SE_EN_RDB_V_ED_DEMO_DOWN;
|
|
|
|
Z2GetAudioMgr()->subBgmStop();
|
|
}
|
|
|
|
if (i_soundID != 0) {
|
|
i_this->mSound.startCreatureVoice(i_soundID, -1);
|
|
}
|
|
}
|
|
|
|
/* 80767294-80767428 0022B4 0194+00 1/1 0/0 0/0 .text shot_s_sub__FPvPv */
|
|
static void* shot_s_sub(void* i_actor, void* i_data) {
|
|
if ((fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_ARROW) &&
|
|
(fopAcM_GetParam(i_actor) == 1 || fopAcM_GetParam(i_actor) == 2))
|
|
{
|
|
cXyz sp28 = static_cast<fopAc_ac_c*>(i_data)->current.pos -
|
|
static_cast<fopAc_ac_c*>(i_actor)->current.pos;
|
|
if (sp28.abs() < 1000.0f) {
|
|
return i_actor;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
/* 8076BA04-8076BA08 -00001 0004+00 2/2 0/0 0/0 .bss None */
|
|
static u8 s_HIOinit;
|
|
|
|
/* 8076BA14-8076BA20 000054 000C+00 3/4 0/0 0/0 .bss l_HIO */
|
|
static daE_RDB_HIO_c l_HIO;
|
|
|
|
/* 80767428-80767CD0 002448 08A8+00 2/1 0/0 0/0 .text action__FP11e_rdb_class */
|
|
static void action(e_rdb_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->enemy;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
cXyz sp44, sp50;
|
|
i_this->field_0x6c8 = 0;
|
|
i_this->mDistToPlayer = fopAcM_searchPlayerDistance(a_this);
|
|
i_this->mAngleToPlayer = fopAcM_searchPlayerAngleY(a_this);
|
|
|
|
damage_check(i_this);
|
|
s8 sVar1 = 0;
|
|
s8 sVar2 = 1;
|
|
int sVar3 = 1;
|
|
|
|
switch (i_this->mAction) {
|
|
case ACTION_START:
|
|
e_rdb_start(i_this);
|
|
sVar2 = 0;
|
|
sVar3 = 0;
|
|
break;
|
|
|
|
case ACTION_WAIT:
|
|
e_rdb_wait(i_this);
|
|
sVar1 = 1;
|
|
break;
|
|
|
|
case ACTION_FIGHT:
|
|
e_rdb_fight(i_this);
|
|
sVar1 = 1;
|
|
break;
|
|
|
|
case ACTION_ATTACK:
|
|
e_rdb_attack(i_this);
|
|
sVar1 = 1;
|
|
sVar3 = 0;
|
|
break;
|
|
|
|
case ACTION_SPIN_ATTACK:
|
|
e_rdb_spin_attack(i_this);
|
|
sVar1 = 1;
|
|
sVar3 = 0;
|
|
break;
|
|
|
|
case ACTION_DEFENCE:
|
|
sVar3 = e_rdb_defence(i_this);
|
|
sVar1 = 1;
|
|
break;
|
|
|
|
case ACTION_DAMAGE:
|
|
e_rdb_damage(i_this);
|
|
sVar3 = 0;
|
|
break;
|
|
|
|
case ACTION_END:
|
|
e_rdb_end(i_this);
|
|
sVar3 = 0;
|
|
}
|
|
|
|
if (sVar1) {
|
|
i_this->mSound.setLinkSearch(true);
|
|
} else {
|
|
i_this->mSound.setLinkSearch(false);
|
|
}
|
|
|
|
if (sVar2) {
|
|
fopAcM_OnStatus(a_this, 0);
|
|
a_this->attention_info.flags = fopAc_AttnFlag_BATTLE_e;
|
|
} else {
|
|
fopAcM_OffStatus(a_this, 0);
|
|
a_this->attention_info.flags = 0;
|
|
}
|
|
|
|
if ((s8)sVar3) {
|
|
int iVar1 = 0;
|
|
if (daPy_getPlayerActorClass()->checkHookshotShootReturnMode() &&
|
|
!daPy_getPlayerActorClass()->checkHookshotReturnMode())
|
|
{
|
|
iVar1 = 1;
|
|
} else if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 &&
|
|
fpcM_Search(shot_s_sub, i_this) != NULL)
|
|
{
|
|
iVar1 = 1;
|
|
}
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
cXyz* ironBallCenterPos = player->getIronBallCenterPos();
|
|
if (ironBallCenterPos && (player->current.pos - *ironBallCenterPos).abs() > 200.0f &&
|
|
(a_this->current.pos - *ironBallCenterPos).abs() < 500.0f &&
|
|
(dComIfGp_checkPlayerStatus0(0, 0x400) == 0) &&
|
|
(!daPy_getPlayerActorClass()->checkIronBallReturn()) &&
|
|
(!daPy_getPlayerActorClass()->checkIronBallGroundStop()))
|
|
{
|
|
iVar1 = 2;
|
|
}
|
|
}
|
|
|
|
int bVar1 = 0;
|
|
if ((strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 &&
|
|
player->getCutType() == daPy_py_c::CUT_TYPE_GUARD_ATTACK) ||
|
|
(daPy_getPlayerActorClass()->getCutAtFlg() != 0 &&
|
|
player->getCutType() != daPy_py_c::CUT_TYPE_HEAD_JUMP))
|
|
{
|
|
bVar1 = 1;
|
|
}
|
|
|
|
if ((iVar1 != 0 && player_way_check(i_this) != 0) ||
|
|
((i_this->mDistToPlayer < 500.0f && player_way_check(i_this) != 0 && bVar1) &&
|
|
(player->checkNowWolf() || (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) ||
|
|
(i_this->field_0x6ec & cc_pl_cut_bit_get()) != 0)))
|
|
{
|
|
i_this->mAction = ACTION_DEFENCE;
|
|
i_this->mMode = 0;
|
|
i_this->field_0x6c0 = 3;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.y, a_this->current.angle.y, 2, 0x1000);
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.x, a_this->current.angle.x, 2, 0x1000);
|
|
cLib_addCalcAngleS2(&a_this->shape_angle.z, a_this->current.angle.z, 2, 0x1000);
|
|
a_this->gravity = -5.0f;
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->current.angle.y);
|
|
sp44.x = 0.0f;
|
|
sp44.y = 0.0f;
|
|
sp44.z = a_this->speedF * (l_HIO.field_0x8 / 1.44f);
|
|
MtxPosition(&sp44, &sp50);
|
|
a_this->speed.x = sp50.x;
|
|
a_this->speed.z = sp50.z;
|
|
a_this->current.pos += a_this->speed;
|
|
a_this->speed.y += a_this->gravity;
|
|
if (a_this->speed.y < -80.0f) {
|
|
a_this->speed.y = -80.0f;
|
|
}
|
|
|
|
if (i_this->field_0x6e4 > 0.1f) {
|
|
sp44.x = 0.0f;
|
|
sp44.y = 0.0f;
|
|
sp44.z = -i_this->field_0x6e4;
|
|
cMtx_YrotS(*calc_mtx, i_this->field_0x6e8);
|
|
MtxPosition(&sp44, &sp50);
|
|
a_this->current.pos += sp50;
|
|
cLib_addCalc0(&i_this->field_0x6e4, 1.0f, 3.0f);
|
|
}
|
|
|
|
s16 sVar5 = 0;
|
|
s16 sVar6 = 0;
|
|
cXyz sp5c = player->eyePos;
|
|
if (i_this->field_0x6c8 != 0) {
|
|
sp44 = sp5c - a_this->current.pos;
|
|
sp44.y += -150.0f;
|
|
sVar5 = cM_atan2s(sp44.x, sp44.z) - a_this->shape_angle.y;
|
|
sVar6 = a_this->shape_angle.x +
|
|
cM_atan2s(sp44.y, JMAFastSqrt(sp44.x * sp44.x + sp44.z * sp44.z));
|
|
|
|
if (sVar5 > 0x3E80) {
|
|
sVar5 = 16000;
|
|
} else if (sVar5 < -16000) {
|
|
sVar5 = -16000;
|
|
}
|
|
|
|
if (sVar6 > 0x3E80) {
|
|
sVar6 = 16000;
|
|
} else if (sVar6 < -16000) {
|
|
sVar6 = -16000;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->field_0x6ca, sVar5, 2, 0x1000);
|
|
cLib_addCalcAngleS2(&i_this->field_0x6cc, sVar6, 2, 0x1000);
|
|
if (i_this->field_0x6ce != 0) {
|
|
i_this->field_0x6ce--;
|
|
i_this->field_0x6d0 = i_this->field_0x6ce * cM_ssin(i_this->field_0x6ce * 12000) * 50.0f;
|
|
i_this->field_0x6d2 = i_this->field_0x6d4 *
|
|
(i_this->field_0x6ce * cM_ssin(i_this->field_0x6ce * 5000)) * 600.0f;
|
|
}
|
|
|
|
cXyz sp68(1.5f, 1.5f, 1.5f);
|
|
setMidnaBindEffect(a_this, &i_this->mSound, &a_this->eyePos, &sp68);
|
|
}
|
|
|
|
/* 80767CD0-80767DB4 002CF0 00E4+00 1/1 0/0 0/0 .text cam_3d_morf__FP11e_rdb_classf */
|
|
static void cam_3d_morf(e_rdb_class* i_this, f32 i_scale) {
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, i_this->field_0x10d0.x, i_scale,
|
|
i_this->field_0x10e8.x * i_this->field_0x10f8);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, i_this->field_0x10d0.y, i_scale,
|
|
i_this->field_0x10e8.y * i_this->field_0x10f8);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, i_this->field_0x10d0.z, i_scale,
|
|
i_this->field_0x10e8.z * i_this->field_0x10f8);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.x, i_this->field_0x10c4.x, i_scale,
|
|
i_this->field_0x10dc.x * i_this->field_0x10f8);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.y, i_this->field_0x10c4.y, i_scale,
|
|
i_this->field_0x10dc.y * i_this->field_0x10f8);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.z, i_this->field_0x10c4.z, i_scale,
|
|
i_this->field_0x10dc.z * i_this->field_0x10f8);
|
|
}
|
|
|
|
/* 80767DB4-80767E54 002DD4 00A0+00 1/1 0/0 0/0 .text cam_spd_set__FP11e_rdb_class */
|
|
static void cam_spd_set(e_rdb_class* i_this) {
|
|
i_this->field_0x10dc.x = fabsf(i_this->field_0x10c4.x - i_this->mDemoCamEye.x);
|
|
i_this->field_0x10dc.y = fabsf(i_this->field_0x10c4.y - i_this->mDemoCamEye.y);
|
|
i_this->field_0x10dc.z = fabsf(i_this->field_0x10c4.z - i_this->mDemoCamEye.z);
|
|
i_this->field_0x10e8.x = fabsf(i_this->field_0x10d0.x - i_this->mDemoCamCenter.x);
|
|
i_this->field_0x10e8.y = fabsf(i_this->field_0x10d0.y - i_this->mDemoCamCenter.y);
|
|
i_this->field_0x10e8.z = fabsf(i_this->field_0x10d0.z - i_this->mDemoCamCenter.z);
|
|
i_this->field_0x10f8 = 0.0f;
|
|
}
|
|
|
|
/* 80767E54-80768B90 002E74 0D3C+00 2/1 0/0 0/0 .text demo_camera__FP11e_rdb_class */
|
|
static void demo_camera(e_rdb_class* i_this) {
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->enemy;
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
|
|
cXyz sp28, sp34, sp40, sp4c;
|
|
s8 sVar1 = 0;
|
|
|
|
switch (i_this->mDemoMode) {
|
|
case 1:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(dEvtCnd_CANDEMO_e);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoMode = 2;
|
|
i_this->field_0x10aa = 0;
|
|
i_this->mDemoCamFovy = 55.0f;
|
|
camera->mCamera.SetTrimSize(3);
|
|
player->changeOriginalDemo();
|
|
dComIfGp_getEvent().startCheckSkipEdge(i_this);
|
|
Z2GetAudioMgr()->setDemoName("force_start");
|
|
// [[fallthrough]]
|
|
case 2:
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp28.x = 0.0f;
|
|
sp28.y = 150.0f;
|
|
sp28.z = 330.0f;
|
|
MtxPosition(&sp28, &sp40);
|
|
sp40.x += a_this->current.pos.x;
|
|
sp40.z += a_this->current.pos.z;
|
|
sp40.y = 140.0f;
|
|
sp4c.x = a_this->current.pos.x;
|
|
sp4c.z = a_this->current.pos.z;
|
|
sp4c.y = a_this->eyePos.y - 20.0f;
|
|
if (i_this->field_0x10aa == 0) {
|
|
i_this->mDemoCamCenter = sp4c;
|
|
i_this->mDemoCamEye = sp40;
|
|
} else {
|
|
i_this->mDemoCamEye = sp40;
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, sp4c.x, 0.2f, 100.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, sp4c.y, 0.2f, 100.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, sp4c.z, 0.2f, 100.0f);
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp28.x = 0.0f;
|
|
sp28.y = 50.0f;
|
|
sp28.z = 600.0f;
|
|
MtxPosition(&sp28, &sp34);
|
|
sp34.x += a_this->current.pos.x;
|
|
sp34.z += a_this->current.pos.z;
|
|
sp34.y = 50.0f;
|
|
player->setPlayerPosAndAngle(&sp34, i_this->mAngleToPlayer + (u16)-0x8000, 0);
|
|
if (i_this->field_0x10aa >= 170) {
|
|
if (i_this->field_0x10aa == 170) {
|
|
i_this->mMsgFlow.init(a_this, 0x389, 0, NULL);
|
|
}
|
|
|
|
if (i_this->mMsgFlow.doFlow(a_this, NULL, 0) != 0 && i_this->field_0x10aa >= 0x168) {
|
|
i_this->mDemoMode = 3;
|
|
i_this->field_0x10aa = 0;
|
|
i_this->field_0x10d0.set(-7627.0f, 153.0f, -5371.0f);
|
|
i_this->field_0x10c4.set(-7470.0f, 144.0f, -5071.0f);
|
|
cam_spd_set(i_this);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
if (i_this->field_0x10aa >= 20) {
|
|
cam_3d_morf(i_this, 0.2f);
|
|
cLib_addCalc2(&i_this->field_0x10f8, 0.03f, 1.0f, 0.003f);
|
|
if (i_this->field_0x10aa == 60) {
|
|
player->changeDemoMode(23, 1, 2, 0);
|
|
}
|
|
|
|
if (i_this->field_0x10aa == 130) {
|
|
sVar1 = 1;
|
|
i_this->mAction = ACTION_WAIT;
|
|
i_this->mMode = 10;
|
|
Z2GetAudioMgr()->subBgmStart(Z2BGM_FACE_OFF_BATTLE3);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 10:
|
|
if (!a_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
fopAcM_orderPotentialEvent(a_this, 2, 0xffff, 0);
|
|
a_this->eventInfo.onCondition(dEvtCnd_CANDEMO_e);
|
|
return;
|
|
}
|
|
|
|
camera->mCamera.Stop();
|
|
i_this->mDemoMode = 11;
|
|
i_this->field_0x10aa = 0;
|
|
i_this->mDemoCamFovy = 55.0f;
|
|
camera->mCamera.SetTrimSize(3);
|
|
|
|
player->changeOriginalDemo();
|
|
a_this->current = a_this->home;
|
|
a_this->shape_angle = a_this->current.angle;
|
|
Z2GetAudioMgr()->setDemoName("force_start");
|
|
// [[fallthrough]]
|
|
case 11:
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp28.x = 50.0f;
|
|
sp28.y = 0.0f;
|
|
sp28.z = 230.0f;
|
|
MtxPosition(&sp28, &sp40);
|
|
sp40.x += a_this->current.pos.x;
|
|
sp40.z += a_this->current.pos.z;
|
|
sp40.y = 220.0f;
|
|
if (i_this->field_0x10aa >= 328) {
|
|
PSMTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(21), *calc_mtx);
|
|
sp28.x = 30.0f;
|
|
sp28.y = 20.0f;
|
|
sp28.z = 0.0f;
|
|
MtxPosition(&sp28, &sp4c);
|
|
} else {
|
|
sp4c.x = a_this->current.pos.x;
|
|
sp4c.z = a_this->current.pos.z;
|
|
sp4c.y = a_this->eyePos.y;
|
|
if (sp4c.y < 190.0f) {
|
|
sp4c.y = 190.0f;
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x10aa == 0) {
|
|
i_this->mDemoCamCenter = sp4c;
|
|
i_this->mDemoCamEye = sp40;
|
|
} else {
|
|
i_this->mDemoCamEye = sp40;
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, sp4c.x, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, sp4c.y, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, sp4c.z, 0.2f, 10.0f);
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp28.x = 0.0f;
|
|
sp28.y = 50.0f;
|
|
sp28.z = 300.0f;
|
|
MtxPosition(&sp28, &sp34);
|
|
sp34.x += a_this->current.pos.x;
|
|
sp34.z += a_this->current.pos.z;
|
|
sp34.y = 50.0f;
|
|
player->setPlayerPosAndAngle(&sp34, i_this->mAngleToPlayer + (u16)-0x8000, 0);
|
|
|
|
if (i_this->field_0x10aa >= 360) {
|
|
if (i_this->field_0x10aa == 360) {
|
|
i_this->mMsgFlow.init(a_this, 0x388, 0, NULL);
|
|
}
|
|
|
|
int iVar1 = 0;
|
|
if (i_this->field_0x10aa >= 9000) {
|
|
i_this->mMsgFlow.remove();
|
|
iVar1 = 1;
|
|
}
|
|
|
|
if (i_this->mMsgFlow.doFlow(a_this, NULL, 0) != 0 && i_this->field_0x10aa >= 400) {
|
|
iVar1 = 1;
|
|
}
|
|
|
|
if (iVar1 != 0) {
|
|
daPy_getPlayerActorClass()->changeDemoMode(11, 32, 0, 0);
|
|
i_this->mDemoMode = 12;
|
|
i_this->field_0x10aa = 0;
|
|
i_this->field_0xfe5 = 1;
|
|
dComIfGs_onTbox(3);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 12:
|
|
sp4c.x = player->current.pos.x;
|
|
sp4c.y = player->current.pos.y + 145.0f;
|
|
sp4c.z = player->current.pos.z;
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.x, sp4c.x, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.y, sp4c.y, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamCenter.z, sp4c.z, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamEye.y, 170.0f, 0.2f, 10.0f);
|
|
cLib_addCalc2(&i_this->mDemoCamFovy, 70.0f, 0.05f, 0.25f);
|
|
if (i_this->field_0x10aa >= 70 && !dMsgObject_isTalkNowCheck()) {
|
|
i_this->mDemoMode = 13;
|
|
i_this->field_0x10aa = 0;
|
|
mDoGph_gInf_c::fadeOut(0.05f, g_blackColor);
|
|
i_this->field_0xfe6 = 1;
|
|
dComIfGs_offOneZoneSwitch(15, -1);
|
|
}
|
|
break;
|
|
|
|
case 13:
|
|
if (i_this->field_0x10aa == 40) {
|
|
cXyz sp58(-7080.0f, 50.0f, -6634.0f);
|
|
sp28.x = -10008.0f - sp58.x;
|
|
sp28.z = -2729.0f - sp58.z;
|
|
csXyz i_angle(0, cM_atan2s(sp28.x, sp28.z), 0);
|
|
sp58 = a_this->current.pos;
|
|
sp58.y += 2000.0f;
|
|
fopAcM_create(PROC_E_RD, 12, &sp58, fopAcM_GetRoomNo(a_this), &i_angle, NULL, -1);
|
|
sp34.set(-7530.0f, 50.0f, -5451.0f);
|
|
player->setPlayerPosAndAngle(&sp34, -0x5F3B, 0);
|
|
i_this->mDemoCamCenter.set(-7661.0f, 323.0f, -5684.0f);
|
|
i_this->mDemoCamEye.set(-7382.0f, 185.0f, -5360.0f);
|
|
i_this->mDemoCamFovy = 55.0f;
|
|
daPy_getPlayerActorClass()->changeDemoMode(1, 1, 0, 0);
|
|
}
|
|
|
|
if (i_this->field_0x10aa >= 40) {
|
|
e_rd_class* bulblin_p = (e_rd_class*)fopAcM_SearchByName(PROC_E_RD);
|
|
if (bulblin_p != NULL) {
|
|
a_this->current.pos = bulblin_p->actor.current.pos;
|
|
a_this->eyePos = bulblin_p->actor.eyePos;
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x10aa == 50) {
|
|
mDoGph_gInf_c::fadeOut(-0.05f, g_blackColor);
|
|
}
|
|
|
|
if (i_this->field_0x10aa >= 220) {
|
|
if (i_this->field_0x10aa == 220) {
|
|
i_this->mMsgFlow.init(a_this, 0x388, 0, NULL);
|
|
}
|
|
|
|
if (i_this->mMsgFlow.doFlow(a_this, NULL, 0) != 0 && i_this->field_0x10aa >= 300) {
|
|
i_this->mDemoMode = 14;
|
|
i_this->field_0x10aa = 0;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 14:
|
|
if (i_this->field_0x10aa >= 65) {
|
|
i_this->field_0x10d0.set(-7738.0f, 185.0f, -5086.0f);
|
|
i_this->field_0x10c4.set(-7382.0f, 185.0f, -5360.0f);
|
|
cam_spd_set(i_this);
|
|
i_this->mDemoMode = 15;
|
|
i_this->field_0x10aa = 0;
|
|
}
|
|
break;
|
|
|
|
case 15:
|
|
cam_3d_morf(i_this, 0.1f);
|
|
cLib_addCalc2(&i_this->field_0x10f8, 0.05f, 1.0f, 0.005f);
|
|
if (i_this->field_0x10aa >= 40) {
|
|
cLib_addCalc2(&i_this->mDemoCamFovy, 25.0f, 0.05f, 0.5f);
|
|
}
|
|
|
|
if (i_this->field_0x10aa == 179) {
|
|
player->setPlayerPosAndAngle(&player->current.pos, -0x26AE, 0);
|
|
}
|
|
|
|
if (i_this->field_0x10aa == 180) {
|
|
sVar1 = 1;
|
|
fopAcM_delete(a_this);
|
|
fopAcM_delete(fopAcM_SearchByName(PROC_E_RD));
|
|
fopAcM_delete(fopAcM_SearchByName(PROC_E_WB));
|
|
dComIfGs_onStageMiddleBoss();
|
|
int swBit = fopAcM_GetParam(a_this) >> 24;
|
|
if (swBit != 0xFF) {
|
|
dComIfGs_onSwitch(swBit, fopAcM_GetRoomNo(a_this));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i_this->mDemoMode > 0 && i_this->mDemoMode < 10) {
|
|
if (dComIfGp_getEvent().checkSkipEdge()) {
|
|
sVar1 = 1;
|
|
i_this->mAction = ACTION_WAIT;
|
|
i_this->mMode = 10;
|
|
Z2GetAudioMgr()->subBgmStart(Z2BGM_FACE_OFF_BATTLE3);
|
|
}
|
|
}
|
|
|
|
if (sVar1) {
|
|
Z2GetAudioMgr()->setDemoName("force_end");
|
|
camera->mCamera.Reset(i_this->mDemoCamCenter, i_this->mDemoCamEye);
|
|
camera->mCamera.Start();
|
|
camera->mCamera.SetTrimSize(0);
|
|
dComIfGp_event_reset();
|
|
daPy_getPlayerActorClass()->cancelOriginalDemo();
|
|
i_this->mDemoMode = 0;
|
|
}
|
|
|
|
if (i_this->mDemoMode > 0) {
|
|
cXyz i_center = i_this->mDemoCamCenter;
|
|
cXyz i_eye = i_this->mDemoCamEye;
|
|
camera->mCamera.Set(i_center, i_eye, i_this->mDemoCamFovy, 0);
|
|
i_this->field_0x10aa++;
|
|
if (i_this->field_0x10aa > 10000) {
|
|
i_this->field_0x10aa = 10000;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80768B90-80769324 003BB0 0794+00 1/1 0/0 0/0 .text anm_se_set__FP11e_rdb_class */
|
|
static void anm_se_set(e_rdb_class* i_this) {
|
|
if (i_this->mAnm == e_rdb_class::BCK_RB_WALK) {
|
|
if (i_this->mpModelMorf->checkFrame(29.0f) || i_this->mpModelMorf->checkFrame(59.0f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_RUN) {
|
|
if (i_this->mpModelMorf->checkFrame(2.0f) || i_this->mpModelMorf->checkFrame(17.0f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_STEP) {
|
|
if (i_this->mpModelMorf->checkFrame(15.0f) || i_this->mpModelMorf->checkFrame(35.0f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_ATTACK01) {
|
|
if (i_this->mpModelMorf->checkFrame(0.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ATTACK, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(58.0f)) {
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK01, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_ATTACK02) {
|
|
if (i_this->mpModelMorf->checkFrame(0.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ATTACK, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(61.0f)) {
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK02, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(110.0f)) {
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK02B, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_ATTACK03_END) {
|
|
if (i_this->mpModelMorf->checkFrame(4.0f) || i_this->mpModelMorf->checkFrame(50.5f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_DOWN) {
|
|
if (i_this->mpModelMorf->checkFrame(0.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_DAMAGE, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(31.0f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_DOWN_RETURN) {
|
|
if (i_this->mpModelMorf->checkFrame(0.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ED_DEMO_DOWNUP, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(35.0f)) {
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK02, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(52.0f)) {
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_ATTACK02B, 0, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(77.0f)) {
|
|
i_this->mSound.startCreatureSound(Z2SE_CM_BODYFALL_M, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_PUSH) {
|
|
if (i_this->mpModelMorf->checkFrame(11.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_PUSH, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_OP_DEMO_SWING) {
|
|
if (i_this->mpModelMorf->checkFrame(0.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_OP_DEMO_SWING, -1);
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_OP_DEMO_SWING, 0, -1);
|
|
} else if ((i_this->mpModelMorf->checkFrame(83.0f) ||
|
|
i_this->mpModelMorf->checkFrame(124.0f)) ||
|
|
((i_this->mpModelMorf->checkFrame(142.0f) ||
|
|
i_this->mpModelMorf->checkFrame(176.0f))))
|
|
{
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_FOOTNOTE, 0, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_ED_DEMO_DOWNUP) {
|
|
if (i_this->mpModelMorf->checkFrame(11.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ED_DEMO_DOWNUP, -1);
|
|
}
|
|
} else if (i_this->mAnm == e_rdb_class::BCK_RB_ED_DEMO_DOWNWALK) {
|
|
if (i_this->mpModelMorf->checkFrame(13.0f) || i_this->mpModelMorf->checkFrame(39.0f)) {
|
|
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_ED_DEMO_WALK, -1);
|
|
} else if (i_this->mpModelMorf->checkFrame(12.0f) ||
|
|
((i_this->mpModelMorf->checkFrame(18.0f) ||
|
|
i_this->mpModelMorf->checkFrame(36.0f)) ||
|
|
i_this->mpModelMorf->checkFrame(43.0f)))
|
|
{
|
|
i_this->mSound.startCreatureSound(Z2SE_EN_RDB_ED_FOOTNOTE, 0, -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80769324-8076A418 004344 10F4+00 2/1 0/0 0/0 .text daE_RDB_Execute__FP11e_rdb_class */
|
|
static int daE_RDB_Execute(e_rdb_class* i_this) {
|
|
if (i_this->field_0xfe6 != 0) {
|
|
demo_camera(i_this);
|
|
return 1;
|
|
} else {
|
|
if (cDmrNowMidnaTalk()) {
|
|
return 1;
|
|
}
|
|
fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->enemy;
|
|
|
|
cXyz sp64, sp70, sp7c;
|
|
|
|
i_this->field_0x67c++;
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
if (i_this->field_0x6b8[i] != 0) {
|
|
i_this->field_0x6b8[i]--;
|
|
}
|
|
}
|
|
|
|
if (i_this->field_0x6c0 != 0) {
|
|
i_this->field_0x6c0--;
|
|
}
|
|
|
|
if (i_this->field_0x6c2 != 0) {
|
|
i_this->field_0x6c2--;
|
|
}
|
|
|
|
i_this->enemy.offHeadLockFlg();
|
|
action(i_this);
|
|
|
|
i_this->mAcch.CrrPos(dComIfG_Bgsp());
|
|
mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z);
|
|
mDoMtx_stack_c::YrotM((s16)a_this->shape_angle.y);
|
|
mDoMtx_stack_c::XrotM((s16)a_this->shape_angle.x);
|
|
mDoMtx_stack_c::ZrotM(a_this->shape_angle.z);
|
|
f32 fVar1 = l_HIO.field_0x8 * a_this->scale.x;
|
|
mDoMtx_stack_c::scaleM(fVar1, fVar1, fVar1);
|
|
|
|
J3DModel* model = i_this->mpModelMorf->getModel();
|
|
model->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
anm_se_set(i_this);
|
|
i_this->mpModelMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)));
|
|
i_this->mpModelMorf->modelCalc();
|
|
MTXCopy(model->getAnmMtx(6 + AREG_S(9)), *calc_mtx);
|
|
sp64.set(20.0f, 0.0f, 0.0f);
|
|
MtxPosition(&sp64, &a_this->eyePos);
|
|
a_this->attention_info.position = a_this->eyePos;
|
|
a_this->attention_info.position.y += 30.0f;
|
|
|
|
cXyz sp88(0.0f, 0.0f, 0.0f);
|
|
if (i_this->field_0x6c0 != 0) {
|
|
sp88.set(-20000.0f, 12000.0f, 30000.0f);
|
|
}
|
|
i_this->field_0x944[0].SetC(a_this->eyePos + sp88);
|
|
i_this->field_0x944[0].SetR(35.0f);
|
|
|
|
sp64.set(0.0f + ZREG_F(0), 0.0f + ZREG_F(1), 0.0f + ZREG_F(2));
|
|
MTXCopy(model->getAnmMtx(2), *calc_mtx);
|
|
MtxPosition(&sp64, &sp70);
|
|
i_this->field_0x944[1].SetC(sp70 + sp88);
|
|
i_this->field_0x944[1].SetR((40.0f + ZREG_F(3)) * l_HIO.field_0x8);
|
|
|
|
sp64.set(0.0f + ZREG_F(4), 0.0f + ZREG_F(5), 0.0f + ZREG_F(6));
|
|
MTXCopy(model->getAnmMtx(22), *calc_mtx);
|
|
MtxPosition(&sp64, &sp70);
|
|
i_this->field_0x944[2].SetC(sp70 + sp88);
|
|
i_this->field_0x944[2].SetR((50.0f + ZREG_F(3)) * l_HIO.field_0x8);
|
|
|
|
for (int i = 0; i <= 2; i++) {
|
|
dComIfG_Ccsp()->Set(&i_this->field_0x944[i]);
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, a_this->shape_angle.y);
|
|
sp64.x = 0.0f;
|
|
sp64.y = 0.0f;
|
|
sp64.z = 40.0f + KREG_F(12);
|
|
MtxPosition(&sp64, &sp70);
|
|
sp70 += a_this->current.pos;
|
|
|
|
i_this->field_0xcec.SetC(sp70);
|
|
i_this->field_0xcec.SetR(100.0f + NREG_F(7));
|
|
i_this->field_0xcec.SetH(200.0f + NREG_F(8));
|
|
dComIfG_Ccsp()->Set(&i_this->field_0xcec);
|
|
|
|
if (i_this->field_0x680 == 1) {
|
|
MTXCopy(model->getAnmMtx(15), *calc_mtx);
|
|
i_this->mpAxeModel->setBaseTRMtx(*calc_mtx);
|
|
} else if (i_this->field_0x680 >= 2) {
|
|
i_this->field_0x684 += i_this->field_0x690;
|
|
i_this->field_0x690.y -= 5.0f;
|
|
if (i_this->field_0x684.y <= 5.0f + KREG_F(11)) {
|
|
i_this->field_0x684.y = 5.0f + KREG_F(11);
|
|
if (i_this->field_0x680 == 2) {
|
|
i_this->field_0x690.x *= 0.2f;
|
|
i_this->field_0x690.y = 20.0f;
|
|
i_this->field_0x690.z *= 0.2f;
|
|
i_this->field_0x680 = 3;
|
|
i_this->field_0x6a4 = 0;
|
|
i_this->field_0x6a2 = 0;
|
|
} else {
|
|
i_this->field_0x690.x = 0.0f;
|
|
i_this->field_0x690.y = 0.0f;
|
|
i_this->field_0x690.z = 0.0f;
|
|
}
|
|
|
|
i_this->field_0x69c.x += i_this->field_0x6a2;
|
|
if (i_this->field_0x69c.x >= 0x4000) {
|
|
if (i_this->field_0x680 == 3) {
|
|
i_this->field_0x680 = 4;
|
|
i_this->field_0x69c.x = 0x4000;
|
|
i_this->field_0x6a2 = -0x600;
|
|
i_this->field_0x6a8 = 30;
|
|
i_this->mSound.startCreatureSound(Z2SE_OBJ_KEYLOCK_BOUND, 0, -1);
|
|
sp70.set(2834.0f, 0.0f, 993.0f);
|
|
fopAcM_effSmokeSet1(&i_this->field_0xfd0[0], &i_this->field_0xfd0[1], &sp70,
|
|
NULL, 1.5f + TREG_F(12), &a_this->tevStr, 1);
|
|
i_this->field_0xfc0 = i_this->field_0x684;
|
|
i_this->mSound.startCreatureExtraSound(Z2SE_EN_RDB_DEMO_ONO_LAND, 0, -1);
|
|
} else if (i_this->field_0x680 == 4) {
|
|
i_this->field_0x680 = 5;
|
|
i_this->field_0x69c.x = 0x4000;
|
|
i_this->field_0x6a2 = -0x300;
|
|
} else {
|
|
i_this->field_0x69c.x = 0x4000;
|
|
}
|
|
}
|
|
|
|
cLib_addCalcAngleS2(&i_this->field_0x6a2, 0x800, 1, 0x100);
|
|
} else {
|
|
i_this->field_0x69c.y += i_this->field_0x6a4;
|
|
i_this->field_0x69c.x += i_this->field_0x6a2;
|
|
}
|
|
|
|
mDoMtx_stack_c::transS(i_this->field_0x684.x, i_this->field_0x684.y,
|
|
i_this->field_0x684.z);
|
|
mDoMtx_stack_c::YrotM(i_this->field_0x69c.y);
|
|
mDoMtx_stack_c::XrotM(i_this->field_0x69c.x);
|
|
mDoMtx_stack_c::ZrotM(i_this->field_0x69c.z);
|
|
mDoMtx_stack_c::transM(0.0f, -80.0f + nREG_F(7), 0.0f);
|
|
|
|
s16 sVar1 = 0;
|
|
if (i_this->field_0x6a8 != 0) {
|
|
sVar1 = i_this->field_0x6a8 * cM_ssin(i_this->field_0x6a8 * (TREG_S(9) + 7000)) *
|
|
(200.0f + TREG_F(5));
|
|
i_this->field_0x6a8--;
|
|
}
|
|
|
|
mDoMtx_stack_c::YrotM(sVar1);
|
|
mDoMtx_stack_c::scaleM(fVar1, fVar1, fVar1);
|
|
i_this->mpAxeModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
if (i_this->field_0x6c4 != 0) {
|
|
sp64.set(0.0f + AREG_F(0), -150.0f + AREG_F(1), 0.0f + AREG_F(2));
|
|
MtxPosition(&sp64, &sp70);
|
|
i_this->field_0xfc0 = sp70;
|
|
|
|
if (i_this->field_0x6c5 == 0) {
|
|
i_this->field_0x6c5 = 1;
|
|
i_this->field_0xe64.StartCAt(sp70);
|
|
} else {
|
|
i_this->field_0xe64.MoveCAt(sp70);
|
|
}
|
|
|
|
i_this->field_0xe64.SetR((100.0f + AREG_F(3)) * l_HIO.field_0x8);
|
|
i_this->field_0x6c4 = 0;
|
|
i_this->field_0xe64.OnAtSetBit();
|
|
i_this->field_0x6c6 = 2;
|
|
} else {
|
|
i_this->field_0x6c5 = 0;
|
|
i_this->field_0xe64.OffAtSetBit();
|
|
}
|
|
|
|
if (i_this->field_0x6c6 != 0) {
|
|
if (i_this->field_0x6c6 == 1) {
|
|
sp64.set(0.0f + AREG_F(5), -60.0f + AREG_F(6), 10.0f + AREG_F(7));
|
|
MtxPosition(&sp64, &sp70);
|
|
i_this->field_0xe64.SetC(sp70);
|
|
i_this->field_0xe64.SetR((50.0f + AREG_F(8)) * l_HIO.field_0x8);
|
|
}
|
|
|
|
i_this->field_0x6c6 = 0;
|
|
i_this->field_0xe64.OnTgSetBit();
|
|
} else {
|
|
sp70.x += -10000.0f;
|
|
i_this->field_0xe64.SetC(sp70);
|
|
}
|
|
dComIfG_Ccsp()->Set(&i_this->field_0xe64);
|
|
|
|
demo_camera(i_this);
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "T_DESER") == 0 ||
|
|
strcmp(dComIfGp_getStartStageName(), "F_SP118") == 0)
|
|
{
|
|
f32 fVar2 = 0.0f;
|
|
f32 fVar3 = 0.05f;
|
|
int sVar2 = i_this->field_0x6d8;
|
|
if (sVar2 == 0) {
|
|
dKy_custom_colset(0, 8, i_this->mBlend);
|
|
} else if (sVar2 == 1) {
|
|
dKy_custom_colset(0, 8, i_this->mBlend);
|
|
fVar2 = 1.0f;
|
|
fVar3 = 0.1f + JREG_F(8);
|
|
} else if (sVar2 == 2) {
|
|
i_this->mBlend = 0.0f;
|
|
dKy_custom_colset(9, 8, i_this->mBlend);
|
|
} else if (sVar2 == 3) {
|
|
dKy_custom_colset(9, 10, i_this->mBlend);
|
|
fVar2 = 1.0f;
|
|
fVar3 = 0.02f + JREG_F(10);
|
|
} else if (sVar2 == 4) {
|
|
dKy_custom_colset(11, 10, i_this->mBlend);
|
|
fVar2 = 0.0f;
|
|
fVar3 = 0.019999999552965164f;
|
|
} else {
|
|
fVar2 = 0.0f;
|
|
}
|
|
|
|
cLib_addCalc2(&i_this->mBlend, fVar2, 1.0f, fVar3);
|
|
}
|
|
|
|
static const cXyz fire_eff_pos[24] = {
|
|
cXyz(2573.0f, 370.0f, 2200.0f), cXyz(2901.0f, 600.0f, 2200.0f),
|
|
cXyz(3100.0f, 222.0f, 1888.0f), cXyz(1900.0f, 555.0f, 2200.0f),
|
|
cXyz(3100.0f, 600.0f, 1600.0f), cXyz(1783.0f, 355.0f, 2200.0f),
|
|
cXyz(1555.0f, 200.0f, 2200.0f), cXyz(3100.0f, 350.0f, 1332.0f),
|
|
cXyz(3100.0f, 550.0f, 1070.0f), cXyz(1375.0f, 600.0f, 2200.0f),
|
|
cXyz(3100.0f, 250.0f, 850.0f), cXyz(1165.0f, 430.0f, 2200.0f),
|
|
cXyz(3100.0f, 450.0f, 450.0f), cXyz(3100.0f, 600.0f, 200.0f),
|
|
cXyz(700.0f, 260.0f, 2200.0f), cXyz(3100.0f, 300.0f, -150.0f),
|
|
cXyz(500.0f, 522.0f, 1888.0f), cXyz(500.0f, 300.0f, 1632.0f),
|
|
cXyz(500.0f, 400.0f, 1332.0f), cXyz(500.0f, 550.0f, 1070.0f),
|
|
cXyz(500.0f, 350.0f, 850.0f), cXyz(500.0f, 550.0f, 450.0f),
|
|
cXyz(500.0f, 300.0f, 200.0f), cXyz(500.0f, 600.0f, -150.0f),
|
|
};
|
|
|
|
if (i_this->field_0xfe4 != 0) {
|
|
csXyz cStack_c0(0, 0, 0);
|
|
for (int i = 0; i < i_this->field_0xfe4; i++) {
|
|
if (fire_eff_pos[i].x == 3100.0f) {
|
|
cStack_c0.y = -0x4000;
|
|
} else if (fire_eff_pos[i].x == 500.0f) {
|
|
cStack_c0.y = 0x4000;
|
|
} else {
|
|
cStack_c0.y = -0x8000;
|
|
}
|
|
|
|
i_this->field_0xfe8[i] = dComIfGp_particle_set(i_this->field_0xfe8[i], 0x85C2,
|
|
&fire_eff_pos[i], &cStack_c0, NULL);
|
|
i_this->field_0x1048[i] = dComIfGp_particle_set(i_this->field_0x1048[i], 0x85C3,
|
|
&fire_eff_pos[i], &cStack_c0, NULL);
|
|
|
|
Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_CRVN_BURNING, &fire_eff_pos[i], 0, 0, 1.0f,
|
|
1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
if ((i_this->field_0x67c & 15) == 0 && i_this->field_0xfe4 < 24) {
|
|
i_this->field_0xfe4++;
|
|
}
|
|
}
|
|
|
|
cXyz i_pos(a_this->eyePos);
|
|
i_pos.y += 180.0f + NREG_F(7);
|
|
i_this->enemy.setHeadLockPos(&i_pos);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
/* 8076A418-8076A420 005438 0008+00 1/0 0/0 0/0 .text daE_RDB_IsDelete__FP11e_rdb_class
|
|
*/
|
|
static int daE_RDB_IsDelete(e_rdb_class* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 8076A420-8076A488 005440 0068+00 1/0 0/0 0/0 .text daE_RDB_Delete__FP11e_rdb_class */
|
|
static int daE_RDB_Delete(e_rdb_class* i_this) {
|
|
fopAc_ac_c* a_this = (fopAc_ac_c*)i_this;
|
|
fopAcM_GetID(i_this);
|
|
dComIfG_resDelete(&i_this->mPhase, "E_rdb");
|
|
if (i_this->field_0xfce != 0) {
|
|
s_HIOinit = 0;
|
|
mDoHIO_DELETE_CHILD(l_HIO.mID);
|
|
}
|
|
|
|
if (a_this->heap != NULL) {
|
|
i_this->mpModelMorf->stopZelAnime();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8076A488-8076A5FC 0054A8 0174+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
|
|
static int useHeapInit(fopAc_ac_c* actor) {
|
|
e_rdb_class* i_this = (e_rdb_class*)actor;
|
|
i_this->mpModelMorf =
|
|
new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BMDR_RB), NULL, NULL,
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BCK_RB_WAIT01), 2, 1.0f, 0, -1,
|
|
&i_this->mSound, 0x80000, 0x11000084);
|
|
if (i_this->mpModelMorf == NULL || i_this->mpModelMorf->getModel() == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
J3DModel* model = i_this->mpModelMorf->getModel();
|
|
model->setUserArea((uintptr_t)i_this);
|
|
for (u16 i_idx = 0; i_idx < model->getModelData()->getJointNum(); i_idx++) {
|
|
model->getModelData()->getJointNodePointer(i_idx)->setCallBack(nodeCallBack);
|
|
}
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BMDR_RB_ONO);
|
|
JUT_ASSERT(2827, modelData != NULL);
|
|
i_this->mpAxeModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
if (i_this->mpAxeModel != NULL) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 8076A5FC-8076AA0C 00561C 0410+00 1/0 0/0 0/0 .text daE_RDB_Create__FP10fopAc_ac_c */
|
|
static int daE_RDB_Create(fopAc_ac_c* actor) {
|
|
static dCcD_SrcSph cc_sph_src = {
|
|
{
|
|
{0x0, {{0x0, 0x0, 0x0}, {0xd8fafdbf, 0x3}, 0x0}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x102}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcSph at_sph_src = {
|
|
{
|
|
{0x0, {{AT_TYPE_CSTATUE_SWING, 0xc, 0xd}, {0xd8fafdbf, 0x3}, 0x0}}, // mObj
|
|
{dCcD_SE_METAL, 0x0, 0x2, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x102}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{{0.0f, 0.0f, 0.0f}, 35.0f} // mSph
|
|
} // mSphAttr
|
|
};
|
|
|
|
static dCcD_SrcCyl co_cyl_src = {
|
|
{
|
|
{0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x75}}, // 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}, // mCenter
|
|
100.0f, // mRadius
|
|
200.0f // mHeight
|
|
} // mCyl
|
|
};
|
|
|
|
e_rdb_class* i_this = (e_rdb_class*)actor;
|
|
fopAcM_SetupActor(actor, e_rdb_class);
|
|
|
|
int phase = dComIfG_resLoad(&i_this->mPhase, "E_rdb");
|
|
i_this->field_0x5b6 = fopAcM_GetParam(actor);
|
|
if (phase == cPhs_COMPLEATE_e) {
|
|
OS_REPORT("E_rdb PARAM %x\n", fopAcM_GetParam(actor));
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0 && dComIfGs_isStageMiddleBoss()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
int i_no = fopAcM_GetParam(actor) >> 24;
|
|
if (i_no != 0xFF) {
|
|
if (dComIfGs_isSwitch(i_no, fopAcM_GetRoomNo(actor))) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
}
|
|
|
|
if (!fopAcM_entrySolidHeap(actor, useHeapInit, 0x3C00)) {
|
|
OS_REPORT("//////////////E_RDB SET NON !!\n");
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
i_this->mAction = ACTION_WAIT;
|
|
i_this->mMode = 0;
|
|
|
|
if (s_HIOinit == 0) {
|
|
i_this->field_0xfce = 1;
|
|
s_HIOinit = 1;
|
|
l_HIO.mID = -1;
|
|
}
|
|
|
|
fopAcM_SetMtx(actor, i_this->mpModelMorf->getModel()->getBaseTRMtx());
|
|
fopAcM_SetMin(actor, -200.0f, -200.0f, -200.0f);
|
|
fopAcM_SetMax(actor, 200.0f, 200.0f, 200.0f);
|
|
i_this->mAcch.Set(fopAcM_GetPosition_p(actor), fopAcM_GetOldPosition_p(actor), actor, 1,
|
|
&i_this->mAcchCir, fopAcM_GetSpeed_p(actor), NULL, NULL);
|
|
i_this->mAcchCir.SetWall(50.0f, 150.0f);
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
actor->health = 900;
|
|
actor->field_0x560 = 900;
|
|
} else {
|
|
actor->health = 600;
|
|
actor->field_0x560 = 600;
|
|
}
|
|
|
|
i_this->mStts.Init(200, 0, actor);
|
|
|
|
for (int i = 0; i <= 2; i++) {
|
|
i_this->field_0x944[i].Set(cc_sph_src);
|
|
i_this->field_0x944[i].SetStts(&i_this->mStts);
|
|
i_this->field_0x944[i].OnTgNoHitMark();
|
|
}
|
|
|
|
i_this->mStts2.Init(0xFF, 0, actor);
|
|
i_this->field_0xe64.Set(at_sph_src);
|
|
i_this->field_0xe64.SetStts(&i_this->mStts2);
|
|
i_this->field_0xe64.OnTgShield();
|
|
i_this->field_0xe64.SetTgHitMark((CcG_Tg_HitMark)2);
|
|
i_this->field_0xe64.SetAtSpl((dCcG_At_Spl)11);
|
|
|
|
i_this->field_0xcec.Set(co_cyl_src);
|
|
i_this->field_0xcec.SetStts(&i_this->mStts2);
|
|
|
|
i_this->mSound.init(&actor->current.pos, &actor->eyePos, &i_this->field_0xfc0, 3, 1, 1);
|
|
i_this->mSound.setEnemyName("E_rdb");
|
|
i_this->mAtInfo.mpSound = &i_this->mSound;
|
|
i_this->mAtInfo.mPowerType = 6;
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) {
|
|
i_this->mAction = ACTION_START;
|
|
i_this->mMode = 10;
|
|
actor->current.pos.set(-7625.0f, 50.0f, -5825.0f);
|
|
actor->current.angle.y = 0;
|
|
actor->old = actor->current;
|
|
actor->home = actor->current;
|
|
} else if (i_this->field_0x5b6 == 0xFF) {
|
|
i_this->field_0xfcf = 1;
|
|
i_this->mAction = ACTION_START;
|
|
actor->current.angle.y = 26000;
|
|
i_this->field_0x6e0 = -50.0f;
|
|
} else {
|
|
i_this->mAction = ACTION_WAIT;
|
|
}
|
|
|
|
i_this->field_0x680 = 1;
|
|
daE_RDB_Execute(i_this);
|
|
}
|
|
|
|
return phase;
|
|
}
|
|
|
|
static s32 unused_bss_29c = 0;
|
|
|
|
AUDIO_INSTANCES
|
|
|
|
/* 8076B8F4-8076B914 -00001 0020+00 1/0 0/0 0/0 .data l_daE_RDB_Method */
|
|
static actor_method_class l_daE_RDB_Method = {
|
|
(process_method_func)daE_RDB_Create, (process_method_func)daE_RDB_Delete,
|
|
(process_method_func)daE_RDB_Execute, (process_method_func)daE_RDB_IsDelete,
|
|
(process_method_func)daE_RDB_Draw,
|
|
};
|
|
|
|
/* 8076B914-8076B944 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_RDB */
|
|
extern actor_process_profile_definition g_profile_E_RDB = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
7, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_E_RDB, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(e_rdb_class), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
156, // mPriority
|
|
&l_daE_RDB_Method, // sub_method
|
|
0x00044100, // mStatus
|
|
fopAc_ENEMY_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|