diff --git a/include/d/actor/d_a_obj_swchain.h b/include/d/actor/d_a_obj_swchain.h index 45d63a04795..1e1eec06c2e 100644 --- a/include/d/actor/d_a_obj_swchain.h +++ b/include/d/actor/d_a_obj_swchain.h @@ -1,9 +1,10 @@ #ifndef D_A_OBJ_SWCHAIN_H #define D_A_OBJ_SWCHAIN_H -#include "f_op/f_op_actor_mng.h" -#include "d/d_com_inf_game.h" #include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" +#include "d/d_model.h" +#include "f_op/f_op_actor_mng.h" /** * @ingroup actors-objects @@ -20,15 +21,17 @@ public: /* 80CF8B00 */ ~chain_s(); /* 80CF8B3C */ chain_s(); - /* 0x00 */ u8 field_0x00[0x34 - 0x00]; - /* 0x00 */ cXyz field_0x34; - /* 0x00 */ u8 field_0x40[0x50 - 0x40]; + /* 0x00 */ dMdl_obj_c mModel; + /* 0x34 */ cXyz field_0x34; + /* 0x40 */ csXyz field_0x40; + /* 0x48 */ f32 field_0x48; + /* 0x4C */ u8 field_0x4c; }; - /* 80CF8768 */ void Create(); - /* 80CF89C0 */ void CreateHeap(); - /* 80CF8B48 */ void create1st(); - /* 80CF8ED0 */ void execute(); + /* 80CF8768 */ int Create(); + /* 80CF89C0 */ int CreateHeap(); + /* 80CF8B48 */ int create1st(); + /* 80CF8ED0 */ int execute(); /* 80CF94E4 */ void getChainBasePos(cXyz*); /* 80CF9500 */ void chain_control(); /* 80CF99C0 */ void chain_control2(); @@ -36,13 +39,23 @@ public: /* 80CFA124 */ void setChainMtx(); /* 80CFA4A8 */ void chain_count_control(); /* 80CFAD50 */ void setTension(); - /* 80CFB450 */ void getTopChainNo(); + /* 80CFB450 */ int getTopChainNo(); /* 80CFB464 */ void checkPlayerPull(); - /* 80CFB53C */ void draw(); - /* 80CFB5E8 */ void _delete(); + /* 80CFB53C */ int draw(); + /* 80CFB5E8 */ int _delete(); u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwbit2() { return (mHookshotLength & 0xff00) >> 8; } + u8 getChainNum() { return fopAcM_GetParamBit(this, 8, 8); } + u8 getOutNum() { return fopAcM_GetParamBit(this, 16, 8); } u8 getChainID() { return fopAcM_GetParamBit(this, 28, 4); } + u8 getHookShotLength() { return mHookshotLength; } + int getCurrentChainNum() { return field_0xa64; } + f32 getCurrentChainLength() { + chain_s* chain_p = &field_0xa74[field_0xa65 - field_0xa64 + 1]; + return (getCurrentChainNum() - 1) * 35.0f + + field_0xa74[0].field_0x34.abs(chain_p->field_0x34); + } BOOL checkDispEmphasis() { return fopAcM_isSwitch(this, getSwbit()) == FALSE; } bool checkCarry() { return mCarry == 1; } void setRatioForChandelier(f32 ratio) { mRatio = ratio; } @@ -71,7 +84,19 @@ public: } private: - /* 0x568 */ u8 field_0x568[0xa62 - 0x568]; + /* 0x568 */ request_of_phase_process_class mPhase; + /* 0x570 */ J3DModel* mpModel; + /* 0x574 */ J3DModelData* mChainModelData; + /* 0x578 */ dMdl_c mModel; + /* 0x598 */ dCcD_Stts mStts; + /* 0x5D4 */ dCcD_Sph mSph1; + /* 0x70C */ dCcD_Sph mSph2; + /* 0x844 */ dBgS_ObjAcch mAcch; + /* 0xA1C */ dBgS_AcchCir mAcchCir; + /* 0xA5C */ u16 mHookshotLength; + /* 0xA5E */ u16 field_0xa5e; + /* 0xA60 */ u8 field_0xa60; + /* 0xA60 */ u8 field_0xa61; /* 0xA62 */ u8 mCarry; /* 0xA63 */ u8 field_0xa63; /* 0xA64 */ u8 field_0xa64; @@ -80,14 +105,22 @@ private: /* 0xA67 */ u8 field_0xa67; /* 0xA68 */ u8 field_0xa68; /* 0xA69 */ u8 field_0xa69; - /* 0xA6A */ u8 field_0xa6a[0xa74 - 0xa6a]; - /* 0xA6A */ chain_s* field_0xa74; - /* 0xA6A */ u8 field_0xa78[0xa98 - 0xa78]; + /* 0xA6A */ u8 field_0xa6a; + /* 0xA6A */ u8 field_0xa6b; + /* 0xA6C */ u8 field_0xa6c; + /* 0xA6D */ u8 field_0xa6d[0xa74 - 0xa6d]; + /* 0xA74 */ chain_s* field_0xa74; + /* 0xA78 */ u8 field_0xa78[0xa98 - 0xa78]; /* 0xA98 */ f32 mRatio; /* 0xA9C */ u8 field_0xa9c; + /* 0xA9D */ u8 field_0xa9d; + /* 0xA9E */ u8 field_0xa9e; + /* 0xA9F */ u8 field_0xa9f[0xaa0 - 0xa9f]; +#ifdef DEBUG + /* 0xAA0 */ u8 field_0xaa0[0xc]; +#endif }; STATIC_ASSERT(sizeof(daObjSwChain_c) == 0xaa0); - #endif /* D_A_OBJ_SWCHAIN_H */ diff --git a/src/d/actor/d_a_obj_swchain.cpp b/src/d/actor/d_a_obj_swchain.cpp index e2a9db69687..b36b17794a4 100644 --- a/src/d/actor/d_a_obj_swchain.cpp +++ b/src/d/actor/d_a_obj_swchain.cpp @@ -1,492 +1,483 @@ /** * @file d_a_obj_swchain.cpp - * -*/ + * + */ -#include "d/dolzel_rel.h" // IWYU pragma: keep +#include "d/dolzel_rel.h" // IWYU pragma: keep +#ifdef DEBUG +#include "d/d_debug_viewer.h" +#endif #include "d/actor/d_a_obj_swchain.h" #include "d/d_cc_d.h" #include "dol2asm.h" +#ifdef DEBUG +class daObjSwChain_HIO_c : public mDoHIO_entry_c { +public: + /* 811C8DE0 */ daObjSwChain_HIO_c(); + /* 811C8EE0 */ void genMessage(JORMContext*); -// -// Forward References: -// + /* 0x06 */ u8 field_0x06; + /* 0x08 */ f32 mGravity; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 mTension; + /* 0x20 */ f32 mTensionBootsEquipped; + /* 0x24 */ f32 mTensionWolf; + /* 0x28 */ f32 mSwitchOnTension; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 mReturnSpeed; + /* 0x34 */ f32 mReturnSpeedHigh; + /* 0x38 */ f32 mReturnSpeedLow; + /* 0x3C */ s16 mReactionAngle; + /* 0x3E */ s16 field_0x3e; + /* 0x40 */ u8 mSwitchOnTime; + /* 0x41 */ u8 field_0x41; + /* 0x42 */ u8 field_0x42; + /* 0x43 */ u8 mProcessStop; + /* 0x44 */ u8 field_0x44; + /* 0x45 */ u8 mReactionAngleDisplay; +}; -extern "C" static void CheckCreateHeap__FP10fopAc_ac_c(); -extern "C" static void GetActorName__FR13cBgS_PolyInfo(); -extern "C" void Create__14daObjSwChain_cFv(); -extern "C" void CreateHeap__14daObjSwChain_cFv(); -extern "C" void __dt__Q214daObjSwChain_c7chain_sFv(); -extern "C" void __ct__Q214daObjSwChain_c7chain_sFv(); -extern "C" void create1st__14daObjSwChain_cFv(); -extern "C" void __dt__12dBgS_ObjAcchFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void execute__14daObjSwChain_cFv(); -extern "C" void getChainBasePos__14daObjSwChain_cFP4cXyz(); -extern "C" void chain_control__14daObjSwChain_cFv(); -extern "C" void chain_control2__14daObjSwChain_cFv(); -extern "C" void initChainMtx__14daObjSwChain_cFv(); -extern "C" void setChainMtx__14daObjSwChain_cFv(); -extern "C" void chain_count_control__14daObjSwChain_cFv(); -extern "C" void setTension__14daObjSwChain_cFv(); -extern "C" void getTopChainNo__14daObjSwChain_cFv(); -extern "C" void checkPlayerPull__14daObjSwChain_cFv(); -extern "C" void draw__14daObjSwChain_cFv(); -extern "C" void _delete__14daObjSwChain_cFv(); -extern "C" static void daObjSwChain_Draw__FP14daObjSwChain_c(); -extern "C" static void daObjSwChain_Execute__FP14daObjSwChain_c(); -extern "C" static void daObjSwChain_Delete__FP14daObjSwChain_c(); -extern "C" static void daObjSwChain_Create__FP10fopAc_ac_c(); -extern "C" void func_80CFB69C(void* _this, u8*); -extern "C" static void func_80CFB6B8(); -extern "C" static void func_80CFB6C0(); -extern "C" void getRightHandPos__9daPy_py_cCFv(); -extern "C" extern char const* const d_a_obj_swchain__stringBase0; +daObjSwChain_HIO_c::daObjSwChain_HIO_c() { + mGravity = -6.0f; + field_0x0c = 35.0f; + field_0x10 = 35.0f; + field_0x14 = 8.0f; + field_0x18 = 0.0f; + mTension = 15.0f; + mTensionWolf = 13.0f; + mTensionBootsEquipped = 2.1f; + mSwitchOnTension = 10.0f; + field_0x2c = 1.5f; + mSwitchOnTime = 0; + mReturnSpeedHigh = 30.0f; + mReturnSpeedLow = 15.0; + mReturnSpeed = 2.0; + mReactionAngle = 0xe74; + mReactionAngleDisplay = 0; + field_0x3e = 0; + field_0x41 = 0; + field_0x42 = 0; + mProcessStop = 0; + field_0x44 = 0; +} -// -// External References: -// +void daObjSwChain_HIO_c::genMessage(JORMContext* ctx) { + // Chain Switch + ctx->genLabel("チェーンスイッチ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Gravity + ctx->genSlider("重力", &mGravity, -100.0f, -1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Tension + ctx->genSlider("張力", &mTension, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Tension (Boots Equipped) + ctx->genSlider("張力(ブーツ装備)", &mTensionBootsEquipped, 0.0f, 20.0f, 0, NULL, 0xffff, + 0xffff, 0x200, 0x18); + // Tension (Wolf) + ctx->genSlider("張力(狼)", &mTensionWolf, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // SWITCH ON Tension + ctx->genSlider("SWONの張力", &mSwitchOnTension, 0.0f, 20.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // SWITCH ON Time + ctx->genSlider("SWONの時間", &mSwitchOnTime, 0, 64.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // -- Normal -- + ctx->genLabel("-- ノーマル --", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Return Speed + ctx->genSlider("戻る速度", &mReturnSpeed, 0.0f, 50.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // -- With Chandelier -- + ctx->genLabel("-- シャンデリア付き --", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Return Speed・High + ctx->genSlider("戻る速度・高速", &mReturnSpeedHigh, 0.0f, 50.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Return Speed・Low + ctx->genSlider("戻る速度・低速", &mReturnSpeedLow, 0.0f, 50.0f, 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Process Stop + ctx->genCheckBox("処理停止", &mProcessStop, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Clawshot Related + ctx->genLabel("-- フックショット関係 --", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + // Reaction Angle Display + ctx->genCheckBox("反応角度表示", &mReactionAngleDisplay, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, + 0x18); + // Clawshot Reaction Angle + ctx->genSlider("フックショット反応角度", &mReactionAngle, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, + 0x200, 0x18); +} -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 __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeSphere__FP10fopAc_ac_cffff(); -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 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 GetActorPointer__4cBgSCFi(); -extern "C" void ChkPolySafe__4cBgSFRC13cBgS_PolyInfo(); -extern "C" void ChkMoveBG_NoDABg__4dBgSFRC13cBgS_PolyInfo(); -extern "C" void __ct__12dBgS_AcchCirFv(); -extern "C" void SetWall__12dBgS_AcchCirFff(); -extern "C" void __dt__9dBgS_AcchFv(); -extern "C" void __ct__9dBgS_AcchFv(); -extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz(); -extern "C" void CrrPos__9dBgS_AcchFR4dBgS(); -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 ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph(); -extern "C" void create__6dMdl_cFP12J3DModelDataUsP12dKy_tevstr_c(); -extern "C" void entryObj__6dMdl_cFP10dMdl_obj_c(); -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 ClrCcMove__9cCcD_SttsFv(); -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 cM_rndFX__Ff(); -extern "C" void SetC__8cM3dGSphFRC4cXyz(); -extern "C" void cLib_addCalc__FPfffff(); -extern "C" void cLib_addCalcAngleS2__FPssss(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void* __nwa__FUl(); -extern "C" void __dl__FPv(); -extern "C" void __construct_new_array(); -extern "C" void _savegpr_24(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_24(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_29(); -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__6dMdl_c[5 + 1 /* padding */]; -extern "C" extern void* __vt__12cCcD_SphAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" extern void* __vt__9J3DPacket[5]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" u8 mGndCheck__11fopAcM_gc_c[84]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" f32 mGroundY__11fopAcM_gc_c; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; +static daObjSwChain_HIO_c l_HIO; -// -// Declarations: -// +#endif /* 80CF86B8-80CF86D8 000078 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */ -static void CheckCreateHeap(fopAc_ac_c* param_0) { - // NONMATCHING +static int CheckCreateHeap(fopAc_ac_c* a_this) { + daObjSwChain_c* i_this = (daObjSwChain_c*)a_this; + return i_this->CreateHeap(); } /* 80CF86D8-80CF8768 000098 0090+00 2/2 0/0 0/0 .text GetActorName__FR13cBgS_PolyInfo */ -static void GetActorName(cBgS_PolyInfo& param_0) { - // NONMATCHING +static s16 GetActorName(cBgS_PolyInfo& param_0) { + if (dComIfG_Bgsp().ChkPolySafe(param_0)) { + if (dComIfG_Bgsp().ChkMoveBG_NoDABg(param_0)) { + if (dComIfG_Bgsp().GetActorPointer(param_0)) { + return fopAcM_GetName(dComIfG_Bgsp().GetActorPointer(param_0)); + } + } + } + + return PROC_Obj_SwChain; } -/* ############################################################################################## */ -/* 80CFB6EC-80CFB6F0 000000 0004+00 10/10 0/0 0/0 .rodata @3734 */ -SECTION_RODATA static u8 const lit_3734[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80CFB6EC, &lit_3734); - -/* 80CFB6F0-80CFB6F4 000004 0004+00 0/1 0/0 0/0 .rodata @3735 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3735 = 40.0f; -COMPILER_STRIP_GATE(0x80CFB6F0, &lit_3735); -#pragma pop - -/* 80CFB6F4-80CFB6F8 000008 0004+00 0/6 0/0 0/0 .rodata @3736 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3736 = 35.0f; -COMPILER_STRIP_GATE(0x80CFB6F4, &lit_3736); -#pragma pop - -/* 80CFB6F8-80CFB6FC 00000C 0004+00 0/1 0/0 0/0 .rodata @3737 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3737 = 50.0f; -COMPILER_STRIP_GATE(0x80CFB6F8, &lit_3737); -#pragma pop - -/* 80CFB6FC-80CFB704 000010 0008+00 0/3 0/0 0/0 .rodata @3739 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3739[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CFB6FC, &lit_3739); -#pragma pop - -/* 80CFB790-80CFB790 0000A4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80CFB790 = "P_Chain"; -#pragma pop - /* 80CFB798-80CFB79C -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_swchain__stringBase0; +static char* l_arcName = "P_Chain"; /* 80CFB79C-80CFB7DC 000004 0040+00 1/1 0/0 0/0 .data l_sph_src */ static dCcD_SrcSph l_sph_src = { { - {0x0, {{0x0, 0x0, 0x0}, {0x4000, 0x11}, 0x58}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x0, 0x0, 0x0}, {0x4000, 0x11}, 0x58}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph - } // mSphAttr + {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph + } // mSphAttr }; /* 80CFB7DC-80CFB81C 000044 0040+00 1/1 0/0 0/0 .data l_sph_srcCo */ static dCcD_SrcSph l_sph_srcCo = { { - {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x10}, 0x49}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x0, 0x0, 0x0}, {0x0, 0x10}, 0x49}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph - } // mSphAttr + {{0.0f, 0.0f, 0.0f}, 50.0f} // mSph + } // mSphAttr }; /* 80CF8768-80CF89C0 000128 0258+00 1/1 0/0 0/0 .text Create__14daObjSwChain_cFv */ -void daObjSwChain_c::Create() { - // NONMATCHING +int daObjSwChain_c::Create() { + mStts.Init(0xff, 0xff, this); + mSph1.Set(l_sph_src); + mSph1.SetStts(&mStts); + mSph2.Set(l_sph_srcCo); + mSph2.SetStts(&mStts); + mAcchCir.SetWall(0.0f, 40.0f); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), ¤t.angle, &shape_angle); + fopAcM_setCullSizeSphere(this, home.pos.x, home.pos.y, home.pos.z, (field_0xa65 + 1) * 35.0f); + cXyz cStack_3c(0.0f, 0.0f, 50.0f); + cXyz cStack_48; + cXyz cStack_54; + + mDoMtx_stack_c::YrotS(shape_angle.y); + mDoMtx_stack_c::multVec(&cStack_3c, &cStack_48); + + getChainBasePos(&field_0xa74->field_0x34); + cStack_54 = field_0xa74->field_0x34; + + chain_s* p_chain = field_0xa74; + + for (int i = 0; i < field_0xa65 + 1; i++) { + if (i < getTopChainNo()) { + p_chain->field_0x34 = home.pos; + cStack_54 = p_chain->field_0x34; + } else { + p_chain->field_0x34 = cStack_54 + cStack_48; + cStack_54 = p_chain->field_0x34; + } + + p_chain++; + } + + initChainMtx(); + mModel.create(mChainModelData, 0, &tevStr); + + if (fopAcM_GetRoomNo(this) == 4) { + field_0xa67 = 0x14; + field_0xa69 = 0x14; + } else if (fopAcM_GetRoomNo(this) == 6) { + field_0xa67 = 0x14; + field_0xa69 = 0x14; + } + + return 1; } /* 80CF89C0-80CF8B00 000380 0140+00 1/1 0/0 0/0 .text CreateHeap__14daObjSwChain_cFv */ -void daObjSwChain_c::CreateHeap() { - // NONMATCHING +int daObjSwChain_c::CreateHeap() { + field_0xa74 = new chain_s[field_0xa65 + 1]; + + if (field_0xa74 == NULL) { + return 0; + } + + chain_s* p_chain = field_0xa74; + for (int i = 0; i < field_0xa65 + 1; i++, p_chain++) { + p_chain->field_0x34.setall(0.0f); + p_chain->field_0x40.setall(0); + p_chain->field_0x48 = 0.0f; + p_chain->field_0x4c = 0; + } + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4); + JUT_ASSERT(532, modelData != 0); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + + if (mpModel == NULL) { + return 0; + } + + mChainModelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 3); + JUT_ASSERT(545, mChainModelData != 0); + + return 1; } /* 80CF8B00-80CF8B3C 0004C0 003C+00 1/1 0/0 0/0 .text __dt__Q214daObjSwChain_c7chain_sFv */ -daObjSwChain_c::chain_s::~chain_s() { - // NONMATCHING -} +daObjSwChain_c::chain_s::~chain_s() {} /* 80CF8B3C-80CF8B48 0004FC 000C+00 1/1 0/0 0/0 .text __ct__Q214daObjSwChain_c7chain_sFv */ -daObjSwChain_c::chain_s::chain_s() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CFB81C-80CFB83C -00001 0020+00 1/0 0/0 0/0 .data l_daObjSwChain_Method */ -static actor_method_class l_daObjSwChain_Method = { - (process_method_func)daObjSwChain_Create__FP10fopAc_ac_c, - (process_method_func)daObjSwChain_Delete__FP14daObjSwChain_c, - (process_method_func)daObjSwChain_Execute__FP14daObjSwChain_c, - 0, - (process_method_func)daObjSwChain_Draw__FP14daObjSwChain_c, -}; - -/* 80CFB83C-80CFB86C -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SwChain */ -extern actor_process_profile_definition g_profile_Obj_SwChain = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_SwChain, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjSwChain_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 615, // mPriority - &l_daObjSwChain_Method, // sub_method - 0x000C0000, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType -}; - -/* 80CFB86C-80CFB890 0000D4 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_80CFB6C0, - (void*)NULL, - (void*)NULL, - (void*)func_80CFB6B8, -}; - -/* 80CFB890-80CFB89C 0000F8 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, -}; - -/* 80CFB89C-80CFB8A8 000104 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; +daObjSwChain_c::chain_s::chain_s() {} /* 80CF8B48-80CF8DD0 000508 0288+00 1/1 0/0 0/0 .text create1st__14daObjSwChain_cFv */ -void daObjSwChain_c::create1st() { - // NONMATCHING +// NONMATCHING +int daObjSwChain_c::create1st() { + fopAcM_SetupActor(this, daObjSwChain_c); + + if (field_0xa60 == 0) { + mHookshotLength = home.angle.x; + field_0xa5e = home.angle.z; + home.angle.x = home.angle.z = 0; + current.angle.x = current.angle.z = 0; + shape_angle.x = shape_angle.z = 0; + field_0xa60 = 1; + } + + // missing instructions + field_0xa65 = getChainNum() & 1 ? getChainNum() : getChainNum() + 1; + + field_0xa66 = getHookShotLength(); + field_0xa64 = getOutNum(); + field_0xa63 = getChainID(); + +#ifdef DEBUG + if (field_0xa63 != 0 && field_0xa63 != 1 && field_0xa63 != 2 && field_0xa63 != 3) { + // Chain Switch: Chain ID value is abnormal <%d> + OS_REPORT_ERROR("チェーンスイッチ:鎖の番号が異常値です<%d>\n", field_0xa63); + return cPhs_ERROR_e; + } +#endif + +#ifdef DEBUG + if (field_0xa64 > field_0xa65) { + // Chain Switch: Argument 2 > Argument 1 ! + OS_REPORT_ERROR("チェーンスイッチ:引数2>引数1になっています!\n"); + return cPhs_ERROR_e; + } +#endif + +#ifdef DEBUG + if (field_0xa66 > field_0xa65) { + // Chain Switch: Argument 3 > Argument 1 ! + OS_REPORT_ERROR("チェーンスイッチ:引数3>引数1になっています!\n"); + return cPhs_ERROR_e; + } +#endif + + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + u32 size = 0x4000; + size |= 0x80000000; + + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, size)) { + return cPhs_ERROR_e; + } + + if (!Create()) { + return cPhs_ERROR_e; + } +#ifdef DEBUG + // Chain Switch + l_HIO.entryHIO("チェーンスイッチ"); +#endif + } + + return phase; } -/* 80CF8DD0-80CF8E40 000790 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */ -// dBgS_ObjAcch::~dBgS_ObjAcch() { -extern "C" void __dt__12dBgS_ObjAcchFv() { - // NONMATCHING -} - -/* 80CF8E40-80CF8E88 000800 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80CF8E88-80CF8ED0 000848 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* ############################################################################################## */ -/* 80CFB704-80CFB70C 000018 0008+00 0/5 0/0 0/0 .rodata @4120 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4120[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CFB704, &lit_4120); -#pragma pop - -/* 80CFB70C-80CFB714 000020 0008+00 0/5 0/0 0/0 .rodata @4121 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4121[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CFB70C, &lit_4121); -#pragma pop - -/* 80CFB714-80CFB71C 000028 0008+00 0/5 0/0 0/0 .rodata @4122 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4122[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80CFB714, &lit_4122); -#pragma pop - -/* 80CFB71C-80CFB720 000030 0004+00 0/1 0/0 0/0 .rodata @4123 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4123 = 30.0f; -COMPILER_STRIP_GATE(0x80CFB71C, &lit_4123); -#pragma pop - -/* 80CFB720-80CFB724 000034 0004+00 0/3 0/0 0/0 .rodata @4124 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4124 = 15.0f; -COMPILER_STRIP_GATE(0x80CFB720, &lit_4124); -#pragma pop - -/* 80CFB724-80CFB728 000038 0004+00 0/1 0/0 0/0 .rodata @4125 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4125 = 2.0f; -COMPILER_STRIP_GATE(0x80CFB724, &lit_4125); -#pragma pop - /* 80CF8ED0-80CF94E4 000890 0614+00 1/1 0/0 0/0 .text execute__14daObjSwChain_cFv */ -void daObjSwChain_c::execute() { - // NONMATCHING +// NONMATCHING - regalloc / instruction ordering +int daObjSwChain_c::execute() { +#ifdef DEBUG + if (l_HIO.mProcessStop) { + return 1; + } +#endif + + field_0xa9c = 0; + + if (getSwbit2() != 0xff && !fopAcM_isSwitch(this, getSwbit2())) { + field_0xa6c = 1; + } else { + field_0xa6c = 0; + } + + chain_count_control(); + chain_s* unused = field_0xa74; + chain_control(); + chain_s* iVar1 = &field_0xa74[field_0xa65]; + + if (!field_0xa6c && daPy_py_c::setFmChainPos(this, &iVar1->field_0x34, field_0xa63)) { + mCarry = 1; + eyePos = home.pos; + } else { + mCarry = 0; + eyePos = iVar1->field_0x34; + } + + if (field_0xa9d == 0 && mCarry != 0 || field_0xa9d != 0 && mCarry == 0) { + daPy_py_c::setPlayerSe(Z2SE_AL_GRAB_CHAIN); + } + + if (fopAcM_checkHookCarryNow(this)) { + field_0xa61 = 1; + if (field_0xa64 >= field_0xa66 && field_0xa9e == 0) { + fopAcM_cancelHookCarryNow(this); + } + } else { + field_0xa61 = 0; + current.pos = iVar1->field_0x34; + } + + chain_control2(); + setTension(); + setChainMtx(); + field_0xa6b = 0; + cXyz cStack_68(field_0xa74[getTopChainNo()].field_0x34); + cXyz cStack_74(field_0xa74[field_0xa65].field_0x34); + f32 fVar15 = cStack_74.abs(cStack_68); +#ifdef DEBUG + if (fVar15 < (l_HIO.field_0x0c * (field_0xa64 - 2)) || mCarry == 0) +#else + if (fVar15 < (35.0f * (field_0xa64 - 2)) || mCarry == 0) +#endif + if (field_0xa64 > getOutNum() && mRatio != 0.0f) { + cXyz cStack_80(field_0xa74[0].field_0x34); + cXyz cStack_8c; + cStack_8c = cStack_80 - field_0xa74[getTopChainNo()].field_0x34; + cStack_8c.normalizeZP(); + + switch (fopAcM_GetRoomNo(this)) { + case 4: + case 6: + if (field_0xa64 > field_0xa69) { +#ifdef DEBUG + iVar1->field_0x34 += cStack_8c * l_HIO.mReturnSpeedHigh; +#else + iVar1->field_0x34 += cStack_8c * 30.0f; +#endif + // mistake? + field_0xa6b = 1; + field_0xa6b = 1; + } else { +#ifdef DEBUG + iVar1->field_0x34 += cStack_8c * l_HIO.mReturnSpeedLow; +#else + iVar1->field_0x34 += cStack_8c * 15.0f; +#endif + } + break; + default: +#ifdef DEBUG + iVar1->field_0x34 += cStack_8c * l_HIO.mReturnSpeed; +#else + iVar1->field_0x34 += cStack_8c * 2.0f; +#endif + } + } + + if (field_0xa6c == 0) { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz pos = (player->current.pos - home.pos); + s16 abs_tmp = pos.atan2sX_Z() - shape_angle.y; +#ifdef DEBUG + if (abs(abs_tmp) < l_HIO.mReactionAngle) { +#else + if (abs(abs_tmp) < 0xe74) { +#endif + chain_s* chain_p2 = &field_0xa74[field_0xa65]; + mSph1.SetC(chain_p2->field_0x34); + dComIfG_Ccsp()->Set(&mSph1); + } + } + + if (mCarry != 0) { + cXyz local_a4; + cXyz cStack_b0(current.pos); + mAcch.CrrPos(dComIfG_Bgsp()); + local_a4 = current.pos - cStack_b0; + current.pos = cStack_b0; + + if (mSph2.ChkCoHit()) { + cXyz* move_pos = mStts.GetCCMoveP(); + if (move_pos != NULL) { + local_a4 += *move_pos; + } + } + + mStts.ClrCcMove(); + mSph2.ClrCoHit(); + + daPy_getPlayerActorClass()->setGrabCollisionOffset(local_a4.x, local_a4.z, 0); + mSph2.SetC(current.pos); + dComIfG_Ccsp()->Set(&mSph2); + } + + field_0xa9d = mCarry; +#ifdef DEBUG + if (l_HIO.field_0x42 != 0) { + if (l_HIO.field_0x44 == getChainID()) { + dDbVw_Report(0x28, 200, "Num<%d>Len<%.2f>", getCurrentChainNum(), + getCurrentChainLength()); + if (checkTight() != 0) { + dDbVw_Report(0x28, 100, "TENSION!"); + } + } + + dDbVw_Report(0x28, 0xd4, "SeenAngY <%x>", fopAcM_seenPlayerAngleY(this)); + dDbVw_Report(0x28, 0xe0, "SearchAngY <%x>", fopAcM_searchPlayerAngleY(this)); + dDbVw_Report(0x28, 0xec, "toShapeAngY<%x>", fopAcM_toPlayerShapeAngleY(this)); + } +#endif + + return 1; } /* 80CF94E4-80CF9500 000EA4 001C+00 1/1 0/0 0/0 .text getChainBasePos__14daObjSwChain_cFP4cXyz */ void daObjSwChain_c::getChainBasePos(cXyz* param_0) { - // NONMATCHING + *param_0 = home.pos; } -/* ############################################################################################## */ -/* 80CFB728-80CFB72C 00003C 0004+00 0/1 0/0 0/0 .rodata @4258 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4258 = -6.0f; -COMPILER_STRIP_GATE(0x80CFB728, &lit_4258); -#pragma pop - -/* 80CFB72C-80CFB730 000040 0004+00 0/3 0/0 0/0 .rodata @4259 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4259 = 0.5f; -COMPILER_STRIP_GATE(0x80CFB72C, &lit_4259); -#pragma pop - -/* 80CFB730-80CFB734 000044 0004+00 0/1 0/0 0/0 .rodata @4260 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_4260 = 0x3DCCCCCC; -COMPILER_STRIP_GATE(0x80CFB730, &lit_4260); -#pragma pop - -/* 80CFB734-80CFB738 000048 0004+00 0/1 0/0 0/0 .rodata @4261 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4261 = 5.0f; -COMPILER_STRIP_GATE(0x80CFB734, &lit_4261); -#pragma pop - -/* 80CFB738-80CFB73C 00004C 0004+00 0/2 0/0 0/0 .rodata @4262 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4262 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CFB738, &lit_4262); -#pragma pop - -/* 80CFB73C-80CFB740 000050 0004+00 0/3 0/0 0/0 .rodata @4263 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4263 = 1.0f; -COMPILER_STRIP_GATE(0x80CFB73C, &lit_4263); -#pragma pop - -/* 80CFB740-80CFB744 000054 0004+00 0/2 0/0 0/0 .rodata @4264 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4264 = 100.0f; -COMPILER_STRIP_GATE(0x80CFB740, &lit_4264); -#pragma pop - -/* 80CFB744-80CFB748 000058 0004+00 0/3 0/0 0/0 .rodata @4265 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4265 = 8.0f; -COMPILER_STRIP_GATE(0x80CFB744, &lit_4265); -#pragma pop - /* 80CF9500-80CF99C0 000EC0 04C0+00 1/1 0/0 0/0 .text chain_control__14daObjSwChain_cFv */ void daObjSwChain_c::chain_control() { // NONMATCHING } -/* ############################################################################################## */ -/* 80CFB748-80CFB74C 00005C 0004+00 0/1 0/0 0/0 .rodata @4457 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4457 = 12.0f; -COMPILER_STRIP_GATE(0x80CFB748, &lit_4457); -#pragma pop - -/* 80CFB74C-80CFB750 000060 0004+00 0/1 0/0 0/0 .rodata @4458 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4458 = 7.0f; -COMPILER_STRIP_GATE(0x80CFB74C, &lit_4458); -#pragma pop - -/* 80CFB750-80CFB754 000064 0004+00 0/1 0/0 0/0 .rodata @4459 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4459 = 60.0f; -COMPILER_STRIP_GATE(0x80CFB750, &lit_4459); -#pragma pop - -/* 80CFB754-80CFB758 000068 0004+00 0/1 0/0 0/0 .rodata @4460 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4460 = -10.0f; -COMPILER_STRIP_GATE(0x80CFB754, &lit_4460); -#pragma pop - -/* 80CFB758-80CFB75C 00006C 0004+00 0/1 0/0 0/0 .rodata @4461 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4461 = 25.0f; -COMPILER_STRIP_GATE(0x80CFB758, &lit_4461); -#pragma pop - /* 80CF99C0-80CFA05C 001380 069C+00 1/1 0/0 0/0 .text chain_control2__14daObjSwChain_cFv */ void daObjSwChain_c::chain_control2() { // NONMATCHING } -/* ############################################################################################## */ -/* 80CFB75C-80CFB760 000070 0004+00 1/1 0/0 0/0 .rodata @4479 */ -SECTION_RODATA static f32 const lit_4479 = 16384.0f; -COMPILER_STRIP_GATE(0x80CFB75C, &lit_4479); - /* 80CFA05C-80CFA124 001A1C 00C8+00 1/1 0/0 0/0 .text initChainMtx__14daObjSwChain_cFv */ void daObjSwChain_c::initChainMtx() { // NONMATCHING @@ -497,97 +488,11 @@ void daObjSwChain_c::setChainMtx() { // NONMATCHING } -/* ############################################################################################## */ -/* 80CFB760-80CFB764 000074 0004+00 0/1 0/0 0/0 .rodata @4848 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4848 = 105.0f; -COMPILER_STRIP_GATE(0x80CFB760, &lit_4848); -#pragma pop - -/* 80CFB764-80CFB768 000078 0004+00 0/1 0/0 0/0 .rodata @4849 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4849 = -1.0f; -COMPILER_STRIP_GATE(0x80CFB764, &lit_4849); -#pragma pop - -/* 80CFB768-80CFB76C 00007C 0004+00 0/1 0/0 0/0 .rodata @4850 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4850 = 17.5f; -COMPILER_STRIP_GATE(0x80CFB768, &lit_4850); -#pragma pop - -/* 80CFB76C-80CFB770 000080 0004+00 0/1 0/0 0/0 .rodata @4851 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4851 = 10.0f; -COMPILER_STRIP_GATE(0x80CFB76C, &lit_4851); -#pragma pop - -/* 80CFB770-80CFB774 000084 0004+00 0/1 0/0 0/0 .rodata @4852 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4852 = 1.5f; -COMPILER_STRIP_GATE(0x80CFB770, &lit_4852); -#pragma pop - -/* 80CFB774-80CFB778 000088 0004+00 0/1 0/0 0/0 .rodata @4853 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4853 = 6.0f; -COMPILER_STRIP_GATE(0x80CFB774, &lit_4853); -#pragma pop - -/* 80CFB778-80CFB77C 00008C 0004+00 0/1 0/0 0/0 .rodata @4854 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4854 = 9.0f; -COMPILER_STRIP_GATE(0x80CFB778, &lit_4854); -#pragma pop - -/* 80CFB77C-80CFB780 000090 0004+00 0/2 0/0 0/0 .rodata @4855 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4855 = 13.0f; -COMPILER_STRIP_GATE(0x80CFB77C, &lit_4855); -#pragma pop - -/* 80CFB780-80CFB784 000094 0004+00 0/2 0/0 0/0 .rodata @4856 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4856 = 20.0f; -COMPILER_STRIP_GATE(0x80CFB780, &lit_4856); -#pragma pop - /* 80CFA4A8-80CFAD50 001E68 08A8+00 1/1 0/0 0/0 .text chain_count_control__14daObjSwChain_cFv */ void daObjSwChain_c::chain_count_control() { // NONMATCHING } -/* ############################################################################################## */ -/* 80CFB784-80CFB788 000098 0004+00 0/1 0/0 0/0 .rodata @5043 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u32 const lit_5043 = 0x3F333334; -COMPILER_STRIP_GATE(0x80CFB784, &lit_5043); -#pragma pop - -/* 80CFB788-80CFB78C 00009C 0004+00 0/1 0/0 0/0 .rodata @5044 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5044 = 21.0f / 10.0f; -COMPILER_STRIP_GATE(0x80CFB788, &lit_5044); -#pragma pop - -/* 80CFB78C-80CFB790 0000A0 0004+00 0/1 0/0 0/0 .rodata @5045 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_5045 = 7000.0f; -COMPILER_STRIP_GATE(0x80CFB78C, &lit_5045); -#pragma pop - /* 80CFAD50-80CFB450 002710 0700+00 1/1 0/0 0/0 .text setTension__14daObjSwChain_cFv */ void daObjSwChain_c::setTension() { // NONMATCHING @@ -595,7 +500,7 @@ void daObjSwChain_c::setTension() { /* 80CFB450-80CFB464 002E10 0014+00 8/8 0/0 0/0 .text getTopChainNo__14daObjSwChain_cFv */ -void daObjSwChain_c::getTopChainNo() { +int daObjSwChain_c::getTopChainNo() { // NONMATCHING } @@ -606,55 +511,65 @@ void daObjSwChain_c::checkPlayerPull() { } /* 80CFB53C-80CFB5E8 002EFC 00AC+00 1/1 0/0 0/0 .text draw__14daObjSwChain_cFv */ -void daObjSwChain_c::draw() { +int daObjSwChain_c::draw() { // NONMATCHING } /* 80CFB5E8-80CFB61C 002FA8 0034+00 1/1 0/0 0/0 .text _delete__14daObjSwChain_cFv */ -void daObjSwChain_c::_delete() { - // NONMATCHING +int daObjSwChain_c::_delete() { + dComIfG_resDelete(&mPhase, l_arcName); +#ifdef DEBUG + l_HIO.removeHIO(); +#endif + return 1; } /* 80CFB61C-80CFB63C 002FDC 0020+00 1/0 0/0 0/0 .text daObjSwChain_Draw__FP14daObjSwChain_c */ -static void daObjSwChain_Draw(daObjSwChain_c* param_0) { - // NONMATCHING +static int daObjSwChain_Draw(daObjSwChain_c* i_this) { + return i_this->draw(); } /* 80CFB63C-80CFB65C 002FFC 0020+00 1/0 0/0 0/0 .text daObjSwChain_Execute__FP14daObjSwChain_c */ -static void daObjSwChain_Execute(daObjSwChain_c* param_0) { - // NONMATCHING +static int daObjSwChain_Execute(daObjSwChain_c* i_this) { + return i_this->execute(); } /* 80CFB65C-80CFB67C 00301C 0020+00 1/0 0/0 0/0 .text daObjSwChain_Delete__FP14daObjSwChain_c */ -static void daObjSwChain_Delete(daObjSwChain_c* param_0) { - // NONMATCHING +static int daObjSwChain_Delete(daObjSwChain_c* i_this) { + fpc_ProcID unused = fopAcM_GetID(i_this); + return i_this->_delete(); } /* 80CFB67C-80CFB69C 00303C 0020+00 1/0 0/0 0/0 .text daObjSwChain_Create__FP10fopAc_ac_c */ -static void daObjSwChain_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObjSwChain_Create(fopAc_ac_c* a_this) { + daObjSwChain_c* i_this = (daObjSwChain_c*)a_this; + fpc_ProcID unused = fopAcM_GetID(a_this); + return i_this->Create(); } -/* 80CFB69C-80CFB6B8 00305C 001C+00 1/1 0/0 0/0 .text cLib_calcTimer__FPUc */ -extern "C" void func_80CFB69C(void* _this, u8* param_0) { - // NONMATCHING -} +/* ############################################################################################## */ +/* 80CFB81C-80CFB83C -00001 0020+00 1/0 0/0 0/0 .data l_daObjSwChain_Method */ +static actor_method_class l_daObjSwChain_Method = { + (process_method_func)daObjSwChain_Create, (process_method_func)daObjSwChain_Delete, + (process_method_func)daObjSwChain_Execute, 0, + (process_method_func)daObjSwChain_Draw, +}; -/* 80CFB6B8-80CFB6C0 003078 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */ -static void func_80CFB6B8() { - // NONMATCHING -} - -/* 80CFB6C0-80CFB6C8 003080 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */ -static void func_80CFB6C0() { - // NONMATCHING -} - -/* 80CFB6C8-80CFB6E4 003088 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 -} - -/* 80CFB790-80CFB790 0000A4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* 80CFB83C-80CFB86C -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SwChain */ +extern actor_process_profile_definition g_profile_Obj_SwChain = { + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_SwChain, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjSwChain_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 615, // mPriority + &l_daObjSwChain_Method, // sub_method + 0x000C0000, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType +};