summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorZeclos <Zeclos99@gmail.com>2026-03-04 19:25:59 +0100
committerGitHub <noreply@github.com>2026-03-04 13:25:59 -0500
commitdcf4862387fb9be67f7aff9fe4f986d129366662 (patch)
tree4f50bd214b8bf29f95526f9d7a7c951242b6d9e8 /include
parentd54d983a4a7433f97f92b9e162cea5972dac6165 (diff)
D_a_npc_tc matching for retail (#930)
* progress * code matching non-demo * cleanup for d_a_npc_tc and d_a_obj_smplbg
Diffstat (limited to 'include')
-rw-r--r--include/d/actor/d_a_npc_tc.h272
-rw-r--r--include/d/actor/d_a_obj_smplbg.h8
-rw-r--r--include/d/d_com_inf_game.h4
-rw-r--r--include/d/d_npc.h12
-rw-r--r--include/d/d_snap.h8
-rw-r--r--include/m_Do/m_Do_ext.h2
6 files changed, 248 insertions, 58 deletions
diff --git a/include/d/actor/d_a_npc_tc.h b/include/d/actor/d_a_npc_tc.h
index e0ed05f7..0ea9ef3b 100644
--- a/include/d/actor/d_a_npc_tc.h
+++ b/include/d/actor/d_a_npc_tc.h
@@ -2,37 +2,143 @@
#define D_A_NPC_TC_H
#include "f_op/f_op_actor.h"
+#include "d/d_npc.h"
-class daNpc_Tc_c : public fopAc_ac_c {
+namespace daObjSmplbg { class Act_c; };
+
+class daNpc_Tc_c : public fopNpc_npc_c {
public:
- void getAttentionBasePos() {}
- void getEyePos() {}
- void incAttnSetCount() {}
- void setAction(int (daNpc_Tc_c::*)(void*), void*) {}
- void _searchTower(fopAc_ac_c*);
- void initTexPatternAnm(bool);
+ enum Status {
+ STATUS_WAIT = 1,
+ STATUS_SIT = 2,
+ STATUS_TALK = 3,
+ STATUS_JUMP = 4,
+ STATUS_WALK_TO_JAIL = 5,
+ STATUS_TALK_NEAR_JAIL = 6,
+ STATUS_WAIT_NEAR_JAIL = 7,
+ STATUS_WALK_TO_STOOL = 8,
+ STATUS_SIT_TO_STOOL = 9,
+ STATUS_DEMO_JUMP = 10,
+ STATUS_DEMO_RESCUE = 11,
+ STATUS_DEMO_TALK = 12,
+ STATUS_PAY_RUPEE = 13,
+ STATUS_DEMO_PAY_RUPEE = 14,
+ STATUS_GET_RUPEE = 15,
+ STATUS_DEMO_GET_RUPEE = 16,
+ STATUS_MONUMENT_COMPLETE = 17,
+ STATUS_DEMO_MONUMENT_COMPLETE = 18,
+ };
+
+ enum ActionStatus {
+ ACTION_STARTING = 0,
+ ACTION_ONGOING = 1,
+ ACTION_ENDING = -1,
+ };
+
+ enum Type {
+ TYPE_NORMAL2 = 0,
+ TYPE_RED = 1,
+ TYPE_WHITE = 2,
+ TYPE_BLUE = 3,
+ TYPE_NORMAL = 4,
+ };
+
+ enum BckIdx {
+ BCK_IDX_WAIT01 = 0,
+ BCK_IDX_WAIT03 = 1,
+ BCK_IDX_WAIT02 = 2,
+ BCK_IDX_TALK01 = 3,
+ BCK_IDX_WALK01 = 4,
+ BCK_IDX_JAMP_A = 5,
+ BCK_IDX_JAMP_B = 6,
+ BCK_IDX_JAMP_C = 7,
+ BCK_IDX_GUARD = 8,
+ BCK_IDX_JTBT = 9,
+ BCK_IDX_HAPPY = 10,
+ BCK_IDX_DANCE01 = 11,
+ BCK_IDX_DANCE02 = 12,
+ BCK_IDX_GET = 13,
+ BCK_IDX_MAWASU = 14,
+ BCK_IDX_WAIT04 = 15,
+ BCK_IDX_TALK02 = 16,
+ };
+
+ enum AnmPrmIdx {
+ ANM_PRM_IDX_NONE = 0,
+ ANM_PRM_IDX_WAIT01 = 1,
+ ANM_PRM_IDX_WAIT03 = 2,
+ ANM_PRM_IDX_WAIT02 = 3,
+ ANM_PRM_IDX_TALK01 = 4,
+ ANM_PRM_IDX_WALK01 = 5,
+ ANM_PRM_IDX_JAMP_A = 6,
+ ANM_PRM_IDX_JAMP_B = 7,
+ ANM_PRM_IDX_JAMP_C1 = 8,
+ ANM_PRM_IDX_JAMP_C2 = 9,
+ ANM_PRM_IDX_GUARD = 10,
+ ANM_PRM_IDX_JTBT = 11,
+ ANM_PRM_IDX_HAPPY = 12,
+ ANM_PRM_IDX_DANCE01 = 13,
+ ANM_PRM_IDX_DANCE02 = 14,
+ ANM_PRM_IDX_GET = 15,
+ ANM_PRM_IDX_HAPPY2 = 16, // ANM_PRM_IDX_HAPPY gets set to this
+ ANM_PRM_IDX_DANCE01_TO_TALK01 = 17,
+ ANM_PRM_IDX_DANCE02_TO_WAIT03 = 18,
+ ANM_PRM_IDX_MAWASU = 19,
+ ANM_PRM_IDX_WAIT04 = 20,
+ ANM_PRM_IDX_TALK02 = 21,
+ ANM_PRM_IDX_TALK01_WAIT01 = 22, // loops 3x then -> WAIT01
+ ANM_PRM_IDX_TALK01_TALK02 = 23, // loops 5x then -> TALK02
+ };
+
+ typedef int (daNpc_Tc_c::*ActionFunc)(void*);
+ daNpc_Tc_c();
+
+ cXyz& getAttentionBasePos() { return mAttPos; }
+ cXyz& getEyePos() { return mEyePos; }
+
+ void incAttnSetCount() {
+ if (mAttnSetCount != 0xff) {
+ mAttnSetCount++;
+ }
+ }
+
+ BOOL setAction(ActionFunc actionFunc, void* arg) {
+ if (mCurrActionFunc != actionFunc) {
+ if (mCurrActionFunc != NULL) {
+ mActionStatus = ACTION_ENDING;
+ (this->*mCurrActionFunc)(arg);
+ }
+ mCurrActionFunc = actionFunc;
+ mActionStatus = ACTION_STARTING;
+ (this->*mCurrActionFunc)(arg);
+ }
+ return TRUE;
+ }
+
+ fopAc_ac_c* _searchTower(fopAc_ac_c*);
+ BOOL initTexPatternAnm(bool);
void playTexPatternAnm();
- void smoke_set(float, float, float, float, float);
+ void smoke_set(f32, f32, f32, f32, f32);
void setAnm();
void setTexAnm();
- void chkAttention(cXyz, short);
+ bool chkAttention(cXyz, s16);
void eventOrder();
void checkOrder();
- void existTcMonument();
- void anmAtr(unsigned short);
+ bool existTcMonument();
+ void anmAtr(u16);
void stopTower();
void startTower();
- void next_msgStatusBlue(unsigned long*);
- void next_msgStatusNormal(unsigned long*);
- void next_msgStatus(unsigned long*);
- void setFirstMsg(bool*, unsigned long, unsigned long);
- void getMsgNormal();
- void getMsgBlue();
- void getMsg();
+ u16 next_msgStatusBlue(u32*);
+ u16 next_msgStatusNormal(u32*);
+ u16 next_msgStatus(u32*);
+ u32 setFirstMsg(bool*, u32, u32);
+ u32 getMsgNormal();
+ u32 getMsgBlue();
+ u32 getMsg();
void getArg();
void createInit();
- void searchStoolPos(void*, void*);
+ static void* searchStoolPos(void*, void*);
void setAttention();
void calcMove();
void lookBack();
@@ -54,32 +160,37 @@ public:
void statusDemoJump();
void statusDemoRescue();
void statusDemoTalk();
- void help_action(void*);
- void wait_action(void*);
+ BOOL help_action(void*);
+ BOOL wait_action(void*);
void calc_sitpos();
void set_mtx();
BOOL _draw();
void setTower();
BOOL _execute();
BOOL _delete();
- void isCreate();
+ bool isCreate();
cPhs_State _create();
- void _createHeap();
- void next_msgStatusNormal2(unsigned long*);
- void getMsgNormal2();
- void setRupeeSizeMsg();
- void existUnknownCollectMap();
- void analysisCollectMap();
- void existKnownCollectMap();
- void next_msgStatusWhite(unsigned long*);
- void getMsgWhite();
- void next_msgStatusRed(unsigned long*);
- void setFinishMsg();
- void getMsgRed();
- void checkMonumentFee(unsigned short, unsigned short);
- void checkAllMonumentFee();
- void checkAllMonumentPay();
- void checkMonumentPay(unsigned short, unsigned short);
+ BOOL _createHeap();
+ u16 next_msgStatusNormal2(u32*);
+ u32 getMsgNormal2();
+#if VERSION != VERSION_DEMO
+ u32 setRupeeSizeMsg();
+#endif
+ bool existUnknownCollectMap();
+ int analysisCollectMap();
+ bool existKnownCollectMap();
+ u16 next_msgStatusWhite(u32*);
+ u32 getMsgWhite();
+ u16 next_msgStatusRed(u32*);
+ u32 setFinishMsg();
+ u32 getMsgRed();
+ bool checkMonumentFee(u16, u16);
+ bool checkAllMonumentFee();
+#if VERSION == VERSION_DEMO
+ bool checkOneMonumentGet();
+#endif
+ int checkAllMonumentPay();
+ bool checkMonumentPay(u16, u16);
void cutProc();
void cutSitToJumpStart(int);
void cutSitToJumpProc(int);
@@ -101,15 +212,78 @@ public:
void cutPayProc(int);
public:
- /* Place member variables here */
-};
-
-class daNpc_Tc_HIO_c {
-public:
- daNpc_Tc_HIO_c();
-
-public:
- /* Place member variables here */
-};
-
+ /* 0x6C4 */ u8 field_0x6C4[0x6C8 - 0x6C4];
+ /* 0x6C8 */ BOOL field_0x6C8;
+ /* 0x6CC */ u8 mJtbtTimer;
+ /* 0x6CD */ u8 mTalk01Wait01Timer;
+ /* 0x6CE */ u8 mTalk01Talk02Timer;
+ /* 0x6CF */ s8 mStatus;
+ /* 0x6D0 */ ActionFunc mCurrActionFunc;
+ /* 0x6DC */ s8 mActionStatus;
+ /* 0x6DD */ u8 field_0x6DD[0x6E0 - 0x6DD];
+ /* 0x6E0 */ cXyz mSmokePos;
+ /* 0x6EC */ csXyz mSmokeAngle;
+ /* 0x6F2 */ u8 field_0x6F2[0x6F4 - 0x6F2];
+ /* 0x6F4 */ dPa_smokeEcallBack mSmokeCallBack;
+ /* 0x714 */ dPa_followEcallBack field_0x714;
+ /* 0x728 */ dPa_followEcallBack field_0x728;
+ /* 0x73C */ request_of_phase_process_class mPhs;
+ /* 0x744 */ u32 mShadowId;
+#if VERSION == VERSION_DEMO
+ /* 0x748 */ J3DModel* mpModel;
+#endif
+ /* 0x748 */ J3DAnmTexPattern* m_head_tex_pattern;
+ /* 0x74C */ mDoExt_btpAnm mBtpAnm;
+ /* 0x760 */ u8 mBlinkFrame;
+ /* 0x761 */ u8 field_0x761[0x762 - 0x761];
+ /* 0x762 */ s16 mBlinkTimer;
+ /* 0x764 */ cXyz mEyePos;
+ /* 0x770 */ cXyz mAttPos;
+ /* 0x77C */ u8 mAttnSetCount;
+ /* 0x77D */ u8 field_0x77D[0x780 - 0x77D];
+ /* 0x780 */ cXyz mStoolLookPos;
+ /* 0x78C */ s16 mMaxHeadTurnVelocity;
+ /* 0x78E */ u8 field_0x78E[0x790 - 0x78E];
+ /* 0x790 */ csXyz field_0x790;
+ /* 0x796 */ u8 field_0x796[0x798 - 0x796];
+ /* 0x798 */ s8 field_0x798;
+ /* 0x799 */ u8 field_0x799[0x79C - 0x799];
+ /* 0x79C */ f32 mTargetSpeed;
+ /* 0x7A0 */ cXyz mStoolPos;
+ /* 0x7AC */ cXyz mSitPos;
+ /* 0x7B8 */ cXyz mWalkToStoolPos;
+ /* 0x7C4 */ cXyz mDeltaPos;
+ /* 0x7D0 */ u8 field_0x7D0[0x7DC - 0x7D0];
+ /* 0x7DC */ cXyz mParticlePos;
+ /* 0x7E8 */ bool mHasAttention;
+ /* 0x7E9 */ bool mTalkingNearJail;
+ /* 0x7EA */ u8 field_0x7EA[0x7F1 - 0x7EA];
+ /* 0x7F1 */ bool mHasTalkedNearJail;
+ /* 0x7F2 */ bool mHasEnteredSitRadius;
+ /* 0x7F3 */ s8 mJumpLandingTimer;
+ /* 0x7F4 */ u8 field_0x7F4[0x7F6 - 0x7F4];
+ /* 0x7F6 */ s8 mTexPatternNum;
+ /* 0x7F7 */ s8 mTexPatternNumIdx;
+ /* 0x7F8 */ s8 mBckIdx;
+ /* 0x7F9 */ s8 mAnmPrmIdx;
+ /* 0x7FA */ s8 mOldAnmPrmIdx;
+ /* 0x7FB */ s8 mEventIdx;
+ /* 0x7FC */ u8 mType;
+ /* 0x7FD */ u8 field_0x7FD[0x804 - 0x7FD];
+ /* 0x804 */ daObjSmplbg::Act_c* m_tower_actor;
+ /* 0x808 */ bool field_0x808;
+ /* 0x809 */ bool field_0x809;
+ /* 0x80A */ u8 field_0x80A[0x80B - 0x80A];
+ /* 0x80B */ bool field_0x80B;
+ /* 0x80C */ u8 field_0x80C;
+ /* 0x80D */ bool field_0x80D;
+ /* 0x80E */ bool field_0x80E;
+ /* 0x80F */ bool field_0x80F;
+ /* 0x810 */ bool field_0x810;
+ /* 0x811 */ bool field_0x811;
+ /* 0x812 */ bool field_0x812;
+ /* 0x813 */ bool field_0x813;
+ /* 0x814 */ bool field_0x814;
+ /* 0x815 */ u8 field_0x815[0x81C - 0x815];
+}; // Size: 0x81C
#endif /* D_A_NPC_TC_H */
diff --git a/include/d/actor/d_a_obj_smplbg.h b/include/d/actor/d_a_obj_smplbg.h
index 138e7113..9fee2147 100644
--- a/include/d/actor/d_a_obj_smplbg.h
+++ b/include/d/actor/d_a_obj_smplbg.h
@@ -33,9 +33,9 @@ namespace daObjSmplbg {
static const Attr_c M_attr[];
inline const Attr_c& attr() const { return M_attr[mType]; }
- void isStop() {}
- void offStop() {}
- void onStop() {}
+ bool isStop() { return mIsStop; }
+ void offStop() { mIsStop = false; }
+ void onStop() { mIsStop = true; }
int prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W , PRM_TYPE_S);}
virtual BOOL CreateHeap();
@@ -53,7 +53,7 @@ namespace daObjSmplbg {
/* 0x2C8 */ request_of_phase_process_class mPhs;
/* 0x2D0 */ J3DModel* mpModel;
/* 0x2D4 */ int mType;
- /* 0x2D8 */ u8 field_0x2D8;
+ /* 0x2D8 */ bool mIsStop;
/* 0x2D9 */ u8 field_0x2D9[0x2DC - 0x2D9];
}; // Size: 0x2DC
};
diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h
index 7209c51c..69f2e1f8 100644
--- a/include/d/d_com_inf_game.h
+++ b/include/d/d_com_inf_game.h
@@ -1108,6 +1108,10 @@ inline BOOL dComIfGs_isCollectMapTriforce(int i_no) {
return g_dComIfG_gameInfo.save.getPlayer().getMap().isTriforce(i_no - 1);
}
+inline void dComIfGs_onCollectMapTriforce(int i_no) {
+ g_dComIfG_gameInfo.save.getPlayer().getMap().onTriforce(i_no -1);
+}
+
inline void dComIfGs_offCollectMapTriforce(int i_no) {
g_dComIfG_gameInfo.save.getPlayer().getMap().offTriforce(i_no - 1);
}
diff --git a/include/d/d_npc.h b/include/d/d_npc.h
index 6db4ab71..be3d1441 100644
--- a/include/d/d_npc.h
+++ b/include/d/d_npc.h
@@ -161,6 +161,10 @@ public:
return mpEvtStaffName;
}
+ int getNowCut() {
+ return mCurActIdx;
+ }
+
bool getAttnFlag() {
return mbAttention;
}
@@ -169,6 +173,14 @@ public:
mbAttention = flag;
}
+ void setAttnNoTurnFlag(bool flag) {
+ mbNoTurn = flag;
+ }
+
+ f32 getMoveSpeed() {
+ return mSpeed;
+ }
+
cXyz getAttnPos() {
return mPos;
}
diff --git a/include/d/d_snap.h b/include/d/d_snap.h
index 340fa134..5f677ad6 100644
--- a/include/d/d_snap.h
+++ b/include/d/d_snap.h
@@ -126,10 +126,10 @@ enum {
/* 0x76 */ DSNAP_TYPE_UNK76,
/* 0x77 */ DSNAP_TYPE_UNK77,
/* 0x78 */ DSNAP_TYPE_UNK78,
- /* 0x79 */ DSNAP_TYPE_UNK79,
- /* 0x7A */ DSNAP_TYPE_UNK7A,
- /* 0x7B */ DSNAP_TYPE_UNK7B,
- /* 0x7C */ DSNAP_TYPE_UNK7C,
+ /* 0x79 */ DSNAP_TYPE_TC_NORMAL,
+ /* 0x7A */ DSNAP_TYPE_TC_RED,
+ /* 0x7B */ DSNAP_TYPE_TC_BLUE,
+ /* 0x7C */ DSNAP_TYPE_TC_WHITE,
/* 0x7D */ DSNAP_TYPE_UNK7D,
/* 0x7E */ DSNAP_TYPE_ROTEN,
/* 0x7F */ DSNAP_TYPE_UNK7F,
diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h
index 012abe0d..d0e433d5 100644
--- a/include/m_Do/m_Do_ext.h
+++ b/include/m_Do/m_Do_ext.h
@@ -370,7 +370,7 @@ public:
void changeAnm(J3DAnmTransform* bckAnm) { mpAnm = bckAnm; }
J3DAnmTransform* getAnm() { return mpAnm; }
f32 getMorfRatio() { return mCurMorf; }
- BOOL isLoop() { return mFrameCtrl.checkState(J3DFrameCtrl::STATE_LOOP_E); }
+ bool isLoop() { return mFrameCtrl.checkState(J3DFrameCtrl::STATE_LOOP_E); }
BOOL isMorf() { return mCurMorf < 1.0f; }
private: