Files
tww/src/d/actor/d_a_obj_barrel2.cpp
T
2026-03-20 16:02:41 -04:00

1153 lines
34 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_obj_barrel2.cpp
//
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_barrel2.h"
#include "d/actor/d_a_obj_buoyflag.h"
#include "d/actor/d_a_race_item.h"
#include "d/actor/d_a_sea.h"
#include "d/actor/d_a_ship.h"
#include "d/d_com_inf_game.h"
#include "d/d_priority.h"
#include "d/d_procname.h"
#include "f_op/f_op_camera_mng.h"
#include "f_op/f_op_kankyo_mng.h"
daRaceItem_c* daObjBarrel2::Act_c::M_tmp_item_actor;
const char daObjBarrel2::Act_c::M_arcname[] = "Ktaru_00";
const char daObjBarrel2::Act_c::M_evname_brk[] = "barrel2_brk";
const dCcD_SrcCyl daObjBarrel2::Act_c::M_cyl_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ AT_TYPE_ALL & ~AT_TYPE_BOOMERANG & ~AT_TYPE_WATER & ~AT_TYPE_UNK20000 & ~AT_TYPE_WIND & ~AT_TYPE_UNK400000 & ~AT_TYPE_LIGHT,
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsOther_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_Shield_e,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGCylS
{{
/* Center */ {0.0f, 0.0f, 0.0f},
/* Radius */ 50.0f,
/* Height */ 100.0f,
}},
};
const daObjBarrel2::Attr_c daObjBarrel2::Act_c::M_attr[] = {
{
/* m00 */ 0x5,
/* m02 */ 0x9,
/* m04 */ 0x520,
/* m08 */ 200.0f,
/* m0C */ 300.0f,
/* m10 */ 800.0f,
/* m14 */ 100.0f,
/* m18 */ 50.0f,
/* m1C */ 0.01f,
/* m20 */ 4.0f,
/* m24 */ 1.0f,
/* m28 */ 3.0f,
/* m2C */ 1.0f,
/* m30 */ 500.0f,
/* m34 */ 300.0f,
/* m38 */ 25.0f,
/* m3C */ 0.0f,
/* m40 */ 0.0f,
/* m44 */ 0.0f,
/* m48 */ 0.0f,
/* m4C */ 0.0f,
/* m50 */ 0.55f,
/* m54 */ 0.5f,
/* m58 */ 0x3E8,
/* m5C */ 0.3f,
/* m60 */ 0.02f,
/* m64 */ 0.04f,
/* m68 */ 0.35f,
/* m6C */ 1.0f,
/* m70 */ 1.0f,
},
{
/* m00 */ 0x5,
/* m02 */ 0x9,
/* m04 */ 0x520,
/* m08 */ 200.0f,
/* m0C */ 400.0f,
/* m10 */ 300.0f,
/* m14 */ 100.0f,
/* m18 */ 50.0f,
/* m1C */ 0.01f,
/* m20 */ 4.0f,
/* m24 */ 1.0f,
/* m28 */ 3.0f,
/* m2C */ 1.0f,
/* m30 */ 450.0f,
/* m34 */ 300.0f,
/* m38 */ 25.0f,
/* m3C */ 0.0f,
/* m40 */ 0.0f,
/* m44 */ 0.0f,
/* m48 */ 0.0f,
/* m4C */ 0.0f,
/* m50 */ 0.75f,
/* m54 */ 0.5f,
/* m58 */ 0x3E8,
/* m5C */ 0.3f,
/* m60 */ 0.02f,
/* m64 */ 0.04f,
/* m68 */ 0.35f,
/* m6C */ 1.0f,
/* m70 */ 1.0f,
},
{
/* m00 */ 0x4,
/* m02 */ 0x8,
/* m04 */ 0x880,
/* m08 */ 288.0f,
/* m0C */ 432.0f,
/* m10 */ 4500.0f,
/* m14 */ 100.0f,
/* m18 */ 50.0f,
/* m1C */ 0.01f,
/* m20 */ 5.76f,
/* m24 */ 1.0f,
/* m28 */ 3.0f,
/* m2C */ 1.0f,
/* m30 */ 500.0f,
/* m34 */ 300.0f,
/* m38 */ 25.0f,
/* m3C */ 400.0f,
/* m40 */ 7500.0f,
/* m44 */ 900.0f,
/* m48 */ 700.0f,
/* m4C */ 250.0f,
/* m50 */ 0.3f,
/* m54 */ 0.5f,
/* m58 */ 0x3E8,
/* m5C */ 0.3f,
/* m60 */ 0.02f,
/* m64 */ 0.04f,
/* m68 */ 0.35f,
/* m6C */ 5.0f,
/* m70 */ 1.0f,
},
{
/* m00 */ 0x5,
/* m02 */ 0x9,
/* m04 */ DEMO_SELECT(0x12A0, 0x520),
/* m08 */ 288.0f,
/* m0C */ 576.0f,
/* m10 */ 800.0f,
/* m14 */ 100.0f,
/* m18 */ 50.0f,
/* m1C */ 0.01f,
/* m20 */ 5.76f,
/* m24 */ 1.0f,
/* m28 */ 3.0f,
/* m2C */ 1.0f,
/* m30 */ 500.0f,
/* m34 */ 300.0f,
/* m38 */ 25.0f,
/* m3C */ 0.0f,
/* m40 */ 0.0f,
/* m44 */ 0.0f,
/* m48 */ 0.0f,
/* m4C */ 0.0f,
/* m50 */ 0.55f,
/* m54 */ 0.5f,
/* m58 */ 0x3E8,
/* m5C */ 0.3f,
/* m60 */ 0.02f,
/* m64 */ 0.04f,
/* m68 */ 0.35f,
/* m6C */ 1.0f,
/* m70 */ 1.0f,
},
};
/* 000000EC-00000110 .text solidHeapCB__Q212daObjBarrel25Act_cFP10fopAc_ac_c */
BOOL daObjBarrel2::Act_c::solidHeapCB(fopAc_ac_c* a_this) {
return ((daObjBarrel2::Act_c*)a_this)->create_heap();
}
/* 00000110-000002C0 .text create_heap__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::create_heap() {
J3DModelData* mdl_data;
bool uVar6 = false;
mdl_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, attr()->m00);
JUT_ASSERT(533, mdl_data != NULL);
m298 = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000022);
J3DAnmTevRegKey* brk_data = (J3DAnmTevRegKey*)dComIfG_getObjectRes(M_arcname, attr()->m02);
JUT_ASSERT(543, brk_data != NULL);
m29C = new mDoExt_brkAnm();
s32 iVar5 = 0;
if (m29C != NULL) {
iVar5 = m29C->init(mdl_data, brk_data, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, 0);
}
if (m298 != NULL && iVar5 != 0) {
uVar6 = true;
}
return uVar6;
}
/* 00000308-0000089C .text _create__Q212daObjBarrel25Act_cFv */
cPhs_State daObjBarrel2::Act_c::_create() {
fopAcM_SetupActor(this, daObjBarrel2::Act_c);
m410 = prm_get_type();
cPhs_State ret = dComIfG_resLoad(&mPhase, daObjBarrel2::Act_c::M_arcname);
if (ret == cPhs_COMPLEATE_e) {
if (fopAcM_entrySolidHeap(this, solidHeapCB, attr()->m04)) {
fopAcM_SetMtx(this, m298->getBaseTRMtx());
mStts.Init(200, 0xFF, this);
mCyl.Set(daObjBarrel2::Act_c::M_cyl_src);
mCyl.SetStts(&mStts);
mCyl.SetR(attr()->m08);
mCyl.SetH(attr()->m0C);
mCyl.SetTgHitCallback(tg_hitCB);
mCyl.SetCoHitCallback(co_hitCB);
gbaName = 0x3d;
if (m410 == 3) {
fopAcM_OffStatus(this, fopAcStts_CULL_e | fopAcStts_NOCULLEXEC_e);
}
if (prm_get_coming()) {
m450 = -(attr()->m18 * attr()->m20 * attr()->m24) - 50.0f;
if (m410 == 2) {
m440 = cM_rndFX(1.0f);
m444 = cM_rndFX(1.0f);
} else {
m440 = 0.0f;
m444 = 0.0f;
}
m448 = 0.0f;
m44C = 0.0f;
} else {
m450 = 0.0f;
m440 = 0.0f;
m444 = 0.0f;
m448 = 0.0f;
m44C = 0.0f;
}
m434 = 0.0f;
m438 = 0.0f;
m42C = 0.0f;
m430 = 0.0f;
set_water_pos();
set_pos_y();
attention_info.position.x = current.pos.x;
attention_info.position.y = current.pos.y + attr()->m18 * attr()->m20 * attr()->m24;
attention_info.position.z = current.pos.z;
eyePos = attention_info.position;
fopAcM_setCullSizeSphere(this, 0.0f, attr()->m18 * attr()->m24 * attr()->m20, 0.0f, 300.0f);
cXyz sp30 = current.pos;
cXyz sp24;
csXyz sp10(0, home.angle.y, 0);
sp24.setall(attr()->m28 * attr()->m2C);
m458 =
fopAcM_createRaceItemFromTable(&sp30, prm_get_itemNo(), prm_get_itemSave(), fopAcM_GetHomeRoomNo(this), &sp10, &sp24, prm_get_coming() ? 1 : 0);
m45C = 3.4028235e+38f;
m468 = 0;
m470 = 0;
m460 = fpcM_ERROR_PROCESS_ID_e;
if (prm_get_buoy() == 0) {
cXyz sp18(current.pos.x, current.pos.y + attr()->m24 * attr()->m20 * (attr()->m14 - 5.0f), current.pos.z);
if (m410 == 2 || m410 == 3) {
bool flag = m410 == 3;
m460 = daObjBuoyflag::Act_c::make_barrel2_mine(fopAcM_GetID(this), &sp18, fopAcM_GetRoomNo(this), &shape_angle, prm_get_texture(), flag);
} else {
m460 = daObjBuoyflag::Act_c::make_barrel2_norm(fopAcM_GetID(this), &sp18, fopAcM_GetRoomNo(this), &shape_angle, prm_get_texture());
}
}
init_mtx();
m46A = dComIfGp_getStartStagePoint();
mode_afl_init();
} else {
ret = cPhs_ERROR_e;
}
}
return ret;
}
/* 00000AB0-00000AE0 .text _delete__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::_delete() {
dComIfG_resDeleteDemo(&mPhase, M_arcname);
return TRUE;
}
/* 00000AE0-00000B2C .text tg_hitCB__Q212daObjBarrel25Act_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daObjBarrel2::Act_c::tg_hitCB(fopAc_ac_c* a_this, dCcD_GObjInf* arg2, fopAc_ac_c*, dCcD_GObjInf*) {
daObjBarrel2::Act_c* i_this = (daObjBarrel2::Act_c*)a_this;
cCcD_Obj* pcVar1 = arg2->GetTgHitObj();
if (pcVar1 != NULL && pcVar1->ChkAtType(AT_TYPE_BOMB)) {
i_this->m470 = 3;
}
}
/* 00000B2C-00000C9C .text co_hitCB__Q212daObjBarrel25Act_cFP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daObjBarrel2::Act_c::co_hitCB(fopAc_ac_c* a_this, dCcD_GObjInf*, fopAc_ac_c* a_ship, dCcD_GObjInf*) {
daObjBarrel2::Act_c* i_this = (daObjBarrel2::Act_c*)a_this;
if (fopAcM_GetProfName(a_ship) == PROC_SHIP) {
daShip_c* ship = (daShip_c*)a_ship;
const s32 index = i_this->m410;
if (index == 0) {
if (ship->speedF > i_this->attr()->m38) {
cXyz sp14(ship->current.pos.x - i_this->current.pos.x, 0.0f, ship->current.pos.z - i_this->current.pos.z);
cXyz sp08(ship->speed.x, 0.0f, ship->speed.z);
f32 sq = SQUARE(i_this->attr()->m3C);
if (sp14.inprod(sp08) < sq) {
i_this->m470 = 1;
ship->onCrashFlg();
} else if (i_this->m46D == 0) {
ship->onShortHitFlg();
i_this->m454 = -60.0f;
i_this->m46D = 0x14;
fopAcM_seStart(i_this, JA_SE_OBJ_COL_SHIP_BARREL_N, 0);
}
}
} else {
i_this->m470 = 2;
}
}
}
/* 00000C9C-00000CFC .text cull_set_draw__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::cull_set_draw() {
fopAcM_setCullSizeSphere(this, 0.0f, attr()->m18 * attr()->m24 * attr()->m20, 0.0f, attr()->m24 * 75.0f * attr()->m20);
}
/* 00000CFC-00000D54 .text cull_set_move__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::cull_set_move() {
fopAcM_setCullSizeSphere(this, 0.0f, attr()->m18 * attr()->m24 * attr()->m20, 0.0f, attr()->m10);
}
/* 00000D54-00000DA0 .text demo_mode_chk__Q212daObjBarrel25Act_cCFv */
bool daObjBarrel2::Act_c::demo_mode_chk() const {
return m40C == 5 || m40C == 6 || m40C == 7 || m40C == 8 || m40C == 1 || m40C == 2 || m40C == 3;
}
/* 00000DA0-00000DAC .text mode_afl_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_afl_init() {
m40C = 0;
}
/* 00000DAC-00000FE4 .text mode_afl__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_afl() {
if (prm_get_coming()) {
if (m450 > 0.0f) {
m454 += m450 * -0.02f;
} else {
m454 += m450 * -0.01f;
}
m454 *= 0.92f;
m450 += m454;
if (m450 > attr()->m14 * 0.6f) {
m450 = attr()->m14 * 0.6f;
}
} else {
m454 += m450 * -0.01f;
m454 *= 0.94f;
m450 += m454;
if (m450 > attr()->m14 * 0.2f) {
m450 = attr()->m14 * 0.2f;
}
}
m43C += (s32)(attr()->m58 * (cM_rnd() + 1.0f));
set_pos_y();
f32 x = current.pos.x - home.pos.x;
f32 z = current.pos.z - home.pos.z;
m414 += x * -0.002f;
m418 += z * -0.002f;
m414 *= 0.9f;
m418 *= 0.9f;
current.pos.x += m414 + mStts.GetCCMoveP()->x;
current.pos.z += m418 + mStts.GetCCMoveP()->z;
afl_sway();
set_item_position();
return true;
}
/* 00000FE4-00001004 .text mode_exit_v_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_exit_v_init() {
m454 = 30.0f;
m464 = 4;
m40C = 1;
}
/* 00001004-000010D8 .text mode_exit_v__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_exit_v() {
m454 -= 5.0f;
m454 *= 0.96f;
m450 += m454;
set_pos_y();
set_item_position();
if (m450 > -(attr()->m18 * attr()->m20 * attr()->m24) - attr()->m30) {
return true;
}
item_drop_init(0.0f);
buoy_jump(0.0f);
return false;
}
/* 000010D8-000010F0 .text mode_exit_h_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_exit_h_init() {
m454 = 30.0f;
m40C = 2;
}
/* 000010F0-000011C4 .text mode_exit_h__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_exit_h() {
m454 -= 5.0f;
m454 *= 0.94f;
m450 += m454;
set_pos_y();
set_item_position();
if (m450 > -(attr()->m18 * attr()->m20 * attr()->m24) - attr()->m30) {
return true;
}
item_drop_init(0.0f);
buoy_jump(0.0f);
return false;
}
/* 000011C4-000011DC .text mode_exit_mine_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_exit_mine_init() {
m454 = 40.0f;
m40C = 3;
}
/* 000011DC-000012B0 .text mode_exit_mine__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_exit_mine() {
m454 -= 5.0f;
m454 *= 0.94f;
m450 += m454;
set_pos_y();
set_item_position();
if (m450 > -(attr()->m18 * attr()->m20 * attr()->m24) - 50.0f) {
return true;
}
item_drop_init(0.0f);
buoy_jump(0.0f);
return false;
}
/* 000012B0-00001318 .text mode_explode_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_explode_init() {
m464 = 0x1e;
eff_explode();
buoy_jump(300.0f);
item_drop_init(130.0f);
#if VERSION > VERSION_DEMO
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
#endif
m40C = 4;
}
/* 00001318-0000143C .text mode_explode__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_explode() {
if (--m464 >= 0) {
m454 += m450 * -0.01f;
m454 *= 0.94f;
m450 += m454;
if (m450 > attr()->m14 * 0.2f) {
m450 = attr()->m14 * 0.2f;
}
m43C += (s32)(attr()->m58 * (cM_rnd() + 1.0f));
set_pos_y();
item_drop();
return true;
}
item_drop();
return false;
}
/* 0000143C-00001484 .text mode_demo_break0_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_demo_break0_init() {
mCyl.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
m40C = 5;
m464 = 1;
eff_break();
}
/* 00001484-00001568 .text mode_demo_break0__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_demo_break0() {
bool uVar3 = true;
if (dComIfGp_evmng_existence(M_evname_brk)) {
if (eventInfo.checkCommandDemoAccrpt()) {
item_give();
mode_demo_break1_init();
} else if (--m464 >= 0) {
fopAcM_orderOtherEvent(this, const_cast<char*>(M_evname_brk));
eventInfo.onCondition(dEvtCnd_UNK2_e);
} else {
item_give();
uVar3 = false;
}
} else {
item_give();
uVar3 = false;
}
return uVar3;
}
/* 00001568-00001574 .text mode_demo_break1_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_demo_break1_init() {
m40C = 6;
}
/* 00001574-000015D0 .text mode_demo_break1__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_demo_break1() {
if (dComIfGp_evmng_endCheck(M_evname_brk)) {
dComIfGp_event_reset();
return false;
}
return true;
}
/* 000015D0-000015FC .text mode_demo_explode0_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_demo_explode0_init() {
mCyl.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
m40C = 7;
m464 = 2;
}
/* 000015FC-000016D8 .text mode_demo_explode0__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_demo_explode0() {
bool uVar2 = true;
item_drop();
if (dComIfGp_evmng_existence(M_evname_brk)) {
if (eventInfo.checkCommandDemoAccrpt()) {
mode_demo_explode1_init();
} else {
m464--;
if (m464 == 0) {
fopAcM_orderOtherEvent(this, const_cast<char*>(M_evname_brk));
eventInfo.onCondition(dEvtCnd_UNK2_e);
} else if (m464 < 0) {
uVar2 = false;
}
}
} else {
uVar2 = false;
}
return uVar2;
}
/* 000016D8-000016E4 .text mode_demo_explode1_init__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::mode_demo_explode1_init() {
m40C = 8;
}
/* 000016E4-00001744 .text mode_demo_explode1__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_demo_explode1() {
item_drop();
if (dComIfGp_evmng_endCheck(M_evname_brk)) {
dComIfGp_event_reset();
return false;
}
return true;
}
/* 00001744-00001898 .text mode_proc_call__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mode_proc_call() {
typedef bool (daObjBarrel2::Act_c::*modeProcFunc)();
static modeProcFunc mode_proc[] = {
&daObjBarrel2::Act_c::mode_afl,
&daObjBarrel2::Act_c::mode_exit_v,
&daObjBarrel2::Act_c::mode_exit_h,
&daObjBarrel2::Act_c::mode_exit_mine,
&daObjBarrel2::Act_c::mode_explode,
&daObjBarrel2::Act_c::mode_demo_break0,
&daObjBarrel2::Act_c::mode_demo_break1,
&daObjBarrel2::Act_c::mode_demo_explode0,
&daObjBarrel2::Act_c::mode_demo_explode1,
};
set_water_pos();
return (this->*mode_proc[m40C])();
}
/* 00001898-00001914 .text set_pos_y__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::set_pos_y() {
current.pos.y = m41C + m450 + (attr()->m50 * -attr()->m14 + attr()->m54 * cM_ssin(m43C)) * attr()->m20 * attr()->m24;
}
/* 00001914-00001BDC .text set_mtx__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::set_mtx() {
#if VERSION == VERSION_DEMO
bool bVar3 = (m410 == 0) || (m410 == 2) || (m410 == 3);
#else
bool bVar3 = true;
bool bVar2 = false;
const s32 idx = m410;
if ((idx == 0) || (idx == 2)) {
bVar2 = true;
}
if ((!bVar2) && (idx != 3)) {
bVar3 = false;
}
#endif
f32 fVar1 = attr()->m24 * attr()->m20;
cXyz sp4C = scale * fVar1;
daObjBuoyflag::Act_c* buoy;
if (m460 == fpcM_ERROR_PROCESS_ID_e) {
buoy = NULL;
} else {
buoy = (daObjBuoyflag::Act_c*)fopAcM_SearchByID(m460);
}
m298->setBaseScale(sp4C);
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
cXyz sp40(m440, 1.0f, m444);
mDoMtx_stack_c::transM(0.0f, fVar1 * attr()->m18, 0.0f);
Quaternion sp30;
daObj::quat_rotBaseY(&sp30, sp40);
mDoMtx_stack_c::quatM(&sp30);
mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, (bVar3) ? shape_angle.z : shape_angle.z + 0x4000);
mDoMtx_stack_c::transM(0.0f, fVar1 * -attr()->m18, 0.0f);
m298->setBaseTRMtx(mDoMtx_stack_c::get());
cMtx_copy(mDoMtx_stack_c::get(), m478);
if (buoy != NULL) {
cXyz sp24;
if (bVar3) {
sp24.set(0.0f, fVar1 * (attr()->m14 - 5.0f), 0.0f);
} else {
mDoMtx_stack_c::ZrotM(-0x4000);
sp24.set(fVar1 * -attr()->m18, fVar1 * 45.0f, 0.0f);
}
cXyz sp18;
cMtx_multVecSR(mDoMtx_stack_c::get(), &sp24, &sp18);
mDoMtx_stack_c::get()[0][3] += sp18.x;
mDoMtx_stack_c::get()[1][3] += sp18.y;
mDoMtx_stack_c::get()[2][3] += sp18.z;
cMtx_copy(mDoMtx_stack_c::get(), buoy->m1090);
}
}
/* 00001BDC-00001BFC .text init_mtx__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::init_mtx() {
set_mtx();
}
/* 00001BFC-00001DA8 .text eff_break__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::eff_break() {
cXyz sp20;
cXyz sp2C;
fopAcM_seStart(this, JA_SE_OBJ_COL_SHIP_BARREL, 0);
f32 tmp = attr()->m24 * attr()->m20;
sp20.set(current.pos.x, current.pos.y + attr()->m14 * attr()->m50 * tmp, current.pos.z);
sp2C.setall(tmp);
dComIfGp_particle_set(dPa_name::ID_IT_JN_TR2_SHIBUKI_B, &sp20, NULL, &sp2C);
dComIfGp_particle_set(dPa_name::ID_IT_JN_TR2_SHIBUKI_A, &sp20, NULL, &sp2C);
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_IT_JN_TR_HAHEN_B, &sp20, NULL, &sp2C, 0xFF, NULL, -1, &tevStr.mColorK0, &tevStr.mColorK0);
if (emitter != NULL) {
emitter->setLifeTime(30);
emitter->setAwayFromAxisSpeed(5.0f);
emitter->setDirectionalSpeed(25.0f);
}
}
/* 00001DA8-00002008 .text eff_explode__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::eff_explode() {
cXyz sp20;
cXyz sp2C;
f32 tmp = attr()->m24 * attr()->m20;
sp20.set(current.pos.x, current.pos.y + attr()->m14 * attr()->m50 * tmp, current.pos.z);
sp2C.setall(tmp);
fopAcM_seStart(this, JA_SE_OBJ_BARREL_BOMB, 0);
camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
csXyz sp18;
sp18.x = -fopCamM_GetAngleX(camera);
sp18.y = fopCamM_GetAngleY(camera) - -0x8000;
sp18.z = 0;
dComIfGp_particle_set(dPa_name::ID_IT_JN_BMEX_SENKO, &sp20, &sp18, &sp2C);
dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, &sp20, NULL, &sp2C);
fopKyM_createWpillar(&current.pos, attr()->m6C, attr()->m70, 1);
dComIfGp_particle_setToon(dPa_name::ID_IT_JT_WATERSMOKE00, &sp20, NULL, &sp2C);
dComIfGp_particle_set(dPa_name::ID_IT_JN_MIZUSHIBUKI_A, &sp20, NULL, &sp2C);
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_IT_JN_TR_HAHEN_B, &sp20, NULL, &sp2C);
if (emitter != NULL) {
emitter->setLifeTime(40);
emitter->setAwayFromAxisSpeed(10.0f);
emitter->setDirectionalSpeed(25.0f);
emitter->setSpread(0.4f);
}
}
/* 00002008-00002100 .text set_item_position__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::set_item_position() {
daRaceItem_c* raceItem = (daRaceItem_c*)M_tmp_item_actor;
if (raceItem != NULL) {
if (m46C != 0) {
cXyz sp08(current.pos.x, current.pos.y + attr()->m30, current.pos.z);
raceItem->set_mtx(&sp08);
} else {
raceItem->current.pos.x = current.pos.x;
raceItem->current.pos.y = current.pos.y + attr()->m30;
raceItem->current.pos.z = current.pos.z;
raceItem->speed.y = 0.0f;
}
raceItem->startOffsetPos();
m45C = fopAcM_searchPlayerDistance2(raceItem);
} else {
m45C = 3.4028235e+38f;
}
}
/* 00002100-000021B4 .text item_drop_init__Q212daObjBarrel25Act_cFf */
void daObjBarrel2::Act_c::item_drop_init(float arg1) {
daRaceItem_c* raceItem = (daRaceItem_c*)M_tmp_item_actor;
if (raceItem != NULL) {
cXyz sp08;
sp08.setall(attr()->m28 * attr()->m2C);
raceItem->endOffsetPos(-7.0f, &sp08, arg1, 0.0f, (csXyz*)&csXyz::Zero);
m45C = fopAcM_searchPlayerDistance2(raceItem);
} else {
m45C = 3.4028235e+38f;
}
}
/* 000021B4-00002214 .text item_drop__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::item_drop() {
if (M_tmp_item_actor != NULL) {
m45C = fopAcM_searchPlayerDistance2(M_tmp_item_actor);
} else {
m45C = 3.4028235e+38f;
}
}
/* 00002214-00002248 .text item_delete__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::item_delete() {
if (M_tmp_item_actor != NULL) {
fopAcM_delete(M_tmp_item_actor);
}
}
/* 00002248-000022A4 .text item_give__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::item_give() {
if (M_tmp_item_actor != NULL) {
M_tmp_item_actor->raceItemForceGet();
m458 = fpcM_ERROR_PROCESS_ID_e;
m476 = 1;
M_tmp_item_actor = NULL;
}
}
/* 000022A4-0000233C .text item_connect_check__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::item_connect_check() {
M_tmp_item_actor = NULL;
if (m458 != fpcM_ERROR_PROCESS_ID_e) {
fopAc_ac_c* pRaceitem;
if (fopAcM_SearchByID(m458, &pRaceitem)) {
daRaceItem_c* raceitem = (daRaceItem_c*)pRaceitem;
if (raceitem != NULL) {
if (raceitem->checkOffsetPos()) {
M_tmp_item_actor = raceitem;
} else {
m458 = fpcM_ERROR_PROCESS_ID_e;
}
}
} else {
m458 = fpcM_ERROR_PROCESS_ID_e;
}
}
}
/* 0000233C-00002414 .text buoy_jump__Q212daObjBarrel25Act_cFf */
void daObjBarrel2::Act_c::buoy_jump(float speed) {
if (m460 != fpcM_ERROR_PROCESS_ID_e) {
daObjBuoyflag::Act_c* buoy = (daObjBuoyflag::Act_c*)fopAcM_SearchByID(m460);
if (buoy != NULL) {
s16 rnd = cM_rndFX(32768.0f);
buoy->speed.y = speed;
buoy->speedF = 50.0f;
buoy->current.angle.y = rnd;
cMtx_copy(buoy->m1090, buoy->m10F0);
fopAcM_OffStatus(buoy, fopAcStts_NOCULLEXEC_e);
buoy->m10F0[0][3] = 0.0f;
buoy->m10F0[1][3] = 0.0f;
buoy->m10F0[2][3] = 0.0f;
buoy->m1124 = 1;
buoy->m1128 = true;
}
m460 = fpcM_ERROR_PROCESS_ID_e;
}
}
/* 00002414-00002688 .text set_water_pos__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::set_water_pos() {
if (daSea_ChkArea(current.pos.x, current.pos.z)) {
f32 fVar4 = daSea_calcWave(current.pos.x - 32.0f, current.pos.z - 32.0f);
f32 fVar5 = daSea_calcWave(current.pos.x - 32.0f, current.pos.z + 32.0f);
f32 fVar6 = daSea_calcWave(current.pos.x + 32.0f, current.pos.z - 32.0f);
cXyz sp44(0.0f, fVar5 - fVar4, 32.0f);
cXyz sp38(32.0f, fVar6 - fVar4, 0.0f);
m41C = (fVar4 + fVar5 + fVar6) * 0.33333334f;
m420 = sp44.outprod(sp38);
m420.normalizeZP();
} else {
static dBgS_WtrChk wtr;
cXyz sp2C(current.pos.x, current.pos.y - 1000.0f, current.pos.z);
wtr.Set(sp2C, current.pos.y + 1000.0f);
if (dComIfG_Bgsp()->SplGrpChk(&wtr)) {
m41C = wtr.GetHeight();
} else {
m41C = 0.0f;
}
f32 x = m42C * -0.2f + cM_rndFX(0.001f);
f32 z = m430 * -0.2f + cM_rndFX(0.001f);
m434 += x;
m438 += z;
m434 *= 0.99f;
m438 *= 0.99f;
m42C += m434;
m430 += m438;
m420.set(m42C, 1.0f, m430);
m420.normalize();
}
}
/* 000027AC-00002908 .text afl_sway__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::afl_sway() {
#if VERSION == VERSION_DEMO
f32 x3;
f32 z3;
f32 sq2 = SQUARE(attr()->m5C);
f32 x = m420.x * attr()->m68;
f32 z = m420.z * attr()->m68;
f32 sq = x * x + z * z;
if (sq > sq2) {
f32 tmp = attr()->m5C / std::sqrtf(sq);
x *= tmp;
z *= tmp;
}
x = (m440 - x);
z = (m444 - z);
x = -x * attr()->m60;
z = -z * attr()->m60;
x3 = -m448 * attr()->m64;
z3 = -m44C * attr()->m64;
m448 += x + x3;
m44C += z + z3;
#else
f32 x1;
f32 x2;
f32 x3;
f32 z1;
f32 z2;
f32 z3;
f32 x = m420.x * attr()->m68;
f32 z = m420.z * attr()->m68;
f32 sq2 = SQUARE(attr()->m5C);
f32 sq = x * x + z * z;
if (sq > sq2) {
f32 tmp = attr()->m5C / std::sqrtf(sq);
x *= tmp;
z *= tmp;
}
z1 = -(m444 - z);
z2 = z1 * attr()->m60;
z3 = -m44C * attr()->m64;
x3 = -m448 * attr()->m64;
x1 = -(m440 - x);
x2 = x1 * attr()->m60;
m448 += x2 + x3;
m44C += z2 + z3;
#endif
m440 += m448;
m444 += m44C;
}
/* 00002908-00002984 .text mine_chk_range_flash__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mine_chk_range_flash() {
daShip_c* ship = dComIfGp_getShipActor();
f32 fVar1 = SQUARE(attr()->m40);
bool uVar2 = false;
if (ship && fopAcM_searchActorDistanceXZ2(this, ship) < fVar1) {
uVar2 = true;
}
return uVar2;
}
/* 00002984-00002A00 .text mine_chk_range_explode__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mine_chk_range_explode() {
daShip_c* ship = dComIfGp_getShipActor();
f32 fVar1 = SQUARE(attr()->m44);
bool uVar2 = false;
if (ship && fopAcM_searchActorDistanceXZ2(this, ship) < fVar1) {
uVar2 = true;
}
return uVar2;
}
/* 00002A00-00002B34 .text mine_chk_range_damage__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::mine_chk_range_damage() {
daShip_c* ship = dComIfGp_getShipActor();
f32 sq = SQUARE(attr()->m48);
if (ship != NULL && fopAcM_searchActorDistanceXZ2(this, ship) < sq) {
if (ship->current.pos.y < current.pos.y + attr()->m4C) {
if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) {
cXyz sp14(ship->current.pos.x - current.pos.x, 0.0f, ship->current.pos.z - current.pos.z);
cXyz sp08(ship->speed.x, 0.0f, ship->speed.z);
sq = SQUARE(attr()->m3C);
if (sp14.inprod(sp08) < sq) {
ship->onCrashFlg();
return true;
}
}
}
}
return false;
}
/* 00002B34-00002E28 .text execute_sub__Q212daObjBarrel25Act_cFv */
void daObjBarrel2::Act_c::execute_sub() {
s32 iVar4 = m470;
m470 = 0;
if (m410 == 2) {
if (m40C != 4 && !demo_mode_chk() && mine_chk_range_explode()) {
mode_explode_init();
} else if ((m40C == 4) && mine_chk_range_damage()) {
mode_demo_explode0_init();
}
}
if (iVar4 == 1 && !demo_mode_chk()) {
mode_demo_break0_init();
} else if (iVar4 == 2) {
if (m454 > 0.0f) {
m454 = 0.0f;
}
m454 -= 8.0f;
if (m454 < -30.0f) {
m454 = -30.0f;
}
}
if (m46D != 0) {
m46D--;
}
if (m45C < SQUARE(attr()->m34)) {
item_give();
}
if ((m474 != 0) && (m40C == 0)) {
if (m410 == 0) {
mode_exit_v_init();
} else if (m410 == 1) {
mode_exit_h_init();
} else if ((m410 == 2) && (m468 == 0)) {
mode_exit_mine_init();
}
}
bool bVar1 = false;
if (iVar4 == 3) {
eff_break();
buoy_jump(300.0f);
item_drop_init(130.0f);
bVar1 = true;
} else if (mode_proc_call()) {
set_mtx();
mCyl.SetC(current.pos);
dComIfG_Ccsp()->Set(&mCyl);
attention_info.position.x = current.pos.x;
attention_info.position.y = current.pos.y + attr()->m18 * attr()->m20 * attr()->m24;
attention_info.position.z = current.pos.z;
eyePos = attention_info.position;
if ((m410 == 2) && mine_chk_range_flash()) {
m468 = 1;
}
if (m40C == 0 && m468 != 0 && m29C->play()) {
mode_explode_init();
}
} else {
bVar1 = true;
}
if (m475 != 0) {
item_delete();
bVar1 = true;
}
if (bVar1) {
fopAcM_delete(this);
}
}
/* 00002E28-00002EDC .text _execute__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::_execute() {
cull_set_move();
item_connect_check();
s32 uVar2 = 0;
if (m46A != 1 && dComIfGp_event_runCheck() != FALSE) {
uVar2 = 1;
}
m46C = uVar2;
if (m40C != 0 || !fopAcM_cullingCheck(this) || m46C != 0 || m474 != 0 || m475 != 0) {
execute_sub();
}
cull_set_draw();
return TRUE;
}
/* 00002EDC-00002F78 .text _draw__Q212daObjBarrel25Act_cFv */
bool daObjBarrel2::Act_c::_draw() {
if (m40C == 0 || m40C == 1 || m40C == 2 || m40C == 3) {
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(m298, &tevStr);
J3DModelData* mdl_data = m298->getModelData();
m29C->entry(mdl_data);
mDoExt_modelUpdateDL(m298);
}
return TRUE;
}
/* 00002F78-00002F98 .text Create__Q212daObjBarrel26MethodFPv */
cPhs_State daObjBarrel2::Method::Create(void* v_this) {
return ((daObjBarrel2::Act_c*)v_this)->_create();
}
/* 00002F98-00002FBC .text Delete__Q212daObjBarrel26MethodFPv */
BOOL daObjBarrel2::Method::Delete(void* v_this) {
return ((daObjBarrel2::Act_c*)v_this)->_delete();
}
/* 00002FBC-00002FE0 .text Execute__Q212daObjBarrel26MethodFPv */
BOOL daObjBarrel2::Method::Execute(void* v_this) {
return ((daObjBarrel2::Act_c*)v_this)->_execute();
}
/* 00002FE0-00003004 .text Draw__Q212daObjBarrel26MethodFPv */
BOOL daObjBarrel2::Method::Draw(void* v_this) {
return ((daObjBarrel2::Act_c*)v_this)->_draw();
}
/* 00003004-0000300C .text IsDelete__Q212daObjBarrel26MethodFPv */
BOOL daObjBarrel2::Method::IsDelete(void*) {
return TRUE;
}
actor_method_class daObjBarrel2::Method::Table = {
(process_method_func)daObjBarrel2::Method::Create,
(process_method_func)daObjBarrel2::Method::Delete,
(process_method_func)daObjBarrel2::Method::Execute,
(process_method_func)daObjBarrel2::Method::IsDelete,
(process_method_func)daObjBarrel2::Method::Draw,
};
actor_process_profile_definition g_profile_Obj_Barrel2 = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0008,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_Obj_Barrel2,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daObjBarrel2::Act_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_Obj_Barrel2,
/* Actor SubMtd */ &daObjBarrel2::Method::Table,
/* Status */ 0x05 | fopAcStts_SHOWMAP_e | fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLSPHERE_CUSTOM_e,
};