mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-17 21:03:35 -04:00
d61a31e7ab
Co-authored-by: < >
1097 lines
37 KiB
C++
1097 lines
37 KiB
C++
/**
|
|
* d_a_bwds.cpp
|
|
* Enemy - Molgera Larva
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/d_cc_uty.h"
|
|
#include "d/d_bg_s_gnd_chk.h"
|
|
#include "d/actor/d_a_bwds.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_s_play.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "res/Object/Bwds.h"
|
|
#include "res/Object/Bwd.h"
|
|
#include "d/actor/d_a_player.h"
|
|
|
|
enum Action {
|
|
ACTION_UG_MOVE = 0,
|
|
ACTION_HOOK_ON = 1,
|
|
ACTION_HOOK_CHANCE = 2,
|
|
ACTION_FAIL = 5,
|
|
};
|
|
|
|
static GXColor eff_col;
|
|
static u8 hio_set;
|
|
static daBwds_HIO_c l_HIO;
|
|
|
|
/* 000000EC-00000144 .text __ct__12daBwds_HIO_cFv */
|
|
daBwds_HIO_c::daBwds_HIO_c() {
|
|
mNo = -1;
|
|
m005 = 0;
|
|
m008 = 0.79999995f; // 0x3F4CCCCC
|
|
m00C = 0.7f;
|
|
m010 = 7.0f;
|
|
m014 = 220;
|
|
m018 = 2000.0f;
|
|
m01C = 300.0f;
|
|
}
|
|
|
|
/* 00000144-0000026C .text anm_init__FP10bwds_classifUcfi */
|
|
static void anm_init(bwds_class* i_this, int bckFileIdx, f32 morf, u8 loopMode, f32 speed, int soundFileIdx) {
|
|
if (soundFileIdx >= 0) {
|
|
i_this->mpMorf->setAnm(
|
|
(J3DAnmTransform*)dComIfG_getObjectRes("Bwds", bckFileIdx), loopMode, morf, speed, 0.0f, -1.0f, dComIfG_getObjectRes("Bwds", soundFileIdx)
|
|
);
|
|
} else {
|
|
i_this->mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Bwds", bckFileIdx), loopMode, morf, speed, 0.0f, -1.0f, NULL);
|
|
}
|
|
}
|
|
|
|
/* 0000026C-000002E8 .text body_draw__FP10bwds_class */
|
|
static void body_draw(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
J3DModel* model;
|
|
for (s32 i = 0; i < 0xd - i_this->m04F0; i++) {
|
|
model = i_this->mp02BC[i];
|
|
g_env_light.setLightTevColorType(model, &actor->tevStr);
|
|
mDoExt_modelUpdateDL(model);
|
|
}
|
|
}
|
|
|
|
/* 000002E8-000003E4 .text daBwds_Draw__FP10bwds_class */
|
|
static BOOL daBwds_Draw(bwds_class* i_this) {
|
|
cXyz fake; // Fixes function order
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
J3DModel* model = i_this->mpMorf->getModel();
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &actor->current.pos, &actor->tevStr);
|
|
g_env_light.setLightTevColorType(model, &actor->tevStr);
|
|
i_this->mpMorf->entryDL();
|
|
body_draw(i_this);
|
|
for (s32 i = 0; i < 0x2; i++) {
|
|
if (i_this->m1894[i] != 0) {
|
|
g_env_light.setLightTevColorType(i_this->mp18B0[i]->getModel(), &actor->tevStr);
|
|
i_this->mp18C0[i]->entry(i_this->mp18B0[i]->getModel()->getModelData());
|
|
i_this->mp18B8[i]->entry(i_this->mp18B0[i]->getModel()->getModelData());
|
|
i_this->mp18B0[i]->entryDL();
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000420-00000B5C .text body_control__FP10bwds_class */
|
|
static void body_control(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
|
|
f32 diff_x, diff_y, diff_z;
|
|
s32 i;
|
|
s16 sVar1, sVar2;
|
|
f32 fVar1 = 0.0f;
|
|
f32 fVar4;
|
|
J3DModel* model = i_this->mpMorf->getModel();
|
|
MTXCopy(model->getAnmMtx(KOBOSS_HEAD_JNT_HEAD_e), *calc_mtx);
|
|
cXyz vec1((REG0_F(0) + 60.0f) * l_HIO.m008, REG0_F(1), REG0_F(2));
|
|
cXyz vec2;
|
|
cXyz vec3;
|
|
MtxPosition(&vec1, &i_this->m032C[0]);
|
|
i_this->m03E0[0] = actor->shape_angle;
|
|
|
|
cXyz* p032c = &i_this->m032C[1];
|
|
csXyz* p03e0 = &i_this->m03E0[1];
|
|
cXyz* p043c = &i_this->m043C[1];
|
|
|
|
cMtx_YrotS(*calc_mtx, actor->shape_angle.y);
|
|
cMtx_XrotM(*calc_mtx, actor->shape_angle.x);
|
|
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
if (i_this->m04F5 != 0) {
|
|
vec1.z = (REG0_F(6) + -10.0f) * l_HIO.m008;
|
|
fVar1 = REG0_F(5) + 0.85f;
|
|
} else {
|
|
vec1.z = (REG0_F(17) + -5.0f) * l_HIO.m008;
|
|
}
|
|
|
|
MtxPosition(&vec1, &vec3);
|
|
if (i_this->m04F5 == 1) {
|
|
vec3.y += REG0_F(15) + -5.0f;
|
|
}
|
|
dBgS_GndChk gndChk;
|
|
for (i = 1; i < 0xf; i++, ++p032c, ++p03e0, ++p043c) {
|
|
f32 fVar2 = (0xe - i) * (REG0_F(17) + 0.5f) + 1.0f;
|
|
f32 fVar3 = p032c->y + p043c->y + vec3.y * fVar2;
|
|
if (i_this->m04F5 == 1) {
|
|
Vec pos;
|
|
pos = p032c[0];
|
|
pos.y += 200.0f;
|
|
gndChk.SetPos(&pos);
|
|
f32 dVar8 = dComIfG_Bgsp()->GroundCross(&gndChk) - 60.0f - 30.0f + REG0_F(16) + 100.0f + REG0_F(19);
|
|
if (fVar3 <= dVar8) {
|
|
fVar3 = dVar8;
|
|
}
|
|
}
|
|
diff_x = p043c->x + (p032c->x - p032c[-1].x) + vec3.x * fVar2;
|
|
diff_y = fVar3 - p032c[-1].y;
|
|
diff_z = p043c->z + (p032c->z - p032c[-1].z) + vec3.z * fVar2;
|
|
|
|
sVar2 = (s16)cM_atan2s(diff_x, diff_z);
|
|
sVar1 = -cM_atan2s(diff_y, std::sqrtf(diff_x * diff_x + diff_z * diff_z));
|
|
|
|
vec1.x = 0.0f;
|
|
vec1.y = 0.0f;
|
|
vec1.z = (REG0_F(7) + 70.0f) * l_HIO.m008;
|
|
|
|
cMtx_YrotS(*calc_mtx, sVar2);
|
|
cMtx_XrotM(*calc_mtx, sVar1);
|
|
|
|
MtxPosition(&vec1, &vec2);
|
|
|
|
p03e0[-1].y = sVar2;
|
|
p03e0[-1].x = sVar1 + 0x8000;
|
|
|
|
p043c->x = p032c->x;
|
|
p043c->y = p032c->y;
|
|
p043c->z = p032c->z;
|
|
p032c->x = p032c[-1].x + vec2.x;
|
|
p032c->y = p032c[-1].y + vec2.y;
|
|
p032c->z = p032c[-1].z + vec2.z;
|
|
p043c->x = fVar1 * (p032c->x - p043c->x);
|
|
p043c->y = fVar1 * (p032c->y - p043c->y);
|
|
p043c->z = fVar1 * (p032c->z - p043c->z);
|
|
|
|
if (i < 0xe) {
|
|
J3DModel* iVar5 = i_this->mp02BC[i - 1];
|
|
mDoMtx_stack_c::transS(p032c->x, p032c->y, p032c->z);
|
|
mDoMtx_stack_c::YrotM(p03e0->y);
|
|
mDoMtx_stack_c::XrotM(p03e0->x);
|
|
fVar4 = cM_ssin(i_this->m02F4 * (REG0_S(5) + 3500) + i * (REG0_S(6) + 10000)) * (0.1f + REG0_F(4)) + 1.0f;
|
|
f32 fVar5 = fVar4 * l_HIO.m008;
|
|
mDoMtx_stack_c::scaleM(fVar5, fVar5, l_HIO.m008);
|
|
iVar5->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
if (i >= 3) {
|
|
i_this->m0670[i].SetC(*p032c);
|
|
i_this->m0670[i].SetR((REG0_F(9) + 10.0f) * l_HIO.m008);
|
|
dComIfG_Ccsp()->Set(&i_this->m0670[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000EDC-00001004 .text easy_bg_check2__FP10bwds_class */
|
|
static void easy_bg_check2(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
cXyz local_54;
|
|
|
|
for (s32 i = 0; i < 0x14; i++) {
|
|
local_54.x = actor->current.pos.x;
|
|
local_54.y = actor->current.pos.y;
|
|
local_54.z = actor->current.pos.z;
|
|
local_54.y = 0.0f;
|
|
f32 fVar3 = local_54.abs();
|
|
|
|
if (!(fVar3 > 3800.0f)) {
|
|
break;
|
|
}
|
|
actor->current.pos.x *= 0.99f;
|
|
actor->current.pos.z *= 0.99f;
|
|
}
|
|
}
|
|
|
|
/* 00001004-00001198 .text pos_move__FP10bwds_classs */
|
|
static void pos_move(bwds_class* i_this, s16 param_2) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
cXyz local_2c;
|
|
cXyz local_38;
|
|
local_2c = i_this->m02FC - actor->current.pos;
|
|
cLib_addCalcAngleS2(&actor->current.angle.y, param_2 + cM_atan2s(local_2c.x, local_2c.z), REG0_S(3) + 5, i_this->m030C * i_this->m0310);
|
|
cLib_addCalc2(&i_this->m0310, 1.0f, 1.0f, 0.05f);
|
|
local_2c.x = 0.0f;
|
|
local_2c.y = 0.0f;
|
|
local_2c.z = actor->speedF;
|
|
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
|
|
MtxPosition(&local_2c, &local_38);
|
|
actor->speed.x = local_38.x;
|
|
actor->speed.z = local_38.z;
|
|
actor->current.pos += actor->speed;
|
|
i_this->actor.current.angle.x = -cM_atan2s(actor->speed.y, std::sqrtf(actor->speed.x * actor->speed.x + actor->speed.z * actor->speed.z));
|
|
}
|
|
|
|
/* 00001198-000019CC .text ug_move__FP10bwds_class */
|
|
static void ug_move(bwds_class* i_this) {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
cXyz local_34;
|
|
cXyz cStack_40;
|
|
s16 sVar5 = 0;
|
|
switch (i_this->m02F8) {
|
|
case -10:
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_PAKUPAKU_e, 2.0f, 2, 1.0f, -1);
|
|
i_this->m02F8 = 3;
|
|
i_this->m030C = REG0_F(3) + 3000.0f;
|
|
actor->speedF = l_HIO.m010;
|
|
actor->speed.y = REG0_F(13) + 60.0f + cM_rndF(20.0f);
|
|
actor->current.angle.y = cM_rndFX(32768.0f);
|
|
local_34.x = 0.0f;
|
|
local_34.y = 0.0f;
|
|
local_34.z = 2000.0f;
|
|
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
|
|
MtxPosition(&local_34, &cStack_40);
|
|
i_this->m02FC = actor->current.pos + cStack_40;
|
|
|
|
if (cM_rndF(1.0f) < 0.3535f) {
|
|
i_this->m0500 = 0;
|
|
} else {
|
|
i_this->m0500 = cM_rndFX(REG0_F(9) + 3000.0f);
|
|
}
|
|
fopAcM_seStart(actor, JA_SE_CM_BWD_C_JUMP_OUT, 0);
|
|
fopAcM_seStart(actor, JA_SE_CV_BWD_C_ATTACK, 0);
|
|
break;
|
|
case 0:
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_CLOSE_e, 2.0f, 0, 1.0f, -1);
|
|
actor->current.pos.y = i_this->m0504;
|
|
i_this->m02F8++;
|
|
actor->shape_angle.z = 0;
|
|
i_this->m181C = 1;
|
|
// FALL-THROUGH
|
|
case 1: {
|
|
actor->current.pos.y = i_this->m0504;
|
|
actor->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
|
|
i_this->m02FC = player->current.pos;
|
|
i_this->m030C = REG0_F(3) + 3000.0f;
|
|
actor->speedF = l_HIO.m010;
|
|
|
|
local_34 = i_this->m02FC - actor->current.pos;
|
|
|
|
f32 fVar8 = local_34.abs();
|
|
f32 fVar1 = fVar8 * 7.0f;
|
|
if (fVar1 > l_HIO.m018) {
|
|
fVar1 = l_HIO.m018;
|
|
}
|
|
sVar5 = fVar1 * cM_ssin(i_this->m02F4 * (REG0_S(3) + 0x514));
|
|
|
|
if (fVar8 < 600.0f + REG0_F(12)) {
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_PAKUPAKU_e, 2.0f, 2, 1.0f, -1);
|
|
i_this->m02F8++;
|
|
actor->speedF = l_HIO.m010;
|
|
actor->speed.y = REG0_F(13) + 50.0f;
|
|
actor->current.angle.y = fopAcM_searchActorAngleY(actor, dComIfGp_getPlayer(0));
|
|
local_34.x = 0.0f;
|
|
local_34.y = 0.0f;
|
|
local_34.z = 2000.0f;
|
|
cMtx_YrotS(*calc_mtx, actor->current.angle.y);
|
|
|
|
MtxPosition(&local_34, &cStack_40);
|
|
i_this->m02FC = actor->current.pos + cStack_40;
|
|
|
|
if (cM_rndF(1.0f) < 0.3535f) {
|
|
i_this->m0500 = 0;
|
|
} else {
|
|
i_this->m0500 = cM_rndFX(REG0_F(9) + 3000.0f);
|
|
}
|
|
fopAcM_seStart(actor, JA_SE_CM_BWD_C_JUMP_OUT, 0);
|
|
fopAcM_seStart(actor, JA_SE_CV_BWD_C_ATTACK, 0);
|
|
}
|
|
break;
|
|
}
|
|
case 2:
|
|
i_this->m0670[0].OnAtSetBit();
|
|
i_this->m0670[0].OnCoSetBit();
|
|
// FALL-THROUGH
|
|
case 3:
|
|
i_this->m02FB = 1;
|
|
actor->speed.y -= REG0_F(6) + 2.7f;
|
|
if (actor->current.pos.y <= i_this->m0504) {
|
|
i_this->m02F8 = 4;
|
|
actor->speedF = REG0_F(5) + 5.0f;
|
|
i_this->m0314[0] = REG0_S(3) + 0x23;
|
|
fopAcM_OffStatus(actor, 0);
|
|
actor->attention_info.flags = 0;
|
|
i_this->m04F5 = 2;
|
|
fopAcM_seStart(actor, JA_SE_CM_BWD_C_IN_SAND, 0);
|
|
}
|
|
break;
|
|
case 4:
|
|
i_this->m04F5 = 2;
|
|
actor->speed.y = REG0_F(8) + -20.0f;
|
|
if (i_this->m0314[0] == 0) {
|
|
i_this->m02F8 = 5;
|
|
actor->speed.y = 0.0f;
|
|
actor->speedF = l_HIO.m010;
|
|
i_this->m0314[0] = 0x1e;
|
|
|
|
i_this->m0314[1] = cM_rndF(50.0f) + 120.0f;
|
|
i_this->m0314[2] = cM_rndF(30.0f) + 30.0f;
|
|
}
|
|
break;
|
|
case 5:
|
|
actor->shape_angle.z = 0;
|
|
i_this->m0500 = 0;
|
|
if (i_this->m0314[0] == 0) {
|
|
actor->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
|
|
i_this->m0314[0] = cM_rndF(20.0f) + 20.0f;
|
|
i_this->m02FC.x = actor->current.pos.x;
|
|
i_this->m02FC.y = actor->current.pos.y;
|
|
i_this->m02FC.z = actor->current.pos.z;
|
|
|
|
i_this->m02FC.x += cM_rndFX(REG0_F(12) + 600.0f);
|
|
i_this->m02FC.z += cM_rndFX(REG0_F(12) + 600.0f);
|
|
}
|
|
if (i_this->m0314[2] == 0) {
|
|
i_this->m0314[2] = cM_rndF(60.0f) + 40.0f;
|
|
actor->speed.y = REG0_F(14) + 30.0f;
|
|
actor->current.pos.y += actor->speed.y;
|
|
}
|
|
actor->speed.y -= REG0_F(15) + 3.0f;
|
|
i_this->m030C = REG0_F(4) + 1000.0f;
|
|
actor->speedF = l_HIO.m010;
|
|
|
|
if (actor->current.pos.y <= i_this->m0504) {
|
|
actor->current.pos.y = i_this->m0504;
|
|
actor->speed.y = 0.0f;
|
|
if (i_this->m0314[1] == 0) {
|
|
i_this->m02F8 = 0;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
pos_move(i_this, sVar5);
|
|
if (actor->speed.y < 0.0f) {
|
|
actor->shape_angle.z += i_this->m0500;
|
|
}
|
|
}
|
|
|
|
/* 000019CC-00001B38 .text hook_on__FP10bwds_class */
|
|
static void hook_on(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
|
|
cXyz local_34;
|
|
i_this->m031E = 3;
|
|
switch (i_this->m02F8) {
|
|
case 0:
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_CLOSE_e, 2.0f, 0, 1.0f, -1);
|
|
i_this->m02F8++;
|
|
local_34 = player->eyePos - actor->eyePos;
|
|
|
|
actor->current.angle.y = cM_atan2s(local_34.x, local_34.z);
|
|
actor->current.angle.x = -cM_atan2s(local_34.y, std::sqrtf(local_34.x * local_34.x + local_34.z * local_34.z));
|
|
actor->speedF = 0.0f;
|
|
break;
|
|
case 1:
|
|
if (!fopAcM_CheckStatus(actor, fopAcStts_HOOK_CARRY_e)) {
|
|
i_this->m02F6 = ACTION_HOOK_CHANCE;
|
|
i_this->m02F8 = 0;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 00001B38-00001DCC .text hook_chance__FP10bwds_class */
|
|
static void hook_chance(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
i_this->m0670[0].OnCoSetBit();
|
|
switch (i_this->m02F8) {
|
|
case 0:
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_PAKUPAKU_e, 2.0f, 2, 1.0f, -1);
|
|
i_this->m02F8++;
|
|
i_this->m0314[0] = l_HIO.m014;
|
|
// FALL-THROUGH
|
|
case 1:
|
|
if (actor->current.pos.y <= i_this->m0504 + 100.0f + REG0_F(14)) {
|
|
actor->current.pos.y = i_this->m0504 + 100.0f + REG0_F(14);
|
|
|
|
actor->speed.y = REG6_F(7) + cM_rndF(REG0_F(6) + 40.0f);
|
|
actor->speed.x = cM_rndFX(REG0_F(8) + 5.0f);
|
|
actor->speed.z = cM_rndFX(REG0_F(8) + 5.0f);
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
i_this->m04FC = 0;
|
|
} else {
|
|
i_this->m04FC = REG0_S(5) + 0x7f00;
|
|
}
|
|
|
|
i_this->m0500 = cM_rndFX(32768.0f);
|
|
i_this->m0502 = cM_rndFX(REG0_F(5) + 2500.0f);
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_CLOSE_e, 5.0f, 0, 1.0f, -1);
|
|
} else {
|
|
anm_init(i_this, dRes_INDEX_BWDS_BCK_KOBOSS_PAKUPAKU_e, 5.0f, 2, 1.0f, -1);
|
|
}
|
|
}
|
|
}
|
|
if (i_this->m0314[0] == 0) {
|
|
i_this->m02F6 = ACTION_UG_MOVE;
|
|
i_this->m02F8 = 3;
|
|
}
|
|
break;
|
|
}
|
|
|
|
actor->current.angle.y += i_this->m0502;
|
|
cLib_addCalcAngleS2(&actor->shape_angle.z, i_this->m0500, 1, REG0_S(6) + 0x800);
|
|
cLib_addCalcAngleS2(&actor->current.angle.x, i_this->m04FC, 1, REG0_S(6) + 0x800);
|
|
i_this->m04F5 = 1;
|
|
actor->current.pos += actor->speed;
|
|
actor->speed.y -= (REG0_F(4) + 5.0f);
|
|
i_this->m02FB = 1;
|
|
}
|
|
|
|
/* 00001DCC-00002178 .text fail__FP10bwds_class */
|
|
static void fail(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
fopAc_ac_c* player = daPy_getPlayerActorClass();
|
|
|
|
i_this->m031E = 3;
|
|
i_this->m04F5 = 1;
|
|
switch (i_this->m02F8) {
|
|
case 0: {
|
|
cXyz local_34;
|
|
local_34.x = 0.0f;
|
|
local_34.y = REG0_F(19) + 60.0f;
|
|
local_34.z = REG0_F(20) + -30.0f;
|
|
player = daPy_getPlayerActorClass();
|
|
s16 angle = fopAcM_searchActorAngleY(actor, player);
|
|
cMtx_YrotS(*calc_mtx, angle);
|
|
MtxPosition(&local_34, &actor->speed);
|
|
i_this->m02F8++;
|
|
i_this->m0314[0] = REG0_S(4) + 10;
|
|
} // FALL-THROUGH
|
|
case 1:
|
|
if (i_this->m0314[0] == 0) {
|
|
i_this->m0314[0] = REG0_S(5) + 1;
|
|
cXyz local_40 = i_this->m032C[0xc - i_this->m04F0 + REG0_S(7)];
|
|
cXyz local_34;
|
|
local_34.x = 0.5f;
|
|
local_34.y = 0.5f;
|
|
local_34.z = 0.5f;
|
|
|
|
csXyz local_54(0, 0, 0);
|
|
local_54.x = cM_rndF(65536.0f);
|
|
local_54.y = cM_rndF(65536.0f);
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_BWK_SIBOUBAKUEN00, &local_40, &local_54, &local_34);
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_BWK_SIBOUFLASH00, &local_40, &local_54, &local_34);
|
|
i_this->m04F0++;
|
|
if (i_this->m04F0 >= REG0_S(8) + 0xd) {
|
|
i_this->m02F8++;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (actor->current.pos.y <= i_this->m0504 + 100.0f + REG0_F(14) + 5.0f) {
|
|
fopAcM_createDisappear(actor, &actor->current.pos, 10, daDisItem_HEART_e, -1);
|
|
fopAcM_delete(actor);
|
|
}
|
|
break;
|
|
}
|
|
actor->current.pos += actor->speed;
|
|
actor->speed.y -= REG0_F(4) + 5.0f;
|
|
|
|
if (actor->current.pos.y <= i_this->m0504 + 100.0f + REG0_F(14)) {
|
|
actor->current.pos.y = i_this->m0504 + 100.0f + REG0_F(14);
|
|
actor->speed.x = 0.0f;
|
|
actor->speed.y = 0.0f;
|
|
actor->speed.z = 0.0f;
|
|
} else {
|
|
actor->current.angle.y = cM_atan2s(actor->speed.x, actor->speed.z);
|
|
actor->current.angle.x = -cM_atan2s(actor->speed.y, std::sqrtf(actor->speed.x * actor->speed.x + actor->speed.z * actor->speed.z));
|
|
}
|
|
}
|
|
|
|
/* 000021B4-0000245C .text damage_check__FP10bwds_class */
|
|
static void damage_check(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
CcAtInfo local_2c;
|
|
cXyz local_38;
|
|
if (i_this->m031E == 0) {
|
|
if (fopAcM_CheckStatus(actor, fopAcStts_HOOK_CARRY_e)) {
|
|
local_38.x = 0.0f;
|
|
local_38.y = 0.0f;
|
|
local_38.z = 0.0f;
|
|
|
|
player->setHookshotCarryOffset(fopAcM_GetID(actor), &local_38);
|
|
i_this->m02F6 = ACTION_HOOK_ON;
|
|
i_this->m02F8 = 0;
|
|
i_this->m031E = 10;
|
|
fopAcM_seStart(actor, JA_SE_LK_HS_SPIKE, 0x20);
|
|
fopAcM_seStart(actor, JA_SE_CV_BWD_C_HS_DAMAGE, 0);
|
|
} else {
|
|
i_this->m0508.Move();
|
|
local_2c.pParticlePos = NULL;
|
|
if (i_this->m0670[0].ChkTgHit()) {
|
|
if (i_this->m02FB == 1) {
|
|
i_this->m031E = 6;
|
|
local_2c.mpObj = i_this->m0670[0].GetTgHitObj();
|
|
local_2c.pParticlePos = i_this->m0670[0].GetTgHitPosP();
|
|
cc_at_check(actor, &local_2c);
|
|
|
|
if (actor->health <= 0) {
|
|
i_this->m02F6 = ACTION_FAIL;
|
|
i_this->m02F8 = 0;
|
|
fopAcM_seStart(actor, JA_SE_CV_BWD_C_DIE, 0);
|
|
} else {
|
|
i_this->m0320 = REG0_F(11) + 80.0f;
|
|
i_this->m0328 = REG0_S(2) + 7;
|
|
fopAcM_seStart(actor, JA_SE_CV_BWD_C_DAMAGE, 0);
|
|
}
|
|
}
|
|
}
|
|
for (s32 i = 3; i < 0xf; i++) {
|
|
if (i_this->m0670[i].ChkTgHit()) {
|
|
def_se_set(actor, i_this->m0670[i].GetTgHitObj(), 0x40);
|
|
break;
|
|
}
|
|
}
|
|
if (i_this->m04F4 != 0) {
|
|
fopAcM_delete(actor);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 0000245C-00002590 .text move__FP10bwds_class */
|
|
static void move(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
cXyz local_1c;
|
|
cXyz cStack_28;
|
|
switch (i_this->m02F6) {
|
|
case 0:
|
|
ug_move(i_this);
|
|
break;
|
|
case 1:
|
|
hook_on(i_this);
|
|
break;
|
|
case 2:
|
|
hook_chance(i_this);
|
|
break;
|
|
case 5:
|
|
fail(i_this);
|
|
break;
|
|
}
|
|
|
|
if (actor->current.pos.y <= i_this->m0504 + 20.0f) {
|
|
i_this->m02FA = 1;
|
|
} else {
|
|
i_this->m02FA = 0;
|
|
}
|
|
damage_check(i_this);
|
|
i_this->m02FB = 0;
|
|
|
|
if (i_this->m0320 > 0.01f) {
|
|
local_1c.x = 0.0f;
|
|
local_1c.y = 0.0f;
|
|
local_1c.z = i_this->m0320;
|
|
cMtx_YrotS(*calc_mtx, i_this->m0324);
|
|
cMtx_XrotM(*calc_mtx, i_this->m0326);
|
|
MtxPosition(&local_1c, &cStack_28);
|
|
actor->current.pos += cStack_28;
|
|
cLib_addCalc0(&i_this->m0320, 1.0f, 7.0f);
|
|
}
|
|
}
|
|
|
|
/* 00002590-000031B4 .text daBwds_Execute__FP10bwds_class */
|
|
static BOOL daBwds_Execute(bwds_class* i_this) {
|
|
fopAc_ac_c* actor = &i_this->actor;
|
|
|
|
cXyz local_bc(0.0f, 0.0f, 0.0f);
|
|
cXyz cStack_c8;
|
|
|
|
i_this->m02F4++;
|
|
for (s32 i = 0; i < 5; i++) {
|
|
if (i_this->m0314[i] != 0) {
|
|
i_this->m0314[i]--;
|
|
}
|
|
}
|
|
if (i_this->m031E != 0) {
|
|
i_this->m031E--;
|
|
}
|
|
if (i_this->m0328 != 0) {
|
|
i_this->m0328--;
|
|
}
|
|
|
|
if (l_HIO.m005 == 0) {
|
|
i_this->m0670[0].OffAtSetBit();
|
|
i_this->m0670[0].OffCoSetBit();
|
|
move(i_this);
|
|
easy_bg_check2(i_this);
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
i_this->m1810.x = actor->current.pos.x;
|
|
i_this->m1810.z = actor->current.pos.z;
|
|
#endif
|
|
dBgS_GndChk gndChk;
|
|
Vec local_b0;
|
|
local_b0 = actor->current.pos;
|
|
local_b0.y += REG0_F(13) + 2500.0f;
|
|
gndChk.SetPos(&local_b0);
|
|
|
|
f32 fVar11 = dComIfG_Bgsp()->GroundCross(&gndChk);
|
|
if (fVar11 < 850.0f && fVar11 != -G_CM3D_F_INF) {
|
|
i_this->m1804.y = fVar11;
|
|
#if VERSION > VERSION_DEMO
|
|
i_this->m1810.y = fVar11;
|
|
#endif
|
|
i_this->m0504 = (s32)(((fVar11 - 60.0f) - 30.0f) + REG0_F(16));
|
|
}
|
|
|
|
i_this->mpMorf->play(&actor->eyePos, 0, 0);
|
|
}
|
|
|
|
actor->shape_angle.y = actor->current.angle.y;
|
|
actor->shape_angle.x = actor->current.angle.x;
|
|
J3DModel* pJVar8 = i_this->mpMorf->getModel();
|
|
mDoMtx_stack_c::transS(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z);
|
|
|
|
f32 fVar3 = i_this->m0328 * 500.0f;
|
|
s16 s1 = fVar3 * cM_ssin(i_this->m02F4 * 0x2100);
|
|
s16 s2 = fVar3 * cM_scos(i_this->m02F4 * 0x2300);
|
|
mDoMtx_stack_c::YrotM(actor->shape_angle.y + s1);
|
|
mDoMtx_stack_c::XrotM(actor->shape_angle.x + s2);
|
|
mDoMtx_stack_c::ZrotM(actor->shape_angle.z);
|
|
mDoMtx_stack_c::scaleM(l_HIO.m008, l_HIO.m008, l_HIO.m008);
|
|
|
|
pJVar8->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
i_this->mpMorf->calc();
|
|
MTXCopy(pJVar8->getAnmMtx(KOBOSS_HEAD_JNT_HEAD_e), *calc_mtx);
|
|
|
|
local_bc.set(REG0_F(0), REG0_F(1), REG0_F(2));
|
|
MtxPosition(&local_bc, &actor->eyePos);
|
|
|
|
if (i_this->m02FA != 0) {
|
|
actor->eyePos.y += 90.0f;
|
|
}
|
|
|
|
actor->attention_info.position.x = actor->eyePos.x;
|
|
actor->attention_info.position.y = actor->eyePos.y;
|
|
actor->attention_info.position.z = actor->eyePos.z;
|
|
actor->attention_info.position.y += 10.0f;
|
|
|
|
local_bc.set(REG0_F(0) + 50.0f, REG0_F(1), REG0_F(2));
|
|
MtxPosition(&local_bc, &cStack_c8);
|
|
i_this->m0670[0].SetC(cStack_c8);
|
|
if (i_this->m02FA != 0) {
|
|
cStack_c8.y += 60.0f;
|
|
i_this->m0670[0].SetR((REG0_F(11) + 40.0f) * l_HIO.m008);
|
|
} else {
|
|
if (i_this->m04F5 == 1) {
|
|
i_this->m0670[0].SetR((REG0_F(11) + 80.0f) * l_HIO.m008);
|
|
} else {
|
|
i_this->m0670[0].SetR((REG0_F(10) + 60.0f) * l_HIO.m008);
|
|
}
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&i_this->m0670[0]);
|
|
i_this->m0544.SetR(l_HIO.m01C * l_HIO.m008);
|
|
i_this->m0544.SetC(cStack_c8);
|
|
dComIfG_Ccsp()->Set(&i_this->m0544);
|
|
body_control(i_this);
|
|
i_this->m04F5 = 0;
|
|
|
|
local_bc.set(0.0f, 0.0f, 0.0f);
|
|
J3DModel* model;
|
|
for (s32 i = 0; i < 0xd - i_this->m04F0; i++) {
|
|
model = i_this->mp02BC[i];
|
|
MTXCopy(model->getBaseTRMtx(), *calc_mtx);
|
|
MtxPosition(&local_bc, &cStack_c8);
|
|
dComIfGp_particle_setSimple(dPa_name::ID_IT_SN_O_BWK_BODY_SUNA00, &cStack_c8);
|
|
}
|
|
|
|
if (i_this->m181C != 0) {
|
|
if (i_this->m181C == 1) {
|
|
i_this->m181C++;
|
|
i_this->m1820[0].remove();
|
|
#if VERSION > VERSION_DEMO
|
|
dComIfGp_particle_setToon(
|
|
dPa_name::ID_IT_ST_BWK_IDOU_MOKO00, &i_this->m1810, &actor->shape_angle, NULL, 0xFF, i_this->m1820, (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
i_this->m1820[0].setColor(eff_col);
|
|
dComIfGp_particle_set(
|
|
dPa_name::ID_IT_ST_BWK_IDOU_SUNA00, &i_this->m1810, &actor->shape_angle, NULL, 0xFF, &i_this->m1880, (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
#else
|
|
i_this->m1804.x = actor->current.pos.x;
|
|
i_this->m1804.z = actor->current.pos.z;
|
|
dComIfGp_particle_setToon(
|
|
dPa_name::ID_IT_ST_BWK_IDOU_MOKO00, &i_this->m1804, &actor->shape_angle, NULL, 0xFF, i_this->m1820, (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
i_this->m1820[0].setColor(eff_col);
|
|
dComIfGp_particle_set(
|
|
dPa_name::ID_IT_ST_BWK_IDOU_SUNA00, &i_this->m1804, &actor->shape_angle, NULL, 0xFF, &i_this->m1880, (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
#endif
|
|
}
|
|
if (i_this->m181C < 0 || actor->current.pos.y > i_this->m1804.y) {
|
|
i_this->m181C = 0;
|
|
i_this->m1820[0].remove();
|
|
i_this->m1880.remove();
|
|
}
|
|
if (i_this->m181C != 0) {
|
|
fopAcM_seStart(actor, JA_SE_CM_BWD_C_MOVE_SAND, 0);
|
|
}
|
|
}
|
|
|
|
if (i_this->m02F6 == 0) {
|
|
if (i_this->m181D == 0) {
|
|
if (actor->current.pos.y > i_this->m1804.y && actor->old.pos.y <= i_this->m1804.y) {
|
|
if (i_this->m1894[0] == 0) {
|
|
i_this->m1894[0] = 1;
|
|
i_this->m1898[0].x = actor->current.pos.x;
|
|
i_this->m1898[0].y = actor->current.pos.y;
|
|
i_this->m1898[0].z = actor->current.pos.z;
|
|
}
|
|
i_this->m181D = REG0_S(5) + 5;
|
|
i_this->m1804.x = actor->current.pos.x;
|
|
i_this->m1804.z = actor->current.pos.z;
|
|
i_this->m1820[1].remove();
|
|
dComIfGp_particle_setToon(
|
|
dPa_name::ID_IT_ST_BWK_OUT_SMOKE00, &i_this->m1804, NULL, NULL, eff_col.r, &i_this->m1820[1], (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
i_this->m1820[1].setColor(eff_col);
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_BWK_OUT_SUNA00, &i_this->m1804);
|
|
}
|
|
} else {
|
|
i_this->m181D--;
|
|
if (i_this->m181D == 0) {
|
|
i_this->m1820[1].remove();
|
|
}
|
|
}
|
|
|
|
if (i_this->m181E == 0) {
|
|
if (actor->current.pos.y < i_this->m1804.y && actor->old.pos.y >= i_this->m1804.y) {
|
|
if (i_this->m1894[1] == 0) {
|
|
i_this->m1894[1] = 1;
|
|
i_this->m1898[1].x = actor->current.pos.x;
|
|
i_this->m1898[1].y = actor->current.pos.y;
|
|
i_this->m1898[1].z = actor->current.pos.z;
|
|
}
|
|
i_this->m1820[2].remove();
|
|
i_this->m181E = REG0_S(5) + 5;
|
|
i_this->m1804.x = actor->current.pos.x;
|
|
i_this->m1804.z = actor->current.pos.z;
|
|
dComIfGp_particle_setToon(
|
|
dPa_name::ID_IT_ST_BWK_DIVE_SMOKE00, &i_this->m1804, NULL, NULL, eff_col.r, &i_this->m1820[2], (s16)fopAcM_GetRoomNo(actor)
|
|
);
|
|
i_this->m1820[2].setColor(eff_col);
|
|
dComIfGp_particle_set(dPa_name::ID_IT_SN_BWK_DIVE_SUNA00, &i_this->m1804);
|
|
}
|
|
} else {
|
|
i_this->m181E--;
|
|
if (i_this->m181E == 0) {
|
|
i_this->m1820[2].remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
for (s32 i = 0; i < 2; i++) {
|
|
if (i_this->m1894[i] != 0) {
|
|
f32 fVar14 = i_this->m1894[i] - 1.0f;
|
|
i_this->mp18B0[i]->setFrame(fVar14);
|
|
i_this->mp18B8[i]->setFrame(fVar14);
|
|
i_this->mp18C0[i]->setFrame(fVar14);
|
|
mDoMtx_stack_c::transS(i_this->m1898[i].x, i_this->m1898[i].y, i_this->m1898[i].z);
|
|
mDoMtx_stack_c::scaleM(l_HIO.m00C, l_HIO.m00C, l_HIO.m00C);
|
|
i_this->mp18B0[i]->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
i_this->mp18B0[i]->calc();
|
|
i_this->m1894[i]++;
|
|
if (i_this->m1894[i] > 60) {
|
|
i_this->m1894[i] = 0;
|
|
}
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000031B4-000031BC .text daBwds_IsDelete__FP10bwds_class */
|
|
static BOOL daBwds_IsDelete(bwds_class*) {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000031BC-00003278 .text daBwds_Delete__FP10bwds_class */
|
|
static BOOL daBwds_Delete(bwds_class* i_this) {
|
|
#if VERSION > VERSION_DEMO
|
|
dComIfG_resDelete(&i_this->m02AC, "Bwds");
|
|
#else
|
|
dComIfG_resDeleteDemo(&i_this->m02AC, "Bwds");
|
|
#endif
|
|
|
|
if (i_this->m18C8 != 0) {
|
|
hio_set = 0;
|
|
mDoHIO_deleteChild(l_HIO.mNo);
|
|
}
|
|
|
|
for (s32 i = 0; i < 3; i++) {
|
|
i_this->m1820[i].remove();
|
|
}
|
|
i_this->m1880.remove();
|
|
|
|
return TRUE;
|
|
}
|
|
static u16 body_bdl[] = {
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_BODY_e,
|
|
dRes_INDEX_BWDS_BDL_KOBOSS_SHIPPO_e,
|
|
};
|
|
|
|
/* 00003278-00003634 .text useHeapInit__FP10fopAc_ac_c */
|
|
static BOOL useHeapInit(fopAc_ac_c* i_actor) {
|
|
static u32 s_bdl[] = {
|
|
dRes_INDEX_BWD_BDL_GSP00_e,
|
|
dRes_INDEX_BWD_BDL_GSP01_e,
|
|
};
|
|
static u32 s_btk[] = {
|
|
dRes_INDEX_BWD_BTK_GSP00_e,
|
|
dRes_INDEX_BWD_BTK_GSP01_e,
|
|
};
|
|
static u32 s_brk[] = {
|
|
dRes_INDEX_BWD_BRK_GSP00_e,
|
|
dRes_INDEX_BWD_BRK_GSP01_e,
|
|
};
|
|
static u32 s_bck[] = {
|
|
dRes_INDEX_BWD_BCK_GSP00_e,
|
|
dRes_INDEX_BWD_BCK_GSP01_e,
|
|
};
|
|
J3DModelData* modelData;
|
|
J3DModel* model;
|
|
bwds_class* i_this = (bwds_class*)i_actor;
|
|
|
|
i_this->mpMorf = new mDoExt_McaMorf(
|
|
(J3DModelData*)dComIfG_getObjectRes("Bwds", dRes_INDEX_BWDS_BDL_KOBOSS_HEAD_e),
|
|
NULL,
|
|
NULL,
|
|
(J3DAnmTransformKey*)dComIfG_getObjectRes("Bwds", dRes_INDEX_BWDS_BCK_KOBOSS_CLOSE_e),
|
|
J3DFrameCtrl::EMode_NONE,
|
|
1.0f,
|
|
0,
|
|
-1,
|
|
1,
|
|
NULL,
|
|
0,
|
|
0x11020203
|
|
);
|
|
|
|
if (!i_this->mpMorf || !i_this->mpMorf->getModel()) {
|
|
return FALSE;
|
|
}
|
|
|
|
for (s32 i = 0; i < 0xd; i++) {
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes("Bwds", body_bdl[i]);
|
|
model = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
i_this->mp02BC[i] = model;
|
|
if (i_this->mp02BC[i] == NULL) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
for (s32 i = 0; i < 0x2; i++) {
|
|
i_this->mp18B0[i] = new mDoExt_McaMorf(
|
|
(J3DModelData*)dComIfG_getObjectRes("Bwd", s_bdl[i]),
|
|
NULL,
|
|
NULL,
|
|
(J3DAnmTransformKey*)dComIfG_getObjectRes("Bwd", s_bck[i]),
|
|
J3DFrameCtrl::EMode_LOOP,
|
|
1.0f,
|
|
0,
|
|
-1,
|
|
0,
|
|
NULL,
|
|
0,
|
|
0x11020203
|
|
);
|
|
|
|
if (!i_this->mp18B0[i] || !i_this->mp18B0[i]->getModel()) {
|
|
return FALSE;
|
|
}
|
|
modelData = i_this->mp18B0[i]->getModel()->getModelData();
|
|
i_this->mp18B8[i] = new mDoExt_btkAnm();
|
|
if (!i_this->mp18B8[i]) {
|
|
return FALSE;
|
|
}
|
|
|
|
int ret = i_this->mp18B8[i]->init(
|
|
modelData, (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Bwd", s_btk[i]), TRUE, J3DFrameCtrl::EMode_LOOP
|
|
);
|
|
|
|
if (!ret) {
|
|
return FALSE;
|
|
}
|
|
|
|
i_this->mp18C0[i] = new mDoExt_brkAnm();
|
|
|
|
ret = i_this->mp18C0[i]->init(
|
|
modelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("Bwd", s_brk[i]), TRUE, J3DFrameCtrl::EMode_LOOP
|
|
);
|
|
|
|
if (!ret) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000367C-000039A4 .text daBwds_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daBwds_Create(fopAc_ac_c* a_this) {
|
|
static dCcD_SrcSph cc_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_UNK800,
|
|
/* SrcObjAt Atp */ 2,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL & ~AT_TYPE_WATER & ~AT_TYPE_HOOKSHOT & ~AT_TYPE_UNK20000 & ~AT_TYPE_WIND & ~AT_TYPE_UNK400000 & ~AT_TYPE_LIGHT,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsGrpAll_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 */ dCcG_TgSPrm_NoConHit_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 15.0f,
|
|
}},
|
|
};
|
|
static dCcD_SrcSph body_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_HOOKSHOT & ~AT_TYPE_UNK20000 & ~AT_TYPE_WIND & ~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 */ dCcG_SE_METAL,
|
|
/* SrcGObjTg HitMark */ dCcg_TgHitMark_Purple_e,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_NoConHit_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 15.0f,
|
|
}},
|
|
};
|
|
static dCcD_SrcSph hs_sph_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_HOOKSHOT,
|
|
/* 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 */ 15.0f,
|
|
}},
|
|
};
|
|
|
|
bwds_class* i_this = (bwds_class*)a_this;
|
|
fopAcM_ct(&i_this->actor, bwds_class);
|
|
|
|
cPhs_State res = dComIfG_resLoad(&i_this->m02AC, "Bwds");
|
|
if (res == cPhs_COMPLEATE_e) {
|
|
i_this->m02B4 = fopAcM_GetParam(a_this);
|
|
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x4B000)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
if (hio_set == 0) {
|
|
i_this->m18C8 = 1;
|
|
hio_set = 1;
|
|
l_HIO.mNo = mDoHIO_createChild("風ボス(子)", &l_HIO); // "Wind Boss (Child)"
|
|
}
|
|
a_this->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
|
|
a_this->attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 0x4;
|
|
a_this->health = 4;
|
|
a_this->max_health = 4;
|
|
i_this->m0508.Init(0xFA, 0, a_this);
|
|
i_this->m0544.Set(hs_sph_src);
|
|
i_this->m0544.SetStts(&i_this->m0508);
|
|
|
|
for (s32 i = 0; i < 0xf; i++) {
|
|
i_this->m0670[i].SetStts(&i_this->m0508);
|
|
if (i == 0) {
|
|
i_this->m0670[i].Set(cc_sph_src);
|
|
} else {
|
|
i_this->m0670[i].Set(body_sph_src);
|
|
}
|
|
i_this->m032C[i].x = a_this->current.pos.x;
|
|
i_this->m032C[i].y = a_this->current.pos.y;
|
|
i_this->m032C[i].z = a_this->current.pos.z;
|
|
}
|
|
if (i_this->m02B4 == 0x23) {
|
|
i_this->m02F8 = -10;
|
|
}
|
|
|
|
eff_col.r = 0xa0;
|
|
eff_col.g = 0xa0;
|
|
eff_col.b = 0x80;
|
|
eff_col.a = 0x96;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
static actor_method_class l_daBwds_Method = {
|
|
(process_method_func)daBwds_Create,
|
|
(process_method_func)daBwds_Delete,
|
|
(process_method_func)daBwds_Execute,
|
|
(process_method_func)daBwds_IsDelete,
|
|
(process_method_func)daBwds_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_BWDS = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_BWDS_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(bwds_class),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_BWDS_e,
|
|
/* Actor SubMtd */ &l_daBwds_Method,
|
|
/* Status */ fopAcStts_UNK40000_e | fopAcStts_UNK80000_e,
|
|
/* Group */ fopAc_ENEMY_e,
|
|
/* Cull Type */ fopAc_CULLBOX_0_e,
|
|
};
|