npc_toby OK (#2733)

* npc_toby 68% done

* address ykm ykw regressions

* All npc_toby cut done + chkPassed1 fakematch

* npc_toby OK

* npc_toby some hio var rename

* npc_gnd cleanup

* npc_gnd CreateHeap and reset

* Add fakematch comment fo get_u16_Idx
This commit is contained in:
YunataSavior
2025-10-16 20:21:57 -07:00
committed by GitHub
parent da605fd792
commit 43bf8abf48
13 changed files with 2665 additions and 3098 deletions
+10 -2
View File
@@ -440,6 +440,7 @@ public:
/* 80145C74 */ int setPathInfo(u8, s8, u8);
/* 80145D2C */ int setNextPathInfo(s8, u8);
/* 80145DA0 */ void reverse();
void setNextIdx() { setNextIdx(getNumPnts()); }
/* 80145DD0 */ int setNextIdx(int);
int getDstPos(cXyz i_pnt, cXyz* o_pos_p) {
return getDstPos(i_pnt, o_pos_p, getNumPnts());
@@ -460,7 +461,9 @@ public:
Vec getPntPos(int i_idx) { return mPathInfo->m_points[i_idx].m_position; }
u8 getArg0() { return mPathInfo->m_points[mIdx].mArg0; }
int getArg0() { return mPathInfo->m_points[mIdx].mArg0; }
int getArg1() { return mPathInfo->m_points[mIdx].mArg1; }
int getArg2() { return mPathInfo->m_points[mIdx].mArg2; }
int chkClose() {
BOOL rt = dPath_ChkClose(mPathInfo);
@@ -473,7 +476,11 @@ public:
void setIdx(int i_idx) { mIdx = i_idx; }
const u16 getIdx() { return mIdx; }
const int getIdx() { return mIdx; }
#if VERSION != VERSION_SHIELD_DEBUG
// fakematch inline to fix daNpcT_Path_c::chkPassed1
const u16 get_u16_Idx() { return mIdx; }
#endif
dPath* getPathInfo() { return mPathInfo; }
@@ -791,6 +798,7 @@ void daNpcT_offTmpBit(u32 i_idx);
void daNpcT_onTmpBit(u32 i_idx);
BOOL daNpcT_chkTmpBit(u32 i_idx);
void daNpcT_onEvtBit(u32 i_idx);
void daNpcT_offEvtBit(u32 i_idx);
BOOL daNpcT_chkTmpBit(u32 i_idx);
BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawnPos,
csXyz* o_angle);
+53 -64
View File
@@ -3,6 +3,33 @@
#include "d/actor/d_a_npc.h"
struct daNpc_Gnd_HIOParam {
/* 0x00 */ daNpcT_HIOParam common;
};
class daNpc_Gnd_Param_c {
public:
/* 809BE434 */ virtual ~daNpc_Gnd_Param_c() {}
static const daNpc_Gnd_HIOParam m;
};
#if DEBUG
class daNpc_Gnd_HIO_c : public mDoHIO_entry_c {
public:
daNpc_Gnd_HIO_c();
void listenPropertyEvent(const JORPropertyEvent*);
void genMessage(JORMContext*);
daNpc_Gnd_HIOParam m;
};
#define NPC_GND_HIO_CLASS daNpc_Gnd_HIO_c
#else
#define NPC_GND_HIO_CLASS daNpc_Gnd_Param_c
#endif
/**
* @ingroup actors-npcs
* @class daNpc_Gnd_c
@@ -27,7 +54,7 @@ public:
/* 809BBE60 */ int Execute();
/* 809BBE80 */ int Draw();
/* 809BBF44 */ static int createHeapCallBack(fopAc_ac_c*);
/* 809BBF64 */ int ctrlJointCallBack(J3DJoint*, int);
/* 809BBF64 */ static int ctrlJointCallBack(J3DJoint*, int);
/* 809BBFBC */ u8 getType();
/* 809BBFDC */ int getFlowNodeNo();
/* 809BBFF8 */ int isDelete();
@@ -50,76 +77,38 @@ public:
/* 809BCD5C */ void setAction(int (daNpc_Gnd_c::*)(void*));
/* 809BCE04 */ void wait(void*);
/* 809BD050 */ void talk(void*);
/* 809BE2D0 */ daNpc_Gnd_c(daNpcT_faceMotionAnmData_c const* param_1, daNpcT_motionAnmData_c const* param_2,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6,
daNpcT_evtData_c const* param_7, char** param_8) :
daNpcT_c(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8)
{}
/* 809BE40C */ u16 getEyeballRMaterialNo();
/* 809BE414 */ u16 getEyeballLMaterialNo();
/* 809BE41C */ s32 getHeadJointNo();
/* 809BE424 */ s32 getNeckJointNo();
/* 809BE42C */ s32 getBackboneJointNo();
/* 809BE2D0 */ daNpc_Gnd_c(
daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData,
daNpcT_motionAnmData_c const* i_motionAnmData,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData,
int i_faceMotionStepNum,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum,
daNpcT_evtData_c const* i_evtData, char** i_arcNames)
: daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData,
i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData,
i_arcNames) {
// "|%06d:%x|daNpc_Gnd_c -> Construct\n"
OS_REPORT("|%06d:%x|daNpc_Gnd_c -> コンストラクト\n", g_Counter.mCounter0, this);
}
/* 809BE40C */ u16 getEyeballRMaterialNo() { return 3; }
/* 809BE414 */ u16 getEyeballLMaterialNo() { return 2; }
/* 809BE41C */ s32 getHeadJointNo() { return 4; }
/* 809BE424 */ s32 getNeckJointNo() { return 3; }
/* 809BE42C */ s32 getBackboneJointNo() { return 1; }
static char* mCutNameList;
static cutFunc mCutList[1];
private:
/* 0xE40 */ u8 field_0xe40[0xf80 - 0xe40];
/* 0xE40 */ NPC_GND_HIO_CLASS* mpHIO;
/* 0xE44 */ dCcD_Cyl mCyl1;
/* 0xF80 */ u8 mType;
/* 0xF81 */ u8 field_0xf81[0xfa0 - 0xf81];
};
STATIC_ASSERT(sizeof(daNpc_Gnd_c) == 0xfa0);
class daNpc_Gnd_Param_c {
public:
/* 809BE434 */ ~daNpc_Gnd_Param_c();
struct Data {
/* 0x00 */ f32 field_0x00;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x0C */ f32 field_0x0c;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ f32 field_0x14;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1c;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ f32 field_0x28;
/* 0x2C */ f32 field_0x2c;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 field_0x38;
/* 0x3C */ f32 field_0x3c;
/* 0x40 */ f32 field_0x40;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ s16 field_0x48;
/* 0x4A */ s16 field_0x4a;
/* 0x4C */ s16 field_0x4c;
/* 0x4E */ s16 field_0x4e;
/* 0x50 */ f32 field_0x50;
/* 0x54 */ f32 field_0x54;
/* 0x58 */ f32 field_0x58;
/* 0x5C */ f32 field_0x5c;
/* 0x60 */ s16 field_0x60;
/* 0x62 */ s16 field_0x62;
/* 0x64 */ f32 field_0x64;
/* 0x68 */ f32 field_0x68;
/* 0x6C */ f32 field_0x6c;
/* 0x70 */ f32 field_0x70;
/* 0x74 */ f32 field_0x74;
/* 0x78 */ f32 field_0x78;
/* 0x7C */ f32 field_0x7c;
/* 0x80 */ f32 field_0x80;
/* 0x84 */ f32 field_0x84;
/* 0x88 */ f32 field_0x88;
};
static const Data m;
/* 0xF81 */ u8 field_0xf81[0xF84 - 0xF81];
/* 0xF84 */ u8 field_0xF84;
/* 0xF85 */ u8 field_0xF85[0xF9C - 0xF85];
/* 0xF9C */ u8 field_0xF9C;
};
STATIC_ASSERT(sizeof(daNpc_Gnd_c) == 0xFA0);
#endif /* D_A_NPC_GND_H */
+126 -54
View File
@@ -4,6 +4,37 @@
#include "dolphin/types.h"
#include "d/actor/d_a_npc.h"
struct daNpc_Toby_HIOParam {
/* 0x00 */ daNpcT_HIOParam common;
/* 0x8C */ f32 performance_speed;
/* 0x90 */ f32 speedup_performance;
/* 0x94 */ f32 init_play_speed;
/* 0x98 */ f32 switching_speed;
};
class daNpc_Toby_Param_c {
public:
/* 80B24978 */ virtual ~daNpc_Toby_Param_c() {}
static const daNpc_Toby_HIOParam m;
};
#if DEBUG
class daNpc_Toby_HIO_c : public mDoHIO_entry_c {
public:
daNpc_Toby_HIO_c();
void listenPropertyEvent(const JORPropertyEvent*);
void genMessage(JORMContext*);
daNpc_Toby_HIOParam m;
};
#define NPC_TOBY_HIO_CLASS daNpc_Toby_HIO_c
#else
#define NPC_TOBY_HIO_CLASS daNpc_Toby_Param_c
#endif
/**
* @ingroup actors-npcs
* @class daNpc_Toby_c
@@ -12,78 +43,119 @@
* @details
*
*/
class daNpc_Toby_c : public fopAc_ac_c {
class daNpc_Toby_c : public daNpcT_c {
public:
typedef int (daNpc_Toby_c::*cutFunc)(int);
typedef int (daNpc_Toby_c::*actionFunc)(void*);
/* 80B1E64C */ ~daNpc_Toby_c();
/* 80B1E798 */ void create();
/* 80B1EA60 */ void CreateHeap();
/* 80B1EF28 */ void Delete();
/* 80B1EF5C */ void Execute();
/* 80B1EF7C */ void Draw();
/* 80B1F010 */ void createHeapCallBack(fopAc_ac_c*);
/* 80B1F030 */ void ctrlJointCallBack(J3DJoint*, int);
/* 80B1F088 */ void srchToby(void*, void*);
/* 80B1F124 */ void getOtherTobyP(int);
/* 80B1F200 */ void getType();
/* 80B1F274 */ void isDelete();
/* 80B1E798 */ int create();
/* 80B1EA60 */ int CreateHeap();
/* 80B1EF28 */ int Delete();
/* 80B1EF5C */ int Execute();
/* 80B1EF7C */ int Draw();
/* 80B1F010 */ static int createHeapCallBack(fopAc_ac_c*);
/* 80B1F030 */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80B1F088 */ static void* srchToby(void*, void*);
/* 80B1F124 */ fopAc_ac_c* getOtherTobyP(int);
/* 80B1F200 */ u8 getType();
/* 80B1F274 */ int isDelete();
/* 80B1F384 */ void reset();
/* 80B1F5AC */ void afterJntAnm(int);
/* 80B1F638 */ void setParam();
/* 80B1F784 */ void checkChangeEvt();
/* 80B1F784 */ BOOL checkChangeEvt();
/* 80B1F950 */ void setAfterTalkMotion();
/* 80B1FA08 */ void srchActors();
/* 80B1FB34 */ void evtTalk();
/* 80B1FBD4 */ void evtCutProc();
/* 80B1FB34 */ BOOL evtTalk();
/* 80B1FBD4 */ BOOL evtCutProc();
/* 80B1FC9C */ void action();
/* 80B1FE68 */ void beforeMove();
/* 80B1FF2C */ void setAttnPos();
/* 80B20278 */ void setCollision();
/* 80B2042C */ bool drawDbgInfo();
/* 80B2042C */ int drawDbgInfo();
/* 80B20434 */ void drawOtherMdl();
/* 80B2050C */ void afterSetFaceMotionAnm(int, int, f32, int);
/* 80B20568 */ void afterSetMotionAnm(int, int, f32, int);
/* 80B205F4 */ void selectAction();
/* 80B20710 */ void chkAction(int (daNpc_Toby_c::*)(void*));
/* 80B2073C */ void setAction(int (daNpc_Toby_c::*)(void*));
/* 80B207E4 */ void cutTobyHouseFire(int);
/* 80B20AB0 */ void cutTalkToOneself(int);
/* 80B20FC0 */ void cutRepairSCannon(int);
/* 80B215B4 */ void cutSCannon(int);
/* 80B219F4 */ void cutConversationAboutSCannon(int);
/* 80B22434 */ void cutConversationAboutZra(int);
/* 80B22614 */ void chkAttnZra();
/* 80B226B0 */ void wait(void*);
/* 80B22D98 */ void walk(void*);
/* 80B22FAC */ void play(void*);
/* 80B23344 */ void talk(void*);
/* 80B24840 */ daNpc_Toby_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int,
daNpcT_evtData_c const*, char**);
/* 80B24920 */ u16 getEyeballMaterialNo();
/* 80B24928 */ s32 getHeadJointNo();
/* 80B24930 */ s32 getNeckJointNo();
/* 80B24938 */ bool getBackboneJointNo();
/* 80B24940 */ void checkChangeJoint(int);
/* 80B24950 */ void checkRemoveJoint(int);
/* 80B24960 */ s32 getFootLJointNo();
/* 80B24968 */ s32 getFootRJointNo();
/* 80B24970 */ bool chkXYItems();
/* 80B2050C */ bool afterSetFaceMotionAnm(int, int, f32, int);
/* 80B20568 */ bool afterSetMotionAnm(int, int, f32, int);
/* 80B205F4 */ int selectAction();
/* 80B20710 */ int chkAction(actionFunc);
/* 80B2073C */ int setAction(actionFunc);
/* 80B207E4 */ int cutTobyHouseFire(int);
/* 80B20AB0 */ int cutTalkToOneself(int);
/* 80B20FC0 */ int cutRepairSCannon(int);
/* 80B215B4 */ int cutSCannon(int);
/* 80B219F4 */ int cutConversationAboutSCannon(int);
/* 80B22434 */ int cutConversationAboutZra(int);
/* 80B22614 */ int chkAttnZra();
/* 80B226B0 */ int wait(void*);
/* 80B22D98 */ int walk(void*);
/* 80B22FAC */ int play(void*);
/* 80B23344 */ int talk(void*);
#if DEBUG
int test(void*);
#endif
/* 80B24840 */ daNpc_Toby_c(
daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData,
daNpcT_motionAnmData_c const* i_motionAnmData,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData,
int i_faceMotionStepNum,
daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum,
daNpcT_evtData_c const* i_evtData, char** i_arcNames)
: daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData,
i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData,
i_arcNames) {
// "|%06d:%x|daNpc_Toby_c -> Construct\n"
OS_REPORT("|%06d:%x|daNpc_Toby_c -> コンストラクト\n", g_Counter.mCounter0, this);
}
/* 80B24920 */ u16 getEyeballMaterialNo() { return 2; }
/* 80B24928 */ s32 getHeadJointNo() { return 4; }
/* 80B24930 */ s32 getNeckJointNo() { return 3; }
/* 80B24938 */ s32 getBackboneJointNo() { return 1; }
/* 80B24940 */ BOOL checkChangeJoint(int arg0) { return arg0 == 4; }
/* 80B24950 */ BOOL checkRemoveJoint(int arg0) { return arg0 == 8; }
/* 80B24960 */ s32 getFootLJointNo() { return 24; }
/* 80B24968 */ s32 getFootRJointNo() { return 27; }
/* 80B24970 */ BOOL chkXYItems() { return TRUE; }
int getFlowNodeNo() {
u16 nodeNo = home.angle.x;
u32 rv;
if (nodeNo == 0xffff) {
rv = -1;
} else {
rv = nodeNo;
}
return rv;
}
u8 getPathID() { return (fopAcM_GetParam(this) & 0xFF00) >> 8; }
u8 getBitSW() { return (fopAcM_GetParam(this) & 0xFF0000) >> 16; }
static char* mCutNameList[7];
static u8 mCutList[84];
static cutFunc mCutList[7];
private:
/* 0x568 */ u8 field_0x568[0x1008 - 0x568];
/* 0x0E40 */ NPC_TOBY_HIO_CLASS* mpHIO;
/* 0x0E44 */ J3DModel* mpTobyModels[1];
/* 0x0E48 */ dCcD_Cyl mCyl1;
/* 0x0F84 */ u8 mType;
/* 0x0F88 */ daNpcT_ActorMngr_c mActorMngr[4];
/* 0x0FA8 */ actionFunc mActFunc_0;
/* 0x0FB4 */ actionFunc mActFunc_1;
/* 0x0FC0 */ daNpcT_Path_c mPath;
/* 0x0FE8 */ cXyz field_0x0FE8;
/* 0x0FF4 */ int field_0x0FF4;
/* 0x0FF8 */ f32 mPlaySpeed;
/* 0x0FFC */ u16 field_0x0FFC;
/* 0x0FFE */ u8 field_0x0FFE;
/* 0x0FFF */ u8 field_0x0FFF;
/* 0x1000 */ u8 field_0x1000;
/* 0x1001 */ bool field_0x1001;
/* 0x1002 */ bool field_0x1002;
/* 0x1003 */ u8 field_0x1003;
/* 0x1004 */ u8 field_0x1004;
};
STATIC_ASSERT(sizeof(daNpc_Toby_c) == 0x1008);
class daNpc_Toby_Param_c {
public:
/* 80B24978 */ ~daNpc_Toby_Param_c();
static u8 const m[156];
};
#endif /* D_A_NPC_TOBY_H */
+9 -1
View File
@@ -30,7 +30,7 @@ private:
/* 0xB28 */ f32 mGroundH;
/* 0xB2C */ f32 mAnmPlaySpeed;
/* 0xB30 */ u8 field_0xb30;
/* 0xB31 */ u8 field_0xb31;
/* 0xB31 */ u8 mCoNone;
public:
/* 80BA56EC */ virtual ~daObj_AutoMata_c();
@@ -46,6 +46,14 @@ public:
/* 80BA6690 */ void setRoomNo();
/* 80BA66D4 */ void setMtx();
/* 80BA674C */ void setSe();
void setAnmPlaySpeed(f32 i_playspeed) {
mAnmPlaySpeed = i_playspeed;
}
void setCoNone() {
mCoNone = true;
}
};
STATIC_ASSERT(sizeof(daObj_AutoMata_c) == 0xb38);