mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-09 14:05:28 -04:00
d_a_obj_rflw matching (#908)
* initial work on d_a_obj_rflw * 50% matching in .text * d_a_obj_rflw 100% for retail and demo * removed goto from CreateHeap * cleaning up d_a_obj_rflw * Update d_a_obj_rflw.cpp Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com> --------- Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
This commit is contained in:
+1
-1
@@ -1741,7 +1741,7 @@ config.libs = [
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pbka"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pfall"),
|
||||
ActorRel(NonMatching, "d_a_obj_plant"),
|
||||
ActorRel(NonMatching, "d_a_obj_rflw"),
|
||||
ActorRel(Matching, "d_a_obj_rflw"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_rforce"),
|
||||
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_smplbg"),
|
||||
ActorRel(NonMatching, "d_a_obj_tapestry"),
|
||||
|
||||
@@ -1,21 +1,31 @@
|
||||
#ifndef D_A_OBJ_RFLW_H
|
||||
#define D_A_OBJ_RFLW_H
|
||||
|
||||
#include "d/d_cc_d.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
|
||||
class daObjRflw_c : public fopAc_ac_c {
|
||||
public:
|
||||
inline cPhs_State _create();
|
||||
inline bool _delete();
|
||||
inline bool _draw();
|
||||
inline bool _execute();
|
||||
inline BOOL _delete();
|
||||
inline BOOL _draw();
|
||||
inline BOOL _execute();
|
||||
|
||||
void CreateHeap();
|
||||
BOOL CreateHeap();
|
||||
void CreateInit();
|
||||
void set_mtx();
|
||||
|
||||
public:
|
||||
/* Place member variables here */
|
||||
};
|
||||
/* 0x290 */ request_of_phase_process_class mPhs;
|
||||
/* 0x298 */ J3DModel* mpModel;
|
||||
/* 0x29C */ dCcD_Stts mStts;
|
||||
/* 0x2D8 */ dCcD_Cyl mCyl;
|
||||
/* 0x408 */ s16 m408;
|
||||
/* 0x40A */ s16 m40A;
|
||||
/* 0x40C */ s16 m40C;
|
||||
/* 0x40E */ s16 m40E;
|
||||
/* 0x410 */ bool m410;
|
||||
/* 0x411 */ u8 m411[0x414 - 0x411];
|
||||
}; // Size: 0x414
|
||||
|
||||
#endif /* D_A_OBJ_RFLW_H */
|
||||
|
||||
+130
-16
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
||||
#include "d/actor/d_a_obj_rflw.h"
|
||||
#include "d/res/res_rflw.h"
|
||||
#include "f_op/f_op_actor_mng.h"
|
||||
#include "m_Do/m_Do_ext.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/d_priority.h"
|
||||
@@ -40,50 +42,162 @@ static dCcD_SrcCyl l_cyl_src = {
|
||||
}},
|
||||
};
|
||||
|
||||
static BOOL nodeCallBack(J3DNode*, int);
|
||||
|
||||
/* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
return static_cast<daObjRflw_c*>(i_this)->CreateHeap();
|
||||
}
|
||||
|
||||
/* 00000098-000001E0 .text CreateHeap__11daObjRflw_cFv */
|
||||
void daObjRflw_c::CreateHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjRflw_c::CreateHeap() {
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Rflw", RFLW_BDL_PHANA);
|
||||
JUT_ASSERT(0xAA, modelData != NULL);
|
||||
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
|
||||
if (mpModel != NULL) {
|
||||
JUTNameTab* name_table = mpModel->getModelData()->getJointName();
|
||||
for (u16 i = 0; i < mpModel->getModelData()->getJointNum(); i++) {
|
||||
if (strcmp("joint2", name_table->getName(i)) == 0) {
|
||||
mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mpModel->setUserArea(reinterpret_cast<u32>(this));
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000001E0-00000284 .text CreateInit__11daObjRflw_cFv */
|
||||
void daObjRflw_c::CreateInit() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, -600.0f, -0.0f, -600.0f, 600.0f, 900.0f, 600.0f);
|
||||
fopAcM_setCullSizeFar(this, 1.0f);
|
||||
mStts.Init(0xFF, 0xFF, this);
|
||||
mCyl.Set(l_cyl_src);
|
||||
mCyl.SetStts(&mStts);
|
||||
m408 = 0;
|
||||
set_mtx();
|
||||
}
|
||||
|
||||
/* 00000284-00000368 .text nodeCallBack__FP7J3DNodei */
|
||||
static BOOL nodeCallBack(J3DNode*, int) {
|
||||
/* Nonmatching */
|
||||
static BOOL nodeCallBack(J3DNode* node, int calcTiming) {
|
||||
if (calcTiming == J3DNodeCBCalcTiming_In) {
|
||||
J3DJoint* joint = (J3DJoint*)node;
|
||||
s32 jointNo = joint->getJntNo();
|
||||
J3DModel* model = j3dSys.getModel();
|
||||
daObjRflw_c* i_this = (daObjRflw_c*)model->getUserArea();
|
||||
if (i_this != NULL) {
|
||||
MTXCopy(model->getAnmMtx(jointNo), *calc_mtx);
|
||||
cMtx_XrotM(*calc_mtx, i_this->m40E);
|
||||
cMtx_YrotM(*calc_mtx, i_this->m408);
|
||||
cMtx_XrotM(*calc_mtx, -i_this->m40E);
|
||||
model->setAnmMtx(jointNo, *calc_mtx);
|
||||
MTXCopy(*calc_mtx, J3DSys::mCurrentMtx);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000368-000003E8 .text set_mtx__11daObjRflw_cFv */
|
||||
void daObjRflw_c::set_mtx() {
|
||||
/* Nonmatching */
|
||||
mpModel->setBaseScale(scale);
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::YrotM(current.angle.y);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
inline cPhs_State daObjRflw_c::_create() {
|
||||
cPhs_State rt = cPhs_ERROR_e;
|
||||
fopAcM_SetupActor(this, daObjRflw_c);
|
||||
|
||||
rt = dComIfG_resLoad(&mPhs, "Rflw");
|
||||
|
||||
if (rt == cPhs_COMPLEATE_e) {
|
||||
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xC60)) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
CreateInit();
|
||||
}
|
||||
m410 = false;
|
||||
return rt;
|
||||
}
|
||||
|
||||
inline BOOL daObjRflw_c::_delete() {
|
||||
dComIfG_resDeleteDemo(&mPhs, "Rflw");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inline BOOL daObjRflw_c::_draw() {
|
||||
dKy_tevstr_c* p_tev_str;
|
||||
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, p_tev_str = &tevStr); // fakematch
|
||||
g_env_light.setLightTevColorType(mpModel, p_tev_str);
|
||||
dComIfGd_setListBG();
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
dComIfGd_setList();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
inline BOOL daObjRflw_c::_execute() {
|
||||
mCyl.SetC(current.pos);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
if ((m40C > 0x38 || m410 == false) && mCyl.ChkCoHit()) {
|
||||
fopAc_ac_c* actor = mCyl.GetCoHitAc();
|
||||
cXyz dir_to_obj = current.pos - actor->current.pos;
|
||||
s16 dir_angle = cM_atan2s(dir_to_obj.x, dir_to_obj.z);
|
||||
m40E = dir_angle + -0x4000;
|
||||
m410 = true;
|
||||
m40C = 0;
|
||||
m40A = 0;
|
||||
fopAcM_seStart(this, JA_SE_OBJ_TREE_SWING_S, 0);
|
||||
}
|
||||
if (m410 != false) {
|
||||
m40C++;
|
||||
s32 temp4 = m40C;
|
||||
if (temp4 < 8) {
|
||||
s32 temp5 = ((float)(0x100 - temp4) * cM_ssin(m40A) * 4.0f);
|
||||
m408 = temp5;
|
||||
m40A += 0x1000;
|
||||
} else {
|
||||
s32 temp5 = ((float)(0x100 - temp4) * cM_ssin(m40A) * 2.0f);
|
||||
m408 = temp5;
|
||||
m40A += 0x800;
|
||||
}
|
||||
if (m40C > 0x100) {
|
||||
m410 = false;
|
||||
m40C = 0;
|
||||
m408 = 0;
|
||||
}
|
||||
}
|
||||
set_mtx();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000003E8-0000051C .text daObjRflw_Create__FPv */
|
||||
static cPhs_State daObjRflw_Create(void*) {
|
||||
/* Nonmatching */
|
||||
static cPhs_State daObjRflw_Create(void* i_this) {
|
||||
daObjRflw_c* rflw = static_cast<daObjRflw_c*>(i_this);
|
||||
return rflw->_create();
|
||||
}
|
||||
|
||||
/* 000006D4-00000704 .text daObjRflw_Delete__FPv */
|
||||
static BOOL daObjRflw_Delete(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daObjRflw_Delete(void* i_this) {
|
||||
daObjRflw_c* rflw = static_cast<daObjRflw_c*>(i_this);
|
||||
return rflw->_delete();
|
||||
}
|
||||
|
||||
/* 00000704-000007A8 .text daObjRflw_Draw__FPv */
|
||||
static BOOL daObjRflw_Draw(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daObjRflw_Draw(void* i_this) {
|
||||
daObjRflw_c* rflw = static_cast<daObjRflw_c*>(i_this);
|
||||
return rflw->_draw();
|
||||
}
|
||||
|
||||
/* 000007A8-000009EC .text daObjRflw_Execute__FPv */
|
||||
static BOOL daObjRflw_Execute(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daObjRflw_Execute(void* i_this) {
|
||||
return ((daObjRflw_c*)i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 000009EC-000009F4 .text daObjRflw_IsDelete__FPv */
|
||||
|
||||
Reference in New Issue
Block a user