diff --git a/config/GZ2J01/rels/d_a_obj_lv4bridge/splits.txt b/config/GZ2J01/rels/d_a_obj_lv4bridge/splits.txt index c831f33d30..b12beca64f 100644 --- a/config/GZ2J01/rels/d_a_obj_lv4bridge/splits.txt +++ b/config/GZ2J01/rels/d_a_obj_lv4bridge/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_lv4bridge.cpp: .text start:0x00000078 end:0x00000968 .rodata start:0x00000000 end:0x0000002C .data start:0x00000000 end:0x0000011C + .bss start:0x00000000 end:0x00000004 diff --git a/config/GZ2P01/rels/d_a_obj_lv4bridge/splits.txt b/config/GZ2P01/rels/d_a_obj_lv4bridge/splits.txt index c831f33d30..b12beca64f 100644 --- a/config/GZ2P01/rels/d_a_obj_lv4bridge/splits.txt +++ b/config/GZ2P01/rels/d_a_obj_lv4bridge/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_lv4bridge.cpp: .text start:0x00000078 end:0x00000968 .rodata start:0x00000000 end:0x0000002C .data start:0x00000000 end:0x0000011C + .bss start:0x00000000 end:0x00000004 diff --git a/configure.py b/configure.py index 1f9d73d52e..80a39e3d34 100755 --- a/configure.py +++ b/configure.py @@ -2070,13 +2070,13 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4PoGate"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4RailWall"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4SlideWall"), - ActorRel(NonMatching, "d_a_obj_lv4bridge"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4bridge"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4chandelier"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4digsand"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4floor"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4gear"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4prelvtr"), - ActorRel(NonMatching, "d_a_obj_lv4prwall"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4prwall"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv4sand"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv5FloorBoard"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv5IceWall"), diff --git a/include/d/actor/d_a_obj_lv4bridge.h b/include/d/actor/d_a_obj_lv4bridge.h index e1716b8abb..7c07f65853 100644 --- a/include/d/actor/d_a_obj_lv4bridge.h +++ b/include/d/actor/d_a_obj_lv4bridge.h @@ -2,6 +2,8 @@ #define D_A_OBJ_LV4BRIDGE_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_event_lib.h" /** * @ingroup actors-objects @@ -11,14 +13,13 @@ * @details * */ -class daObjLv4Brg_c : public fopAc_ac_c { +class daObjLv4Brg_c : public dBgS_MoveBgActor, public dEvLib_callback_c { public: + daObjLv4Brg_c() : dEvLib_callback_c(this) {} + /* 80C62878 */ void initBaseMtx(); /* 80C628B4 */ void setBaseMtx(); - /* 80C62994 */ void Create(); - /* 80C62A2C */ void CreateHeap(); - /* 80C62A9C */ void create1st(); - /* 80C62B20 */ void Execute(Mtx**); + /* 80C62A9C */ int create1st(); /* 80C62B6C */ void action(); /* 80C62C28 */ void mode_init_wait(); /* 80C62C34 */ void mode_wait(); @@ -26,13 +27,24 @@ public: /* 80C62CFC */ void mode_move(); /* 80C62E24 */ void mode_init_dead(); /* 80C62E30 */ void mode_dead(); - /* 80C62E34 */ void eventStart(); - /* 80C62EA0 */ void Draw(); - /* 80C62F44 */ void Delete(); - /* 80C630C4 */ ~daObjLv4Brg_c(); -private: - /* 0x568 */ u8 field_0x568[0x5d0 - 0x568]; + /* 80C630C4 */ virtual ~daObjLv4Brg_c() {} + /* 80C62E34 */ virtual bool eventStart(); + /* 80C62A2C */ virtual int CreateHeap(); + /* 80C62994 */ virtual int Create(); + /* 80C62B20 */ virtual int Execute(Mtx**); + /* 80C62EA0 */ virtual int Draw(); + /* 80C62F44 */ virtual int Delete(); + + u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getEvID() { return fopAcM_GetParamBit(this, 8, 8); } + + /* 0x5B0 */ request_of_phase_process_class mPhase; + /* 0x5B8 */ J3DModel* mpModel; + /* 0x5BC */ f32 field_0x5bc; + /* 0x5C0 */ u8 field_0x5c0; + /* 0x5C1 */ u8 mMode; + /* 0x5C4 */ cXyz field_0x5c4; }; STATIC_ASSERT(sizeof(daObjLv4Brg_c) == 0x5d0); diff --git a/include/d/actor/d_a_obj_lv4prwall.h b/include/d/actor/d_a_obj_lv4prwall.h index 3c0fd3cd3a..76f6a0686c 100644 --- a/include/d/actor/d_a_obj_lv4prwall.h +++ b/include/d/actor/d_a_obj_lv4prwall.h @@ -2,6 +2,7 @@ #define D_A_OBJ_LV4PRWALL_H #include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" /** * @ingroup actors-objects @@ -11,19 +12,37 @@ * @details * */ -class daObjLv4PRwall_c : public fopAc_ac_c { +class daObjLv4PRwall_c : public dBgS_MoveBgActor, request_of_phase_process_class { public: - /* 80C68C98 */ void create1st(); + /* 80C68C98 */ int create1st(); /* 80C68DD8 */ void setMtx(); - /* 80C68F20 */ void CreateHeap(); - /* 80C68FA0 */ void Create(); - /* 80C690D8 */ void Execute(Mtx**); - /* 80C696BC */ void Draw(); - /* 80C69760 */ void Delete(); - /* 80C69870 */ ~daObjLv4PRwall_c(); -private: - /* 0x568 */ u8 field_0x568[0x62c - 0x568]; + /* 80C68F20 */ virtual int CreateHeap(); + /* 80C68FA0 */ virtual int Create(); + /* 80C690D8 */ virtual int Execute(Mtx**); + /* 80C696BC */ virtual int Draw(); + /* 80C69760 */ virtual int Delete(); + /* 80C69870 */ virtual ~daObjLv4PRwall_c() {} + + int getType() { return fopAcM_GetParamBit(this, 0, 3); } + int getSwNo() { return fopAcM_GetParamBit(this, 3, 8); } + int getSw2No() { return fopAcM_GetParamBit(this, 11, 8); } + int getSw3No() { return fopAcM_GetParamBit(this, 19, 8); } + + /* 0x5A8 */ Mtx mBgMtx2; + /* 0x5D8 */ Mtx mModelMtx; + /* 0x608 */ J3DModel* mpModel; + /* 0x60C */ s16 field_0x60c; + /* 0x60E */ s16 field_0x60e; + /* 0x610 */ s16 field_0x610; + /* 0x614 */ int mType; + /* 0x618 */ u8 field_0x618; + /* 0x619 */ u8 field_0x619; + /* 0x61C */ f32 field_0x61c; + /* 0x620 */ f32 field_0x620; + /* 0x624 */ int field_0x624; + /* 0x628 */ u8 field_0x628; + /* 0x629 */ u8 field_0x629; }; STATIC_ASSERT(sizeof(daObjLv4PRwall_c) == 0x62c); diff --git a/src/d/actor/d_a_obj_lv4bridge.cpp b/src/d/actor/d_a_obj_lv4bridge.cpp index 0b3bd70c1f..e17c64b4d5 100644 --- a/src/d/actor/d_a_obj_lv4bridge.cpp +++ b/src/d/actor/d_a_obj_lv4bridge.cpp @@ -6,288 +6,196 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv4bridge.h" -#include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" void initBaseMtx__13daObjLv4Brg_cFv(); -extern "C" void setBaseMtx__13daObjLv4Brg_cFv(); -extern "C" void Create__13daObjLv4Brg_cFv(); -extern "C" void CreateHeap__13daObjLv4Brg_cFv(); -extern "C" void create1st__13daObjLv4Brg_cFv(); -extern "C" void Execute__13daObjLv4Brg_cFPPA3_A4_f(); -extern "C" void action__13daObjLv4Brg_cFv(); -extern "C" void mode_init_wait__13daObjLv4Brg_cFv(); -extern "C" void mode_wait__13daObjLv4Brg_cFv(); -extern "C" void mode_init_move__13daObjLv4Brg_cFv(); -extern "C" void mode_move__13daObjLv4Brg_cFv(); -extern "C" void mode_init_dead__13daObjLv4Brg_cFv(); -extern "C" void mode_dead__13daObjLv4Brg_cFv(); -extern "C" void eventStart__13daObjLv4Brg_cFv(); -extern "C" void Draw__13daObjLv4Brg_cFv(); -extern "C" void Delete__13daObjLv4Brg_cFv(); -extern "C" static void daObjLv4Brg_create1st__FP13daObjLv4Brg_c(); -extern "C" static void daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c(); -extern "C" static void daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c(); -extern "C" static void daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c(); -extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); -extern "C" void __dt__13daObjLv4Brg_cFv(); -extern "C" static void func_80C63158(); -extern "C" static void func_80C63160(); -extern "C" extern char const* const d_a_obj_lv4bridge__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void eventUpdate__17dEvLib_callback_cFv(); -extern "C" void orderEvent__17dEvLib_callback_cFiii(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80C632B8[4]; - -// -// Declarations: -// /* 80C62878-80C628B4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::initBaseMtx() { - // NONMATCHING + mpModel->setBaseScale(scale); + setBaseMtx(); } -/* ############################################################################################## */ -/* 80C63170-80C63174 000000 0004+00 6/6 0/0 0/0 .rodata @3653 */ -SECTION_RODATA static u8 const lit_3653[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C63170, &lit_3653); - -/* 80C63174-80C63178 000004 0004+00 0/1 0/0 0/0 .rodata @3654 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3654 = 1700.0f; -COMPILER_STRIP_GATE(0x80C63174, &lit_3654); -#pragma pop - -/* 80C63178-80C6317C 000008 0004+00 0/1 0/0 0/0 .rodata @3655 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3655 = -5050.0f; -COMPILER_STRIP_GATE(0x80C63178, &lit_3655); -#pragma pop - /* 80C628B4-80C62994 0000B4 00E0+00 2/2 0/0 0/0 .text setBaseMtx__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::setBaseMtx() { - // NONMATCHING -} + cXyz sp14(0.0f, 0.0f, field_0x5bc); + mDoMtx_stack_c::YrotS(shape_angle.y); + mDoMtx_stack_c::multVec(&sp14, &sp14); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::transM(sp14); + mDoMtx_stack_c::YrotM(shape_angle.y); -/* ############################################################################################## */ -/* 80C6317C-80C63180 00000C 0004+00 1/2 0/0 0/0 .rodata @3676 */ -SECTION_RODATA static f32 const lit_3676 = 2000.0f; -COMPILER_STRIP_GATE(0x80C6317C, &lit_3676); + cXyz sp8(0.0f, 1700.0f, -5050.0f); + mDoMtx_stack_c::multVec(&sp8, &field_0x5c4); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); +} /* 80C62994-80C62A2C 000194 0098+00 1/0 0/0 0/0 .text Create__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::Create() { - // NONMATCHING +int daObjLv4Brg_c::Create() { + if (fopAcM_isSwitch(this, getSwbit())) { + field_0x5bc = 2000.0f; + mode_init_dead(); + } else { + field_0x5bc = 0.0f; + mode_init_wait(); + } + + initBaseMtx(); + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + MoveBGExecute(); + return 1; } -/* ############################################################################################## */ -/* 80C63190-80C63190 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C63190 = "Obj_l4brg"; -#pragma pop - /* 80C631BC-80C631C0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_lv4bridge__stringBase0; +static char* l_arcName = "Obj_l4brg"; /* 80C62A2C-80C62A9C 00022C 0070+00 1/0 0/0 0/0 .text CreateHeap__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::CreateHeap() { - // NONMATCHING +int daObjLv4Brg_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); + JUT_ASSERT(170, modelData != 0); + + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; } /* 80C62A9C-80C62B20 00029C 0084+00 1/1 0/0 0/0 .text create1st__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::create1st() { - // NONMATCHING +int daObjLv4Brg_c::create1st() { + int phase_state = dComIfG_resLoad(&mPhase, l_arcName); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(l_arcName, 7, dBgS_MoveBGProc_TypicalRotY, 0x2260, NULL); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + } + + return phase_state; } /* 80C62B20-80C62B6C 000320 004C+00 1/0 0/0 0/0 .text Execute__13daObjLv4Brg_cFPPA3_A4_f */ -void daObjLv4Brg_c::Execute(Mtx** param_0) { - // NONMATCHING +int daObjLv4Brg_c::Execute(Mtx** param_0) { + action(); + *param_0 = &mBgMtx; + setBaseMtx(); + return 1; } -/* ############################################################################################## */ -/* 80C631C0-80C631CC -00001 000C+00 0/1 0/0 0/0 .data @3702 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3702[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_wait__13daObjLv4Brg_cFv, -}; -#pragma pop - -/* 80C631CC-80C631D8 -00001 000C+00 0/1 0/0 0/0 .data @3703 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3703[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_move__13daObjLv4Brg_cFv, -}; -#pragma pop - -/* 80C631D8-80C631E4 -00001 000C+00 0/1 0/0 0/0 .data @3704 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3704[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)mode_dead__13daObjLv4Brg_cFv, -}; -#pragma pop - -/* 80C631E4-80C63208 000048 0024+00 0/1 0/0 0/0 .data l_func$3701 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[36] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - /* 80C62B6C-80C62C28 00036C 00BC+00 1/1 0/0 0/0 .text action__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::action() { - // NONMATCHING + static void (daObjLv4Brg_c::*l_func[])() = { + &daObjLv4Brg_c::mode_wait, + &daObjLv4Brg_c::mode_move, + &daObjLv4Brg_c::mode_dead, + }; + + (this->*l_func[mMode])(); + eventUpdate(); } /* 80C62C28-80C62C34 000428 000C+00 1/1 0/0 0/0 .text mode_init_wait__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::mode_init_wait() { - // NONMATCHING + mMode = 0; } -/* ############################################################################################## */ -/* 80C63180-80C63184 000010 0004+00 2/3 0/0 0/0 .rodata @3740 */ -SECTION_RODATA static f32 const lit_3740 = 1.0f; -COMPILER_STRIP_GATE(0x80C63180, &lit_3740); - /* 80C62C34-80C62CE4 000434 00B0+00 1/0 0/0 0/0 .text mode_wait__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::mode_wait() { - // NONMATCHING + if (fopAcM_isSwitch(this, getSwbit())) { + if (getEvID() != 0xFF) { + orderEvent(getEvID(), 0xFF, 1); + return; + } + + dComIfGp_getVibration().StartQuake(4, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + mode_init_move(); + } } /* 80C62CE4-80C62CFC 0004E4 0018+00 2/2 0/0 0/0 .text mode_init_move__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::mode_init_move() { - // NONMATCHING + speed.y = 0.0f; + mMode = 1; } -/* ############################################################################################## */ -/* 80C63184-80C63188 000014 0004+00 0/1 0/0 0/0 .rodata @3766 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3766 = -1.0f; -COMPILER_STRIP_GATE(0x80C63184, &lit_3766); -#pragma pop - -/* 80C63188-80C6318C 000018 0004+00 0/1 0/0 0/0 .rodata @3767 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3767 = 20.0f; -COMPILER_STRIP_GATE(0x80C63188, &lit_3767); -#pragma pop - -/* 80C6318C-80C63190 00001C 0004+00 0/1 0/0 0/0 .rodata @3768 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3768 = 2.0f; -COMPILER_STRIP_GATE(0x80C6318C, &lit_3768); -#pragma pop - /* 80C62CFC-80C62E24 0004FC 0128+00 1/0 0/0 0/0 .text mode_move__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::mode_move() { - // NONMATCHING + mDoAud_seStartLevel(Z2SE_OBJ_DS_END_BRG, &field_0x5c4, 0, 0); + cLib_chaseF(&speed.y, 20.0f, 2.0f); + + if (cLib_chaseF(&field_0x5bc, 2000.0f, speed.y)) { + mDoAud_seStart(Z2SE_OBJ_DS_END_BRG_ST, &field_0x5c4, 0, 0); + dComIfGp_getVibration().StopQuake(0x1F); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + mode_init_dead(); + } } /* 80C62E24-80C62E30 000624 000C+00 2/2 0/0 0/0 .text mode_init_dead__13daObjLv4Brg_cFv */ void daObjLv4Brg_c::mode_init_dead() { - // NONMATCHING + mMode = 2; } /* 80C62E30-80C62E34 000630 0004+00 1/0 0/0 0/0 .text mode_dead__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::mode_dead() { - /* empty function */ -} +void daObjLv4Brg_c::mode_dead() {} /* 80C62E34-80C62EA0 000634 006C+00 2/1 0/0 0/0 .text eventStart__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::eventStart() { - // NONMATCHING +bool daObjLv4Brg_c::eventStart() { + dComIfGp_getVibration().StartQuake(4, 0xF, cXyz(0.0f, 1.0f, 0.0f)); + mode_init_move(); + return true; } /* 80C62EA0-80C62F44 0006A0 00A4+00 1/0 0/0 0/0 .text Draw__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::Draw() { - // NONMATCHING +int daObjLv4Brg_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; } /* 80C62F44-80C62F78 000744 0034+00 1/0 0/0 0/0 .text Delete__13daObjLv4Brg_cFv */ -void daObjLv4Brg_c::Delete() { - // NONMATCHING +int daObjLv4Brg_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName); + return 1; +} + +/* 80C62F78-80C62FF8 000778 0080+00 1/0 0/0 0/0 .text daObjLv4Brg_create1st__FP13daObjLv4Brg_c */ +static int daObjLv4Brg_create1st(daObjLv4Brg_c* i_this) { + fopAcM_SetupActor(i_this, daObjLv4Brg_c); + return i_this->create1st(); +} + +/* 80C62FF8-80C63018 0007F8 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c + */ +static int daObjLv4Brg_MoveBGDelete(daObjLv4Brg_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C63018-80C63038 000818 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c + */ +static int daObjLv4Brg_MoveBGExecute(daObjLv4Brg_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C63038-80C63064 000838 002C+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c */ +static int daObjLv4Brg_MoveBGDraw(daObjLv4Brg_c* i_this) { + return i_this->MoveBGDraw(); } -/* ############################################################################################## */ /* 80C63208-80C63228 -00001 0020+00 1/0 0/0 0/0 .data daObjLv4Brg_METHODS */ static actor_method_class daObjLv4Brg_METHODS = { - (process_method_func)daObjLv4Brg_create1st__FP13daObjLv4Brg_c, - (process_method_func)daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c, - (process_method_func)daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c, + (process_method_func)daObjLv4Brg_create1st, + (process_method_func)daObjLv4Brg_MoveBGDelete, + (process_method_func)daObjLv4Brg_MoveBGExecute, 0, - (process_method_func)daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c, + (process_method_func)daObjLv4Brg_MoveBGDraw, }; /* 80C63228-80C63258 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv4Bridge */ @@ -307,100 +215,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv4Bridge = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C63258-80C63270 0000BC 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; - -/* 80C63270-80C632B8 0000D4 0048+00 2/2 0/0 0/0 .data __vt__13daObjLv4Brg_c */ -SECTION_DATA extern void* __vt__13daObjLv4Brg_c[18] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__13daObjLv4Brg_cFv, - (void*)Create__13daObjLv4Brg_cFv, - (void*)Execute__13daObjLv4Brg_cFPPA3_A4_f, - (void*)Draw__13daObjLv4Brg_cFv, - (void*)Delete__13daObjLv4Brg_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)NULL, - (void*)NULL, - (void*)func_80C63160, - (void*)func_80C63158, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, - (void*)__dt__13daObjLv4Brg_cFv, - (void*)eventStart__13daObjLv4Brg_cFv, -}; - -/* 80C62F78-80C62FF8 000778 0080+00 1/0 0/0 0/0 .text daObjLv4Brg_create1st__FP13daObjLv4Brg_c */ -static void daObjLv4Brg_create1st(daObjLv4Brg_c* param_0) { - // NONMATCHING -} - -/* 80C62FF8-80C63018 0007F8 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c - */ -static void daObjLv4Brg_MoveBGDelete(daObjLv4Brg_c* param_0) { - // NONMATCHING -} - -/* 80C63018-80C63038 000818 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c - */ -static void daObjLv4Brg_MoveBGExecute(daObjLv4Brg_c* param_0) { - // NONMATCHING -} - -/* 80C63038-80C63064 000838 002C+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c */ -static void daObjLv4Brg_MoveBGDraw(daObjLv4Brg_c* param_0) { - // NONMATCHING -} - -/* 80C63064-80C630AC 000864 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */ -// dEvLib_callback_c::~dEvLib_callback_c() { -extern "C" void __dt__17dEvLib_callback_cFv() { - // NONMATCHING -} - -/* 80C630AC-80C630B4 0008AC 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv - */ -// bool dEvLib_callback_c::eventStart() { -extern "C" bool eventStart__17dEvLib_callback_cFv() { - return true; -} - -/* 80C630B4-80C630BC 0008B4 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventRun() { -extern "C" bool eventRun__17dEvLib_callback_cFv() { - return true; -} - -/* 80C630BC-80C630C4 0008BC 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -// bool dEvLib_callback_c::eventEnd() { -extern "C" bool eventEnd__17dEvLib_callback_cFv() { - return true; -} - -/* 80C630C4-80C63158 0008C4 0094+00 2/1 0/0 0/0 .text __dt__13daObjLv4Brg_cFv */ -daObjLv4Brg_c::~daObjLv4Brg_c() { - // NONMATCHING -} - -/* 80C63158-80C63160 000958 0008+00 1/0 0/0 0/0 .text @1440@eventStart__13daObjLv4Brg_cFv - */ -static void func_80C63158() { - // NONMATCHING -} - -/* 80C63160-80C63168 000960 0008+00 1/0 0/0 0/0 .text @1440@__dt__13daObjLv4Brg_cFv */ -static void func_80C63160() { - // NONMATCHING -} - -/* 80C63190-80C63190 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_lv4prwall.cpp b/src/d/actor/d_a_obj_lv4prwall.cpp index 326b1cd80e..672a7a2772 100644 --- a/src/d/actor/d_a_obj_lv4prwall.cpp +++ b/src/d/actor/d_a_obj_lv4prwall.cpp @@ -6,228 +6,321 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_lv4prwall.h" -#include "dol2asm.h" +#include "d/actor/d_a_obj_swturn.h" - -// -// Forward References: -// - -extern "C" void create1st__16daObjLv4PRwall_cFv(); -extern "C" void setMtx__16daObjLv4PRwall_cFv(); -extern "C" void CreateHeap__16daObjLv4PRwall_cFv(); -extern "C" void Create__16daObjLv4PRwall_cFv(); -extern "C" static void searchObjSwTurn__FPvPv(); -extern "C" void Execute__16daObjLv4PRwall_cFPPA3_A4_f(); -extern "C" void Draw__16daObjLv4PRwall_cFv(); -extern "C" void Delete__16daObjLv4PRwall_cFv(); -extern "C" static void daObjLv4PRwall_create1st__FP16daObjLv4PRwall_c(); -extern "C" static void daObjLv4PRwall_MoveBGDelete__FP16daObjLv4PRwall_c(); -extern "C" static void daObjLv4PRwall_MoveBGExecute__FP16daObjLv4PRwall_c(); -extern "C" static void daObjLv4PRwall_MoveBGDraw__FP16daObjLv4PRwall_c(); -extern "C" void __dt__16daObjLv4PRwall_cFv(); -extern "C" extern char const* const d_a_obj_lv4prwall__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAc_IsActor__FPv(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void isSwitch__10dSv_info_cCFii(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void StartQuake__12dVibration_cFii4cXyz(); -extern "C" void StopQuake__12dVibration_cFi(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cM_rndFX__Ff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __dl__FPv(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__16dBgS_MoveBgActor[10]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80C698E8-80C698F4 000000 000C+00 2/2 0/0 0/0 .rodata l_dzbidx */ -SECTION_RODATA static u8 const l_dzbidx[12] = { - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, +static const int l_dzbidx[] = { + 7, + 7, + 7, }; -COMPILER_STRIP_GATE(0x80C698E8, &l_dzbidx); -/* 80C69974-80C69974 00008C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C69974 = "PRWallR09"; -SECTION_DEAD static char const* const stringBase_80C6997E = "P_Rwall"; -SECTION_DEAD static char const* const stringBase_80C69986 = "PRWallR04"; -#pragma pop +/* 80C698F4-80C69900 00000C 000C+00 1/1 0/0 0/0 .rodata l_bmdidx */ +static const int l_bmdidx[] = { + 4, + 4, + 4, +}; /* 80C69990-80C6999C -00001 000C+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[3] = { - (void*)&d_a_obj_lv4prwall__stringBase0, - (void*)(((char*)&d_a_obj_lv4prwall__stringBase0) + 0xA), - (void*)(((char*)&d_a_obj_lv4prwall__stringBase0) + 0x12), +static char* l_arcName[3] = { + "PRWallR09", + "P_Rwall", + "PRWallR04", }; /* 80C68C98-80C68DD8 000078 0140+00 1/1 0/0 0/1 .text create1st__16daObjLv4PRwall_cFv */ -void daObjLv4PRwall_c::create1st() { - // NONMATCHING +int daObjLv4PRwall_c::create1st() { + mType = getType(); + + int phase_state = dComIfG_resLoad(this, l_arcName[mType]); + if (phase_state == cPhs_COMPLEATE_e) { + field_0x60e = 0; + + if (mType == 0 && getSw2No() != 0xFF && fopAcM_isSwitch(this, getSw2No())) { + field_0x629 = 1; + field_0x60e = -0x3FFF; + } else if (getSwNo() != 0xFF && fopAcM_isSwitch(this, getSwNo())) { + field_0x60e = 0x3FFF; + } + + setMtx(); + + phase_state = MoveBGCreate(l_arcName[mType], l_dzbidx[mType], dBgS_MoveBGProc_TypicalRotY, 0x8440, &mBgMtx2); + if (phase_state == cPhs_ERROR_e) { + return phase_state; + } + } + + return phase_state; } -/* ############################################################################################## */ -/* 80C698F4-80C69900 00000C 000C+00 1/1 0/0 0/0 .rodata l_bmdidx */ -SECTION_RODATA static u8 const l_bmdidx[12] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, -}; -COMPILER_STRIP_GATE(0x80C698F4, &l_bmdidx); - /* 80C69900-80C69948 000018 0048+00 1/1 0/0 0/0 .rodata l_cull_box */ -SECTION_RODATA static u8 const l_cull_box[72] = { - 0xC4, 0xC8, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0xC8, 0x00, 0x00, 0x44, 0xC8, 0x00, - 0x00, 0x44, 0xB3, 0xB6, 0x66, 0x44, 0xC8, 0x00, 0x00, 0xC4, 0x89, 0x81, 0x48, 0xC2, 0x70, - 0x00, 0x00, 0xC4, 0x89, 0x90, 0x00, 0x44, 0x89, 0x80, 0x00, 0x44, 0xAF, 0x00, 0x00, 0x44, - 0x89, 0x90, 0x00, 0xC4, 0x89, 0x87, 0x5C, 0xC3, 0x48, 0x33, 0x33, 0xC4, 0x89, 0x87, 0x5C, - 0x44, 0x89, 0x87, 0x5C, 0x44, 0x7A, 0x2C, 0xCD, 0x44, 0x89, 0x87, 0x5C, +static const Vec l_cull_box[] = { + {-1600.0f, -100.0f, -1600.0f}, + {1600.0f, 1437.7f, 1600.0f}, + {-1100.04, -60.0f, -1100.5f}, + {1100.0f, 1400.0f, 1100.5f}, + {-1100.23f, -200.2f, -1100.23f}, + {1100.23f, 1000.7f, 1100.23f}, }; -COMPILER_STRIP_GATE(0x80C69900, &l_cull_box); - -/* 80C69948-80C6994C 000060 0004+00 1/1 0/0 0/0 .rodata @3688 */ -SECTION_RODATA static u32 const lit_3688 = 0x3C800000; -COMPILER_STRIP_GATE(0x80C69948, &lit_3688); - -/* 80C6994C-80C69950 000064 0004+00 1/1 0/0 0/0 .rodata @3689 */ -SECTION_RODATA static f32 const lit_3689 = 2.0f; -COMPILER_STRIP_GATE(0x80C6994C, &lit_3689); - -/* 80C69950-80C69958 000068 0008+00 1/1 0/0 0/0 .rodata @3691 */ -SECTION_RODATA static u8 const lit_3691[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C69950, &lit_3691); /* 80C68DD8-80C68F20 0001B8 0148+00 3/3 0/0 0/0 .text setMtx__16daObjLv4PRwall_cFv */ void daObjLv4PRwall_c::setMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + field_0x620, current.pos.z); + mDoMtx_stack_c::YrotM(current.angle.y + field_0x60e); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx2); + + if (field_0x60c != 0) { + s16 var_r29 = field_0x60c; + if (var_r29 < 0) { + var_r29 *= -1; + } + if (var_r29 > 64) { + var_r29 = 64; + } + + f32 temp_f31 = (f32)var_r29 / (f32)64; + mDoMtx_stack_c::transM(cM_rndFX(2.0f * temp_f31), cM_rndFX(2.0f * temp_f31), cM_rndFX(2.0f * temp_f31)); + } + + MTXCopy(mDoMtx_stack_c::get(), mModelMtx); } /* 80C68F20-80C68FA0 000300 0080+00 1/0 0/0 0/0 .text CreateHeap__16daObjLv4PRwall_cFv */ -void daObjLv4PRwall_c::CreateHeap() { - // NONMATCHING +int daObjLv4PRwall_c::CreateHeap() { + J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_bmdidx[mType]); + JUT_ASSERT(226, model_data != 0); + + mpModel = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + return 1; } -/* ############################################################################################## */ -/* 80C69958-80C6995C 000070 0004+00 1/2 0/0 0/0 .rodata @3713 */ -SECTION_RODATA static u8 const lit_3713[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C69958, &lit_3713); - /* 80C68FA0-80C69064 000380 00C4+00 1/0 0/0 0/0 .text Create__16daObjLv4PRwall_cFv */ -void daObjLv4PRwall_c::Create() { - // NONMATCHING +int daObjLv4PRwall_c::Create() { + fopAcM_SetMtx(this, mModelMtx); + mpModel->setBaseTRMtx(mModelMtx); + + int cull_idx = mType * 2; + fopAcM_setCullSizeBox(this, l_cull_box[cull_idx].x, l_cull_box[cull_idx].y, l_cull_box[cull_idx].z, + l_cull_box[cull_idx + 1].x, l_cull_box[cull_idx + 1].y, l_cull_box[cull_idx + 1].z); + + field_0x60c = 0; + field_0x610 = 0; + field_0x618 = 1; + field_0x628 = 0; + field_0x624 = 0; + field_0x619 = 0; + field_0x61c = 0.0f; + field_0x620 = 0.0f; + field_0x629 = 0; + + setMtx(); + mpModel->setBaseTRMtx(mModelMtx); + return 1; } /* 80C69064-80C690D8 000444 0074+00 1/1 0/0 0/0 .text searchObjSwTurn__FPvPv */ -static void searchObjSwTurn(void* param_0, void* param_1) { - // NONMATCHING +static void* searchObjSwTurn(void* i_actor, void* i_data) { + daObjSwTurn_c* swturn = (daObjSwTurn_c*)i_actor; + daObjLv4PRwall_c* prwall = (daObjLv4PRwall_c*)i_data; + if (swturn != NULL && fopAcM_IsActor(swturn) && fopAcM_GetProfName(swturn) == PROC_Obj_SwTurn) { + if (swturn->getSwNo() == prwall->getSwNo()) { + return i_actor; + } + } + + return NULL; } -/* ############################################################################################## */ -/* 80C6995C-80C69960 000074 0004+00 0/1 0/0 0/0 .rodata @3959 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3959 = -2.0f; -COMPILER_STRIP_GATE(0x80C6995C, &lit_3959); -#pragma pop - -/* 80C69960-80C69964 000078 0004+00 0/1 0/0 0/0 .rodata @3960 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3960 = 1.0f; -COMPILER_STRIP_GATE(0x80C69960, &lit_3960); -#pragma pop - -/* 80C69964-80C69968 00007C 0004+00 0/1 0/0 0/0 .rodata @3961 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3961 = -1.0f; -COMPILER_STRIP_GATE(0x80C69964, &lit_3961); -#pragma pop - -/* 80C69968-80C6996C 000080 0004+00 0/1 0/0 0/0 .rodata @3962 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3962 = 0.5f; -COMPILER_STRIP_GATE(0x80C69968, &lit_3962); -#pragma pop - -/* 80C6996C-80C69970 000084 0004+00 0/1 0/0 0/0 .rodata @3963 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3963 = -1.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C6996C, &lit_3963); -#pragma pop - -/* 80C69970-80C69974 000088 0004+00 0/1 0/0 0/0 .rodata @3964 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3964 = 20.0f; -COMPILER_STRIP_GATE(0x80C69970, &lit_3964); -#pragma pop - /* 80C690D8-80C696BC 0004B8 05E4+00 1/0 0/0 0/0 .text Execute__16daObjLv4PRwall_cFPPA3_A4_f */ -void daObjLv4PRwall_c::Execute(Mtx** param_0) { - // NONMATCHING +int daObjLv4PRwall_c::Execute(Mtx** param_0) { + daObjSwTurn_c* swturn = (daObjSwTurn_c*)fopAcM_Search(searchObjSwTurn, this); + if (swturn != NULL) { + field_0x60e = swturn->getRotateAngle(); + if (field_0x60e != field_0x610) { + field_0x60c = 1; + field_0x618 = 0; + } else { + if (field_0x618 == 0) { + field_0x618 = 1; + field_0x61c = -2.0f; + field_0x619 = 1; + } + field_0x60c = 0; + } + field_0x610 = field_0x60e; + } else if (field_0x629 == 0) { + if (fopAcM_isSwitch(this, getSwNo()) || (getSw3No() != 0xFF && fopAcM_isSwitch(this, getSw3No()))) { + if (field_0x60e > -0x3FFF) { + field_0x60e += field_0x60c; + if (field_0x60c <= -64) { + field_0x60c = -64; + } else { + field_0x60c -= 1; + } + field_0x618 = 0; + } else { + if (field_0x618 == 0) { + field_0x618 = 1; + dComIfGp_getVibration().StartShock(8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + field_0x61c = -2.0f; + field_0x619 = 1; + + if (mType == 0) { + field_0x629 = 1; + if (getSw2No() != 0xFF) { + fopAcM_onSwitch(this, getSw2No()); + } + } + + if (mType == 0) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_STN_WL_RL_ST, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + } + + field_0x60e = -0x3FFF; + field_0x60c = 0; + } + } else if (field_0x60e < 0) { + field_0x60e += field_0x60c; + if (field_0x60c >= 64) { + field_0x60c = 64; + } else { + field_0x60c += 1; + } + field_0x618 = 0; + } else { + if (field_0x618 == 0) { + field_0x618 = 1; + dComIfGp_getVibration().StartShock(8, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + field_0x61c = -2.0f; + field_0x619 = 1; + + if (mType == 0) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_STN_WL_RL_ST, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + } + + field_0x60e = 0; + field_0x60c = 0; + } + } + + if (fopAcM_isSwitch(this, getSwNo()) && getSw3No() != 0xFF && !fopAcM_isSwitch(this, getSw3No()) && field_0x60e < -6735) { + fopAcM_onSwitch(this, getSw3No()); + } + + if (field_0x619 != 0) { + field_0x620 += field_0x61c; + field_0x61c += 0.5f; + + if (field_0x620 >= 0.0f) { + field_0x620 = 0.0f; + field_0x61c *= -0.2f; + + if (fabsf(field_0x61c) < 0.5f) { + field_0x61c = 0.0f; + field_0x619 = 0; + } + } + } + + if (field_0x60c != 0) { + int var_r28 = 20.0f * cM_ssin(field_0x60e * 2); + if (var_r28 < 0) { + var_r28 *= -1; + } + + var_r28++; + if (var_r28 < 1) { + var_r28 = 1; + } + if (var_r28 > 5) { + var_r28 = 5; + } + + if (field_0x624 != var_r28) { + field_0x624 = var_r28; + dComIfGp_getVibration().StartQuake(field_0x624, 2, cXyz(0.0f, 1.0f, 0.0f)); + field_0x628 = 1; + } + + if (mType == 0) { + if (field_0x60c < 0) { + int sp18 = field_0x60c * -1; + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_STN_WL_RL, NULL, sp18, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } else { + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_STN_WL_RL_OP, NULL, field_0x60c, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + } + } else { + if (field_0x628 != 0) { + dComIfGp_getVibration().StopQuake(2); + field_0x628 = 0; + } + field_0x624 = 0; + } + + setMtx(); + mpModel->setBaseTRMtx(mModelMtx); + *param_0 = &mBgMtx2; + return 1; } /* 80C696BC-80C69760 000A9C 00A4+00 1/0 0/0 0/0 .text Draw__16daObjLv4PRwall_cFv */ -void daObjLv4PRwall_c::Draw() { - // NONMATCHING +int daObjLv4PRwall_c::Draw() { + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; } /* 80C69760-80C697A4 000B40 0044+00 1/0 0/0 0/0 .text Delete__16daObjLv4PRwall_cFv */ -void daObjLv4PRwall_c::Delete() { - // NONMATCHING +int daObjLv4PRwall_c::Delete() { + dComIfG_resDelete(this, l_arcName[mType]); + return 1; +} + +/* 80C697A4-80C69804 000B84 0060+00 1/0 0/0 0/0 .text + * daObjLv4PRwall_create1st__FP16daObjLv4PRwall_c */ +static int daObjLv4PRwall_create1st(daObjLv4PRwall_c* i_this) { + fopAcM_SetupActor(i_this, daObjLv4PRwall_c); + return i_this->create1st(); +} + +/* 80C69804-80C69824 000BE4 0020+00 1/0 0/0 0/0 .text + * daObjLv4PRwall_MoveBGDelete__FP16daObjLv4PRwall_c */ +static int daObjLv4PRwall_MoveBGDelete(daObjLv4PRwall_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C69824-80C69844 000C04 0020+00 1/0 0/0 0/0 .text + * daObjLv4PRwall_MoveBGExecute__FP16daObjLv4PRwall_c */ +static int daObjLv4PRwall_MoveBGExecute(daObjLv4PRwall_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C69844-80C69870 000C24 002C+00 1/0 0/0 0/0 .text + * daObjLv4PRwall_MoveBGDraw__FP16daObjLv4PRwall_c */ +static int daObjLv4PRwall_MoveBGDraw(daObjLv4PRwall_c* i_this) { + return i_this->MoveBGDraw(); } -/* ############################################################################################## */ /* 80C6999C-80C699BC -00001 0020+00 1/0 0/0 0/0 .data daObjLv4PRwall_METHODS */ static actor_method_class daObjLv4PRwall_METHODS = { - (process_method_func)daObjLv4PRwall_create1st__FP16daObjLv4PRwall_c, - (process_method_func)daObjLv4PRwall_MoveBGDelete__FP16daObjLv4PRwall_c, - (process_method_func)daObjLv4PRwall_MoveBGExecute__FP16daObjLv4PRwall_c, - 0, - (process_method_func)daObjLv4PRwall_MoveBGDraw__FP16daObjLv4PRwall_c, + (process_method_func)daObjLv4PRwall_create1st, + (process_method_func)daObjLv4PRwall_MoveBGDelete, + (process_method_func)daObjLv4PRwall_MoveBGExecute, + (process_method_func)NULL, + (process_method_func)daObjLv4PRwall_MoveBGDraw, }; /* 80C699BC-80C699EC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv4PRwall */ @@ -247,49 +340,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv4PRwall = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C699EC-80C69A18 00005C 002C+00 2/2 0/0 0/0 .data __vt__16daObjLv4PRwall_c */ -SECTION_DATA extern void* __vt__16daObjLv4PRwall_c[11] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__16daObjLv4PRwall_cFv, - (void*)Create__16daObjLv4PRwall_cFv, - (void*)Execute__16daObjLv4PRwall_cFPPA3_A4_f, - (void*)Draw__16daObjLv4PRwall_cFv, - (void*)Delete__16daObjLv4PRwall_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, - (void*)__dt__16daObjLv4PRwall_cFv, -}; - -/* 80C697A4-80C69804 000B84 0060+00 1/0 0/0 0/0 .text - * daObjLv4PRwall_create1st__FP16daObjLv4PRwall_c */ -static void daObjLv4PRwall_create1st(daObjLv4PRwall_c* param_0) { - // NONMATCHING -} - -/* 80C69804-80C69824 000BE4 0020+00 1/0 0/0 0/0 .text - * daObjLv4PRwall_MoveBGDelete__FP16daObjLv4PRwall_c */ -static void daObjLv4PRwall_MoveBGDelete(daObjLv4PRwall_c* param_0) { - // NONMATCHING -} - -/* 80C69824-80C69844 000C04 0020+00 1/0 0/0 0/0 .text - * daObjLv4PRwall_MoveBGExecute__FP16daObjLv4PRwall_c */ -static void daObjLv4PRwall_MoveBGExecute(daObjLv4PRwall_c* param_0) { - // NONMATCHING -} - -/* 80C69844-80C69870 000C24 002C+00 1/0 0/0 0/0 .text - * daObjLv4PRwall_MoveBGDraw__FP16daObjLv4PRwall_c */ -static void daObjLv4PRwall_MoveBGDraw(daObjLv4PRwall_c* param_0) { - // NONMATCHING -} - -/* 80C69870-80C698E0 000C50 0070+00 1/0 0/0 0/0 .text __dt__16daObjLv4PRwall_cFv */ -daObjLv4PRwall_c::~daObjLv4PRwall_c() { - // NONMATCHING -} - -/* 80C69974-80C69974 00008C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */