Skip to content

Commit dcf4862

Browse files
authored
D_a_npc_tc matching for retail (#930)
* progress * code matching non-demo * cleanup for d_a_npc_tc and d_a_obj_smplbg
1 parent d54d983 commit dcf4862

File tree

13 files changed

+2853
-310
lines changed

13 files changed

+2853
-310
lines changed

configure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1667,7 +1667,7 @@ def EquivalentFor(*versions):
16671667
ActorRel(Matching, "d_a_npc_rsh1"),
16681668
ActorRel(NonMatching, "d_a_npc_sarace"),
16691669
ActorRel(NonMatching, "d_a_npc_sv"),
1670-
ActorRel(NonMatching, "d_a_npc_tc"),
1670+
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_npc_tc"),
16711671
ActorRel(NonMatching, "d_a_npc_tt"),
16721672
ActorRel(NonMatching, "d_a_npc_uk"),
16731673
ActorRel(NonMatching, "d_a_npc_ym1"),

include/d/actor/d_a_npc_tc.h

Lines changed: 223 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,143 @@
22
#define D_A_NPC_TC_H
33

44
#include "f_op/f_op_actor.h"
5+
#include "d/d_npc.h"
56

6-
class daNpc_Tc_c : public fopAc_ac_c {
7+
namespace daObjSmplbg { class Act_c; };
8+
9+
class daNpc_Tc_c : public fopNpc_npc_c {
710
public:
8-
void getAttentionBasePos() {}
9-
void getEyePos() {}
10-
void incAttnSetCount() {}
11-
void setAction(int (daNpc_Tc_c::*)(void*), void*) {}
1211

13-
void _searchTower(fopAc_ac_c*);
14-
void initTexPatternAnm(bool);
12+
enum Status {
13+
STATUS_WAIT = 1,
14+
STATUS_SIT = 2,
15+
STATUS_TALK = 3,
16+
STATUS_JUMP = 4,
17+
STATUS_WALK_TO_JAIL = 5,
18+
STATUS_TALK_NEAR_JAIL = 6,
19+
STATUS_WAIT_NEAR_JAIL = 7,
20+
STATUS_WALK_TO_STOOL = 8,
21+
STATUS_SIT_TO_STOOL = 9,
22+
STATUS_DEMO_JUMP = 10,
23+
STATUS_DEMO_RESCUE = 11,
24+
STATUS_DEMO_TALK = 12,
25+
STATUS_PAY_RUPEE = 13,
26+
STATUS_DEMO_PAY_RUPEE = 14,
27+
STATUS_GET_RUPEE = 15,
28+
STATUS_DEMO_GET_RUPEE = 16,
29+
STATUS_MONUMENT_COMPLETE = 17,
30+
STATUS_DEMO_MONUMENT_COMPLETE = 18,
31+
};
32+
33+
enum ActionStatus {
34+
ACTION_STARTING = 0,
35+
ACTION_ONGOING = 1,
36+
ACTION_ENDING = -1,
37+
};
38+
39+
enum Type {
40+
TYPE_NORMAL2 = 0,
41+
TYPE_RED = 1,
42+
TYPE_WHITE = 2,
43+
TYPE_BLUE = 3,
44+
TYPE_NORMAL = 4,
45+
};
46+
47+
enum BckIdx {
48+
BCK_IDX_WAIT01 = 0,
49+
BCK_IDX_WAIT03 = 1,
50+
BCK_IDX_WAIT02 = 2,
51+
BCK_IDX_TALK01 = 3,
52+
BCK_IDX_WALK01 = 4,
53+
BCK_IDX_JAMP_A = 5,
54+
BCK_IDX_JAMP_B = 6,
55+
BCK_IDX_JAMP_C = 7,
56+
BCK_IDX_GUARD = 8,
57+
BCK_IDX_JTBT = 9,
58+
BCK_IDX_HAPPY = 10,
59+
BCK_IDX_DANCE01 = 11,
60+
BCK_IDX_DANCE02 = 12,
61+
BCK_IDX_GET = 13,
62+
BCK_IDX_MAWASU = 14,
63+
BCK_IDX_WAIT04 = 15,
64+
BCK_IDX_TALK02 = 16,
65+
};
66+
67+
enum AnmPrmIdx {
68+
ANM_PRM_IDX_NONE = 0,
69+
ANM_PRM_IDX_WAIT01 = 1,
70+
ANM_PRM_IDX_WAIT03 = 2,
71+
ANM_PRM_IDX_WAIT02 = 3,
72+
ANM_PRM_IDX_TALK01 = 4,
73+
ANM_PRM_IDX_WALK01 = 5,
74+
ANM_PRM_IDX_JAMP_A = 6,
75+
ANM_PRM_IDX_JAMP_B = 7,
76+
ANM_PRM_IDX_JAMP_C1 = 8,
77+
ANM_PRM_IDX_JAMP_C2 = 9,
78+
ANM_PRM_IDX_GUARD = 10,
79+
ANM_PRM_IDX_JTBT = 11,
80+
ANM_PRM_IDX_HAPPY = 12,
81+
ANM_PRM_IDX_DANCE01 = 13,
82+
ANM_PRM_IDX_DANCE02 = 14,
83+
ANM_PRM_IDX_GET = 15,
84+
ANM_PRM_IDX_HAPPY2 = 16, // ANM_PRM_IDX_HAPPY gets set to this
85+
ANM_PRM_IDX_DANCE01_TO_TALK01 = 17,
86+
ANM_PRM_IDX_DANCE02_TO_WAIT03 = 18,
87+
ANM_PRM_IDX_MAWASU = 19,
88+
ANM_PRM_IDX_WAIT04 = 20,
89+
ANM_PRM_IDX_TALK02 = 21,
90+
ANM_PRM_IDX_TALK01_WAIT01 = 22, // loops 3x then -> WAIT01
91+
ANM_PRM_IDX_TALK01_TALK02 = 23, // loops 5x then -> TALK02
92+
};
93+
94+
typedef int (daNpc_Tc_c::*ActionFunc)(void*);
95+
daNpc_Tc_c();
96+
97+
cXyz& getAttentionBasePos() { return mAttPos; }
98+
cXyz& getEyePos() { return mEyePos; }
99+
100+
void incAttnSetCount() {
101+
if (mAttnSetCount != 0xff) {
102+
mAttnSetCount++;
103+
}
104+
}
105+
106+
BOOL setAction(ActionFunc actionFunc, void* arg) {
107+
if (mCurrActionFunc != actionFunc) {
108+
if (mCurrActionFunc != NULL) {
109+
mActionStatus = ACTION_ENDING;
110+
(this->*mCurrActionFunc)(arg);
111+
}
112+
mCurrActionFunc = actionFunc;
113+
mActionStatus = ACTION_STARTING;
114+
(this->*mCurrActionFunc)(arg);
115+
}
116+
return TRUE;
117+
}
118+
119+
fopAc_ac_c* _searchTower(fopAc_ac_c*);
120+
BOOL initTexPatternAnm(bool);
15121
void playTexPatternAnm();
16-
void smoke_set(float, float, float, float, float);
122+
void smoke_set(f32, f32, f32, f32, f32);
17123
void setAnm();
18124
void setTexAnm();
19-
void chkAttention(cXyz, short);
125+
bool chkAttention(cXyz, s16);
20126
void eventOrder();
21127
void checkOrder();
22-
void existTcMonument();
23-
void anmAtr(unsigned short);
128+
bool existTcMonument();
129+
void anmAtr(u16);
24130
void stopTower();
25131
void startTower();
26-
void next_msgStatusBlue(unsigned long*);
27-
void next_msgStatusNormal(unsigned long*);
28-
void next_msgStatus(unsigned long*);
29-
void setFirstMsg(bool*, unsigned long, unsigned long);
30-
void getMsgNormal();
31-
void getMsgBlue();
32-
void getMsg();
132+
u16 next_msgStatusBlue(u32*);
133+
u16 next_msgStatusNormal(u32*);
134+
u16 next_msgStatus(u32*);
135+
u32 setFirstMsg(bool*, u32, u32);
136+
u32 getMsgNormal();
137+
u32 getMsgBlue();
138+
u32 getMsg();
33139
void getArg();
34140
void createInit();
35-
void searchStoolPos(void*, void*);
141+
static void* searchStoolPos(void*, void*);
36142
void setAttention();
37143
void calcMove();
38144
void lookBack();
@@ -54,32 +160,37 @@ class daNpc_Tc_c : public fopAc_ac_c {
54160
void statusDemoJump();
55161
void statusDemoRescue();
56162
void statusDemoTalk();
57-
void help_action(void*);
58-
void wait_action(void*);
163+
BOOL help_action(void*);
164+
BOOL wait_action(void*);
59165
void calc_sitpos();
60166
void set_mtx();
61167
BOOL _draw();
62168
void setTower();
63169
BOOL _execute();
64170
BOOL _delete();
65-
void isCreate();
171+
bool isCreate();
66172
cPhs_State _create();
67-
void _createHeap();
68-
void next_msgStatusNormal2(unsigned long*);
69-
void getMsgNormal2();
70-
void setRupeeSizeMsg();
71-
void existUnknownCollectMap();
72-
void analysisCollectMap();
73-
void existKnownCollectMap();
74-
void next_msgStatusWhite(unsigned long*);
75-
void getMsgWhite();
76-
void next_msgStatusRed(unsigned long*);
77-
void setFinishMsg();
78-
void getMsgRed();
79-
void checkMonumentFee(unsigned short, unsigned short);
80-
void checkAllMonumentFee();
81-
void checkAllMonumentPay();
82-
void checkMonumentPay(unsigned short, unsigned short);
173+
BOOL _createHeap();
174+
u16 next_msgStatusNormal2(u32*);
175+
u32 getMsgNormal2();
176+
#if VERSION != VERSION_DEMO
177+
u32 setRupeeSizeMsg();
178+
#endif
179+
bool existUnknownCollectMap();
180+
int analysisCollectMap();
181+
bool existKnownCollectMap();
182+
u16 next_msgStatusWhite(u32*);
183+
u32 getMsgWhite();
184+
u16 next_msgStatusRed(u32*);
185+
u32 setFinishMsg();
186+
u32 getMsgRed();
187+
bool checkMonumentFee(u16, u16);
188+
bool checkAllMonumentFee();
189+
#if VERSION == VERSION_DEMO
190+
bool checkOneMonumentGet();
191+
#endif
192+
int checkAllMonumentPay();
193+
bool checkMonumentPay(u16, u16);
83194
void cutProc();
84195
void cutSitToJumpStart(int);
85196
void cutSitToJumpProc(int);
@@ -101,15 +212,78 @@ class daNpc_Tc_c : public fopAc_ac_c {
101212
void cutPayProc(int);
102213

103214
public:
104-
/* Place member variables here */
105-
};
106-
107-
class daNpc_Tc_HIO_c {
108-
public:
109-
daNpc_Tc_HIO_c();
110-
111-
public:
112-
/* Place member variables here */
113-
};
114-
215+
/* 0x6C4 */ u8 field_0x6C4[0x6C8 - 0x6C4];
216+
/* 0x6C8 */ BOOL field_0x6C8;
217+
/* 0x6CC */ u8 mJtbtTimer;
218+
/* 0x6CD */ u8 mTalk01Wait01Timer;
219+
/* 0x6CE */ u8 mTalk01Talk02Timer;
220+
/* 0x6CF */ s8 mStatus;
221+
/* 0x6D0 */ ActionFunc mCurrActionFunc;
222+
/* 0x6DC */ s8 mActionStatus;
223+
/* 0x6DD */ u8 field_0x6DD[0x6E0 - 0x6DD];
224+
/* 0x6E0 */ cXyz mSmokePos;
225+
/* 0x6EC */ csXyz mSmokeAngle;
226+
/* 0x6F2 */ u8 field_0x6F2[0x6F4 - 0x6F2];
227+
/* 0x6F4 */ dPa_smokeEcallBack mSmokeCallBack;
228+
/* 0x714 */ dPa_followEcallBack field_0x714;
229+
/* 0x728 */ dPa_followEcallBack field_0x728;
230+
/* 0x73C */ request_of_phase_process_class mPhs;
231+
/* 0x744 */ u32 mShadowId;
232+
#if VERSION == VERSION_DEMO
233+
/* 0x748 */ J3DModel* mpModel;
234+
#endif
235+
/* 0x748 */ J3DAnmTexPattern* m_head_tex_pattern;
236+
/* 0x74C */ mDoExt_btpAnm mBtpAnm;
237+
/* 0x760 */ u8 mBlinkFrame;
238+
/* 0x761 */ u8 field_0x761[0x762 - 0x761];
239+
/* 0x762 */ s16 mBlinkTimer;
240+
/* 0x764 */ cXyz mEyePos;
241+
/* 0x770 */ cXyz mAttPos;
242+
/* 0x77C */ u8 mAttnSetCount;
243+
/* 0x77D */ u8 field_0x77D[0x780 - 0x77D];
244+
/* 0x780 */ cXyz mStoolLookPos;
245+
/* 0x78C */ s16 mMaxHeadTurnVelocity;
246+
/* 0x78E */ u8 field_0x78E[0x790 - 0x78E];
247+
/* 0x790 */ csXyz field_0x790;
248+
/* 0x796 */ u8 field_0x796[0x798 - 0x796];
249+
/* 0x798 */ s8 field_0x798;
250+
/* 0x799 */ u8 field_0x799[0x79C - 0x799];
251+
/* 0x79C */ f32 mTargetSpeed;
252+
/* 0x7A0 */ cXyz mStoolPos;
253+
/* 0x7AC */ cXyz mSitPos;
254+
/* 0x7B8 */ cXyz mWalkToStoolPos;
255+
/* 0x7C4 */ cXyz mDeltaPos;
256+
/* 0x7D0 */ u8 field_0x7D0[0x7DC - 0x7D0];
257+
/* 0x7DC */ cXyz mParticlePos;
258+
/* 0x7E8 */ bool mHasAttention;
259+
/* 0x7E9 */ bool mTalkingNearJail;
260+
/* 0x7EA */ u8 field_0x7EA[0x7F1 - 0x7EA];
261+
/* 0x7F1 */ bool mHasTalkedNearJail;
262+
/* 0x7F2 */ bool mHasEnteredSitRadius;
263+
/* 0x7F3 */ s8 mJumpLandingTimer;
264+
/* 0x7F4 */ u8 field_0x7F4[0x7F6 - 0x7F4];
265+
/* 0x7F6 */ s8 mTexPatternNum;
266+
/* 0x7F7 */ s8 mTexPatternNumIdx;
267+
/* 0x7F8 */ s8 mBckIdx;
268+
/* 0x7F9 */ s8 mAnmPrmIdx;
269+
/* 0x7FA */ s8 mOldAnmPrmIdx;
270+
/* 0x7FB */ s8 mEventIdx;
271+
/* 0x7FC */ u8 mType;
272+
/* 0x7FD */ u8 field_0x7FD[0x804 - 0x7FD];
273+
/* 0x804 */ daObjSmplbg::Act_c* m_tower_actor;
274+
/* 0x808 */ bool field_0x808;
275+
/* 0x809 */ bool field_0x809;
276+
/* 0x80A */ u8 field_0x80A[0x80B - 0x80A];
277+
/* 0x80B */ bool field_0x80B;
278+
/* 0x80C */ u8 field_0x80C;
279+
/* 0x80D */ bool field_0x80D;
280+
/* 0x80E */ bool field_0x80E;
281+
/* 0x80F */ bool field_0x80F;
282+
/* 0x810 */ bool field_0x810;
283+
/* 0x811 */ bool field_0x811;
284+
/* 0x812 */ bool field_0x812;
285+
/* 0x813 */ bool field_0x813;
286+
/* 0x814 */ bool field_0x814;
287+
/* 0x815 */ u8 field_0x815[0x81C - 0x815];
288+
}; // Size: 0x81C
115289
#endif /* D_A_NPC_TC_H */

include/d/actor/d_a_obj_smplbg.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ namespace daObjSmplbg {
3333
static const Attr_c M_attr[];
3434
inline const Attr_c& attr() const { return M_attr[mType]; }
3535

36-
void isStop() {}
37-
void offStop() {}
38-
void onStop() {}
36+
bool isStop() { return mIsStop; }
37+
void offStop() { mIsStop = false; }
38+
void onStop() { mIsStop = true; }
3939
int prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W , PRM_TYPE_S);}
4040

4141
virtual BOOL CreateHeap();
@@ -53,7 +53,7 @@ namespace daObjSmplbg {
5353
/* 0x2C8 */ request_of_phase_process_class mPhs;
5454
/* 0x2D0 */ J3DModel* mpModel;
5555
/* 0x2D4 */ int mType;
56-
/* 0x2D8 */ u8 field_0x2D8;
56+
/* 0x2D8 */ bool mIsStop;
5757
/* 0x2D9 */ u8 field_0x2D9[0x2DC - 0x2D9];
5858
}; // Size: 0x2DC
5959
};

include/d/d_com_inf_game.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,10 @@ inline BOOL dComIfGs_isCollectMapTriforce(int i_no) {
11081108
return g_dComIfG_gameInfo.save.getPlayer().getMap().isTriforce(i_no - 1);
11091109
}
11101110

1111+
inline void dComIfGs_onCollectMapTriforce(int i_no) {
1112+
g_dComIfG_gameInfo.save.getPlayer().getMap().onTriforce(i_no -1);
1113+
}
1114+
11111115
inline void dComIfGs_offCollectMapTriforce(int i_no) {
11121116
g_dComIfG_gameInfo.save.getPlayer().getMap().offTriforce(i_no - 1);
11131117
}

include/d/d_npc.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ class dNpc_EventCut_c {
161161
return mpEvtStaffName;
162162
}
163163

164+
int getNowCut() {
165+
return mCurActIdx;
166+
}
167+
164168
bool getAttnFlag() {
165169
return mbAttention;
166170
}
@@ -169,6 +173,14 @@ class dNpc_EventCut_c {
169173
mbAttention = flag;
170174
}
171175

176+
void setAttnNoTurnFlag(bool flag) {
177+
mbNoTurn = flag;
178+
}
179+
180+
f32 getMoveSpeed() {
181+
return mSpeed;
182+
}
183+
172184
cXyz getAttnPos() {
173185
return mPos;
174186
}

include/d/d_snap.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ enum {
126126
/* 0x76 */ DSNAP_TYPE_UNK76,
127127
/* 0x77 */ DSNAP_TYPE_UNK77,
128128
/* 0x78 */ DSNAP_TYPE_UNK78,
129-
/* 0x79 */ DSNAP_TYPE_UNK79,
130-
/* 0x7A */ DSNAP_TYPE_UNK7A,
131-
/* 0x7B */ DSNAP_TYPE_UNK7B,
132-
/* 0x7C */ DSNAP_TYPE_UNK7C,
129+
/* 0x79 */ DSNAP_TYPE_TC_NORMAL,
130+
/* 0x7A */ DSNAP_TYPE_TC_RED,
131+
/* 0x7B */ DSNAP_TYPE_TC_BLUE,
132+
/* 0x7C */ DSNAP_TYPE_TC_WHITE,
133133
/* 0x7D */ DSNAP_TYPE_UNK7D,
134134
/* 0x7E */ DSNAP_TYPE_ROTEN,
135135
/* 0x7F */ DSNAP_TYPE_UNK7F,

0 commit comments

Comments
 (0)