summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_fm.h
blob: 20a4873a084dfd88f96ea2fae8268b38d3e009d8 (plain)
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
#ifndef D_A_FM_H
#define D_A_FM_H

#include "f_op/f_op_actor.h"
#include "c/c_damagereaction.h"
#include "d/d_path.h"
#include "d/d_bg_s_lin_chk.h"

class daFm_c : public fopEn_enemy_c {
public:
    enum Proc_e {
        PROC_INIT_e = 0,
        PROC_EXEC_e = 1,
    };
    
    bool isBodyAppear() { return mMode != 1 && mMode != 0x12 && mMode != 0 && (mMode != 2 && (mMode != 4) && (mMode != 3 && (mMode != 0x11))); }
    bool isHoleAppear() { return field_0x3E0 > 0.015f; }
    void modeProcInit(int newMode) { modeProc(PROC_INIT_e, newMode); }

    void _nodeControl(J3DNode*, J3DModel*);
    BOOL _createHeap();
    bool holeCreateHeap();
    bool bodyCreateHeap();
    bool jntHitCreateHeap();
    BOOL _pathMove(cXyz*, cXyz*, cXyz*);
    fopAc_ac_c* searchNearOtherActor(fopAc_ac_c*);
    void* searchNearFm(fopAc_ac_c*);
    void moveRndBack();
    void moveRndEscape();
    void spAttackVJump();
    void spAttackJump();
    void spAttackNone();
    void iceProc();
    void bodySetMtx();
    void holeSetMtx();
    void setCollision();
    void setAttention();
    bool checkTgHit();
    void setGrabPos();
    cXyz getOffsetPos();
    u8 checkPlayerGrabBomb();
    u8 checkPlayerGrabNpc();
    u8 checkPlayerGrabTarget();
    bool isGrabPos();
    bool isGrab();
    bool isGrabFoot();
    void modeSwWaitInit();
    void modeSwWait();
    void modeHideInit();
    void modeHide();
    void modeUnderFootInit();
    void modeUnderFoot();
    void modePathMoveInit();
    void modePathMove();
    void modeGoalKeeperInit();
    void modeGoalKeeper();
    void modeAppearInit();
    void modeAppear();
    void modeDisappearInit();
    void modeDisappear();
    void modeWaitInit();
    void modeWait();
    void modeAttackInit();
    void modeAttack();
    void modeThrowInit();
    void modeThrow();
    void modeGrabFootDemoInit();
    void modeGrabFootDemo();
    void modeParalysisInit();
    void modeParalysis();
    void modeDamageInit();
    void modeDamage();
    void modeGrabInit();
    void modeGrab();
    void modeGrabDemoInit();
    void modeGrabDemo();
    void modeDeathInit();
    void modeDeath();
    void modePrepareItemInit();
    void modePrepareItem();
    void modeGrabNpcDemoInit();
    void modeGrabNpcDemo();
    void modePlayerStartDemoInit();
    void modePlayerStartDemo();
    void modeDeleteInit();
    void modeDelete();
    void modeBikubikuInit();
    void modeBikubiku();
    void modeProc(Proc_e, int);
    void setAnm(s8, bool);
    void cancelGrab();
    void calcInvKine(fopAc_ac_c*);
    void resetInvKine();
    void grabBomb();
    void grabTsubo();
    void grabPlayer();
    void grabNPC();
    void searchTarget();
    void setBaseTarget();
    void turnToBaseTarget();
    bool isNpc(fopAc_ac_c*);
    bool checkHeight(fopAc_ac_c*);
    bool isLink(fopAc_ac_c*);
    bool isLinkControl();
    bool areaCheck();
    bool lineCheck(cXyz*, cXyz*);
    int setRnd(int, int);
    void setHoleEffect();
    void holeExecute();
    bool setHoleScale(f32, f32, f32);
    bool _execute();
    void MtxToRot(Mtx, csXyz*);
    void debugDraw();
    void holeDraw();
    void bodyDraw();
    bool _draw();
    void getArg();
    void createInit();
    cPhs_State _create();
    bool _delete();

    typedef void (daFm_c::*ModeFunc)();

    static const dCcD_SrcSph m_sph_src;
    static const dCcD_SrcCyl m_cyl_src;
    static const u32 m_heapsize;
    static const char m_arc_name[3];

public:
    /* 0x2AC */ int mMode;
    /* 0x2B0 */ dPa_followEcallBack mpFollowEcallBack;
    /* 0x2C4 */ s8 mBckIdx;
    /* 0x2C5 */ s8 mAnmPrmIdx;
    /* 0x2C6 */ s8 mOldAnmPrmIdx;
    /* 0x2C7 */ u8 field_0x2C7;
    /* 0x2C8 */ s16 field_0x2C8;
    /* 0x2CC */ int m_path_no;
    /* 0x2D0 */ int field_0x2D0;
    /* 0x2D4 */ int field_0x2D4;
    /* 0x2D8 */ int field_0x2D8;
    /* 0x2DC */ int field_0x2DC;
    /* 0x2E0 */ f32 field_0x2E0;
    /* 0x2E4 */ u8 field_0x2E4;
    /* 0x2E5 */ bool field_0x2E5;
    /* 0x2E6 */ u8 field_0x2E6[0x2E8 - 0x2E6];
#if VERSION == VERSION_DEMO
    u8 field_0x2E82[0x10];
#endif
    /* 0x2E8 */ cXyz field_0x2E8[6];
    /* 0x330 */ Quaternion field_0x330[6];
    /* 0x390 */ int field_0x390;
    /* 0x394 */ f32 field_0x394;
    /* 0x398 */ cXyz field_0x398;
    /* 0x3A4 */ cXyz field_0x3A4;
    /* 0x3B0 */ cXyz field_0x3B0;
    /* 0x3BC */ s8 field_0x3BC;
    /* 0x3C0 */ dPath* mpPath;
    /* 0x3C4 */ u8 field_0x3C4[0x3C8 - 0x3C4];
    /* 0x3C8 */ J3DModel* mpModel;
    /* 0x3CC */ mDoExt_btkAnm mBtkAnm;
    /* 0x3E0 */ f32 field_0x3E0;
    /* 0x3E4 */ cXyz field_0x3E4;
    /* 0x3F0 */ request_of_phase_process_class mPhs;
    /* 0x3F8 */ u8 field_0x3F8[0x3FC - 0x3F8];
    /* 0x3FC */ bool field_0x3FC;
    /* 0x400 */ mDoExt_McaMorf* mpMorf;
    /* 0x404 */ dBgS_ObjAcch mObjAcch;
    /* 0x5C8 */ dBgS_AcchCir mAcchCir;
    /* 0x608 */ mDoExt_invisibleModel mInvisibleModel;
    /* 0x610 */ cXyz field_0x610;
    /* 0x61C */ cXyz field_0x61C;
    /* 0x628 */ u8 field_0x628[0x630 - 0x628];
    /* 0x630 */ cXyz field_0x630;
    /* 0x63C */ cXyz field_0x63C;
    /* 0x648 */ int field_0x648;
    /* 0x64C */ int field_0x64C;
    /* 0x650 */ int field_0x650;
    /* 0x654 */ int mSinkTimer;
    /* 0x658 */ int field_0x658;
    /* 0x65C */ int field_0x65C;
    /* 0x660 */ cXyz field_0x660;
    /* 0x66C */ fopAc_ac_c* mpActorTarget;
    /* 0x670 */ fpc_ProcID mProcId;
    /* 0x674 */ cXyz mGrabPos;
    /* 0x680 */ s16 field_0x680;
    /* 0x684 */ int field_0x684;
    /* 0x688 */ bool field_0x688;
    /* 0x68A */ s16 field_0x68A;
    /* 0x68C */ s16 field_0x68C;
    /* 0x690 */ cXyz field_0x690;
    /* 0x69C */ cXyz field_0x69C;
    /* 0x6A8 */ fpc_ProcID mProcId2;
    /* 0x6AC */ u8 field_0x6AC[0x6B4 - 0x6AC];
    /* 0x6B4 */ int field_0x6B4;
    /* 0x6B8 */ u8 field_0x6B8;
    /* 0x6BC */ Mtx field_0x6BC;
    /* 0x6EC */ JntHit_c* mpJntHit;
    /* 0x6F0 */ dCcD_Stts mStts;
    /* 0x72C */ dCcD_Stts mStts2;
    /* 0x768 */ dCcD_Sph mSph;
    /* 0x894 */ dCcD_Cyl mCyl;
    /* 0x9C4 */ int field_0x9C4;
    /* 0x9C8 */ u8 mHitType;
    /* 0x9CC */ fopAc_ac_c* mBaseTarget;
    /* 0x9D0 */ s16 field_0x9D0;
    /* 0x9D4 */ f32 field_0x9D4;
    /* 0x9D8 */ dBgS_ObjLinChk mLinChk;
    /* 0xA44 */ u8 field_0xA44[0xA48 - 0xA44];
    /* 0xA48 */ cXyz field_0xA48[12];
    /* 0xAD8 */ bool field_0xAD8[12];
    /* 0xAE4 */ u8 field_0xAE4;
    /* 0xAE5 */ u8 field_0xAE5;
    /* 0xAE8 */ enemyice mEnemyIce;
};  // Size: 0xEA0

#endif /* D_A_FM_H */