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 {
710public:
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
103214public:
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 */
0 commit comments