From 0b50e106ccc4fb32b52ee6d9487bc9b3d5fc16aa Mon Sep 17 00:00:00 2001 From: Niklas Bauer Date: Fri, 11 Apr 2025 20:56:18 +0900 Subject: [PATCH] d_a_obj_crvgate Matching (#2385) * d_a_obj_crvgate equivalent * d_a_obj_crvgate matching * d_a_obj_crvgate comments --- configure.py | 2 +- include/d/actor/d_a_obj_crvgate.h | 76 +- src/d/actor/d_a_obj_crvgate.cpp | 1405 +++++++++++++++-------------- 3 files changed, 805 insertions(+), 678 deletions(-) diff --git a/configure.py b/configure.py index 2e0929de9ce..6a4fc5f2b16 100755 --- a/configure.py +++ b/configure.py @@ -1863,7 +1863,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_cowdoor"), ActorRel(NonMatching, "d_a_obj_crope"), ActorRel(NonMatching, "d_a_obj_crvfence"), - ActorRel(NonMatching, "d_a_obj_crvgate"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvgate"), ActorRel(NonMatching, "d_a_obj_crvhahen"), ActorRel(NonMatching, "d_a_obj_crvlh_down"), ActorRel(NonMatching, "d_a_obj_crvlh_up"), diff --git a/include/d/actor/d_a_obj_crvgate.h b/include/d/actor/d_a_obj_crvgate.h index 949f4679b8e..ce3717744dc 100644 --- a/include/d/actor/d_a_obj_crvgate.h +++ b/include/d/actor/d_a_obj_crvgate.h @@ -1,28 +1,34 @@ #ifndef D_A_OBJ_CRVGATE_H #define D_A_OBJ_CRVGATE_H -#include "f_op/f_op_actor_mng.h" +#include "d/d_bg_s_acch.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" /** * @ingroup actors-objects * @class daObjCRVGATE_c * @brief Caravan Gate * - * @details - * + * @details Caravan Gate at Arbiter's Grounds Exterior at King Bulblin's Tent. + * The gate consists of two door objects that work as a pair. One door references + * the other through the mpDoorPair pointer. The door will move when the player + * touches it. + * At the end of the fight, the player rides the bullbo and crashes into the door, + * destroying it. */ -class daObjCRVGATE_c : public fopAc_ac_c { +class daObjCRVGATE_c : public dBgS_MoveBgActor { public: /* 80BD0398 */ void initCcCylinder(); /* 80BD0500 */ void setCcCylinder(); - /* 80BD069C */ void checkOpen(); + /* 80BD069C */ int checkOpen(); /* 80BD0880 */ void actionStartEvent(); /* 80BD0978 */ void actionWaitEvent(); /* 80BD0A64 */ void Demo_Set(); /* 80BD0B7C */ void SetOpen(); /* 80BD0B88 */ void actionDemoEvent(); /* 80BD0D28 */ void event_proc_call(); - /* 80BD0D90 */ void CheckVec(); + /* 80BD0D90 */ int CheckVec(); /* 80BD0E1C */ void KeyVib(); /* 80BD0F9C */ void DoorVib(); /* 80BD10C0 */ void VibStop(); @@ -34,19 +40,61 @@ public: /* 80BD2338 */ void B_CloseAction(); /* 80BD245C */ void SetB_Close(); /* 80BD2528 */ void setBaseMtx(); - /* 80BD2670 */ void CreateHeap(); + /* 80BD2670 */ int CreateHeap(); /* 80BD2758 */ void SetDoor(); - /* 80BD28C0 */ void create(); - /* 80BD2E88 */ void Create(); - /* 80BD2ECC */ void Execute(f32 (**)[3][4]); - /* 80BD2FB8 */ void Draw(); - /* 80BD3074 */ void Delete(); + /* 80BD28C0 */ int create(); + /* 80BD2E88 */ int Create(); + /* 80BD2ECC */ int Execute(f32 (**)[3][4]); + /* 80BD2FB8 */ int Draw(); + /* 80BD3074 */ int Delete(); private: - /* 0x568 */ u8 field_0x568[0xde4 - 0x568]; + /* 0x5A0 */ s32 mEventID; + /* 0x5A4 */ bool mFlagGateClosed; + /* 0x5A5 */ bool field_0x5a5; + /* 0x5A6 */ u8 field_0x5a6[2]; + /* 0x5A8 */ s16 mDoorTargetAngle; + /* 0x5AA */ bool mFlagDemoEventPlay; + /* 0x5AB */ u8 mDestructionCount; + /* 0x5AC */ u8 mKeyParam; + /* 0x5AD */ bool mEventFlag; + /* 0x5AE */ bool mFlagDoorStuck; + /* 0x5AF */ u8 mStatus; + /* 0x5B0 */ bool mDoorPairLoaded; + /* 0x5B1 */ bool mFlagDoorMove; + /* 0x5B4 */ daObjCRVGATE_c* mpDoorPair; + /* 0x5B8 */ f32 mFovY; + /* 0x5BC */ s16 field_0x5bc; + /* 0x5C0 */ cXyz mCamEye; + /* 0x5CC */ cXyz mCamCenter; + /* 0x5D8 */ csXyz mDoorOpenAngle; + /* 0x5E0 */ cXyz mPos; + /* 0x5EC */ cXyz mPosAccel; + /* 0x5F8 */ cXyz mPosTmp; + /* 0x604 */ u8 field_0x604[6]; + /* 0x60A */ csXyz mMoveAngle; + /* 0x610 */ csXyz mDoorVib; + /* 0x618 */ f32 mMinHeight; + /* 0x61C */ cXyz mXyzSph[3]; + /* 0x640 */ fpc_ProcID mDoorPairProcID; + /* 0x644 */ s16 mDoorY; + /* 0x646 */ s16 mDoorAngle; + /* 0x648 */ s16 mDoorSwingTargetAngle; + /* 0x64A */ s16 mDoorStep; + /* 0x64C */ Z2SoundObjSimple mSound; + /* 0x66C */ s16 field_0x66c; + /* 0x66E */ u8 field_0x66e[6]; + /* 0x674 */ J3DModel* mpModelGate; + /* 0x678 */ J3DModel* mpModelKey; + /* 0x67C */ request_of_phase_process_class mPhaseReq; + /* 0x684 */ dBgS_AcchCir mAcchCir; + /* 0x6C4 */ dBgS_ObjAcch mAcch; + /* 0x89C */ dCcD_Stts mStts; + /* 0x8D8 */ dCcD_Sph mSph[3]; + /* 0xC80 */ dCcD_Cyl mCyl; + /* 0xDBC */ u8 field_0xdbc[40]; }; STATIC_ASSERT(sizeof(daObjCRVGATE_c) == 0xde4); - #endif /* D_A_OBJ_CRVGATE_H */ diff --git a/src/d/actor/d_a_obj_crvgate.cpp b/src/d/actor/d_a_obj_crvgate.cpp index 0332f29a6cd..97c42c78d23 100644 --- a/src/d/actor/d_a_obj_crvgate.cpp +++ b/src/d/actor/d_a_obj_crvgate.cpp @@ -1,799 +1,878 @@ /** * @file d_a_obj_crvgate.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_crvgate.h" -#include "dol2asm.h" -#include "d/d_camera.h" +#include "d/actor/d_a_obj_eff.h" +#include "d/actor/d_a_player.h" -// -// Forward References: -// - -extern "C" void initCcCylinder__14daObjCRVGATE_cFv(); -extern "C" void setCcCylinder__14daObjCRVGATE_cFv(); -extern "C" static void daObjCRVGATE_Create__FP10fopAc_ac_c(); -extern "C" static void daObjCRVGATE_Delete__FP14daObjCRVGATE_c(); -extern "C" void checkOpen__14daObjCRVGATE_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void actionStartEvent__14daObjCRVGATE_cFv(); -extern "C" void actionWaitEvent__14daObjCRVGATE_cFv(); -extern "C" void Demo_Set__14daObjCRVGATE_cFv(); -extern "C" void SetOpen__14daObjCRVGATE_cFv(); -extern "C" void actionDemoEvent__14daObjCRVGATE_cFv(); -extern "C" void event_proc_call__14daObjCRVGATE_cFv(); -extern "C" void CheckVec__14daObjCRVGATE_cFv(); -extern "C" void KeyVib__14daObjCRVGATE_cFv(); -extern "C" void DoorVib__14daObjCRVGATE_cFv(); -extern "C" void VibStop__14daObjCRVGATE_cFv(); -extern "C" void CloseVibration__14daObjCRVGATE_cFv(); -extern "C" void CloseAction__14daObjCRVGATE_cFv(); -extern "C" void OpenAction__14daObjCRVGATE_cFv(); -extern "C" void HakaiMotion__14daObjCRVGATE_cFv(); -extern "C" void DoorAction__14daObjCRVGATE_cFv(); -extern "C" void B_CloseAction__14daObjCRVGATE_cFv(); -extern "C" void SetB_Close__14daObjCRVGATE_cFv(); -extern "C" void setBaseMtx__14daObjCRVGATE_cFv(); -extern "C" static void daObjCRVGATE_Draw__FP14daObjCRVGATE_c(); -extern "C" static void daObjCRVGATE_Execute__FP14daObjCRVGATE_c(); -extern "C" void CreateHeap__14daObjCRVGATE_cFv(); -extern "C" void SetDoor__14daObjCRVGATE_cFv(); -extern "C" void create__14daObjCRVGATE_cFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __ct__4cXyzFv(); -extern "C" static bool daObjCRVGATE_IsDelete__FP14daObjCRVGATE_c(); -extern "C" void Create__14daObjCRVGATE_cFv(); -extern "C" void Execute__14daObjCRVGATE_cFPPA3_A4_f(); -extern "C" void Draw__14daObjCRVGATE_cFv(); -extern "C" void Delete__14daObjCRVGATE_cFv(); -extern "C" static void func_80BD30A8(); -extern "C" static void func_80BD30B0(); -extern "C" extern char const* const d_a_obj_crvgate__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void transM__14mDoMtx_stack_cFfff(); -extern "C" void transM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcIt_Judge__FPFPvPv_PvPv(); -extern "C" void fopAcM_SearchByID__FUiPP10fopAc_ac_c(); -extern "C" void fopAcM_SearchByName__FsPP10fopAc_ac_c(); -extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc(); -extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -extern "C" void fpcSch_JudgeByID__FPvPv(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -extern "C" void getObjectResName2Index__14dRes_control_cFPCcPCc(); -extern "C" void reset__14dEvt_control_cFv(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -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 SetObj__16dBgS_PolyPassChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkTgHit__12dCcD_GObjInfFv(); -extern "C" void ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void GetCoHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void Start__9dCamera_cFv(); -extern "C" void Stop__9dCamera_cFv(); -extern "C" void SetTrimSize__9dCamera_cFl(); -extern "C" void Reset__9dCamera_cF4cXyz4cXyz(); -extern "C" void dCam_getBody__Fv(); -extern "C" void Eye__9dCamera_cFv(); -extern "C" void Center__9dCamera_cFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void GetAc__8cCcD_ObjFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_chaseAngleS__FPsss(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __ct__16Z2SoundObjSimpleFv(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// - -/* ############################################################################################## */ /* 80BD30C0-80BD3100 000000 0040+00 12/12 0/0 0/0 .rodata ccCylSrc$3774 */ -SECTION_RODATA static u8 const ccCylSrc[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, +const static dCcD_SrcSph ccSphSrc = { + { + {0x0, {{0x0, 0x0, 0x13}, {0x100000, 0x1F}, 0x75}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x1}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 100.0f, 0.0f}, 60.0f}, // mSph + } // mSphAttr }; -COMPILER_STRIP_GATE(0x80BD30C0, &ccCylSrc); -/* 80BD3100-80BD3104 000040 0004+00 0/2 0/0 0/0 .rodata @3792 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3792 = 100.0f; -COMPILER_STRIP_GATE(0x80BD3100, &lit_3792); -#pragma pop +/* 80BD31F4-80BD31F8 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ +static char* l_arcName = "CrvGate"; -/* 80BD3104-80BD3108 000044 0004+00 0/2 0/0 0/0 .rodata @3793 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3793 = 95.0f; -COMPILER_STRIP_GATE(0x80BD3104, &lit_3793); -#pragma pop - -/* 80BD3108-80BD3110 000048 0004+04 1/9 0/0 0/0 .rodata @3794 */ -SECTION_RODATA static u8 const lit_3794[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80BD3108, &lit_3794); - -/* 80BD3110-80BD3118 000050 0008+00 2/6 0/0 0/0 .rodata @3796 */ -SECTION_RODATA static u8 const lit_3796[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD3110, &lit_3796); +/* 80BD32B8-80BD32BC 000000 0002+02 1/1 0/0 0/0 .bss s_CoCount__29@unnamed@d_a_obj_crvgate_cpp@ + */ +namespace { +static u16 s_CoCount = 0; +} /* 80BD0398-80BD0500 000078 0168+00 1/1 0/0 0/0 .text initCcCylinder__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::initCcCylinder() { - // NONMATCHING + mStts.Init(0xff, 0xff, this); + + for (int i = 0; i < 3; i++) { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::transM(i * 95.0f + 100.0f, 0, 0); + mDoMtx_stack_c::multVecZero(&mXyzSph[i]); + } + + mSph[0].Set(ccSphSrc); + mSph[0].SetStts(&mStts); + mSph[0].SetC(mXyzSph[0]); + + mSph[1].Set(ccSphSrc); + mSph[1].SetStts(&mStts); + mSph[1].SetC(mXyzSph[1]); + + mSph[2].Set(ccSphSrc); + mSph[2].SetStts(&mStts); + mSph[2].SetC(mXyzSph[2]); } -/* ############################################################################################## */ -/* 80BD3118-80BD311C 000058 0004+00 0/1 0/0 0/0 .rodata @3817 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3817 = 80.0f; -COMPILER_STRIP_GATE(0x80BD3118, &lit_3817); -#pragma pop - -/* 80BD311C-80BD3120 00005C 0004+00 0/1 0/0 0/0 .rodata @3818 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3818 = 130.0f; -COMPILER_STRIP_GATE(0x80BD311C, &lit_3818); -#pragma pop - /* 80BD0500-80BD0658 0001E0 0158+00 1/1 0/0 0/0 .text setCcCylinder__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::setCcCylinder() { - // NONMATCHING + for (int i = 0; i < 3; i++) { + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::YrotM(mDoorAngle); + mDoMtx_stack_c::transM(i * 95.0f + 80.0f, 130.0f, 0); + mDoMtx_stack_c::multVecZero(&mXyzSph[i]); + } + + mSph[0].SetC(mXyzSph[0]); + dComIfG_Ccsp()->Set(&mSph[0]); + + mSph[1].SetC(mXyzSph[1]); + dComIfG_Ccsp()->Set(&mSph[1]); + + mSph[2].SetC(mXyzSph[2]); + dComIfG_Ccsp()->Set(&mSph[2]); } /* 80BD0658-80BD0678 000338 0020+00 1/0 0/0 0/0 .text daObjCRVGATE_Create__FP10fopAc_ac_c */ -static void daObjCRVGATE_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObjCRVGATE_Create(fopAc_ac_c* i_this) { + return static_cast(i_this)->create(); } /* 80BD0678-80BD069C 000358 0024+00 1/0 0/0 0/0 .text daObjCRVGATE_Delete__FP14daObjCRVGATE_c */ -static void daObjCRVGATE_Delete(daObjCRVGATE_c* param_0) { - // NONMATCHING +static int daObjCRVGATE_Delete(daObjCRVGATE_c* i_this) { + i_this->MoveBGDelete(); + return 1; } -/* ############################################################################################## */ -/* 80BD3120-80BD3128 000060 0008+00 0/3 0/0 0/0 .rodata @3881 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3881[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD3120, &lit_3881); -#pragma pop - -/* 80BD3128-80BD3130 000068 0008+00 0/3 0/0 0/0 .rodata @3882 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3882[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD3128, &lit_3882); -#pragma pop - -/* 80BD3130-80BD3138 000070 0008+00 0/4 0/0 0/0 .rodata @3883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3883[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD3130, &lit_3883); -#pragma pop - -/* 80BD3138-80BD313C 000078 0004+00 0/3 0/0 0/0 .rodata @3884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3884 = 200.0f; -COMPILER_STRIP_GATE(0x80BD3138, &lit_3884); -#pragma pop - /* 80BD069C-80BD0844 00037C 01A8+00 1/1 0/0 0/0 .text checkOpen__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::checkOpen() { - // NONMATCHING -} +int daObjCRVGATE_c::checkOpen() { + if (dComIfGs_getKeyNum() == 0) { + return 0; + } -/* 80BD0844-80BD0880 000524 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 height_diff = fopAcM_GetAngle_p(this)->y - fopAcM_GetAngle_p(player)->y; + + if (abs(height_diff) < 0x5000) { + return 0; + } + + return mPos.absXZ(fopAcM_GetPosition(player)) < 200.0f; } /* 80BD0880-80BD0978 000560 00F8+00 1/1 0/0 0/0 .text actionStartEvent__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::actionStartEvent() { - // NONMATCHING + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + dCamera_c* camera_body = dCam_getBody(); + + if (!eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xffff, 0); + eventInfo.onCondition(0x0); + } else { + camera->mCamera.Stop(); + + field_0x5bc = 0x0; + mFovY = camera_body->Fovy(); + + mCamCenter = camera_body->Center(); + mCamEye = camera_body->Eye(); + + camera->mCamera.SetTrimSize(3); + mEventID = 2; + } } -/* ############################################################################################## */ -/* 80BD313C-80BD3140 00007C 0004+00 2/5 0/0 0/0 .rodata @3937 */ -SECTION_RODATA static f32 const lit_3937 = 1.0f; -COMPILER_STRIP_GATE(0x80BD313C, &lit_3937); - -/* 80BD3140-80BD3144 000080 0004+00 2/5 0/0 0/0 .rodata @3938 */ -SECTION_RODATA static f32 const lit_3938 = -1.0f; -COMPILER_STRIP_GATE(0x80BD3140, &lit_3938); - /* 80BD0978-80BD0A64 000658 00EC+00 1/1 0/0 0/0 .text actionWaitEvent__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::actionWaitEvent() { - // NONMATCHING + if (eventInfo.checkCommandDoor()) { + daPy_py_c* player = daPy_getPlayerActorClass(); + player->changeOriginalDemo(); + player->changeDemoMode(1, 0, 0, 0); + + mEventID = 1; + dComIfGp_setItemKeyNumCount(-1); + mEventFlag = true; + Demo_Set(); + + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_OPEN, &mPos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + + fopAcM_OffStatus(this, 0x100); + } else { + if (checkOpen() != 0) { + eventInfo.onCondition(4); + } + } } -/* ############################################################################################## */ -/* 80BD3144-80BD3148 000084 0004+00 0/3 0/0 0/0 .rodata @3990 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3990 = 300.0f; -COMPILER_STRIP_GATE(0x80BD3144, &lit_3990); -#pragma pop - -/* 80BD3148-80BD314C 000088 0004+00 0/3 0/0 0/0 .rodata @3991 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3991 = 500.0f; -COMPILER_STRIP_GATE(0x80BD3148, &lit_3991); -#pragma pop - /* 80BD0A64-80BD0B7C 000744 0118+00 1/1 0/0 0/0 .text Demo_Set__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::Demo_Set() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz* player_pos = fopAcM_GetPosition_p(player); + + s16 target_angle = cLib_targetAngleY(¤t.pos, player_pos); + + cXyz* ac_pos = fopAcM_GetPosition_p(this); + ac_pos->absXZ(*player_pos); // ? + + mCamEye.set(ac_pos->x + cM_scos(target_angle + 0x1000) * 300.0f, ac_pos->y + 500.0f, + ac_pos->z - cM_ssin(target_angle + 0x1000) * 300.0f); + mCamCenter.set(ac_pos->x, ac_pos->y + 200.0f, ac_pos->z); } /* 80BD0B7C-80BD0B88 00085C 000C+00 2/2 0/0 0/0 .text SetOpen__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::SetOpen() { - // NONMATCHING + mStatus = 0x0; } -/* ############################################################################################## */ -/* 80BD314C-80BD3150 00008C 0004+00 0/1 0/0 0/0 .rodata @4030 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4030 = -5.0f; -COMPILER_STRIP_GATE(0x80BD314C, &lit_4030); -#pragma pop - -/* 80BD3150-80BD3154 000090 0004+00 0/2 0/0 0/0 .rodata @4031 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4031 = 55.0f; -COMPILER_STRIP_GATE(0x80BD3150, &lit_4031); -#pragma pop - -/* 80BD3154-80BD3158 000094 0004+00 0/1 0/0 0/0 .rodata @4032 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4032 = 0.5f; -COMPILER_STRIP_GATE(0x80BD3154, &lit_4032); -#pragma pop - -/* 80BD3158-80BD315C 000098 0004+00 0/1 0/0 0/0 .rodata @4033 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4033 = 5.0f / 3.0f; -COMPILER_STRIP_GATE(0x80BD3158, &lit_4033); -#pragma pop - /* 80BD0B88-80BD0D28 000868 01A0+00 1/1 0/0 0/0 .text actionDemoEvent__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::actionDemoEvent() { - // NONMATCHING + if (!mFlagDemoEventPlay) { + mPosAccel.y += -5.0f; + mPos.y += mPosAccel.y; + if (mPos.y <= mMinHeight + 55.0f) { + mFlagDemoEventPlay = true; + mPos.y = mMinHeight + 55.0f; + daObjEff::Act_c::make_land_smoke(&mPos, 0.5f); + mMoveAngle.z = 0x500; + } + } else { + cLib_chaseAngleS(&mDoorOpenAngle.x, 0x4000, mMoveAngle.z); + + mMoveAngle.z += 0x300; + if (mDoorOpenAngle.x == 0x4000) { + mEventID = 3; + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + + camera->mCamera.Reset(mCamCenter, mCamEye); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + + dComIfGp_event_reset(); + + SetOpen(); + mpDoorPair->SetOpen(); + } + } } /* 80BD0D28-80BD0D90 000A08 0068+00 1/1 0/0 0/0 .text event_proc_call__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::event_proc_call() { - // NONMATCHING + switch (mEventID) { + case 0: + actionWaitEvent(); + break; + case 1: + actionStartEvent(); + break; + case 2: + actionDemoEvent(); + break; + case 3: + mEventFlag = false; + break; + } } /* 80BD0D90-80BD0E1C 000A70 008C+00 1/1 0/0 0/0 .text CheckVec__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::CheckVec() { - // NONMATCHING +int daObjCRVGATE_c::CheckVec() { + cXyz player_pos = fopAcM_GetPosition(daPy_getPlayerActorClass()); + + Mtx inv_mtx; + mDoMtx_inverse(mpModelGate->getBaseTRMtx(), inv_mtx); + + mDoMtx_stack_c::copy(inv_mtx); + mDoMtx_stack_c::multVec(&player_pos, &player_pos); + + return player_pos.z > 0; } /* 80BD0E1C-80BD0F9C 000AFC 0180+00 1/1 0/0 0/0 .text KeyVib__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::KeyVib() { - // NONMATCHING + mMoveAngle.x -= 0x21; + mMoveAngle.z += mMoveAngle.x; + cLib_chaseAngleS(&mMoveAngle.y, 0, 0x150); + + if (mMoveAngle.y != 0x0) { + if (mKeyParam == 0x00) { + mpDoorPair->mDoorOpenAngle.x = mMoveAngle.y * cM_ssin(mMoveAngle.z); + mDoorOpenAngle.x = mMoveAngle.y * cM_ssin(mMoveAngle.z); + + if (mDoorOpenAngle.x > 0) { + mpDoorPair->mDoorOpenAngle.x = -mDoorOpenAngle.x; + mDoorOpenAngle.x = -mDoorOpenAngle.x; + } + } else { + mDoorOpenAngle.x = mMoveAngle.y * cM_ssin(mMoveAngle.z); + if (mDoorOpenAngle.x > 0) { + mDoorOpenAngle.x = -mDoorOpenAngle.x; + } + } + } else { + mFlagDoorStuck = false; + } } /* 80BD0F9C-80BD10C0 000C7C 0124+00 1/1 0/0 0/0 .text DoorVib__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::DoorVib() { - // NONMATCHING + mDoorVib.y -= 0x100; + mDoorVib.z += mDoorVib.y; + cLib_chaseAngleS(&mDoorVib.x, 0, 0x40); + + if (mDoorVib.x != 0) { + if (mKeyParam == 0x01) { + mDoorAngle = mDoorVib.x * cM_ssin(mDoorVib.z); + mpDoorPair->mDoorAngle = -mDoorAngle; + } else { + mDoorAngle = -mDoorVib.x * cM_ssin(mDoorVib.z); + mpDoorPair->mDoorAngle = -mDoorAngle; + } + } } /* 80BD10C0-80BD10D0 000DA0 0010+00 1/1 0/0 0/0 .text VibStop__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::VibStop() { - // NONMATCHING + mDoorVib.y = 0; + mDoorVib.x = 0; } /* 80BD10D0-80BD1110 000DB0 0040+00 1/1 0/0 0/0 .text CloseVibration__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::CloseVibration() { - // NONMATCHING + if (mStatus != 0x4) { + KeyVib(); + } + DoorVib(); } -/* ############################################################################################## */ -/* 80BD315C-80BD3160 00009C 0004+00 0/2 0/0 0/0 .rodata @4086 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4086 = 350.0f; -COMPILER_STRIP_GATE(0x80BD315C, &lit_4086); -#pragma pop +/* 80BD315C-80BD3160 00009C 0004+00 0/2 0/0 0/0 .rodata @4086 UNUSED */ +static f32 dummyFloat1() { + return 350.0f; +} -/* 80BD3160-80BD3164 0000A0 0004+00 0/2 0/0 0/0 .rodata @4087 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4087 = 120.0f; -COMPILER_STRIP_GATE(0x80BD3160, &lit_4087); -#pragma pop - -/* 80BD3164-80BD3168 0000A4 0004+00 0/1 0/0 0/0 .rodata @4430 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4430 = 490.0f; -COMPILER_STRIP_GATE(0x80BD3164, &lit_4430); -#pragma pop - -/* 80BD3168-80BD316C 0000A8 0004+00 0/1 0/0 0/0 .rodata @4431 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4431 = 10.0f; -COMPILER_STRIP_GATE(0x80BD3168, &lit_4431); -#pragma pop - -/* 80BD316C-80BD3170 0000AC 0004+00 0/1 0/0 0/0 .rodata @4432 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4432 = 70.0f; -COMPILER_STRIP_GATE(0x80BD316C, &lit_4432); -#pragma pop - -/* 80BD3170-80BD3174 0000B0 0004+00 0/1 0/0 0/0 .rodata @4433 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4433 = -30.0f; -COMPILER_STRIP_GATE(0x80BD3170, &lit_4433); -#pragma pop +/* 80BD3160-80BD3164 0000A0 0004+00 0/2 0/0 0/0 .rodata @4087 UNUSED */ +static f32 dummyFloat2() { + return 120.0f; +} /* 80BD1110-80BD18E0 000DF0 07D0+00 2/2 0/0 0/0 .text CloseAction__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::CloseAction() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz* player_pos = fopAcM_GetPosition_p(player); + csXyz og_DoorOpenAngle(mDoorOpenAngle.x, mDoorOpenAngle.y, mDoorOpenAngle.z); + + if (mXyzSph[1].absXZ(*player_pos) < 300.0f && player->checkFrontRollCrash()) { + if (mKeyParam == 0x01) { + mMoveAngle.y = -0x3000; + mMoveAngle.x = 0x1500; + } else { + mpDoorPair->mMoveAngle.y = -0x4000; + mpDoorPair->mMoveAngle.x = 0x1500; + } + + if (!mFlagGateClosed) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_ATTACK, &mPos, 0, 0, 1.0f, 1.0f, -1.0f, + -1.0f, 0); + } else { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + } + + mDoorVib.y = 0x3000; + mDoorVib.x = 0x500; + mpDoorPair->VibStop(); + mFlagDoorStuck = true; + } + + for (int i = 0; i < 3; i++) { + cLib_addCalcAngleS(&mDoorOpenAngle.x, 0, 2, 0x2000, 0x400); + + if (mSph[i].ChkTgHit()) { + if (!mFlagGateClosed) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_ATTACK, &mPos, 0, 0, 1.0f, 1.0f, -1.0f, + -1.0f, 0); + } else if (mKeyParam == 0xff) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + } + + if (mKeyParam == 0x01) { + mMoveAngle.y = -0x3000; + mMoveAngle.x = 0x1500; + } else { + mpDoorPair->mMoveAngle.y = -0x4000; + mpDoorPair->mMoveAngle.x = 0x1500; + } + + mDoorVib.y = 0x3000; + mDoorVib.x = 0x500; + mFlagDoorStuck = true; + mpDoorPair->VibStop(); + break; + } + if (mSph[i].ChkCoHit()) { + cCcD_Obj* hitObj = mSph[i].GetCoHitObj(); + fopAc_ac_c* boar_ac; + + if (fopAcM_GetName(hitObj->GetAc()) == PROC_E_WB && player->checkBoarRun() != 0 && + fopAcM_SearchByName(PROC_E_WB, &boar_ac) != 0) + { + cXyz* boar_speed = fopAcM_GetSpeed_p(boar_ac); + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (dComIfGp_event_runCheck() != 0) { + if (fopAcM_GetPosition(player).absXZ(mXyzSph[i]) < 490.0f && + boar_speed->absXZ() > 0.0f) + { + // Start escape event, destroying the door + + dComIfGp_getVibration().StartShock(5, 0x1F, cXyz(0.0f, 1.0f, 0.0f)); + fopAcM_seStartCurrent(this, 0x802C5, 0); + mpDoorPair->mStatus = 0x2; + mStatus = 0x2; + mFlagDoorStuck = true; + mpDoorPair->mFlagDoorStuck = true; + mDestructionCount = 0; + + if (mKeyParam == 0x01) { + mDoorSwingTargetAngle = -0x7000; + } else { + mpDoorPair->mDoorSwingTargetAngle = -0x7000; + } + + mPosAccel.set(10.0f, 70.0f, -30.0f); + } + } + } + } + } + + CloseVibration(); + + if (mStatus != 0x04) { + mPos.set(current.pos.x + cM_scos(shape_angle.y + mDoorAngle) * 350.0f, + 120.0f + current.pos.y, + current.pos.z - cM_ssin(shape_angle.y + mDoorAngle) * 350.0f); + } else { + mDoorOpenAngle = og_DoorOpenAngle; + } } -/* ############################################################################################## */ -/* 80BD3174-80BD3178 0000B4 0004+00 0/1 0/0 0/0 .rodata @4648 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4648 = 288.0f; -COMPILER_STRIP_GATE(0x80BD3174, &lit_4648); -#pragma pop - -/* 80BD3178-80BD317C 0000B8 0004+00 0/1 0/0 0/0 .rodata @4649 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4649 = 112.0f; -COMPILER_STRIP_GATE(0x80BD3178, &lit_4649); -#pragma pop - /* 80BD18E0-80BD21E4 0015C0 0904+00 1/1 0/0 0/0 .text OpenAction__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::OpenAction() { - // NONMATCHING -} + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 og_DoorAngle = mDoorAngle; + s16 new_DoorAngle = og_DoorAngle; -/* ############################################################################################## */ -/* 80BD317C-80BD3180 0000BC 0004+00 1/1 0/0 0/0 .rodata @4663 */ -SECTION_RODATA static f32 const lit_4663 = -2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80BD317C, &lit_4663); + if (CheckVec() != 0) { + cXyz* player_pos = fopAcM_GetPosition_p(player); + if (mXyzSph[1].absXZ(*player_pos) < 300.0f && player->checkFrontRollCrash()) { + mDoorSwingTargetAngle = mDoorAngle + 0x1000; + mFlagDoorMove = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + } + + for (int i = 0; i < 3; i++) { + if (mSph[i].ChkTgHit() != 0) { + mDoorSwingTargetAngle = mDoorAngle + 0x1000; + mFlagDoorMove = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + + } else { + if (mSph[i].ChkCoHit() != 0) { + if (fopAcM_GetName(mSph[i].GetCoHitObj()->GetAc()) == PROC_E_WB) { + if (mKeyParam == 0xff) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_BREAK, ¤t.pos, 0, 0, + 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + daPy_py_c* player = daPy_getPlayerActorClass(); + mDoorSwingTargetAngle = mDoorAngle + fopAcM_GetSpeedF(player) * 288.0f; + mFlagDoorMove = true; + } else { + new_DoorAngle = mDoorAngle + fopAcM_GetSpeedF(player) * 112.0f; + if (new_DoorAngle > 0x4000) { + new_DoorAngle = 0x4000; + } + + if (new_DoorAngle != og_DoorAngle && !field_0x5a5) { + field_0x5a5 = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, + 1.0f, 1.0f, -1.0f, -1.0f, 0); + } else if (new_DoorAngle == og_DoorAngle) { + field_0x5a5 = false; + } + } + + break; + } + } + } + + if (new_DoorAngle == og_DoorAngle) { + field_0x5a5 = false; + } + + if (mFlagDoorMove == true) { + if (mDoorAngle > 0x4000) { + mDoorSwingTargetAngle = 0x4000 - (mDoorSwingTargetAngle - 0x4000); + } + + cLib_addCalcAngleS(&mDoorAngle, mDoorSwingTargetAngle, 6, 0x2000, 0x50); + if ((u16)(mDoorAngle - mDoorSwingTargetAngle) < 0x100) { + mFlagDoorMove = false; + } + } else { + cLib_addCalcAngleS(&mDoorAngle, new_DoorAngle, 6, 0x2000, 0x50); + } + } else { + if (mXyzSph[1].absXZ(*fopAcM_GetPosition_p(player)) < 300.0f && + player->checkFrontRollCrash()) + { + mDoorSwingTargetAngle = -0x1000; //?? + mDoorSwingTargetAngle = (mDoorAngle - 0x1000); + mFlagDoorMove = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + } + + for (int i = 0; i < 3; i++) { + if (mSph[i].ChkTgHit() != 0) { + mDoorSwingTargetAngle = mDoorAngle - 0x1000; + mFlagDoorMove = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + + } else { + if (mSph[i].ChkCoHit() != 0) { + if (fopAcM_GetName(mSph[i].GetCoHitObj()->GetAc()) == PROC_E_WB) { + daPy_py_c* player = daPy_getPlayerActorClass(); + + mDoorSwingTargetAngle = mDoorAngle - fopAcM_GetSpeedF(player) * 288.0f; + mFlagDoorMove = true; + + if (mKeyParam == 0xff) { + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_BREAK, ¤t.pos, 0, 0, + 1.0f, 1.0f, -1.0f, -1.0f, 0); + } + } else { + new_DoorAngle = mDoorAngle - fopAcM_GetSpeedF(player) * 112.0f; + + if (mKeyParam == 0x01) { + if (new_DoorAngle < -0x2300) { + new_DoorAngle = -0x2300; + } + } else if (new_DoorAngle < -0x4000) { + new_DoorAngle = -0x4000; + } + + if (new_DoorAngle != og_DoorAngle && !field_0x5a5) { + field_0x5a5 = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, + 1.0f, 1.0f, -1.0f, -1.0f, 0); + } else { + if (new_DoorAngle == og_DoorAngle) { + field_0x5a5 = false; + } + } + } + } + } + } + + if (new_DoorAngle == og_DoorAngle) { + field_0x5a5 = false; + } + + if (mFlagDoorMove == 1) { + if (mKeyParam == 0x01) { + if (mDoorAngle < -0x2300) { + mDoorSwingTargetAngle = -0x2300 - (mDoorSwingTargetAngle + 0x2300); + } + } else if (mDoorAngle < -0x4000) { + mDoorSwingTargetAngle = -0x4000 - (mDoorSwingTargetAngle + 0x4000); + } + + cLib_addCalcAngleS(&mDoorAngle, mDoorSwingTargetAngle, 6, 0x2000, 0x50); + if ((u16)(mDoorAngle - mDoorSwingTargetAngle) < 0x100) { + mFlagDoorMove = false; + } + } else { + cLib_addCalcAngleS(&mDoorAngle, new_DoorAngle, 6, 0x2000, 0x50); + } + } +} /* 80BD21E4-80BD22C8 001EC4 00E4+00 1/1 0/0 0/0 .text HakaiMotion__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::HakaiMotion() { - // NONMATCHING + if (mDoorAngle < -0x6000) { + mDoorSwingTargetAngle = -0x6000 - (mDoorSwingTargetAngle + 0x6000); + } + + cLib_addCalcAngleS(&mDoorAngle, (int)mDoorSwingTargetAngle, 6, 0x2000, 0x50); + cLib_addCalcAngleS(&mpDoorPair->mDoorAngle, (int)-mDoorSwingTargetAngle, 6, 0x2000, 0x50); + + if (mPos.y <= mMinHeight) { + mDestructionCount++; + mPos.y = mMinHeight; + mDoorOpenAngle.x = 0x4000; + if (mDestructionCount > 3) { + SetOpen(); + mpDoorPair->SetOpen(); + } else { + mPosAccel.y = mPosAccel.y * -0.4f; + } + } } /* 80BD22C8-80BD2338 001FA8 0070+00 1/1 0/0 0/0 .text DoorAction__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::DoorAction() { - // NONMATCHING + switch (mStatus) { + case 0: + OpenAction(); + break; + case 1: + CloseAction(); + break; + case 2: + if (mKeyParam == 0x01) { + HakaiMotion(); + } + break; + case 4: + B_CloseAction(); + break; + default: + break; + } } -/* ############################################################################################## */ -/* 80BD3180-80BD3184 0000C0 0004+00 0/0 0/0 0/0 .rodata @4671 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4671 = 50.0f; -COMPILER_STRIP_GATE(0x80BD3180, &lit_4671); -#pragma pop +/* 80BD3180-80BD3184 0000C0 0004+00 0/0 0/0 0/0 .rodata @4671 UNUSED */ +static f32 const dummyFloat3() { + return 50.0f; +} -/* 80BD3184-80BD3188 0000C4 0004+00 0/0 0/0 0/0 .rodata @4672 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4672 = -10.0f; -COMPILER_STRIP_GATE(0x80BD3184, &lit_4672); -#pragma pop - -/* 80BD3188-80BD3190 0000C8 0004+04 0/1 0/0 0/0 .rodata @4700 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4700[1 + 1 /* padding */] = { - 7.0f / 10.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80BD3188, &lit_4700); -#pragma pop - -/* 80BD3190-80BD3198 0000D0 0008+00 0/1 0/0 0/0 .rodata @4701 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4701[8] = { - 0xBF, 0xE6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, -}; -COMPILER_STRIP_GATE(0x80BD3190, &lit_4701); -#pragma pop +/* 80BD3184-80BD3188 0000C4 0004+00 0/0 0/0 0/0 .rodata @4672 UNUSED */ +static f32 const dummyFloat4() { + return -10.0f; +} /* 80BD2338-80BD245C 002018 0124+00 1/1 0/0 0/0 .text B_CloseAction__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::B_CloseAction() { - // NONMATCHING + if (mDoorStep > 0x10) { + cLib_chaseAngleS(&mDoorAngle, mDoorTargetAngle, mDoorStep); + if (mDoorAngle == mDoorTargetAngle) { + if (!mFlagGateClosed) { + mFlagGateClosed = true; + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CLOSE, ¤t.pos, 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + } + mDoorStep *= (7.0f / 10.0f); + mDoorTargetAngle = -0.7 * mDoorTargetAngle; + } + } else { + CloseAction(); + } } /* 80BD245C-80BD2528 00213C 00CC+00 0/0 0/0 1/1 .text SetB_Close__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::SetB_Close() { - // NONMATCHING + Z2GetAudioMgr()->seStart(Z2SE_OBJ_CRVN_GATE_CREAK, ¤t.pos, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, + 0); + + if (mKeyParam == 0x01) { + mpDoorPair->SetB_Close(); + } + + mStatus = 0x4; + mDoorStep = 0xc18; + + if (abs(mDoorStep) < 0x500) { + mDoorStep = 0x500; + } + + if (mDoorAngle > 0x0) { + mDoorTargetAngle = -0xa30; + } else { + mDoorTargetAngle = 0xa30; + } } -/* ############################################################################################## */ -/* 80BD3198-80BD319C 0000D8 0004+00 0/1 0/0 0/0 .rodata @4757 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4757 = 35.0f; -COMPILER_STRIP_GATE(0x80BD3198, &lit_4757); -#pragma pop - -/* 80BD319C-80BD31A0 0000DC 0004+00 0/1 0/0 0/0 .rodata @4758 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4758 = -55.0f; -COMPILER_STRIP_GATE(0x80BD319C, &lit_4758); -#pragma pop - /* 80BD2528-80BD2624 002208 00FC+00 1/1 0/0 0/0 .text setBaseMtx__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::setBaseMtx() { - // NONMATCHING + cXyz local(0.0f, 0.0f, 35.0f); + mDoMtx_stack_c::transS(mPos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::transM(local); + + if (mFlagDemoEventPlay == true) { + mDoMtx_stack_c::transM(0.0f, -55.0f, 0.0f); + } + + mDoMtx_stack_c::ZXYrotM(mDoorOpenAngle); + + if (mFlagDemoEventPlay == true) { + mDoMtx_stack_c::transM(0.0f, 55.0f, 0.0f); + } + + mpModelKey->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::YrotM(mDoorAngle); + mpModelGate->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } /* 80BD2624-80BD2650 002304 002C+00 1/0 0/0 0/0 .text daObjCRVGATE_Draw__FP14daObjCRVGATE_c */ -static void daObjCRVGATE_Draw(daObjCRVGATE_c* param_0) { - // NONMATCHING +static int daObjCRVGATE_Draw(daObjCRVGATE_c* i_this) { + return i_this->MoveBGDraw(); } /* 80BD2650-80BD2670 002330 0020+00 2/1 0/0 0/0 .text daObjCRVGATE_Execute__FP14daObjCRVGATE_c */ -static void daObjCRVGATE_Execute(daObjCRVGATE_c* param_0) { - // NONMATCHING +static int daObjCRVGATE_Execute(daObjCRVGATE_c* i_this) { + return i_this->MoveBGExecute(); } -/* ############################################################################################## */ -/* 80BD31BC-80BD31BC 0000FC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BD31BC = "CrvGate"; -SECTION_DEAD static char const* const stringBase_80BD31C4 = "CaravanGate.bmd"; -SECTION_DEAD static char const* const stringBase_80BD31D4 = "CaravanKey.bmd"; -#pragma pop - -/* 80BD31F4-80BD31F8 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_crvgate__stringBase0; - /* 80BD2670-80BD2758 002350 00E8+00 1/0 0/0 0/0 .text CreateHeap__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::CreateHeap() { - // NONMATCHING -} +int daObjCRVGATE_c::CreateHeap() { + J3DModelData* model_data_gate = + (J3DModelData*)dComIfG_getObjectRes(l_arcName, "CaravanGate.bmd"); + mpModelGate = mDoExt_J3DModel__create(model_data_gate, 0x80000, 0x11000084); -/* ############################################################################################## */ -/* 80BD31A0-80BD31A4 0000E0 0004+00 0/1 0/0 0/0 .rodata @4833 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4833 = 700.0f; -COMPILER_STRIP_GATE(0x80BD31A0, &lit_4833); -#pragma pop + if (mpModelGate == NULL) { + return 0; + } + + if (mKeyParam == 0x00) { + J3DModelData* model_data_key = + (J3DModelData*)dComIfG_getObjectRes(l_arcName, "CaravanKey.bmd"); + mpModelKey = mDoExt_J3DModel__create(model_data_key, 0x80000, 0x11000084); + } + + if (mpModelGate == NULL) { // ? + return 0; + } + + return 1; +} /* 80BD2758-80BD28C0 002438 0168+00 1/1 0/0 0/0 .text SetDoor__14daObjCRVGATE_cFv */ void daObjCRVGATE_c::SetDoor() { - // NONMATCHING + cXyz* ac_pos = fopAcM_GetPosition_p(this); + csXyz* ac_angle = fopAcM_GetShapeAngle_p(this); + + cXyz child_pos(ac_pos->x + cM_scos(ac_angle->y) * 700.0f, ac_pos->y, + ac_pos->z - cM_ssin(ac_angle->y) * 700.0f); + + mPos.set(ac_pos->x + cM_scos(ac_angle->y) * 350.0f, 120.0f + ac_pos->y, + ac_pos->z - cM_ssin(ac_angle->y) * 350.0f); + + csXyz child_angle(ac_angle->x, ac_angle->y + 0x8000, ac_angle->z); + + if (mKeyParam == 0xff) { + attention_info.position = mPos; + attention_info.flags = 0x20; + attention_info.distances[5] = 0x0F; + + mKeyParam = 0x01; + s8 child_room = fopAcM_GetRoomNo(this); + fpc_ProcID parent_id = fopAcM_GetID(this); + + // Create the second (identical) part of the door (swinging gate). + mDoorPairProcID = fopAcM_createChild(PROC_Obj_CRVGATE, parent_id, 1, &child_pos, child_room, + &child_angle, NULL, -1, 0); + mDoorY = shape_angle.y; + } else { + mKeyParam = 0x00; + mDoorY = shape_angle.y; + fopAcM_SearchByID(parentActorID, (fopAc_ac_c**)&mpDoorPair); + } } -/* ############################################################################################## */ -/* 80BD31A4-80BD31A8 0000E4 0004+00 0/1 0/0 0/0 .rodata @4928 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4928 = -9.0f; -COMPILER_STRIP_GATE(0x80BD31A4, &lit_4928); -#pragma pop +/* 80BD28C0-80BD2BE4 0025A0 0324+00 1/1 0/0 0/0 .text create__14daObjCRVGATE_cFv */ +int daObjCRVGATE_c::create() { + fopAcM_SetupActor(this, daObjCRVGATE_c); + int ret = dComIfG_resLoad(&mPhaseReq, l_arcName); -/* 80BD31A8-80BD31AC 0000E8 0004+00 0/1 0/0 0/0 .rodata @4929 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4929 = -100.0f; -COMPILER_STRIP_GATE(0x80BD31A8, &lit_4929); -#pragma pop + if (ret == cPhs_COMPLEATE_e) { + gravity = -9.0f; -/* 80BD31AC-80BD31B0 0000EC 0004+00 0/1 0/0 0/0 .rodata @4930 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4930 = -200.0f; -COMPILER_STRIP_GATE(0x80BD31AC, &lit_4930); -#pragma pop + int dzb_id = dComIfG_getObjctResName2Index(l_arcName, "CaravanGate.dzb"); + ret = MoveBGCreate(l_arcName, dzb_id, dBgS_MoveBGProc_TypicalRotY, 0x1480, NULL); -/* 80BD31BC-80BD31BC 0000FC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BD31E3 = "CaravanGate.dzb"; -#pragma pop + if (ret == cPhs_ERROR_e) { + return ret; + } + + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + + initCcCylinder(); + fopAcM_SetMtx(this, mpModelGate->getBaseTRMtx()); + mKeyParam = (u8)fopAcM_GetParam(this); + SetDoor(); + + mFlagDemoEventPlay = false; + mEventID = 0; + mStatus = 0x1; + mPosAccel.set(0.0f, 0.0f, 0.0f); + mDoorAngle = 0; + mPosTmp = mPos; + + for (int i = 0; i < 3; i++) { + mSph[i].OnTgShield(); + } + + fopAcM_setCullSizeBox(this, -100.0f, 0.0, -200.0f, 500.0, 500.0, 200.0); + + cXyz acStack_40(current.pos.x, current.pos.y + 100.0f, current.pos.z); + if (fopAcM_gc_c::gndCheck(&acStack_40)) { + mMinHeight = fopAcM_gc_c::getGroundY(); + } + + mFlagGateClosed = false; + field_0x5a5 = false; + daObjCRVGATE_Execute(this); + } + + return ret; +} + +/* 80BD2E80-80BD2E88 002B60 0008+00 1/0 0/0 0/0 .text daObjCRVGATE_IsDelete__FP14daObjCRVGATE_c + */ +static int daObjCRVGATE_IsDelete(daObjCRVGATE_c* i_this) { + return 1; +} + +/* 80BD2E88-80BD2ECC 002B68 0044+00 1/0 0/0 0/0 .text Create__14daObjCRVGATE_cFv */ +int daObjCRVGATE_c::Create() { + fopAcM_setCullSizeBox(this, -1000.0f, -500.0f, -1000.0f, 1000.0f, 500.0f, 1000.0f); + return cPhs_COMPLEATE_e; +} + +/* 80BD2ECC-80BD2FB8 002BAC 00EC+00 1/0 0/0 0/0 .text Execute__14daObjCRVGATE_cFPPA3_A4_f + */ +int daObjCRVGATE_c::Execute(f32 (**param_0)[3][4]) { + s_CoCount = 0; + + if (mKeyParam == 0x01) { + if (fopAcM_SearchByID(mDoorPairProcID) != NULL && !mDoorPairLoaded) { + fopAcM_SearchByID(mDoorPairProcID, (fopAc_ac_c**)&mpDoorPair); + mDoorPairLoaded = true; + mEventFlag = false; + } + if (!mFlagDoorStuck) { + event_proc_call(); + } + } + + if (!mEventFlag) { + DoorAction(); + } + + *param_0 = &mBgMtx; + setBaseMtx(); + if (field_0x66c != 0) { + field_0x66c--; + } + setCcCylinder(); + + return 1; +} + +/* 80BD2FB8-80BD3074 002C98 00BC+00 1/0 0/0 0/0 .text Draw__14daObjCRVGATE_cFv */ +int daObjCRVGATE_c::Draw() { + g_env_light.settingTevStruct(8, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mpModelGate->mModelData, &tevStr); + if (mKeyParam == 0x01) { + g_env_light.setLightTevColorType_MAJI(mpModelKey->mModelData, &tevStr); + } + + dComIfGd_setListBG(); + + mDoExt_modelUpdateDL(mpModelGate); + if (mKeyParam == 0x01) { + mDoExt_modelUpdateDL(mpModelKey); + } + + return 1; +} + +/* 80BD3074-80BD30A8 002D54 0034+00 1/0 0/0 0/0 .text Delete__14daObjCRVGATE_cFv */ +int daObjCRVGATE_c::Delete() { + dComIfG_resDelete(&mPhaseReq, l_arcName); + return 1; +} /* 80BD31F8-80BD3218 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCRVGATE_Method */ static actor_method_class l_daObjCRVGATE_Method = { - (process_method_func)daObjCRVGATE_Create__FP10fopAc_ac_c, - (process_method_func)daObjCRVGATE_Delete__FP14daObjCRVGATE_c, - (process_method_func)daObjCRVGATE_Execute__FP14daObjCRVGATE_c, - (process_method_func)daObjCRVGATE_IsDelete__FP14daObjCRVGATE_c, - (process_method_func)daObjCRVGATE_Draw__FP14daObjCRVGATE_c, + (process_method_func)daObjCRVGATE_Create, (process_method_func)daObjCRVGATE_Delete, + (process_method_func)daObjCRVGATE_Execute, (process_method_func)daObjCRVGATE_IsDelete, + (process_method_func)daObjCRVGATE_Draw, }; /* 80BD3218-80BD3248 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_CRVGATE */ extern actor_process_profile_definition g_profile_Obj_CRVGATE = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_CRVGATE, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjCRVGATE_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 466, // mPriority - &l_daObjCRVGATE_Method, // sub_method - 0x00040180, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_CRVGATE, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjCRVGATE_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 466, // mPriority + &l_daObjCRVGATE_Method, // sub_method + 0x00040180, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80BD3248-80BD3254 000054 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80BD3254-80BD3260 000060 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80BD3260-80BD326C 00006C 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80BD326C-80BD3290 000078 0024+00 2/2 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80BD30B0, - (void*)NULL, - (void*)NULL, - (void*)func_80BD30A8, -}; - -/* 80BD3290-80BD32B8 00009C 0028+00 1/1 0/0 0/0 .data __vt__14daObjCRVGATE_c */ -SECTION_DATA extern void* __vt__14daObjCRVGATE_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__14daObjCRVGATE_cFv, - (void*)Create__14daObjCRVGATE_cFv, - (void*)Execute__14daObjCRVGATE_cFPPA3_A4_f, - (void*)Draw__14daObjCRVGATE_cFv, - (void*)Delete__14daObjCRVGATE_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80BD28C0-80BD2BE4 0025A0 0324+00 1/1 0/0 0/0 .text create__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::create() { - // NONMATCHING -} - -/* 80BD2BE4-80BD2C2C 0028C4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80BD2C2C-80BD2C74 00290C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80BD2C74-80BD2D40 002954 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80BD2D40-80BD2DC4 002A20 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80BD2DC4-80BD2E0C 002AA4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80BD2E0C-80BD2E7C 002AEC 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80BD2E7C-80BD2E80 002B5C 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80BD2E80-80BD2E88 002B60 0008+00 1/0 0/0 0/0 .text daObjCRVGATE_IsDelete__FP14daObjCRVGATE_c */ -static bool daObjCRVGATE_IsDelete(daObjCRVGATE_c* param_0) { - return true; -} - -/* ############################################################################################## */ -/* 80BD31B0-80BD31B4 0000F0 0004+00 0/1 0/0 0/0 .rodata @5063 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5063 = -1000.0f; -COMPILER_STRIP_GATE(0x80BD31B0, &lit_5063); -#pragma pop - -/* 80BD31B4-80BD31B8 0000F4 0004+00 0/1 0/0 0/0 .rodata @5064 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5064 = -500.0f; -COMPILER_STRIP_GATE(0x80BD31B4, &lit_5064); -#pragma pop - -/* 80BD31B8-80BD31BC 0000F8 0004+00 0/1 0/0 0/0 .rodata @5065 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5065 = 1000.0f; -COMPILER_STRIP_GATE(0x80BD31B8, &lit_5065); -#pragma pop - -/* 80BD2E88-80BD2ECC 002B68 0044+00 1/0 0/0 0/0 .text Create__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::Create() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BD32B8-80BD32BC 000000 0002+02 1/1 0/0 0/0 .bss s_CoCount__29@unnamed@d_a_obj_crvgate_cpp@ */ -static u8 data_80BD32B8[2 + 2 /* padding */]; - -/* 80BD2ECC-80BD2FB8 002BAC 00EC+00 1/0 0/0 0/0 .text Execute__14daObjCRVGATE_cFPPA3_A4_f - */ -void daObjCRVGATE_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING -} - -/* 80BD2FB8-80BD3074 002C98 00BC+00 1/0 0/0 0/0 .text Draw__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::Draw() { - // NONMATCHING -} - -/* 80BD3074-80BD30A8 002D54 0034+00 1/0 0/0 0/0 .text Delete__14daObjCRVGATE_cFv */ -void daObjCRVGATE_c::Delete() { - // NONMATCHING -} - -/* 80BD30A8-80BD30B0 002D88 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80BD30A8() { - // NONMATCHING -} - -/* 80BD30B0-80BD30B8 002D90 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80BD30B0() { - // NONMATCHING -} - -/* 80BD31BC-80BD31BC 0000FC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */