mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 05:08:57 -04:00
4efda6f355
Inlines, wrong indentation, enums, private fields, etc
692 lines
20 KiB
C++
692 lines
20 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_coming2.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_coming2.h"
|
|
#include "d/d_bg_s_lin_chk.h"
|
|
#include "d/d_bg_s_wtr_chk.h"
|
|
#include "d/d_bg_s_gnd_chk.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/actor/d_a_ship.h"
|
|
#include "d/actor/d_a_sea.h"
|
|
#include "d/actor/d_a_obj_barrel2.h"
|
|
|
|
s32 daComing2::coming_make_item_no_table[] = {
|
|
dItemNo_GREEN_RUPEE_e,
|
|
dItemNo_GREEN_RUPEE_e,
|
|
dItemNo_GREEN_RUPEE_e,
|
|
dItemNo_GREEN_RUPEE_e,
|
|
dItemNo_GREEN_RUPEE_e,
|
|
dItemNo_BLUE_RUPEE_e,
|
|
dItemNo_BLUE_RUPEE_e,
|
|
dItemNo_BLUE_RUPEE_e,
|
|
dItemNo_BLUE_RUPEE_e,
|
|
dItemNo_BLUE_RUPEE_e,
|
|
dItemNo_YELLOW_RUPEE_e,
|
|
dItemNo_YELLOW_RUPEE_e,
|
|
dItemNo_YELLOW_RUPEE_e,
|
|
dItemNo_YELLOW_RUPEE_e,
|
|
dItemNo_YELLOW_RUPEE_e,
|
|
};
|
|
|
|
static void dummy() {
|
|
// This may have been used in some debug drawing function.
|
|
static GXColor colorR = {255, 100, 100, 255};
|
|
}
|
|
|
|
namespace daComing2 {
|
|
namespace {
|
|
const static u8 L_attr[] = {
|
|
0, 0, 0, 0xC, 0x2, 0x58, 0x00, 0x87, 0x05, 0x46,
|
|
};
|
|
}
|
|
}
|
|
|
|
/* 000000EC-00000164 .text chase_ship__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::chase_ship() {
|
|
fpc_ProcID proc = fopAcM_GetLinkId(this);
|
|
fopAc_ac_c* actor = fopAcM_SearchByID(proc);
|
|
if (actor != NULL) {
|
|
current.pos = actor->current.pos;
|
|
shape_angle = actor->shape_angle;
|
|
}
|
|
}
|
|
|
|
/* 00000164-00000200 .text get_speed__9daComing2FP10fopAc_ac_c */
|
|
f32 daComing2::get_speed(fopAc_ac_c* actor) {
|
|
f32 x = actor->current.pos.x - actor->old.pos.x;
|
|
f32 z = actor->current.pos.z - actor->old.pos.z;
|
|
return std::sqrtf(x * x + z * z);
|
|
}
|
|
|
|
/* 00000200-0000033C .text renew_scope_info__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::renew_scope_info() {
|
|
Mtx sp24;
|
|
cXyz sp18;
|
|
cXyz sp0C;
|
|
|
|
unk_2A0 = get_speed(this);
|
|
f32 fVar1 = unk_2A0;
|
|
if (fVar1 < 35.0f) {
|
|
fVar1 = 35.0f;
|
|
} else {
|
|
fVar1 = unk_2A0;
|
|
}
|
|
sp18.x = 0.0f;
|
|
sp18.y = 100.0f;
|
|
sp18.z = fVar1 * 135.0f;
|
|
|
|
s16 arr[2] = {0x546, -0x546};
|
|
s16 sVar3 = arr[(unk_2A4 + unk_29C) & 1];
|
|
sVar3 = sVar3 > 0 ? sVar3 + ((unk_2A4 >> 2) & 0xF) * 0x168 : sVar3 - ((unk_2A4 >> 2) & 0xF) * 0x168;
|
|
s16 rot = mStartStat.unk_00 + sVar3;
|
|
|
|
cXyz* paVar5;
|
|
if (unk_2A4 == 0) {
|
|
paVar5 = ¤t.pos;
|
|
} else {
|
|
paVar5 = &mBarrelInfo[unk_2A4 - 1].unk_08;
|
|
}
|
|
sp0C = *paVar5;
|
|
|
|
mDoMtx_stack_c::transS(sp0C);
|
|
mDoMtx_stack_c::YrotM(rot);
|
|
MTXCopy(mDoMtx_stack_c::get(), sp24);
|
|
cMtx_multVec(sp24, &sp18, &unk_4A8);
|
|
}
|
|
|
|
/* 0000033C-0000052C .text no_ship_obstacle__Q29daComing25Act_cFP4cXyz */
|
|
BOOL daComing2::Act_c::no_ship_obstacle(cXyz* pos) {
|
|
static dBgS_ObjLinChk M_wall_work;
|
|
M_wall_work.Set(¤t.pos, pos, NULL);
|
|
if (!dComIfG_Bgsp()->LineCross(&M_wall_work)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
struct SafetyCallback {
|
|
/* 0x00 */ cXyz* pos;
|
|
/* 0x04 */ BOOL ret;
|
|
}; // size = 0x08
|
|
|
|
/* 00000AB8-00000B50 .text position_is_safety_call_back__9daComing2FPvPv */
|
|
void* daComing2::position_is_safety_call_back(void* ac, void* cb) {
|
|
SafetyCallback* callback = (SafetyCallback*)cb;
|
|
|
|
if (fopAc_IsActor(ac)) {
|
|
fopAc_ac_c* actor = (fopAc_ac_c*)ac;
|
|
if (fopAcM_GetGroup(actor) == fopAc_ENEMY_e) {
|
|
f32 x = actor->current.pos.x - callback->pos->x;
|
|
f32 z = actor->current.pos.z - callback->pos->z;
|
|
if (x * x + z * z < 200.0f) {
|
|
callback->ret = FALSE;
|
|
return NULL;
|
|
}
|
|
}
|
|
}
|
|
return ac;
|
|
}
|
|
|
|
/* 00000B50-00000B98 .text position_is_none_obj__9daComing2FP4cXyz */
|
|
BOOL daComing2::position_is_none_obj(cXyz* pos) {
|
|
SafetyCallback callback;
|
|
callback.pos = pos;
|
|
callback.ret = TRUE;
|
|
fopAcM_Search(position_is_safety_call_back, &callback);
|
|
if (callback.ret == TRUE) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000B98-00000BD8 .text check_in_large_sea__Q29daComing25Act_cFPC4cXyz */
|
|
BOOL daComing2::Act_c::check_in_large_sea(const cXyz* pos) {
|
|
if (std::fabsf(pos->x) < 349000.0f && std::fabsf(pos->z) < 349000.0f) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000BD8-00000E60 .text get_water_height__Q29daComing25Act_cFPfPC4cXyz */
|
|
BOOL daComing2::Act_c::get_water_height(float* outHeight, const cXyz* pos) {
|
|
f32 waveHeight = -G_CM3D_F_INF;
|
|
|
|
if (daSea_ChkArea(pos->x, pos->z)) {
|
|
waveHeight = daSea_calcWave(pos->x, pos->z);
|
|
} else {
|
|
static dBgS_WtrChk wtr;
|
|
|
|
cXyz sp14(
|
|
pos->x,
|
|
pos->y - 1000.0f,
|
|
pos->z
|
|
);
|
|
|
|
wtr.Set(sp14, pos->y + 1000.0f);
|
|
|
|
if (dComIfG_Bgsp()->WaterChk(&wtr)) {
|
|
waveHeight = wtr.GetHeight();
|
|
}
|
|
}
|
|
|
|
*outHeight = waveHeight;
|
|
|
|
if (waveHeight > -G_CM3D_F_INF) {
|
|
static dBgS_ObjGndChk gnd_work;
|
|
|
|
cXyz sp08 = *pos;
|
|
sp08.y += 20000.0f;
|
|
|
|
gnd_work.SetPos(&sp08);
|
|
if (dComIfG_Bgsp()->GroundCross(&gnd_work) > waveHeight - 100.0f) {
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 0000125C-00001294 .text init_barrelN_info__Q29daComing25Act_cFi */
|
|
void daComing2::Act_c::init_barrelN_info(int idx) {
|
|
mBarrelInfo[idx].unk_00 = fpcM_ERROR_PROCESS_ID_e;
|
|
mBarrelInfo[idx].unk_04 = 0;
|
|
mBarrelInfo[idx].unk_06 = 0;
|
|
mBarrelInfo[idx].unk_08 = current.pos;
|
|
}
|
|
|
|
/* 00001294-000012E0 .text init_barrel_info__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::init_barrel_info() {
|
|
for (u32 i = 0; i < 15; i++) {
|
|
init_barrelN_info(i);
|
|
}
|
|
}
|
|
|
|
/* 000012E0-000012F0 .text init_flag_info__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::init_flag_info() {
|
|
mStartBuoy[0].unk_00 = -1;
|
|
mStartBuoy[1].unk_00 = -1;
|
|
}
|
|
|
|
/* 000012F0-00001354 .text init_coming_info__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::init_coming_info() {
|
|
unk_2A4 = 0;
|
|
unk_2A6 = 600;
|
|
unk_29C = (s32)cM_rndF(2.0f) & 1;
|
|
unk_29A = 0;
|
|
unk_2A8 = 0;
|
|
}
|
|
|
|
/* 00001354-0000141C .text make_coming_param__Q29daComing25Act_cFP4cXyzPQ212daObjBarrel26Type_ePiPb */
|
|
BOOL daComing2::Act_c::make_coming_param(cXyz* outPos, daObjBarrel2::Type_e* outType, int* outDroppedItem, bool* outHasFlag) {
|
|
cXyz sp0C = unk_4A8;
|
|
|
|
if (get_water_height(&sp0C.y, &sp0C)) {
|
|
*outPos = sp0C;
|
|
|
|
*outType = daObjBarrel2::Type_01_e;
|
|
*outHasFlag = false;
|
|
|
|
*outDroppedItem = (unk_2A4 < 0xFu) ? coming_make_item_no_table[unk_2A4] : dItemNo_RECOVER_FAIRY_e;
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 0000141C-00001488 .text request_barrel_exitN__Q29daComing25Act_cFi */
|
|
BOOL daComing2::Act_c::request_barrel_exitN(int idx) {
|
|
fpc_ProcID barrelProc = mBarrelInfo[idx].unk_00;
|
|
daObjBarrel2::Act_c* barrel;
|
|
|
|
if (barrelProc != fpcM_ERROR_PROCESS_ID_e) {
|
|
if (fopAcM_SearchByID(barrelProc, (fopAc_ac_c**)&barrel) != NULL && barrel != NULL) {
|
|
barrel->exit_req();
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
} else {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00001488-000014F0 .text request_all_barrel_exit__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::request_all_barrel_exit() {
|
|
u32 i;
|
|
s32 count = 0;
|
|
for (i = 0; i < 15; i++) {
|
|
if (request_barrel_exitN(i)) {
|
|
count++;
|
|
}
|
|
}
|
|
return count == 15 ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 000014F0-00001610 .text checkLineCrossXZ__9daComing2FP4cXyzP4cXyzP4cXyzP4cXyz */
|
|
BOOL daComing2::checkLineCrossXZ(cXyz* arg0, cXyz* arg1, cXyz* arg2, cXyz* arg3) {
|
|
cXyz sp44(arg1->x - arg0->x, 0.0f, arg1->z - arg0->z);
|
|
cXyz sp38(arg2->x - arg0->x, 0.0f, arg2->z - arg0->z);
|
|
cXyz sp2C(arg3->x - arg0->x, 0.0f, arg3->z - arg0->z);
|
|
|
|
if ((sp44.x * sp38.z - sp44.z * sp38.x) * (sp44.x * sp2C.z - sp44.z * sp2C.x) < 0.0f) {
|
|
cXyz sp20(arg2->x - arg3->x, 0.0f, arg2->z - arg3->z);
|
|
cXyz sp14(arg0->x - arg3->x, 0.0f, arg0->z - arg3->z);
|
|
cXyz sp08(arg1->x - arg3->x, 0.0f, arg1->z - arg3->z);
|
|
|
|
if ((sp20.x * sp14.z - sp20.z * sp14.x) * (sp20.x * sp08.z - sp20.z * sp08.x) < 0.0f) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00001610-000016C4 .text request_all_flag_exit__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::request_all_flag_exit() {
|
|
for (s32 i = 0; i < 2; i++) {
|
|
fpc_ProcID buoyProc = mStartBuoy[i].unk_00;
|
|
daObjBarrel2::Act_c* buoy;
|
|
|
|
if (buoyProc != fpcM_ERROR_PROCESS_ID_e && fopAcM_SearchByID(buoyProc, (fopAc_ac_c**)&buoy) != NULL && buoy != NULL) {
|
|
buoy->exit_req();
|
|
mStartBuoy[i].unk_00 = fpcM_ERROR_PROCESS_ID_e;
|
|
}
|
|
}
|
|
|
|
if ((mStartBuoy[0].unk_00 == fpcM_ERROR_PROCESS_ID_e) && (mStartBuoy[1].unk_00 == fpcM_ERROR_PROCESS_ID_e)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 000016C4-000017E0 .text barrel_execute__Q29daComing25Act_cFi */
|
|
void daComing2::Act_c::barrel_execute(int idx) {
|
|
fpc_ProcID barrelProc = mBarrelInfo[idx].unk_00;
|
|
daObjBarrel2::Act_c* barrel;
|
|
|
|
if (barrelProc != fpcM_ERROR_PROCESS_ID_e) {
|
|
if ((BOOL)fopAcM_SearchByID(barrelProc, (fopAc_ac_c**)&barrel) == TRUE) {
|
|
if (barrel != NULL) {
|
|
mBarrelInfo[idx].unk_06 = barrel->chk_item_give();
|
|
}
|
|
|
|
if (mBarrelInfo[idx].unk_04 == 0) {
|
|
request_barrel_exitN(idx);
|
|
} else if (mBarrelInfo[idx].unk_04 > 0) {
|
|
mBarrelInfo[idx].unk_04--;
|
|
}
|
|
} else if (mBarrelInfo[idx].unk_06 == 0) {
|
|
init_barrelN_info(idx);
|
|
coming_process_init(0);
|
|
}
|
|
|
|
if (mBarrelInfo[idx].unk_06 == 1) {
|
|
if (unk_2A4 >= 15u) {
|
|
coming_process_init(0);
|
|
} else {
|
|
request_barrel_exitN(idx);
|
|
init_barrelN_info(idx);
|
|
unk_29A = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000017E0-0000182C .text barrel_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::barrel_main() {
|
|
for (u32 i = 0; i < 15; i++) {
|
|
barrel_execute(i);
|
|
}
|
|
}
|
|
|
|
/* 0000182C-00001850 .text coming_clear_init__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::coming_clear_init() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (player != NULL) {
|
|
unk_299 = player->current.roomNo;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001850-000018B8 .text coming_clear_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_clear_main() {
|
|
if (request_all_barrel_exit() && request_all_flag_exit()) {
|
|
init_barrel_info();
|
|
init_coming_info();
|
|
init_flag_info();
|
|
coming_process_init(1);
|
|
}
|
|
}
|
|
|
|
/* 000018B8-000018D0 .text coming_wait_init__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::coming_wait_init() {
|
|
unk_2A6 = 600;
|
|
unk_2A4 = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000018D0-000019D4 .text coming_wait_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_wait_main() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (player != NULL) {
|
|
if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) {
|
|
if (unk_2A0 > 35.0f && get_coming_point() >= 2) {
|
|
if (unk_2A6 > 0) {
|
|
unk_2A6--;
|
|
}
|
|
|
|
if (unk_299 != fopAcM_GetRoomNo(player) && unk_2A6 == 0) {
|
|
mStartStat.unk_00 = shape_angle.y;
|
|
unk_440 = current.pos;
|
|
coming_process_init(2);
|
|
}
|
|
} else {
|
|
coming_process_init(1);
|
|
}
|
|
} else {
|
|
unk_299 = player->current.roomNo;
|
|
coming_process_init(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 000019D4-00001A7C .text coming_setF_init__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::coming_setF_init() {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (player != NULL) {
|
|
unk_298 = player->current.roomNo;
|
|
minus_coming_point2();
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00001A7C-00001CB8 .text coming_setF_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_setF_main() {
|
|
Mtx sp4C;
|
|
cXyz sp34[2];
|
|
cXyz sp28;
|
|
cXyz sp1C;
|
|
cXyz sp10;
|
|
|
|
f32 local_a0 = 0.0f;
|
|
while (std::fabsf(local_a0) <= 700.0f) {
|
|
local_a0 = cM_rndFX(1600.0f);
|
|
}
|
|
|
|
f32 z = unk_2A0 * 120.0f;
|
|
|
|
sp1C.x = local_a0 + 500.0f;
|
|
sp1C.y = 0.0f;
|
|
sp1C.z = z;
|
|
|
|
sp34[0].x = local_a0 + 500.0f;
|
|
sp34[0].y = 0.0f;
|
|
sp34[0].z = z;
|
|
|
|
sp10.x = local_a0 + -500.0f;
|
|
sp10.y = 0.0f;
|
|
sp10.z = z;
|
|
|
|
sp34[1].x = local_a0 + -500.0f;
|
|
sp34[1].y = 0.0f;
|
|
sp34[1].z = z;
|
|
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(shape_angle.y);
|
|
MTXCopy(mDoMtx_stack_c::get(), sp4C);
|
|
|
|
for (s32 i = 0; i < 2; i++) {
|
|
if (mStartBuoy[i].unk_00 == fpcM_ERROR_PROCESS_ID_e) {
|
|
cMtx_multVec(sp4C, &sp34[i], &sp28);
|
|
if (get_water_height(&sp28.y, &sp28) && check_in_large_sea(&sp28) &&
|
|
position_is_none_obj(&sp28) && no_ship_obstacle(&sp28)) {
|
|
daObjBarrel2::Type_e type(daObjBarrel2::Type_01_e);
|
|
fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(
|
|
&sp28,
|
|
-1,
|
|
DEMO_SELECT(daObjBarrel2::Type_01_e, type),
|
|
0x3F,
|
|
true,
|
|
mStartStat.unk_00,
|
|
daObjBuoyflag::Texture_01_e
|
|
);
|
|
mStartBuoy[i].unk_00 = barrel;
|
|
if (barrel != fpcM_ERROR_PROCESS_ID_e) {
|
|
mStartBuoy[i].unk_04 = sp28;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((mStartBuoy[0].unk_00 != fpcM_ERROR_PROCESS_ID_e) && (mStartBuoy[1].unk_00 != fpcM_ERROR_PROCESS_ID_e)) {
|
|
coming_process_init(3);
|
|
} else {
|
|
coming_process_init(0);
|
|
}
|
|
}
|
|
|
|
/* 00001CB8-00001CC8 .text coming_checkS_init__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::coming_checkS_init() {
|
|
unk_46C = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001CC8-00001D60 .text coming_checkS_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_checkS_main() {
|
|
if (unk_46C < 0xB4) {
|
|
if (checkLineCrossXZ(&old.pos, ¤t.pos, &mStartBuoy[0].unk_04, &mStartBuoy[1].unk_04)) {
|
|
request_all_flag_exit();
|
|
coming_process_init(4);
|
|
}
|
|
unk_46C++;
|
|
} else {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
if (player != NULL) {
|
|
unk_299 = player->current.roomNo;
|
|
coming_process_init(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00001D60-00001D8C .text coming_game_init__Q29daComing25Act_cFv */
|
|
BOOL daComing2::Act_c::coming_game_init() {
|
|
unk_29A = 1;
|
|
unk_2A8 = 0;
|
|
unk_299 = unk_298;
|
|
unk_294++;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001D8C-00001F58 .text coming_game_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_game_main() {
|
|
cXyz sp1C;
|
|
daObjBarrel2::Type_e type;
|
|
int droppedItem;
|
|
bool hasFlag;
|
|
u32 unk294 = unk_2A4;
|
|
|
|
if (unk294 >= 15) {
|
|
return;
|
|
}
|
|
|
|
if (unk_29A == 1) {
|
|
if ((mBarrelInfo[unk_2A4].unk_00 == fpcM_ERROR_PROCESS_ID_e && make_coming_param(&sp1C, &type, &droppedItem, &hasFlag))) {
|
|
if (check_in_large_sea(&sp1C) != 0) {
|
|
if (position_is_none_obj(&sp1C) && no_ship_obstacle(&sp1C)) {
|
|
fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(
|
|
&sp1C,
|
|
-1,
|
|
type,
|
|
droppedItem,
|
|
hasFlag,
|
|
mStartStat.unk_00,
|
|
daObjBuoyflag::Texture_00_e
|
|
);
|
|
mBarrelInfo[unk_2A4].unk_00 = barrel;
|
|
if (barrel != fpcM_ERROR_PROCESS_ID_e) {
|
|
unk_29A = 0;
|
|
mBarrelInfo[unk294].unk_06 = 0;
|
|
mBarrelInfo[unk_2A4].unk_08 = sp1C;
|
|
mBarrelInfo[unk_2A4].unk_04 = 0x93 - unk_2A4;
|
|
unk_2A8 = 0;
|
|
unk_2A4++;
|
|
}
|
|
}
|
|
} else {
|
|
coming_process_init(0);
|
|
}
|
|
}
|
|
|
|
if (unk_2A8++ >= 60) {
|
|
coming_process_init(0);
|
|
}
|
|
} else {
|
|
unk_2A8 = 0;
|
|
}
|
|
}
|
|
|
|
/* 00001F58-00002070 .text coming_process_init__Q29daComing25Act_cFs */
|
|
bool daComing2::Act_c::coming_process_init(short arg1) {
|
|
typedef BOOL (daComing2::Act_c::*init_func)();
|
|
static init_func init_table[5] = {
|
|
&daComing2::Act_c::coming_clear_init,
|
|
&daComing2::Act_c::coming_wait_init,
|
|
&daComing2::Act_c::coming_setF_init,
|
|
&daComing2::Act_c::coming_checkS_init,
|
|
&daComing2::Act_c::coming_game_init
|
|
};
|
|
|
|
if (arg1 >= 0 && arg1 < 5) {
|
|
if ((this->*init_table[arg1])()) {
|
|
unk_46E = arg1;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 00002070-00002154 .text coming_process_main__Q29daComing25Act_cFv */
|
|
void daComing2::Act_c::coming_process_main() {
|
|
typedef void (daComing2::Act_c::*main_func)();
|
|
static main_func main_table[5] = {
|
|
&daComing2::Act_c::coming_clear_main,
|
|
&daComing2::Act_c::coming_wait_main,
|
|
&daComing2::Act_c::coming_setF_main,
|
|
&daComing2::Act_c::coming_checkS_main,
|
|
&daComing2::Act_c::coming_game_main
|
|
};
|
|
|
|
if (unk_46E >= 0 && unk_46E < 5) {
|
|
(this->*main_table[unk_46E])();
|
|
}
|
|
}
|
|
|
|
/* 00002154-00002264 .text _create__Q29daComing25Act_cFv */
|
|
cPhs_State daComing2::Act_c::_create() {
|
|
fopAcM_ct(this, daComing2::Act_c);
|
|
unk_299 = -1;
|
|
init_barrel_info();
|
|
init_coming_info();
|
|
init_flag_info();
|
|
coming_process_init(0);
|
|
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
|
|
mStartStat.unk_00 = shape_angle.y;
|
|
unk_440.x = current.pos.x;
|
|
unk_440.y = current.pos.y;
|
|
unk_440.z = current.pos.z;
|
|
|
|
if (player != NULL) {
|
|
unk_299 = player->current.roomNo;
|
|
}
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 000022E4-000022EC .text _delete__Q29daComing25Act_cFv */
|
|
bool daComing2::Act_c::_delete() {
|
|
return true;
|
|
}
|
|
|
|
/* 000022EC-000023B0 .text _execute__Q29daComing25Act_cFv */
|
|
bool daComing2::Act_c::_execute() {
|
|
daShip_c* ship = (daShip_c*)fopAcM_SearchByID(fopAcM_GetLinkId(this));
|
|
if (ship != NULL) {
|
|
chase_ship();
|
|
renew_scope_info();
|
|
if (dComIfGp_event_runCheck() || ship->getTornadoActor() != NULL || ship->getWhirlActor() != NULL) {
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
unk_299 = player->current.roomNo;
|
|
coming_process_init(0);
|
|
} else {
|
|
coming_process_main();
|
|
}
|
|
barrel_main();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 000023B0-000023B8 .text _draw__Q29daComing25Act_cFv */
|
|
bool daComing2::Act_c::_draw() {
|
|
return true;
|
|
}
|
|
|
|
namespace daComing2 {
|
|
namespace {
|
|
/* 000023B8-000023D8 .text Mthd_Create__Q29daComing225@unnamed@d_a_coming2_cpp@FPv */
|
|
cPhs_State Mthd_Create(void* i_this) {
|
|
return ((daComing2::Act_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 000023D8-000023FC .text Mthd_Delete__Q29daComing225@unnamed@d_a_coming2_cpp@FPv */
|
|
BOOL Mthd_Delete(void* i_this) {
|
|
return ((daComing2::Act_c*)i_this)->_delete();
|
|
}
|
|
|
|
/* 000023FC-00002420 .text Mthd_Execute__Q29daComing225@unnamed@d_a_coming2_cpp@FPv */
|
|
BOOL Mthd_Execute(void* i_this) {
|
|
return ((daComing2::Act_c*)i_this)->_execute();
|
|
}
|
|
|
|
/* 00002420-00002444 .text Mthd_Draw__Q29daComing225@unnamed@d_a_coming2_cpp@FPv */
|
|
BOOL Mthd_Draw(void* i_this) {
|
|
return ((daComing2::Act_c*)i_this)->_draw();
|
|
}
|
|
|
|
/* 00002444-0000244C .text Mthd_IsDelete__Q29daComing225@unnamed@d_a_coming2_cpp@FPv */
|
|
BOOL Mthd_IsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
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 daComing2
|
|
|
|
actor_process_profile_definition g_profile_Coming2 = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_Coming2_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daComing2::Act_c),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_Coming2_e,
|
|
/* Actor SubMtd */ &daComing2::Mthd_Table,
|
|
/* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* Cull Type */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|