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
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
|
#ifndef D_MSG_D_MSG_CLASS_H
#define D_MSG_D_MSG_CLASS_H
#include "JSystem/JMessage/control.h"
#include "JSystem/JMessage/JMessage.h"
#include "SSystem/SComponent/c_xyz.h"
#if REGION_JPN
#define D_MSG_CLASS_PAGE_CNT_MAX 30
#define D_MSG_CLASS_CHAR_CNT_MAX 0x210
#define D_MSG_CLASS_LINE_MAX 9
#else
#define D_MSG_CLASS_PAGE_CNT_MAX 40
#define D_MSG_CLASS_CHAR_CNT_MAX 0x200
#define D_MSG_CLASS_LINE_MAX 12
#endif
class JMSMesgEntry_c {
public:
/* 0x0 */ u32 string_offset;
// Attributes
/* 0x04 */ u16 message_id;
/* 0x06 */ u16 event_label_id;
/* 0x08 */ u8 se_speaker;
/* 0x09 */ u8 fuki_kind;
/* 0x0A */ u8 output_type;
/* 0x0B */ u8 fuki_pos_type;
/* 0x0C */ u8 unk_0xc;
/* 0x0D */ u8 unk_0xd;
/* 0x0E */ u8 se_mood;
/* 0x0F */ u8 camera_id;
/* 0x10 */ u8 base_anm_id;
/* 0x11 */ u8 face_anm_id;
/* 0x12 */ u16 unk_0x12;
};
class JMSMesgInfo_c {
public:
/* 0x00 */ bmg_section_t header; // section header
/* 0x08 */ u16 entry_num; // number of entries in this section
/* 0x0A */ u16 entry_size; // size of an entry
/* 0x0C */ u8 padding[4]; // padding
/* 0x10 */ JMSMesgEntry_c entries[0];
};
class COutFont_c;
class J2DTextBox;
class JUTFont;
class STControl;
class dMsgObject_c;
struct jmessage_tReference : public JMessage::TReference {
jmessage_tReference();
void calcDistance();
u8 getLineMax();
bool isKanban();
bool isPlaceName();
bool isBossName();
bool isSaveSeq();
bool isBook();
bool isStaffRoll();
bool isHowl();
bool isMidona();
void resetReference();
void pageSend();
void selectMessage();
void inputNumber();
char* getWord(int);
void resetWord();
void setCharactor(u16);
void addCharactor(u16);
void resetCharactor();
void shiftCharCountBuffer();
void resetCharCountBuffer();
void allsetCharCountBuffer();
bool isCharSend();
bool isLightSend();
bool isLightEnd();
void decideOutFontRupeeColor(int);
cXyz getActorPos() { return mActorPos; }
void setActorPos(cXyz pos) { mActorPos = pos; }
bool isSelectSetCancelFlag() {
return mSelectSetCancelFlag ? true : false;
}
BOOL isSelectRubyFlag(int i_flag) {
BOOL var_r31;
if (mSelectRubyFlag & (u8)(1 << i_flag)) {
var_r31 = true;
} else {
var_r31 = false;
}
return var_r31;
}
bool isBatchFlag() { return mBatchFlag ? true : false; }
bool isLightBatchFlag() { return mLightBatchFlag ? true : false; }
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 setTopColorType(u8 i_colorType) { mTopColorType = i_colorType; }
void setNowColorType(u8 i_colorType) { mNowColorType = i_colorType; }
void setTopTagScale(u16 i_tagScale) { mTopTagScale = i_tagScale; }
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 setTopWordCount(s8 wordCount) { mTopWordCount = wordCount; }
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 |= (u8)(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 resetCharCnt() { mCharCnt = 0; }
void setFukiPosType(u8 type) { mFukiPosType = type; }
void setFukiKind(u8 kind) { mFukiKind = kind; }
void setForm(u8 form) { mForm = form; }
void setArrange(u8 arrange) { mArrange = arrange; }
void setMsgID(u16 id) { mMsgID = id; }
void offBombNameUseFlag() { mBombNameUseFlag = false; }
void setNowLightCount(u8 count) { mNowLightCount = count; }
void setCharCnt(s16 cnt) { mCharCnt = cnt; }
void offButtonTagStopFlag() { mButtonTagStopFlag = false; }
void onLightBatchFlag() { mLightBatchFlag = true; }
void addNowLightCount() { mNowLightCount++; }
void addLineCount() { mLineCount++; }
void addEndLineCount() { mEndLineCount++; }
void onSelectSetCancelFlag() { mSelectSetCancelFlag = true; }
void offSelectSetCancelFlag() { mSelectSetCancelFlag = false; }
void addDrawLightCount() { mDrawLightCount++; }
void setCharAlpha(f32 alpha) { mCharAlpha = alpha; }
void addCharAlpha() {
mCharAlpha += mAddCharAlpha;
if (mCharAlpha > 255.0f) {
mCharAlpha = 255.0f;
}
}
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;
}
}
void addLineLength(int param_0, f32 param_1, f32 param_2) {
mStrLength[param_0] += param_1;
mSpaceLength[param_0] += param_2;
}
void addSelLength(int param_0, f32 param_1) {
mSelLength[param_0] += param_1;
}
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 ? true : false; }
u8 getStopFlag() { return mStopFlag; }
u8 getSendFlag() { return mSendFlag; }
u8 getFukiPosType() { return mFukiPosType; }
u16 getStatus() { return *mpStatus; }
u8 getArrange() { return mArrange; }
u8 getLineArrange(int idx) { return mLineArrange[idx]; }
f32 getSelFontSize() { return mSelFontSize; }
f32 getSelCharSpace() { return mSelCharSpace; }
u16 getLineScale(int i_no) { return mLineScale[i_no]; }
bool isBombNameUseFlag() { return mBombNameUseFlag ? true : false; }
f32 getSelLength(int idx) { return mSelLength[idx]; }
void setAddCharAlpha(f32 alpha) { mAddCharAlpha = alpha; }
s8 getNowPageLineMax() { return mPageLineMax[field_0x5d2]; }
s16 getLineCount() { return mLineCount; }
void onBatchFlag() { mBatchFlag = true; }
s16 getPageNum() { return mPageNum; }
s16 getPageEndCount() { return mPageEndCount; }
s8 getTopWordCount() { return mTopWordCount; }
u8 getTopColorType() { return mTopColorType; }
u16 getTopTagScale() { return mTopTagScale; }
u8 getBatchColorFlag() { return mBatchColorFlag; }
f32 getLineSpace() { return mLineSpace; }
u8 getNowPageType() { return mPageType[field_0x5d2]; }
f32 getTBoxWidth() { return mTBoxWidth;}
f32 getTBoxHeight() { return mTBoxHeight;}
s8 getNowPageLine() { return mPageLine[field_0x5d2]; }
u8 getOutFontRupeeColor() { return mOutFontRupeeColor; }
f32 getCharAlpha() { return mCharAlpha; }
s16 getCharCnt() { return mCharCnt; }
struct CharSoundInfo {
u16 data[D_MSG_CLASS_CHAR_CNT_MAX];
s16 field_0x40c;
s16 field_0x40e;
s16 mCountBackUp;
};
CharSoundInfo getCharSoundInfo() { return mCharactor; }
u32 getDemoFrame() { return mDemoFrame; }
u32 getRevoMessageID() { return mRevoMessageID; }
f32 getCharAllAlphaRate() { return mCharAllAlphaRate; }
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[D_MSG_CLASS_PAGE_CNT_MAX];
/* 0x0508 */ f32 mSpaceLength[D_MSG_CLASS_PAGE_CNT_MAX];
/* 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 */ s16 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[D_MSG_CLASS_PAGE_CNT_MAX];
/* 0x0630 */ u16 mTopTagScale;
/* 0x0632 */ u16 mNowTagScale;
/* 0x0634 */ char mWord[10][100];
/* 0x0A1C */ char mText[D_MSG_CLASS_CHAR_CNT_MAX];
/* 0x0C1C */ char mTextS[D_MSG_CLASS_CHAR_CNT_MAX];
/* 0x0E1C */ char mRuby[D_MSG_CLASS_CHAR_CNT_MAX];
/* 0x101C */ char mSelText[3][50];
/* 0x10B2 */ char mSelRuby[3][80];
/* 0x11A2 */ s8 mPageLine[D_MSG_CLASS_PAGE_CNT_MAX];
/* 0x11CA */ s8 mPageLineMax[D_MSG_CLASS_PAGE_CNT_MAX];
/* 0x11F2 */ u8 mPageType[D_MSG_CLASS_PAGE_CNT_MAX];
/* 0x121A */ u8 mLineArrange[D_MSG_CLASS_PAGE_CNT_MAX];
/* 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 {
jmessage_tMeasureProcessor(jmessage_tReference const* pReference);
void do_scale(f32);
void do_space(u32);
void do_pageType(int);
void do_name1();
void do_rubyset(void const*, u32);
void push_word(char*);
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
/* 0x38 */ f32 field_0x38;
/* 0x3C */ s16 mTotalLineCnt;
/* 0x3E */ s16 field_0x3e;
/* 0x40 */ s16 field_0x40;
/* 0x42 */ u16 mSeMood;
/* 0x44 */ u8 field_0x44;
/* 0x45 */ u8 mSelectType;
/* 0x46 */ u8 field_0x46;
/* 0x47 */ u8 field_0x47;
/* 0x48 */ u8 field_0x48;
/* 0x49 */ s8 field_0x49;
/* 0x4A */ s8 mPageLineMax;
/* 0x4B */ s8 field_0x4b;
/* 0x4C */ u8 mSeSpeaker;
/* 0x4D */ u8 field_0x4d;
}; // Size: 0x50
struct jmessage_tControl : public JMessage::TControl {
jmessage_tControl();
virtual ~jmessage_tControl();
};
struct jmessage_tSequenceProcessor : public JMessage::TSequenceProcessor {
jmessage_tSequenceProcessor(jmessage_tReference const* pReference, jmessage_tControl* pControl);
void do_name1();
void do_space(u32);
void do_rubyset(void const*, u32);
void push_word();
void messageSePlay(u8, u8, cXyz*);
void calcStringLength();
virtual void do_reset();
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
virtual bool do_isReady();
virtual bool do_jump_isReady();
virtual void do_jump(void const* pEntry, char const* pszText);
u8 getMouthCheck() { return mMouthCheck; }
void setForceForm(u8 forceForm) { mForceForm = forceForm; }
/* 0x4C */ jmessage_tMeasureProcessor mMeasureProcessor;
/* 0x9C */ const void* mpEntry;
/* 0xA0 */ const char* mpText;
/* 0xA4 */ s16 field_0xa4;
/* 0xA6 */ s16 field_0xa6;
/* 0xA8 */ s16 field_0xa8;
/* 0xAA */ s16 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 {
jmessage_tRenderingProcessor(jmessage_tReference const* pReference);
void resetRendering();
void do_widthcenter();
void do_selwidthcenter(int);
void do_heightcenter();
void do_color(u8);
void do_scale(f32);
void do_linedown(s16);
void do_transY(s16, bool);
void do_outfont(u8, u32);
void do_arrow2();
f32 getLineLength(int);
void do_strcat(char*, bool, bool, bool);
void do_rubyset(void const*, u32);
void do_rubystrcat(char*, char*, f32, f32);
void do_name1();
void do_numset(s16);
void push_word();
void getCharInfo(f32, f32, f32, f32, f32);
virtual void do_reset();
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
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[D_MSG_CLASS_PAGE_CNT_MAX];
/* 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 */ s16 field_0x13e;
/* 0x140 */ s16 field_0x140;
/* 0x142 */ s16 field_0x142;
/* 0x144 */ u16 field_0x144;
/* 0x146 */ s16 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 */ char field_0x184[3];
/* 0x187 */ u8 field_0x187;
};
struct jmessage_string_tControl : public JMessage::TControl {
jmessage_string_tControl();
};
struct jmessage_string_tReference : public JMessage::TReference {
jmessage_string_tReference();
void init(J2DTextBox*, J2DTextBox*, JUTFont*, COutFont_c*, u8);
void setCharactor(u16);
void addCharactor(u16);
void resetCharactor();
f32 getLineLength(int);
void addLineLength(int, f32);
f32 getOutfontLength(int);
void setOutfontLength(int, f32);
void clearOutfontLength(int);
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++; }
BOOL isFlag(u8 flag) {
BOOL rv;
if (mFlags & flag) {
rv = 1;
} else {
rv = 0;
}
return rv;
}
void setColor(u32 ccColor, u32 gcColor) {
mCCColor = ccColor;
mGCColor = gcColor;
}
void setNowPage(u8 nowPage) { mNowPage = nowPage; }
void setLineMax(u8 lineMax) { mLineMax = lineMax; }
COutFont_c* getOutFontPtr() { return mOutFontPtr; }
virtual ~jmessage_string_tReference();
/* 0x08 */ J2DTextBox* mPanePtr;
/* 0x0C */ J2DTextBox* mRubyPanePtr;
/* 0x10 */ COutFont_c* mOutFontPtr;
/* 0x14 */ JUTFont* mpFont;
/* 0x18 */ f32 mLineLength[D_MSG_CLASS_LINE_MAX];
/* 0x3C */ f32 mOutfontLength[D_MSG_CLASS_LINE_MAX];
/* 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 {
jmessage_string_tMeasureProcessor(jmessage_string_tReference const* pReference);
void do_rubyset(void const*, u32);
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
/* 0x38 */ jmessage_string_tReference* mpReference;
};
struct jmessage_string_tSequenceProcessor : public JMessage::TSequenceProcessor {
jmessage_string_tSequenceProcessor(jmessage_string_tReference const* pReference,
jmessage_string_tControl* pControl);
virtual void do_reset();
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
virtual bool do_isReady();
virtual bool do_jump_isReady();
virtual void do_jump(void const* pEntry, char const* pszText);
/* 0x4C */ jmessage_string_tMeasureProcessor mMeasureProcessor;
/* 0x88 */ jmessage_string_tReference* mpSeqReference;
};
struct jmessage_string_tRenderingProcessor : public JMessage::TRenderingProcessor {
jmessage_string_tRenderingProcessor(jmessage_string_tReference const* pReference);
s16 getLineCountNowPage();
void do_widthcenter();
void do_heightcenter();
void do_strcat(char*);
void do_rubyset(void const*, u32);
void do_rubystrcat(char*);
void do_outfont(u8);
void do_color(u8);
void do_scale(f32);
void do_linedown(s16);
void do_numset(s16);
void push_word(char const*);
virtual void do_reset();
virtual void do_begin(void const* pEntry, char const* pszText);
virtual void do_end();
virtual void do_character(int iCharacter);
virtual bool do_tag(u32 uTag, void const* pData, u32 uSize);
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[D_MSG_CLASS_CHAR_CNT_MAX];
/* 0x254 */ char field_0x254[D_MSG_CLASS_CHAR_CNT_MAX];
/* 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;
};
#define MSGTAG_GROUP(g) (g << 16)
// Group 0
#define MSGTAG_PLAYER_NAME 0
#define MSGTAG_INSTANT 1
#define MSGTAG_TYPE 2
#define MSGTAG_UNK_3 3 // appears the same as autobox
#define MSGTAG_AUTOBOX 4
#define MSGTAG_BOXATMOST 5
#define MSGTAG_UNK_6 6
#define MSGTAG_PAUSE 7
#define MSGTAG_SELECT_2WAY 8
#define MSGTAG_SELECT_3WAY 9
#define MSGTAG_ABTN 10
#define MSGTAG_BBTN 11
#define MSGTAG_CSTICK 12
#define MSGTAG_LBTN 13
#define MSGTAG_RBTN 14
#define MSGTAG_XBTN 15
#define MSGTAG_YBTN 16
#define MSGTAG_ZBTN 17
#define MSGTAG_DPAD 18
#define MSGTAG_STICK_CROSS 19
#define MSGTAG_LEFT_ARROW 20
#define MSGTAG_RIGHT_ARROW 21
#define MSGTAG_UP_ARROW 22
#define MSGTAG_DOWN_ARROW 23
#define MSGTAG_STICK_UP 24
#define MSGTAG_STICK_DOWN 25
#define MSGTAG_STICK_LEFT 26
#define MSGTAG_STICK_RIGHT 27
#define MSGTAG_STICK_VERTICAL 28
#define MSGTAG_STICK_HORIZONTAL 29
#define MSGTAG_INLINE_2_NEXT 30
#define MSGTAG_INLINE_2_FIRST 31
#define MSGTAG_AWAIT_CHOICE 32
#define MSGTAG_UNK_33 33 // calls "do_name1" but the function does nothing
#define MSGTAG_HORSE_NAME 34
#define MSGTAG_RED_TARGET 35
#define MSGTAG_YELLOW_TARGET 36
#define MSGTAG_INPUT_VALUE 37
#define MSGTAG_ACKNOWLEDGE 38
#define MSGTAG_ABTN_STAR 39
#define MSGTAG_DEMOBOX 40
#define MSGTAG_SCENT_NAME 41
#define MSGTAG_WHITE_TARGET 42
#define MSGTAG_PORTAL_NAME 43
#define MSGTAG_WARP_ICON 44
#define MSGTAG_BOMB_NAME 45
#define MSGTAG_XYBTN 46
#define MSGTAG_YXBTN 47
#define MSGTAG_BOMB_BAG_ICON 48
#define MSGTAG_BOMB_NUM 49
#define MSGTAG_BOMB_PRICE 50
#define MSGTAG_INLINE_3_NEXT 51
#define MSGTAG_INLINE_3_FIRST 52
#define MSGTAG_UNK_53 53
#define MSGTAG_BOXATLEAST 54
#define MSGTAG_BOMB_MAX 55
#define MSGTAG_ARROW_MAX 56
#define MSGTAG_HEART 57
#define MSGTAG_QUAVER 58
#define MSGTAG_INSECT_NAME 59
#define MSGTAG_LETTER_NAME 60
#define MSGTAG_LINE_DOWN 61
#define MSGTAG_CURRENT_LETTER_PAGE 62
#define MSGTAG_MAX_LETTER_PAGE 63
// Group 3
#define MSGTAG_WII_MSGID_OVERRIDE 0
#define MSGTAG_WII_ABTN 1
#define MSGTAG_WII_BBTN 2
#define MSGTAG_WII_HOMEBTN 3
#define MSGTAG_WII_MINUSBTN 4
#define MSGTAG_WII_PLUSBTN 5
#define MSGTAG_WII_1BTN 6
#define MSGTAG_WII_2BTN 7
#define MSGTAG_WII_DPAD_ITEM 8
#define MSGTAG_WII_DPAD_UP 9
#define MSGTAG_WII_DPAD_DOWN 10
#define MSGTAG_WII_DPAD_HORIZONTAL 11
#define MSGTAG_WII_DPAD_RIGHT 12
#define MSGTAG_WII_DPAD_LEFT 13
#define MSGTAG_WII_WIIMOTE 14
#define MSGTAG_WII_RETICULE 15
#define MSGTAG_WII_NUNCHUK 16
#define MSGTAG_WII_WIIMOTE2 17
#define MSGTAG_WII_FAIRY 18
#define MSGTAG_WII_CBTN 19
#define MSGTAG_WII_ZBTN 20
// Group 4
#define MSGTAG_GLYPH_DOLLARSIGN 0
#define MSGTAG_GLYPH_BACKSLASH 1
#define MSGTAG_GLYPH_ATMARK 2
#define MSGTAG_GLYPH_SHARP 3
#define MSGTAG_GLYPH_FLAT 4
#define MSGTAG_GLYPH_SQRT 5
#define MSGTAG_GLYPH_PERCENT 6
#define MSGTAG_GLYPH_HECTARE 7
#define MSGTAG_GLYPH_ARE 8
#define MSGTAG_GLYPH_LITRE 9
#define MSGTAG_GLYPH_WATT 10
#define MSGTAG_GLYPH_CALORIE 11
#define MSGTAG_GLYPH_DOLLAR 12
#define MSGTAG_GLYPH_CENT 13
// Group 5
#define MSGTAG_TIME_INFO 0
#define MSGTAG_INSECT_INFO 3
#define MSGTAG_RIVER_POINTS 7
#define MSGTAG_FISH_LENGTH 8
#define MSGTAG_FUNDRAISE_REMAIN 9
#define MSGTAG_NEW_LETTER_NUM 10
#define MSGTAG_POE_NUM 11
#define MSGTAG_BALLOON_SCORE 12
#define MSGTAG_FISH_COUNT 13
#define MSGTAG_ROLLGOAL_LV 14
// Group 6
#define MSGTAG_PLAYER_GENITIV 0
#define MSGTAG_HORSE_GENITIV 1
#define MSGTAG_MALE_ICON 2
#define MSGTAG_FEMALE_ICON 3
#define MSGTAG_STAR_ICON 4
#define MSGTAG_REFMARK 5
#define MSGTAG_THIN_LEFT_ARROW 6
#define MSGTAG_THIN_RIGHT_ARROW 7
#define MSGTAG_THIN_UP_ARROW 8
#define MSGTAG_THIN_DOWN_ARROW 9
#define MSGTAG_BULLET 10
#define MSGTAG_BULLET_SPACE 11
// Group 255
#define MSGTAG_COLOR (MSGTAG_GROUP(255) | 0)
#define MSGTAG_SCALE (MSGTAG_GROUP(255) | 1)
#define MSGTAG_RUBY (MSGTAG_GROUP(255) | 2)
#endif /* D_MSG_D_MSG_CLASS_H */
|