From c429ce21eb7cf4687da596c51fbc47249fbe4c13 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Sat, 28 Dec 2024 05:16:59 +0200 Subject: [PATCH] d_a_obj_cwall almost matching (#2270) * d_a_obj_cwall almost matching * d_a_obj_pdoor OK --- config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt | 20 +- configure.py | 4 +- include/d/actor/d_a_obj_cwall.h | 73 +- include/d/actor/d_a_obj_pdoor.h | 39 +- include/d/actor/d_a_player.h | 4 +- src/d/actor/d_a_obj_cwall.cpp | 1617 ++++++++---------- src/d/actor/d_a_obj_pdoor.cpp | 480 +++--- src/d/actor/d_a_player.cpp | 4 +- 8 files changed, 1033 insertions(+), 1208 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt b/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt index 289a56311c8..00d97fe9b71 100644 --- a/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt @@ -1,7 +1,7 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global -PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000078; // type:function size:0x104 scope:global +PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000078; // type:function size:0x104 scope:local initBaseMtx__12daObjPDoor_cFv = .text:0x0000017C; // type:function size:0x3C scope:global setBaseMtx__12daObjPDoor_cFv = .text:0x000001B8; // type:function size:0x64 scope:global Create__12daObjPDoor_cFv = .text:0x0000021C; // type:function size:0x110 scope:global @@ -15,10 +15,10 @@ init_modeRotate__12daObjPDoor_cFv = .text:0x00000878; // type:function size:0x1C modeRotate__12daObjPDoor_cFv = .text:0x00000894; // type:function size:0x2B4 scope:global Draw__12daObjPDoor_cFv = .text:0x00000B48; // type:function size:0xA4 scope:global Delete__12daObjPDoor_cFv = .text:0x00000BEC; // type:function size:0x40 scope:global -daObjPDoor_create1st__FP12daObjPDoor_c = .text:0x00000C2C; // type:function size:0x60 scope:global -daObjPDoor_MoveBGDelete__FP12daObjPDoor_c = .text:0x00000C8C; // type:function size:0x20 scope:global -daObjPDoor_MoveBGExecute__FP12daObjPDoor_c = .text:0x00000CAC; // type:function size:0x20 scope:global -daObjPDoor_MoveBGDraw__FP12daObjPDoor_c = .text:0x00000CCC; // type:function size:0x2C scope:global +daObjPDoor_create1st__FP12daObjPDoor_c = .text:0x00000C2C; // type:function size:0x60 scope:local +daObjPDoor_MoveBGDelete__FP12daObjPDoor_c = .text:0x00000C8C; // type:function size:0x20 scope:local +daObjPDoor_MoveBGExecute__FP12daObjPDoor_c = .text:0x00000CAC; // type:function size:0x20 scope:local +daObjPDoor_MoveBGDraw__FP12daObjPDoor_c = .text:0x00000CCC; // type:function size:0x2C scope:local _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global ...rodata.0 = .rodata:0x00000000; // type:label scope:local @@ -31,14 +31,14 @@ _dtors = .dtors:0x00000000; // type:label scope:global @4054 = .rodata:0x0000001C; // type:object size:0x4 scope:local @stringBase0 = .rodata:0x00000020; // type:object size:0xA scope:local data:string_table ...data.0 = .data:0x00000000; // type:label scope:local -cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global +cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local @1787 = .data:0x0000000C; // type:object size:0x4 scope:local -l_arcName = .data:0x00000020; // type:object size:0x4 scope:global data:4byte -l_cull_box = .data:0x00000024; // type:object size:0x18 scope:global data:float +l_arcName = .data:0x00000020; // type:object size:0x4 scope:local data:4byte +l_cull_box = .data:0x00000024; // type:object size:0x18 scope:local data:float @3781 = .data:0x0000003C; // type:object size:0xC scope:local @3782 = .data:0x00000048; // type:object size:0xC scope:local l_func$3780 = .data:0x00000054; // type:object size:0x18 scope:local -daObjPDoor_METHODS = .data:0x0000006C; // type:object size:0x20 scope:global +daObjPDoor_METHODS = .data:0x0000006C; // type:object size:0x20 scope:local g_profile_Obj_PushDoor = .data:0x0000008C; // type:object size:0x30 scope:global __vt__12daObjPDoor_c = .data:0x000000BC; // type:object size:0x28 scope:global -lbl_589_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +lbl_589_bss_0 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte diff --git a/configure.py b/configure.py index 5ad027c5760..8ccbe2ae26a 100644 --- a/configure.py +++ b/configure.py @@ -1798,7 +1798,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_crvlh_up"), ActorRel(Matching, "d_a_obj_crvsteel"), ActorRel(Matching, "d_a_obj_crystal"), - ActorRel(NonMatching, "d_a_obj_cwall"), + ActorRel(Equivalent, "d_a_obj_cwall"), ActorRel(Matching, "d_a_obj_damCps"), ActorRel(Matching, "d_a_obj_dan"), ActorRel(Matching, "d_a_obj_digholl"), @@ -1954,7 +1954,7 @@ config.libs = [ ActorRel(Matching, "d_a_obj_onsen"), ActorRel(Matching, "d_a_obj_onsenFire"), ActorRel(Matching, "d_a_obj_onsenTaru"), - ActorRel(NonMatching, "d_a_obj_pdoor"), + ActorRel(Matching, "d_a_obj_pdoor"), ActorRel(Matching, "d_a_obj_pdtile"), ActorRel(NonMatching, "d_a_obj_pdwall"), ActorRel(NonMatching, "d_a_obj_picture"), diff --git a/include/d/actor/d_a_obj_cwall.h b/include/d/actor/d_a_obj_cwall.h index 211775286f1..5867f80d3d2 100644 --- a/include/d/actor/d_a_obj_cwall.h +++ b/include/d/actor/d_a_obj_cwall.h @@ -1,6 +1,8 @@ #ifndef D_A_OBJ_CWALL_H #define D_A_OBJ_CWALL_H +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,21 +13,30 @@ * @details * */ -class daObjCwall_c : public fopAc_ac_c { +class daObjCwall_c : public dBgS_MoveBgActor { public: struct chain_s { public: /* 80BD6E94 */ ~chain_s(); /* 80BD6ED0 */ chain_s(); + + J3DModel* mModel; + cXyz mPos; }; + enum Type { + TYPE_0, + TYPE_1, + }; + + typedef void (daObjCwall_c::*modeFunc)(); /* 80BD6A4C */ void initBaseMtx(); /* 80BD6A88 */ void setBaseMtx(); - /* 80BD6AEC */ void Create(); - /* 80BD6D08 */ void CreateHeap(); - /* 80BD6ED4 */ void create1st(); - /* 80BD6F80 */ void Execute(f32 (**)[3][4]); + /* 80BD6AEC */ int Create(); + /* 80BD6D08 */ int CreateHeap(); + /* 80BD6ED4 */ int create1st(); + /* 80BD6F80 */ int Execute(Mtx**); /* 80BD7288 */ void setTension(); /* 80BD7718 */ void calcSePos(); /* 80BD7788 */ void getChainBasePos(cXyz*); @@ -40,14 +51,54 @@ public: /* 80BD8BC8 */ void initClose(); /* 80BD8BF0 */ void modeClose(); /* 80BD935C */ void setPower(f32, s16*); - /* 80BD9414 */ void checkWall(); - /* 80BD95A0 */ void checkPullNow(); - /* 80BD977C */ void checkPull(); - /* 80BD9848 */ void Draw(); - /* 80BD9948 */ void Delete(); + /* 80BD9414 */ BOOL checkWall(); + /* 80BD95A0 */ BOOL checkPullNow(); + /* 80BD977C */ BOOL checkPull(); + /* 80BD9848 */ int Draw(); + /* 80BD9948 */ int Delete(); + + u8 getArg0() { return fopAcM_GetParamBit(this, 0, 4); } + u8 getType() { return fopAcM_GetParamBit(this, 4, 4); } + u8 getSwbit() { return fopAcM_GetParamBit(this, 8, 8); } private: - /* 0x568 */ u8 field_0x568[0xf5c - 0x568]; + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mWallModel; + /* 0x5AC */ dCcD_Stts mStts; + /* 0x5E8 */ dCcD_Cyl mCyl; + /* 0x724 */ dCcD_Sph mSph; + /* 0x85C */ dCcD_Cyl mCyls[4]; + /* 0xD4C */ dCcD_Cyl mCyl2; + /* 0xE88 */ J3DModel* mHandleModel; + /* 0xE8C */ chain_s* mChains; + /* 0xE90 */ u8 field_0xe90; + /* 0xE91 */ u8 field_0xe91; + /* 0xE92 */ u8 field_0xe92; + /* 0xE93 */ u8 field_0xe93; + /* 0xE94 */ cXyz field_0xe94[7]; + /* 0xEE8*/ f32 field_0xee8[7]; + /* 0xF04 */ u8 field_0xf04[7]; + /* 0xF0B */ u8 field_0xf0b; + /* 0xF0C */ u8 field_0xf0c; + /* 0xF0D */ u8 field_0xf0d; + /* 0xF0E */ u8 field_0xf0e; + /* 0xF0F */ u8 field_0xf0f; + /* 0xF10 */ u8 field_0xf10; + /* 0xF11 */ u8 mType; + /* 0xF12 */ u8 field_0xf12; + /* 0xF14 */ s16 field_0xf14; + /* 0xF16 */ s16 field_0xf16; + /* 0xF18 */ s16 field_0xf18; + /* 0xF1A */ s16 field_0xf1a; + /* 0xF1C */ s16 field_0xf1c; + /* 0xF20 */ cXyz field_0xf20; + /* 0xF2C */ cXyz field_0xf2c; + /* 0xF38 */ cXyz field_0xf38; + /* 0xF44 */ cXyz field_0xf44; + /* 0xF50 */ f32 field_0xf50; + /* 0xF54 */ f32 field_0xf54; + /* 0xF58 */ u8 field_0xf58; + /* 0xF58 */ u8 field_0xf59; }; STATIC_ASSERT(sizeof(daObjCwall_c) == 0xf5c); diff --git a/include/d/actor/d_a_obj_pdoor.h b/include/d/actor/d_a_obj_pdoor.h index feec7aed90c..d7fa7813c5a 100644 --- a/include/d/actor/d_a_obj_pdoor.h +++ b/include/d/actor/d_a_obj_pdoor.h @@ -1,6 +1,7 @@ #ifndef D_A_OBJ_PDOOR_H #define D_A_OBJ_PDOOR_H +#include "d/d_bg_s_movebg_actor.h" #include "f_op/f_op_actor_mng.h" /** @@ -11,24 +12,44 @@ * @details * */ -class daObjPDoor_c : public fopAc_ac_c { +class daObjPDoor_c : public dBgS_MoveBgActor { public: + typedef void (daObjPDoor_c::*modeFunc)(); + + enum Mode { + MODE_WAIT, + MODE_ROTATE, + }; + /* 80CA9F9C */ void initBaseMtx(); /* 80CA9FD8 */ void setBaseMtx(); - /* 80CAA03C */ void Create(); - /* 80CAA14C */ void CreateHeap(); - /* 80CAA1BC */ void create1st(); - /* 80CAA23C */ void Execute(f32 (**)[3][4]); + /* 80CAA03C */ int Create(); + /* 80CAA14C */ int CreateHeap(); + /* 80CAA1BC */ int create1st(); + /* 80CAA23C */ int Execute(Mtx**); /* 80CAA290 */ void mode_proc_call(); /* 80CAA31C */ void init_modeWait(); /* 80CAA354 */ void modeWait(); /* 80CAA698 */ void init_modeRotate(); /* 80CAA6B4 */ void modeRotate(); - /* 80CAA968 */ void Draw(); - /* 80CAAA0C */ void Delete(); + /* 80CAA968 */ int Draw(); + /* 80CAAA0C */ int Delete(); -private: - /* 0x568 */ u8 field_0x568[0x5c4 - 0x568]; + u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwbit2() { return fopAcM_GetParamBit(this, 8, 8); } + + /* 0x5A0 */ request_of_phase_process_class mPhase; + /* 0x5A8 */ J3DModel* mModel; + /* 0x5AC */ s8 mDoorDirection; + /* 0x5AD */ u8 mMode; + /* 0x5B0 */ int field_0x5b0; + /* 0x5B4 */ u8 field_0x5b4; + /* 0x5B5 */ u8 field_0x5b5; + /* 0x5B6 */ u8 field_0x5b6[2]; + /* 0x5B8 */ s16 field_0x5b8; + /* 0x5BA */ s16 field_0x5ba; + /* 0x5BC */ s16 field_0x5bc; + /* 0x5C0 */ dBgW_Base::PushPullLabel mPushPullLabel; }; STATIC_ASSERT(sizeof(daObjPDoor_c) == 0x5c4); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index d044673891c..1a8a8814b2c 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -670,7 +670,7 @@ public: static f32 getAttentionOffsetY(); static int checkNowWolfEyeUp(); static void forceRestartRoom(int, u32, int); - static void setFmChainPos(fopAc_ac_c*, cXyz*, int); + static BOOL setFmChainPos(fopAc_ac_c*, cXyz*, int); static void cancelFmChainGrab(); static void setLookPos(cXyz*); static void setPlayerSe(u32); @@ -698,7 +698,7 @@ public: cXyz* getLeftFootPosP() { return &mLeftFootPos; } BOOL checkCopyRodThrowAfter() const { return checkNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER); } BOOL checkRide() const { return checkHorseRide() || checkBoarRide() || checkSpinnerRide() || checkCanoeRide() || checkBoardRide(); } - const cXyz& getRightHandPos() const { return mRightHandPos; } + cXyz getRightHandPos() const { return mRightHandPos; } const cXyz getLeftHandPos() const { return mLeftHandPos; } const cXyz getItemPos() const { return mItemPos; } diff --git a/src/d/actor/d_a_obj_cwall.cpp b/src/d/actor/d_a_obj_cwall.cpp index 26dec0b3f85..9461358a26a 100644 --- a/src/d/actor/d_a_obj_cwall.cpp +++ b/src/d/actor/d_a_obj_cwall.cpp @@ -4,306 +4,103 @@ */ #include "d/actor/d_a_obj_cwall.h" +#include "SSystem/SComponent/c_math.h" +#include "SSystem/SComponent/c_lib.h" +#include "d/actor/d_a_player.h" +#include "Z2AudioLib/Z2Instances.h" #include "d/d_cc_d.h" -#include "dol2asm.h" +#include "d/d_com_inf_game.h" +#include "cmath.h" - -// -// Forward References: -// - -extern "C" void initBaseMtx__12daObjCwall_cFv(); -extern "C" void setBaseMtx__12daObjCwall_cFv(); -extern "C" void Create__12daObjCwall_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void CreateHeap__12daObjCwall_cFv(); -extern "C" void __dt__Q212daObjCwall_c7chain_sFv(); -extern "C" void __ct__Q212daObjCwall_c7chain_sFv(); -extern "C" void create1st__12daObjCwall_cFv(); -extern "C" void Execute__12daObjCwall_cFPPA3_A4_f(); -extern "C" void setTension__12daObjCwall_cFv(); -extern "C" void calcSePos__12daObjCwall_cFv(); -extern "C" void getChainBasePos__12daObjCwall_cFP4cXyz(); -extern "C" void setChainMtx__12daObjCwall_cFv(); -extern "C" void chain_control__12daObjCwall_cFv(); -extern "C" void chain_control2__12daObjCwall_cFv(); -extern "C" void block_mode_proc_call__12daObjCwall_cFv(); -extern "C" void initWait__12daObjCwall_cFv(); -extern "C" void modeWait__12daObjCwall_cFv(); -extern "C" void initWalk__12daObjCwall_cFv(); -extern "C" void modeWalk__12daObjCwall_cFv(); -extern "C" void initClose__12daObjCwall_cFv(); -extern "C" void modeClose__12daObjCwall_cFv(); -extern "C" void setPower__12daObjCwall_cFfPs(); -extern "C" void checkWall__12daObjCwall_cFv(); -extern "C" void checkPullNow__12daObjCwall_cFv(); -extern "C" void checkPull__12daObjCwall_cFv(); -extern "C" void Draw__12daObjCwall_cFv(); -extern "C" void Delete__12daObjCwall_cFv(); -extern "C" static void daObjCwall_create1st__FP12daObjCwall_c(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __ct__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8dCcD_CylFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" static void daObjCwall_MoveBGDelete__FP12daObjCwall_c(); -extern "C" static void daObjCwall_MoveBGExecute__FP12daObjCwall_c(); -extern "C" static void daObjCwall_MoveBGDraw__FP12daObjCwall_c(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" void func_80BD9EAC(void* _this, s16*); -extern "C" void func_80BD9EC8(void* _this, u8*); -extern "C" void __sinit_d_a_obj_cwall_cpp(); -extern "C" void getRightHandPos__9daPy_py_cCFv(); -extern "C" extern char const* const d_a_obj_cwall__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotS__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void transS__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c(); -extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz(); -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 getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void StartShock__12dVibration_cFii4cXyz(); -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 __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 Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi(); -extern "C" void setPlayerSe__9daPy_py_cFUl(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void atan2sX_Z__4cXyzCFv(); -extern "C" void cM_atan2s__Fff(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nwa__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void __construct_new_array(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_22(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_22(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -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" f32 Zero__4cXyz[3]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" void __register_global_object(); - -// -// Declarations: -// +// NONMATCHING - getRightHandPos is not generated at the end of the TU /* 80BD6A4C-80BD6A88 0000EC 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daObjCwall_cFv */ void daObjCwall_c::initBaseMtx() { - // NONMATCHING + mWallModel->setBaseScale(scale); + setBaseMtx(); } /* 80BD6A88-80BD6AEC 000128 0064+00 2/2 0/0 0/0 .text setBaseMtx__12daObjCwall_cFv */ void daObjCwall_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(shape_angle.y); + mWallModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -/* ############################################################################################## */ /* 80BD9FA4-80BD9FAC 000000 0008+00 11/11 0/0 0/0 .rodata l_wallBmd */ -SECTION_RODATA static u8 const l_wallBmd[8] = { - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, +static u32 const l_wallBmd[2] = { + 5, 5, }; -COMPILER_STRIP_GATE(0x80BD9FA4, &l_wallBmd); /* 80BD9FAC-80BD9FB4 000008 0008+00 0/1 0/0 0/0 .rodata l_chainBmd */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_chainBmd[8] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, +static u32 const l_chainBmd[2] = { + 4, 4, }; -COMPILER_STRIP_GATE(0x80BD9FAC, &l_chainBmd); -#pragma pop /* 80BD9FB4-80BD9FBC 000010 0008+00 0/1 0/0 0/0 .rodata l_handleBmd */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_handleBmd[8] = { - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, +static u32 const l_handleBmd[2] = { + 6, 6, }; -COMPILER_STRIP_GATE(0x80BD9FB4, &l_handleBmd); -#pragma pop /* 80BD9FBC-80BD9FC4 000018 0008+00 1/1 0/0 0/0 .rodata l_dzb */ -SECTION_RODATA static u8 const l_dzb[8] = { - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, +static u32 const l_dzb[2] = { + 9, 9, }; -COMPILER_STRIP_GATE(0x80BD9FBC, &l_dzb); /* 80BD9FC4-80BD9FCC 000020 0008+00 1/1 0/0 0/0 .rodata l_heap_size */ -SECTION_RODATA static u8 const l_heap_size[8] = { - 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x5F, 0x00, +static u32 const l_heap_size[2] = { + 0x4600, 0x5F00, }; -COMPILER_STRIP_GATE(0x80BD9FC4, &l_heap_size); /* 80BD9FCC-80BD9FD8 000028 000C+00 0/1 0/0 0/0 .rodata l_top_co_offset */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_top_co_offset[12] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x16, 0x00, 0x00, +static Vec const l_top_co_offset = { + 0.0f, 0.0f, -600.0f, }; -COMPILER_STRIP_GATE(0x80BD9FCC, &l_top_co_offset); -#pragma pop /* 80BD9FD8-80BD9FE4 000034 000C+00 0/1 0/0 0/0 .rodata l_check_min */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_min[12] = { - 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, +static Vec const l_check_min = { + -120.0f, 0.0f, -20.0f, }; -COMPILER_STRIP_GATE(0x80BD9FD8, &l_check_min); -#pragma pop /* 80BD9FE4-80BD9FF0 000040 000C+00 0/1 0/0 0/0 .rodata l_check_max */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_max[12] = { - 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00, +static Vec const l_check_max = { + 120.0f, 0.0f, 80.0f, }; -COMPILER_STRIP_GATE(0x80BD9FE4, &l_check_max); -#pragma pop /* 80BD9FF0-80BD9FFC 00004C 000C+00 0/1 0/0 0/0 .rodata l_check_min_wolf */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_min_wolf[12] = { - 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, +static Vec const l_check_min_wolf = { + -120.0f, 0.0f, 50.0f, }; -COMPILER_STRIP_GATE(0x80BD9FF0, &l_check_min_wolf); -#pragma pop /* 80BD9FFC-80BDA008 000058 000C+00 0/1 0/0 0/0 .rodata l_check_max_wolf */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_check_max_wolf[12] = { - 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BD9FFC, &l_check_max_wolf); -#pragma pop - -/* 80BDA008-80BDA00C 000064 0004+00 7/17 0/0 0/0 .rodata @3829 */ -SECTION_RODATA static u8 const lit_3829[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80BDA008, &lit_3829); - -/* 80BDA00C-80BDA014 000068 0004+04 1/1 0/0 0/0 .rodata @3830 */ -SECTION_RODATA static f32 const lit_3830[1 + 1 /* padding */] = { - 50.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80BDA00C, &lit_3830); - -/* 80BDA0AC-80BDA0AC 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80BDA0AC = "P_Cwall"; -SECTION_DEAD static char const* const stringBase_80BDA0B4 = "P_L4Cwall"; -#pragma pop - -/* 80BDA0C0-80BDA0CC 000000 000C+00 2/2 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, +static Vec const l_check_max_wolf = { + 120.0f, 0.0f, 160.0f, }; -/* 80BDA0CC-80BDA0E0 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop +UNK_REL_DATA /* 80BDA0E0-80BDA0E8 -00001 0008+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_cwall__stringBase0, - (void*)(((char*)&d_a_obj_cwall__stringBase0) + 0x8), +static char* l_arcName[2] = { + "P_Cwall", + "P_L4Cwall", }; /* 80BDA0E8-80BDA100 000028 0018+00 0/1 0/0 0/0 .data l_cull_box */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_cull_box[24] = { - 0xC3, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0x22, 0x80, 0x00, - 0x43, 0x96, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, +static Vec l_cull_box[2] = { + {-300.0f, -100.0f, -650.0f}, + {300.0f, 500.0f, 300.0f}, }; -#pragma pop /* 80BDA100-80BDA130 000040 0030+00 1/1 0/0 0/0 .data l_side_co_offset */ -SECTION_DATA static u8 l_side_co_offset[48] = { - 0xC3, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0xC3, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0x43, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xC1, 0xF0, 0x00, 0x00, 0x43, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, +static Vec l_side_co_offset[4] = { + {-255.0f, 0.0f, -30.0f}, + {-135.0f, 0.0f, -30.0f}, + {135.0f, 0.0f, -30.0f}, + {255.0f, 0.0f, -30.0f}, }; /* 80BDA130-80BDA174 000070 0044+00 0/1 0/0 0/0 .data l_cyl_src */ -#pragma push -#pragma force_active on static dCcD_SrcCyl l_cyl_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x79}}, // mObj @@ -317,11 +114,8 @@ static dCcD_SrcCyl l_cyl_src = { 450.0f // mHeight } // mCyl }; -#pragma pop /* 80BDA174-80BDA1B8 0000B4 0044+00 0/1 0/0 0/0 .data l_cyl_src2 */ -#pragma push -#pragma force_active on static dCcD_SrcCyl l_cyl_src2 = { { {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x19}}, // mObj @@ -335,11 +129,8 @@ static dCcD_SrcCyl l_cyl_src2 = { 300.0f // mHeight } // mCyl }; -#pragma pop /* 80BDA1B8-80BDA1F8 0000F8 0040+00 0/1 0/0 0/0 .data l_sph_src */ -#pragma push -#pragma force_active on static dCcD_SrcSph l_sph_src = { { {0x0, {{0x0, 0x0, 0x0}, {0x4000, 0x11}, 0x58}}, // mObj @@ -351,107 +142,208 @@ static dCcD_SrcSph l_sph_src = { {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph } // mSphAttr }; -#pragma pop /* 80BD6AEC-80BD6CCC 00018C 01E0+00 1/0 0/0 0/0 .text Create__12daObjCwall_cFv */ -void daObjCwall_c::Create() { - // NONMATCHING -} - -/* 80BD6CCC-80BD6D08 00036C 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING +int daObjCwall_c::Create() { + field_0xf38 = current.pos; + field_0xf0c = getArg0(); + initBaseMtx(); + fopAcM_SetMtx(this, mWallModel->getBaseTRMtx()); + mStts.Init(0xff, 0xff, this); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + for (int i = 0; i < 4; i++) { + mCyls[i].Set(l_cyl_src2); + mCyls[i].SetStts(&mStts); + } + mCyl2.Set(l_cyl_src2); + mCyl2.SetStts(&mStts); + mSph.Set(l_sph_src); + mSph.SetStts(&mStts); + fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x, + l_cull_box[1].y, l_cull_box[1].z); + cXyz cStack_30(0.0f, 0.0f, 50.0f); + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&cStack_30, &cStack_30); + chain_s* pChain = mChains; + cXyz* pPos = field_0xe94; + getChainBasePos(&pChain->mPos); + cXyz cStack_3c(pChain->mPos); + for (int i = 0; i < 7; i++, pPos++) { + *pPos = cStack_3c + cStack_30; + cStack_3c = *pPos; + } + calcSePos(); + MoveBGExecute(); + return 1; } /* 80BD6D08-80BD6E94 0003A8 018C+00 1/0 0/0 0/0 .text CreateHeap__12daObjCwall_cFv */ -void daObjCwall_c::CreateHeap() { - // NONMATCHING +int daObjCwall_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_wallBmd[mType]); + JUT_ASSERT(573, modelData != 0); + mWallModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mWallModel == NULL) { + return 0; + } + mChains = new chain_s[6]; + if (mChains == NULL) { + return 0; + } + modelData = + (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_chainBmd[mType]); + JUT_ASSERT(592, modelData != 0); + chain_s* pChain = mChains; + for (int i = 0; i < 6; i++, pChain++) { + pChain->mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (pChain->mModel == NULL) { + return 0; + } + } + modelData = + (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_handleBmd[mType]); + JUT_ASSERT(609, modelData != 0); + mHandleModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mHandleModel == NULL) { + return 0; + } + return 1; } /* 80BD6E94-80BD6ED0 000534 003C+00 1/1 0/0 0/0 .text __dt__Q212daObjCwall_c7chain_sFv */ daObjCwall_c::chain_s::~chain_s() { - // NONMATCHING } /* 80BD6ED0-80BD6ED4 000570 0004+00 1/1 0/0 0/0 .text __ct__Q212daObjCwall_c7chain_sFv */ daObjCwall_c::chain_s::chain_s() { - /* empty function */ } /* 80BD6ED4-80BD6F80 000574 00AC+00 1/1 0/0 0/0 .text create1st__12daObjCwall_cFv */ -void daObjCwall_c::create1st() { - // NONMATCHING +int daObjCwall_c::create1st() { + mType = getType(); + int rv = dComIfG_resLoad(&mPhase, l_arcName[mType]); + if (rv == cPhs_COMPLEATE_e) { + rv = MoveBGCreate(l_arcName[mType], l_dzb[mType], NULL, l_heap_size[mType], NULL); + if (rv == cPhs_ERROR_e) { + return rv; + } + } + return rv; } /* 80BD6F80-80BD7288 000620 0308+00 1/0 0/0 0/0 .text Execute__12daObjCwall_cFPPA3_A4_f */ -void daObjCwall_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daObjCwall_c::Execute(Mtx** param_1) { + field_0xf44 = field_0xf38; + field_0xf54 = field_0xf50; + chain_control(); + chain_s* pChain = mChains; + if (daPy_py_c::setFmChainPos(this, &mChains[5].mPos, field_0xf0c)) { + field_0xe90 = 1; + eyePos = home.pos; + } else { + field_0xe90 = 0; + eyePos = mChains[5].mPos; + if (fopAcM_checkHookCarryNow(this)) { + field_0xf58 = 1; + } else { + field_0xf58 = 0; + current.pos = eyePos; + } + } + if ((field_0xe93 == 0 && field_0xe90 != 0) || (field_0xe93 != 0 && field_0xe90 == 0)) { + daPy_py_c::setPlayerSe(Z2SE_AL_GRAB_CHAIN); + } + chain_control2(); + if (field_0xe91 != 0) { + field_0xf1c = 1000; + } else { + field_0xf1c = 7000; + } + setTension(); + block_mode_proc_call(); + setChainMtx(); + if (field_0xe90 != 0) { + for (int i = 0; i < 4; i++) { + cXyz acStack_30(l_side_co_offset[i]); + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&acStack_30, &acStack_30); + mCyls[i].SetC(acStack_30); + dComIfG_Ccsp()->Set(&mCyls[i]); + } + } + cXyz cStack_3c(cXyz::Zero); + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&cStack_3c, &cStack_3c); + mCyl2.SetC(cStack_3c); + dComIfG_Ccsp()->Set(&mCyl2); + *param_1 = &mBgMtx; + setBaseMtx(); + calcSePos(); + field_0xe93 = field_0xe90; + cXyz cStack_48 = daPy_getPlayerActorClass()->current.pos - current.pos; + s16 angleDiff = cStack_48.atan2sX_Z() - shape_angle.y; + if (abs(angleDiff) < 0x2000) { + mSph.SetC(pChain[5].mPos); + dComIfG_Ccsp()->Set(&mSph); + } + return 1; } -/* ############################################################################################## */ -/* 80BDA014-80BDA01C 000070 0008+00 0/6 0/0 0/0 .rodata @4114 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4114[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BDA014, &lit_4114); -#pragma pop - -/* 80BDA01C-80BDA024 000078 0008+00 0/6 0/0 0/0 .rodata @4115 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4115[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BDA01C, &lit_4115); -#pragma pop - -/* 80BDA024-80BDA02C 000080 0008+00 0/6 0/0 0/0 .rodata @4116 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4116[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BDA024, &lit_4116); -#pragma pop - -/* 80BDA02C-80BDA030 000088 0004+00 0/1 0/0 0/0 .rodata @4117 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4117 = 338.0f; -COMPILER_STRIP_GATE(0x80BDA02C, &lit_4117); -#pragma pop - -/* 80BDA030-80BDA034 00008C 0004+00 0/1 0/0 0/0 .rodata @4118 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4118 = 208.0f; -COMPILER_STRIP_GATE(0x80BDA030, &lit_4118); -#pragma pop - -/* 80BDA034-80BDA038 000090 0004+00 0/1 0/0 0/0 .rodata @4119 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4119 = 168.0f; -COMPILER_STRIP_GATE(0x80BDA034, &lit_4119); -#pragma pop - /* 80BD7288-80BD7718 000928 0490+00 1/1 0/0 0/0 .text setTension__12daObjCwall_cFv */ void daObjCwall_c::setTension() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 dVar9 = field_0xf54; + field_0xe91 = 0; + if (field_0xe90 == 0) { + field_0xf50 = 0; + } + cXyz acStack_80; + cXyz cStack_8c; + getChainBasePos(&acStack_80); + cStack_8c = field_0xe94[6]; + f32 dVar7 = cStack_8c.abs(acStack_80); + f32 dVar10 = 188.0f; + if (field_0xf58 != 0) { + if (current.pos.abs(acStack_80) > dVar10 + 150.0f) { + fopAcM_cancelHookCarryNow(this); + } + } else { + if (field_0xe90 != 0) { + daPy_getPlayerActorClass()->checkBootsOrArmorHeavy(); + if ((dVar9 == 0.0f && dVar7 > dVar10 + 20.0f) || + (dVar9 != 0.0f && dVar7 > dVar10 - 20.0f)) + { + field_0xe91 = 1; + if (checkPull()) { + cXyz local_98; + local_98.x = player->getSpeedF() * cM_ssin(player->current.angle.y); + local_98.z = player->getSpeedF() * cM_scos(player->current.angle.y); + field_0xf50 = local_98.absXZ(); + } else { + field_0xf50 = 0.0f; + } + } else { + field_0xf50 = 0.0f; + field_0xe91 = 0; + } + if (dVar7 > dVar10 - 20.0f) { + field_0xf12 = 0; + } else { + field_0xf12 = 1; + } + } + } } -/* ############################################################################################## */ -/* 80BDA038-80BDA03C 000094 0004+00 1/1 0/0 0/0 .rodata @4130 */ -SECTION_RODATA static f32 const lit_4130 = 300.0f; -COMPILER_STRIP_GATE(0x80BDA038, &lit_4130); - /* 80BD7718-80BD7788 000DB8 0070+00 2/2 0/0 0/0 .text calcSePos__12daObjCwall_cFv */ void daObjCwall_c::calcSePos() { - // NONMATCHING + field_0xf2c.set(0.0f, 0.0f, 300.0f); + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&field_0xf2c, &field_0xf2c); } /* ############################################################################################## */ @@ -548,337 +440,542 @@ static u8 lit_1010[1 + 3 /* padding */]; static u8 lit_1009[1 + 3 /* padding */]; #pragma pop -/* 80BDA340-80BDA34C 000048 000C+00 0/1 0/0 0/0 .bss @3759 */ -#pragma push -#pragma force_active on -static u8 lit_3759[12]; -#pragma pop - /* 80BDA34C-80BDA358 000054 000C+00 1/2 0/0 0/0 .bss l_chainOffset */ -static u8 l_chainOffset[12]; +static cXyz l_chainOffset(0.0f, 105.0f, 30.0f); /* 80BD7788-80BD7804 000E28 007C+00 5/5 0/0 0/0 .text getChainBasePos__12daObjCwall_cFP4cXyz */ -void daObjCwall_c::getChainBasePos(cXyz* param_0) { - // NONMATCHING +void daObjCwall_c::getChainBasePos(cXyz* pBasePos) { + *pBasePos = l_chainOffset; + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(current.angle.y); + mDoMtx_stack_c::multVec(pBasePos, pBasePos); } /* 80BD7804-80BD7AD4 000EA4 02D0+00 1/1 0/0 0/0 .text setChainMtx__12daObjCwall_cFv */ void daObjCwall_c::setChainMtx() { - // NONMATCHING + chain_s* pChain = mChains; + s16 sVar7 = home.angle.y; + if (sVar7 == 0x4000 || sVar7 == 0xc000) { + sVar7 += 0x4000; + } + daPy_py_c* player = daPy_getPlayerActorClass(); + for (int i = 0; i < 6; pChain++, i++) { + cXyz local_34 = field_0xe94[i + 1] - field_0xe94[i]; + s16 sVar3 = cM_atan2s(local_34.x, local_34.z); + if (field_0xe90 != 0 && i == 5) { + sVar3 = player->shape_angle.y + 0x7fff; + } + s16 sVar4 = -cM_atan2s(local_34.y, local_34.absXZ()); + sVar7 += 0x4000; + mDoMtx_stack_c::transS(pChain->mPos); + mDoMtx_stack_c::ZXYrotM(sVar4, sVar3, sVar7); + if (i == 5) { + if (field_0xe90 != 0) { + sVar3 = player->shape_angle.y + 0x7fff; + mDoMtx_stack_c::transS(field_0xf20); + mDoMtx_stack_c::YrotM(sVar3); + mDoMtx_stack_c::XrotM(-field_0xf1a); + mDoMtx_stack_c::ZrotM(0); + } + mHandleModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } else { + pChain->mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } + } + cLib_addCalcAngleS2(&field_0xf1a, field_0xf1c, 5, 0x800); } -/* ############################################################################################## */ -/* 80BDA03C-80BDA040 000098 0004+00 0/1 0/0 0/0 .rodata @4316 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4316 = -6.0f; -COMPILER_STRIP_GATE(0x80BDA03C, &lit_4316); -#pragma pop - -/* 80BDA040-80BDA044 00009C 0004+00 0/3 0/0 0/0 .rodata @4317 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4317 = 5.0f; -COMPILER_STRIP_GATE(0x80BDA040, &lit_4317); -#pragma pop - -/* 80BDA044-80BDA048 0000A0 0004+00 0/1 0/0 0/0 .rodata @4318 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4318 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80BDA044, &lit_4318); -#pragma pop - -/* 80BDA048-80BDA04C 0000A4 0004+00 0/2 0/0 0/0 .rodata @4319 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4319 = 100.0f; -COMPILER_STRIP_GATE(0x80BDA048, &lit_4319); -#pragma pop - -/* 80BDA04C-80BDA050 0000A8 0004+00 0/2 0/0 0/0 .rodata @4320 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4320 = 15.0f; -COMPILER_STRIP_GATE(0x80BDA04C, &lit_4320); -#pragma pop - -/* 80BDA050-80BDA054 0000AC 0004+00 0/2 0/0 0/0 .rodata @4321 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4321 = 38.0f; -COMPILER_STRIP_GATE(0x80BDA050, &lit_4321); -#pragma pop - -/* 80BDA054-80BDA058 0000B0 0004+00 0/2 0/0 0/0 .rodata @4322 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4322 = 8.0f; -COMPILER_STRIP_GATE(0x80BDA054, &lit_4322); -#pragma pop - -/* 80BDA058-80BDA05C 0000B4 0004+00 0/3 0/0 0/0 .rodata @4323 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4323 = 0.5f; -COMPILER_STRIP_GATE(0x80BDA058, &lit_4323); -#pragma pop - /* 80BD7AD4-80BD7ED8 001174 0404+00 1/1 0/0 0/0 .text chain_control__12daObjCwall_cFv */ void daObjCwall_c::chain_control() { - // NONMATCHING + cXyz* nextPos; + cXyz* pos; + nextPos = field_0xe94; + chain_s* pChain = mChains; + getChainBasePos(field_0xe94); + pos = nextPos; + f32 dVar10 = -6.0f; + nextPos++; + for (int i = 1; i < 7; i = i + 1) { + if (field_0xe90 != 0) { + if (!daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) { + if (field_0xf50 > 5.0f || field_0xf58 != 0) { + dVar10 *= 0.1f; + } else { + dVar10 = -6.0f; + } + } + } + field_0xee8[i] = dVar10; + f32 dVar9 = nextPos->y; + nextPos->y += field_0xee8[i]; + cXyz acStack_80(*nextPos); + acStack_80.y += 100.0f; + field_0xf04[i] = 0; + if (fopAcM_gc_c::gndCheck(&acStack_80)) { + f32 dVar8 = 15.0f + fopAcM_gc_c::getGroundY(); + if (dVar8 > nextPos->y) { + nextPos->y = dVar8; + field_0xee8[i] = 0; + field_0xf04[i] = 1; + } + } + if (field_0xf04[i] == 0) { + if (field_0xf04[i - 1] != 0) { + if (pos->y >= nextPos->y) { + nextPos->y = dVar9; + } + } + if (i < 6 && field_0xf04[i + 1] != 0) { + if (pChain[1].mPos.y >= nextPos->y) { + nextPos->y = dVar9; + } + } + } + cXyz cStack_8c = *nextPos - *pos; + f32 dVar8 = cStack_8c.abs(); + cStack_8c.normalizeZP(); + f32 fVar1 = 38.0f; + if (i == 6) { + fVar1 = 5.0f; + } + if (dVar8 <= fVar1 - 8.0f) { + dVar8 = fVar1 - 8.0f; + } + if (dVar8 > fVar1) { + dVar8 = fVar1; + } + cStack_8c = cStack_8c * dVar8; + *nextPos = *pos + cStack_8c; + pChain->mPos.x = (pos->x + nextPos->x) * 0.5f; + pChain->mPos.y = (pos->y + nextPos->y) * 0.5f; + pChain->mPos.z = (pos->z + nextPos->z) * 0.5f; + pChain++; + pos = nextPos; + nextPos++; + } } -/* ############################################################################################## */ -/* 80BDA05C-80BDA060 0000B8 0004+00 0/1 0/0 0/0 .rodata @4486 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4486 = 60.0f; -COMPILER_STRIP_GATE(0x80BDA05C, &lit_4486); -#pragma pop - -/* 80BDA060-80BDA064 0000BC 0004+00 0/1 0/0 0/0 .rodata @4487 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4487 = -10.0f; -COMPILER_STRIP_GATE(0x80BDA060, &lit_4487); -#pragma pop - -/* 80BDA064-80BDA068 0000C0 0004+00 0/1 0/0 0/0 .rodata @4488 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4488 = 25.0f; -COMPILER_STRIP_GATE(0x80BDA064, &lit_4488); -#pragma pop - -/* 80BDA068-80BDA06C 0000C4 0004+00 0/1 0/0 0/0 .rodata @4489 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4489 = 10.0f; -COMPILER_STRIP_GATE(0x80BDA068, &lit_4489); -#pragma pop - -/* 80BDA06C-80BDA070 0000C8 0004+00 0/2 0/0 0/0 .rodata @4490 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4490 = 188.0f; -COMPILER_STRIP_GATE(0x80BDA06C, &lit_4490); -#pragma pop - -/* 80BDA070-80BDA074 0000CC 0004+00 0/2 0/0 0/0 .rodata @4491 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4491 = 6.0f; -COMPILER_STRIP_GATE(0x80BDA070, &lit_4491); -#pragma pop - /* 80BD7ED8-80BD84C0 001578 05E8+00 1/1 0/0 0/0 .text chain_control2__12daObjCwall_cFv */ void daObjCwall_c::chain_control2() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + chain_s* local_130 = &mChains[5]; + cXyz* local_134 = &field_0xe94[6]; + field_0xf50 = 0.0f; + if ((field_0xe90 == 0) && (field_0xf58 == 0)) { + field_0xf1c = 0; + current.pos = local_130->mPos; + } else { + cXyz acStack_98; + cXyz cStack_a4; + if (field_0xe90 != 0) { + if (daPy_py_c::i_checkNowWolf()) { + mDoMtx_stack_c::copy(player->getWolfMouthMatrix()); + mDoMtx_stack_c::multVecZero(&acStack_98); + cXyz cStack_b0(0.0f, 0.0f, 60.0f); + mDoMtx_stack_c::YrotS(player->shape_angle.y); + mDoMtx_stack_c::XrotM(field_0xf1a); + mDoMtx_stack_c::multVec(&cStack_b0, &cStack_b0); + *local_134 = cStack_b0 + acStack_98; + field_0xf20 = *local_134; + acStack_98.set(0.0f, 0.0f, -10.0f); + } else { + acStack_98 = player->getRightHandPos(); + cXyz cStack_bc(25.0f, 10.0f, 60.0f); + mDoMtx_stack_c::YrotS(player->shape_angle.y); + mDoMtx_stack_c::XrotM(field_0xf1a); + mDoMtx_stack_c::multVec(&cStack_bc, &cStack_bc); + cStack_bc += acStack_98; + *local_134 = cStack_bc; + field_0xf20 = *local_134; + acStack_98.set(0.0f, 0.0f, -10.0f); + } + mDoMtx_stack_c::YrotS(player->shape_angle.y + 0x7fff); + mDoMtx_stack_c::XrotM(-field_0xf1a); + mDoMtx_stack_c::multVec(&acStack_98, &cStack_a4); + cStack_a4 += field_0xf20; + *local_134 = cStack_a4; + } else { + if (field_0xf58 != 0) { + field_0xf20 = current.pos; + *local_134 = current.pos; + ; + } + } + f32 dVar12 = 0.0f; + cXyz cStack_c8; + cXyz cStack_d4; + getChainBasePos(&cStack_c8); + cStack_d4 = field_0xe94[6]; + f32 dVar10 = cStack_d4.abs(cStack_c8); + f32 dVar11 = 188.0f; + if (dVar10 > dVar11) { + dVar12 = (dVar10 - dVar11) / 6.0f; + } + cXyz* pPos = local_134; + int i = 5; + dVar12 = 38.0f + dVar12; + local_134--; + for (; i >= 1; i--) { + dVar10 = local_134->y; + cXyz cStack_e0(*local_134); + cStack_e0.y += 100.0f; + if (fopAcM_gc_c::gndCheck(&cStack_e0)) { + f32 gnd = fopAcM_gc_c::getGroundY() + 15.0f; + if (gnd > local_134->y) { + local_134->y = gnd; + field_0xee8[i] = 0; + } + } + if (field_0xf04[i + 1] != 0) { + local_134->y = dVar10; + } + cXyz cStack_ec = *local_134 - *pPos; + cStack_ec.normalizeZP(); + f32 fVar5 = dVar12; + if (i == 5) { + fVar5 = 5.0f; + } + cStack_ec = cStack_ec * fVar5; + *local_134 = *pPos + cStack_ec; + local_130->mPos.x = (pPos->x + local_134->x) * 0.5f; + local_130->mPos.y = (pPos->y + local_134->y) * 0.5f; + local_130->mPos.z = (pPos->z + local_134->z) * 0.5f; + local_130--; + pPos = local_134; + local_134--; + } + } } -/* ############################################################################################## */ -/* 80BDA1F8-80BDA204 -00001 000C+00 0/1 0/0 0/0 .data @4501 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4501[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__12daObjCwall_cFv, -}; -#pragma pop - -/* 80BDA204-80BDA210 -00001 000C+00 0/1 0/0 0/0 .data @4502 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4502[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWalk__12daObjCwall_cFv, -}; -#pragma pop - -/* 80BDA210-80BDA21C -00001 000C+00 0/1 0/0 0/0 .data @4503 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_4503[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeClose__12daObjCwall_cFv, -}; -#pragma pop - -/* 80BDA21C-80BDA240 00015C 0024+00 0/1 0/0 0/0 .data l_func$4500 */ -#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 - -/* 80BDA358-80BDA364 000060 000C+00 0/1 0/0 0/0 .bss @3760 */ -#pragma push -#pragma force_active on -static u8 lit_3760[12]; -#pragma pop - /* 80BDA364-80BDA370 00006C 000C+00 0/1 0/0 0/0 .bss l_smokeSetOffset */ -#pragma push -#pragma force_active on -static u8 l_smokeSetOffset[12]; -#pragma pop - -/* 80BDA370-80BDA374 000078 0004+00 1/1 0/0 0/0 .bss None */ -static u8 data_80BDA370[4]; +static cXyz l_smokeSetOffset(0.0f,0.0f,-200.0f); /* 80BD84C0-80BD8594 001B60 00D4+00 1/1 0/0 0/0 .text block_mode_proc_call__12daObjCwall_cFv */ void daObjCwall_c::block_mode_proc_call() { - // NONMATCHING + static daObjCwall_c::modeFunc l_func[3] = { + &daObjCwall_c::modeWait, + &daObjCwall_c::modeWalk, + &daObjCwall_c::modeClose, + }; + (this->*(l_func[field_0xe92]))(); + if (field_0xf50 != 0.0f) { + setPower(field_0xf50, NULL); + } } /* 80BD8594-80BD85C0 001C34 002C+00 2/2 0/0 0/0 .text initWait__12daObjCwall_cFv */ void daObjCwall_c::initWait() { - // NONMATCHING + speed.setall(0.0f); + field_0xf0e = 0; + field_0xf10 = 20; + field_0xe92 = 0; } /* 80BD85C0-80BD8748 001C60 0188+00 1/0 0/0 0/0 .text modeWait__12daObjCwall_cFv */ void daObjCwall_c::modeWait() { - // NONMATCHING + u8 bVar2; + daPy_py_c* player = static_cast(daPy_getPlayerActorClass()); + u8 dVar1 = field_0xf0e; + if (field_0xe90 != 0) { + bVar2 = true; + if (player->checkBootsOrArmorHeavy() && field_0xf12 == 0) { + bVar2 = false; + } + if (checkPullNow()) { + field_0xf0e++; + if (field_0xf50 != 0.0f && !checkWall() && player->getBaseAnimeFrame() > 6.0f && + player->getBaseAnimeFrame() < 8.0f && field_0xf0e > 8) + { + initWalk(); + } + } else { + if (bVar2 && cLib_calcTimer(&field_0xf10) == 0 && field_0xf0d != 0) { + field_0xf59 = field_0xf0d; + initClose(); + } + } + } else { + field_0xf0e = 0; + if (field_0xf0d != 0) { + field_0xf59 = field_0xf0d; + initClose(); + } + } + if (field_0xf0d == 9 || dVar1 == field_0xf0e) { + field_0xf0e = 0; + } } /* 80BD8748-80BD8778 001DE8 0030+00 2/2 0/0 0/0 .text initWalk__12daObjCwall_cFv */ void daObjCwall_c::initWalk() { - // NONMATCHING + speed.setall(0.0f); + field_0xf14 = 13; + field_0xf16 = 0x9d8; + field_0xe92 = 1; } -/* ############################################################################################## */ -/* 80BDA074-80BDA078 0000D0 0004+00 0/3 0/0 0/0 .rodata @4665 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4665 = 1.0f; -COMPILER_STRIP_GATE(0x80BDA074, &lit_4665); -#pragma pop - -/* 80BDA078-80BDA07C 0000D4 0004+00 0/2 0/0 0/0 .rodata @4666 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4666 = 75.0f; -COMPILER_STRIP_GATE(0x80BDA078, &lit_4666); -#pragma pop - -/* 80BDA07C-80BDA084 0000D8 0004+04 0/2 0/0 0/0 .rodata @4667 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4667[1 + 1 /* padding */] = { - -1.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80BDA07C, &lit_4667); -#pragma pop - -/* 80BDA084-80BDA08C 0000E0 0008+00 0/1 0/0 0/0 .rodata @4669 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4669[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80BDA084, &lit_4669); -#pragma pop - /* 80BD8778-80BD8BC8 001E18 0450+00 1/0 0/0 0/0 .text modeWalk__12daObjCwall_cFv */ void daObjCwall_c::modeWalk() { - // NONMATCHING + s16 bVar1 = 13; + f32 dVar7 = 75.0f; + cLib_calcTimer(&field_0xf14); + f32 dVar6 = cM_scos( + field_0xf16 * (bVar1 - field_0xf14)); + dVar6 = (1.0f - dVar6) * 0.5f; + cXyz local_78(0.0f, 0.0f, 1.0f); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&local_78, &local_78); + field_0xf38.x = home.pos.x + local_78.x * (dVar7 * (field_0xf0d + dVar6)); + field_0xf38.z = home.pos.z + local_78.z * (dVar7 * (field_0xf0d + dVar6)); + speed.z = std::fabs(field_0xf38.absXZ(field_0xf44)); + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 local_88 = player->current.angle.y + 0x7fff; + cXyz local_84; + local_84.x = player->getSpeedF() * cM_ssin(player->current.angle.y); + local_84.z = (player->getSpeedF() * cM_scos(player->current.angle.y)); + setPower(std::sqrt(local_84.x * local_84.x + local_84.z * local_84.z), &local_88); + setPower(speed.z, &shape_angle.y); + field_0xf50 = 0; + mDoAud_seStartLevel(Z2SE_OBJ_CWALL_MOVE, &field_0xf2c, 0, 0); + if (field_0xf14 == 0) { + initWait(); + field_0xf0d++; + if (field_0xf0d == 9) { + mDoAud_seStart(Z2SE_OBJ_CWALL_MOVE_STOP, &field_0xf2c, 0, 0); + } + } } /* 80BD8BC8-80BD8BF0 002268 0028+00 1/1 0/0 0/0 .text initClose__12daObjCwall_cFv */ void daObjCwall_c::initClose() { - // NONMATCHING + speed.setall(0.0f); + field_0xf0e = 0; + field_0xe92 = 2; } -/* ############################################################################################## */ -/* 80BDA08C-80BDA090 0000E8 0004+00 0/1 0/0 0/0 .rodata @4884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4884 = 1.0f / 100.0f; -COMPILER_STRIP_GATE(0x80BDA08C, &lit_4884); -#pragma pop - -/* 80BDA090-80BDA094 0000EC 0004+00 0/1 0/0 0/0 .rodata @4885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4885 = 1.5f; -COMPILER_STRIP_GATE(0x80BDA090, &lit_4885); -#pragma pop - /* 80BD8BF0-80BD935C 002290 076C+00 1/0 0/0 0/0 .text modeClose__12daObjCwall_cFv */ void daObjCwall_c::modeClose() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + f32 dVar11 = field_0xf38.absXZ(home.pos); + bool bVar6 = false; + u8 dVar1 = field_0xf0e; + if (field_0xe90 != 0) { + cXyz cStack_a4; + cXyz cStack_b0; + getChainBasePos(&cStack_a4); + cStack_b0 = field_0xe94[6]; + if (cStack_b0.abs(cStack_a4) > 188.0f) { + field_0xe91 = 1; + if (player->getSpeedF() == 0.0f) { + field_0xf50 = speed.z; + } else { + if (checkPull()) { + field_0xf50 = std::fabs(player->getSpeedF()) + std::fabs(speed.z); + } else { + field_0xf50 = 0.0f; + } + } + } else { + field_0xe91 = 0; + } + if (field_0xe91 != 0 && checkPullNow()) { + field_0xf0e++; + } else { + field_0xf0e = 0; + } + if (field_0xf0e >= 8) { + bVar6 = true; + } + } + if (dVar1 == field_0xf0e) { + field_0xf0e = 0; + } + speed.z += 0.01f; + if (speed.z > 1.5f) { + speed.z = 1.5f; + } + int iVar7 = cLib_chasePos(&field_0xf38, home.pos, std::fabs(speed.z)); + f32 dVar12 = field_0xf38.absXZ(home.pos); + if (iVar7 != 0) { + if (bVar6) { + field_0xf0d = 0; + initWalk(); + } else { + OS_REPORT("引き戸:閉じました!\n"); + dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + field_0xf0d = 0; + mDoAud_seStart(Z2SE_OBJ_CWALL_BACK_STOP, &field_0xf2c, 0, 0); + initWait(); + if (field_0xf59 >= 5 && getSwbit() != 0xff) { + fopAcM_onSwitch(this, getSwbit()); + } + } + field_0xf59 = 0; + } else { + s32 iVar7 = (int)dVar11 / 75; + int temp = (int)dVar12 / 75; + if (temp != iVar7) { + if (bVar6) { + field_0xf0d = iVar7; + initWait(); + field_0xf0e = 8; + } else { + if (daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) { + mDoAud_seStart(Z2SE_OBJ_CWALL_CHAIN_TENSION, &mChains[0].mPos, 0, 0); + field_0xf0d = iVar7; + initWait(); + } + } + } + if (daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) { + mDoAud_seStartLevel(Z2SE_OBJ_CWALL_BACK_SLOW, &field_0xf2c, 0, 0); + } else { + mDoAud_seStartLevel(Z2SE_OBJ_CWALL_BACK, &field_0xf2c, 0, 0); + } + } + cXyz cStack_bc(l_top_co_offset); + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(home.angle.y); + mDoMtx_stack_c::multVec(&cStack_bc,&cStack_bc); + mCyl.SetC(cStack_bc); + dComIfG_Ccsp()->Set(&mCyl); } /* 80BD935C-80BD9414 0029FC 00B8+00 2/2 0/0 0/0 .text setPower__12daObjCwall_cFfPs */ -void daObjCwall_c::setPower(f32 param_0, s16* param_1) { - // NONMATCHING +void daObjCwall_c::setPower(f32 param_1, s16* param_2) { + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 sVar3; + if (param_2 == NULL) { + chain_s* pChain = mChains; + cXyz local_28; + local_28 = pChain[4].mPos - pChain[5].mPos; + sVar3 = cM_atan2s(local_28.x, local_28.z); + } else { + sVar3 = *param_2; + } + player->setOutPower(param_1, sVar3, 0); + field_0xf0f = 1; } -/* ############################################################################################## */ -/* 80BDA094-80BDA098 0000F0 0004+00 0/1 0/0 0/0 .rodata @4961 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4961 = -95.0f; -COMPILER_STRIP_GATE(0x80BDA094, &lit_4961); -#pragma pop - -/* 80BDA098-80BDA09C 0000F4 0004+00 0/1 0/0 0/0 .rodata @4962 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4962 = 95.0f; -COMPILER_STRIP_GATE(0x80BDA098, &lit_4962); -#pragma pop - /* 80BD9414-80BD95A0 002AB4 018C+00 1/1 0/0 0/0 .text checkWall__12daObjCwall_cFv */ -void daObjCwall_c::checkWall() { - // NONMATCHING +BOOL daObjCwall_c::checkWall() { + cXyz acStack_30[2] = {cXyz(-95.0f, 5.0f, 1.0f), cXyz(95.0f, 5.0f, 1.0f)}; + cXyz cStack_40(0.0f, 0.0f, 1.0f); + cStack_40.z = 75.0f; + BOOL rv = FALSE; + mDoMtx_stack_c::YrotS(current.angle.y); + for (int i = 0; i < 2; i = i + 1) { + cXyz cStack_4c(acStack_30[i]); + cXyz cStack_58(cStack_40); + mDoMtx_stack_c::multVec(&cStack_4c, &cStack_4c); + cStack_4c += field_0xf38; + mDoMtx_stack_c::multVec(&cStack_58, &cStack_58); + cStack_58 += cStack_4c; + if (fopAcM_lc_c::lineCheck(&cStack_4c, &cStack_58, this)) { + rv = TRUE; + } + } + return rv; } -/* ############################################################################################## */ -/* 80BDA09C-80BDA0A0 0000F8 0004+00 0/1 0/0 0/0 .rodata @5019 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5019 = 290.0f; -COMPILER_STRIP_GATE(0x80BDA09C, &lit_5019); -#pragma pop - /* 80BD95A0-80BD977C 002C40 01DC+00 2/2 0/0 0/0 .text checkPullNow__12daObjCwall_cFv */ -void daObjCwall_c::checkPullNow() { - // NONMATCHING +BOOL daObjCwall_c::checkPullNow() { + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 dummy; + bool iVar2 = player->getStickAngleFromPlayerShape(&dummy); + cXyz cStack_20(0.0f, 0.0f, 290.0f); + mDoMtx_stack_c::transS(field_0xf38); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&cStack_20, &cStack_20); + cXyz local_2c = player->current.pos - cStack_20; + mDoMtx_stack_c::YrotS(-current.angle.y); + mDoMtx_stack_c::multVec(&local_2c, &local_2c); + cXyz local_38; + cXyz local_44; + if (daPy_py_c::i_checkNowWolf()) { + local_38 = l_check_min_wolf; + local_44 = l_check_max_wolf; + } else { + local_38 = l_check_min; + local_44 = l_check_max; + } + if (local_38.x <= local_2c.x && local_2c.x <= local_44.x && local_38.z <= local_2c.z && + local_2c.z <= local_44.z && iVar2) + { + return 1; + } + return 0; } /* 80BD977C-80BD9848 002E1C 00CC+00 2/2 0/0 0/0 .text checkPull__12daObjCwall_cFv */ -void daObjCwall_c::checkPull() { - // NONMATCHING +BOOL daObjCwall_c::checkPull() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz local_2c; + cXyz cStack_38 = mChains[0].mPos - mChains[5].mPos; + local_2c.x = player->getSpeedF() * cM_ssin(player->current.angle.y); + local_2c.z = player->getSpeedF() * cM_scos(player->current.angle.y); + if (field_0xe90 != 0 && cStack_38.inprodXZ(local_2c) < 0.0f) { + return 1; + } + return 0; } /* 80BD9848-80BD9948 002EE8 0100+00 1/0 0/0 0/0 .text Draw__12daObjCwall_cFv */ -void daObjCwall_c::Draw() { - // NONMATCHING +int daObjCwall_c::Draw() { + g_env_light.settingTevStruct( 0x10, + &field_0xf38, &tevStr); + g_env_light.setLightTevColorType_MAJI( + mWallModel, + &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mWallModel); + dComIfGd_setList(); + + chain_s* pChain = mChains; + for (int i = 0; i < 5; pChain++, i++) { + g_env_light.setLightTevColorType_MAJI(pChain->mModel, &tevStr); + mDoExt_modelUpdateDL(pChain->mModel); + } + g_env_light.setLightTevColorType_MAJI(mHandleModel, &tevStr); + mDoExt_modelUpdateDL(mHandleModel); + return 1; } /* 80BD9948-80BD9988 002FE8 0040+00 1/0 0/0 0/0 .text Delete__12daObjCwall_cFv */ -void daObjCwall_c::Delete() { - // NONMATCHING +int daObjCwall_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName[mType]); + return 1; +} + +/* 80BD9988-80BD9B70 003028 01E8+00 1/0 0/0 0/0 .text daObjCwall_create1st__FP12daObjCwall_c */ +static int daObjCwall_create1st(daObjCwall_c* i_this) { + fopAcM_SetupActor(i_this, daObjCwall_c); + return i_this->create1st(); +} + +/* 80BD9DF8-80BD9E18 003498 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDelete__FP12daObjCwall_c */ +static int daObjCwall_MoveBGDelete(daObjCwall_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80BD9E18-80BD9E38 0034B8 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGExecute__FP12daObjCwall_c + */ +static int daObjCwall_MoveBGExecute(daObjCwall_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80BD9E38-80BD9E64 0034D8 002C+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDraw__FP12daObjCwall_c */ +static int daObjCwall_MoveBGDraw(daObjCwall_c* i_this) { + return i_this->Draw(); } -/* ############################################################################################## */ /* 80BDA240-80BDA260 -00001 0020+00 1/0 0/0 0/0 .data daObjCwall_METHODS */ static actor_method_class daObjCwall_METHODS = { - (process_method_func)daObjCwall_create1st__FP12daObjCwall_c, - (process_method_func)daObjCwall_MoveBGDelete__FP12daObjCwall_c, - (process_method_func)daObjCwall_MoveBGExecute__FP12daObjCwall_c, - 0, - (process_method_func)daObjCwall_MoveBGDraw__FP12daObjCwall_c, + (process_method_func)daObjCwall_create1st, + (process_method_func)daObjCwall_MoveBGDelete, + (process_method_func)daObjCwall_MoveBGExecute, + NULL, + (process_method_func)daObjCwall_MoveBGDraw, }; /* 80BDA260-80BDA290 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_ChainWall */ @@ -899,342 +996,6 @@ extern actor_process_profile_definition g_profile_Obj_ChainWall = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80BDA290-80BDA29C 0001D0 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80BDA29C-80BDA2A8 0001DC 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80BDA2A8-80BDA2B4 0001E8 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80BDA2B4-80BDA2C0 0001F4 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80BDA2C0-80BDA2CC 000200 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, -}; - -/* 80BDA2CC-80BDA2F4 00020C 0028+00 1/1 0/0 0/0 .data __vt__12daObjCwall_c */ -SECTION_DATA extern void* __vt__12daObjCwall_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__12daObjCwall_cFv, - (void*)Create__12daObjCwall_cFv, - (void*)Execute__12daObjCwall_cFPPA3_A4_f, - (void*)Draw__12daObjCwall_cFv, - (void*)Delete__12daObjCwall_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80BD9988-80BD9B70 003028 01E8+00 1/0 0/0 0/0 .text daObjCwall_create1st__FP12daObjCwall_c */ -static void daObjCwall_create1st(daObjCwall_c* param_0) { - // NONMATCHING -} - -/* 80BD9B70-80BD9B74 003210 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80BD9B74-80BD9BF8 003214 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */ -// dCcD_Cyl::dCcD_Cyl() { -extern "C" void __ct__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80BD9BF8-80BD9C40 003298 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80BD9C40-80BD9D0C 0032E0 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_CylFv */ -// dCcD_Cyl::~dCcD_Cyl() { -extern "C" void __dt__8dCcD_CylFv() { - // NONMATCHING -} - -/* 80BD9D0C-80BD9D54 0033AC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80BD9D54-80BD9D9C 0033F4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80BD9D9C-80BD9DF8 00343C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80BD9DF8-80BD9E18 003498 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDelete__FP12daObjCwall_c */ -static void daObjCwall_MoveBGDelete(daObjCwall_c* param_0) { - // NONMATCHING -} - -/* 80BD9E18-80BD9E38 0034B8 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGExecute__FP12daObjCwall_c - */ -static void daObjCwall_MoveBGExecute(daObjCwall_c* param_0) { - // NONMATCHING -} - -/* 80BD9E38-80BD9E64 0034D8 002C+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDraw__FP12daObjCwall_c */ -static void daObjCwall_MoveBGDraw(daObjCwall_c* param_0) { - // NONMATCHING -} - -/* 80BD9E64-80BD9EAC 003504 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80BD9EAC-80BD9EC8 00354C 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPs */ -extern "C" void func_80BD9EAC(void* _this, s16* param_0) { - // NONMATCHING -} - -/* 80BD9EC8-80BD9EE4 003568 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80BD9EC8(void* _this, u8* param_0) { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BDA0A0-80BDA0A4 0000FC 0004+00 0/1 0/0 0/0 .rodata @5316 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5316 = 105.0f; -COMPILER_STRIP_GATE(0x80BDA0A0, &lit_5316); -#pragma pop - -/* 80BDA0A4-80BDA0A8 000100 0004+00 0/1 0/0 0/0 .rodata @5317 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5317 = 30.0f; -COMPILER_STRIP_GATE(0x80BDA0A4, &lit_5317); -#pragma pop - -/* 80BDA0A8-80BDA0AC 000104 0004+00 0/1 0/0 0/0 .rodata @5318 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5318 = -200.0f; -COMPILER_STRIP_GATE(0x80BDA0A8, &lit_5318); -#pragma pop - -/* 80BD9EE4-80BD9F74 003584 0090+00 0/0 1/0 0/0 .text __sinit_d_a_obj_cwall_cpp */ -void __sinit_d_a_obj_cwall_cpp() { - // NONMATCHING -} - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80BD9EE4, __sinit_d_a_obj_cwall_cpp); -#pragma pop - -/* 80BD9F74-80BD9F90 003614 001C+00 1/1 0/0 0/0 .text getRightHandPos__9daPy_py_cCFv */ -// void daPy_py_c::getRightHandPos() const { -extern "C" void getRightHandPos__9daPy_py_cCFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80BDA374-80BDA378 00007C 0004+00 0/0 0/0 0/0 .bss - * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */ -#pragma push -#pragma force_active on -static u8 data_80BDA374[4]; -#pragma pop - -/* 80BDA378-80BDA37C 000080 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14JASAudioThread> */ -#pragma push -#pragma force_active on -static u8 data_80BDA378[4]; -#pragma pop - -/* 80BDA37C-80BDA380 000084 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA37C[4]; -#pragma pop - -/* 80BDA380-80BDA384 000088 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA380[4]; -#pragma pop - -/* 80BDA384-80BDA388 00008C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA384[4]; -#pragma pop - -/* 80BDA388-80BDA38C 000090 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA388[4]; -#pragma pop - -/* 80BDA38C-80BDA390 000094 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA38C[4]; -#pragma pop - -/* 80BDA390-80BDA394 000098 0004+00 0/0 0/0 0/0 .bss - * sInstance__36JASGlobalInstance<15JAISoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80BDA390[4]; -#pragma pop - -/* 80BDA394-80BDA398 00009C 0004+00 0/0 0/0 0/0 .bss - * sInstance__35JASGlobalInstance<14Z2SoundStarter> */ -#pragma push -#pragma force_active on -static u8 data_80BDA394[4]; -#pragma pop - -/* 80BDA398-80BDA39C 0000A0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */ -#pragma push -#pragma force_active on -static u8 data_80BDA398[4]; -#pragma pop - -/* 80BDA39C-80BDA3A0 0000A4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA39C[4]; -#pragma pop - -/* 80BDA3A0-80BDA3A4 0000A8 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3A0[4]; -#pragma pop - -/* 80BDA3A4-80BDA3A8 0000AC 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAIStreamMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3A4[4]; -#pragma pop - -/* 80BDA3A8-80BDA3AC 0000B0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3A8[4]; -#pragma pop - -/* 80BDA3AC-80BDA3B0 0000B4 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAISoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3AC[4]; -#pragma pop - -/* 80BDA3B0-80BDA3B4 0000B8 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13JAUSoundTable> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3B0[4]; -#pragma pop - -/* 80BDA3B4-80BDA3B8 0000BC 0004+00 0/0 0/0 0/0 .bss - * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3B4[4]; -#pragma pop - -/* 80BDA3B8-80BDA3BC 0000C0 0004+00 0/0 0/0 0/0 .bss - * sInstance__33JASGlobalInstance<12JAUSoundInfo> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3B8[4]; -#pragma pop - -/* 80BDA3BC-80BDA3C0 0000C4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3BC[4]; -#pragma pop - -/* 80BDA3C0-80BDA3C4 0000C8 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3C0[4]; -#pragma pop - -/* 80BDA3C4-80BDA3C8 0000CC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3C4[4]; -#pragma pop - -/* 80BDA3C8-80BDA3CC 0000D0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3C8[4]; -#pragma pop - -/* 80BDA3CC-80BDA3D0 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3CC[4]; -#pragma pop - -/* 80BDA3D0-80BDA3D4 0000D8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr> - */ -#pragma push -#pragma force_active on -static u8 data_80BDA3D0[4]; -#pragma pop - -/* 80BDA3D4-80BDA3D8 0000DC 0004+00 0/0 0/0 0/0 .bss - * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */ -#pragma push -#pragma force_active on -static u8 data_80BDA3D4[4]; -#pragma pop +AUDIO_INSTANCES /* 80BDA0AC-80BDA0AC 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_obj_pdoor.cpp b/src/d/actor/d_a_obj_pdoor.cpp index 2bcee457cfb..236e8a2a8bb 100644 --- a/src/d/actor/d_a_obj_pdoor.cpp +++ b/src/d/actor/d_a_obj_pdoor.cpp @@ -4,278 +4,304 @@ */ #include "d/actor/d_a_obj_pdoor.h" +#include "d/actor/d_a_player.h" +#include "SSystem/SComponent/c_lib.h" +#include "SSystem/SComponent/c_math.h" +#include "cmath.h" +#include "d/d_com_inf_game.h" +#include "d/d_bg_w.h" #include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" static void PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel(); -extern "C" void initBaseMtx__12daObjPDoor_cFv(); -extern "C" void setBaseMtx__12daObjPDoor_cFv(); -extern "C" void Create__12daObjPDoor_cFv(); -extern "C" void CreateHeap__12daObjPDoor_cFv(); -extern "C" void create1st__12daObjPDoor_cFv(); -extern "C" void Execute__12daObjPDoor_cFPPA3_A4_f(); -extern "C" void mode_proc_call__12daObjPDoor_cFv(); -extern "C" void init_modeWait__12daObjPDoor_cFv(); -extern "C" void modeWait__12daObjPDoor_cFv(); -extern "C" void init_modeRotate__12daObjPDoor_cFv(); -extern "C" void modeRotate__12daObjPDoor_cFv(); -extern "C" void Draw__12daObjPDoor_cFv(); -extern "C" void Delete__12daObjPDoor_cFv(); -extern "C" static void daObjPDoor_create1st__FP12daObjPDoor_c(); -extern "C" static void daObjPDoor_MoveBGDelete__FP12daObjPDoor_c(); -extern "C" static void daObjPDoor_MoveBGExecute__FP12daObjPDoor_c(); -extern "C" static void daObjPDoor_MoveBGDraw__FP12daObjPDoor_c(); -extern "C" extern char const* const d_a_obj_pdoor__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 mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -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 dComIfGp_getReverb__Fi(); -extern "C" void onSwitch__10dSv_info_cFii(); -extern "C" void offSwitch__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 __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 __mi__4cXyzCFRC3Vec(); -extern "C" void cLib_addCalcAngleS__FPsssss(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void __ptmf_scall(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; -extern "C" extern u8 data_80CAAC30[4]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80CAAB20-80CAAB24 000000 0004+00 3/3 0/0 0/0 .rodata @3695 */ -SECTION_RODATA static u8 const lit_3695[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CAAB20, &lit_3695); - /* 80CA9E98-80CA9F9C 000078 0104+00 1/1 0/0 0/0 .text * PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */ -static void PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2, - dBgW_Base::PushPullLabel param_3) { - // NONMATCHING +static fopAc_ac_c* PPCallBack(fopAc_ac_c* i_this, fopAc_ac_c* param_2, s16 param_3, + dBgW_Base::PushPullLabel param_4) { + int iVar2 = cLib_checkBit(param_4, 3); + if (iVar2) { + cXyz acStack_40 = param_2->current.pos - i_this->current.pos; + mDoMtx_stack_c::YrotS(-i_this->shape_angle.y); + mDoMtx_stack_c::multVec(&acStack_40, &acStack_40); + int bVar1; + if (acStack_40.z > 0.0f) { + bVar1 = cLib_checkBit(iVar2, 1) == 0 ? 1 : 0; + } else { + bVar1 = cLib_checkBit(iVar2, 1) != 0; + } + for (int i = 0; i < 2; i++) { + if (i == bVar1) { + static_cast(i_this)->field_0x5b6[i]++; + } else { + static_cast(i_this)->field_0x5b6[i] = 0; + } + } + static_cast(i_this)->field_0x5b5 = 1; + static_cast(i_this)->mPushPullLabel = param_4; + } + return i_this; } /* 80CA9F9C-80CA9FD8 00017C 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daObjPDoor_cFv */ void daObjPDoor_c::initBaseMtx() { - // NONMATCHING + mModel->setBaseScale(scale); + setBaseMtx(); } /* 80CA9FD8-80CAA03C 0001B8 0064+00 2/2 0/0 0/0 .text setBaseMtx__12daObjPDoor_cFv */ void daObjPDoor_c::setBaseMtx() { - // NONMATCHING + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(shape_angle.y); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -/* ############################################################################################## */ -/* 80CAAB40-80CAAB40 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CAAB40 = "V_OsuDoor"; -#pragma pop - -/* 80CAAB4C-80CAAB58 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, -}; - -/* 80CAAB58-80CAAB6C 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ -#pragma push -#pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { - 0x02000201, - /* padding */ - 0x40080000, - 0x00000000, - 0x3FE00000, - 0x00000000, -}; -#pragma pop +UNK_REL_DATA /* 80CAAB6C-80CAAB70 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_pdoor__stringBase0; +static char* l_arcName = "V_OsuDoor"; /* 80CAAB70-80CAAB88 000024 0018+00 1/1 0/0 0/0 .data l_cull_box */ -SECTION_DATA static u8 l_cull_box[24] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x16, 0x00, 0x00, - 0x44, 0x16, 0x00, 0x00, 0x44, 0x7A, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00, +static f32 l_cull_box[6] = { + 0.0f, 0.0f, -600.0f, + 600.0f, 1000.0f, 600.0f, }; /* 80CAA03C-80CAA14C 00021C 0110+00 1/0 0/0 0/0 .text Create__12daObjPDoor_cFv */ -void daObjPDoor_c::Create() { - // NONMATCHING +int daObjPDoor_c::Create() { + BOOL isSw = fopAcM_isSwitch(this, getSwbit()); + BOOL isSw2 = fopAcM_isSwitch(this, getSwbit2()); + if (!isSw && !isSw2) { + mDoorDirection = 0; + } else if (isSw) { + mDoorDirection = 1; + shape_angle.y = home.angle.y + 0x1555; + } else if (!isSw2) { + OS_REPORT("城下町押引扉:SW1,SW2共にONになっています!\n") + JUT_PANIC(235, "0"); + } else { + mDoorDirection = -1; + shape_angle.y = home.angle.y - 0x1555; + } + initBaseMtx(); + fopAcM_SetMtx(this, mModel->getBaseTRMtx()); + mpBgW->SetPushPullCallback(PPCallBack); + fopAcM_setCullSizeBox(this, l_cull_box[0], l_cull_box[1], l_cull_box[2], l_cull_box[3], + l_cull_box[4], l_cull_box[5]); + return 1; } /* 80CAA14C-80CAA1BC 00032C 0070+00 1/0 0/0 0/0 .text CreateHeap__12daObjPDoor_cFv */ -void daObjPDoor_c::CreateHeap() { - // NONMATCHING +int daObjPDoor_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 5); + JUT_ASSERT(270, modelData != 0); + mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + return mModel != NULL ? TRUE : FALSE; } /* 80CAA1BC-80CAA23C 00039C 0080+00 1/1 0/0 0/0 .text create1st__12daObjPDoor_cFv */ -void daObjPDoor_c::create1st() { - // NONMATCHING +int daObjPDoor_c::create1st() { + int rv = dComIfG_resLoad(&mPhase, l_arcName); + if (rv == cPhs_COMPLEATE_e) { + rv = MoveBGCreate(l_arcName, 8, NULL, 0x4230, NULL); + if (rv == cPhs_ERROR_e) { + return rv; + } + } + return rv; } /* 80CAA23C-80CAA290 00041C 0054+00 1/0 0/0 0/0 .text Execute__12daObjPDoor_cFPPA3_A4_f */ -void daObjPDoor_c::Execute(f32 (**param_0)[3][4]) { - // NONMATCHING +int daObjPDoor_c::Execute(Mtx** ppMtx) { + mode_proc_call(); + *ppMtx = &mBgMtx; + setBaseMtx(); + field_0x5b5 = 0; + return 1; } -/* ############################################################################################## */ -/* 80CAAB88-80CAAB94 -00001 000C+00 0/1 0/0 0/0 .data @3781 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3781[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeWait__12daObjPDoor_cFv, -}; -#pragma pop - -/* 80CAAB94-80CAABA0 -00001 000C+00 0/1 0/0 0/0 .data @3782 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3782[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)modeRotate__12daObjPDoor_cFv, -}; -#pragma pop - -/* 80CAABA0-80CAABB8 000054 0018+00 0/1 0/0 0/0 .data l_func$3780 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[24] = { - 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 - /* 80CAA290-80CAA31C 000470 008C+00 1/1 0/0 0/0 .text mode_proc_call__12daObjPDoor_cFv */ void daObjPDoor_c::mode_proc_call() { - // NONMATCHING + static daObjPDoor_c::modeFunc l_func[2] = { + &daObjPDoor_c::modeWait, + &daObjPDoor_c::modeRotate, + }; + (this->*(l_func[mMode]))(); } /* 80CAA31C-80CAA354 0004FC 0038+00 1/1 0/0 0/0 .text init_modeWait__12daObjPDoor_cFv */ void daObjPDoor_c::init_modeWait() { - // NONMATCHING + field_0x5ba = 0; + field_0x5b0 = -1; + for (int i = 0; i < 2; i++) { + field_0x5b6[i] = 0; + } + mMode = MODE_WAIT; } -/* ############################################################################################## */ -/* 80CAAB24-80CAAB28 000004 0004+00 1/1 0/0 0/0 .rodata @3942 */ -SECTION_RODATA static f32 const lit_3942 = 10.0f; -COMPILER_STRIP_GATE(0x80CAAB24, &lit_3942); - -/* 80CAAB28-80CAAB30 000008 0008+00 1/2 0/0 0/0 .rodata @3944 */ -SECTION_RODATA static u8 const lit_3944[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CAAB28, &lit_3944); - /* 80CAA354-80CAA698 000534 0344+00 1/0 0/0 0/0 .text modeWait__12daObjPDoor_cFv */ void daObjPDoor_c::modeWait() { - // NONMATCHING + daPy_py_c* player = daPy_getPlayerActorClass(); + bool bVar3 = true; + int iVar6 = -1; + if (field_0x5b5 != 0) { + for (int i = 0; i < 2; i++) { + if (field_0x5b6[i] == (u8)(cLib_checkBit(mPushPullLabel, dBgW_Base::PPLABEL_4) ? 0x23 : 0x23)) { + field_0x5b0 = i; + } + if (field_0x5b6[i] != 0) { + iVar6 = i; + } + } + if ((field_0x5b0 == 0 && mDoorDirection == 1) || + (field_0x5b0 == 1 && mDoorDirection == -1)) + { + field_0x5b0 = -1; + } else { + bVar3 = false; + } + bool bVar2 = true; + if ((iVar6 == 0 && mDoorDirection == 1) || + (iVar6 == 1 && mDoorDirection == -1)) + { + bVar2 = false; + } + if (bVar2) { + if (iVar6 == 0) { + cLib_addCalcAngleS2(&field_0x5bc, 500, 0x3c, 5); + } else { + cLib_addCalcAngleS2(&field_0x5bc, -500, 0x3c, 5); + } + field_0x5b4++; + f32 dVar8 = std::fabs(cM_ssin(0x3e0 * field_0x5b4)); + field_0x5ba = ((field_0x5bc * dVar8) + 10.0f); + } + if (field_0x5b0 != -1) { + ((daPy_py_c*)dComIfGp_getPlayer(0))->onPushPullKeep(); + init_modeRotate(); + } + } else { + field_0x5bc = 0; + field_0x5b4 = 0; + cLib_addCalcAngleS(&field_0x5ba, 0, 4, 0x32, 5); + } + shape_angle.y = home.angle.y + (mDoorDirection << 14) / 3 + field_0x5ba; + if (bVar3) { + for (int i = 0; i < 2; i = i + 1) { + field_0x5b6[i] = 0; + } + field_0x5b0 = -1; + } + if (daPy_py_c::i_checkNowWolf()) { + cXyz cStack_44 = player->current.pos - current.pos; + mDoMtx_stack_c::YrotS(-shape_angle.y); + mDoMtx_stack_c::multVec(&cStack_44, &cStack_44); + if (cStack_44.z > 0.0f) { + if (mDoorDirection == 1) { + mpBgW->OffPushPullOk(); + } else { + mpBgW->OnPushPullOk(); + } + } else { + if (mDoorDirection == -1) { + mpBgW->OffPushPullOk(); + } else { + mpBgW->OnPushPullOk(); + } + } + } else { + mpBgW->OnPushPullOk(); + } } /* 80CAA698-80CAA6B4 000878 001C+00 1/1 0/0 0/0 .text init_modeRotate__12daObjPDoor_cFv */ void daObjPDoor_c::init_modeRotate() { - // NONMATCHING + field_0x5bc = 0; + field_0x5b4 = 0; + field_0x5b8 = 0; + mMode = MODE_ROTATE; } -/* ############################################################################################## */ -/* 80CAAB30-80CAAB34 000010 0004+00 0/1 0/0 0/0 .rodata @4051 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4051 = 5461.0f; -COMPILER_STRIP_GATE(0x80CAAB30, &lit_4051); -#pragma pop - -/* 80CAAB34-80CAAB38 000014 0004+00 0/1 0/0 0/0 .rodata @4052 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4052 = 60.0f; -COMPILER_STRIP_GATE(0x80CAAB34, &lit_4052); -#pragma pop - -/* 80CAAB38-80CAAB3C 000018 0004+00 0/1 0/0 0/0 .rodata @4053 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4053 = 1.0f; -COMPILER_STRIP_GATE(0x80CAAB38, &lit_4053); -#pragma pop - -/* 80CAAB3C-80CAAB40 00001C 0004+00 0/1 0/0 0/0 .rodata @4054 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4054 = -1.0f; -COMPILER_STRIP_GATE(0x80CAAB3C, &lit_4054); -#pragma pop - /* 80CAA6B4-80CAA968 000894 02B4+00 1/0 0/0 0/0 .text modeRotate__12daObjPDoor_cFv */ void daObjPDoor_c::modeRotate() { - // NONMATCHING + daPy_getPlayerActorClass(); + field_0x5b8++; + shape_angle.y = home.angle.y + (mDoorDirection << 14) / 3; + field_0x5ba = ((f32)field_0x5b8 / 60.0f) * 5461.0f; + if (field_0x5b0 == 1) { + field_0x5ba = -field_0x5ba; + } + shape_angle.y += field_0x5ba; + fopAcM_seStartLevel(this, Z2SE_OBJ_HYRULE_DR_MOVE, 0); + if (field_0x5b8 == 60) { + if (field_0x5b0 == 0) { + mDoorDirection++; + } else { + mDoorDirection--; + } + if (mDoorDirection == 1) { + fopAcM_onSwitch(this, getSwbit()); + fopAcM_offSwitch(this, getSwbit2()); + } else if (mDoorDirection == -1) { + fopAcM_offSwitch(this, getSwbit()); + fopAcM_onSwitch(this, getSwbit2()); + } else if (mDoorDirection == 0) { + fopAcM_offSwitch(this, getSwbit()); + fopAcM_offSwitch(this, getSwbit2()); + } + ((daPy_py_c*)dComIfGp_getPlayer(0))->offPushPullKeep(); + dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f)); + fopAcM_seStart(this, Z2SE_OBJ_HYRULE_DR_STOP, 0); + init_modeWait(); + } } /* 80CAA968-80CAAA0C 000B48 00A4+00 1/0 0/0 0/0 .text Draw__12daObjPDoor_cFv */ -void daObjPDoor_c::Draw() { - // NONMATCHING +int daObjPDoor_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mModel); + dComIfGd_setList(); + return 1; } /* 80CAAA0C-80CAAA4C 000BEC 0040+00 1/0 0/0 0/0 .text Delete__12daObjPDoor_cFv */ -void daObjPDoor_c::Delete() { - // NONMATCHING +int daObjPDoor_c::Delete() { + mpBgW->SetPushPullCallback(NULL); + dComIfG_resDelete(&mPhase, l_arcName); + return 1; +} + +/* 80CAAA4C-80CAAAAC 000C2C 0060+00 1/0 0/0 0/0 .text daObjPDoor_create1st__FP12daObjPDoor_c */ +static int daObjPDoor_create1st(daObjPDoor_c* i_this) { + fopAcM_SetupActor(i_this, daObjPDoor_c); + return i_this->create1st(); +} + +/* 80CAAAAC-80CAAACC 000C8C 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDelete__FP12daObjPDoor_c */ +static int daObjPDoor_MoveBGDelete(daObjPDoor_c* i_this) { + return i_this->MoveBGDelete(); +} + +/* 80CAAACC-80CAAAEC 000CAC 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGExecute__FP12daObjPDoor_c + */ +static int daObjPDoor_MoveBGExecute(daObjPDoor_c* i_this) { + return i_this->MoveBGExecute(); +} + +/* 80CAAAEC-80CAAB18 000CCC 002C+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDraw__FP12daObjPDoor_c */ +static int daObjPDoor_MoveBGDraw(daObjPDoor_c* i_this) { + return i_this->Draw(); } -/* ############################################################################################## */ /* 80CAABB8-80CAABD8 -00001 0020+00 1/0 0/0 0/0 .data daObjPDoor_METHODS */ static actor_method_class daObjPDoor_METHODS = { - (process_method_func)daObjPDoor_create1st__FP12daObjPDoor_c, - (process_method_func)daObjPDoor_MoveBGDelete__FP12daObjPDoor_c, - (process_method_func)daObjPDoor_MoveBGExecute__FP12daObjPDoor_c, - 0, - (process_method_func)daObjPDoor_MoveBGDraw__FP12daObjPDoor_c, + (process_method_func)daObjPDoor_create1st, + (process_method_func)daObjPDoor_MoveBGDelete, + (process_method_func)daObjPDoor_MoveBGExecute, + NULL, + (process_method_func)daObjPDoor_MoveBGDraw, }; /* 80CAABD8-80CAAC08 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_PushDoor */ @@ -296,39 +322,5 @@ extern actor_process_profile_definition g_profile_Obj_PushDoor = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80CAAC08-80CAAC30 0000BC 0028+00 1/1 0/0 0/0 .data __vt__12daObjPDoor_c */ -SECTION_DATA extern void* __vt__12daObjPDoor_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__12daObjPDoor_cFv, - (void*)Create__12daObjPDoor_cFv, - (void*)Execute__12daObjPDoor_cFPPA3_A4_f, - (void*)Draw__12daObjPDoor_cFv, - (void*)Delete__12daObjPDoor_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; - -/* 80CAAA4C-80CAAAAC 000C2C 0060+00 1/0 0/0 0/0 .text daObjPDoor_create1st__FP12daObjPDoor_c */ -static void daObjPDoor_create1st(daObjPDoor_c* param_0) { - // NONMATCHING -} - -/* 80CAAAAC-80CAAACC 000C8C 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDelete__FP12daObjPDoor_c */ -static void daObjPDoor_MoveBGDelete(daObjPDoor_c* param_0) { - // NONMATCHING -} - -/* 80CAAACC-80CAAAEC 000CAC 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGExecute__FP12daObjPDoor_c - */ -static void daObjPDoor_MoveBGExecute(daObjPDoor_c* param_0) { - // NONMATCHING -} - -/* 80CAAAEC-80CAAB18 000CCC 002C+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDraw__FP12daObjPDoor_c */ -static void daObjPDoor_MoveBGDraw(daObjPDoor_c* param_0) { - // NONMATCHING -} /* 80CAAB40-80CAAB40 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/actor/d_a_player.cpp b/src/d/actor/d_a_player.cpp index 59fc521ba4e..c5becca15ea 100644 --- a/src/d/actor/d_a_player.cpp +++ b/src/d/actor/d_a_player.cpp @@ -493,8 +493,8 @@ void daPy_py_c::forceRestartRoom(int param_0, u32 param_1, int param_2) { /* 8015F478-8015F4B8 159DB8 0040+00 0/0 0/0 3/3 .text * setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi */ -void daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) { - daAlink_getAlinkActorClass()->setFmChainPosFromOut(param_0, param_1, param_2); +BOOL daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) { + return daAlink_getAlinkActorClass()->setFmChainPosFromOut(param_0, param_1, param_2); } /* 8015F4B8-8015F4F0 159DF8 0038+00 0/0 0/0 1/1 .text cancelFmChainGrab__9daPy_py_cFv */