summaryrefslogtreecommitdiff
path: root/include/d/d_mesg.h
blob: 46c9e6bc398f10b3d3928595651fb6578d1d9a3a (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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#ifndef D_MESG_H
#define D_MESG_H

#include "JSystem/J2DGraph/J2DScreen.h"
#include "dolphin/types.h"
#include "JSystem/JMessage/control.h"
#include "d/d_drawlist.h"
#include "f_op/f_op_msg.h"
#include "f_op/f_op_msg_mng.h"

class J2DPicture;
class J2DScreen;
class JKRExpHeap;
class JUTFont;
class JPABaseEmitter;
class dMesg_outFont_c;
class dMesg_screenData_c;

class sub_mesg_class : public msg_class {
public:
    /* 0x0FC */ JKRExpHeap* heap;
    /* 0x100 */ JKRExpHeap* field_0x100;
    /* 0x104 */ dMesg_outFont_c* outfont[18];
    /* 0x14C */ dMesg_screenData_c* screen;
    /* 0x150 */ u8 field_0x150[0x154 - 0x150];
    /* 0x154 */ char* text[4];
    /* 0x164 */ u8 field_0x164;
};

class dMesg_outFont_c {
public:
    s16 getTimer() { return mTimer; }

    virtual ~dMesg_outFont_c();
    void _create();
    void _delete();
    void _initialize();
    bool _set(s16, s16, s16, u32, u8);
    void _draw();
    void _setAlpha(u8);

protected:
    /* 0x04 */ J2DPicture* icon;
    /* 0x08 */ J2DPicture* kage;
    /* 0x0C */ int field_0xc;
    /* 0x10 */ s16 field_0x10;
    /* 0x12 */ s16 field_0x12;
    /* 0x14 */ s16 field_0x14;
    /* 0x16 */ s16 mTimer;
    /* 0x18 */ u8 mAlpha;
    /* 0x19 */ u8 field_0x19;
};

class dMesg_tControl : public JMessage::TControl {
public:
    JUTFont* getMainFont() { return mMainFont; }
    void setMainFont(JUTFont* font) { mMainFont = font; }

    JUTFont* getRubyFont() { return mRubyFont; }
    void setRubyFont(JUTFont* font) { mRubyFont = font; }

    f32 getLineLength(int i) { return mLineLength[i]; }
    void setLineLength(int i, f32 length) { mLineLength[i] = length; }

    int getLineCount() { return mLineCount; }
    void setLineCount(int count) { mLineCount = count; }

    int getLineStart() { return mLineStart; }
    void setLineStart(int start) { mLineStart = start; }

    int getInitFontSize() { return mInitFontSize; }

    int getNowFontSize() { return mNowFontSize; }
    void setNowFontSize(int size) { mNowFontSize = size; }

    int getCharSpace() { return mCharSpace; }

    int getCharCode() { return mCharCode; }
    void setCharCode(int code) { mCharCode = code; }

    int getTextBoxWidth() { return mTextBoxWidth; }

    bool isHeader() { return mbHeader; }
    void setHeaderOn() { mbHeader = 1; }
    void setHeaderOff() { mbHeader = 0; }

    void setCode16FgOff() { mCode16Fg = 0; }

    dMesg_tControl();
    const char* do_word(u32);

protected:
    /* 0x3C */ JUTFont* mMainFont;
    /* 0x40 */ JUTFont* mRubyFont;
    /* 0x44 */ f32 mLineLength[4];
    /* 0x54 */ int mLineCount;
    /* 0x58 */ int mLineStart;
    /* 0x5C */ int mInitFontSize;
    /* 0x60 */ int mNowFontSize;
    /* 0x64 */ int mCharSpace;
    /* 0x68 */ int mCharCode;
    /* 0x6C */ int mTextBoxWidth;
    /* 0x70 */ u8 mbHeader;
    /* 0x71 */ u8 mCode16Fg;
};

class dMesg_tSequenceProcessor : public JMessage::TSequenceProcessor {
public:
    void resetWaitRest() { mWaitRest = 0; }
    void setWaitRest() {} // TODO
    int decWaitRest() {
        if (mWaitRest > 0) {
            return mWaitRest--;
        } else {
            return 0;
        }
    }
    u32 getNowColor() { return mNowColor; }
    void setNowColor(u32 col) { mNowColor = col; }
    u8 getStopFlag() { return mStopFlag; }
    void setMesg(sub_mesg_class* mesg) { mMesg = mesg; }
    void setShortCutFlag() { mShortCutFlag = 1; }

    dMesg_tSequenceProcessor(JMessage::TControl*);
    virtual ~dMesg_tSequenceProcessor() {}
    void initialize(int);
    virtual void do_begin(const void*, const char*);
    virtual void do_end();
    virtual bool do_isReady();
    virtual bool do_jump_isReady();
    virtual void do_jump(const void*, const char*);
    virtual void do_branch_query(u16);
    virtual int do_branch_queryResult();
    virtual void do_branch(const void*, const char*);
    virtual void do_character(int);
    virtual bool do_tag(u32, const void*, u32);
    void setCharacter();
    char* ruby_character(char*, int);
    virtual bool do_systemTagCode(u16, const void*, u32);

protected:
    /* 0x038 */ sub_mesg_class* mMesg;
    /* 0x03C */ const void* field_0x3c;
    /* 0x040 */ const char* field_0x40;
    /* 0x044 */ f32 field_0x44;
    /* 0x048 */ f32 field_0x48;
    /* 0x04C */ f32 field_0x4c;
    /* 0x050 */ f32 field_0x50;
    /* 0x054 */ f32 field_0x54;
    /* 0x058 */ int field_0x58;
    /* 0x05C */ int field_0x5c;
    /* 0x060 */ int field_0x60;
    /* 0x064 */ int field_0x64;
    /* 0x068 */ int field_0x68;
    /* 0x06C */ u32 mNowColor;
    /* 0x070 */ int field_0x70;
    /* 0x074 */ int field_0x74;
    /* 0x078 */ int field_0x78;
    /* 0x07C */ int field_0x7c[4];
    /* 0x08C */ int field_0x8c;
    /* 0x090 */ int mWaitRest;
    /* 0x094 */ char field_0x94;
    /* 0x095 */ u8 field_0x95;
    /* 0x096 */ u8 field_0x96;
    /* 0x097 */ char field_0x97[100];
    /* 0x0FB */ char field_0xfb[100];
    /* 0x15F */ u8 mStopFlag;
    /* 0x160 */ u8 field_0x160;
    /* 0x161 */ u8 mShortCutFlag;
    /* 0x162 */ u8 field_0x162;
    /* 0x163 */ u8 field_0x163;
};

class dMesg_tMeasureProcessor : public JMessage::TSequenceProcessor {
public:
    dMesg_tMeasureProcessor(JMessage::TControl*, int);
    virtual ~dMesg_tMeasureProcessor() {}
    virtual void do_character(int);
    virtual void do_end();
    virtual bool do_tag(u32, const void*, u32);
    virtual bool do_systemTagCode(u16, const void*, u32);

protected:
    /* 0x38 */ f32 field_0x38[4];
    /* 0x48 */ f32 field_0x48;
    /* 0x4C */ int field_0x4c;
    /* 0x50 */ int field_0x50;
    /* 0x54 */ u8 field_0x54;
};

class dMesg_tRenderingProcessor : public JMessage::TRenderingProcessor {
public:
    dMesg_tRenderingProcessor(JMessage::TControl*);
    virtual ~dMesg_tRenderingProcessor() {}
    virtual void do_begin(const void*, const char*);
    virtual void do_end();
    virtual void do_character(int);
    virtual bool do_tag(u32, const void*, u32);
    virtual bool do_systemTagCode(u16, const void*, u32);
};

class dMesg_screenData_c : public dDlst_base_c {
public:
    void deleteScreen() { delete scrn; }
    f32 getTextPosX(int i) { return field_0x88[i].mPosTopLeftOrig.x; }
    f32 getTextPosY(int i) { return field_0x88[i].mPosTopLeftOrig.y; }
    void resetTimer() { mTimer = 0; }
    void setFont(JUTFont* font1, JUTFont* font2) {
        field_0x10 = font1;
        field_0x14 = font2;
    }
    void setHeap(JKRExpHeap* heap) { mHeap = heap; }
    void setMesg(sub_mesg_class* mesg) { mMesg = mesg; }

    virtual ~dMesg_screenData_c() {}
    virtual void draw() {}
    virtual void createScreen() {}
    virtual void changeFont(JUTFont*) {}
    virtual void move() {}
    virtual bool openAnime() = 0;
    virtual bool closeAnime() = 0;
    virtual void setTextPosition(u8) {}
    void setCommonData();
    void initString(char*, int);
    void setString(char*, int);
    void shiftSet(int, int);
    void arwAnimeInit();
    void arwAnime();
    void dotAnimeInit();
    void dotAnime();

protected:
    /* 0x004 */ JKRExpHeap* mHeap;
    /* 0x008 */ sub_mesg_class* mMesg;
    /* 0x00C */ J2DScreen* scrn;
    /* 0x010 */ JUTFont* field_0x10;
    /* 0x014 */ JUTFont* field_0x14;
    /* 0x018 */ fopMsgM_pane_class field_0x18;
    /* 0x050 */ fopMsgM_pane_class field_0x50;
    /* 0x088 */ fopMsgM_pane_class field_0x88[4];
    /* 0x168 */ fopMsgM_pane_class field_0x168;
    /* 0x1A0 */ u8 field_0x1a0[0x1A4 - 0x1A0];
    /* 0x1A4 */ int field_0x1a4;
    /* 0x1A8 */ s16 mTimer;
    /* 0x1AA */ u8 field_0x1aa[0x1AC - 0x1AA];
    /* 0x1AC */ JUtility::TColor field_0x1ac;
    /* 0x1B0 */ JUtility::TColor field_0x1b0;
};

class dMesg_screenDataTalk_c : public dMesg_screenData_c {
public:
    virtual ~dMesg_screenDataTalk_c() {}
    virtual void createScreen();
    virtual void changeFont(JUTFont*);
    virtual bool openAnime();
    virtual bool closeAnime();
    virtual void setTextPosition(u8);
    virtual void draw();

protected:
    /* 0x1B4*/ f32 field_0x1b4;
};

class dMesg_screenDataItem_c : public dMesg_screenData_c {
public:
    virtual ~dMesg_screenDataItem_c() {}
    virtual void createScreen();
    virtual void changeFont(JUTFont*);
    virtual void deleteScreen();
    virtual bool openAnime();
    virtual bool closeAnime();
    virtual void move();
    virtual void draw();
    void ringMove();
    void lightMove();
    void cornerMove();

protected:
    /* 0x1B4 */ fopMsgM_pane_class field_0x1b4;
    /* 0x1EC */ fopMsgM_pane_class field_0x1ec;
    /* 0x224 */ fopMsgM_pane_class field_0x224[8];
    /* 0x3E4 */ JPABaseEmitter* field_0x3e4;
    /* 0x3E8 */ f32 field_0x3e8;
    /* 0x3EC */ ResTIMG* texBuffer;
};

#endif /* D_MESG_H */