1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
#ifndef D_A_NPC_KAMOME_H
#define D_A_NPC_KAMOME_H
#include "d/actor/d_a_player_npc.h"
#include "d/d_bg_s_lin_chk.h"
#include "m_Do/m_Do_hostIO.h"
class JORMContext;
class daNpc_kam_c;
class daNpc_kam_c : public daPy_npc_c {
public:
enum ActionStatus {
ACTION_STARTING = 0,
ACTION_ONGOING_1 = 1,
ACTION_ONGOING_2 = 2,
ACTION_ONGOING_3 = 3,
ACTION_ENDING = -1,
};
enum Animation {
ANM_WAIT1 = 0,
ANM_WAIT2 = 1,
ANM_SING = 2,
};
typedef int (daNpc_kam_c::*ActionFunc)(void*);
typedef void (daNpc_kam_c::*EventActionInitFunc)(int evtStaffId);
typedef BOOL (daNpc_kam_c::*EventActionFunc)(int evtStaffId);
void offLineHit() { cLib_offBit(mHitFlags, 0x07UL); }
void onFrontLineHit() { cLib_onBit(mHitFlags, 0x01UL); }
u32 isFrontLineHit() { return cLib_checkBit(mHitFlags, 0x01UL); }
void onLeftLineHit() { cLib_onBit(mHitFlags, 0x02UL); }
u32 isLeftLineHit() { return cLib_checkBit(mHitFlags, 0x02UL); }
void onRightLineHit() { cLib_onBit(mHitFlags, 0x04UL); }
u32 isRightLineHit() { return cLib_checkBit(mHitFlags, 0x04UL); }
void onWaterHit() { cLib_onBit(mHitFlags, 0x08UL); }
void offWaterHit() { cLib_offBit(mHitFlags, 0x08UL); }
u32 isWaterHit() { return cLib_checkBit(mHitFlags, 0x08UL); }
void onNoBgCheck() { cLib_onBit(mHitFlags, 0x10UL); }
void offNoBgCheck() { cLib_offBit(mHitFlags, 0x10UL); }
u32 isNoBgCheck() { return cLib_checkBit(mHitFlags, 0x10UL); }
void onHyoiKamome() { m_hyoi_kamome = true; }
void offHyoiKamome() { m_hyoi_kamome = false; }
s16 XyCheckCB(int);
BOOL callDemoStartCheck();
s16 XyEventCB(int);
~daNpc_kam_c();
void setAttention(bool, int);
void setBaseMtx();
BOOL createHeap();
cPhs_State create();
BOOL init();
BOOL setAction(ActionFunc*, ActionFunc, void*);
void npcAction(void*);
void setNpcAction(ActionFunc, void*);
void playerAction(void*);
void setPlayerAction(ActionFunc, void*);
BOOL returnLinkCheck();
BOOL changeAreaCheck();
BOOL areaOutCheck();
BOOL getStickAngY(s16*, s16*);
s16 getAngleX();
int wallHitCheck();
BOOL npcTurnCheck(s16*);
int waitNpcAction(void*);
BOOL keyProc();
int waitPlayerAction(void*);
BOOL damagePlayerAction(void*);
void eventOrder();
void checkOrder();
BOOL checkCommandTalk();
void returnLinkPlayer();
BOOL eventProc();
void eventEnd();
BOOL actionDefault(int);
void initialWaitEvent(int);
BOOL actionWaitEvent(int);
void initialChangeEvent(int);
void initialDescendEvent(int);
BOOL actionDescendEvent(int);
void initialAreaOutTurn(int);
BOOL actionAreaOutTurn(int);
void setAnm(int);
void setCollision();
void setLineBgCheck();
void animationPlay();
BOOL execute();
BOOL draw();
#if VERSION == VERSION_DEMO
void emitterDelete(JPABaseEmitter**);
#endif
f32 getGroundY() { return mAcch.GetGroundH(); }
MtxP getLeftHandMatrix() { return cullMtx; }
MtxP getRightHandMatrix() { return cullMtx; }
f32 getBaseAnimeFrameRate() { return 1.0f; }
f32 getBaseAnimeFrame() { return 0.0f; }
void restartPoint(s16) {}
static bool m_hyoi_kamome;
public:
/* 0x4EC */ request_of_phase_process_class mPhs;
/* 0x4F4 */ mDoExt_McaMorf* mpMorf;
/* 0x4F8 */ dBgS_ObjAcch mAcch;
/* 0x6BC */ dBgS_AcchCir mAcchCirs[2];
/* 0x73C */ dBgS_LinChk mLinChk;
/* 0x7A8 */ dCcD_Stts mStts;
/* 0x7E4 */ dCcD_Sph mAtSph;
/* 0x910 */ dCcD_Sph mTgSph;
/* 0xA3C */ dCcD_Cps mCps;
#if VERSION == VERSION_DEMO
JPABaseEmitter* mB74;
#endif
/* 0xB74 */ cXyz mDescendStartPos;
/* 0xB80 */ cXyz mDescendStartPosUnangled;
/* 0xB8C */ csXyz mDescendStartAngle;
/* 0xB92 */ u8 mB92[0xBA0 - 0xB92];
/* 0xBA0 */ cBgS_PolyInfo mPolyInfo;
/* 0xBB0 */ ActionFunc mCurrNpcActionFunc;
/* 0xBBC */ ActionFunc mCurrPlayerActionFunc;
/* 0xBC8 */ u32 mShadowId;
/* 0xBCC */ u32 mHitFlags;
/* 0xBD0 */ u8 mBD0[0xBD4 - 0xBD0];
/* 0xBD4 */ int mAnmIdx;
/* 0xBD8 */ f32 mMaxY;
/* 0xBDC */ f32 mMinY;
/* 0xBE0 */ f32 mPrevMorfFrame;
/* 0xBE4 */ f32 mTargetSpeedF;
/* 0xBE8 */ f32 mAccelF;
/* 0xBEC */ s16 mTargetAngleX;
/* 0xBEE */ s16 mLockAngleXTimer;
/* 0xBF0 */ s16 mAngVelY;
/* 0xBF2 */ s16 mAngVelX;
/* 0xBF4 */ s16 mTargetAngVelY;
/* 0xBF6 */ s16 mTargetAngVelX;
/* 0xBF8 */ s16 m_jnt_body;
/* 0xBFA */ s16 mFlapTimer;
/* 0xBFC */ s16 mFlapExhaustedTimer;
/* 0xBFE */ s16 mFlapEnergyTimer;
/* 0xC00 */ s8 mAnmTblIdx;
/* 0xC01 */ s8 mReachedAnimEnd;
/* 0xC02 */ s8 mEventState;
/* 0xC03 */ s8 mCurrEventIdxIdx;
/* 0xC04 */ u8 mC04[0xC05 - 0xC04];
/* 0xC05 */ s8 mActionStatus;
/* 0xC06 */ u8 mUnusedC06;
/* 0xC07 */ u8 mC07[0xC08 - 0xC07];
/* 0xC08 */ s16 mC08;
/* 0xC08 */ s16 mC0A;
/* 0xC08 */ s16 mC0C;
/* 0xC08 */ s16 mUnusedC0E;
/* 0xC10 */ u8 mC10[0xC14 - 0xC10];
/* 0xC14 */ f32 mUnusedC14;
/* 0xC18 */ u8 mC18[0xC1C - 0xC18];
/* 0xC1C */ s16 mWaitTimer;
/* 0xC1E */ s16 mAreaOutTimer;
/* 0xC20 */ s16 mEventIdxs[3];
/* 0xC26 */ u8 field_C26[0xC28 - 0xC26];
};
#endif /* D_A_NPC_KAMOME_H */
|