Various cleanups and matches (#2530)

This commit is contained in:
hatal175
2025-07-12 23:57:59 +03:00
committed by GitHub
parent cdab0e87a8
commit a193071d9c
20 changed files with 367 additions and 936 deletions
+238 -395
View File
@@ -4,94 +4,14 @@
*/
#include "d/actor/d_a_obj_crope.h"
#include "d/actor/d_a_player.h"
#include "d/d_cc_d.h"
#include "d/d_com_inf_game.h"
#include "d/d_path.h"
#include "SSystem/SComponent/c_math.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void createHeap__12daObjCrope_cFv();
extern "C" static void daObjCrope_createHeap__FP10fopAc_ac_c();
extern "C" void create__12daObjCrope_cFv();
extern "C" void __ct__4cXyzFv();
extern "C" void __dt__8cM3dGSphFv();
extern "C" void __dt__8cM3dGAabFv();
extern "C" void __dt__10dCcD_GSttsFv();
extern "C" void __dt__4cXyzFv();
extern "C" static void daObjCrope_Create__FP10fopAc_ac_c();
extern "C" void __dt__12daObjCrope_cFv();
extern "C" static void daObjCrope_Delete__FP12daObjCrope_c();
extern "C" void setNormalRopePos__12daObjCrope_cFv();
extern "C" void setRideRopePos__12daObjCrope_cFv();
extern "C" void execute__12daObjCrope_cFv();
extern "C" void __dt__8cM3dGLinFv();
extern "C" static void daObjCrope_Execute__FP12daObjCrope_c();
extern "C" void draw__12daObjCrope_cFv();
extern "C" static void daObjCrope_Draw__FP12daObjCrope_c();
extern "C" void __dt__10cCcD_GSttsFv();
//
// External References:
//
extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
extern "C" void init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi();
extern "C" void update__19mDoExt_3DlineMat1_cFifR8_GXColorUsP12dKy_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_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
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_cFPCclP11dRes_info_ci();
extern "C" void dPath_GetRoomPath__Fii();
extern "C" void dKyw_get_AllWind_vec__FP4cXyzP4cXyzPf();
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_SphFRC11dCcD_SrcSph();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_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 atan2sY_XZ__4cXyzCFv();
extern "C" void cM_rnd__Fv();
extern "C" void cM3d_Len2dSqPntAndSegLine__FffffffPfPfPf();
extern "C" void __ct__8cM3dGLinFRC4cXyzRC4cXyz();
extern "C" void SetC__8cM3dGSphFRC4cXyz();
extern "C" void __dl__FPv();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
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];
//
// Declarations:
//
/* ############################################################################################## */
/* 80BCEACC-80BCEAD4 000000 0006+02 6/6 0/0 0/0 .rodata l_arcName */
SECTION_RODATA static char const l_arcName[] = "Crope";
static char const l_arcName[] = "Crope";
/* 80BCCCD8-80BCCD44 000078 006C+00 1/1 0/0 0/0 .text createHeap__12daObjCrope_cFv */
int daObjCrope_c::createHeap() {
@@ -105,109 +25,6 @@ static int daObjCrope_createHeap(fopAc_ac_c* i_this) {
return static_cast<daObjCrope_c*>(i_this)->createHeap();
}
/* ############################################################################################## */
/* 80BCEAD4-80BCEAD8 000008 0004+00 0/1 0/0 0/0 .rodata @3870 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3870 = -5.0f;
COMPILER_STRIP_GATE(0x80BCEAD4, &lit_3870);
#pragma pop
/* 80BCEAD8-80BCEADC 00000C 0004+00 0/1 0/0 0/0 .rodata @3871 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3871 = 0.5f;
COMPILER_STRIP_GATE(0x80BCEAD8, &lit_3871);
#pragma pop
/* 80BCEADC-80BCEAE0 000010 0004+00 0/2 0/0 0/0 .rodata @3872 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3872 = 1.0f;
COMPILER_STRIP_GATE(0x80BCEADC, &lit_3872);
#pragma pop
/* 80BCEAE0-80BCEAE4 000014 0004+00 0/4 0/0 0/0 .rodata @3873 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3873[4] = {
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80BCEAE0, &lit_3873);
#pragma pop
/* 80BCEAE4-80BCEAEC 000018 0008+00 0/3 0/0 0/0 .rodata @3874 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3874[8] = {
0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BCEAE4, &lit_3874);
#pragma pop
/* 80BCEAEC-80BCEAF4 000020 0008+00 0/3 0/0 0/0 .rodata @3875 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3875[8] = {
0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BCEAEC, &lit_3875);
#pragma pop
/* 80BCEAF4-80BCEAFC 000028 0008+00 0/3 0/0 0/0 .rodata @3876 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3876[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BCEAF4, &lit_3876);
#pragma pop
/* 80BCEAFC-80BCEB00 000030 0004+00 0/1 0/0 0/0 .rodata @3877 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3877 = 3.0f;
COMPILER_STRIP_GATE(0x80BCEAFC, &lit_3877);
#pragma pop
/* 80BCEB00-80BCEB04 000034 0004+00 0/1 0/0 0/0 .rodata @3878 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3878 = 75.0f;
COMPILER_STRIP_GATE(0x80BCEB00, &lit_3878);
#pragma pop
/* 80BCEB04-80BCEB08 000038 0004+00 0/1 0/0 0/0 .rodata @3879 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3879 = 50.0f;
COMPILER_STRIP_GATE(0x80BCEB04, &lit_3879);
#pragma pop
/* 80BCEB08-80BCEB0C 00003C 0004+00 0/1 0/0 0/0 .rodata @3880 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3880 = -75.0f;
COMPILER_STRIP_GATE(0x80BCEB08, &lit_3880);
#pragma pop
/* 80BCEB0C-80BCEB10 000040 0004+00 0/1 0/0 0/0 .rodata @3881 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3881 = -200.0f;
COMPILER_STRIP_GATE(0x80BCEB0C, &lit_3881);
#pragma pop
/* 80BCEB10-80BCEB14 000044 0004+00 0/1 0/0 0/0 .rodata @3882 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3882 = 1.0f / 99.0f;
COMPILER_STRIP_GATE(0x80BCEB10, &lit_3882);
#pragma pop
/* 80BCEB3C-80BCEB7C 000000 0040+00 1/1 0/0 0/0 .data l_sphSrc */
static dCcD_SrcSph l_sphSrc = {
{
@@ -222,80 +39,13 @@ static dCcD_SrcSph l_sphSrc = {
};
/* 80BCEB7C-80BCEB80 000040 0004+00 1/1 0/0 0/0 .data color$4550 */
SECTION_DATA static u8 color[4] = {
static GXColor color = {
0x00,
0x00,
0x00,
0xFF,
};
/* 80BCEB80-80BCEBA0 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCrope_Method */
static actor_method_class l_daObjCrope_Method = {
(process_method_func)daObjCrope_Create__FP10fopAc_ac_c,
(process_method_func)daObjCrope_Delete__FP12daObjCrope_c,
(process_method_func)daObjCrope_Execute__FP12daObjCrope_c,
0,
(process_method_func)daObjCrope_Draw__FP12daObjCrope_c,
};
/* 80BCEBA0-80BCEBD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Crope */
extern actor_process_profile_definition g_profile_Obj_Crope = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_Crope, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjCrope_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
248, // mPriority
&l_daObjCrope_Method, // sub_method
0x00040100, // mStatus
fopAc_ENV_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80BCEBD0-80BCEBDC 000094 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGLin */
SECTION_DATA extern void* __vt__8cM3dGLin[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8cM3dGLinFv,
};
/* 80BCEBDC-80BCEBE8 0000A0 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,
};
/* 80BCEBE8-80BCEBF4 0000AC 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,
};
/* 80BCEBF4-80BCEC08 0000B8 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,
};
/* 80BCEC08-80BCEC14 0000CC 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,
};
/* 80BCEC14-80BCEC20 0000D8 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,
};
/* 80BCCD64-80BCD3D8 000104 0674+00 1/1 0/0 0/0 .text create__12daObjCrope_cFv */
int daObjCrope_c::create() {
fopAcM_SetupActor(this, daObjCrope_c);
@@ -363,45 +113,14 @@ int daObjCrope_c::create() {
return rv;
}
/* 80BCD3D8-80BCD3DC 000778 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
// cXyz::cXyz() {
extern "C" void __ct__4cXyzFv() {
/* empty function */
}
/* 80BCD3DC-80BCD424 00077C 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
// cM3dGSph::~cM3dGSph() {
extern "C" void __dt__8cM3dGSphFv() {
// NONMATCHING
}
/* 80BCD424-80BCD46C 0007C4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
// cM3dGAab::~cM3dGAab() {
extern "C" void __dt__8cM3dGAabFv() {
// NONMATCHING
}
/* 80BCD46C-80BCD4C8 00080C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
// dCcD_GStts::~dCcD_GStts() {
extern "C" void __dt__10dCcD_GSttsFv() {
// NONMATCHING
}
/* 80BCD4C8-80BCD504 000868 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */
// cXyz::~cXyz() {
extern "C" void __dt__4cXyzFv() {
// NONMATCHING
}
/* 80BCD504-80BCD524 0008A4 0020+00 1/0 0/0 0/0 .text daObjCrope_Create__FP10fopAc_ac_c
*/
static int daObjCrope_Create(fopAc_ac_c* i_this) {
fopAcM_RegisterCreateID(daObjCrope_c, i_this, "Obj_Crope");
return static_cast<daObjCrope_c*>(i_this)->create();
}
/* 80BCD524-80BCD69C 0008C4 0178+00 1/1 0/0 0/0 .text __dt__12daObjCrope_cFv */
// NONMATCHING
daObjCrope_c::~daObjCrope_c() {
dComIfG_resDelete(&mPhase, l_arcName);
}
@@ -409,58 +128,18 @@ daObjCrope_c::~daObjCrope_c() {
/* 80BCD69C-80BCD6C4 000A3C 0028+00 1/0 0/0 0/0 .text daObjCrope_Delete__FP12daObjCrope_c
*/
static int daObjCrope_Delete(daObjCrope_c* i_this) {
fopAcM_GetID(i_this);
fopAcM_RegisterDeleteID(i_this, "Obj_Crope");
i_this->~daObjCrope_c();
return 1;
}
/* ############################################################################################## */
/* 80BCEB14-80BCEB18 000048 0004+00 0/1 0/0 0/0 .rodata @4115 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4115 = 1.0f / 10.0f;
COMPILER_STRIP_GATE(0x80BCEB14, &lit_4115);
#pragma pop
/* 80BCEB18-80BCEB1C 00004C 0004+00 0/1 0/0 0/0 .rodata @4116 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4116 = 1.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BCEB18, &lit_4116);
#pragma pop
/* 80BCEB1C-80BCEB20 000050 0004+00 0/1 0/0 0/0 .rodata @4117 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4117 = 3.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BCEB1C, &lit_4117);
#pragma pop
/* 80BCEB20-80BCEB24 000054 0004+00 0/2 0/0 0/0 .rodata @4118 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4118 = 49.0f / 100.0f;
COMPILER_STRIP_GATE(0x80BCEB20, &lit_4118);
#pragma pop
/* 80BCEB24-80BCEB28 000058 0004+00 0/1 0/0 0/0 .rodata @4119 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4119 = 4.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BCEB24, &lit_4119);
#pragma pop
/* 80BCD6C4-80BCD9EC 000A64 0328+00 3/3 0/0 0/0 .text setNormalRopePos__12daObjCrope_cFv
*/
// NONMATCHING - Horrible regalloc
void daObjCrope_c::setNormalRopePos() {
cXyz* pdVar4;
cXyz* pVVar5;
int i;
cXyz* pVVar3;
cXyz* pcVar8;
cXyz* ptr740;
cXyz* this_00;
cXyz* this_01;
cXyz* pVVar5;
cXyz* pdVar4;
pVVar3 = mLineMat.getPos(0) + 1;
pVVar5 = field_0x740;
pdVar4 = field_0xbd8;
@@ -468,94 +147,234 @@ void daObjCrope_c::setNormalRopePos() {
cXyz cStack_40;
cXyz cStack_4c;
f32 local_c8;
int i;
cXyz* pos;
cXyz* iVar6;
f32 dVar9;
dKyw_get_AllWind_vec(&current.pos, &cStack_4c, &local_c8);
if (cM_rnd() < 0.1f) {
cStack_4c *= local_c8 * field_0x720 * 0.2f;
} else {
cStack_4c *= 0.0f;
}
for (i = 1; i < 99; i++) {
for (i = 1; i < 99; i++, pVVar3++, pdVar4++, pVVar5++) {
pVVar3[0].y = pdVar4[0].y;
cStack_34 = pVVar3[0] - pVVar3[-1];
cStack_34.y += maxFallSpeed;
cStack_34.y += gravity;
cStack_34 += pVVar5[0];
if (cM_rnd() < 0.6f) {
cStack_34 += cStack_4c;
}
cStack_34.normalizeZP();
pVVar3[0] = pVVar3[-1] + cStack_34 * field_0x720;
pVVar3++;
pdVar4++;
pVVar5++;
}
pcVar8 = mLineMat.getPos(0) + 98;
ptr740 = field_0x740 + 97;
for (i = 98; i > 0; i--) {
cStack_34 = pcVar8[0] - pcVar8[1];
pVVar3 = mLineMat.getPos(0) + 98;
pVVar5 = field_0x740 + 97;
for (i = 98; i > 0; i--, pVVar3--, pVVar5--) {
cStack_34 = pVVar3[0] - pVVar3[1];
cStack_34.y += gravity;
cStack_34 += ptr740[0];
cStack_34 += pVVar5[0];
cStack_34.normalizeZP();
pcVar8[0] = pcVar8[1] + cStack_34 * field_0x720;
pcVar8--;
ptr740--;
pVVar3[0] = pVVar3[1] + cStack_34 * field_0x720;
}
cXyz* pos = mLineMat.getPos(0);
cXyz* this_02 = pos + 1;
this_01 = field_0x740;
this_00 = field_0xbd8;
cXyz* iVar6 = mLineMat.getPos(0);
for (i = 1; i < 99; i++) {
f32 dVar9 = iVar6->y + (mRopeVec.y * getStartRate(this_02));
this_01[0] = (this_02[0] - this_00[0]) * 0.49f;
this_00[0] = this_02[0];
this_02[0].y += (dVar9 - this_02[0].y) * 0.8f;
this_02++;
this_00++;
this_01++;
pVVar3 = mLineMat.getPos(0) + 1;
pVVar5 = field_0x740;
pdVar4 = field_0xbd8;
iVar6 = mLineMat.getPos(0);
for (i = 1; i < 99; i++, pVVar3++, pdVar4++, pVVar5++) {
dVar9 = iVar6->y + (mRopeVec.y * getStartRate(pVVar3));
pVVar5[0] = (pVVar3[0] - pdVar4[0]) * 0.49f;
pdVar4[0] = pVVar3[0];
pVVar3[0].y += (dVar9 - pVVar3[0].y) * 0.8f;
}
}
/* ############################################################################################## */
/* 80BCEB28-80BCEB2C 00005C 0004+00 1/2 0/0 0/0 .rodata @4407 */
SECTION_RODATA static f32 const lit_4407 = 5.0f;
COMPILER_STRIP_GATE(0x80BCEB28, &lit_4407);
/* 80BCEB2C-80BCEB34 000060 0004+04 0/1 0/0 0/0 .rodata @4408 */
#pragma push
#pragma force_active on
SECTION_RODATA static u32 const lit_4408[1 + 1 /* padding */] = {
0x40A00001,
/* padding */
0x00000000,
};
COMPILER_STRIP_GATE(0x80BCEB2C, &lit_4408);
#pragma pop
/* 80BCEB34-80BCEB3C 000068 0008+00 0/1 0/0 0/0 .rodata @4410 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_4410[8] = {
0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BCEB34, &lit_4410);
#pragma pop
/* 80BCD9EC-80BCE4FC 000D8C 0B10+00 1/1 0/0 0/0 .text setRideRopePos__12daObjCrope_cFv */
// NONMATCHING - reg alloc
void daObjCrope_c::setRideRopePos() {
// NONMATCHING
daPy_py_c* player = daPy_getLinkPlayerActorClass();
cXyz* pcVar15;
cXyz* pcVar13;
cXyz* local_120;
cXyz* local_124;
f32 dVar23;
f32 fVar1;
f32 fVar2;
f32 fVar3;
f32 fVar4;
f32 fVar5;
f32 fVar6;
f32 fVar7;
f32 fVar8;
f32 fVar14;
int local_150;
int local_154;
int local_158;
f32 dVar25;
cXyz* pcVar12;
f32 dVar20;
f32 dVar21;
f32 dVar22;
cXyz* local_160;
cXyz* local_164;
f32 dVar20a;
int i;
if (mOutFlg) {
setNormalRopePos();
mOutFlg = 0;
return;
}
pcVar15 = mLineMat.getPos(0);
pcVar13 = mLineMat.getPos(0) + 99;
cXyz local_54;
cXyz local_60;
if (mFrontJoint != -1) {
if (mFrontJoint == -2) {
local_54 = player->current.pos;
} else {
mDoMtx_multVecZero(player->getModelJointMtx(mFrontJoint), &local_54);
local_54.y -= 5.0f;
}
} else {
local_54 = *pcVar15;
}
if (mBackJoint != -1) {
mDoMtx_multVecZero(player->getModelJointMtx(mBackJoint), &local_60);
local_60.y -= 5.0f;
} else {
local_60 = *pcVar15;
}
fVar1 = local_54.x - pcVar15->x;
fVar2 = local_54.z - pcVar15->z;
fVar3 = pcVar13->x - local_54.x;
fVar4 = pcVar13->z - local_54.z;
fVar5 = local_60.x - pcVar15->x;
fVar6 = local_60.z - pcVar15->z;
fVar7 = pcVar13->x - local_60.x;
fVar8 = pcVar13->z - local_60.z;
dVar20 = pcVar15->abs(local_54);
dVar21 = pcVar15->abs(local_60);
dVar22 = pcVar13->abs(local_54);
dVar23 = pcVar13->abs(local_60);
if ((mFrontJoint == -1 ||
fVar1 * mRopeVec.x + fVar2 * mRopeVec.z <= 0.0f) ||
fVar3 * mRopeVec.x + fVar4 * mRopeVec.z <= 0.0f)
{
local_120 = &local_60;
local_124 = &local_60;
dVar20 = dVar21;
dVar22 = dVar23;
} else if ((mBackJoint == -1 ||
fVar5 * mRopeVec.x + fVar6 * mRopeVec.z <=
0.0f) ||
fVar7 * mRopeVec.x + fVar8 * mRopeVec.z <= 0.0f)
{
local_120 = &local_54;
local_124 = &local_54;
} else if (dVar20 > dVar21) {
local_120 = &local_60;
local_124 = &local_54;
dVar20 = dVar21;
} else {
local_120 = &local_54;
local_124 = &local_60;
dVar22 = dVar23;
}
cXyz cStack_6c = *local_120 - *pcVar15;
cXyz cStack_78 = *local_124 - *pcVar13;
fVar14 = 1.0f / field_0x720;
local_150 = dVar22 * fVar14;
if (local_150 > 0x61) {
local_150 = 0x61;
}
cStack_78.normalizeZP();
pcVar12 = pcVar13 - 1;
for (i = 0; i < local_150; i++, pcVar12--) {
pcVar12[0] = pcVar12[1] + cStack_78 * field_0x720;
}
*pcVar12 = *local_124;
local_154 = dVar20 * fVar14;
if (local_154 > 0x61) {
local_154 = 0x61;
}
cStack_6c.normalizeZP();
pcVar12 = pcVar15 + 1;
for (i = 0; i < local_154; i++, pcVar12++) {
pcVar12[0] = pcVar12[-1] + cStack_6c * field_0x720;
}
*pcVar12 = *local_120;
local_158 = (0x60 - local_154) - local_150;
cXyz cStack_84 = *local_124 - *local_120;
dVar25 = cStack_84.abs() / (local_158 + 1);
cStack_84.normalizeZP();
pcVar12++;
for (i = 0; i < local_158; i++, pcVar12++) {
pcVar12[0] = pcVar12[-1] + cStack_84 * dVar25;
}
pcVar12 = mLineMat.getPos(0) + 1;
local_160 = field_0xbd8;
local_164 = field_0x740;
cXyz cStack_90;
for (i = 1; i < 0x63; i++, pcVar12++, local_160++, local_164++) {
dVar20a = pcVar15->y + mRopeVec.y * getStartRate(pcVar12);
cStack_90 = *pcVar12;
cStack_90.y =
pcVar12[0].y + (dVar20a - pcVar12[0].y) * 5.0000005f;
*local_164 = (cStack_90 - *local_160) * 0.49f;
*local_160 = cStack_90;
}
}
/* 80BCE4FC-80BCE954 00189C 0458+00 1/1 0/0 0/0 .text execute__12daObjCrope_cFv */
int daObjCrope_c::execute() {
// NONMATCHING
}
/* 80BCE954-80BCE99C 001CF4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGLinFv */
// cM3dGLin::~cM3dGLin() {
extern "C" void __dt__8cM3dGLinFv() {
// NONMATCHING
int i;
cXyz* this_00;
cXyz* pcVar7;
daPy_py_c* player = daPy_getLinkPlayerActorClass();
if (mFrontJoint == -1 && mBackJoint == -1) {
setNormalRopePos();
this_00 = mLineMat.getPos(0);
pcVar7 = mLineMat.getPos(0) + 99;
cM3dGLin acStack_7c(*this_00, *pcVar7);
f32 dummyFloat;
if (cM3d_Len2dSqPntAndSegLine(player->current.pos.x, player->current.pos.z, this_00->x,
this_00->z, pcVar7->x, pcVar7->z, &mPlayerNearPos.x,
&mPlayerNearPos.z, &dummyFloat) != 0)
{
cXyz* pPos = this_00 + 1;
for (i = 1; i < 99; i++, pPos++) {
f32 diffx = mPlayerNearPos.x - pPos->x;
f32 diffz = mPlayerNearPos.z - pPos->z;
if (diffx * mRopeVec.x + diffz * mRopeVec.z < 0.0f) {
break;
}
}
f32 dVar9 = (mPlayerNearPos.absXZ(pPos[-1]) / pPos[0].absXZ(pPos[-1]));
mPlayerNearPos = pPos[-1] + (pPos[0] - pPos[-1]) * dVar9;
} else {
if (this_00->abs2(player->current.pos) > pcVar7->abs2(player->current.pos)) {
mPlayerNearPos = *pcVar7;
} else {
mPlayerNearPos = *this_00;
}
}
mCollider.SetC(mPlayerNearPos);
if (mCoCancelTimer != 0) {
mCoCancelTimer--;
} else {
dComIfG_Ccsp()->Set(&mCollider);
}
} else {
setRideRopePos();
}
return 1;
}
/* 80BCE99C-80BCE9BC 001D3C 0020+00 1/0 0/0 0/0 .text daObjCrope_Execute__FP12daObjCrope_c */
@@ -565,7 +384,10 @@ static int daObjCrope_Execute(daObjCrope_c* i_this) {
/* 80BCE9BC-80BCEA5C 001D5C 00A0+00 1/1 0/0 0/0 .text draw__12daObjCrope_cFv */
int daObjCrope_c::draw() {
// NONMATCHING
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
mLineMat.update(100, 5.0f, color, 0, &tevStr);
dComIfGd_set3DlineMat(&mLineMat);
return 1;
}
/* 80BCEA5C-80BCEA7C 001DFC 0020+00 1/0 0/0 0/0 .text daObjCrope_Draw__FP12daObjCrope_c
@@ -574,8 +396,29 @@ static int daObjCrope_Draw(daObjCrope_c* i_this) {
return i_this->draw();
}
/* 80BCEA7C-80BCEAC4 001E1C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
// cCcD_GStts::~cCcD_GStts() {
extern "C" void __dt__10cCcD_GSttsFv() {
// NONMATCHING
}
/* 80BCEB80-80BCEBA0 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCrope_Method */
static actor_method_class l_daObjCrope_Method = {
(process_method_func)daObjCrope_Create,
(process_method_func)daObjCrope_Delete,
(process_method_func)daObjCrope_Execute,
NULL,
(process_method_func)daObjCrope_Draw,
};
/* 80BCEBA0-80BCEBD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Crope */
extern actor_process_profile_definition g_profile_Obj_Crope = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_Crope, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjCrope_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
248, // mPriority
&l_daObjCrope_Method, // sub_method
0x00040100, // mStatus
fopAc_ENV_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};