mirror of https://github.com/zeldaret/tp.git
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
This commit is contained in:
parent
7b550fafb5
commit
2835276bfe
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<daObjLndRope_c*>(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 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue