mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-10 22:31:52 -04:00
Link and match d_a_obj_correct (#782)
This commit is contained in:
+1
-1
@@ -1647,7 +1647,7 @@ config.libs = [
|
||||
ActorRel(NonMatching, "d_a_obj_auzu"),
|
||||
ActorRel(NonMatching, "d_a_obj_buoyflag"),
|
||||
ActorRel(NonMatching, "d_a_obj_buoyrace"),
|
||||
ActorRel(NonMatching, "d_a_obj_correct"),
|
||||
ActorRel(Matching, "d_a_obj_correct"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_dmgroom", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(Matching, "d_a_obj_dragonhead", extra_cflags=['-pragma "nosyminline on"']),
|
||||
ActorRel(NonMatching, "d_a_obj_drift"),
|
||||
|
||||
@@ -1,29 +1,55 @@
|
||||
#ifndef D_A_OBJ_CORRECT_H
|
||||
#define D_A_OBJ_CORRECT_H
|
||||
|
||||
#include "d/d_a_obj.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "d/actor/d_a_obj_try.h"
|
||||
|
||||
namespace daObjCorrect {
|
||||
enum Type_e {
|
||||
UNK_4 = 4,
|
||||
UNK_5 = 5,
|
||||
};
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
void prm_get_evId() const {}
|
||||
void prm_get_swSave() const {}
|
||||
void prm_get_type() const {}
|
||||
typedef void(Act_c::*ModeProcFunc)();
|
||||
typedef void(Act_c::*DemoProcFunc)();
|
||||
|
||||
enum Prm_e {
|
||||
PRM_EV_ID_S = 0x10,
|
||||
PRM_EV_ID_W = 8,
|
||||
|
||||
PRM_SWSAVE_S = 8,
|
||||
PRM_SWSAVE_W = 8,
|
||||
|
||||
PRM_TYPE_S = 0,
|
||||
PRM_TYPE_W = 4,
|
||||
};
|
||||
|
||||
u8 prm_get_evId() const {
|
||||
return daObj::PrmAbstract(this, PRM_EV_ID_W, PRM_EV_ID_S);
|
||||
}
|
||||
int prm_get_swSave() const {
|
||||
return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S);
|
||||
}
|
||||
int prm_get_type() const {
|
||||
return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S);
|
||||
}
|
||||
|
||||
cPhs_State _create();
|
||||
bool _delete();
|
||||
void chk_try_actor0(fopAc_ac_c*);
|
||||
void chk_try_actor1(daObjTry::Act_c*, daObjTry::Type_e, float) const;
|
||||
void chk_try_actor2(daObjTry::Act_c*, daObjTry::Type_e, bool, float, float) const;
|
||||
void search_movebox(void*, void*);
|
||||
void search_tryColSun(void*, void*);
|
||||
void search_tryColMer(void*, void*);
|
||||
void search_tryColJup(void*, void*);
|
||||
void search_tryKeyGate(void*, void*);
|
||||
void search_tryKeyDoor(void*, void*);
|
||||
void search_tryColGreen(void*, void*);
|
||||
void search_tryColBlue(void*, void*);
|
||||
static daObjTry::Act_c* chk_try_actor0(fopAc_ac_c*);
|
||||
void* chk_try_actor1(daObjTry::Act_c*, daObjTry::Type_e, float) const;
|
||||
void* chk_try_actor2(daObjTry::Act_c*, daObjTry::Type_e, bool, float, float) const;
|
||||
static void* search_movebox(void*, void*);
|
||||
static void* search_tryColSun(void*, void*);
|
||||
static void* search_tryColMer(void*, void*);
|
||||
static void* search_tryColJup(void*, void*);
|
||||
static void* search_tryKeyGate(void*, void*);
|
||||
static void* search_tryKeyDoor(void*, void*);
|
||||
static void* search_tryColGreen(void*, void*);
|
||||
static void* search_tryColBlue(void*, void*);
|
||||
void mode_off_init();
|
||||
void mode_off();
|
||||
void mode_on_init();
|
||||
@@ -35,10 +61,20 @@ namespace daObjCorrect {
|
||||
void demo_run_init();
|
||||
void demo_run();
|
||||
bool _execute();
|
||||
|
||||
const static fopAcIt_JudgeFunc M_search_proc[];
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
};
|
||||
/* 0x290 */ s16 field_0x290;
|
||||
/* 0x294 */ s32 field_0x294;
|
||||
/* 0x298 */ s32 field_0x298;
|
||||
/* 0x29C */ Type_e mType;
|
||||
/* 0x2A0 */ s16 mEventIdx;
|
||||
/* 0x2A4 */ f32 field_0x2A4;
|
||||
}; // Size: 0x2A8
|
||||
|
||||
STATIC_ASSERT(sizeof(Act_c) == 0x2A8);
|
||||
|
||||
} // namespace daObjCorrect
|
||||
|
||||
#endif /* D_A_OBJ_CORRECT_H */
|
||||
|
||||
@@ -1,21 +1,49 @@
|
||||
#ifndef D_A_OBJ_TRY_H
|
||||
#define D_A_OBJ_TRY_H
|
||||
|
||||
#include "d/d_a_obj.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
|
||||
namespace daObjTry {
|
||||
enum Type_e {
|
||||
|
||||
UNK_2 = 2,
|
||||
UNK_3 = 3,
|
||||
UNK_4 = 4,
|
||||
UNK_5 = 5,
|
||||
UNK_6 = 6,
|
||||
UNK_7 = 7,
|
||||
UNK_8 = 8,
|
||||
UNK_9 = 9,
|
||||
UNK_10 = 10,
|
||||
UNK_11 = 11,
|
||||
UNK_12 = 12,
|
||||
};
|
||||
|
||||
class Act_c : public fopAc_ac_c {
|
||||
public:
|
||||
enum Prm_e {
|
||||
PRM_SWSAVE_S = 8,
|
||||
PRM_SWSAVE_W = 8,
|
||||
|
||||
PRM_TYPE_S = 0,
|
||||
PRM_TYPE_W = 4,
|
||||
};
|
||||
|
||||
void attr() const {}
|
||||
void prm_chk_type_tryStatue() const {}
|
||||
void prm_get_dummy() const {}
|
||||
void prm_get_swSave() const {}
|
||||
void prm_get_type() const {}
|
||||
void to_correct_pos(const cXyz*, short, bool, bool) {}
|
||||
int prm_get_swSave() const {
|
||||
return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S);
|
||||
}
|
||||
int prm_get_type() const {
|
||||
return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S);
|
||||
}
|
||||
void to_correct_pos(const cXyz* param_1, short param_2, bool param_3, bool param_4) {
|
||||
field_0x63C.set(*param_1);
|
||||
field_0x648 = param_2;
|
||||
field_0x64C = param_3;
|
||||
field_0x64D = param_4;
|
||||
}
|
||||
|
||||
void prm_set_swSave(int);
|
||||
void solidHeapCB(fopAc_ac_c*);
|
||||
@@ -62,8 +90,14 @@ namespace daObjTry {
|
||||
bool _draw();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x290 */ u8 field_0x290[0x63C - 0x290];
|
||||
/* 0x63C */ cXyz field_0x63C;
|
||||
/* 0x648 */ s16 field_0x648;
|
||||
/* 0x64A */ u8 field_0x64A[0x64C - 0x64A];
|
||||
/* 0x64C */ s8 field_0x64C;
|
||||
/* 0x64D */ s8 field_0x64D;
|
||||
/* 0x64E */ u8 field_0x64E[0x66C - 0x64E];
|
||||
}; // Size: 0x66C
|
||||
};
|
||||
|
||||
#endif /* D_A_OBJ_TRY_H */
|
||||
|
||||
+307
-43
@@ -3,155 +3,419 @@
|
||||
// Translation Unit: d_a_obj_correct.cpp
|
||||
//
|
||||
|
||||
// This include needs to be before d_a_obj_correct.h for ordering of the
|
||||
// daObj::PrmAbstract symbols.
|
||||
#include "d/actor/d_a_obj_movebox.h"
|
||||
|
||||
#include "d/actor/d_a_obj_correct.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_priority.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
|
||||
#include "weak_data_1811.h" // IWYU pragma: keep
|
||||
|
||||
namespace daObjCorrect {
|
||||
namespace {
|
||||
|
||||
struct Attr_c {
|
||||
/* 0x00 */ const char* name;
|
||||
/* 0x04 */ f32 field_0x4;
|
||||
/* 0x08 */ f32 field_0x8;
|
||||
/* 0x0C */ f32 field_0xC;
|
||||
};
|
||||
|
||||
const char L_ev_CrTrM1[] = "CrTrM1_put";
|
||||
const char L_ev_CrTrM2[] = "CrTrM2_put";
|
||||
|
||||
const Attr_c L_attr[] = {
|
||||
{NULL, 9.0f, 16.0f, 0.0f},
|
||||
{NULL, 2500.0f, 2601.0f, 0.0f},
|
||||
{NULL, 2500.0f, 2601.0f, 0.0f},
|
||||
{NULL, 2500.0f, 2601.0f, 0.0f},
|
||||
{L_ev_CrTrM1, 9.0f, 100.0f, 5000.0f},
|
||||
{L_ev_CrTrM2, 9.0f, 100.0f, 5000.0f},
|
||||
{NULL, 9.0f, 100.0f, 3600.0f},
|
||||
{NULL, 9.0f, 100.0f, 3600.0f},
|
||||
};
|
||||
|
||||
inline static const Attr_c& attr(daObjCorrect::Type_e type) { return L_attr[type]; }
|
||||
|
||||
} // namespace
|
||||
} // namespace daObjCorrect
|
||||
|
||||
/* 00000078-000001B0 .text _create__Q212daObjCorrect5Act_cFv */
|
||||
cPhs_State daObjCorrect::Act_c::_create() {
|
||||
/* Nonmatching */
|
||||
int swSave = prm_get_swSave();
|
||||
|
||||
fopAcM_SetupActor(this, daObjCorrect::Act_c);
|
||||
|
||||
if (swSave == 0xFF) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
|
||||
mType = (daObjCorrect::Type_e) prm_get_type();
|
||||
fopAcM_offDraw(this);
|
||||
|
||||
if (fopAcM_isSwitch(this, swSave)) {
|
||||
mode_on_init();
|
||||
} else {
|
||||
mode_off_init();
|
||||
}
|
||||
|
||||
if (attr(mType).name != 0) {
|
||||
int evId = prm_get_evId();
|
||||
mEventIdx = dComIfGp_evmng_getEventIdx(attr(mType).name, evId);
|
||||
} else {
|
||||
mEventIdx = -1;
|
||||
}
|
||||
demo_non_init();
|
||||
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
/* 000001B0-000001B8 .text _delete__Q212daObjCorrect5Act_cFv */
|
||||
bool daObjCorrect::Act_c::_delete() {
|
||||
/* Nonmatching */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 000001B8-00000204 .text chk_try_actor0__Q212daObjCorrect5Act_cFP10fopAc_ac_c */
|
||||
void daObjCorrect::Act_c::chk_try_actor0(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
daObjTry::Act_c* daObjCorrect::Act_c::chk_try_actor0(fopAc_ac_c* actor) {
|
||||
if (fopAcM_IsActor(actor) && fopAcM_GetName(actor) == PROC_Obj_Try) {
|
||||
return (daObjTry::Act_c*) actor;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000204-000002E0 .text chk_try_actor1__Q212daObjCorrect5Act_cCFPQ28daObjTry5Act_cQ28daObjTry6Type_ef */
|
||||
void daObjCorrect::Act_c::chk_try_actor1(daObjTry::Act_c*, daObjTry::Type_e, float) const {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::chk_try_actor1(daObjTry::Act_c* actor, daObjTry::Type_e type, float i_sw_r_sq) const {
|
||||
if (type == actor->prm_get_type() && actor->current.pos.abs2(current.pos) < i_sw_r_sq) {
|
||||
if (prm_get_swSave() == actor->prm_get_swSave()) {
|
||||
actor->to_correct_pos(¤t.pos, shape_angle.y, true, true);
|
||||
return actor;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 000002E0-00000428 .text chk_try_actor2__Q212daObjCorrect5Act_cCFPQ28daObjTry5Act_cQ28daObjTry6Type_ebff */
|
||||
void daObjCorrect::Act_c::chk_try_actor2(daObjTry::Act_c*, daObjTry::Type_e, bool, float, float) const {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::chk_try_actor2(daObjTry::Act_c* actor, daObjTry::Type_e type, bool param_3, float i_sw_r_sq, float i_depression_r_sq) const {
|
||||
JUT_ASSERT(346, i_sw_r_sq <= i_depression_r_sq);
|
||||
|
||||
if (type == actor->prm_get_type()) {
|
||||
f32 dist = actor->current.pos.abs2(current.pos);
|
||||
if (dist < i_depression_r_sq) {
|
||||
|
||||
bool should_return;
|
||||
if (dist < i_sw_r_sq) {
|
||||
should_return = prm_get_swSave() == actor->prm_get_swSave();
|
||||
} else {
|
||||
should_return = false;
|
||||
}
|
||||
|
||||
actor->to_correct_pos(¤t.pos, shape_angle.y, should_return, param_3);
|
||||
if (should_return) {
|
||||
return actor;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000428-00000534 .text search_movebox__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_movebox(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_movebox(void* actor, void* user_data) {
|
||||
fopAc_ac_c* ac_actor = (fopAc_ac_c*) actor;
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
fpc_ProcID proc_id = fpcM_GetID(actor);
|
||||
if (!fpcM_IsCreating(proc_id)) {
|
||||
if (fopAcM_IsActor(actor) && fopAcM_GetName(actor) == PROC_Obj_Movebox) {
|
||||
daObjMovebox::Act_c* movebox = (daObjMovebox::Act_c*) actor;
|
||||
if (ac_actor->current.pos.abs2(correct->current.pos) < correct->field_0x2A4) {
|
||||
if (movebox->prm_get_swSave() == correct->prm_get_swSave() && movebox->prm_get_dmy() == 0) {
|
||||
correct->field_0x290 = 1;
|
||||
return ac_actor;
|
||||
}
|
||||
}
|
||||
correct->field_0x290 = 0;
|
||||
}
|
||||
} else {
|
||||
if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_Movebox) {
|
||||
correct->field_0x290 = 0;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000534-00000580 .text search_tryColSun__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryColSun(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryColSun(void* actor, void* user_data) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
return correct->chk_try_actor1(res, daObjTry::UNK_2, correct->field_0x2A4);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000580-000005CC .text search_tryColMer__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryColMer(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryColMer(void* actor, void* user_data) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
return correct->chk_try_actor1(res, daObjTry::UNK_3, correct->field_0x2A4);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 000005CC-00000618 .text search_tryColJup__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryColJup(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryColJup(void* actor, void* user_data) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
return correct->chk_try_actor1(res, daObjTry::UNK_4, correct->field_0x2A4);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000618-000006D0 .text search_tryKeyGate__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryKeyGate(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryKeyGate(void* actor, void* user_data) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
fpc_ProcID proc_id = fpcM_GetID(actor);
|
||||
|
||||
void* return_val = NULL;
|
||||
if (fpcM_IsCreating(proc_id)) {
|
||||
if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_Try) {
|
||||
correct->field_0x290 = 0;
|
||||
}
|
||||
} else {
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
return_val = correct->chk_try_actor2(
|
||||
res, daObjTry::UNK_5, true, correct->field_0x2A4,
|
||||
attr(correct->mType).field_0xC);
|
||||
}
|
||||
}
|
||||
|
||||
return return_val;
|
||||
}
|
||||
|
||||
/* 000006D0-00000788 .text search_tryKeyDoor__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryKeyDoor(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryKeyDoor(void* actor, void* user_data) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
fpc_ProcID proc_id = fpcM_GetID(actor);
|
||||
|
||||
void* return_val = NULL;
|
||||
if (fpcM_IsCreating(proc_id)) {
|
||||
if (actor != NULL && fopAcM_GetName(actor) == PROC_Obj_Try) {
|
||||
correct->field_0x290 = 0;
|
||||
}
|
||||
} else {
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
return_val = correct->chk_try_actor2(
|
||||
res, daObjTry::UNK_6, true, correct->field_0x2A4,
|
||||
attr(correct->mType).field_0xC);
|
||||
}
|
||||
}
|
||||
|
||||
return return_val;
|
||||
}
|
||||
|
||||
/* 00000788-00000834 .text search_tryColGreen__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryColGreen(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryColGreen(void* actor, void* user_data) {
|
||||
static const daObjTry::Type_e type[] = {
|
||||
daObjTry::UNK_7, daObjTry::UNK_8, daObjTry::UNK_9,
|
||||
daObjTry::UNK_10, daObjTry::UNK_11, daObjTry::UNK_12
|
||||
};
|
||||
|
||||
daObjTry::Act_c* res = chk_try_actor0((fopAc_ac_c*)actor);
|
||||
if (res != NULL) {
|
||||
daObjCorrect::Act_c* correct = (daObjCorrect::Act_c*) user_data;
|
||||
|
||||
void* return_val = NULL;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
void* actor_2 = correct->chk_try_actor2(res, type[i], true, correct->field_0x2A4, attr(correct->mType).field_0xC);
|
||||
if (actor_2) {
|
||||
return_val = res;
|
||||
}
|
||||
}
|
||||
|
||||
return return_val;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 00000834-00000854 .text search_tryColBlue__Q212daObjCorrect5Act_cFPvPv */
|
||||
void daObjCorrect::Act_c::search_tryColBlue(void*, void*) {
|
||||
/* Nonmatching */
|
||||
void* daObjCorrect::Act_c::search_tryColBlue(void* actor, void* user_data) {
|
||||
return search_tryColGreen(actor, user_data);
|
||||
}
|
||||
|
||||
/* 00000854-0000087C .text mode_off_init__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::mode_off_init() {
|
||||
/* Nonmatching */
|
||||
field_0x2A4 = attr(mType).field_0x8;
|
||||
field_0x294 = 0;
|
||||
}
|
||||
|
||||
|
||||
const fopAcIt_JudgeFunc daObjCorrect::Act_c::M_search_proc[] = {
|
||||
daObjCorrect::Act_c::search_movebox,
|
||||
daObjCorrect::Act_c::search_tryColSun,
|
||||
daObjCorrect::Act_c::search_tryColMer,
|
||||
daObjCorrect::Act_c::search_tryColJup,
|
||||
daObjCorrect::Act_c::search_tryKeyGate,
|
||||
daObjCorrect::Act_c::search_tryKeyDoor,
|
||||
daObjCorrect::Act_c::search_tryColGreen,
|
||||
daObjCorrect::Act_c::search_tryColBlue,
|
||||
};
|
||||
|
||||
/* 0000087C-0000090C .text mode_off__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::mode_off() {
|
||||
/* Nonmatching */
|
||||
field_0x290 = 1;
|
||||
fopAc_ac_c* res = fopAcM_Search(M_search_proc[mType], (void*) this);
|
||||
if (field_0x290 == 1 && res != NULL) {
|
||||
fopAcM_onSwitch(this, prm_get_swSave());
|
||||
mode_on_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 0000090C-00000934 .text mode_on_init__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::mode_on_init() {
|
||||
/* Nonmatching */
|
||||
field_0x2A4 = attr(mType).field_0x4;
|
||||
field_0x294 = 1;
|
||||
}
|
||||
|
||||
/* 00000934-000009C4 .text mode_on__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::mode_on() {
|
||||
/* Nonmatching */
|
||||
field_0x290 = 1;
|
||||
fopAc_ac_c* res = fopAcM_Search(M_search_proc[mType], (void*) this);
|
||||
if (field_0x290 == 1 && res == NULL) {
|
||||
fopAcM_offSwitch(this, prm_get_swSave());
|
||||
mode_off_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 000009C4-000009D0 .text demo_non_init__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_non_init() {
|
||||
/* Nonmatching */
|
||||
field_0x298 = 0;
|
||||
}
|
||||
|
||||
/* 000009D0-00000B78 .text demo_non__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_non() {
|
||||
/* Nonmatching */
|
||||
if ((mType != UNK_4 && mType != UNK_5)) {
|
||||
return;
|
||||
}
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
if (!player->getGrabPutStart()) {
|
||||
return;
|
||||
}
|
||||
|
||||
fpc_ProcID grab_actor_id = player->getGrabActorID();
|
||||
fopAc_ac_c* grab_actor = fopAcM_SearchByID(grab_actor_id);
|
||||
if (grab_actor == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
daObjTry::Act_c* try_actor = chk_try_actor0(grab_actor);
|
||||
if (try_actor == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ((try_actor->prm_get_type() == 5 && mType == UNK_4) || (try_actor->prm_get_type() == 6 && mType == UNK_5)) {
|
||||
f32 dist = player->current.pos.abs2XZ(current.pos);
|
||||
f32 y_diff = std::abs(player->current.pos.y - current.pos.y);
|
||||
s16 angle = player->shape_angle.y - fopAcM_searchActorAngleY(player, this);
|
||||
|
||||
if (((dist < 40000.0f && angle >= -0x4000 && angle <= 0x4000) || dist < 1600.0f) && y_diff < 60.0f) {
|
||||
demo_req_init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000B78-00000C0C .text demo_req_init__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_req_init() {
|
||||
/* Nonmatching */
|
||||
if (dComIfGp_evmng_existence(mEventIdx)) {
|
||||
fopAcM_orderOtherEventId(this, mEventIdx, prm_get_evId());
|
||||
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
||||
field_0x298 = 1;
|
||||
} else {
|
||||
demo_non_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000C0C-00000C40 .text demo_req__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_req() {
|
||||
/* Nonmatching */
|
||||
if (eventInfo.checkCommandDemoAccrpt()) {
|
||||
demo_run_init();
|
||||
} else {
|
||||
demo_non_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000C40-00000C4C .text demo_run_init__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_run_init() {
|
||||
/* Nonmatching */
|
||||
field_0x298 = 2;
|
||||
}
|
||||
|
||||
/* 00000C4C-00000CAC .text demo_run__Q212daObjCorrect5Act_cFv */
|
||||
void daObjCorrect::Act_c::demo_run() {
|
||||
/* Nonmatching */
|
||||
if (dComIfGp_evmng_endCheck(mEventIdx)) {
|
||||
dComIfGp_event_reset();
|
||||
demo_non_init();
|
||||
}
|
||||
}
|
||||
|
||||
/* 00000CAC-00000DD8 .text _execute__Q212daObjCorrect5Act_cFv */
|
||||
bool daObjCorrect::Act_c::_execute() {
|
||||
/* Nonmatching */
|
||||
static ModeProcFunc mode_proc[] = {
|
||||
&Act_c::mode_off,
|
||||
&Act_c::mode_on,
|
||||
};
|
||||
(this->*mode_proc[field_0x294])();
|
||||
|
||||
static DemoProcFunc demo_proc[] = {
|
||||
&Act_c::demo_non,
|
||||
&Act_c::demo_req,
|
||||
&Act_c::demo_run,
|
||||
};
|
||||
(this->*demo_proc[field_0x298])();
|
||||
return true;
|
||||
}
|
||||
|
||||
namespace daObjCorrect {
|
||||
namespace {
|
||||
/* 00000DD8-00000DF8 .text Mthd_Create__Q212daObjCorrect29@unnamed@d_a_obj_correct_cpp@FPv */
|
||||
cPhs_State Mthd_Create(void*) {
|
||||
/* Nonmatching */
|
||||
cPhs_State Mthd_Create(void* i_this) {
|
||||
return ((daObjCorrect::Act_c*)i_this)->_create();
|
||||
}
|
||||
|
||||
/* 00000DF8-00000E1C .text Mthd_Delete__Q212daObjCorrect29@unnamed@d_a_obj_correct_cpp@FPv */
|
||||
BOOL Mthd_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL Mthd_Delete(void* i_this) {
|
||||
return ((daObjCorrect::Act_c*)i_this)->_delete();
|
||||
}
|
||||
|
||||
/* 00000E1C-00000E40 .text Mthd_Execute__Q212daObjCorrect29@unnamed@d_a_obj_correct_cpp@FPv */
|
||||
BOOL Mthd_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
BOOL Mthd_Execute(void* i_this) {
|
||||
return ((daObjCorrect::Act_c*)i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 00000E40-00000E48 .text Mthd_Draw__Q212daObjCorrect29@unnamed@d_a_obj_correct_cpp@FPv */
|
||||
BOOL Mthd_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000E48-00000E50 .text Mthd_IsDelete__Q212daObjCorrect29@unnamed@d_a_obj_correct_cpp@FPv */
|
||||
BOOL Mthd_IsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static actor_method_class Mthd_Table = {
|
||||
|
||||
Reference in New Issue
Block a user