summaryrefslogtreecommitdiff
path: root/include/d/actor/d_a_npc_ho.h
blob: 0447afe06dd4e00f7f836b774a5fc4bc1b55d4db (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
#ifndef D_A_NPC_HO_H
#define D_A_NPC_HO_H

#include "f_op/f_op_actor.h"
#include "d/d_cc_d.h"
#include "d/d_bg_s_acch.h"
#include "d/d_npc.h"

class daNpc_Ho_c : public fopAc_ac_c {
public:

    enum HoFlags {
        HO_FLAG_00000001 = 0x00000001,
        HO_FLAG_00000004 = 0x00000004,
        HO_FLAG_00000008 = 0x00000008,
        HO_FLAG_00000010 = 0x00000010,
        HO_FLAG_00000020 = 0x00000020,
    };

    enum HoStates {
        HO_STATE_WAIT_01 = 0,
        HO_STATE_TALK_01 = 1,
        HO_STATE_TALK_02 = 2,
        HO_STATE_TALK_03 = 3,
        HO_STATE_TALK_03_CONTINUE = 4,
        HO_STATE_GIVE_01 = 5,
        HO_STATE_GIVE_02 = 6,
        HO_STATE_PREACH = 7

    };

    enum ActionStatus {
        ACTION_STARTING = 0,
        ACTION_ONGOING = 1,
        ACTION_ENDING = -1,
    };

    enum TalkStates {
        TALK_INIT = 0,
        TALK_MSG_CREATE = 1,
        TALK_ACTIVE = 2,
        TALK_FINISHED = -1
    };
    
    typedef int (daNpc_Ho_c::*ActionFunc)(void*);

    BOOL ChkOrder(u8 flag) { return mOrderFlags & flag; }
    void ClrOrder() { mOrderFlags = 0; }
    void SetOrder(u8 temp) { mOrderFlags |= temp; }
    bool chkFlag(u16 flag) { return (mFlags & flag) == flag; }
    void clrFlag(u16 flag) { mFlags &= ~flag; }

    s8 getBackboneJntNum() { return m_jnt.getBackboneJntNum(); }
    s8 getHeadJntNum() { return m_jnt.getHeadJntNum(); }
    s16 getBackbone_y() { return m_jnt.getBackbone_y(); }
    s16 getHead_x() { return m_jnt.getHead_x(); }
    s16 getHead_y() { return m_jnt.getHead_y(); }

    void incAttnSetCount() {
        if (mAttnSetCount != 0xff) {
            mAttnSetCount++;
        }  
    }

    BOOL setAction(ActionFunc actionFunc, void* arg) {
        if (mCurrActionFunc != actionFunc) {
            if (mCurrActionFunc != NULL) {
                mActionStatus = ACTION_ENDING;
                (this->*mCurrActionFunc)(arg);
            }
            mCurrActionFunc = actionFunc;
            mActionStatus = ACTION_STARTING;
            (this->*mCurrActionFunc)(arg);
        }
        return TRUE;
    }

    void setAttentionBasePos(cXyz i_attnBasePos) { mAttnBasePos = i_attnBasePos; }
    void setEyePos(cXyz i_eyePos) { mEyePos = i_eyePos; }
    void setFlag(u16 flag) { mFlags |= flag; }

    s16 XyCheckCB(int);
    void receivePendant(int);
    BOOL initTexPatternAnm(bool);
    void playTexPatternAnm();
    void setAnm(s8);
    void setAnmStatus();
    bool chkAttentionLocal();
    void chkAttention();
    void eventOrder();
    void checkOrder();
    u32 next_msg_sub0(u32);
    u16 next_msgStatus(u32*);
    u32 getMsg();
    void setCollision();
    void msgPushButton();
    void msgAnm(u8);
    void talkInit();
    u16 talk();
    BOOL init();
    void setAttention(bool);
    void lookBack();
    bool wait01();
    bool talk01();
    bool talk02();
    bool talk03();
    bool give01();
    bool give02();
    bool preach();
    BOOL wait_action(void*);
    BOOL _draw();
    BOOL _execute();
    BOOL _delete();
    cPhs_State _create();
    BOOL CreateHeap();

private:
    /* 0x290 */ request_of_phase_process_class mPhs;
    /* 0x298 */ mDoExt_McaMorf* mpMorf;
    /* 0x29C */ J3DModel* mpJoyPendentModel;
    /* 0x2A0 */ u32 mShadowId;
    /* 0x2A4 */ J3DAnmTexPattern* m_head_tex_pattern;
    /* 0x2A8 */ mDoExt_btpAnm mBtpAnm;
    /* 0x2BC */ u8 mBlinkFrame;
    /* 0x2BE */ s16 mBlinkTimer;
    /* 0x2C0 */ dBgS_ObjAcch mObjAcch;
    /* 0x484 */ dBgS_AcchCir mAcchCir;
    /* 0x4C4 */ dCcD_Stts mStts;
    /* 0x500 */ dCcD_Cyl mCyl;
    /* 0x630 */ dNpc_JntCtrl_c m_jnt;
    /* 0x664 */ cXyz mEyePos;
    /* 0x670 */ cXyz mAttnBasePos;
    /* 0x67C */ s16 mMaxHeadTurnVelocity;
    /* 0x67E */ s8 mAnmEnded;
    /* 0x67F */ u8 mAttnSetCount;
    /* 0x680 */ f32 mAnmTimer;
    /* 0x684 */ u32 mCurrMsgNo;
    /* 0x688 */ u16 mFlags;
    /* 0x68A */ u8 mAttentionTimer;
    /* 0x68B */ u8 mMsgSelectNum;
    /* 0x68C */ u8 mMsgAnmIdx;
    /* 0x68D */ u8 mAnmLoopCount;
    /* 0x68E */ u8 mItemNum;
    /* 0x690 */ int mNextMessageId;
    /* 0x694 */ f32 mCylCollisionRadius;
    /* 0x698 */ ActionFunc mCurrActionFunc;
    /* 0x6A4 */ s8 mTexPatternIdx;
    /* 0x6A5 */ s8 mCurrAnmIdx;
    /* 0x6A6 */ s8 mOrderFlags;
    /* 0x6A7 */ s8 mState;
    /* 0x6A8 */ s8 mPrevState;
    /* 0x6A9 */ u8 mType;
    /* 0x6AA */ s8 mActionStatus;
    /* 0x6AB */ s8 mTalkState;
    /* 0x6AC */ u32 mtrlSndId;
    /* 0x6B0 */ s8 mReverb;
};  // Size: 0x6B4

#endif /* D_A_NPC_HO_H */