daObj_Roten_c OK, daNpcRoten_c Almost Matching (#618)

* Roten Work

- daNpcRoten_c almost matching
- daObj_Roten_c OK

I don't think these are actually related but they had the same name so I put them together

* Minor Cleanup
This commit is contained in:
SuperDude88
2024-04-24 14:28:38 -04:00
committed by GitHub
parent 2d8e6a5c76
commit 899ae98e7d
9 changed files with 2943 additions and 172 deletions
+2 -2
View File
@@ -1283,7 +1283,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_pirateship"),
ActorRel(NonMatching, "d_a_obj_quake"),
ActorRel(NonMatching, "d_a_obj_rcloud"),
ActorRel(NonMatching, "d_a_obj_roten"),
ActorRel(Matching, "d_a_obj_roten", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_obj_shelf"),
ActorRel(NonMatching, "d_a_obj_shmrgrd"),
ActorRel(NonMatching, "d_a_obj_swpush"),
@@ -1491,7 +1491,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_npc_pf1"),
ActorRel(NonMatching, "d_a_npc_photo"),
ActorRel(NonMatching, "d_a_npc_pm1"),
ActorRel(NonMatching, "d_a_npc_roten"),
ActorRel(NonMatching, "d_a_npc_roten", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(NonMatching, "d_a_npc_rsh1"),
ActorRel(NonMatching, "d_a_npc_sarace"),
ActorRel(NonMatching, "d_a_npc_sv"),
+105 -35
View File
@@ -2,36 +2,47 @@
#define D_A_NPC_ROTEN_H
#include "f_op/f_op_actor.h"
#include "d/d_npc.h"
struct sRotenAnmDat {
};
/* 0x00 */ u8 field_0x00;
/* 0x01 */ u8 field_0x01;
/* 0x02 */ u8 field_0x02;
}; // Size: 0x03
class daNpcRoten_c : public fopAc_ac_c {
class daNpcRoten_c : public fopNpc_npc_c {
public:
void getPhaseP() {}
void getWindVec() {}
void setNpcNo(unsigned char) {}
void setResFlag(unsigned char) {}
enum Prm_e {
PRM_RAIL_ID_W = 0x08,
PRM_RAIL_ID_S = 0x10,
PRM_NPC_NO_W = 0x08,
PRM_NPC_NO_S = 0x18,
};
request_of_phase_process_class* getPhaseP() { return &mPhs; }
cXyz getWindVec() { return field_0x720; }
void setNpcNo(u8 npcNo) { mNpcNo = npcNo; }
void setResFlag(u8 flag) { field_0x9BC = flag; }
daNpcRoten_c();
s32 _create();
void createHeap();
void createInit();
BOOL _delete();
BOOL _draw();
BOOL _execute();
void executeCommon();
void executeSetMode(unsigned char);
void executeWaitInit();
BOOL createHeap();
s32 createInit();
bool _delete();
bool _draw();
bool _execute();
bool executeCommon();
void executeSetMode(u8);
s32 executeWaitInit();
void executeWait();
void executeTalkInit();
s32 executeTalkInit();
void executeTalk();
void executeWalkInit();
s32 executeWalkInit();
void executeWalk();
void executeTurnInit();
s32 executeTurnInit();
void executeTurn();
void executeWindInit();
s32 executeWindInit();
void executeWind();
void checkOrder();
void eventOrder();
@@ -39,37 +50,96 @@ public:
void privateCut();
void eventInit();
void eventMesSetInit(int);
void eventMesSet();
bool eventMesSet();
void eventSetItemInit();
void eventSetItem();
bool eventSetItem();
void eventClrItemInit();
void eventGetItemInit(int);
void eventSetAngleInit();
void eventOnPlrInit();
void eventOffPlrInit();
void next_msgStatus(unsigned long*);
void getMsg();
void setMessage(unsigned long);
u16 next_msgStatus(u32*);
u32 getMsg();
void setMessage(u32);
void setAnmFromMsgTag();
void getPrmNpcNo();
void getPrmRailID();
u8 getPrmNpcNo();
u8 getPrmRailID();
void setMtx();
void chkAttention();
void lookBack();
void initTexPatternAnm(bool);
BOOL initTexPatternAnm(bool);
void playTexPatternAnm();
void playAnm();
void setAnm(unsigned char, int, float);
void setAnmTbl(sRotenAnmDat*);
void isHaitatuItem(unsigned char);
void isKoukanItem(unsigned char);
void isGetMap(unsigned char);
void XyEventCB(int);
void setAnm(u8, int, f32);
bool setAnmTbl(sRotenAnmDat*);
BOOL isHaitatuItem(u8);
BOOL isKoukanItem(u8);
BOOL isGetMap(u8);
s16 XyEventCB(int);
void setCollisionB();
void setCollisionH();
public:
/* Place member variables here */
};
typedef s32(daNpcRoten_c::*InitFunc_t)();
typedef void(daNpcRoten_c::*MoveFunc_t)();
/* 0x6C4 */ request_of_phase_process_class mPhs;
/* 0x6CC */ request_of_phase_process_class mPhs2;
/* 0x6D4 */ J3DModel* field_0x6D4;
/* 0x6D8 */ mDoExt_McaMorf* field_0x6D8;
/* 0x6DC */ J3DAnmTexPattern* m_head_tex_pattern;
/* 0x6E0 */ mDoExt_btpAnm mBtpAnm;
/* 0x6F4 */ u32 mShadowId;
/* 0x6F8 */ u32 field_0x6F8;
/* 0x6FC */ uint field_0x6FC;
/* 0x700 */ dNpc_PathRun_c mPathRun;
/* 0x708 */ cXyz field_0x708;
/* 0x714 */ cXyz field_0x714;
/* 0x720 */ cXyz field_0x720;
/* 0x72C */ dCcD_Cyl mCyl2;
/* 0x85C */ dCcD_Sph mSph;
/* 0x988 */ sRotenAnmDat* field_0x988;
/* 0x98C */ u32* field_0x98C;
/* 0x990 */ f32 field_0x990;
/* 0x994 */ f32 field_0x994;
/* 0x998 */ s32 field_0x998;
/* 0x99C */ bool field_0x99C;
/* 0x99E */ s16 field_0x99E;
/* 0x9A0 */ s16 field_0x9A0;
/* 0x9A2 */ s16 field_0x9A2;
/* 0x9A4 */ s16 field_0x9A4;
/* 0x9A6 */ s16 field_0x9A6;
/* 0x9A8 */ s16 field_0x9A8;
/* 0x9AA */ s16 field_0x9AA;
/* 0x9AC */ s16 field_0x9AC;
/* 0x9AE */ s16 field_0x9AE;
/* 0x9B0 */ s16 field_0x9B0;
/* 0x9B2 */ u16 field_0x9B2;
/* 0x9B4 */ bool field_0x9B4;
/* 0x9B5 */ u8 field_0x9B5;
/* 0x9B6 */ u8 field_0x9B6;
/* 0x9B7 */ u8 field_0x9B7;
/* 0x9B8 */ u8 field_0x9B8;
/* 0x9B9 */ s8 m_hand_L_jnt_num;
/* 0x9BA */ s8 m_bag_jnt_num;
/* 0x9BB */ u8 field_0x9BB;
/* 0x9BC */ u8 field_0x9BC;
/* 0x9BD */ u8 mNpcNo;
/* 0x9BE */ u8 field_0x9BE;
/* 0x9BF */ u8 field_0x9BF;
/* 0x9C0 */ u8 field_0x9C0;
/* 0x9C1 */ u8 field_0x9C1;
/* 0x9C2 */ s8 field_0x9C2;
/* 0x9C3 */ s8 field_0x9C3;
/* 0x9C4 */ u8 field_0x9C4;
/* 0x9C5 */ u8 field_0x9C5;
/* 0x9C6 */ u8 field_0x9C6;
/* 0x9C7 */ u8 field_0x9C7;
/* 0x9C8 */ u8 field_0x9C8;
/* 0x9C9 */ u8 field_0x9C9;
/* 0x9CA */ u8 field_0x9CA;
static const char m_arcname[];
}; // Size: 0x9CC
#endif /* D_A_NPC_ROTEN_H */
+21 -8
View File
@@ -2,6 +2,10 @@
#define D_A_OBJ_ROTEN_H
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_hostIO.h"
#include "SSystem/SComponent/c_phase.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "d/d_bg_w.h"
class daObj_Roten_c : public fopAc_ac_c {
public:
@@ -11,21 +15,30 @@ public:
inline BOOL _execute();
void set_mtx();
void CreateHeap();
void CreateInit();
BOOL CreateHeap();
s32 CreateInit();
static int getCreateCount();
public:
/* Place member variables here */
};
/* 0x290 */ request_of_phase_process_class mPhs;
/* 0x298 */ J3DModel* mpModel;
/* 0x29C */ u8 field_0x29C[0x2CC - 0x29C];
/* 0x2CC */ dBgW* mpBgW;
/* 0x2D0 */ u8 mType;
/* 0x2D1 */ u8 field_0x2D1;
class daObj_Roten_HIO_c {
static const char M_arcname[];
}; // Size: 0x2D2
class daObj_Roten_HIO_c : public JORReflexible {
public:
daObj_Roten_HIO_c();
virtual ~daObj_Roten_HIO_c() {}
public:
/* Place member variables here */
};
/* 0x04 */ s8 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ s16 field_0x0C;
}; // Size: 0x0E
#endif /* D_A_OBJ_ROTEN_H */
+4
View File
@@ -967,6 +967,10 @@ inline void dComIfGs_setReserveNum(int i_idx, u8 num) {
g_dComIfG_gameInfo.save.getPlayer().getBagItemRecord().setReserveNum(i_idx, num);
}
inline void dComIfGs_setReserveItemChange(u8 idx, u8 no) {
g_dComIfG_gameInfo.save.getPlayer().getBagItem().setReserveItemChange(idx, no);
}
inline u8 dComIfGs_checkReserveItemEmpty() {
return g_dComIfG_gameInfo.save.getPlayer().getBagItem().checkReserveItemEmpty();
}
+10 -1
View File
@@ -126,7 +126,7 @@ private:
/* 0x50 */ s16 mAddAngle;
/* 0x52 */ u8 field_0x52;
/* 0x54 */ cXyz mPos;
/* 0x60 */ u8 mbAttention;
/* 0x60 */ bool mbAttention;
/* 0x61 */ u8 mbNoTurn;
/* 0x62 */ s16 mTurnSpeed;
/* 0x64 */ u32 mTurnType;
@@ -164,10 +164,19 @@ public:
bool getAttnFlag() {
return mbAttention;
}
void setAttnFlag(bool flag) {
mbAttention = flag;
}
cXyz getAttnPos() {
return mPos;
}
s16 getTurnSpeed() {
return mTurnSpeed;
}
void setJntCtrlPtr(dNpc_JntCtrl_c* ctrl) {
mpJntCtrl = ctrl;
}
+1 -1
View File
@@ -131,7 +131,7 @@ enum {
/* 0x7B */ DSNAP_TYPE_UNK7B,
/* 0x7C */ DSNAP_TYPE_UNK7C,
/* 0x7D */ DSNAP_TYPE_UNK7D,
/* 0x7E */ DSNAP_TYPE_UNK7E,
/* 0x7E */ DSNAP_TYPE_ROTEN,
/* 0x7F */ DSNAP_TYPE_UNK7F,
/* 0x80 */ DSNAP_TYPE_BS,
/* 0x81 */ DSNAP_TYPE_UNK81,
File diff suppressed because it is too large Load Diff
+135 -19
View File
@@ -4,61 +4,177 @@
//
#include "d/actor/d_a_obj_roten.h"
#include "m_Do/m_Do_mtx.h"
#include "d/d_com_inf_game.h"
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_procname.h"
daObj_Roten_HIO_c l_HIO;
/* 000000EC-00000118 .text __ct__17daObj_Roten_HIO_cFv */
daObj_Roten_HIO_c::daObj_Roten_HIO_c() {
/* Nonmatching */
field_0x04 = -1;
field_0x08 = 0.0f;
field_0x0C = 0;
}
const char daObj_Roten_c::M_arcname[] = "Roten";
/* 00000118-00000188 .text set_mtx__13daObj_Roten_cFv */
void daObj_Roten_c::set_mtx() {
/* Nonmatching */
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 00000188-000001A8 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
return static_cast<daObj_Roten_c*>(i_this)->CreateHeap();
}
/* 000001A8-000002E4 .text CreateHeap__13daObj_Roten_cFv */
void daObj_Roten_c::CreateHeap() {
/* Nonmatching */
BOOL daObj_Roten_c::CreateHeap() {
static u32 bdl_arc_idx[] = {
0x04,
0x05,
0x06
};
static u32 dzb_arc_idx[] = {
0x09,
0x0A,
0x0B
};
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(M_arcname, bdl_arc_idx[mType]));
JUT_ASSERT(0xB0, modelData != 0);
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
mpBgW = new dBgW();
mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(M_arcname, dzb_arc_idx[mType]), cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx());
return mpModel != NULL && mpBgW != NULL;
}
/* 000002E4-00000348 .text CreateInit__13daObj_Roten_cFv */
void daObj_Roten_c::CreateInit() {
/* Nonmatching */
s32 daObj_Roten_c::CreateInit() {
set_mtx();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
dComIfG_Bgsp()->Regist(mpBgW, this);
return cPhs_COMPLEATE_e;
}
/* 00000348-00000410 .text Roten_create_check__FUc */
void Roten_create_check(unsigned char) {
/* Nonmatching */
static BOOL Roten_create_check(u8 type) {
u8 i = 0; // fakematch?
int temp = 0;
for(; i <= 0xB; i++) {
if(dComIfGs_isGetItemReserve(i)) {
temp++;
}
else if(i == 0) {
temp++;
}
}
if(type == 0 && temp > 3) {
return true;
}
if(type == 1 && temp > 6) {
return true;
}
if(temp > 9) {
return true;
}
return false;
}
s32 daObj_Roten_c::_create() {
fopAcM_SetupActor(this, daObj_Roten_c);
mType = fopAcM_GetParam(this) >> 0x18;
mType = cLib_minMaxLimit<u8>((int)mType, 0, 2); // fakematch? debug says this is templated to u8
if(Roten_create_check(mType)) {
field_0x2D1 = 0;
}
else {
field_0x2D1 = 1;
return cPhs_ERROR_e;
}
s32 result = dComIfG_resLoad(&mPhs, daObj_Roten_c::M_arcname);
u32 heap_size[] = {
0x2BA0,
0x2A60,
0x2C60,
};
if(result == cPhs_COMPLEATE_e) {
if(fopAcM_entrySolidHeap(this, CheckCreateHeap, heap_size[mType])) {
result = CreateInit();
}
else {
result = cPhs_ERROR_e;
}
}
return result;
}
/* 00000410-00000530 .text daObj_RotenCreate__FPv */
static s32 daObj_RotenCreate(void*) {
/* Nonmatching */
static s32 daObj_RotenCreate(void* i_actor) {
return static_cast<daObj_Roten_c*>(i_actor)->_create();
}
BOOL daObj_Roten_c::_delete() {
if(field_0x2D1 == 0) {
dComIfG_Bgsp()->Release(mpBgW);
dComIfG_resDelete(&mPhs, daObj_Roten_c::M_arcname);
}
return true;
}
/* 00000530-0000058C .text daObj_RotenDelete__FPv */
static BOOL daObj_RotenDelete(void*) {
/* Nonmatching */
static BOOL daObj_RotenDelete(void* i_actor) {
return static_cast<daObj_Roten_c*>(i_actor)->_delete();
}
BOOL daObj_Roten_c::_execute() {
set_mtx();
mpBgW->Move();
return false;
}
/* 0000058C-000005C4 .text daObj_RotenExecute__FPv */
static BOOL daObj_RotenExecute(void*) {
/* Nonmatching */
static BOOL daObj_RotenExecute(void* i_actor) {
return static_cast<daObj_Roten_c*>(i_actor)->_execute();
}
BOOL daObj_Roten_c::_draw() {
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
mDoExt_modelUpdateDL(mpModel);
return true;
}
/* 000005C4-00000630 .text daObj_RotenDraw__FPv */
static BOOL daObj_RotenDraw(void*) {
/* Nonmatching */
static BOOL daObj_RotenDraw(void* i_actor) {
return static_cast<daObj_Roten_c*>(i_actor)->_draw();
}
/* 00000630-00000638 .text daObj_RotenIsDelete__FPv */
static BOOL daObj_RotenIsDelete(void*) {
/* Nonmatching */
return true;
}
static actor_method_class daObj_RotenMethodTable = {
+9 -9
View File
@@ -70,7 +70,7 @@ bool dNpc_EventCut_c::cutProc() {
}
else {
if(dComIfGp_evmng_getIsAddvance(mEvtStaffId)) {
mbAttention = 0;
mbAttention = false;
(this->*cut_tbl[mCurActIdx].start)();
}
@@ -220,7 +220,7 @@ void dNpc_EventCut_c::cutTurnToActorProc() {
}
}
mbAttention = 1;
mbAttention = true;
s16 tAngle = cLib_targetAngleY(&mpActor->current.pos, &mPos);
int temp2 = tAngle - mpActor->current.angle.y;
@@ -256,10 +256,10 @@ void dNpc_EventCut_c::cutMoveToActorStart() {
}
if(attn == 0) {
mbAttention = 0;
mbAttention = false;
}
else {
mbAttention = 1;
mbAttention = true;
}
if(offs == 0) {
@@ -443,7 +443,7 @@ void dNpc_EventCut_c::cutTurnToPosStart() {
/* 8021DE2C-8021DFB0 .text cutTurnToPosProc__15dNpc_EventCut_cFv */
void dNpc_EventCut_c::cutTurnToPosProc() {
s16 tAngle = cLib_targetAngleY(&mpActor->current.pos, &mPos);
mbAttention = 1;
mbAttention = true;
if(mpJntCtrl) {
switch(mTurnType) {
@@ -499,10 +499,10 @@ void dNpc_EventCut_c::cutMoveToPosStart() {
}
if(attn == 0) {
mbAttention = 0;
mbAttention = false;
}
else {
mbAttention = 1;
mbAttention = true;
}
if(speed == 0) {
@@ -558,10 +558,10 @@ void dNpc_EventCut_c::cutTalkMsgStart() {
if(mpTalkActor != 0) {
u32* attn = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "Attention");
if(attn == 0) {
mbAttention = 0;
mbAttention = false;
}
else {
mbAttention = 1;
mbAttention = true;
}
u32* firstMsgNo = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "msg_num");