// // 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(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(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(¤t.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, ¤t.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, };