|
11 | 11 | * @details |
12 | 12 | * |
13 | 13 | */ |
14 | | -class daNpcShad_c : public fopAc_ac_c { |
| 14 | + |
| 15 | +struct daNpcShad_HIOParam { |
| 16 | + /* 0x00 */ daNpcF_HIOParam common; |
| 17 | + /* 0x6C */ f32 traveling_speed; // 走行速度 (Traveling Speed) |
| 18 | +}; |
| 19 | + |
| 20 | +class daNpcShad_Param_c: public JORReflexible { |
15 | 21 | public: |
| 22 | + /* 80AE1F70 */ virtual ~daNpcShad_Param_c() {} |
| 23 | + |
| 24 | +#ifdef DEBUG |
| 25 | + void genMessage(JORMContext*); |
| 26 | +#endif |
| 27 | + |
| 28 | + static const daNpcShad_HIOParam m; |
| 29 | +}; |
| 30 | + |
| 31 | +class daNpcShad_c : public daNpcF_c { |
| 32 | +public: |
| 33 | + typedef bool (daNpcShad_c::*ActionFn)(void*); |
| 34 | + typedef BOOL (daNpcShad_c::*EventFn)(int); |
| 35 | + |
| 36 | + enum Animation { |
| 37 | + /* 0x00 */ ANM_NONE, |
| 38 | + /* 0x01 */ ANM_F_TALK_A, |
| 39 | + /* 0x02 */ ANM_F_HAPPY, |
| 40 | + /* 0x03 */ ANM_F_ANGER, |
| 41 | + /* 0x04 */ ANM_F_DISCOURAGED, |
| 42 | + /* 0x05 */ ANM_F_CHANT, |
| 43 | + /* 0x06 */ ANM_F_KOMON, |
| 44 | + /* 0x07 */ ANM_F_SURPRISE, |
| 45 | + /* 0x08 */ ANM_FH_SURPRISE, |
| 46 | + /* 0x09 */ ANM_FH_KOMON, |
| 47 | + /* 0x0A */ ANM_FH_HAPPY, |
| 48 | + /* 0x0B */ ANM_FH_ANGER, |
| 49 | + /* 0x0C */ ANM_FH_DISCOURAGED, |
| 50 | + /* 0x0D */ ANM_WAIT_A, |
| 51 | + /* 0x0E */ ANM_TALK_A, |
| 52 | + /* 0x0F */ ANM_STEP, |
| 53 | + /* 0x10 */ ANM_STEPB, |
| 54 | + /* 0x11 */ ANM_BOOK_WAIT, |
| 55 | + /* 0x12 */ ANM_BOOK_TALK_A, |
| 56 | + /* 0x13 */ ANM_HI, |
| 57 | + /* 0x14 */ ANM_RUN_A, |
| 58 | + /* 0x15 */ ANM_WALK_A, |
| 59 | + /* 0x16 */ ANM_SIT_A, |
| 60 | + /* 0x17 */ ANM_LOOKBACK, |
| 61 | + /* 0x18 */ ANM_CHANT, |
| 62 | + /* 0x19 */ ANM_DISCOURAGED, |
| 63 | + /* 0x1A */ ANM_DISCOURAGED_WAIT, |
| 64 | + /* 0x1B */ ANM_SITTALK_A, |
| 65 | + /* 0x1C */ ANM_LOOK, |
| 66 | + /* 0x1D */ ANM_LOOK_WAIT, |
| 67 | + /* 0x1E */ ANM_SAD_WALK, |
| 68 | + /* 0x1F */ ANM_LOOKUP, |
| 69 | + /* 0x20 */ ANM_TAKE_KOMON, |
| 70 | + /* 0x21 */ ANM_READ_KOMON, |
| 71 | + /* 0x22 */ ANM_SURPRISE, |
| 72 | + /* 0x23 */ ANM_SURPRISE_WAIT, |
| 73 | + }; |
| 74 | + |
| 75 | + enum Expression { |
| 76 | + /* 0x0 */ EXPR_TALK_A, |
| 77 | + /* 0x1 */ EXPR_HAPPY, |
| 78 | + /* 0x2 */ EXPR_ANGER, |
| 79 | + /* 0x3 */ EXPR_DISCOURAGED, |
| 80 | + /* 0x4 */ EXPR_KOMON, |
| 81 | + /* 0x5 */ EXPR_SURPRISE, |
| 82 | + /* 0x6 */ EXPR_H_SURPRISE, |
| 83 | + /* 0x7 */ EXPR_H_KOMON, |
| 84 | + /* 0x8 */ EXPR_H_HAPPY, |
| 85 | + /* 0x9 */ EXPR_H_ANGER, |
| 86 | + /* 0xA */ EXPR_H_DISCOURAGED, |
| 87 | + /* 0xB */ EXPR_CHANT, |
| 88 | + /* 0xC */ EXPR_NONE, |
| 89 | + }; |
| 90 | + |
| 91 | + enum Expression_BTP { |
| 92 | + /* 0x0 */ EXPR_BTP_SHAD, |
| 93 | + /* 0x1 */ EXPR_BTP_F_ANGER, |
| 94 | + /* 0x2 */ EXPR_BTP_F_DISCOURAGED, |
| 95 | + /* 0x3 */ EXPR_BTP_F_HAPPY, |
| 96 | + /* 0x4 */ EXPR_BTP_F_KOMON, |
| 97 | + /* 0x5 */ EXPR_BTP_F_SURPRISE, |
| 98 | + /* 0x6 */ EXPR_BTP_FH_SURPRISE, |
| 99 | + /* 0x7 */ EXPR_BTP_FH_KOMON, |
| 100 | + /* 0x8 */ EXPR_BTP_FH_ANGER, |
| 101 | + /* 0x9 */ EXPR_BTP_FH_DISCOURAGED, |
| 102 | + /* 0xA */ EXPR_BTP_FH_HAPPY |
| 103 | + }; |
| 104 | + |
| 105 | + enum Motion { |
| 106 | + /* 0x00 */ MOT_WAIT_A, |
| 107 | + /* 0x01 */ MOT_BOOK_TALK_A, |
| 108 | + /* 0x02 */ MOT_BOOK_WAIT, |
| 109 | + /* 0x03 */ MOT_HI, |
| 110 | + /* 0x04 */ MOT_SIT_A, |
| 111 | + /* 0x05 */ MOT_LOOKBACK, |
| 112 | + /* 0x06 */ MOT_DISCOURAGED, |
| 113 | + /* 0x07 */ MOT_DISCOURAGED_WAIT, |
| 114 | + /* 0x08 */ MOT_TALK_A, |
| 115 | + /* 0x09 */ MOT_SITTALK_A, |
| 116 | + /* 0x0A */ MOT_LOOK, |
| 117 | + /* 0x0B */ MOT_TAKE_KOMON, |
| 118 | + /* 0x0C */ MOT_READ_KOMON, |
| 119 | + /* 0x0D */ MOT_LOOK_WAIT, |
| 120 | + /* 0x0E */ MOT_SURPRISE, |
| 121 | + /* 0x0F */ MOT_SURPRISE_WAIT, |
| 122 | + /* 0x10 */ MOT_LOOKUP, |
| 123 | + /* 0x11 */ MOT_SAD_WALK, |
| 124 | + /* 0x12 */ MOT_CHANT, |
| 125 | + /* 0x13 */ MOT_RUN_A, |
| 126 | + /* 0x14 */ MOT_WALK_A, |
| 127 | + /* 0x15 */ MOT_STEP, |
| 128 | + /* 0x16 */ MOT_STEPB, |
| 129 | + }; |
| 130 | + |
16 | 131 | /* 80AD820C */ daNpcShad_c(); |
17 | 132 | /* 80AD8420 */ ~daNpcShad_c(); |
18 | | - /* 80AD8620 */ void Create(); |
19 | | - /* 80AD8B60 */ void CreateHeap(); |
20 | | - /* 80AD90E0 */ void Delete(); |
21 | | - /* 80AD9114 */ void Execute(); |
22 | | - /* 80AD9138 */ void Draw(); |
23 | | - /* 80AD9280 */ void ctrlJoint(J3DJoint*, J3DModel*); |
24 | | - /* 80AD944C */ void createHeapCallBack(fopAc_ac_c*); |
25 | | - /* 80AD946C */ void ctrlJointCallBack(J3DJoint*, int); |
26 | | - /* 80AD94B8 */ void setExpressionAnm(int, bool); |
27 | | - /* 80AD974C */ void setExpressionBtp(int); |
28 | | - /* 80AD982C */ bool setMotionAnm(int, f32); |
| 133 | + /* 80AD8620 */ cPhs__Step Create(); |
| 134 | + /* 80AD8B60 */ int CreateHeap(); |
| 135 | + /* 80AD90E0 */ int Delete(); |
| 136 | + /* 80AD9114 */ int Execute(); |
| 137 | + /* 80AD9138 */ int Draw(); |
| 138 | + /* 80AD9280 */ int ctrlJoint(J3DJoint*, J3DModel*); |
| 139 | + /* 80AD944C */ static int createHeapCallBack(fopAc_ac_c*); |
| 140 | + /* 80AD946C */ static int ctrlJointCallBack(J3DJoint*, int); |
| 141 | + /* 80AD94B8 */ bool setExpressionAnm(int, bool); |
| 142 | + /* 80AD974C */ bool setExpressionBtp(int); |
| 143 | + /* 80AD982C */ void setMotionAnm(int, f32); |
29 | 144 | /* 80AD99B4 */ void reset(); |
30 | | - /* 80AD9C0C */ void setWaitAction(); |
31 | | - /* 80AD9E04 */ void getPathPoint(u8, int, Vec*); |
32 | | - /* 80AD9E90 */ void isSneaking(); |
33 | | - /* 80AD9F00 */ void wait_type0(void*); |
34 | | - /* 80ADA630 */ void setMotion(int, f32, int); |
| 145 | + /* 80AD9C0C */ inline void setWaitAction(); |
| 146 | + /* 80AD9E04 */ inline bool getPathPoint(u8, int, Vec*); |
| 147 | + /* 80AD9E90 */ inline bool isSneaking(); |
| 148 | + /* 80AD9F00 */ bool wait_type0(void*); |
| 149 | + /* 80ADA630 */ void setMotion(int, f32, BOOL); |
35 | 150 | /* 80ADA674 */ void setExpression(int, f32); |
36 | | - /* 80ADA6A0 */ void wait_type1(void*); |
37 | | - /* 80ADB428 */ void wait_type2(void*); |
38 | | - /* 80ADB628 */ void talk(void*); |
39 | | - /* 80ADBEA8 */ void demo(void*); |
40 | | - /* 80ADC3DC */ void leave(void*); |
41 | | - /* 80ADC700 */ void EvCut_Introduction(int); |
42 | | - /* 80ADC800 */ void EvCut_Meeting(int); |
43 | | - /* 80ADCAD8 */ void EvCut_ToChantSpell1(int); |
44 | | - /* 80ADD720 */ void EvCut_ToChantSpell2(int); |
45 | | - /* 80ADE47C */ void EvCut_ToChantSpell2Skip(int); |
46 | | - /* 80ADE5F8 */ void EvCut_DiscoveryCannon(int); |
47 | | - /* 80ADED68 */ void EvCut_DiscoveryCannonSkip(int); |
48 | | - /* 80ADEEE4 */ void EvCut_Disappear(int); |
49 | | - /* 80ADF810 */ void EvCut_DisappearSkip(int); |
50 | | - /* 80ADF8DC */ void EvCut_CallBack(int); |
51 | | - /* 80ADFB70 */ void EvCut_WiretapSponsor(int); |
52 | | - /* 80ADFE74 */ void EvCut_WiretapEntrant(int); |
| 151 | + /* 80ADA6A0 */ bool wait_type1(void*); |
| 152 | + /* 80ADB428 */ bool wait_type2(void*); |
| 153 | + /* 80ADB628 */ bool talk(void*); |
| 154 | + /* 80ADBEA8 */ bool demo(void*); |
| 155 | + /* 80ADC3DC */ bool leave(void*); |
| 156 | + /* 80ADC700 */ BOOL EvCut_Introduction(int); |
| 157 | + /* 80ADC800 */ BOOL EvCut_Meeting(int); |
| 158 | + /* 80ADCAD8 */ BOOL EvCut_ToChantSpell1(int); |
| 159 | + /* 80ADD720 */ BOOL EvCut_ToChantSpell2(int); |
| 160 | + /* 80ADE47C */ BOOL EvCut_ToChantSpell2Skip(int); |
| 161 | + /* 80ADE5F8 */ BOOL EvCut_DiscoveryCannon(int); |
| 162 | + /* 80ADED68 */ BOOL EvCut_DiscoveryCannonSkip(int); |
| 163 | + /* 80ADEEE4 */ BOOL EvCut_Disappear(int); |
| 164 | + /* 80ADF810 */ BOOL EvCut_DisappearSkip(int); |
| 165 | + /* 80ADF8DC */ BOOL EvCut_CallBack(int); |
| 166 | + /* 80ADFB70 */ BOOL EvCut_WiretapSponsor(int); |
| 167 | + /* 80ADFE74 */ BOOL EvCut_WiretapEntrant(int); |
53 | 168 | /* 80AE01BC */ void setParam(); |
54 | | - /* 80AE0438 */ void main(); |
| 169 | + /* 80AE0438 */ BOOL main(); |
55 | 170 | /* 80AE04D8 */ void playMotion(); |
56 | 171 | /* 80AE0B58 */ void playExpression(); |
57 | | - /* 80AE0ED0 */ void ctrlBtk(); |
| 172 | + /* 80AE0ED0 */ BOOL ctrlBtk(); |
58 | 173 | /* 80AE0FAC */ void setAttnPos(); |
59 | 174 | /* 80AE1320 */ void lookat(); |
60 | | - /* 80AE153C */ bool drawDbgInfo(); |
| 175 | + /* 80AE153C */ BOOL drawDbgInfo(); |
61 | 176 |
|
62 | | - static u8 mEvtSeqList[168]; |
| 177 | + static EventFn mEvtSeqList[14]; |
63 | 178 |
|
64 | | -private: |
65 | | - /* 0x568 */ u8 field_0x568[0xe24 - 0x568]; |
66 | | -}; |
| 179 | + u8 getPathID() { return (fopAcM_GetParam(this) >> 8) & 0xFF; } |
| 180 | + s16 getMessageNo() { return shape_angle.x; } |
67 | 181 |
|
68 | | -STATIC_ASSERT(sizeof(daNpcShad_c) == 0xe24); |
| 182 | + inline void setAction(ActionFn action) { |
| 183 | + field_0xe1a = 3; |
69 | 184 |
|
70 | | -class daNpcShad_Param_c { |
71 | | -public: |
72 | | - /* 80AE1F70 */ ~daNpcShad_Param_c(); |
| 185 | + if (mActionFn) { |
| 186 | + (this->*mActionFn)(NULL); |
| 187 | + } |
| 188 | + |
| 189 | + field_0xe1a = 0; |
| 190 | + mActionFn = action; |
| 191 | + |
| 192 | + if (mActionFn) { |
| 193 | + (this->*mActionFn)(NULL); |
| 194 | + } |
| 195 | + } |
| 196 | + |
| 197 | + inline csXyz* unk_inline(); |
| 198 | + inline BOOL chkFindPlayer(); |
| 199 | + inline void setLookMode(int, fopAc_ac_c*, cXyz*); |
| 200 | + inline BOOL step(s16, int, f32); |
| 201 | + inline void setExpressionTalkAfter(); |
| 202 | + inline void setLookObliquenessUp(); |
73 | 203 |
|
74 | | - static u8 const m[112]; |
| 204 | + inline void searchActors() { |
| 205 | + if (mMode == 0) { |
| 206 | + if (mActorMngr[1].getActorP() == NULL) { |
| 207 | + mActorMngr[1].entry(fopAcM_SearchByName(PROC_NPC_ASH)); |
| 208 | + } |
| 209 | + |
| 210 | + if (mActorMngr[2].getActorP() == NULL) { |
| 211 | + mActorMngr[2].entry(fopAcM_SearchByName(PROC_NPC_RAFREL)); |
| 212 | + } |
| 213 | + |
| 214 | + if (mActorMngr[3].getActorP() == NULL) { |
| 215 | + mActorMngr[3].entry(fopAcM_SearchByName(PROC_NPC_MOIR)); |
| 216 | + } |
| 217 | + |
| 218 | + if (mActorMngr[4].getActorP() == NULL) { |
| 219 | + mActorMngr[4].entry(getEvtAreaTagP(17, 0)); |
| 220 | + } |
| 221 | + } else if (mMode == 1 && daNpcF_chkEvtBit(0x12E) && mActorMngr[4].getActorP() == NULL) { |
| 222 | + mActorMngr[4].entry(getEvtAreaTagP(18, 0)); |
| 223 | + } |
| 224 | + } |
| 225 | + |
| 226 | +private: |
| 227 | + /* 0xB48 */ J3DModel* mBookKnifeModel; |
| 228 | + /* 0xB4C */ J3DModel* mKomonshoModel; |
| 229 | + /* 0xB50 */ Z2Creature mSound; |
| 230 | + /* 0xBE0 */ daNpcF_MatAnm_c* mpMatAnm; |
| 231 | + /* 0xBE4 */ daNpcF_Lookat_c mLookat; |
| 232 | + /* 0xC80 */ daNpcF_ActorMngr_c mActorMngr[5]; |
| 233 | + /* 0xCA8 */ daPy_py_c* field_0xca8; |
| 234 | + /* 0xCAC */ u8 field_0xcac[0xcb0 - 0xcac]; |
| 235 | + /* 0xCB0 */ dCcD_Cyl field_0xcb0; |
| 236 | + /* 0xDEC */ ActionFn mActionFn; |
| 237 | + /* 0xDF8 */ request_of_phase_process_class mPhases[2]; |
| 238 | + /* 0xE08 */ fpc_ProcID mItemPartnerId; |
| 239 | + /* 0xE0C */ int field_0xe0c; |
| 240 | + /* 0xE10 */ int field_0xe10; |
| 241 | + /* 0xE14 */ s16 field_0xe14; |
| 242 | + /* 0xE16 */ s16 field_0xe16; |
| 243 | + /* 0xE18 */ s16 mLookMode; |
| 244 | + /* 0xE1A */ u16 field_0xe1a; |
| 245 | + /* 0xE1C */ s16 field_0xe1c; |
| 246 | + /* 0xE1E */ u8 field_0xe1e; |
| 247 | + /* 0xE1F */ u8 field_0xe1f; |
| 248 | + /* 0xE20 */ u8 mMode; |
75 | 249 | }; |
76 | 250 |
|
| 251 | +STATIC_ASSERT(sizeof(daNpcShad_c) == 0xe24); |
77 | 252 |
|
78 | 253 | #endif /* D_A_NPC_SHAD_H */ |
0 commit comments