mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-19 21:33:07 -04:00
817 lines
24 KiB
C++
817 lines
24 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_stone2.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_stone2.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/res/res_always.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "f_op/f_op_camera.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
namespace daStone2 {
|
|
Mtx daStone2::Act_c::M_tmp_mtx;
|
|
|
|
const dCcD_SrcCyl Act_c::M_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ AT_TYPE_UNK8,
|
|
/* SrcObjAt Atp */ 2,
|
|
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsEnemy_e | cCcD_AtSPrm_VsOther_e,
|
|
/* SrcObjTg Type */ AT_TYPE_BOMB,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_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_Shield_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 30.0f,
|
|
/* Height */ 35.0f,
|
|
}},
|
|
};
|
|
const Attr_c Act_c::M_attr[5] = {
|
|
{
|
|
NULL, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0.0f, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
0x0, 0x0, 0x0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x0, 1.0f, 1.0f, 1.0f,
|
|
},
|
|
{
|
|
NULL, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0.0f, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
0x0, 0x0, 0x0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x0, 1.0f, 1.0f, 1.0f,
|
|
},
|
|
{
|
|
"Ebrock", 0x4, 0x8, DEMO_SELECT(0x2000, 0xE40), 0x19, 0x140, 0x12C, 0x118, 0x1C6, 0x696A, 13, 0x0, 0xC8, 0x0, 0xFFFF, 0x0, 0xC8, 0x0,
|
|
0x190, -6.0f, 200.0f, 200.0f, 27.0f, 36.0f, 0.0f, 0.0f, 3.0f, 0x6, 3.0f, 1.0f, 1.5f,
|
|
},
|
|
{
|
|
"Ekao", 0x4, 0x7,
|
|
#if VERSION == VERSION_DEMO
|
|
0x2000,
|
|
#else
|
|
0x1660,
|
|
#endif
|
|
0x18, 0x144, 0x1AE, 0x113, 0x15E, 0x6969, 13, 0x0, 0x78, 0x0, 0x212, 0x0, 0x78, 0x0,
|
|
0x15E, -6.0f, 120.0f, 175.0f, 27.0f, 36.0f, 0.0f, 0.0f, 3.0f, 0x6, 1.5f, 1.0f, 1.3f,
|
|
},
|
|
{
|
|
"Ebrock", 0x5, 0x9,
|
|
#if VERSION == VERSION_DEMO
|
|
0x2000,
|
|
#else
|
|
0xE40,
|
|
#endif
|
|
0xE, 0x87, 0xAA, 0x6E, 0x96, 0x696B, 13, 0x0, 0x32, 0x0, 0xFFFF, 0x0, 0x32, 0x0,
|
|
0x96, -6.0f, 90.0f, 90.0f, 27.0f, 36.0f, 0.0f, 0.0f, 2.0f, 0x4, 2.0f, 1.0f, 0.8f,
|
|
},
|
|
};
|
|
|
|
/* 000000EC-00000208 .text __ct__Q28daStone25Act_cFv */
|
|
Act_c::Act_c() {
|
|
}
|
|
|
|
/* 00000550-00000580 .text prmZ_init__Q28daStone25Act_cFv */
|
|
void Act_c::prmZ_init() {
|
|
if (m656) {
|
|
return;
|
|
}
|
|
m652 = home.angle.z;
|
|
m656 = true;
|
|
home.angle.z = 0;
|
|
current.angle.z = 0;
|
|
shape_angle.z = 0;
|
|
}
|
|
|
|
/* 00000580-000005E4 .text is_switch__Q28daStone25Act_cCFv */
|
|
bool Act_c::is_switch() const {
|
|
const s32 switchIndex = prm_get_swSave();
|
|
if (switchIndex == 0xff) {
|
|
return false;
|
|
}
|
|
|
|
return fopAcM_isSwitch((fopAc_ac_c*)this, switchIndex) != false;
|
|
}
|
|
|
|
/* 000005E4-00000638 .text on_switch__Q28daStone25Act_cCFv */
|
|
void Act_c::on_switch() const {
|
|
const s32 switchNo = prm_get_swSave();
|
|
if (switchNo != 0xff) {
|
|
fopAcM_onSwitch((fopAc_ac_c*)this, switchNo);
|
|
}
|
|
}
|
|
|
|
/* 00000638-00000704 .text CreateHeap__Q28daStone25Act_cFv */
|
|
BOOL Act_c::CreateHeap() {
|
|
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(attr().resName, attr().m04);
|
|
JUT_ASSERT(592, model_data != NULL);
|
|
|
|
mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000022);
|
|
return mpModel != NULL;
|
|
}
|
|
|
|
/* 00000704-000009C8 .text Create__Q28daStone25Act_cFv */
|
|
BOOL Act_c::Create() {
|
|
mStts.Init(0xff, 0xff, this);
|
|
mCyl.Set(M_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
mCyl.SetR(attr().m12);
|
|
mCyl.SetH(attr().m14);
|
|
mCyl.SetAtVec(*(cXyz*)&cXyz::Zero);
|
|
mCyl.SetTgVec(*(cXyz*)&cXyz::Zero);
|
|
mAcchCir.SetWall(30.0f, attr().m12);
|
|
mAcch.Set(
|
|
fopAcM_GetPosition_p(this),
|
|
fopAcM_GetOldPosition_p(this),
|
|
this,
|
|
1,
|
|
&mAcchCir,
|
|
fopAcM_GetSpeed_p(this),
|
|
fopAcM_GetAngle_p(this),
|
|
fopAcM_GetShapeAngle_p(this)
|
|
);
|
|
mAcch.ClrRoofNone();
|
|
mAcch.SetRoofCrrHeight(attr().m10);
|
|
fopAcM_SetGravity(this, attr().m30);
|
|
fopAcM_posMoveF(this, NULL);
|
|
mAcch.CrrPos(*dComIfG_Bgsp());
|
|
mAcch.ClrGroundLanding();
|
|
current.pos.set(home.pos);
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
|
|
attention_info.distances[fopAc_Attn_TYPE_CARRY_e] = attr().m0C;
|
|
fopAcM_OnStatus(this, fopAcStts_UNK10000_e);
|
|
|
|
attention_info.position.x = current.pos.x;
|
|
attention_info.position.y = current.pos.y + attr().m38;
|
|
attention_info.position.z = current.pos.z;
|
|
m658 = 0;
|
|
m657 = 1;
|
|
m6A8 = 0;
|
|
m6A9 = 0;
|
|
m65A = 2;
|
|
mode_wait_init();
|
|
m650 = dComIfGp_evmng_getEventIdx(NULL, m652);
|
|
demo_non_init();
|
|
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
|
init_mtx();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000009C8-000009F4 .text chk_appear__Q28daStone25Act_cFv */
|
|
bool Act_c::chk_appear() {
|
|
return is_switch() == false;
|
|
}
|
|
|
|
/* 000009F4-00000B3C .text Mthd_Create__Q28daStone25Act_cFv */
|
|
cPhs_State Act_c::Mthd_Create() {
|
|
fopAcM_SetupActor(this, Act_c);
|
|
prmZ_init();
|
|
m644 = prm_get_type();
|
|
m659 = chk_appear();
|
|
cPhs_State phase_state = cPhs_ERROR_e;
|
|
if (m659) {
|
|
phase_state = dComIfG_resLoad(&mPhase, attr().resName);
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
#if VERSION == VERSION_DEMO
|
|
phase_state = MoveBGCreate(attr().resName, attr().resIndex, NULL, -1);
|
|
#else
|
|
phase_state = MoveBGCreate(attr().resName, attr().resIndex, NULL, attr().heapSize);
|
|
#endif
|
|
JUT_ASSERT(DEMO_SELECT(702, 703), (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
|
|
}
|
|
}
|
|
return phase_state;
|
|
}
|
|
|
|
/* 00000B3C-00000B84 .text Delete__Q28daStone25Act_cFv */
|
|
BOOL Act_c::Delete() {
|
|
m65C.remove();
|
|
eff_lift_smoke_remove();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000B84-00000BEC .text Mthd_Delete__Q28daStone25Act_cFv */
|
|
BOOL Act_c::Mthd_Delete() {
|
|
BOOL uVar1 = TRUE;
|
|
if (m659) {
|
|
uVar1 = MoveBGDelete();
|
|
dComIfG_resDeleteDemo(&mPhase, attr().resName);
|
|
}
|
|
return uVar1;
|
|
}
|
|
|
|
/* 00000BEC-00000CE4 .text set_mtx__Q28daStone25Act_cFv */
|
|
void Act_c::set_mtx() {
|
|
bool tmp = m648 == 2;
|
|
|
|
mDoMtx_stack_c::transS(current.pos.x, tmp ? current.pos.y + attr().m34 : current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
|
|
if (tmp) {
|
|
mDoMtx_stack_c::transM(0.0f, -attr().m34, 0.0f);
|
|
}
|
|
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
cMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx);
|
|
}
|
|
|
|
/* 00000CE4-00000D20 .text init_mtx__Q28daStone25Act_cFv */
|
|
void Act_c::init_mtx() {
|
|
mpModel->setBaseScale(scale);
|
|
set_mtx();
|
|
}
|
|
|
|
/* 00000D20-00000DC0 .text cull_set_draw__Q28daStone25Act_cFv */
|
|
void Act_c::cull_set_draw() {
|
|
fopAcM_setCullSizeSphere(this, attr().m28, attr().m2A, attr().m2C, attr().m2E);
|
|
}
|
|
|
|
/* 00000DC0-00000E74 .text cull_set_move__Q28daStone25Act_cFv */
|
|
void Act_c::cull_set_move() {
|
|
if (attr().m26 >= 0) {
|
|
fopAcM_setCullSizeSphere(this, attr().m20, attr().m22, attr().m24, attr().m26);
|
|
} else {
|
|
m657 = 1;
|
|
}
|
|
}
|
|
|
|
/* 00000E74-00001088 .text damaged__Q28daStone25Act_cFi */
|
|
void Act_c::damaged(int arg1) {
|
|
s32 i_itemNo = prm_get_itemNo();
|
|
s32 i_itemBitNo = prm_get_itemSave();
|
|
csXyz sp08(0, home.angle.y, 0);
|
|
fopAcM_createItemFromTable(¤t.pos, i_itemNo, i_itemBitNo, fopAcM_GetHomeRoomNo(this), 0, &sp08, arg1, NULL);
|
|
fopAcM_cancelCarryNow(this);
|
|
|
|
typedef void (Act_c::*EffProcFunc)();
|
|
static EffProcFunc eff_break_proc[] = {
|
|
&Act_c::eff_break_ebrock,
|
|
&Act_c::eff_break_ebrock,
|
|
&Act_c::eff_break_ebrock,
|
|
&Act_c::eff_break_ekao,
|
|
&Act_c::eff_break_ebrock2,
|
|
};
|
|
|
|
(this->*eff_break_proc[m644])();
|
|
|
|
if (attr().m50 > 0) {
|
|
dComIfGp_getVibration().StartShock(attr().m50, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
set_senv(0xff, 10);
|
|
fopAcM_seStart(this, attr().m18, 0);
|
|
on_switch();
|
|
}
|
|
|
|
/* 00001088-0000115C .text damage_cc_proc__Q28daStone25Act_cFv */
|
|
bool Act_c::damage_cc_proc() {
|
|
bool uVar3 = 0;
|
|
if (mCyl.ChkAtHit()) {
|
|
mCyl.ClrAtHit();
|
|
damaged(3);
|
|
uVar3 = 1;
|
|
} else if (mCyl.ChkTgHit()) {
|
|
cCcD_Obj* hitObj = mCyl.GetTgHitObj();
|
|
if (hitObj != NULL) {
|
|
if (m644 != 3 && hitObj->ChkAtType(AT_TYPE_BOMB)) {
|
|
damaged(7);
|
|
uVar3 = 1;
|
|
}
|
|
}
|
|
mCyl.ClrTgHit();
|
|
} else {
|
|
uVar3 = 0;
|
|
}
|
|
return uVar3;
|
|
}
|
|
|
|
/* 0000115C-00001164 .text damage_bg_proc__Q28daStone25Act_cFv */
|
|
bool Act_c::damage_bg_proc() {
|
|
return false;
|
|
}
|
|
|
|
/* 00001164-00001214 .text damage_bg_proc_directly__Q28daStone25Act_cFv */
|
|
bool Act_c::damage_bg_proc_directly() {
|
|
bool uVar2 = false;
|
|
|
|
if (m648 != 0) {
|
|
if (m648 == 2) {
|
|
bool uVar4 = mAcch.ChkGroundHit();
|
|
bool uVar5 = mAcch.ChkWallHit();
|
|
bool uVar3 = mAcch.ChkRoofHit();
|
|
|
|
if (uVar4) {
|
|
damaged(2);
|
|
uVar2 = true;
|
|
} else if (uVar5 || uVar3) {
|
|
damaged(3);
|
|
uVar2 = true;
|
|
}
|
|
|
|
if (uVar4 || uVar5 || uVar3) {
|
|
cam_lockoff();
|
|
}
|
|
}
|
|
}
|
|
return uVar2;
|
|
}
|
|
|
|
/* 00001214-00001368 .text eff_m_break__Q28daStone25Act_cFUsUs */
|
|
void Act_c::eff_m_break(u16 particleID, u16 texAnmFrame) {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Always", ALWAYS_BDL_MPI_KOISHI);
|
|
J3DAnmTexPattern* texAnm = (J3DAnmTexPattern*)dComIfG_getObjectRes("Always", ALWAYS_BTP_MPI_KOISHI);
|
|
cXyz sp18;
|
|
sp18.setall(attr().m54);
|
|
|
|
JPABaseEmitter* emitter = dComIfGp_particle_set(particleID, ¤t.pos, &shape_angle, NULL, 0xff, NULL, -1, NULL, NULL, &sp18);
|
|
if (emitter != NULL) {
|
|
emitter->setGlobalRTMatrix(mpModel->getBaseTRMtx());
|
|
dPa_J3DmodelEmitter_c* modelEmitter = new dPa_J3DmodelEmitter_c(emitter, modelData, tevStr, texAnm, texAnmFrame, 0);
|
|
if (modelEmitter != NULL) {
|
|
dComIfGp_particle_addModelEmitter(modelEmitter);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001368-0000143C .text eff_b_break__Q28daStone25Act_cFUs */
|
|
void Act_c::eff_b_break(u16 arg1) {
|
|
GXColor sp18;
|
|
sp18.r = tevStr.mColorC0.r;
|
|
sp18.g = tevStr.mColorC0.g;
|
|
sp18.b = tevStr.mColorC0.b;
|
|
sp18.a = tevStr.mColorC0.a;
|
|
|
|
cXyz sp1C;
|
|
sp1C.setall(attr().m58);
|
|
|
|
JPABaseEmitter* pJVar1 = dComIfGp_particle_set(arg1, ¤t.pos, NULL, NULL, 0xff, NULL, -1, &tevStr.mColorK0, &sp18, &sp1C);
|
|
if (pJVar1 != NULL) {
|
|
pJVar1->setGlobalRTMatrix(mpModel->getBaseTRMtx());
|
|
}
|
|
}
|
|
|
|
/* 0000143C-000015D8 .text eff_break_ebrock__Q28daStone25Act_cFv */
|
|
void Act_c::eff_break_ebrock() {
|
|
eff_m_break(dPa_name::ID_AK_JN_M_BREAKGREATROCK00, 2);
|
|
eff_b_break(dPa_name::ID_AK_JN_BREAKGREATROCK00);
|
|
|
|
static cXyz offset_vec(0.0f, 250.0f, 0.0f);
|
|
|
|
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
|
|
mDoMtx_stack_c::multVec(&offset_vec, &m67C);
|
|
|
|
JPABaseEmitter* pJVar1 = dComIfGp_particle_setToon(dPa_name::ID_AK_JT_ELEMENTSMOKE01, &m67C, NULL, NULL, 200, &m65C);
|
|
if (pJVar1 != NULL) {
|
|
pJVar1->setRate(30.0f);
|
|
pJVar1->setMaxFrame(1);
|
|
|
|
static JGeometry::TVec3<f32> d_scale(3.0f, 3.0f, 3.0f);
|
|
static JGeometry::TVec3<f32> p_scale(7.0f, 7.0f, 7.0f);
|
|
|
|
pJVar1->setGlobalDynamicsScale(d_scale);
|
|
pJVar1->setGlobalParticleScale(p_scale);
|
|
}
|
|
}
|
|
|
|
/* 000015D8-00001774 .text eff_break_ekao__Q28daStone25Act_cFv */
|
|
void Act_c::eff_break_ekao() {
|
|
eff_m_break(dPa_name::ID_AK_JN_M_BREAKFACEROCK00, 3);
|
|
eff_b_break(dPa_name::ID_AK_JN_BREAKFACEROCK00);
|
|
|
|
static cXyz offset_vec(0.0f, 250.0f, 0.0f);
|
|
|
|
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
|
|
mDoMtx_stack_c::multVec(&offset_vec, &m67C);
|
|
|
|
JPABaseEmitter* pJVar1 = dComIfGp_particle_setToon(dPa_name::ID_AK_JT_ELEMENTSMOKE01, &m67C, NULL, NULL, 200, &m65C);
|
|
if (pJVar1 != NULL) {
|
|
pJVar1->setRate(30.0f);
|
|
pJVar1->setMaxFrame(1);
|
|
|
|
static JGeometry::TVec3<f32> d_scale(2.5f, 2.5f, 2.5f);
|
|
static JGeometry::TVec3<f32> p_scale(6.0f, 6.0f, 6.0f);
|
|
|
|
pJVar1->setGlobalDynamicsScale(d_scale);
|
|
pJVar1->setGlobalParticleScale(p_scale);
|
|
}
|
|
}
|
|
|
|
/* 00001774-00001910 .text eff_break_ebrock2__Q28daStone25Act_cFv */
|
|
void Act_c::eff_break_ebrock2() {
|
|
eff_m_break(dPa_name::ID_AK_JN_M_BREAKLITTLEROCK00, 2);
|
|
eff_b_break(dPa_name::ID_AK_JN_BREAKLITTLEROCK00);
|
|
|
|
static cXyz offset_vec(0.0f, 100.0f, 0.0f);
|
|
|
|
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
|
|
mDoMtx_stack_c::multVec(&offset_vec, &m67C);
|
|
|
|
JPABaseEmitter* pJVar1 = dComIfGp_particle_setToon(dPa_name::ID_AK_JT_ELEMENTSMOKE01, &m67C, NULL, NULL, 200, &m65C);
|
|
if (pJVar1 != NULL) {
|
|
pJVar1->setRate(30.0f);
|
|
pJVar1->setMaxFrame(1);
|
|
|
|
static JGeometry::TVec3<f32> d_scale(1.2f, 1.2f, 1.2f);
|
|
static JGeometry::TVec3<f32> p_scale(3.0f, 3.0f, 3.0f);
|
|
|
|
pJVar1->setGlobalDynamicsScale(d_scale);
|
|
pJVar1->setGlobalParticleScale(p_scale);
|
|
}
|
|
}
|
|
|
|
/* 00001910-00001ABC .text eff_lift_smoke_start__Q28daStone25Act_cFv */
|
|
void Act_c::eff_lift_smoke_start() {
|
|
if (m6A9 == 0) {
|
|
m6A8 = 1;
|
|
m6A9 = 1;
|
|
f32 groundH = mAcch.GetGroundH();
|
|
dKy_tevstr_c tev;
|
|
|
|
u8 tmp;
|
|
if (groundH != -G_CM3D_F_INF) {
|
|
tmp = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
|
|
} else {
|
|
tmp = 0xFF;
|
|
}
|
|
dKy_tevstr_init(&tev, current.roomNo, tmp);
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tev);
|
|
|
|
GXColor color;
|
|
color.r = tev.mColorC0.r;
|
|
color.g = tev.mColorC0.g;
|
|
color.b = tev.mColorC0.b;
|
|
color.a = tev.mColorC0.a;
|
|
|
|
cXyz sp1C;
|
|
sp1C.setall(attr().m5C);
|
|
|
|
dComIfGp_particle_setToon(dPa_name::ID_AK_JT_LIFTROCKSMOKE00, ¤t.pos, NULL, &sp1C, 0x80, &m688, -1, &color, &tev.mColorK0, NULL);
|
|
}
|
|
}
|
|
|
|
/* 00001ABC-00001AFC .text eff_lift_smoke_end__Q28daStone25Act_cFv */
|
|
void Act_c::eff_lift_smoke_end() {
|
|
if (m6A9 != 0) {
|
|
m6A9 = 0;
|
|
m688.remove();
|
|
}
|
|
}
|
|
|
|
/* 00001AFC-00001B28 .text eff_lift_smoke_remove__Q28daStone25Act_cFv */
|
|
void Act_c::eff_lift_smoke_remove() {
|
|
m688.remove();
|
|
}
|
|
|
|
/* 00001B28-00001B7C .text set_senv__Q28daStone25Act_cCFii */
|
|
void Act_c::set_senv(int arg1, int arg2) const {
|
|
dKy_Sound_set(current.pos, arg1, fopAcM_GetID((fopAc_ac_c*)this), arg2);
|
|
}
|
|
|
|
/* 00001B7C-00001BB4 .text cam_lockoff__Q28daStone25Act_cCFv */
|
|
void Act_c::cam_lockoff() const {
|
|
camera_class* camera = dComIfGp_getCamera(0);
|
|
camera->mCamera.ForceLockOff(base.base.mBsPcId);
|
|
}
|
|
|
|
/* 00001BB4-00001BE4 .text mode_wait_init__Q28daStone25Act_cFv */
|
|
void Act_c::mode_wait_init() {
|
|
mCyl.OffAtSPrmBit(cCcD_AtSPrm_Set_e);
|
|
mCyl.OnTgSPrmBit(cCcD_TgSPrm_Set_e);
|
|
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
|
|
m648 = 0;
|
|
}
|
|
|
|
/* 00001BE4-00001C44 .text mode_wait__Q28daStone25Act_cFv */
|
|
void Act_c::mode_wait() {
|
|
if (fopAcM_checkCarryNow(this)) {
|
|
mode_carry_init();
|
|
} else if (m65A != 0) {
|
|
m65A--;
|
|
if (m65A == 0) {
|
|
mpBgW->SetLock();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001C44-00001CC0 .text mode_carry_init__Q28daStone25Act_cFv */
|
|
void Act_c::mode_carry_init() {
|
|
mCyl.OffAtSPrmBit(cCcD_AtSPrm_Set_e);
|
|
mCyl.OnTgSPrmBit(cCcD_TgSPrm_Set_e);
|
|
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
|
|
cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
|
|
dComIfG_Bgsp()->Release(mpBgW);
|
|
on_switch();
|
|
m648 = 1;
|
|
}
|
|
|
|
/* 00001CC0-00001D5C .text mode_carry__Q28daStone25Act_cFv */
|
|
void Act_c::mode_carry() {
|
|
if (daPy_getPlayerActorClass()->getGrabUpStart()) {
|
|
m658 = 1;
|
|
}
|
|
|
|
if (daPy_getPlayerActorClass()->getGrabUpStart()) {
|
|
eff_lift_smoke_start();
|
|
}
|
|
|
|
if (daPy_getPlayerActorClass()->getGrabUpEnd()) {
|
|
eff_lift_smoke_end();
|
|
}
|
|
|
|
if (!fopAcM_checkCarryNow(this)) {
|
|
mode_drop_init();
|
|
mode_drop();
|
|
}
|
|
}
|
|
|
|
/* 00001D5C-00001E00 .text mode_drop_init__Q28daStone25Act_cFv */
|
|
void Act_c::mode_drop_init() {
|
|
f32 fVar1 = attr().m40;
|
|
mCyl.OnAtSPrmBit(cCcD_AtSPrm_Set_e);
|
|
mCyl.OnTgSPrmBit(cCcD_TgSPrm_Set_e);
|
|
mCyl.OnCoSPrmBit(cCcD_CoSPrm_Set_e);
|
|
mStts.SetWeight(200);
|
|
fopAcM_GetSpeed(this).y = attr().m3C;
|
|
fopAcM_SetSpeedF(this, fVar1);
|
|
fopAcM_SetGravity(this, attr().m30);
|
|
demo_req_init();
|
|
m648 = 2;
|
|
}
|
|
|
|
/* 00001E00-00001E6C .text mode_drop__Q28daStone25Act_cFv */
|
|
void Act_c::mode_drop() {
|
|
daObj::SetCurrentRoomNo(this, &mAcch.m_gnd);
|
|
const cXyz* zero = &cXyz::Zero;
|
|
daObj::posMoveF_stream(this, mStts.GetCCMoveP(), zero, attr().m44, attr().m48);
|
|
shape_angle.x += 1000;
|
|
}
|
|
|
|
/* 00001E6C-00001F24 .text mode_fine_init__Q28daStone25Act_cFv */
|
|
void Act_c::mode_fine_init() {
|
|
mCyl.OffAtSPrmBit(cCcD_AtSPrm_Set_e);
|
|
mCyl.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
|
|
mCyl.OffCoSPrmBit(cCcD_CoSPrm_Set_e);
|
|
|
|
if (mpBgW->ChkUsed()) {
|
|
dComIfG_Bgsp()->Release(mpBgW);
|
|
}
|
|
|
|
if (fopAcM_checkCarryNow(this)) {
|
|
fopAcM_cancelCarryNow(this);
|
|
}
|
|
#if VERSION == VERSION_DEMO
|
|
cLib_onBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
|
|
#else
|
|
cLib_offBit<u32>(attention_info.flags, fopAc_Attn_ACTION_CARRY_e);
|
|
#endif
|
|
m654 = 1;
|
|
m648 = 3;
|
|
}
|
|
|
|
/* 00001F24-00001FC8 .text mode_fine__Q28daStone25Act_cFv */
|
|
void Act_c::mode_fine() {
|
|
if (m654 > 0) {
|
|
m654--;
|
|
if (m654 == 0 && m644 == 3 && !dComIfGp_evmng_existence(m650)) {
|
|
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001FC8-0000219C .text mode_proc_call__Q28daStone25Act_cFv */
|
|
bool Act_c::mode_proc_call() {
|
|
typedef void (Act_c::*ModeProcFunc)();
|
|
static ModeProcFunc mode_proc[] = {
|
|
&Act_c::mode_wait,
|
|
&Act_c::mode_carry,
|
|
&Act_c::mode_drop,
|
|
&Act_c::mode_fine,
|
|
};
|
|
|
|
(this->*mode_proc[m648])();
|
|
|
|
bool uVar6 = true;
|
|
if (m648 != 0) {
|
|
if (m648 != 3) {
|
|
cXyz sp08 = current.pos;
|
|
mAcch.CrrPos(*dComIfG_Bgsp());
|
|
if (m648 == 1) {
|
|
current.pos = sp08;
|
|
}
|
|
}
|
|
|
|
if (!damage_bg_proc_directly()) {
|
|
if (m648 != 1) {
|
|
tevStr.mRoomNo = current.roomNo;
|
|
tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd);
|
|
}
|
|
} else {
|
|
mode_fine_init();
|
|
}
|
|
|
|
if (m648 == 3) {
|
|
if (prmZ_get_evId() == 0 && m65C.isEnd()) {
|
|
BOOL tmp;
|
|
if (m6A8) {
|
|
tmp = m688.isEnd();
|
|
} else {
|
|
tmp = TRUE;
|
|
}
|
|
|
|
if (tmp) {
|
|
uVar6 = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return uVar6;
|
|
}
|
|
|
|
/* 0000219C-000021A8 .text demo_non_init__Q28daStone25Act_cFv */
|
|
void Act_c::demo_non_init() {
|
|
m64C = 0;
|
|
}
|
|
|
|
/* 000021A8-000021AC .text demo_non__Q28daStone25Act_cFv */
|
|
void Act_c::demo_non() {
|
|
}
|
|
|
|
/* 000021AC-00002214 .text demo_req_init__Q28daStone25Act_cFv */
|
|
void Act_c::demo_req_init() {
|
|
if (prmZ_get_evId() == 0) {
|
|
u8 evno = m652;
|
|
fopAcM_orderOtherEventId(this, m650, evno);
|
|
eventInfo.onCondition(dEvtCmd_INDEMO_e);
|
|
m64C = 1;
|
|
}
|
|
}
|
|
|
|
/* 00002214-000022AC .text demo_req__Q28daStone25Act_cFv */
|
|
void Act_c::demo_req() {
|
|
if (dComIfGp_evmng_existence(m650)) {
|
|
if (eventInfo.checkCommandDemoAccrpt()) {
|
|
demo_run_init();
|
|
} else {
|
|
u8 evno = m652;
|
|
fopAcM_orderOtherEventId(this, m650, evno);
|
|
eventInfo.onCondition(dEvtCmd_INDEMO_e);
|
|
}
|
|
} else {
|
|
demo_non_init();
|
|
}
|
|
}
|
|
|
|
/* 000022AC-000022B8 .text demo_run_init__Q28daStone25Act_cFv */
|
|
void Act_c::demo_run_init() {
|
|
m64C = 2;
|
|
}
|
|
|
|
/* 000022B8-00002318 .text demo_run__Q28daStone25Act_cFv */
|
|
void Act_c::demo_run() {
|
|
if (dComIfGp_evmng_endCheck(m650)) {
|
|
dComIfGp_event_reset();
|
|
demo_non_init();
|
|
}
|
|
}
|
|
|
|
/* 00002318-000023BC .text demo_proc_call__Q28daStone25Act_cFv */
|
|
void Act_c::demo_proc_call() {
|
|
typedef void (Act_c::*DemoProcFunc)();
|
|
static DemoProcFunc demo_proc[] = {
|
|
&Act_c::demo_non,
|
|
&Act_c::demo_req,
|
|
&Act_c::demo_run,
|
|
};
|
|
(this->*demo_proc[prmZ_get_evId()])();
|
|
}
|
|
|
|
/* 000023BC-00002574 .text Execute__Q28daStone25Act_cFPPA3_A4_f */
|
|
BOOL Act_c::Execute(Mtx** outMtx) {
|
|
cull_set_move();
|
|
if (m657 != 0 || m648 != 0 || !prm_get_cull() || !fopAcM_cullingCheck(this)) {
|
|
m657 = 0;
|
|
BOOL bVar1 = TRUE;
|
|
if (m648 != 3) {
|
|
if (damage_cc_proc() || damage_bg_proc()) {
|
|
eff_lift_smoke_end();
|
|
mode_fine_init();
|
|
demo_req_init();
|
|
}
|
|
}
|
|
demo_proc_call();
|
|
|
|
if (mode_proc_call()) {
|
|
bVar1 = false;
|
|
if (m648 != 3) {
|
|
mStts.SetRoomId(current.roomNo);
|
|
mCyl.MoveCAtTg(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
if (m648 == 2) {
|
|
dComIfG_Ccsp()->SetMass(&mCyl, 3);
|
|
}
|
|
}
|
|
|
|
attention_info.position.x = current.pos.x;
|
|
attention_info.position.y = current.pos.y + attr().m38;
|
|
attention_info.position.z = current.pos.z;
|
|
eyePos = attention_info.position;
|
|
}
|
|
|
|
if (bVar1) {
|
|
fopAcM_delete(this);
|
|
}
|
|
}
|
|
|
|
set_mtx();
|
|
*outMtx = &M_tmp_mtx;
|
|
cull_set_draw();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00002574-00002688 .text draw_shadow__Q28daStone25Act_cFv */
|
|
void Act_c::draw_shadow() {
|
|
if (!prm_get_shadow() && m658 == 0) {
|
|
dComIfGd_setSimpleShadow(¤t.pos, current.pos.y, attr().m0E, (cXyz*)&cXyz::BaseY);
|
|
} else {
|
|
dComIfGd_setSimpleShadow2(¤t.pos, mAcch.GetGroundH(), attr().m0E, mAcch.m_gnd);
|
|
}
|
|
}
|
|
|
|
/* 00002688-0000273C .text Draw__Q28daStone25Act_cFv */
|
|
BOOL Act_c::Draw() {
|
|
if (m648 != 3) {
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
dComIfGd_setList();
|
|
draw_shadow();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
namespace {
|
|
/* 0000273C-0000275C .text Mthd_Create__Q28daStone224@unnamed@d_a_stone2_cpp@FPv */
|
|
cPhs_State Mthd_Create(void* i_this) {
|
|
return ((Act_c*)i_this)->Mthd_Create();
|
|
}
|
|
|
|
/* 0000275C-0000277C .text Mthd_Delete__Q28daStone224@unnamed@d_a_stone2_cpp@FPv */
|
|
BOOL Mthd_Delete(void* i_this) {
|
|
return ((Act_c*)i_this)->Mthd_Delete();
|
|
}
|
|
|
|
/* 0000277C-0000279C .text Mthd_Execute__Q28daStone224@unnamed@d_a_stone2_cpp@FPv */
|
|
BOOL Mthd_Execute(void* i_this) {
|
|
return ((Act_c*)i_this)->MoveBGExecute();
|
|
}
|
|
|
|
/* 0000279C-000027C8 .text Mthd_Draw__Q28daStone224@unnamed@d_a_stone2_cpp@FPv */
|
|
BOOL Mthd_Draw(void* i_this) {
|
|
return ((Act_c*)i_this)->MoveBGDraw();
|
|
}
|
|
|
|
/* 000027C8-000027F4 .text Mthd_IsDelete__Q28daStone224@unnamed@d_a_stone2_cpp@FPv */
|
|
BOOL Mthd_IsDelete(void* i_this) {
|
|
return ((Act_c*)i_this)->MoveBGIsDelete();
|
|
}
|
|
|
|
static actor_method_class Mthd_Table = {
|
|
(process_method_func)Mthd_Create,
|
|
(process_method_func)Mthd_Delete,
|
|
(process_method_func)Mthd_Execute,
|
|
(process_method_func)Mthd_IsDelete,
|
|
(process_method_func)Mthd_Draw,
|
|
};
|
|
}; // namespace
|
|
}; // namespace daStone2
|
|
|
|
actor_process_profile_definition g_profile_Stone2 = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0008,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_Stone2,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daStone2::Act_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_Stone2,
|
|
/* Actor SubMtd */ &daStone2::Mthd_Table,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLSPHERE_CUSTOM_e,
|
|
};
|