From 4996e91556514bb757334d80970786865000e1ec Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Thu, 16 Jan 2025 18:50:04 -0800 Subject: [PATCH] daMagLift_c matching (#2275) * Initial work with daMagLift_c. Almost completely matching except for mode_proc * mode_proc matching in d_a_obj_magLift.cpp * First pass of polishing of d_a_obj_magLift * Further d_a_obj_magLift updates to align with debug build --- .../GZ2E01/rels/d_a_obj_magLift/symbols.txt | 12 +- configure.py | 2 +- include/d/actor/d_a_obj_magLift.h | 48 +- src/d/actor/d_a_obj_magLift.cpp | 698 +++++++----------- 4 files changed, 298 insertions(+), 462 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_magLift/symbols.txt b/config/GZ2E01/rels/d_a_obj_magLift/symbols.txt index 02d8b361a0d..d2d8dfca617 100644 --- a/config/GZ2E01/rels/d_a_obj_magLift/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_magLift/symbols.txt @@ -25,10 +25,10 @@ modeDead__11daMagLift_cFv = .text:0x000009D8; // type:function size:0x4 scope:gl setNextPoint__11daMagLift_cFv = .text:0x000009DC; // type:function size:0x134 scope:global Draw__11daMagLift_cFv = .text:0x00000B10; // type:function size:0xA4 scope:global Delete__11daMagLift_cFv = .text:0x00000BB4; // type:function size:0x30 scope:global -daMagLift_Draw__FP11daMagLift_c = .text:0x00000BE4; // type:function size:0x2C scope:global -daMagLift_Execute__FP11daMagLift_c = .text:0x00000C10; // type:function size:0x20 scope:global -daMagLift_Delete__FP11daMagLift_c = .text:0x00000C30; // type:function size:0x20 scope:global -daMagLift_Create__FP10fopAc_ac_c = .text:0x00000C50; // type:function size:0x20 scope:global +daMagLift_Draw__FP11daMagLift_c = .text:0x00000BE4; // type:function size:0x2C scope:local +daMagLift_Execute__FP11daMagLift_c = .text:0x00000C10; // type:function size:0x20 scope:local +daMagLift_Delete__FP11daMagLift_c = .text:0x00000C30; // type:function size:0x20 scope:local +daMagLift_Create__FP10fopAc_ac_c = .text:0x00000C50; // type:function size:0x20 scope:local __dt__15daMagLift_HIO_cFv = .text:0x00000C70; // type:function size:0x5C scope:global __sinit_d_a_obj_magLift_cpp = .text:0x00000CCC; // type:function size:0x3C scope:local _ctors = .ctors:0x00000000; // type:label scope:global @@ -58,12 +58,12 @@ cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global @3741 = .data:0x0000005C; // type:object size:0xC scope:local @3742 = .data:0x00000068; // type:object size:0xC scope:local mode_proc$3735 = .data:0x00000074; // type:object size:0x60 scope:local -l_daMagLift_Method = .data:0x000000D4; // type:object size:0x20 scope:global +l_daMagLift_Method = .data:0x000000D4; // type:object size:0x20 scope:local g_profile_Obj_MagLift = .data:0x000000F4; // type:object size:0x30 scope:global __vt__11daMagLift_c = .data:0x00000124; // type:object size:0x28 scope:global __vt__15daMagLift_HIO_c = .data:0x0000014C; // type:object size:0xC scope:global __vt__14mDoHIO_entry_c = .data:0x00000158; // type:object size:0xC scope:global __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global @3619 = .bss:0x00000008; // type:object size:0xC scope:local -l_HIO = .bss:0x00000014; // type:object size:0x8 scope:global +l_HIO = .bss:0x00000014; // type:object size:0x8 scope:local lbl_565_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte diff --git a/configure.py b/configure.py index 2ef67ca7553..72d38e0d714 100644 --- a/configure.py +++ b/configure.py @@ -1949,7 +1949,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_lv8OptiLift"), ActorRel(NonMatching, "d_a_obj_lv8UdFloor"), ActorRel(NonMatching, "d_a_obj_lv9SwShutter"), - ActorRel(NonMatching, "d_a_obj_magLift"), + ActorRel(Matching, "d_a_obj_magLift"), ActorRel(NonMatching, "d_a_obj_magLiftRot"), ActorRel(NonMatching, "d_a_obj_maki"), ActorRel(NonMatching, "d_a_obj_master_sword"), diff --git a/include/d/actor/d_a_obj_magLift.h b/include/d/actor/d_a_obj_magLift.h index 02fdef803bf..1b348333623 100644 --- a/include/d/actor/d_a_obj_magLift.h +++ b/include/d/actor/d_a_obj_magLift.h @@ -1,7 +1,8 @@ #ifndef D_A_OBJ_MAGLIFT_H #define D_A_OBJ_MAGLIFT_H -#include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_com_inf_game.h" /** * @ingroup actors-objects @@ -11,12 +12,22 @@ * @details * */ -class daMagLift_c : public fopAc_ac_c { +class daMagLift_c : public dBgS_MoveBgActor { public: + enum Mode_e { + MODE_ACC_e, + MODE_MOVE_e, + MODE_BRK_e, + MODE_WAIT_e, + MODE_WAIT_INIT_e, + MODE_DEAD_e, + MODE_MOVE_WAIT_e + }; + /* 80C8DAA0 */ void setBaseMtx(); - /* 80C8DB28 */ void CreateHeap(); - /* 80C8DB94 */ void create(); - /* 80C8DD38 */ void Execute(f32 (**)[3][4]); + /* 80C8DB28 */ int CreateHeap(); + /* 80C8DB94 */ int create(); + /* 80C8DD38 */ int Execute(Mtx**); /* 80C8DD88 */ void moveLift(); /* 80C8DE98 */ void modeAcc(); /* 80C8DF20 */ void init_modeMove(); @@ -31,21 +42,36 @@ public: /* 80C8E2C4 */ void modeMoveWait(); /* 80C8E318 */ void modeDead(); /* 80C8E31C */ void setNextPoint(); - /* 80C8E450 */ void Draw(); - /* 80C8E4F4 */ void Delete(); + /* 80C8E450 */ int Draw(); + /* 80C8E4F4 */ int Delete(); - static u8 const mSpeed[64]; + int getMoveSpeed() { return fopAcM_GetParamBit(this, 0x8, 4); } + + static f32 const mSpeed[16]; private: - /* 0x568 */ u8 field_0x568[0x5d4 - 0x568]; + /* 0x5a0 */ request_of_phase_process_class mPhaseReq; + /* 0x5a8 */ J3DModel* mpModel; + /* 0x5ac */ u8 field_0x5ac [0x5ae - 0x5ac]; + /* 0x5ae */ u8 field_0x5ae; + /* 0x5af */ s8 field_0x5af; + /* 0x5b0 */ s16 mPoint; + /* 0x5b4 */ cXyz field_0x5b4; + /* 0x5c0 */ cXyz field_0x5c0; + /* 0x5cc */ f32 mMoveSpeed; + /* 0x5d0 */ u8 mMode; + /* 0x5d1 */ u8 is_switch; }; STATIC_ASSERT(sizeof(daMagLift_c) == 0x5d4); -class daMagLift_HIO_c { +class daMagLift_HIO_c : public mDoHIO_entry_c { public: /* 80C8DA2C */ daMagLift_HIO_c(); - /* 80C8E5B0 */ ~daMagLift_HIO_c(); + /* 80C8E5B0 */ virtual ~daMagLift_HIO_c() {} + + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5; }; diff --git a/src/d/actor/d_a_obj_magLift.cpp b/src/d/actor/d_a_obj_magLift.cpp index 8bc3e861a7d..a0f4450954f 100644 --- a/src/d/actor/d_a_obj_magLift.cpp +++ b/src/d/actor/d_a_obj_magLift.cpp @@ -5,84 +5,8 @@ #include "d/actor/d_a_obj_magLift.h" #include "dol2asm.h" +#include "d/d_path.h" - - -// -// Forward References: -// - -extern "C" void __ct__15daMagLift_HIO_cFv(); -extern "C" void __dt__14mDoHIO_entry_cFv(); -extern "C" void setBaseMtx__11daMagLift_cFv(); -extern "C" void CreateHeap__11daMagLift_cFv(); -extern "C" void create__11daMagLift_cFv(); -extern "C" void Execute__11daMagLift_cFPPA3_A4_f(); -extern "C" void moveLift__11daMagLift_cFv(); -extern "C" void modeAcc__11daMagLift_cFv(); -extern "C" void init_modeMove__11daMagLift_cFv(); -extern "C" void modeMove__11daMagLift_cFv(); -extern "C" void init_modeBrk__11daMagLift_cFv(); -extern "C" void modeBrk__11daMagLift_cFv(); -extern "C" void init_modeWaitInit__11daMagLift_cFv(); -extern "C" void modeWaitInit__11daMagLift_cFv(); -extern "C" void init_modeWait__11daMagLift_cFv(); -extern "C" void modeWait__11daMagLift_cFv(); -extern "C" void init_modeMoveWait__11daMagLift_cFv(); -extern "C" void modeMoveWait__11daMagLift_cFv(); -extern "C" void modeDead__11daMagLift_cFv(); -extern "C" void setNextPoint__11daMagLift_cFv(); -extern "C" void Draw__11daMagLift_cFv(); -extern "C" void Delete__11daMagLift_cFv(); -extern "C" static void daMagLift_Draw__FP11daMagLift_c(); -extern "C" static void daMagLift_Execute__FP11daMagLift_c(); -extern "C" static void daMagLift_Delete__FP11daMagLift_c(); -extern "C" static void daMagLift_Create__FP10fopAc_ac_c(); -extern "C" void __dt__15daMagLift_HIO_cFv(); -extern "C" void __sinit_d_a_obj_magLift_cpp(); -extern "C" u8 const mSpeed__11daMagLift_c[64]; -extern "C" extern char const* const d_a_obj_magLift__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -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 dPath_GetRoomPath__Fii(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool Create__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 __mi__4cXyzCFRC3Vec(); -extern "C" bool __eq__4cXyzCFRC3Vec(); -extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff(); -extern "C" void cLib_chaseF__FPfff(); -extern "C" void __dl__FPv(); -extern "C" void __ptmf_scall(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" void __register_global_object(); - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80C8E6DC-80C8E6E8 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -101,96 +25,270 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { }; #pragma pop -/* 80C8E6FC-80C8E708 -00001 000C+00 0/1 0/0 0/0 .data @3736 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3736[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeAcc__11daMagLift_cFv, -}; -#pragma pop +static daMagLift_HIO_c l_HIO; -/* 80C8E708-80C8E714 -00001 000C+00 0/1 0/0 0/0 .data @3737 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3737[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMove__11daMagLift_cFv, -}; -#pragma pop +/* 80C8DA2C-80C8DA58 0000EC 002C+00 1/1 0/0 0/0 .text __ct__15daMagLift_HIO_cFv */ +daMagLift_HIO_c::daMagLift_HIO_c() { + field_0x4 = 0x3c; + field_0x5 = 1; +} -/* 80C8E714-80C8E720 -00001 000C+00 0/1 0/0 0/0 .data @3738 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3738[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeBrk__11daMagLift_cFv, -}; -#pragma pop +/* 80C8DAA0-80C8DB28 000160 0088+00 2/2 0/0 0/0 .text setBaseMtx__11daMagLift_cFv */ +void daMagLift_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z); + mpModel->setBaseScale(scale); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); +} -/* 80C8E720-80C8E72C -00001 000C+00 0/1 0/0 0/0 .data @3739 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3739[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__11daMagLift_cFv, -}; -#pragma pop +/* 80C8DB28-80C8DB94 0001E8 006C+00 1/0 0/0 0/0 .text CreateHeap__11daMagLift_cFv */ +int daMagLift_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("L_maglift", 4); -/* 80C8E72C-80C8E738 -00001 000C+00 0/1 0/0 0/0 .data @3740 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3740[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWaitInit__11daMagLift_cFv, -}; -#pragma pop + if (modelData == NULL) { + // FIXME: For shield decomp matching, needs a JUT assert. + } -/* 80C8E738-80C8E744 -00001 000C+00 0/1 0/0 0/0 .data @3741 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3741[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeDead__11daMagLift_cFv, -}; -#pragma pop + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } -/* 80C8E744-80C8E750 -00001 000C+00 0/1 0/0 0/0 .data @3742 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3742[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeMoveWait__11daMagLift_cFv, -}; -#pragma pop + return 1; +} -/* 80C8E750-80C8E7B0 000074 0060+00 0/1 0/0 0/0 .data mode_proc$3735 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 mode_proc[96] = { - 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* ############################################################################################## */ +/* 80C8E65C-80C8E69C 000000 0040+00 4/4 0/0 0/0 .rodata mSpeed__11daMagLift_c */ +const f32 daMagLift_c::mSpeed[16] = { + 5.0f, 6.6666665f, 8.333333f, 10.0f, 11.666667f, 13.333333f, 15.0f, 16.666666f, + 18.333334f, 20.0f, 21.666666f, 23.333334f, 25.0f, 26.666666f, 28.333334f, 3.3333333f, }; -#pragma pop + +/* 80C8DB94-80C8DD38 000254 01A4+00 1/1 0/0 0/0 .text create__11daMagLift_cFv */ +int daMagLift_c::create() { + fopAcM_SetupActor(this, daMagLift_c); + int phase = dComIfG_resLoad(&mPhaseReq,"L_maglift"); + if (phase == cPhs_COMPLEATE_e) { + if (MoveBGCreate("L_maglift", 7, dBgS_MoveBGProc_TypicalRotY, 0x4000, NULL) == cPhs_ERROR_e) { + return cPhs_ERROR_e; + } + field_0x5ae = fopAcM_GetParam(this); + dPath* path = dPath_GetRoomPath(field_0x5ae, fopAcM_GetRoomNo(this)); + if (path == NULL) { + return cPhs_INIT_e; + } + current.pos = path->m_points->m_position; + field_0x5af = 1; + mPoint = 0; + mMoveSpeed = mSpeed[getMoveSpeed()]; + fopAcM_SetSpeedF(this, 0.0f); + u8 mInitMove = fopAcM_GetParam(this) >> 0xc & 0xFF; + if (mInitMove == 0xff) { + init_modeWaitInit(); + } else { + is_switch = dComIfGs_isSwitch(mInitMove, fopAcM_GetHomeRoomNo(this)); + if (is_switch) { + init_modeWaitInit(); + } else { + init_modeMoveWait(); + } + } + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + setBaseMtx(); + } + return phase; +} + +/* 80C8DD38-80C8DD88 0003F8 0050+00 1/0 0/0 0/0 .text Execute__11daMagLift_cFPPA3_A4_f */ +int daMagLift_c::Execute(Mtx** i_mtx) { + moveLift(); + *i_mtx = &mpModel->getBaseTRMtx(); + setBaseMtx(); + return 1; +} + +/* 80C8DD88-80C8DE98 000448 0110+00 1/1 0/0 0/0 .text moveLift__11daMagLift_cFv */ +void daMagLift_c::moveLift() { + if (field_0x5ae != 0xff) { + typedef void (daMagLift_c::*modeFunc)(); + static modeFunc mode_proc[8] = {&daMagLift_c::modeAcc, &daMagLift_c::modeMove, + &daMagLift_c::modeBrk, &daMagLift_c::modeWait, + &daMagLift_c::modeWaitInit, &daMagLift_c::modeDead, + &daMagLift_c::modeMoveWait}; + + (this->*mode_proc[mMode])(); + } +} + +/* 80C8DE98-80C8DF20 000558 0088+00 1/0 0/0 0/0 .text modeAcc__11daMagLift_cFv */ +void daMagLift_c::modeAcc() { + if (TRUE == cLib_chaseF(&speedF, mMoveSpeed, mMoveSpeed / 30.0f) || current.pos == field_0x5b4) { + init_modeMove(); + } + cLib_addCalcPos(¤t.pos, field_0x5b4, 1.0f, fopAcM_GetSpeedF(this), 0.1f); +} + +/* 80C8DF20-80C8DF2C 0005E0 000C+00 1/1 0/0 0/0 .text init_modeMove__11daMagLift_cFv */ +void daMagLift_c::init_modeMove() { + mMode = MODE_MOVE_e; +} + +/* 80C8DF2C-80C8E1EC 0005EC 02C0+00 1/0 0/0 0/0 .text modeMove__11daMagLift_cFv */ +void daMagLift_c::modeMove() { + cXyz sp54(field_0x5c0); + cXyz sp60(field_0x5b4); + + f32 magn = (sp54 - sp60).abs() * 0.3f; + f32 min = 30.0f; + f32 max = 300.0f; + + if (magn < min) { + magn = min; + } + + if (magn > max) { + magn = max; + } + + f32 o_magn = (current.pos - field_0x5b4).abs(); + if (magn > o_magn) { + init_modeBrk(); + } + cLib_addCalcPos(¤t.pos, field_0x5b4, 1.0f, fopAcM_GetSpeedF(this), 0.1f); +} + +/* 80C8E1EC-80C8E1F8 0008AC 000C+00 1/1 0/0 0/0 .text init_modeBrk__11daMagLift_cFv */ +void daMagLift_c::init_modeBrk() { + mMode = MODE_BRK_e; +} + +/* 80C8E1F8-80C8E260 0008B8 0068+00 1/0 0/0 0/0 .text modeBrk__11daMagLift_cFv */ +void daMagLift_c::modeBrk() { + f32 val = cLib_addCalcPos(¤t.pos, field_0x5b4, 0.1f, fopAcM_GetSpeedF(this), 0.5f); + if (val == 0.0f) { + fopAcM_SetSpeedF(this, 0.0f); + init_modeWaitInit(); + } +} + +/* 80C8E260-80C8E26C 000920 000C+00 3/3 0/0 0/0 .text init_modeWaitInit__11daMagLift_cFv + */ +void daMagLift_c::init_modeWaitInit() { + mMode = MODE_WAIT_INIT_e; +} + +/* 80C8E26C-80C8E2A0 00092C 0034+00 1/0 0/0 0/0 .text modeWaitInit__11daMagLift_cFv */ +void daMagLift_c::modeWaitInit() { + setNextPoint(); + init_modeWait(); +} + +/* 80C8E2A0-80C8E2AC 000960 000C+00 1/1 0/0 0/0 .text init_modeWait__11daMagLift_cFv */ +void daMagLift_c::init_modeWait() { + mMode = MODE_WAIT_e; +} + +/* 80C8E2AC-80C8E2B8 00096C 000C+00 1/0 0/0 0/0 .text modeWait__11daMagLift_cFv */ +void daMagLift_c::modeWait() { + mMode = MODE_ACC_e; +} + +/* 80C8E2B8-80C8E2C4 000978 000C+00 1/1 0/0 0/0 .text init_modeMoveWait__11daMagLift_cFv + */ +void daMagLift_c::init_modeMoveWait() { + mMode = MODE_MOVE_WAIT_e; +} + +/* 80C8E2C4-80C8E318 000984 0054+00 1/0 0/0 0/0 .text modeMoveWait__11daMagLift_cFv */ +void daMagLift_c::modeMoveWait() { + if (fopAcM_isSwitch(this, (fopAcM_GetParam(this) & 0xff000) >> 0xc) & 0xff) { + init_modeWaitInit(); + } +} + +/* 80C8E318-80C8E31C 0009D8 0004+00 1/0 0/0 0/0 .text modeDead__11daMagLift_cFv */ +void daMagLift_c::modeDead() { + /* empty function */ +} + +/* 80C8E31C-80C8E450 0009DC 0134+00 1/1 0/0 0/0 .text setNextPoint__11daMagLift_cFv */ +void daMagLift_c::setNextPoint() { + s16 sVar1 = mPoint + field_0x5af; + dPath* path = dPath_GetRoomPath(field_0x5ae, fopAcM_GetRoomNo(this)); + if (dPath_ChkClose(path) != 0) { + int val = path->m_num - 1; + if (sVar1 > val) { + sVar1 = 0; + } else if (sVar1 < 0) { + sVar1 = (s8) val; + } + } else { + if (sVar1 > path->m_num - 1) { + field_0x5af = 0xff; + sVar1 = (s8) (path->m_num - 2); + } else if (sVar1 < 0) { + field_0x5af = 0x1; + sVar1 = 1; + } else { + dStage_dPnt_c* pnt = &path->m_points[mPoint]; + if (pnt->mArg0 == 0) { + sVar1 = mPoint; + } + } + } + field_0x5c0 = field_0x5b4; + dStage_dPnt_c* pnt = &path->m_points[sVar1]; + field_0x5b4 = pnt->m_position; + mPoint = sVar1; +} + +/* 80C8E450-80C8E4F4 000B10 00A4+00 1/0 0/0 0/0 .text Draw__11daMagLift_cFv */ +int daMagLift_c::Draw() { + g_env_light.settingTevStruct(0x40, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr); + + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); + return 1; +} + +/* 80C8E4F4-80C8E524 000BB4 0030+00 1/0 0/0 0/0 .text Delete__11daMagLift_cFv */ +int daMagLift_c::Delete() { + dComIfG_resDelete(&mPhaseReq, "L_maglift"); + return 1; +} + +/* 80C8E524-80C8E550 000BE4 002C+00 1/0 0/0 0/0 .text daMagLift_Draw__FP11daMagLift_c */ +static int daMagLift_Draw(daMagLift_c* i_this) { + return i_this->Draw(); +} + +/* 80C8E550-80C8E570 000C10 0020+00 1/0 0/0 0/0 .text daMagLift_Execute__FP11daMagLift_c + */ +static int daMagLift_Execute(daMagLift_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80C8E570-80C8E590 000C30 0020+00 1/0 0/0 0/0 .text daMagLift_Delete__FP11daMagLift_c + */ +static int daMagLift_Delete(daMagLift_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80C8E590-80C8E5B0 000C50 0020+00 1/0 0/0 0/0 .text daMagLift_Create__FP10fopAc_ac_c */ +static int daMagLift_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); +} /* 80C8E7B0-80C8E7D0 -00001 0020+00 1/0 0/0 0/0 .data l_daMagLift_Method */ static actor_method_class l_daMagLift_Method = { - (process_method_func)daMagLift_Create__FP10fopAc_ac_c, - (process_method_func)daMagLift_Delete__FP11daMagLift_c, - (process_method_func)daMagLift_Execute__FP11daMagLift_c, - 0, - (process_method_func)daMagLift_Draw__FP11daMagLift_c, + (process_method_func) daMagLift_Create, + (process_method_func) daMagLift_Delete, + (process_method_func) daMagLift_Execute, + (process_method_func) NULL, + (process_method_func) daMagLift_Draw, }; /* 80C8E7D0-80C8E800 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_MagLift */ @@ -210,291 +308,3 @@ extern actor_process_profile_definition g_profile_Obj_MagLift = { fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C8E800-80C8E828 000124 0028+00 1/1 0/0 0/0 .data __vt__11daMagLift_c */ -SECTION_DATA extern void* __vt__11daMagLift_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__11daMagLift_cFv, - (void*)Create__16dBgS_MoveBgActorFv, - (void*)Execute__11daMagLift_cFPPA3_A4_f, - (void*)Draw__11daMagLift_cFv, - (void*)Delete__11daMagLift_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80C8E828-80C8E834 00014C 000C+00 2/2 0/0 0/0 .data __vt__15daMagLift_HIO_c */ -SECTION_DATA extern void* __vt__15daMagLift_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15daMagLift_HIO_cFv, -}; - -/* 80C8E834-80C8E840 000158 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */ -SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__14mDoHIO_entry_cFv, -}; - -/* 80C8DA2C-80C8DA58 0000EC 002C+00 1/1 0/0 0/0 .text __ct__15daMagLift_HIO_cFv */ -daMagLift_HIO_c::daMagLift_HIO_c() { - // NONMATCHING -} - -/* 80C8DA58-80C8DAA0 000118 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */ -// mDoHIO_entry_c::~mDoHIO_entry_c() { -extern "C" void __dt__14mDoHIO_entry_cFv() { - // NONMATCHING -} - -/* 80C8DAA0-80C8DB28 000160 0088+00 2/2 0/0 0/0 .text setBaseMtx__11daMagLift_cFv */ -void daMagLift_c::setBaseMtx() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E6D0-80C8E6D0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C8E6D0 = "L_maglift"; -#pragma pop - -/* 80C8DB28-80C8DB94 0001E8 006C+00 1/0 0/0 0/0 .text CreateHeap__11daMagLift_cFv */ -void daMagLift_c::CreateHeap() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E65C-80C8E69C 000000 0040+00 4/4 0/0 0/0 .rodata mSpeed__11daMagLift_c */ -SECTION_RODATA u8 const daMagLift_c::mSpeed[64] = { - 0x40, 0xA0, 0x00, 0x00, 0x40, 0xD5, 0x55, 0x55, 0x41, 0x05, 0x55, 0x55, 0x41, 0x20, 0x00, 0x00, - 0x41, 0x3A, 0xAA, 0xAB, 0x41, 0x55, 0x55, 0x55, 0x41, 0x70, 0x00, 0x00, 0x41, 0x85, 0x55, 0x55, - 0x41, 0x92, 0xAA, 0xAB, 0x41, 0xA0, 0x00, 0x00, 0x41, 0xAD, 0x55, 0x55, 0x41, 0xBA, 0xAA, 0xAB, - 0x41, 0xC8, 0x00, 0x00, 0x41, 0xD5, 0x55, 0x55, 0x41, 0xE2, 0xAA, 0xAB, 0x40, 0x55, 0x55, 0x55, -}; -COMPILER_STRIP_GATE(0x80C8E65C, &daMagLift_c::mSpeed); - -/* 80C8E69C-80C8E6A0 000040 0004+00 1/3 0/0 0/0 .rodata @3718 */ -SECTION_RODATA static u8 const lit_3718[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C8E69C, &lit_3718); - -/* 80C8DB94-80C8DD38 000254 01A4+00 1/1 0/0 0/0 .text create__11daMagLift_cFv */ -void daMagLift_c::create() { - // NONMATCHING -} - -/* 80C8DD38-80C8DD88 0003F8 0050+00 1/0 0/0 0/0 .text Execute__11daMagLift_cFPPA3_A4_f */ -void daMagLift_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E848-80C8E854 000008 000C+00 1/1 0/0 0/0 .bss @3619 */ -static u8 lit_3619[12]; - -/* 80C8E854-80C8E85C 000014 0008+00 1/1 0/0 0/0 .bss l_HIO */ -static u8 l_HIO[8]; - -/* 80C8E85C-80C8E860 00001C 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80C8E85C[4]; - -/* 80C8DD88-80C8DE98 000448 0110+00 1/1 0/0 0/0 .text moveLift__11daMagLift_cFv */ -void daMagLift_c::moveLift() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E6A0-80C8E6A4 000044 0004+00 0/2 0/0 0/0 .rodata @3759 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3759 = 30.0f; -COMPILER_STRIP_GATE(0x80C8E6A0, &lit_3759); -#pragma pop - -/* 80C8E6A4-80C8E6A8 000048 0004+00 0/2 0/0 0/0 .rodata @3760 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3760 = 1.0f; -COMPILER_STRIP_GATE(0x80C8E6A4, &lit_3760); -#pragma pop - -/* 80C8E6A8-80C8E6AC 00004C 0004+00 0/3 0/0 0/0 .rodata @3761 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3761 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C8E6A8, &lit_3761); -#pragma pop - -/* 80C8DE98-80C8DF20 000558 0088+00 1/0 0/0 0/0 .text modeAcc__11daMagLift_cFv */ -void daMagLift_c::modeAcc() { - // NONMATCHING -} - -/* 80C8DF20-80C8DF2C 0005E0 000C+00 1/1 0/0 0/0 .text init_modeMove__11daMagLift_cFv */ -void daMagLift_c::init_modeMove() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E6AC-80C8E6B4 000050 0008+00 0/1 0/0 0/0 .rodata @3834 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3834[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8E6AC, &lit_3834); -#pragma pop - -/* 80C8E6B4-80C8E6BC 000058 0008+00 0/1 0/0 0/0 .rodata @3835 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3835[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8E6B4, &lit_3835); -#pragma pop - -/* 80C8E6BC-80C8E6C4 000060 0008+00 0/1 0/0 0/0 .rodata @3836 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3836[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C8E6BC, &lit_3836); -#pragma pop - -/* 80C8E6C4-80C8E6C8 000068 0004+00 0/1 0/0 0/0 .rodata @3837 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3837 = 3.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C8E6C4, &lit_3837); -#pragma pop - -/* 80C8E6C8-80C8E6CC 00006C 0004+00 0/1 0/0 0/0 .rodata @3838 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3838 = 300.0f; -COMPILER_STRIP_GATE(0x80C8E6C8, &lit_3838); -#pragma pop - -/* 80C8DF2C-80C8E1EC 0005EC 02C0+00 1/0 0/0 0/0 .text modeMove__11daMagLift_cFv */ -void daMagLift_c::modeMove() { - // NONMATCHING -} - -/* 80C8E1EC-80C8E1F8 0008AC 000C+00 1/1 0/0 0/0 .text init_modeBrk__11daMagLift_cFv */ -void daMagLift_c::init_modeBrk() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80C8E6CC-80C8E6D0 000070 0004+00 0/1 0/0 0/0 .rodata @3852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3852 = 0.5f; -COMPILER_STRIP_GATE(0x80C8E6CC, &lit_3852); -#pragma pop - -/* 80C8E1F8-80C8E260 0008B8 0068+00 1/0 0/0 0/0 .text modeBrk__11daMagLift_cFv */ -void daMagLift_c::modeBrk() { - // NONMATCHING -} - -/* 80C8E260-80C8E26C 000920 000C+00 3/3 0/0 0/0 .text init_modeWaitInit__11daMagLift_cFv - */ -void daMagLift_c::init_modeWaitInit() { - // NONMATCHING -} - -/* 80C8E26C-80C8E2A0 00092C 0034+00 1/0 0/0 0/0 .text modeWaitInit__11daMagLift_cFv */ -void daMagLift_c::modeWaitInit() { - // NONMATCHING -} - -/* 80C8E2A0-80C8E2AC 000960 000C+00 1/1 0/0 0/0 .text init_modeWait__11daMagLift_cFv */ -void daMagLift_c::init_modeWait() { - // NONMATCHING -} - -/* 80C8E2AC-80C8E2B8 00096C 000C+00 1/0 0/0 0/0 .text modeWait__11daMagLift_cFv */ -void daMagLift_c::modeWait() { - // NONMATCHING -} - -/* 80C8E2B8-80C8E2C4 000978 000C+00 1/1 0/0 0/0 .text init_modeMoveWait__11daMagLift_cFv - */ -void daMagLift_c::init_modeMoveWait() { - // NONMATCHING -} - -/* 80C8E2C4-80C8E318 000984 0054+00 1/0 0/0 0/0 .text modeMoveWait__11daMagLift_cFv */ -void daMagLift_c::modeMoveWait() { - // NONMATCHING -} - -/* 80C8E318-80C8E31C 0009D8 0004+00 1/0 0/0 0/0 .text modeDead__11daMagLift_cFv */ -void daMagLift_c::modeDead() { - /* empty function */ -} - -/* 80C8E31C-80C8E450 0009DC 0134+00 1/1 0/0 0/0 .text setNextPoint__11daMagLift_cFv */ -void daMagLift_c::setNextPoint() { - // NONMATCHING -} - -/* 80C8E450-80C8E4F4 000B10 00A4+00 1/0 0/0 0/0 .text Draw__11daMagLift_cFv */ -void daMagLift_c::Draw() { - // NONMATCHING -} - -/* 80C8E4F4-80C8E524 000BB4 0030+00 1/0 0/0 0/0 .text Delete__11daMagLift_cFv */ -void daMagLift_c::Delete() { - // NONMATCHING -} - -/* 80C8E524-80C8E550 000BE4 002C+00 1/0 0/0 0/0 .text daMagLift_Draw__FP11daMagLift_c */ -static void daMagLift_Draw(daMagLift_c* param_0) { - // NONMATCHING -} - -/* 80C8E550-80C8E570 000C10 0020+00 1/0 0/0 0/0 .text daMagLift_Execute__FP11daMagLift_c - */ -static void daMagLift_Execute(daMagLift_c* param_0) { - // NONMATCHING -} - -/* 80C8E570-80C8E590 000C30 0020+00 1/0 0/0 0/0 .text daMagLift_Delete__FP11daMagLift_c - */ -static void daMagLift_Delete(daMagLift_c* param_0) { - // NONMATCHING -} - -/* 80C8E590-80C8E5B0 000C50 0020+00 1/0 0/0 0/0 .text daMagLift_Create__FP10fopAc_ac_c */ -static void daMagLift_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C8E5B0-80C8E60C 000C70 005C+00 2/1 0/0 0/0 .text __dt__15daMagLift_HIO_cFv */ -daMagLift_HIO_c::~daMagLift_HIO_c() { - // NONMATCHING -} - -/* 80C8E60C-80C8E648 000CCC 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_magLift_cpp */ -void __sinit_d_a_obj_magLift_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80C8E60C, __sinit_d_a_obj_magLift_cpp); -#pragma pop - -/* 80C8E6D0-80C8E6D0 000074 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */