From 2835276bfeecde6c6d09f855df58bcd9f96ad702 Mon Sep 17 00:00:00 2001 From: Arnaut Scholten <44735497+ArnautS@users.noreply.github.com> Date: Sat, 31 May 2025 19:42:17 +0200 Subject: [PATCH] d_a_obj_laundry_rope Matching (#2464) * Add create implementation * Add create_init * Almost all matching * Full match * Matching laundry rope * Cleanup * Fix PR comments --- configure.py | 2 +- include/d/actor/d_a_obj_laundry_rope.h | 55 ++- src/d/actor/d_a_obj_laundry_rope.cpp | 631 +++++++++++-------------- 3 files changed, 318 insertions(+), 370 deletions(-) diff --git a/configure.py b/configure.py index a39daa9823d..54521ef9faa 100755 --- a/configure.py +++ b/configure.py @@ -1975,7 +1975,7 @@ config.libs = [ ActorRel(Equivalent, "d_a_obj_kwheel01"), # weak func order ActorRel(NonMatching, "d_a_obj_kznkarm"), ActorRel(Equivalent, "d_a_obj_laundry"), # weak func order - ActorRel(NonMatching, "d_a_obj_laundry_rope"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_laundry_rope"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_lbox"), ActorRel(NonMatching, "d_a_obj_lp"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_lv1Candle00"), diff --git a/include/d/actor/d_a_obj_laundry_rope.h b/include/d/actor/d_a_obj_laundry_rope.h index d77b048b117..3c7c2648bc9 100644 --- a/include/d/actor/d_a_obj_laundry_rope.h +++ b/include/d/actor/d_a_obj_laundry_rope.h @@ -1,7 +1,24 @@ #ifndef D_A_OBJ_LAUNDRY_ROPE_H #define D_A_OBJ_LAUNDRY_ROPE_H -#include "f_op/f_op_actor_mng.h" +#include "d/d_cc_d.h" +#include "f_op/f_op_actor.h" + +struct daObjLndRope_Attr_c { + f32 mGravity; + f32 field_0x4; + f32 field_0x8; + f32 field_0xc; + f32 field_0x10; +}; + +struct daObjLndRope_Hio_c { + f32 mGravity; + f32 field_0x4; + f32 field_0x8; + f32 field_0xc; + f32 field_0x10; +}; /** * @ingroup actors-objects @@ -18,10 +35,42 @@ public: /* 80C52890 */ void setBaseMtx(); /* 80C528E0 */ void setNormalRopePos(); - static u8 const M_attr[20]; + inline ~daObjLndRope_c(); + inline int create(); + inline int createHeap(); + inline int draw(); + inline int execute(); + inline u8 getPathId(); + inline cXyz* getRopeStartPos(); + inline float getStartRate(cXyz* param_1); + + + #ifdef DEBUG + const daObjLndRope_Hio_c* attr() const { + return &M_Hio; + }; + #else + const daObjLndRope_Attr_c* attr() const { + return &mAttr; + }; + #endif + + static const daObjLndRope_Attr_c mAttr; + static const daObjLndRope_Hio_c M_Hio; private: - /* 0x568 */ u8 field_0x568[0x1774 - 0x568]; + /* 0x0568 */ mDoExt_3DlineMat1_c mRopeMat; + /* 0x05a4 */ request_of_phase_process_class mPhase; + /* 0x05ac */ Mtx mMtx; + /* 0x05dc */ dCcD_Stts mStts; + /* 0x0618 */ dCcD_Sph mSphs[13]; + /* 0x15f0 */ cXyz mPositions1[13]; + /* 0x168c */ cXyz mPositions2[13]; + /* 0x1728 */ fpc_ProcID mProcIds[13]; + /* 0x175c */ cXyz mPos; + /* 0x1768 */ f32 mScale; + /* 0x176c */ f32 mSegmentLength; + /* 0x1770 */ u8 mFlag; }; STATIC_ASSERT(sizeof(daObjLndRope_c) == 0x1774); diff --git a/src/d/actor/d_a_obj_laundry_rope.cpp b/src/d/actor/d_a_obj_laundry_rope.cpp index 951f7379134..816401bb587 100644 --- a/src/d/actor/d_a_obj_laundry_rope.cpp +++ b/src/d/actor/d_a_obj_laundry_rope.cpp @@ -1,431 +1,330 @@ /** * @file d_a_obj_laundry_rope.cpp - * -*/ + * + */ #include "d/actor/d_a_obj_laundry_rope.h" +#include "SSystem/SComponent/c_lib.h" +#include "SSystem/SComponent/c_math.h" #include "d/d_cc_d.h" +#include "d/d_com_inf_game.h" +#include "d/d_kankyo_wether.h" +#include "d/d_path.h" #include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void create_init__14daObjLndRope_cFv(); -extern "C" void __dt__4cXyzFv(); -extern "C" void initBaseMtx__14daObjLndRope_cFv(); -extern "C" void setBaseMtx__14daObjLndRope_cFv(); -extern "C" void setNormalRopePos__14daObjLndRope_cFv(); -extern "C" static void createSolidHeap__FP10fopAc_ac_c(); -extern "C" static void daObjLndRope_Draw__FP14daObjLndRope_c(); -extern "C" static void daObjLndRope_Execute__FP14daObjLndRope_c(); -extern "C" static bool daObjLndRope_IsDelete__FP14daObjLndRope_c(); -extern "C" static void daObjLndRope_Delete__FP14daObjLndRope_c(); -extern "C" void __dt__8dCcD_SphFv(); -extern "C" static void daObjLndRope_Create__FP10fopAc_ac_c(); -extern "C" void __ct__4cXyzFv(); -extern "C" void __ct__8dCcD_SphFv(); -extern "C" void __dt__8cM3dGSphFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" void __dt__10dCcD_GSttsFv(); -extern "C" void __dt__10cCcD_GSttsFv(); -extern "C" u8 const M_attr__14daObjLndRope_c[20]; -extern "C" extern char const* const d_a_obj_laundry_rope__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi(); -extern "C" void update__19mDoExt_3DlineMat1_cFiR8_GXColorP12dKy_tevstr_c(); -extern "C" void setMat__26mDoExt_3DlineMatSortPacketFP18mDoExt_3DlineMat_c(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff(); -extern "C" void fpcEx_SearchByID__FUi(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -extern "C" void dPath_GetRoomPath__Fii(); -extern "C" void dKyw_get_AllWind_vecpow__FP4cXyz(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void __pl__4cXyzCFRC3Vec(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void __ml__4cXyzCFf(); -extern "C" void normalizeZP__4cXyzFv(); -extern "C" void __ct__5csXyzFsss(); -extern "C" void cM_atan2s__Fff(); -extern "C" void cM_rnd__Fv(); -extern "C" void cLib_targetAngleY__FPC3VecPC3Vec(); -extern "C" void cLib_targetAngleX__FPC4cXyzPC4cXyz(); -extern "C" void __dl__FPv(); -extern "C" void __destroy_arr(); -extern "C" void __construct_array(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" extern void* __vt__19mDoExt_3DlineMat1_c[5]; -extern "C" extern void* __vt__8dCcD_Sph[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -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 u8 g_dComIfG_gameInfo[122384]; - // // Declarations: // /* ############################################################################################## */ /* 80C53304-80C53318 000000 0014+00 3/3 0/0 0/0 .rodata M_attr__14daObjLndRope_c */ -SECTION_RODATA u8 const daObjLndRope_c::M_attr[20] = { - 0xC0, 0xA0, 0x00, 0x00, 0x3E, 0x4C, 0xCC, 0xCD, 0x3F, 0x00, - 0x00, 0x00, 0x3F, 0x4C, 0xCC, 0xCD, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C53304, &daObjLndRope_c::M_attr); +daObjLndRope_Attr_c const daObjLndRope_c::mAttr = {-5.0f, 0.2f, 0.5f, 0.8f, 0.0f}; /* 80C53318-80C53328 000014 000D+03 0/1 0/0 0/0 .rodata l_laundryList */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_laundryList[13 + 3 /* padding */] = { - 0xFF, - 0xFF, - 0x03, - 0x00, - 0xFF, - 0x01, - 0x01, - 0xFF, - 0x02, - 0x02, - 0xFF, - 0x02, - 0xFF, - /* padding */ - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C53318, &l_laundryList); -#pragma pop +static const s8 l_laundryList[13] = {-1, -1, 3, 0, -1, 1, 1, -1, 2, 2, -1, 2, -1}; -/* 80C53328-80C5332C 000024 0004+00 0/1 0/0 0/0 .rodata @3791 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3791 = 0.5f; -COMPILER_STRIP_GATE(0x80C53328, &lit_3791); -#pragma pop - -/* 80C5332C-80C53330 000028 0004+00 0/1 0/0 0/0 .rodata @3792 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3792 = 1.0f; -COMPILER_STRIP_GATE(0x80C5332C, &lit_3792); -#pragma pop - -/* 80C53330-80C53334 00002C 0004+00 0/2 0/0 0/0 .rodata @3793 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3793[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80C53330, &lit_3793); -#pragma pop - -/* 80C53334-80C5333C 000030 0008+00 0/1 0/0 0/0 .rodata @3794 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3794[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C53334, &lit_3794); -#pragma pop - -/* 80C5333C-80C53344 000038 0008+00 0/1 0/0 0/0 .rodata @3795 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3795[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C5333C, &lit_3795); -#pragma pop - -/* 80C53344-80C5334C 000040 0008+00 0/1 0/0 0/0 .rodata @3796 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3796[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80C53344, &lit_3796); -#pragma pop - -/* 80C5334C-80C53350 000048 0004+00 0/1 0/0 0/0 .rodata @3797 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3797 = 3.0f; -COMPILER_STRIP_GATE(0x80C5334C, &lit_3797); -#pragma pop - -/* 80C53350-80C53354 00004C 0004+00 0/1 0/0 0/0 .rodata @3798 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3798 = -75.0f; -COMPILER_STRIP_GATE(0x80C53350, &lit_3798); -#pragma pop - -/* 80C53354-80C53358 000050 0004+00 0/1 0/0 0/0 .rodata @3799 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3799 = -200.0f; -COMPILER_STRIP_GATE(0x80C53354, &lit_3799); -#pragma pop - -/* 80C53358-80C5335C 000054 0004+00 0/1 0/0 0/0 .rodata @3800 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3800 = 75.0f; -COMPILER_STRIP_GATE(0x80C53358, &lit_3800); -#pragma pop - -/* 80C5335C-80C53360 000058 0004+00 0/1 0/0 0/0 .rodata @3801 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3801 = 50.0f; -COMPILER_STRIP_GATE(0x80C5335C, &lit_3801); -#pragma pop - -/* 80C53360-80C53364 00005C 0004+00 0/1 0/0 0/0 .rodata @3802 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3802 = 1.0f / 14.0f; -COMPILER_STRIP_GATE(0x80C53360, &lit_3802); -#pragma pop +u8 daObjLndRope_c::getPathId() { + return fopAcM_GetParamBit(this, 8, 8); +} /* 80C521F8-80C52820 000078 0628+00 1/1 0/0 0/0 .text create_init__14daObjLndRope_cFv */ void daObjLndRope_c::create_init() { - // NONMATCHING -} + gravity = attr()->mGravity; + dPath* roomPath = dPath_GetRoomPath(getPathId(), fopAcM_GetRoomNo(this)); -/* 80C52820-80C5285C 0006A0 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */ -// cXyz::~cXyz() { -extern "C" void __dt__4cXyzFv() { - // NONMATCHING + dPnt* pathPoints = roomPath->m_points; + cXyz startPoint = pathPoints[0].m_position; + cXyz endPoint = pathPoints[1].m_position; + current.pos = (startPoint + endPoint) * 0.5f; + mPos = endPoint - startPoint; + + if (fabsf(mPos.x) > fabsf(mPos.z)) { + mScale = 1.0f / mPos.x; + mFlag = 1; + } else { + mScale = 1.0f / mPos.z; + mFlag = 0; + } + + shape_angle.y = cM_atan2s(mPos.x, mPos.z); + shape_angle.x = cM_atan2s(-mPos.y, mPos.absXZ()); + f32 cullSizeBoxZ = mPos.absXZ() * 0.5f + 3.0f; + fopAcM_setCullSizeBox(this, -75.0f, -200.0f, -cullSizeBoxZ, 75.0f, 50.0f, cullSizeBoxZ); + + f32 totalLength = mPos.abs(); + const f32 segmentFraction = 1.0f / 14.0f; + mSegmentLength = totalLength * segmentFraction; + cXyz segmentOffset = mPos * (mSegmentLength / totalLength); + + cXyz* ropePosition = mRopeMat.getPos(0); + cXyz* loopPos = &mPositions2[0]; + *ropePosition = startPoint; + ropePosition++; + + for (int i = 1; i < 14; i++) { + *ropePosition = *(ropePosition - 1) + segmentOffset; + *loopPos = *ropePosition; + ropePosition++; + loopPos++; + } + + *ropePosition = endPoint; + setNormalRopePos(); + initBaseMtx(); + + fpc_ProcID* procId = &mProcIds[0]; + ropePosition = mRopeMat.getPos(0) + 1; + const s8* laundryEntry = &l_laundryList[0]; + + for (int i = 1; i < 14; i++) { + if (*laundryEntry == -1) { + *procId = fpcM_ERROR_PROCESS_ID_e; + } else { + *procId = fopAcM_createChild( + PROC_Obj_Laundry, fopAcM_GetID(this), *laundryEntry, ropePosition, + fopAcM_GetRoomNo(this), + &csXyz(0, cLib_targetAngleY(ropePosition, ropePosition + 1) + 0x4000, + -cLib_targetAngleX(ropePosition, ropePosition + 1)), + NULL, -1, 0); + } + + ropePosition++; + procId++; + laundryEntry++; + } } /* 80C5285C-80C52890 0006DC 0034+00 1/1 0/0 0/0 .text initBaseMtx__14daObjLndRope_cFv */ void daObjLndRope_c::initBaseMtx() { - // NONMATCHING + setBaseMtx(); + fopAcM_SetMtx(this, mMtx); } /* 80C52890-80C528E0 000710 0050+00 1/1 0/0 0/0 .text setBaseMtx__14daObjLndRope_cFv */ void daObjLndRope_c::setBaseMtx() { - // NONMATCHING + mDoMtx_trans(mMtx, current.pos.x, current.pos.y, current.pos.z); + mDoMtx_ZXYrotM(mMtx, shape_angle.x, shape_angle.y, 0); } /* ############################################################################################## */ /* 80C53364-80C533A4 000060 0040+00 0/0 0/0 0/0 .rodata ccSphSrc$3837 */ -#pragma push -#pragma force_active on const static dCcD_SrcSph ccSphSrc = { { - {0x0, {{0x0, 0x0, 0x0}, {0x1607a, 0x11}, 0x149}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf + {0x0, {{0x0, 0x0, 0x0}, {0x1607a, 0x11}, 0x149}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf { - {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph - } // mSphAttr + {{0.0f, 0.0f, 0.0f}, 0.0f} // mSph + } // mSphAttr }; -#pragma pop -/* 80C533A4-80C533A8 0000A0 0004+00 0/1 0/0 0/0 .rodata @4012 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4012 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80C533A4, &lit_4012); -#pragma pop +cXyz* daObjLndRope_c::getRopeStartPos() { + return mRopeMat.getPos(0); +} -/* 80C533A8-80C533AC 0000A4 0004+00 0/1 0/0 0/0 .rodata @4013 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4013 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80C533A8, &lit_4013); -#pragma pop +f32 daObjLndRope_c::getStartRate(cXyz* i_ropeSegmentPos) { + if (mFlag != NULL) { + return mScale * (i_ropeSegmentPos->x - getRopeStartPos()->x); + } else { + return mScale * (i_ropeSegmentPos->z - getRopeStartPos()->z); + } +} /* 80C528E0-80C52CC8 000760 03E8+00 2/2 0/0 0/0 .text setNormalRopePos__14daObjLndRope_cFv */ void daObjLndRope_c::setNormalRopePos() { - // NONMATCHING + cXyz* ropePos = mRopeMat.getPos(0) + 1; + cXyz* pos1 = mPositions1; + cXyz* pos2 = mPositions2; + + cXyz posModifier; + cXyz windPow = dKyw_get_AllWind_vecpow(¤t.pos); + + if (cM_rnd() < 0.1f) { + windPow *= mSegmentLength * attr()->field_0x4; + } else { + windPow.zero(); + } + + int i; + for (i = 1; i < 14;) { + ropePos->y = pos2->y; + posModifier = *ropePos - *(ropePos - 1); + posModifier.y += gravity; + posModifier += *pos1; + + if (cM_rnd() < 0.6f) { + posModifier += windPow; + } + + posModifier.normalizeZP(); + *ropePos = *(ropePos - 1) + (posModifier * mSegmentLength); + + i++; + ropePos++; + pos2++; + pos1++; + } + + ropePos = mRopeMat.getPos(0) + 13; + pos1 = &mPositions1[12]; + for (i = 13; i > 0;) { + posModifier = *ropePos - *(ropePos + 1); + posModifier.y += gravity; + posModifier += *pos1; + posModifier.normalizeZP(); + *ropePos = *(ropePos + 1) + (posModifier * mSegmentLength); + + i--; + ropePos--; + pos1--; + } + + ropePos = mRopeMat.getPos(0) + 1; + pos1 = mPositions1; + pos2 = mPositions2; + cXyz* current = mRopeMat.getPos(0); + + for (i = 1; i < 14;) { + f32 adjustedRopeY = current->y + mPos.y * getStartRate(ropePos); + + *pos1 = (*ropePos - *pos2) * attr()->field_0x8; + *pos2 = *ropePos; + ropePos->y += attr()->field_0xc * (adjustedRopeY - ropePos->y); + + i++; + ropePos++; + pos2++; + pos1++; + } + + ropePos = mRopeMat.getPos(0) + 1; + fpc_ProcID* points = mProcIds; + for (i = 1; i < 14;) { + if (*points != -1) { + fopAc_ac_c* actor = (fopAc_ac_c*)fpcM_SearchByID(*points); + if (actor != NULL) { + cXyz* actorPos = fopAcM_GetPosition_p(actor); + csXyz* actorAngle = fopAcM_GetShapeAngle_p(actor); + cXyz temp = *(ropePos + 1) - *ropePos; + *actorPos = *ropePos; + actorAngle->y = cLib_targetAngleY(ropePos, ropePos + 1) + 0x4000; + actorAngle->z = -cLib_targetAngleX(ropePos, ropePos + 1); + } + } + + i++; + ropePos++; + points++; + } } -/* ############################################################################################## */ -/* 80C533AC-80C533B0 0000A8 0004+00 1/1 0/0 0/0 .rodata @4036 */ -SECTION_RODATA static f32 const lit_4036 = 2.0f; -COMPILER_STRIP_GATE(0x80C533AC, &lit_4036); - -/* 80C533B0-80C533B0 0000AC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80C533B0 = "Obj_SRope"; -SECTION_DEAD static char const* const stringBase_80C533BA = "Obj_ItaRope.bti"; -#pragma pop - /* 80C533CC-80C533D0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_laundry_rope__stringBase0; +static char* l_arcName = "Obj_SRope"; -/* 80C52CC8-80C52D70 000B48 00A8+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ -static void createSolidHeap(fopAc_ac_c* param_0) { - // NONMATCHING +int daObjLndRope_c::createHeap() { + ResTIMG* resTimg = (ResTIMG*)dComIfG_getObjectRes(l_arcName, "Obj_ItaRope.bti"); + int result = mRopeMat.init(1, 15, resTimg, 1); + if (result == 0) { + return 0; + } + + f32* ropeSize = mRopeMat.getSize(0); + for (int i = 0; i < 15; i++) { + *ropeSize = 2.0f; + ropeSize++; + } + + return 1; } -/* ############################################################################################## */ -/* 80C533D0-80C533D4 000004 0004+00 1/1 0/0 0/0 .data - * l_color$localstatic3$draw__14daObjLndRope_cFv */ -SECTION_DATA static u8 data_80C533D0[4] = { - 0x14, - 0x0F, - 0x00, - 0xFF, -}; +/* 80C52CC8-80C52D70 000B48 00A8+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */ +static int createSolidHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->createHeap(); +} + +int daObjLndRope_c::draw() { + static _GXColor l_color = {20, 15, 0, 255}; + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + mRopeMat.update(15, l_color, &tevStr); + dComIfGd_set3DlineMat(&mRopeMat); + return 1; +} /* 80C52D70-80C52E04 000BF0 0094+00 1/0 0/0 0/0 .text daObjLndRope_Draw__FP14daObjLndRope_c */ -static void daObjLndRope_Draw(daObjLndRope_c* param_0) { - // NONMATCHING +static int daObjLndRope_Draw(daObjLndRope_c* i_this) { + return i_this->draw(); +} + +int daObjLndRope_c::execute() { + gravity = attr()->mGravity; + setNormalRopePos(); + return 1; } /* 80C52E04-80C52E34 000C84 0030+00 1/0 0/0 0/0 .text daObjLndRope_Execute__FP14daObjLndRope_c */ -static void daObjLndRope_Execute(daObjLndRope_c* param_0) { - // NONMATCHING +static int daObjLndRope_Execute(daObjLndRope_c* i_this) { + return i_this->execute(); } /* 80C52E34-80C52E3C 000CB4 0008+00 1/0 0/0 0/0 .text daObjLndRope_IsDelete__FP14daObjLndRope_c */ -static bool daObjLndRope_IsDelete(daObjLndRope_c* param_0) { - return true; +static int daObjLndRope_IsDelete(daObjLndRope_c* i_this) { + return 1; +} + +daObjLndRope_c::~daObjLndRope_c() { + dComIfG_resDelete(&mPhase, l_arcName); +} + +/* 80C52E3C-80C52F2C 000CBC 00F0+00 1/0 0/0 0/0 .text daObjLndRope_Delete__FP14daObjLndRope_c */ +static int daObjLndRope_Delete(daObjLndRope_c* i_this) { + i_this->~daObjLndRope_c(); + return 1; +} + +int daObjLndRope_c::create() { + fopAcM_SetupActor(this, daObjLndRope_c); + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x6c0)) { + phase = cPhs_ERROR_e; + } else { + create_init(); + } + } + + return phase; +} + +/* 80C52FF8-80C53140 000E78 0148+00 1/0 0/0 0/0 .text daObjLndRope_Create__FP10fopAc_ac_c + */ +static int daObjLndRope_Create(fopAc_ac_c* i_this) { + return ((daObjLndRope_c*)i_this)->create(); } /* ############################################################################################## */ /* 80C533D4-80C533F4 -00001 0020+00 1/0 0/0 0/0 .data l_daObjLndRope_Method */ static actor_method_class l_daObjLndRope_Method = { - (process_method_func)daObjLndRope_Create__FP10fopAc_ac_c, - (process_method_func)daObjLndRope_Delete__FP14daObjLndRope_c, - (process_method_func)daObjLndRope_Execute__FP14daObjLndRope_c, - (process_method_func)daObjLndRope_IsDelete__FP14daObjLndRope_c, - (process_method_func)daObjLndRope_Draw__FP14daObjLndRope_c, + (process_method_func)daObjLndRope_Create, (process_method_func)daObjLndRope_Delete, + (process_method_func)daObjLndRope_Execute, (process_method_func)daObjLndRope_IsDelete, + (process_method_func)daObjLndRope_Draw, }; /* 80C533F4-80C53424 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_LndRope */ extern actor_process_profile_definition g_profile_Obj_LndRope = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_LndRope, // mProcName - &g_fpcLf_Method.base, // sub_method - sizeof(daObjLndRope_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 34, // mPriority - &l_daObjLndRope_Method, // sub_method - 0x00040180, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_LndRope, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjLndRope_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 34, // mPriority + &l_daObjLndRope_Method, // sub_method + 0x00040180, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; - -/* 80C53424-80C53438 000058 0014+00 1/1 0/0 0/0 .data __vt__18mDoExt_3DlineMat_c */ -SECTION_DATA extern void* __vt__18mDoExt_3DlineMat_c[5] = { - (void*)NULL /* RTTI */, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, -}; - -/* 80C53438-80C53444 00006C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80C53444-80C53450 000078 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80C53450-80C5345C 000084 000C+00 3/3 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, -}; - -/* 80C5345C-80C53468 000090 000C+00 2/2 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, -}; - -/* 80C52E3C-80C52F2C 000CBC 00F0+00 1/0 0/0 0/0 .text daObjLndRope_Delete__FP14daObjLndRope_c */ -static void daObjLndRope_Delete(daObjLndRope_c* param_0) { - // NONMATCHING -} - -/* 80C52F2C-80C52FF8 000DAC 00CC+00 2/2 0/0 0/0 .text __dt__8dCcD_SphFv */ -// dCcD_Sph::~dCcD_Sph() { -extern "C" void __dt__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80C52FF8-80C53140 000E78 0148+00 1/0 0/0 0/0 .text daObjLndRope_Create__FP10fopAc_ac_c - */ -static void daObjLndRope_Create(fopAc_ac_c* param_0) { - // NONMATCHING -} - -/* 80C53140-80C53144 000FC0 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -// cXyz::cXyz() { -extern "C" void __ct__4cXyzFv() { - /* empty function */ -} - -/* 80C53144-80C531C8 000FC4 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_SphFv */ -// dCcD_Sph::dCcD_Sph() { -extern "C" void __ct__8dCcD_SphFv() { - // NONMATCHING -} - -/* 80C531C8-80C53210 001048 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ -// cM3dGSph::~cM3dGSph() { -extern "C" void __dt__8cM3dGSphFv() { - // NONMATCHING -} - -/* 80C53210-80C53258 001090 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - -/* 80C53258-80C532B4 0010D8 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */ -// dCcD_GStts::~dCcD_GStts() { -extern "C" void __dt__10dCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C532B4-80C532FC 001134 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ -// cCcD_GStts::~cCcD_GStts() { -extern "C" void __dt__10cCcD_GSttsFv() { - // NONMATCHING -} - -/* 80C533B0-80C533B0 0000AC 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */