summaryrefslogtreecommitdiff
path: root/include/d/msg/d_msg_class.h
blob: 7fb11c35fa5e0c562eb626fb45a3a7dabaf89a41 (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
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
#ifndef D_MSG_D_MSG_CLASS_H
#define D_MSG_D_MSG_CLASS_H

#include "JSystem/JMessage/control.h"
#include "SSystem/SComponent/c_xyz.h"

class COutFont_c;
class J2DTextBox;
class JUTFont;

struct JMSMesgEntry_c {
    /* 0x00 */ u32 mStringOffset;
    /* 0x04 */ u16 mStringId;
    /* 0x06 */ u16 field_0x06;
    /* 0x08 */ u8 field_0x08;
    /* 0x09 */ u8 field_0x09;
    /* 0x0A */ u8 field_0x0a;
    /* 0x0B */ u8 field_0x0b;
    /* 0x0C */ u8 field_0x0c;
    /* 0x0D */ u8 field_0x0d;
    /* 0x0E */ u8 field_0x0e;
    /* 0x0F */ u8 field_0x0f;
    /* 0x10 */ u32 field_0x10;
};  // Size: 0x14

struct JMSMesgHeader_c {
    /* 0x00 */ u32 magic;
    /* 0x04 */ u32 sectionSize;
    /* 0x08 */ u16 entryCount;
    /* 0x0A */ u16 entrySize;
    /* 0x0C */ u16 field_0xc;
    /* 0x0E */ u16 field_0xe;
    /* 0x10 */ JMSMesgEntry_c entries[0];
};  // Size: 0x10

class STControl;
class dMsgObject_c;
struct jmessage_tReference : public JMessage::TReference {
    /* 80228B04 */ jmessage_tReference();
    /* 80228D28 */ void calcDistance();
    /* 80228DE0 */ u8 getLineMax();
    /* 80228E6C */ bool isKanban();
    /* 80228EA0 */ bool isPlaceName();
    /* 80228ED4 */ bool isBossName();
    /* 80228F08 */ bool isSaveSeq();
    /* 80228F3C */ bool isBook();
    /* 80228F70 */ bool isStaffRoll();
    /* 80228FA4 */ u8 isHowl();
    /* 80228FD8 */ bool isMidona();
    /* 8022900C */ void resetReference();
    /* 80229034 */ void pageSend();
    /* 80229168 */ void selectMessage();
    /* 802294A8 */ void inputNumber();
    /* 80229730 */ char* getWord(int);
    /* 80229744 */ void resetWord();
    /* 80229768 */ void setCharactor(u16);
    /* 80229788 */ void addCharactor(u16);
    /* 802297B0 */ void resetCharactor();
    /* 802297E4 */ void shiftCharCountBuffer();
    /* 80229810 */ void resetCharCountBuffer();
    /* 80229848 */ void allsetCharCountBuffer();
    /* 8022986C */ bool isCharSend();
    /* 802298DC */ bool isLightSend();
    /* 8022994C */ bool isLightEnd();
    /* 802299AC */ void decideOutFontRupeeColor(int);
    /* 80232A20 */ cXyz getActorPos();

    /* 80238C78 */ void setActorPos(cXyz pos) { mActorPos = pos; }

    bool isSelectSetCancelFlag() { return mSelectSetCancelFlag != 0; }
    BOOL isSelectRubyFlag(int i_flag) {
        return mSelectRubyFlag & (u8)(1 << i_flag) ? 1 : 0;
    }
    bool isBatchFlag() { return mBatchFlag; }

    void setAddCharAllAlphaRate(f32 i_alphaRate) { mAddCharAllAlphaRate = i_alphaRate; }
    void setCharAllAlphaRate(f32 i_alphaRate) { mCharAllAlphaRate = i_alphaRate; }
    void resetNowLightCount() { mNowLightCount = 0; }
    void resetDrawLightCount() { mDrawLightCount = 0; }
    void setBatchColorFlag(u8 i_flag) { mBatchColorFlag = i_flag; }
    void setSendTimer(s16 i_timer) { mSendTimer = i_timer; }
    void setSendFlag(u8 i_flag) { mSendFlag = i_flag; }
    void setSelectNum(u8 i_num) { mSelectNum = i_num; }
    void setSelectType(u8 i_type) { mSelectType = i_type; }
    void resetInputFigure() { mInputFigure = 0; }
    void onButtonTagStopFlag() { mButtonTagStopFlag = 1; }
    void setDemoFrame(u32 i_frame) { mDemoFrame = i_frame; }
    void setNowColorType(u8 i_colorType) { mNowColorType = i_colorType; }
    void setNowTagScale(u16 i_tagScale) { mNowTagScale = i_tagScale; }
    void setRevoMessageID(u32 i_msgID) { mRevoMessageID = i_msgID; }
    void setPageLine(int i_no, s8 i_pageLine) { mPageLine[i_no] = i_pageLine; }
    void setPageLineMax(int i_no, s8 i_pageLineMax) { mPageLineMax[i_no] = i_pageLineMax; }
    void setPageType(int i_no, u8 i_pageType) { mPageType[i_no] = i_pageType; }
    void setLineArrange(int i_no, u8 i_arrange) { mLineArrange[i_no] = i_arrange; }
    void setLineScale(int i_no, u16 i_lineScale) { mLineScale[i_no] = i_lineScale; }
    void setSelLength(int i_no, f32 i_selLength) { mSelLength[i_no] = i_selLength; }
    void setNowWordCount(s8 wordCount) { mNowWordCount = wordCount; }
    void offSelectRubyFlag(int i_flag) { mSelectRubyFlag &= ~(u8)(1 << i_flag); }
    void setPageEndCount(s16 i_endCount) { mPageEndCount = i_endCount; }
    void onBombNameUseFlag() { mBombNameUseFlag = 1; }
    void onSelectRubyFlag(int i_flag) { mSelectRubyFlag |= (1 << i_flag); }
    void setpStatus(u16* status) { mpStatus = status; }
    void setObjectPtr(dMsgObject_c* ptr) { mpObjectPtr = ptr; }
    void setCountBackUp() { mCharactor.mCountBackUp = mCharactor.field_0x40e; }
    void setSelMsgPtr(char* ptr) { mpSelMsgPtr = ptr; }
    void setPageNum(s16 pageNum) { mPageNum = pageNum; }
    void setStopFlag(u8 flag) { mStopFlag = flag; }
    void setStatus(u16 status) { *mpStatus = status; }
    void setFont(JUTFont* font) { mpFont = font; }
    void setFontSizeX(f32 x) { mFontSizeX = x; }
    void setFontSizeY(f32 y) { mFontSizeY = y; }
    void setRubySize(f32 size) { mRubySize = size; }
    void setTBoxWidth(f32 width) { mTBoxWidth = width; }
    void setTBoxHeight(f32 height) { mTBoxHeight = height; }
    void setLineSpace(f32 space) { mLineSpace = space; }
    void setCharSpace(f32 space) { mCharSpace = space; }
    void setRubyCharSpace(f32 space) { mRubyCharSpace = space; }
    void setSelFontSize(f32 size) { mSelFontSize = size; }
    void setSelRubySize(f32 size) { mSelRubySize = size; }
    void setSelTBoxWidth(f32 width) { mSelTBoxWidth = width; }
    void setSelCharSpace(f32 space) { mSelCharSpace = space; }
    void setSelRubyCharSpace(f32 space) { mSelRubyCharSpace = space; }
    void decSendTimer() { mSendTimer--; }

    void setLineLength(int i_no, f32 i_strLen, f32 i_spaceLen) {
        mStrLength[i_no] = i_strLen;
        mSpaceLength[i_no] = i_spaceLen;
    }

    void setSelectPos(u8 i_pos) {
        if (!isSelectSetCancelFlag()) {
            mSelectPos = i_pos;
        }
    }

    void addCharAllAlphaRate() {
        mCharAllAlphaRate += mAddCharAllAlphaRate;
        if (mCharAllAlphaRate > 1.0f) {
            mCharAllAlphaRate = 1.0f;
        }
    }

    dMsgObject_c* getObjectPtr() { return mpObjectPtr; }
    u8 getForm() { return mForm; }
    u8 getNowLightCount() { return mNowLightCount; }
    u8 getCharCountBuffer(int i_no) { return mCharCountBuffer[i_no]; }
    u8 getDrawLightCount() { return mDrawLightCount; }
    u8 getFukiKind() { return mFukiKind; }
    s16 getSendTimer() { return mSendTimer; }
    u8 getSelectNum() { return mSelectNum; }
    u8 getSelectType() { return mSelectType; }
    const char* getSelMsgPtr() { return mpSelMsgPtr; }
    f32 getDistanceScale() { return mDistanceScale; }
    f32 getFontSizeX() { return mFontSizeX; }
    f32 getFontSizeY() { return mFontSizeY; }
    s16 getStartLineCount() { return mStartLineCount; }
    f32 getStrLength(int param_0) { return mStrLength[param_0]; }
    f32 getSpaceLength(int param_0) { return mSpaceLength[param_0]; }
    f32 getCharSpace() { return mCharSpace; }
    u8 getPageType(int i_no) { return mPageType[i_no]; }
    u8 getInputFigure() { return mInputFigure; }
    JUTFont* getFont() { return mpFont; }
    f32 getSelRubySize() { return mSelRubySize; }
    f32 getSelRubyCharSpace() { return mSelRubyCharSpace; }
    f32 getRubySize() { return mRubySize; }
    f32 getRubyCharSpace() { return mRubyCharSpace; }
    char* getSelTextPtr(int idx) { return mSelText[idx]; }
    char* getSelRubyPtr(int idx) { return mSelRuby[idx]; }
    char* getTextPtr() { return mText; }
    char* getTextSPtr() { return mTextS; }
    char* getRubyPtr() { return mRuby; }
    u8 getSelectRubyFlag() { return mSelectRubyFlag; }
    f32 getSelTBoxWidth() { return mSelTBoxWidth; }
    u8 getSelectPos() { return mSelectPos; }
    u16 getMsgID() { return mMsgID; }
    bool isButtonTagStopFlag() { return mButtonTagStopFlag; }
    u8 getStopFlag() { return mStopFlag; }
    u8 getSendFlag() { return mSendFlag; }
    u8 getFukiPosType() { return mFukiPosType; }
    u16 getStatus() { return *mpStatus; }
    u8 getArrange() { return mArrange; }

    struct CharSoundInfo {
        u16 data[0x200];
        s16 field_0x40c;
        s16 field_0x40e;
        s16 mCountBackUp;
    };
    CharSoundInfo getCharSoundInfo() { return mCharactor;}
    u32 getDemoFrame() { return mDemoFrame; }
    u32 getRevoMessageID() { return mRevoMessageID; }
    f32 getCharAllAlphaRate() { return mCharAllAlphaRate; }

    /* 80228CB4 */ virtual ~jmessage_tReference();

    /* 0x0008 */ STControl* mpStick;
    /* 0x000C */ CharSoundInfo mCharactor;
    /* 0x0414 */ cXyz mActorPos;
    /* 0x0420 */ f32 mFontSizeX;
    /* 0x0424 */ f32 mFontSizeY;
    /* 0x0428 */ f32 mRubySize;
    /* 0x042C */ f32 mTBoxWidth;
    /* 0x0430 */ f32 mTBoxHeight;
    /* 0x0434 */ f32 mLineSpace;
    /* 0x0438 */ f32 mCharSpace;
    /* 0x043C */ f32 mRubyCharSpace;
    /* 0x0440 */ f32 mSelFontSize;
    /* 0x0444 */ f32 mSelRubySize;
    /* 0x0448 */ f32 mSelTBoxWidth;
    /* 0x044C */ f32 mSelCharSpace;
    /* 0x0450 */ f32 mSelRubyCharSpace;
    /* 0x0454 */ f32 mDistanceScale;
    /* 0x0458 */ f32 mAddCharAllAlphaRate;
    /* 0x045C */ f32 mCharAllAlphaRate;
    /* 0x0460 */ f32 mAddCharAlpha;
    /* 0x0464 */ f32 mCharAlpha;
    /* 0x0468 */ f32 mStrLength[40];
    /* 0x0508 */ f32 mSpaceLength[40];
    /* 0x05A8 */ f32 mSelLength[3];
    /* 0x05B4 */ u32 mDemoFrame;
    /* 0x05B8 */ u32 mRevoMessageID;
    /* 0x05BC */ u16* mpStatus;
    /* 0x05C0 */ dMsgObject_c* mpObjectPtr;
    /* 0x05C4 */ char* mpSelMsgPtr;
    /* 0x05C8 */ JUTFont* mpFont;
    /* 0x05CC */ s16 mStartLineCount;
    /* 0x05CE */ s16 mEndLineCount;
    /* 0x05D0 */ u16 mLineCount;
    /* 0x05D2 */ s16 field_0x5d2;
    /* 0x05D4 */ s16 mPageEndCount;
    /* 0x05D6 */ s16 mSendTimer;
    /* 0x05D8 */ s16 mCharCnt;
    /* 0x05DA */ s16 mPageNum;
    /* 0x05DC */ u8 mNowLightCount;
    /* 0x05DD */ u8 mDrawLightCount;
    /* 0x05DE */ u16 mMsgID;
    /* 0x05E0 */ u16 mLineScale[40];
    /* 0x0630 */ u16 mTopTagScale;
    /* 0x0632 */ u16 mNowTagScale;
    /* 0x0634 */ char mWord[10][100];
    /* 0x0A1C */ char mText[0x200];
    /* 0x0C1C */ char mTextS[0x200];
    /* 0x0E1C */ char mRuby[0x200];
    /* 0x101C */ char mSelText[3][50];
    /* 0x10B2 */ char mSelRuby[3][80];
    /* 0x11A2 */ s8 mPageLine[40];
    /* 0x11CA */ s8 mPageLineMax[40];
    /* 0x11F2 */ u8 mPageType[40];
    /* 0x121A */ u8 mLineArrange[40];
    /* 0x1242 */ u8 mSelectNum;
    /* 0x1243 */ u8 mSelectType;
    /* 0x1244 */ u8 mSelectPos;
    /* 0x1245 */ u8 mFukiPosType;
    /* 0x1246 */ u8 mFukiKind;
    /* 0x1247 */ u8 mForm;
    /* 0x1248 */ u8 mArrange;
    /* 0x1249 */ u8 mNowColorType;
    /* 0x124A */ u8 mTopColorType;
    /* 0x124B */ bool mButtonTagStopFlag;
    /* 0x124C */ u8 mSendFlag;
    /* 0x124D */ u8 mStopFlag;
    /* 0x124E */ u8 mSelectRubyFlag;
    /* 0x124F */ u8 mInputFigure;
    /* 0x1250 */ u8 mOutFontRupeeColor;
    /* 0x1251 */ s8 mNowWordCount;
    /* 0x1252 */ s8 mTopWordCount;
    /* 0x1253 */ u8 mCharCountBuffer[31];
    /* 0x1272 */ bool mLightBatchFlag;
    /* 0x1273 */ bool mBatchFlag;
    /* 0x1274 */ bool mSelectSetCancelFlag;
    /* 0x1275 */ bool mBombNameUseFlag;
    /* 0x1276 */ u8 mBatchColorFlag;
};  // Size: 0x1278

struct jmessage_tMeasureProcessor : public JMessage::TRenderingProcessor {
    /* 80229A28 */ jmessage_tMeasureProcessor(jmessage_tReference const*);
    /* 8022B0B0 */ void do_scale(f32);
    /* 8022B18C */ void do_space(u32);
    /* 8022B3EC */ void do_pageType(int);
    /* 8022B454 */ void do_name1();
    /* 8022B458 */ void do_rubyset(void const*, u32);
    /* 8022B4E0 */ void push_word(char*);

    /* 8022B5F4 */ virtual ~jmessage_tMeasureProcessor();
    /* 80229AC4 */ virtual void do_begin(void const*, char const*);
    /* 80229CB4 */ virtual void do_end();
    /* 80229E3C */ virtual void do_character(int);
    /* 8022A268 */ virtual bool do_tag(u32, void const*, u32);

    /* 0x38 */ f32 field_0x38;
    /* 0x3C */ s16 mTotalLineCnt;
    /* 0x3E */ s16 field_0x3e;
    /* 0x40 */ s16 field_0x40;
    /* 0x42 */ u16 field_0x42;
    /* 0x44 */ u8 field_0x44;
    /* 0x45 */ u8 mSelectType;
    /* 0x46 */ u8 field_0x46;
    /* 0x47 */ u8 field_0x47;
    /* 0x48 */ s8 field_0x48;
    /* 0x49 */ s8 field_0x49;
    /* 0x4A */ u8 mPageLineMax;
    /* 0x4B */ s8 field_0x4b;
    /* 0x4C */ u8 field_0x4c;
    /* 0x4D */ u8 field_0x4d;
};  // Size: 0x50

struct jmessage_tControl;
struct jmessage_tSequenceProcessor : public JMessage::TSequenceProcessor,
                                     public jmessage_tMeasureProcessor {
    /* 8022B558 */ jmessage_tSequenceProcessor(jmessage_tReference const*, jmessage_tControl*);
    /* 8022C904 */ void do_name1();
    /* 8022C908 */ void do_space(u32);
    /* 8022CA24 */ void do_rubyset(void const*, u32);
    /* 8022CAAC */ void push_word();
    /* 8022CB10 */ void messageSePlay(u8, u8, cXyz*);
    /* 8022CBE8 */ void calcStringLength();

    /* 8023299C */ virtual ~jmessage_tSequenceProcessor();
    /* 8022B654 */ virtual void do_reset();
    /* 8022B658 */ virtual void do_begin(void const*, char const*);
    /* 8022BA3C */ virtual void do_end();
    /* 8022BFE0 */ virtual void do_character(int);
    /* 8022C1A0 */ virtual bool do_tag(u32, void const*, u32);
    /* 8022BB7C */ virtual bool do_isReady();
    /* 8022C8FC */ virtual bool do_jump_isReady();
    /* 8022CBE4 */ virtual void do_jump(void const*, char const*);

    u8 getMouthCheck() { return mMouthCheck; }
    void setForceForm(u8 forceForm) { mForceForm = forceForm; }

    /* 0x4C jmessage_tMeasureProcessor */
    /* 0x9C */ const void* field_0x9c;
    /* 0xA0 */ const char* field_0xa0;
    /* 0xA4 */ u16 field_0xa4;
    /* 0xA6 */ u16 field_0xa6;
    /* 0xA8 */ s16 field_0xa8;
    /* 0xAA */ u16 field_0xaa;
    /* 0xAC */ u8 field_0xac;
    /* 0xAD */ u8 field_0xad;
    /* 0xAE */ u8 field_0xae;
    /* 0xAF */ u8 mForceForm;
    /* 0xB0 */ u8 mMouthCheck;
    /* 0xB1 */ u8 field_0xb1;
    /* 0xB2 */ u8 field_0xb2;
    /* 0xB3 */ u8 field_0xb3;
    /* 0xB4 */ u8 field_0xb4;
    /* 0xB5 */ s8 field_0xb5;
};

struct CharInfo_c {
    /* 0x00 */ f32 field_0x00;
    /* 0x04 */ f32 field_0x04;
    /* 0x08 */ f32 field_0x08;
    /* 0x0C */ f32 field_0x0c;
    /* 0x10 */ f32 field_0x10;
    /* 0x14 */ f32 field_0x14;
    /* 0x18 */ u8 mColorNo;
    /* 0x19 */ u8 field_0x19;
};

struct jmessage_tRenderingProcessor : public JMessage::TRenderingProcessor {
    /* 8022CCB0 */ jmessage_tRenderingProcessor(jmessage_tReference const*);
    /* 8022E12C */ void resetRendering();
    /* 8022E17C */ void do_widthcenter();
    /* 8022E260 */ void do_selwidthcenter(int);
    /* 8022E318 */ void do_heightcenter();
    /* 8022E7CC */ void do_color(u8);
    /* 8022E860 */ void do_scale(f32);
    /* 8022E960 */ void do_linedown(s16);
    /* 8022E9C0 */ void do_transY(s16, bool);
    /* 8022EAE4 */ void do_outfont(u8, u32);
    /* 8022ED10 */ void do_arrow2();
    /* 8022EECC */ f32 getLineLength(int);
    /* 8022EF00 */ void do_strcat(char*, bool, bool, bool);
    /* 8022F148 */ void do_rubyset(void const*, u32);
    /* 8022F384 */ void do_rubystrcat(char*, char*, f32, f32);
    /* 8022F53C */ void do_name1();
    /* 8022F540 */ void do_numset(s16);
    /* 8022F734 */ void push_word();
    /* 8022F784 */ void getCharInfo(f32, f32, f32, f32, f32);

    /* 8023293C */ virtual ~jmessage_tRenderingProcessor();
    /* 8022CDC8 */ virtual void do_reset();
    /* 8022CDCC */ virtual void do_begin(void const*, char const*);
    /* 8022CFD8 */ virtual void do_end();
    /* 8022D0A0 */ virtual void do_character(int);
    /* 8022D74C */ virtual bool do_tag(u32, void const*, u32);

    void setTextInitPos(float x, float y) {
        mTextInitPosX = x;
        mTextInitPosY = y;
    }

    void setTextScale(float x, float y) {
        mTextInitScaleX = x;
        mTextInitScaleY = y;
    }

    void setSelTextInitPos(int idx, float x, float y) {
        mSelTextInitPosX[idx] = x;
        mSelTextInitPosY[idx] = y;
    }

    void setTextInitOffsetPos(f32 offset) { mTextInitOffsetPos = offset; }
    void setOutFont(COutFont_c* font) { mpOutFont = font; }
    void setCharInfoPtr(CharInfo_c* info) { mCharInfoPtr = info; }

    /* 0x038 */ COutFont_c* mpOutFont;
    /* 0x03C */ CharInfo_c* mCharInfoPtr;
    /* 0x040 */ s16* mpCharInfoCnt;
    /* 0x044 */ f32 field_0x44;
    /* 0x048 */ f32 field_0x48;
    /* 0x04C */ f32 field_0x4c;
    /* 0x050 */ f32 mTextInitPosX;
    /* 0x054 */ f32 mTextInitPosY;
    /* 0x058 */ f32 mTextInitScaleX;
    /* 0x05C */ f32 mTextInitScaleY;
    /* 0x060 */ f32 mSelTextInitPosX[3];
    /* 0x06C */ f32 mSelTextInitPosY[3];
    /* 0x078 */ f32 mTextInitOffsetPos;
    /* 0x07C */ f32 field_0x7c[40];
    /* 0x11C */ int field_0x11c;
    /* 0x120 */ u32 mCCColor;
    /* 0x124 */ u32 mGCColor;
    /* 0x128 */ f32 field_0x128;
    /* 0x12C */ f32 field_0x12c;
    /* 0x130 */ f32 field_0x130;
    /* 0x134 */ f32 field_0x134;
    /* 0x138 */ f32 field_0x138;
    /* 0x13C */ u16 field_0x13c;
    /* 0x13E */ u16 field_0x13e;
    /* 0x140 */ u16 field_0x140;
    /* 0x142 */ u16 field_0x142;
    /* 0x144 */ u16 field_0x144;
    /* 0x146 */ u16 field_0x146;
    /* 0x148 */ u16 field_0x148;
    /* 0x14A */ u16 field_0x14a;
    /* 0x14C */ u8 field_0x14c;
    /* 0x14D */ u8 field_0x14d;
    /* 0x14E */ u8 field_0x14e;
    /* 0x14F */ s8 field_0x14f;
    /* 0x150 */ u8 mColorNo;
    /* 0x151 */ u8 field_0x151;
    /* 0x152 */ char field_0x152[0x184 - 0x152];
    /* 0x184 */ u8 field_0x184;
    /* 0x185 */ u8 field_0x185;
    /* 0x186 */ u8 field_0x186;
    /* 0x187 */ u8 field_0x187;
};

struct jmessage_string_tControl : public JMessage::TControl {
    /* 8022FB5C */ jmessage_string_tControl();

    /* 802328DC */ virtual ~jmessage_string_tControl();
};

struct jmessage_string_tReference : public JMessage::TReference {
    /* 8022F8C0 */ jmessage_string_tReference();
    /* 8022F9AC */ void init(J2DTextBox*, J2DTextBox*, JUTFont*, COutFont_c*, u8);
    /* 8022FA2C */ void setCharactor(u16);
    /* 8022FA30 */ void addCharactor(u16);
    /* 8022FA34 */ void resetCharactor();
    /* 8022FA38 */ f32 getLineLength(int);
    /* 8022FA6C */ void addLineLength(int, f32);
    /* 8022FA98 */ f32 getOutfontLength(int);
    /* 8022FACC */ void setOutfontLength(int, f32);
    /* 8022FAF0 */ void clearOutfontLength(int);
    /* 8022FB24 */ s16 getLineCountNowPage();
    J2DTextBox* getPanePtr() { return mPanePtr; }
    J2DTextBox* getRubyPanePtr() { return mRubyPanePtr; }
    u32 getCCColor() { return mCCColor; }
    u32 getGCColor() { return mGCColor; }
    u8 getLineMax() { return mLineMax; }
    u8 getNowPage() { return mNowPage; }
    JUTFont* getFont() { return mpFont; }
    s16 getLineCount() { return mLineCount; }
    void setLineCount(s16 lineCount) { mLineCount = lineCount; }
    void addLineCount() { mLineCount++; }
    u8 isFlag(u8 flag) { return mFlags & flag; }
    void setColor(u32 ccColor, u32 gcColor) {
        mCCColor = ccColor;
        mGCColor = gcColor;
    }
    void setNowPage(u8 nowPage) { mNowPage = nowPage; }
    void setLineMax(u8 lineMax) { mLineMax = lineMax; }

    /* 8022F94C */ virtual ~jmessage_string_tReference();

    /* 0x08 */ J2DTextBox* mPanePtr;
    /* 0x0C */ J2DTextBox* mRubyPanePtr;
    /* 0x10 */ COutFont_c* mOutFontPtr;
    /* 0x14 */ JUTFont* mpFont;
    /* 0x18 */ f32 mLineLength[12];
    /* 0x48 */ f32 mOutfontLength[12];
    /* 0x78 */ u32 mCCColor;
    /* 0x7C */ u32 mGCColor;
    /* 0x80 */ s16 mLineCount;
    /* 0x82 */ u8 mLineMax;
    /* 0x83 */ u8 mNowPage;
    /* 0x84 */ u8 mFlags;
};

struct jmessage_string_tMeasureProcessor : public JMessage::TRenderingProcessor {
    /* 8022FB98 */ jmessage_string_tMeasureProcessor(jmessage_string_tReference const*);
    /* 8023098C */ void do_rubyset(void const*, u32);

    /* 80230A5C */ virtual ~jmessage_string_tMeasureProcessor();
    /* 8022FBE4 */ virtual void do_begin(void const*, char const*);
    /* 8022FC14 */ virtual void do_end();
    /* 8022FC28 */ virtual void do_character(int);
    /* 8022FDF0 */ virtual bool do_tag(u32, void const*, u32);

    /* 0x38 */ jmessage_string_tReference* mpReference;
};

struct jmessage_string_tSequenceProcessor : public JMessage::TSequenceProcessor, public jmessage_string_tMeasureProcessor {
    /* 80230A08 */ jmessage_string_tSequenceProcessor(jmessage_string_tReference const*,
                                                      jmessage_string_tControl*);

    /* 80232858 */ virtual ~jmessage_string_tSequenceProcessor();
    /* 80230ABC */ virtual void do_reset();
    /* 80230AC0 */ virtual void do_begin(void const*, char const*);
    /* 80230B7C */ virtual void do_end();
    /* 80230B88 */ virtual void do_character(int);
    /* 80230B8C */ virtual bool do_tag(u32, void const*, u32);
    /* 80230B80 */ virtual bool do_isReady();
    /* 80230BBC */ virtual bool do_jump_isReady();
    /* 80230BC4 */ virtual void do_jump(void const*, char const*);
    
    /* 0x88 */ jmessage_string_tReference* mpSeqReference;
};

struct jmessage_string_tRenderingProcessor : public JMessage::TRenderingProcessor {
    /* 80230BC8 */ jmessage_string_tRenderingProcessor(jmessage_string_tReference const*);
    /* 80230C20 */ s16 getLineCountNowPage();
    /* 80231D70 */ void do_widthcenter();
    /* 80231EF0 */ void do_heightcenter();
    /* 80232044 */ void do_strcat(char*);
    /* 802320B0 */ void do_rubyset(void const*, u32);
    /* 80232260 */ void do_rubystrcat(char*);
    /* 802322CC */ void do_outfont(u8);
    /* 8023256C */ void do_color(u8);
    /* 80232600 */ void do_scale(f32);
    /* 80232690 */ void do_linedown(s16);
    /* 802326E4 */ void do_numset(s16);
    /* 802327BC */ void push_word(char const*);

    /* 802327F8 */ virtual ~jmessage_string_tRenderingProcessor();
    /* 80230C5C */ virtual void do_reset();
    /* 80230CA0 */ virtual void do_begin(void const*, char const*);
    /* 80230CE8 */ virtual void do_end();
    /* 80230D48 */ virtual void do_character(int);
    /* 80231110 */ virtual bool do_tag(u32, void const*, u32);

    char* getString() { return field_0x54; }

    /* 0x038 */ jmessage_string_tReference* mpReference;
    /* 0x03C */ f32 field_0x3c;
    /* 0x040 */ f32 field_0x40;
    /* 0x044 */ f32 field_0x44;
    /* 0x048 */ f32 field_0x48;
    /* 0x04C */ f32 field_0x4c;
    /* 0x050 */ f32 field_0x50;
    /* 0x054 */ char field_0x54[0x200];
    /* 0x254 */ char field_0x254[0x200];
    /* 0x454 */ char field_0x454[0x486 - 0x454];
    /* 0x486 */ char field_0x486[0x20]; // Unknown length
    /* 0x4a6 */ u8 field_0x4a6[0x54e - 0x4a6];
    /* 0x54E */ s16 field_0x54e;
    /* 0x550 */ s16 field_0x550;
    /* 0x552 */ s16 field_0x552;
    /* 0x554 */ u8 field_0x554;
};

#endif /* D_MSG_D_MSG_CLASS_H */