summaryrefslogtreecommitdiff
path: root/include/message_data_fmt.h
blob: 375ac281e6f59ac9a21e3063f02e3febf36b5b27 (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
#ifndef MESSAGE_DATA_FMT_H
#define MESSAGE_DATA_FMT_H

#include "save.h" // For highscores
#include "item.h" // For item ids
#include "sfx.h" // For sfx ids

/*
 * Text control characters
 */

// Non-Wide (nes/ger/fra)

#define MESSAGE_NEWLINE                    0x01
#define MESSAGE_END                        0x02
#define MESSAGE_BOX_BREAK                  0x04
#define MESSAGE_COLOR                      0x05
#define MESSAGE_SHIFT                      0x06
#define MESSAGE_TEXTID                     0x07
#define MESSAGE_QUICKTEXT_ENABLE           0x08
#define MESSAGE_QUICKTEXT_DISABLE          0x09
#define MESSAGE_PERSISTENT                 0x0A
#define MESSAGE_EVENT                      0x0B
#define MESSAGE_BOX_BREAK_DELAYED          0x0C
#define MESSAGE_AWAIT_BUTTON_PRESS         0x0D
#define MESSAGE_FADE                       0x0E
#define MESSAGE_NAME                       0x0F
#define MESSAGE_OCARINA                    0x10
#define MESSAGE_FADE2                      0x11
#define MESSAGE_SFX                        0x12
#define MESSAGE_ITEM_ICON                  0x13
#define MESSAGE_TEXT_SPEED                 0x14
#define MESSAGE_BACKGROUND                 0x15
#define MESSAGE_MARATHON_TIME              0x16
#define MESSAGE_RACE_TIME                  0x17
#define MESSAGE_POINTS                     0x18
#define MESSAGE_TOKENS                     0x19
#define MESSAGE_UNSKIPPABLE                0x1A
#define MESSAGE_TWO_CHOICE                 0x1B
#define MESSAGE_THREE_CHOICE               0x1C
#define MESSAGE_FISH_INFO                  0x1D
#define MESSAGE_HIGHSCORE                  0x1E
#define MESSAGE_TIME                       0x1F

// Wide (jpn)

#define MESSAGE_WIDE_NEWLINE               0x000A
#define MESSAGE_WIDE_END                   0x8170
#define MESSAGE_WIDE_BOX_BREAK             0x81A5
#define MESSAGE_WIDE_COLOR                 0x000B
#define MESSAGE_WIDE_SHIFT                 0x86C7
#define MESSAGE_WIDE_TEXTID                0x81CB
#define MESSAGE_WIDE_QUICKTEXT_ENABLE      0x8189
#define MESSAGE_WIDE_QUICKTEXT_DISABLE     0x818A
#define MESSAGE_WIDE_PERSISTENT            0x86C8
#define MESSAGE_WIDE_EVENT                 0x819F
#define MESSAGE_WIDE_BOX_BREAK_DELAYED     0x81A3
#define MESSAGE_WIDE_AWAIT_BUTTON_PRESS    0x81A4
#define MESSAGE_WIDE_FADE                  0x819E
#define MESSAGE_WIDE_NAME                  0x874F
#define MESSAGE_WIDE_OCARINA               0x81F0
#define MESSAGE_WIDE_FADE2                 0x81F4
#define MESSAGE_WIDE_SFX                   0x81F3
#define MESSAGE_WIDE_ITEM_ICON             0x819A
#define MESSAGE_WIDE_TEXT_SPEED            0x86C9
#define MESSAGE_WIDE_BACKGROUND            0x86B3
#define MESSAGE_WIDE_MARATHON_TIME         0x8791
#define MESSAGE_WIDE_RACE_TIME             0x8792
#define MESSAGE_WIDE_POINTS                0x879B
#define MESSAGE_WIDE_TOKENS                0x86A3
#define MESSAGE_WIDE_UNSKIPPABLE           0x8199
#define MESSAGE_WIDE_TWO_CHOICE            0x81BC
#define MESSAGE_WIDE_THREE_CHOICE          0x81B8
#define MESSAGE_WIDE_FISH_INFO             0x86A4
#define MESSAGE_WIDE_HIGHSCORE             0x869F
#define MESSAGE_WIDE_TIME                  0x81A1

/*
 * Message character constants
 */

// Non-Wide (nes/ger/fra)

#define MESSAGE_CHAR_SPACE                               0x20 // ' '

// Wide (jpn)

#define MESSAGE_WIDE_CHAR_SPACE                          0x8140 // ' '
#define MESSAGE_WIDE_CHAR_TOUTEN                         0x8141 // '、'
#define MESSAGE_WIDE_CHAR_KUTEN                          0x8142 // '。'
#define MESSAGE_WIDE_CHAR_PERIOD                         0x8144 // '.'
#define MESSAGE_WIDE_CHAR_NAKATEN                        0x8145 // '・'
#define MESSAGE_WIDE_CHAR_QUESTION_MARK                  0x8148 // '?'
#define MESSAGE_WIDE_CHAR_EXCLAMATION_MARK               0x8149 // '!'
#define MESSAGE_WIDE_CHAR_CIRCUMFLEX_ACCENT              0x814F // '^'
#define MESSAGE_WIDE_CHAR_DOUBLE_QUOTATION_MARK_LEFT     0x8167 // '“'
#define MESSAGE_WIDE_CHAR_DOUBLE_QUOTATION_MARK_RIGHT    0x8168 // '”'
#define MESSAGE_WIDE_CHAR_PARENTHESES_LEFT               0x8169 // '('
#define MESSAGE_WIDE_CHAR_PARENTHESES_RIGHT              0x816A // ')'
#define MESSAGE_WIDE_CHAR_KAGIKAKKO_LEFT                 0x8175 // '「'
#define MESSAGE_WIDE_CHAR_KAGIKAKKO_RIGHT                0x8176 // '」'
#define MESSAGE_WIDE_CHAR_NUMBER_SIGN                    0x8194 // '#'
#define MESSAGE_WIDE_CHAR_ASTERISK                       0x8196 // '*'
#define MESSAGE_WIDE_CHAR_ZERO                           0x824F // '0'
#define MESSAGE_WIDE_CHAR_ONE                            0x8250 // '1'
#define MESSAGE_WIDE_CHAR_HOURS                          0x8E9E // '時'
#define MESSAGE_WIDE_CHAR_SECONDS                        0x9562 // '秒'
#define MESSAGE_WIDE_CHAR_MINUTES                        0x95AA // '分'

/*
 *  Colors
 */

typedef enum TextColor {
    TEXT_COLOR_DEFAULT,
    TEXT_COLOR_RED,
    TEXT_COLOR_ADJUSTABLE,
    TEXT_COLOR_BLUE,
    TEXT_COLOR_LIGHTBLUE,
    TEXT_COLOR_PURPLE,
    TEXT_COLOR_YELLOW,
    TEXT_COLOR_BLACK
} TextColor;

/*
 * Background
 */

typedef enum TextboxBackgroundIndex {
    TEXTBOX_BG_X_LEFT,
    TEXTBOX_BG_X_RIGHT
} TextboxBackgroundIndex;

typedef enum TextboxBackgroundForegroundColor {
    TEXTBOX_BG_FGCOL_WHITE,
    TEXTBOX_BG_FGCOL_DARK_RED,
    TEXTBOX_BG_FGCOL_ORANGE,
    TEXTBOX_BG_FGCOL_WHITE_3,
    TEXTBOX_BG_FGCOL_WHITE_4,
    TEXTBOX_BG_FGCOL_WHITE_5,
    TEXTBOX_BG_FGCOL_WHITE_6,
    TEXTBOX_BG_FGCOL_WHITE_7
} TextboxBackgroundForegroundColor;

typedef enum TextboxBackgroundBackgroundColor {
    TEXTBOX_BG_BGCOL_BLACK,
    TEXTBOX_BG_BGCOL_GOLD,
    TEXTBOX_BG_BGCOL_BLACK_2,
    TEXTBOX_BG_BGCOL_BLACK_3
} TextboxBackgroundBackgroundColor;

typedef enum TextboxBackgroundYOffsetIndex {
    TEXTBOX_BG_Y_OFFSET_1,
    TEXTBOX_BG_Y_OFFSET_2
} TextboxBackgroundYOffsetIndex;

#ifdef MESSAGE_DATA_STATIC
// For use in message_data_static files

// Encoded text consists of an array of bytes. Since it's in a macro it must be wrapped in a varargs macro so that each
// byte is not treated as a separate macro argument to DEFINE_MESSAGE. IDO doesn't support varargs macros, however we
// preprocess the message_data_static files with modern cpp instead. See the makefile rule for assets/text/
# define MSG(...)  { __VA_ARGS__ END }

// Encoding helpers
# define ARG2(x) (((x) >> 8) & 0xFF), (((x) >> 0) & 0xFF),
# ifdef MESSAGE_WCHAR
#  define ARG1(x) 0x00, (x),
#  define ARGC(x) 0x0C, (TEXT_COLOR_ ## x),
#  define CTRL_BASE(name) ARG2(MESSAGE_WIDE_ ## name)
# else
#  define ARG1(x) (x),
#  define ARGC(x) (0x40 | (TEXT_COLOR_ ## x)),
#  define CTRL_BASE(name) ARG1(MESSAGE_ ## name)
# endif
# define ARGB1(x) ARG1(TEXTBOX_BG_ ## x)
# define ARGB2(a,b,c,d) (((TEXTBOX_BG_FGCOL_ ## a) << 4) | ((TEXTBOX_BG_BGCOL_ ## b) << 0)), (((TEXTBOX_BG_Y_OFFSET_ ## c) << 4) | ((d) << 0)),

/*
 * Control characters
 */

// while a control character, newlines are handled in the charmap conversion
// stage to allow normal newline \n usage in message_data_static files
# define NEWLINE                                            CTRL_BASE(NEWLINE)
# define END                                                CTRL_BASE(END)
# define BOX_BREAK                                          CTRL_BASE(BOX_BREAK)
# define COLOR(color)                                       CTRL_BASE(COLOR)                ARGC(color)
# define SHIFT(amount)                                      CTRL_BASE(SHIFT)                ARG1(amount)
# define TEXTID(textId)                                     CTRL_BASE(TEXTID)               ARG2(textId)
# define QUICKTEXT_ENABLE                                   CTRL_BASE(QUICKTEXT_ENABLE)
# define QUICKTEXT_DISABLE                                  CTRL_BASE(QUICKTEXT_DISABLE)
# define PERSISTENT                                         CTRL_BASE(PERSISTENT)
# define EVENT                                              CTRL_BASE(EVENT)
# define BOX_BREAK_DELAYED(delay)                           CTRL_BASE(BOX_BREAK_DELAYED)    ARG1(delay)
# define AWAIT_BUTTON_PRESS                                 CTRL_BASE(AWAIT_BUTTON_PRESS)
# define FADE(delay)                                        CTRL_BASE(FADE)                 ARG1(delay)
# define NAME                                               CTRL_BASE(NAME)
# define OCARINA                                            CTRL_BASE(OCARINA)
# define FADE2(delay)                                       CTRL_BASE(FADE2)                ARG2(delay)
# define SFX(sfxId)                                         CTRL_BASE(SFX)                  ARG2(sfxId)
# define ITEM_ICON(itemId)                                  CTRL_BASE(ITEM_ICON)            ARG1(itemId)
# define TEXT_SPEED(amount)                                 CTRL_BASE(TEXT_SPEED)           ARG1(amount)
# define BACKGROUND(bgIdx, fgColor, bgColor, yOffset, unk)  CTRL_BASE(BACKGROUND)           ARGB1(bgIdx) ARGB2(fgColor, bgColor, yOffset, unk)
# define MARATHON_TIME                                      CTRL_BASE(MARATHON_TIME)
# define RACE_TIME                                          CTRL_BASE(RACE_TIME)
# define POINTS                                             CTRL_BASE(POINTS)
# define TOKENS                                             CTRL_BASE(TOKENS)
# define UNSKIPPABLE                                        CTRL_BASE(UNSKIPPABLE)
# define TWO_CHOICE                                         CTRL_BASE(TWO_CHOICE)
# define THREE_CHOICE                                       CTRL_BASE(THREE_CHOICE)
# define FISH_INFO                                          CTRL_BASE(FISH_INFO)
# define HIGHSCORE(highscore)                               CTRL_BASE(HIGHSCORE)            ARG1(highscore)
# define TIME                                               CTRL_BASE(TIME)

#endif

#endif