mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 06:54:28 -04:00
850fae1aa3
* m_Do_main / f_ap_game debug stuff * revolution sdk compatibility * f_op_actor debug work * rename fopAcM_SetupActor to fopAcM_ct * fix build * fix jp/pal splits
553 lines
19 KiB
C++
553 lines
19 KiB
C++
/**
|
|
* @file d_a_obj_bhashi.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
|
|
#include "d/actor/d_a_obj_bhashi.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/actor/d_a_b_mgn.h"
|
|
#include "d/d_s_play.h"
|
|
|
|
/* 80576A58-80576AC4 000078 006C+00 1/1 0/0 0/0 .text initCcCylinder__13daObjBHASHI_cFv
|
|
*/
|
|
void daObjBHASHI_c::initCcCylinder() {
|
|
const static dCcD_SrcCyl ccCylSrc = {
|
|
{
|
|
{0x0, {{0x0, 0x0, 0x0}, {0x100000, 0x1f}, 0x0}}, // mObj
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
|
|
{dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x2}, // mGObjTg
|
|
{0x0}, // mGObjCo
|
|
}, // mObjInf
|
|
{
|
|
{0.0f, 0.0f, 0.0f}, // mCenter
|
|
300.0f, // mRadius
|
|
2200.0f // mHeight
|
|
} // mCyl
|
|
};
|
|
|
|
mCcStts.Init(0xFF, 0xFF, this);
|
|
mCcCyl.Set(ccCylSrc);
|
|
mCcCyl.SetStts(&mCcStts);
|
|
mCcCyl.SetC(current.pos);
|
|
mCcCyl.OnTgShield();
|
|
}
|
|
|
|
/* 80576AC4-80576B34 0000E4 0070+00 1/1 0/0 0/0 .text setCcCylinder__13daObjBHASHI_cFv */
|
|
void daObjBHASHI_c::setCcCylinder() {
|
|
cXyz pos;
|
|
pos = current.pos;
|
|
pos.y += -1100.0f;
|
|
mCcCyl.SetC(pos);
|
|
dComIfG_Ccsp()->Set(&mCcCyl);
|
|
}
|
|
|
|
/* 80576B34-80576B54 000154 0020+00 1/0 0/0 0/0 .text daObjBHASHI_Create__FP10fopAc_ac_c
|
|
*/
|
|
static int daObjBHASHI_Create(fopAc_ac_c* i_this) {
|
|
return ((daObjBHASHI_c*)i_this)->create();
|
|
}
|
|
|
|
/* 80576B54-80576B78 000174 0024+00 1/0 0/0 0/0 .text daObjBHASHI_Delete__FP13daObjBHASHI_c */
|
|
static int daObjBHASHI_Delete(daObjBHASHI_c* i_this) {
|
|
i_this->MoveBGDelete();
|
|
return 1;
|
|
}
|
|
|
|
/* 80576B78-80576C50 000198 00D8+00 2/2 0/0 0/0 .text Set_Hahen__13daObjBHASHI_cFv */
|
|
void daObjBHASHI_c::Set_Hahen() {
|
|
csXyz sp8(0, 0, 0);
|
|
|
|
if (mMode == 0) {
|
|
cXyz sp10(current.pos.x, current.pos.y - 1100.0f, current.pos.z);
|
|
sp8.y = field_0x11dc;
|
|
Set_Speed(0, 60, 50.0f, 50.0f);
|
|
mMode = 2;
|
|
field_0x11e0 = 1000;
|
|
|
|
if (mpBgW != NULL && mpBgW->ChkUsed() && dComIfG_Bgsp().Release(mpBgW)) {
|
|
OS_REPORT("Release Error\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80576C50-805771EC 000270 059C+00 1/1 0/0 0/0 .text Set_Speed__13daObjBHASHI_cFssff */
|
|
void daObjBHASHI_c::Set_Speed(s16 param_0, s16 i_hahenNum, f32 param_2, f32 param_3) {
|
|
csXyz sp24;
|
|
f32 var_f31;
|
|
f32 var_f30;
|
|
s16 rot_y;
|
|
|
|
for (int i = param_0; i < i_hahenNum - 40; i++) {
|
|
mHahen[i].pos.set(current.pos.x + cM_rndFX(80.0f),
|
|
350.0f + (current.pos.y - 1100.0f) + cM_rndFX(350.0f),
|
|
current.pos.z + cM_rndFX(80.0f));
|
|
|
|
mHahen[i].scale.set((1.0f + XREG_F(0)) * (2.0f + cM_rndF(5.5f)),
|
|
(1.0f + XREG_F(0)) * (3.1f + cM_rndF(4.5f)),
|
|
(1.0f + XREG_F(0)) * (2.5f + cM_rndF(5.5f)));
|
|
|
|
var_f30 = nREG_F(1) + (60.0f + (param_2 + cM_rndFX(param_3)));
|
|
var_f31 = 30.0f + cM_rndFX(30.0f + nREG_F(2));
|
|
rot_y = nREG_S(0) + (field_0x11dc + (s16)cM_rndFX(8192.0f));
|
|
|
|
mHahen[i].speed.set(0.0f, 0.0f, var_f31);
|
|
mDoMtx_stack_c::YrotS(rot_y);
|
|
mDoMtx_stack_c::multVec(&mHahen[i].speed, &mHahen[i].speed);
|
|
mHahen[i].speed.y = var_f31;
|
|
|
|
mHahen[i].rot_speed.x = cM_rndFX(15000.0f);
|
|
mHahen[i].rot_speed.y = cM_rndFX(15000.0f);
|
|
mHahen[i].rotation.x = cM_rndFX(65536.0f);
|
|
mHahen[i].rotation.y = cM_rndFX(65536.0f);
|
|
}
|
|
|
|
for (int i = i_hahenNum - 40; i < i_hahenNum - 20; i++) {
|
|
mHahen[i].pos.set(current.pos.x + cM_rndFX(80.0f),
|
|
1050.0f + (current.pos.y - 1100.0f) + cM_rndFX(350.0f),
|
|
current.pos.z + cM_rndFX(80.0f));
|
|
|
|
mHahen[i].scale.set((1.0f + XREG_F(0)) * (2.0f + cM_rndF(5.5f)),
|
|
(1.0f + XREG_F(0)) * (3.1f + cM_rndF(4.5f)),
|
|
(1.0f + XREG_F(0)) * (2.5f + cM_rndF(5.5f)));
|
|
|
|
var_f30 = nREG_F(3) + (50.0f + cM_rndFX(60.0f));
|
|
var_f31 = nREG_F(4) + (10.0f + cM_rndFX(20.0f));
|
|
rot_y = nREG_S(0) + (field_0x11dc + (s16)cM_rndFX(8192.0f));
|
|
|
|
mHahen[i].speed.set(0.0f, 0.0f, var_f31);
|
|
mDoMtx_stack_c::YrotS(rot_y);
|
|
mDoMtx_stack_c::multVec(&mHahen[i].speed, &mHahen[i].speed);
|
|
mHahen[i].speed.y = var_f31;
|
|
|
|
mHahen[i].rot_speed.x = cM_rndFX(15000.0f);
|
|
mHahen[i].rot_speed.y = cM_rndFX(15000.0f);
|
|
mHahen[i].rotation.x = cM_rndFX(65536.0f);
|
|
mHahen[i].rotation.y = cM_rndFX(65536.0f);
|
|
}
|
|
|
|
for (int i = i_hahenNum - 20; i < i_hahenNum; i++) {
|
|
mHahen[i].pos.set(current.pos.x + cM_rndFX(80.0f),
|
|
1750.0f + (current.pos.y - 1100.0f) + cM_rndFX(350.0f),
|
|
current.pos.z + cM_rndFX(80.0f));
|
|
|
|
mHahen[i].scale.set(2.0f + cM_rndF(5.5f),
|
|
3.1f + cM_rndF(4.5f),
|
|
2.5f + cM_rndF(5.5f));
|
|
|
|
var_f30 = nREG_F(3) + (20.0f + cM_rndFX(20.0f));
|
|
var_f31 = nREG_F(4) + (10.0f + cM_rndFX(20.0f));
|
|
rot_y = (s16)cM_rndFX(32000.0f);
|
|
|
|
f32 var_f29 = var_f30 * cM_ssin(rot_y);
|
|
f32 var_f28 = var_f31 + gravity;
|
|
f32 var_f27 = var_f30 * cM_scos(rot_y);
|
|
|
|
mHahen[i].speed.set(var_f29, var_f28, var_f27);
|
|
|
|
mHahen[i].rot_speed.x = cM_rndFX(15000.0f);
|
|
mHahen[i].rot_speed.y = cM_rndFX(15000.0f);
|
|
mHahen[i].rotation.x = cM_rndFX(65536.0f);
|
|
mHahen[i].rotation.y = cM_rndFX(65536.0f);
|
|
}
|
|
}
|
|
|
|
/* 805771EC-80577500 00080C 0314+00 1/1 0/0 0/0 .text Obj_Damage__13daObjBHASHI_cFv */
|
|
void daObjBHASHI_c::Obj_Damage() {
|
|
if (mDamageTimer == 0) {
|
|
mCcStts.Move();
|
|
|
|
if (mCcCyl.ChkTgHit()) {
|
|
cXyz& player_pos = fopAcM_GetPosition(daPy_getPlayerActorClass());
|
|
mDamageTimer = 10;
|
|
|
|
fopAc_ac_c* tg_hit_obj = dCc_GetAc(mCcCyl.GetTgHitObj()->GetAc());
|
|
cXyz* tg_hit_pos = mCcCyl.GetTgHitPosP();
|
|
s16 rot_y = cLib_targetAngleY(¤t.pos, tg_hit_pos);
|
|
if (fopAcM_GetName(tg_hit_obj) == PROC_B_MGN) {
|
|
field_0x5a8++;
|
|
|
|
fpc_ProcID tg_hit_id = fopAcM_GetID(tg_hit_obj);
|
|
fopAc_ac_c* mgn_p;
|
|
if (fopAcM_SearchByName(PROC_B_MGN, &mgn_p) && mgn_p != NULL) {
|
|
field_0x11dc = cLib_targetAngleY(&fopAcM_GetPosition(mgn_p), ¤t.pos);
|
|
}
|
|
|
|
Z2GetAudioMgr()->seStart(Z2SE_OBJ_MGN_BREAK_PILLAR, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
Set_Hahen();
|
|
dComIfGp_getVibration().StartShock(7, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
|
|
if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
|
|
dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
csXyz eff_rot(0, rot_y, 0);
|
|
cXyz eff_pos(current.pos.x, current.pos.y - 1100.0f, current.pos.z);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_A), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_B), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_C), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_D), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
}
|
|
|
|
mCcCyl.ResetTgHit();
|
|
fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80577500-80577794 000B20 0294+00 0/0 0/0 1/1 .text Obj_Damage__13daObjBHASHI_cF4cXyz
|
|
*/
|
|
void daObjBHASHI_c::Obj_Damage(cXyz param_0) {
|
|
field_0x11dc = cLib_targetAngleY(¶m_0, ¤t.pos);
|
|
|
|
Z2GetAudioMgr()->seStart(Z2SE_OBJ_MGN_BREAK_PILLAR, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
Set_Hahen();
|
|
dComIfGp_getVibration().StartShock(7, 1, cXyz(0.0f, 1.0f, 0.0f));
|
|
|
|
if (mSwbit != 0xFF && !dComIfGs_isSwitch(mSwbit, fopAcM_GetRoomNo(this))) {
|
|
dComIfGs_onSwitch(mSwbit, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
csXyz eff_rot(0, field_0x11dc, 0);
|
|
cXyz eff_pos(current.pos.x, current.pos.y - 1100.0f, current.pos.z);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_A), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_B), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_C), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
dComIfGp_particle_set(dPa_RM(ID_ZI_S_LV9PILLAR_BREAK_D), &eff_pos, &tevStr, &eff_rot, NULL);
|
|
|
|
fopAcM_OffStatus(this, fopAcM_STATUS_UNK_0x100);
|
|
}
|
|
|
|
/* 80577794-805777A4 000DB4 0010+00 1/1 0/0 0/0 .text __ct__7Hahen_cFv */
|
|
Hahen_c::Hahen_c() {
|
|
field_0x31 = 0;
|
|
status = 0;
|
|
}
|
|
|
|
/* 805777A4-80577868 000DC4 00C4+00 1/1 0/0 0/0 .text Wall_Check__7Hahen_cFv */
|
|
void Hahen_c::Wall_Check() {
|
|
dBgS_LinChk line_chk;
|
|
cXyz end_pos(pos.x + speed.x, pos.y, pos.z + speed.z);
|
|
cXyz start_pos(pos.x, pos.y, pos.z);
|
|
|
|
line_chk.Set(&start_pos, &end_pos, NULL);
|
|
if (dComIfG_Bgsp().LineCross(&line_chk) == true) {
|
|
speed.x = -(0.05f + nREG_F(18)) * speed.x;
|
|
speed.z = -(0.05f + nREG_F(18)) * speed.z;
|
|
}
|
|
}
|
|
|
|
/* 80577868-80577C1C 000E88 03B4+00 1/1 0/0 0/0 .text HahenMotion__7Hahen_cFv */
|
|
void Hahen_c::HahenMotion() {
|
|
if (status == 0) {
|
|
f32 temp_f31 = 5.0f + nREG_F(16);
|
|
Wall_Check();
|
|
|
|
if (pos.y >= 10.0f + temp_f31) {
|
|
speed.y += -9.0f;
|
|
|
|
pos.x += speed.x;
|
|
pos.y += speed.y;
|
|
pos.z += speed.z;
|
|
|
|
rotation.x += rot_speed.x;
|
|
rotation.y += rot_speed.y;
|
|
}
|
|
|
|
if (pos.y < 10.0f + temp_f31) {
|
|
f32 temp_f30 = speed.y;
|
|
pos.y = 10.0f + temp_f31;
|
|
|
|
speed.y = temp_f30 * -(1.0f - (scale.abs() / (15.0f + XREG_F(10))));
|
|
speed.x *= 0.7f + cM_rndF(0.3f);
|
|
speed.z *= 0.7f + cM_rndF(0.3f);
|
|
|
|
if (speed.y < 4.0f) {
|
|
status = 1;
|
|
}
|
|
|
|
rot_speed.x = cM_rndFX(5000.0f);
|
|
rot_speed.y = cM_rndFX(5000.0f);
|
|
}
|
|
} else if (status == 1) {
|
|
if (field_0x31 != 0) {
|
|
status = 2;
|
|
}
|
|
|
|
if (CheckCull()) {
|
|
status = 2;
|
|
|
|
if (scale.abs() > 8.0f + XREG_F(11)) {
|
|
scale *= 0.6f + XREG_F(9);
|
|
}
|
|
|
|
field_0x31 = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80577C1C-80577DA4 00123C 0188+00 1/1 0/0 0/0 .text CheckCull__7Hahen_cFv */
|
|
bool Hahen_c::CheckCull() {
|
|
if (pos.absXZ(fopAcM_GetPosition(daPy_getPlayerActorClass())) > 1000.0f && !checkViewArea()) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 80577DA4-80577E24 0013C4 0080+00 1/1 0/0 0/0 .text checkViewArea__7Hahen_cFv */
|
|
bool Hahen_c::checkViewArea() {
|
|
Vec proj;
|
|
mDoLib_project(&pos, &proj);
|
|
return (proj.x >= -50.0f && proj.x <= 658.0f) && (proj.y >= -50.0f && proj.y <= 498.0f);
|
|
}
|
|
|
|
/* 80577E24-80577FE0 001444 01BC+00 1/1 0/0 0/0 .text Rolling__13daObjBHASHI_cFP4cXyzff
|
|
*/
|
|
void daObjBHASHI_c::Rolling(cXyz* i_pos, f32 i_range, f32 param_2) {
|
|
fopAcM_GetPosition(daPy_getPlayerActorClass());
|
|
if (mMode == 2) {
|
|
for (s16 i = 0; i < 60; i++) {
|
|
if (i_pos->abs(mHahen[i].pos) < i_range) {
|
|
mHahen[i].Roll_Set(i_pos, param_2, i);
|
|
mHahen[i].status = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 80577FE0-805781FC 001600 021C+00 1/1 0/0 0/0 .text Roll_Set__7Hahen_cFP4cXyzfs */
|
|
void Hahen_c::Roll_Set(cXyz* i_pos, f32 param_1, s16 i_no) {
|
|
f32 temp_f30 = param_1 * (2.0f + nREG_F(10) + cM_rndFX(0.2f));
|
|
s16 angle = cLib_targetAngleY(&pos, i_pos);
|
|
|
|
f32 speed_x = (-1.0f + nREG_F(12)) * param_1 * cM_ssin(angle);
|
|
f32 temp_f31 = scale.abs();
|
|
temp_f31 = 3.0f / temp_f31;
|
|
|
|
f32 speed_y = temp_f30 - 9.0f;
|
|
f32 speed_z = (-1.0f + nREG_F(13)) * param_1 * cM_scos(angle);
|
|
|
|
speed.set(temp_f31 * speed_x, temp_f31 * speed_y, temp_f31 * speed_z);
|
|
|
|
rot_speed.x = cM_rndFX(5000.0f + nREG_F(6));
|
|
rot_speed.y = cM_rndFX(5000.0f + nREG_F(6));
|
|
rotation.x += (s16)0x1000;
|
|
rotation.y += (s16)0x1000;
|
|
}
|
|
|
|
/* 805781FC-805782E4 00181C 00E8+00 1/1 0/0 0/0 .text setBaseMtx__13daObjBHASHI_cFv */
|
|
void daObjBHASHI_c::setBaseMtx() {
|
|
if (mMode == 2) {
|
|
for (s16 i = 0; i < 60; i++) {
|
|
mDoMtx_stack_c::transS(mHahen[i].pos);
|
|
mDoMtx_stack_c::ZXYrotM(mHahen[i].rotation);
|
|
mDoMtx_stack_c::scaleM(mHahen[i].scale);
|
|
mpHahenMdls[i]->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
} else {
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
mpPillarMdl->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
mDoMtx_stack_c::transM(0.0f, -1100.0f + yREG_F(10), 0.0f);
|
|
cMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
|
|
}
|
|
|
|
/* 805782E4-80578310 001904 002C+00 1/0 0/0 0/0 .text daObjBHASHI_Draw__FP13daObjBHASHI_c
|
|
*/
|
|
static int daObjBHASHI_Draw(daObjBHASHI_c* i_this) {
|
|
return i_this->MoveBGDraw();
|
|
}
|
|
|
|
/* 80578310-80578330 001930 0020+00 2/1 0/0 0/0 .text daObjBHASHI_Execute__FP13daObjBHASHI_c */
|
|
static int daObjBHASHI_Execute(daObjBHASHI_c* i_this) {
|
|
return i_this->MoveBGExecute();
|
|
}
|
|
|
|
/* 80578BF0-80578BF4 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
|
|
static char* l_arcName = "B_Hashi";
|
|
|
|
/* 80578330-8057842C 001950 00FC+00 1/0 0/0 0/0 .text CreateHeap__13daObjBHASHI_cFv */
|
|
int daObjBHASHI_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "Lv9_R07_pillar.bmd");
|
|
JUT_ASSERT(98, modelData != NULL);
|
|
|
|
J3DModelData* modelData2 = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "Lv9_R07_pillar_hahen.bmd");
|
|
JUT_ASSERT(102, modelData2 != NULL);
|
|
|
|
for (int i = 0; i < 60; i++) {
|
|
mpHahenMdls[i] = mDoExt_J3DModel__create(modelData2, J3DMdlFlag_UseSharedDL, BMD_DEFAULT_DIFF_FLAGS);
|
|
if (mpHahenMdls[i] == NULL) {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
mpPillarMdl = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, BMD_DEFAULT_DIFF_FLAGS);
|
|
if (mpPillarMdl == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 8057842C-805786B4 001A4C 0288+00 1/1 0/0 0/0 .text create__13daObjBHASHI_cFv */
|
|
int daObjBHASHI_c::create() {
|
|
fopAcM_ct(this, daObjBHASHI_c);
|
|
|
|
int phase_state = dComIfG_resLoad(&mPhase, l_arcName);
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
gravity = -9.0f + nREG_F(0);
|
|
|
|
int dzb_id = dComIfG_getObjctResName2Index(l_arcName, "Lv9_R07_pillar.dzb");
|
|
if (dzb_id == -1) {
|
|
// "dzb data not found!<%s>"
|
|
OS_REPORT("dzbデータが見つかりませんでした!<%s>\n\n", l_arcName);
|
|
}
|
|
|
|
JUT_ASSERT(1192, dzb_id != -1);
|
|
phase_state = MoveBGCreate(l_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, 0x8DA0, NULL);
|
|
if (phase_state == cPhs_ERROR_e) {
|
|
return phase_state;
|
|
}
|
|
|
|
initCcCylinder();
|
|
mMode = 0;
|
|
fopAcM_SetMtx(this, mpPillarMdl->getBaseTRMtx());
|
|
|
|
cXyz sp8(current.pos.x, 100.0f + current.pos.y, current.pos.z);
|
|
if (fopAcM_gc_c::gndCheck(&sp8)) {
|
|
current.pos.y = fopAcM_gc_c::getGroundY();
|
|
current.pos.y += 1100.0f;
|
|
}
|
|
|
|
fopAcM_setCullSizeBox(this, -500.0f, 0.0f, -500.0f, 500.0f, 3000.0f, 500.0f);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "Lv9_R07_pillar_hahen.bmd");
|
|
JUT_ASSERT(1219, modelData != NULL);
|
|
|
|
if (dComIfGp_addSimpleModel(modelData, fopAcM_GetRoomNo(this), 0) == -1) {
|
|
// "Fire Demon Room Pillar Fragment: simple model entry failed."
|
|
OS_REPORT("\x1B[43;30m火魔神部屋の柱の破片:シンプルモデル登録失敗しました。\n\x1B[m");
|
|
}
|
|
|
|
mIsHahenSimpleEntry = TRUE;
|
|
daObjBHASHI_Execute(this);
|
|
}
|
|
|
|
return phase_state;
|
|
}
|
|
|
|
/* 80578780-80578788 001DA0 0008+00 1/0 0/0 0/0 .text daObjBHASHI_IsDelete__FP13daObjBHASHI_c */
|
|
static int daObjBHASHI_IsDelete(daObjBHASHI_c* i_this) {
|
|
return 1;
|
|
}
|
|
|
|
/* 80578788-805787CC 001DA8 0044+00 1/0 0/0 0/0 .text Create__13daObjBHASHI_cFv */
|
|
int daObjBHASHI_c::Create() {
|
|
fopAcM_setCullSizeBox(this, -1000.0f, -500.0f, -1000.0f, 1000.0f, 500.0f, 1000.0f);
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 805787CC-805788EC 001DEC 0120+00 1/0 0/0 0/0 .text Execute__13daObjBHASHI_cFPPA3_A4_f
|
|
*/
|
|
int daObjBHASHI_c::Execute(Mtx** param_0) {
|
|
if (mMode != 2) {
|
|
Obj_Damage();
|
|
}
|
|
|
|
if (mMode == 2) {
|
|
fopAcM_GetPosition(daPy_getPlayerActorClass());
|
|
|
|
field_0x11e0--;
|
|
if (field_0x11e0 <= 0) {
|
|
field_0x11e0 = 0;
|
|
}
|
|
|
|
for (s16 i = 0; i < 60; i++) {
|
|
mHahen[i].HahenMotion();
|
|
}
|
|
|
|
fopAc_ac_c* mgn_p;
|
|
if (fopAcM_SearchByName(PROC_B_MGN, &mgn_p) && mgn_p != NULL && ((daB_MGN_c*)mgn_p)->isAppear()) {
|
|
Rolling(&fopAcM_GetPosition(mgn_p), 400.0f, 90.0f + yREG_F(0));
|
|
}
|
|
}
|
|
|
|
*param_0 = &mBgMtx;
|
|
setBaseMtx();
|
|
|
|
if (mMode != 2) {
|
|
setCcCylinder();
|
|
}
|
|
|
|
if (mDamageTimer != 0) {
|
|
mDamageTimer--;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 805788EC-805789E8 001F0C 00FC+00 1/0 0/0 0/0 .text Draw__13daObjBHASHI_cFv */
|
|
int daObjBHASHI_c::Draw() {
|
|
g_env_light.settingTevStruct(8, ¤t.pos, &tevStr);
|
|
|
|
if (mMode == 0) {
|
|
g_env_light.setLightTevColorType_MAJI(mpPillarMdl, &tevStr);
|
|
}
|
|
|
|
dComIfGd_setListBG();
|
|
|
|
if (mMode == 0) {
|
|
mDoExt_modelUpdateDL(mpPillarMdl);
|
|
} else {
|
|
int roomNo = fopAcM_GetRoomNo(this);
|
|
for (int i = 0; i < 60; i++) {
|
|
dComIfGp_entrySimpleModel(mpHahenMdls[i], roomNo);
|
|
}
|
|
}
|
|
|
|
dComIfGd_setList();
|
|
return 1;
|
|
}
|
|
|
|
/* 805789E8-80578A80 002008 0098+00 1/0 0/0 0/0 .text Delete__13daObjBHASHI_cFv */
|
|
int daObjBHASHI_c::Delete() {
|
|
if (mIsHahenSimpleEntry) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "Lv9_R07_pillar_hahen.bmd");
|
|
dComIfGp_removeSimpleModel(modelData, fopAcM_GetRoomNo(this));
|
|
}
|
|
|
|
dComIfG_resDelete(&mPhase, l_arcName);
|
|
return 1;
|
|
}
|
|
|
|
/* 80578BF4-80578C14 -00001 0020+00 1/0 0/0 0/0 .data l_daObjBHASHI_Method */
|
|
static actor_method_class l_daObjBHASHI_Method = {
|
|
(process_method_func)daObjBHASHI_Create,
|
|
(process_method_func)daObjBHASHI_Delete,
|
|
(process_method_func)daObjBHASHI_Execute,
|
|
(process_method_func)daObjBHASHI_IsDelete,
|
|
(process_method_func)daObjBHASHI_Draw,
|
|
};
|
|
|
|
/* 80578C14-80578C44 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_BHASHI */
|
|
extern actor_process_profile_definition g_profile_Obj_BHASHI = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
3, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_Obj_BHASHI, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daObjBHASHI_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
463, // mPriority
|
|
&l_daObjBHASHI_Method, // sub_method
|
|
0x00044000, // mStatus
|
|
fopAc_ACTOR_e, // mActorType
|
|
fopAc_CULLBOX_CUSTOM_e, // cullType
|
|
};
|