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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 2665 additions and 3098 deletions

View File

@ -55,11 +55,11 @@ wait__12daNpc_Toby_cFPv = .text:0x00004150; // type:function size:0x6E8 scope:gl
walk__12daNpc_Toby_cFPv = .text:0x00004838; // type:function size:0x214 scope:global
play__12daNpc_Toby_cFPv = .text:0x00004A4C; // type:function size:0x398 scope:global
talk__12daNpc_Toby_cFPv = .text:0x00004DE4; // type:function size:0x2E4 scope:global
daNpc_Toby_Create__FPv = .text:0x000050C8; // type:function size:0x20 scope:global
daNpc_Toby_Delete__FPv = .text:0x000050E8; // type:function size:0x20 scope:global
daNpc_Toby_Execute__FPv = .text:0x00005108; // type:function size:0x20 scope:global
daNpc_Toby_Draw__FPv = .text:0x00005128; // type:function size:0x20 scope:global
daNpc_Toby_IsDelete__FPv = .text:0x00005148; // type:function size:0x8 scope:global
daNpc_Toby_Create__FPv = .text:0x000050C8; // type:function size:0x20 scope:local
daNpc_Toby_Delete__FPv = .text:0x000050E8; // type:function size:0x20 scope:local
daNpc_Toby_Execute__FPv = .text:0x00005108; // type:function size:0x20 scope:local
daNpc_Toby_Draw__FPv = .text:0x00005128; // type:function size:0x20 scope:local
daNpc_Toby_IsDelete__FPv = .text:0x00005148; // type:function size:0x8 scope:local
calc__11J3DTexNoAnmCFPUs = .text:0x00005150; // type:function size:0x30 scope:global
__dt__10cCcD_GSttsFv = .text:0x00005180; // type:function size:0x48 scope:global
__dt__8daNpcT_cFv = .text:0x000051C8; // type:function size:0x388 scope:global
@ -164,17 +164,17 @@ jointNo$5107 = .rodata:0x00000138; // type:object size:0x4 scope:local data:4byt
@6541 = .rodata:0x0000019C; // type:object size:0xC scope:local
@stringBase0 = .rodata:0x000001A8; // type:object size:0xBB scope:local data:string_table
...data.0 = .data:0x00000000; // type:label scope:local
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
lbl_374_data_10 = .data:0x00000010; // type:object size:0x10
l_bmdData = .data:0x00000020; // type:object size:0x18 scope:global
l_bmdData = .data:0x00000020; // type:object size:0x18 scope:local
l_evtList = .data:0x00000038; // type:object size:0x38 scope:global
l_resNameList = .data:0x00000070; // type:object size:0x24 scope:global
l_loadResPtrn0 = .data:0x00000094; // type:object size:0x6 scope:global
l_loadResPtrn1 = .data:0x0000009C; // type:object size:0x6 scope:global
l_loadResPtrn2 = .data:0x000000A4; // type:object size:0x5 scope:global
l_loadResPtrn3 = .data:0x000000AC; // type:object size:0x8 scope:global
l_loadResPtrnList = .data:0x000000B4; // type:object size:0x1C scope:global
l_resNameList = .data:0x00000070; // type:object size:0x24 scope:local
l_loadResPtrn0 = .data:0x00000094; // type:object size:0x6 scope:local
l_loadResPtrn1 = .data:0x0000009C; // type:object size:0x6 scope:local
l_loadResPtrn2 = .data:0x000000A4; // type:object size:0x5 scope:local
l_loadResPtrn3 = .data:0x000000AC; // type:object size:0x8 scope:local
l_loadResPtrnList = .data:0x000000B4; // type:object size:0x1C scope:local
l_faceMotionAnmData = .data:0x000000D0; // type:object size:0x1C0 scope:global
l_motionAnmData = .data:0x00000290; // type:object size:0x2BC scope:global
l_faceMotionSequenceData = .data:0x0000054C; // type:object size:0x110 scope:global
@ -200,7 +200,7 @@ mCutList__12daNpc_Toby_c = .data:0x00000850; // type:object size:0x54 scope:glob
@5477 = .data:0x00000948; // type:object size:0x38 scope:local
@6040 = .data:0x00000980; // type:object size:0x54 scope:local
@6039 = .data:0x000009D4; // type:object size:0x54 scope:local
daNpc_Toby_MethodTable = .data:0x00000A28; // type:object size:0x20 scope:global
daNpc_Toby_MethodTable = .data:0x00000A28; // type:object size:0x20 scope:local
g_profile_NPC_TOBY = .data:0x00000A48; // type:object size:0x30 scope:global
__vt__11J3DTexNoAnm = .data:0x00000A78; // type:object size:0xC scope:global
__vt__12J3DFrameCtrl = .data:0x00000A84; // type:object size:0xC scope:global

View File

@ -1913,7 +1913,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_npc_tkc"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_tkj2"),
ActorRel(NonMatching, "d_a_npc_tks", extra_cflags=[DANPCF_C_HACK]),
ActorRel(NonMatching, "d_a_npc_toby"),
ActorRel(MatchingFor("GZ2E01"), "d_a_npc_toby"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_tr"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_uri"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_worm"),

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);

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 */

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 */

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);

View File

@ -461,12 +461,18 @@ int daNpcT_Path_c::getDstPosH(cXyz i_pnt, cXyz* o_pos_p, int i_idx, int param_3)
/* 80146188-801464D8 140AC8 0350+00 2/2 0/0 2/2 .text chkPassed1__13daNpcT_Path_cF4cXyzi
*/
// NONMATCHING one instruction order swap
int daNpcT_Path_c::chkPassed1(cXyz i_pnt, int i_num) {
cXyz prev_pos, cur_pos, next_pos;
cXyz prev_pos;
cXyz cur_pos;
cXyz next_pos;
cXyz sp5C;
#if VERSION != VERSION_SHIELD_DEBUG
// FIXME: fakematch. I literally don't know how else to get this to match....
u16 cur_idx = get_u16_Idx();
#else
u16 cur_idx = getIdx();
#endif
u16 prev_idx, next_idx;
prev_idx = next_idx = cur_idx;
@ -543,7 +549,7 @@ int daNpcT_Path_c::chkPassed2(cXyz i_pnt, cXyz* param_2, int i_num, int param_4)
cXyz h_startTan;
cXyz h_endTan;
u16 cur_idx = (u16)getIdx();
u16 cur_idx = getIdx();
u16 sp10;
u16 prev_idx;
u16 next_idx;
@ -1794,11 +1800,17 @@ int daNpcT_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) {
}
/* 8014997C-80149BB4 1442BC 0238+00 1/0 1/0 58/0 .text evtProc__8daNpcT_cFv */
// NONMATCHING loads dComIfG_gameInfo twice
BOOL daNpcT_c::evtProc() {
BOOL ret = FALSE;
if (dComIfGp_event_runCheck() != 0) {
#if VERSION != VERSION_SHIELD_DEBUG
// TODO: gameInfo fake match to force reuse of pointer
dComIfG_play_c* play = &g_dComIfG_gameInfo.play;
if (play->getEvent().runCheck())
#else
if (dComIfGp_event_runCheck())
#endif
{
if (eventInfo.checkCommandTalk()) {
if (!checkChangeEvt()) {
evtTalk();
@ -1807,7 +1819,11 @@ BOOL daNpcT_c::evtProc() {
} else if (eventInfo.checkCommandDemoAccrpt()
&& dComIfGp_getEventManager().endCheck(mEvtId)) {
if (evtEndProc()) {
#if VERSION != VERSION_SHIELD_DEBUG
play->getEvent().reset();
#else
dComIfGp_event_reset();
#endif
mEvtId = -1;
}
} else {

File diff suppressed because it is too large Load Diff

View File

@ -454,8 +454,8 @@ BOOL daNpc_Moi_c::isDelete() {
/* 80A74D8C-80A7513C 000F2C 03B0+00 1/1 0/0 0/0 .text reset__11daNpc_Moi_cFv */
void daNpc_Moi_c::reset() {
int iVar8;
csXyz cStack_80;
cXyz cStack_30;
csXyz cStack_80;
int iVar1 = (u8*)&field_0x1670 - (u8*)&field_0x1610;
if (mpMatAnm[0] != NULL) {
@ -489,13 +489,13 @@ void daNpc_Moi_c::reset() {
break;
case TYPE_2:
if (daNpcT_chkEvtBit(0xcd)) {
JUT_ASSERT(1932, 0 != mPath.getPathInfo());
iVar8 = g_Counter.mCounter0 % mPath.getNumPnts();
cStack_30 = mPath.getPntPos(iVar8);
setPos(cStack_30);
mPath.setIdx(iVar8);
mPath.setNextIdx(mPath.getNumPnts());
u16 path_idx = mPath.getIdx();
cStack_30 = mPath.getPntPos(path_idx);
mPath.setNextIdx();
cStack_30 = mPath.getPntPos(mPath.getIdx());
cStack_80.y = cLib_targetAngleY(&current.pos, &cStack_30);
}
field_0x1666 = 1;
@ -1576,8 +1576,7 @@ int daNpc_Moi_c::cutConversationWithUri(int param_1) {
setPos(cStack_34);
mPath.setIdx(0);
mPath.setNextIdx(mPath.getNumPnts());
u16 path_idx = mPath.getIdx();
cStack_34 = mPath.getPntPos(path_idx);
cStack_34 = mPath.getPntPos(mPath.getIdx());
setAngle(cLib_targetAngleY(&current.pos, &cStack_34));
break;
case 2:
@ -1638,8 +1637,7 @@ int daNpc_Moi_c::cutFindWolf(int param_1) {
mPath.offReverse();
mPath.setIdx(0);
mPath.setNextIdx(mPath.getNumPnts());
u16 path_idx = mPath.getIdx();
cStack_30 = mPath.getPntPos(path_idx);
cStack_30 = mPath.getPntPos(mPath.getIdx());
field_0x1664 = fopAcM_searchPlayerAngleY(this);
setAngle(field_0x1664);
mPlayerActorMngr.entry(daPy_getPlayerActorClass());

File diff suppressed because it is too large Load Diff

View File

@ -3426,7 +3426,7 @@ BOOL daNpc_ykM_c::race(void* param_1) {
int idx;
while (true) {
if (mPath.chkPassed1(current.pos, mPath.getNumPnts())) {
if (mPath.getArg0() == 0) {
if (u8(mPath.getArg0()) == 0) {
mSound.startCreatureSound(Z2SE_YM_SNOBO_JUMP, 0, -1);
mSound.startCreatureVoice(Z2SE_YM_V_SNOBO_JUMP, -1);
field_0x157e = 1;

View File

@ -2879,7 +2879,7 @@ int daNpc_ykW_c::race(void* param_0) {
if (field_0x106e == 0) {
while (true) {
if (mPath.chkPassed1(current.pos, mPath.getNumPnts())) {
if (mPath.getArg0() == 0) {
if (u8(mPath.getArg0()) == 0) {
mSound.startCreatureSound(Z2SE_YW_SNOBO_JUMP, 0, -1);
mSound.startCreatureVoice(Z2SE_YW_V_SNOBO_JUMP, -1);
field_0x106e = 1;

View File

@ -148,7 +148,7 @@ int daObj_AutoMata_c::Execute() {
mAnmPlaySpeed = 0.0f;
setSe();
setMtx();
if (field_0xb31 == 0) {
if (mCoNone == 0) {
cStack_28.set(0.0f, 40.0f, 0.0f);
mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3));
mDoMtx_stack_c::multVec(&cStack_28, &sphCenter);
@ -164,7 +164,7 @@ int daObj_AutoMata_c::Execute() {
mCyl.ClrCoHit();
attention_info.flags = 0;
eyePos = attention_info.position = current.pos;
field_0xb31 = 0;
mCoNone = 0;
return 1;
}
return 0;