mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-02 17:53:06 -04:00
+1
-1
@@ -1358,7 +1358,7 @@ config.libs = [
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_bita", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(Matching, "d_a_branch"),
|
||||
ActorRel(NonMatching, "d_a_bridge"),
|
||||
ActorRel(NonMatching, "d_a_coming2"),
|
||||
ActorRel(Matching, "d_a_coming2", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(NonMatching, "d_a_coming3"),
|
||||
ActorRel(NonMatching, "d_a_demo_dk"),
|
||||
ActorRel(NonMatching, "d_a_demo_kmm"),
|
||||
|
||||
@@ -3,47 +3,77 @@
|
||||
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/actor/d_a_obj_barrel2.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
|
||||
namespace daComing2 {
|
||||
static void get_speed(fopAc_ac_c*);
|
||||
static void position_is_safety_call_back(void*, void*);
|
||||
static void position_is_none_obj(cXyz*);
|
||||
static void checkLineCrossXZ(cXyz*, cXyz*, cXyz*, cXyz*);
|
||||
static f32 get_speed(fopAc_ac_c*);
|
||||
static void* position_is_safety_call_back(void*, void*);
|
||||
static BOOL position_is_none_obj(cXyz*);
|
||||
static BOOL checkLineCrossXZ(cXyz*, cXyz*, cXyz*, cXyz*);
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
class _barrel_info_ {
|
||||
public:
|
||||
void get_coming_point() {}
|
||||
/* 0x00 */ fpc_ProcID unk_00;
|
||||
/* 0x04 */ s16 unk_04;
|
||||
/* 0x06 */ u8 unk_06;
|
||||
/* 0x08 */ cXyz unk_08;
|
||||
}; // size = 0x14
|
||||
|
||||
struct _start_stat_ {
|
||||
/* 0x00 */ s16 unk_00;
|
||||
}; // size = 0x2?
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
class _start_buoy_ {
|
||||
public:
|
||||
/* 0x00 */ fpc_ProcID unk_00;
|
||||
/* 0x04 */ cXyz unk_04;
|
||||
}; // size = 0x10
|
||||
|
||||
public:
|
||||
virtual ~Act_c() {}
|
||||
|
||||
s32 get_coming_point() {
|
||||
return dComIfGs_getEventReg(0x7EFF);
|
||||
}
|
||||
void init_coming_point() {}
|
||||
void minus_coming_point1() {}
|
||||
void minus_coming_point2() {}
|
||||
void minus_coming_point1() {
|
||||
s32 evnt = dComIfGs_getEventReg(0x7EFF);
|
||||
u8 evnt2 = (evnt - 1 < 0) ? 0 : evnt - 1;
|
||||
dComIfGs_setEventReg(0x7EFF, evnt2);
|
||||
}
|
||||
void minus_coming_point2() {
|
||||
minus_coming_point1();
|
||||
minus_coming_point1();
|
||||
}
|
||||
void pluss_coming_point1() {}
|
||||
|
||||
void chase_ship();
|
||||
void renew_scope_info();
|
||||
void no_ship_obstacle(cXyz*);
|
||||
void check_in_large_sea(const cXyz*);
|
||||
void get_water_height(float*, const cXyz*);
|
||||
BOOL no_ship_obstacle(cXyz*);
|
||||
BOOL check_in_large_sea(const cXyz*);
|
||||
BOOL get_water_height(float*, const cXyz*);
|
||||
void init_barrelN_info(int);
|
||||
void init_barrel_info();
|
||||
void init_flag_info();
|
||||
void init_coming_info();
|
||||
void make_coming_param(cXyz*, daObjBarrel2::Type_e*, int*, bool*);
|
||||
void request_barrel_exitN(int);
|
||||
void request_all_barrel_exit();
|
||||
void request_all_flag_exit();
|
||||
BOOL make_coming_param(cXyz*, daObjBarrel2::Type_e*, int*, bool*);
|
||||
BOOL request_barrel_exitN(int);
|
||||
BOOL request_all_barrel_exit();
|
||||
BOOL request_all_flag_exit();
|
||||
void barrel_execute(int);
|
||||
void barrel_main();
|
||||
void coming_clear_init();
|
||||
BOOL coming_clear_init();
|
||||
void coming_clear_main();
|
||||
void coming_wait_init();
|
||||
BOOL coming_wait_init();
|
||||
void coming_wait_main();
|
||||
void coming_setF_init();
|
||||
BOOL coming_setF_init();
|
||||
void coming_setF_main();
|
||||
void coming_checkS_init();
|
||||
BOOL coming_checkS_init();
|
||||
void coming_checkS_main();
|
||||
void coming_game_init();
|
||||
BOOL coming_game_init();
|
||||
void coming_game_main();
|
||||
void coming_process_init(short);
|
||||
bool coming_process_init(short);
|
||||
void coming_process_main();
|
||||
cPhs_State _create();
|
||||
bool _delete();
|
||||
@@ -51,8 +81,29 @@ namespace daComing2 {
|
||||
bool _draw();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x290 */ // vtbl
|
||||
/* 0x294 */ s32 unk_294;
|
||||
/* 0x298 */ s8 unk_298;
|
||||
/* 0x299 */ s8 unk_299;
|
||||
/* 0x29A */ s16 unk_29A;
|
||||
/* 0x29C */ s16 unk_29C;
|
||||
/* 0x29E */ char unk29E[0x2];
|
||||
/* 0x2A0 */ f32 unk_2A0;
|
||||
/* 0x2A4 */ s16 unk_2A4;
|
||||
/* 0x2A6 */ s16 unk_2A6;
|
||||
/* 0x2A8 */ s16 unk_2A8;
|
||||
/* 0x2AA */ s16 unk_2AA;
|
||||
/* 0x2AC */ _barrel_info_ mBarrelInfo[20];
|
||||
/* 0x43C */ _start_stat_ mStartStat;
|
||||
/* 0x440 */ cXyz unk_440;
|
||||
/* 0x44C */ _start_buoy_ mStartBuoy[2];
|
||||
/* 0x46C */ s16 unk_46C;
|
||||
/* 0x46E */ s16 unk_46E;
|
||||
/* 0x470 */ char unk470[0x6];
|
||||
/* 0x476 */ u8 unk_476;
|
||||
/* 0x477 */ char unk477[0x31];
|
||||
/* 0x4A8 */ cXyz unk_4A8;
|
||||
}; // size = 0x4B4
|
||||
};
|
||||
|
||||
#endif /* D_A_COMING2_H */
|
||||
|
||||
@@ -7,19 +7,29 @@
|
||||
|
||||
namespace daObjBarrel2 {
|
||||
enum Type_e {
|
||||
|
||||
Type_01_e = 0x1,
|
||||
};
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
|
||||
void attr() const {}
|
||||
void chk_item_give() const {}
|
||||
u8 chk_item_give() const {
|
||||
return unk_476;
|
||||
}
|
||||
void delete_req() {}
|
||||
void exit_req() {}
|
||||
void get_item_id() {}
|
||||
void make_coming(cXyz*, int, Type_e, int, bool, short, daObjBuoyflag::Texture_e) {}
|
||||
void make_prm(Type_e, int, bool, bool, daObjBuoyflag::Texture_e) {}
|
||||
static fpc_ProcID make_coming(cXyz* pos, int flagType, Type_e type, int droppedItem, bool hasFlag, short angleY, daObjBuoyflag::Texture_e arg6) {
|
||||
csXyz angle(0, angleY, 0);
|
||||
return fopAcM_create(PROC_Obj_Barrel2, make_prm(type, droppedItem, hasFlag, flagType ? 1 : 0, arg6), pos, -1, &angle);
|
||||
}
|
||||
static u32 make_prm(Type_e arg0, int droppedItem, bool hasFlag, bool flagType, daObjBuoyflag::Texture_e arg4) {
|
||||
s32 item = (droppedItem & 0x3F);
|
||||
s32 tmp = hasFlag ? 0 : 1;
|
||||
s32 a6 = arg4;
|
||||
return (item | (0x7F << 16)) | (arg0 << 24) | (tmp << 8) | (flagType << 10) | (a6 << 28);
|
||||
}
|
||||
void prm_get_buoy() const {}
|
||||
void prm_get_coming() const {}
|
||||
void prm_get_itemNo() const {}
|
||||
@@ -77,7 +87,10 @@ namespace daObjBarrel2 {
|
||||
bool _draw();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
/* 0x290 */ char unk290[0x1E4];
|
||||
/* 0x474 */ u8 unk_474;
|
||||
/* 0x475 */ char unk475[0x1];
|
||||
/* 0x476 */ u8 unk_476;
|
||||
};
|
||||
|
||||
namespace Method {
|
||||
|
||||
@@ -10,10 +10,10 @@ namespace daObjBuoyflag {
|
||||
class Act_c;
|
||||
|
||||
enum Type_e {
|
||||
|
||||
|
||||
};
|
||||
enum Texture_e {
|
||||
|
||||
Texture_01_e = 0x1,
|
||||
};
|
||||
|
||||
class Packet_c {
|
||||
|
||||
+486
-54
@@ -6,180 +6,612 @@
|
||||
#include "d/actor/d_a_coming2.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_priority.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"
|
||||
#include "d/actor/d_a_obj_doguu.h"
|
||||
|
||||
#include "weak_bss_936_to_1036.h" // IWYU pragma: keep
|
||||
#include "weak_data_2100_2080.h" // IWYU pragma: keep
|
||||
#include "weak_data_1811.h" // IWYU pragma: keep
|
||||
|
||||
static s32 coming_make_item_no_table[] = {
|
||||
dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e, dItem_GREEN_RUPEE_e,
|
||||
dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e, dItem_BLUE_RUPEE_e,
|
||||
dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e, dItem_YELLOW_RUPEE_e
|
||||
};
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::get_speed(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::no_ship_obstacle(cXyz*) {
|
||||
/* Nonmatching */
|
||||
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*, void*) {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::position_is_none_obj(cXyz*) {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::check_in_large_sea(const cXyz*) {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::get_water_height(float*, const cXyz*) {
|
||||
/* Nonmatching */
|
||||
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) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::make_coming_param(cXyz*, daObjBarrel2::Type_e*, int*, bool*) {
|
||||
/* Nonmatching */
|
||||
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] : dItem_RECOVER_FAIRY_e;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 0000141C-00001488 .text request_barrel_exitN__Q29daComing25Act_cFi */
|
||||
void daComing2::Act_c::request_barrel_exitN(int) {
|
||||
/* Nonmatching */
|
||||
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->unk_474 = 1;
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 00001488-000014F0 .text request_all_barrel_exit__Q29daComing25Act_cFv */
|
||||
void daComing2::Act_c::request_all_barrel_exit() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::checkLineCrossXZ(cXyz*, cXyz*, cXyz*, cXyz*) {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::request_all_flag_exit() {
|
||||
/* Nonmatching */
|
||||
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->unk_474 = 1;
|
||||
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) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
for (u32 i = 0; i < 15; i++) {
|
||||
barrel_execute(i);
|
||||
}
|
||||
}
|
||||
|
||||
/* 0000182C-00001850 .text coming_clear_init__Q29daComing25Act_cFv */
|
||||
void daComing2::Act_c::coming_clear_init() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::coming_wait_init() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
if (player != NULL) {
|
||||
if (dComIfGp_checkPlayerStatus0(0, 0x10000)) {
|
||||
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 */
|
||||
void daComing2::Act_c::coming_setF_init() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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)) {
|
||||
#if VERSION == VERSION_DEMO
|
||||
fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(&sp28, 1, daObjBarrel2::Type_01_e, 0x3F, true, mStartStat.unk_00, daObjBuoyflag::Texture_01_e);
|
||||
#else
|
||||
daObjBarrel2::Type_e type(daObjBarrel2::Type_01_e);
|
||||
fpc_ProcID barrel = daObjBarrel2::Act_c::make_coming(&sp28, 1, type, 0x3F, true, mStartStat.unk_00, daObjBuoyflag::Texture_01_e);
|
||||
#endif
|
||||
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 */
|
||||
void daComing2::Act_c::coming_checkS_init() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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 */
|
||||
void daComing2::Act_c::coming_game_init() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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, 0, type, droppedItem, hasFlag, mStartStat.unk_00, daObjBuoyflag::Texture_01_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 */
|
||||
void daComing2::Act_c::coming_process_init(short) {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetupActor(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() {
|
||||
/* Nonmatching */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 000022EC-000023B0 .text _execute__Q29daComing25Act_cFv */
|
||||
bool daComing2::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
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() {
|
||||
/* Nonmatching */
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace daComing2 {
|
||||
|
||||
Reference in New Issue
Block a user