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

/*
 * Macros to create both a constant and a string literal from a magic value
 *   The constants are used in code files when parsing text for various purposes
 *   The strings are used in the message_data_static files themselves, as you can only concat strings with other strings
 */

#define GLUE(a, b) a##b

#define STRINGIFY(s) #s
#define EXPAND_AND_STRINGIFY(s) STRINGIFY(s)

#define HEX(N) GLUE(0x, N)
#define STR(N) EXPAND_AND_STRINGIFY(GLUE(\x, N))

/*
 * Text control characters
 */

// Control character magic values, in 2-digit hex without prefix

#define CTRL_NEWLINE                 01
#define CTRL_END                     02
#define CTRL_BOX_BREAK               04
#define CTRL_COLOR                   05
#define CTRL_SHIFT                   06
#define CTRL_TEXTID                  07
#define CTRL_QUICKTEXT_ENABLE        08
#define CTRL_QUICKTEXT_DISABLE       09
#define CTRL_PERSISTENT              0A
#define CTRL_EVENT                   0B
#define CTRL_BOX_BREAK_DELAYED       0C
#define CTRL_AWAIT_BUTTON_PRESS      0D
#define CTRL_FADE                    0E
#define CTRL_NAME                    0F
#define CTRL_OCARINA                 10
#define CTRL_FADE2                   11
#define CTRL_SFX                     12
#define CTRL_ITEM_ICON               13
#define CTRL_TEXT_SPEED              14
#define CTRL_BACKGROUND              15
#define CTRL_MARATHON_TIME           16
#define CTRL_RACE_TIME               17
#define CTRL_POINTS                  18
#define CTRL_TOKENS                  19
#define CTRL_UNSKIPPABLE             1A
#define CTRL_TWO_CHOICE              1B
#define CTRL_THREE_CHOICE            1C
#define CTRL_FISH_INFO               1D
#define CTRL_HIGHSCORE               1E
#define CTRL_TIME                    1F

/*
 *  Colors
 */ 

#define COLOR_STR(N) EXPAND_AND_STRINGIFY(GLUE(\x4, N))

// Color magic values, in single-digit hex without prefix

#define CTRL_DEFAULT    0
#define CTRL_RED        1
#define CTRL_ADJUSTABLE 2
#define CTRL_BLUE       3
#define CTRL_LIGHTBLUE  4
#define CTRL_PURPLE     5
#define CTRL_YELLOW     6
#define CTRL_BLACK      7

#ifdef MESSAGE_DATA_STATIC
// For use in message_data_static files

#define ARG(x) x

// 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                 STR(CTRL_NEWLINE)
#define END                     STR(CTRL_END)
#define BOX_BREAK               STR(CTRL_BOX_BREAK)
#define COLOR(x)                STR(CTRL_COLOR)                ARG(x) // 1
#define SHIFT(x)                STR(CTRL_SHIFT)                ARG(x) // 1
#define TEXTID(x)               STR(CTRL_TEXTID)               ARG(x) // 2
#define QUICKTEXT_ENABLE        STR(CTRL_QUICKTEXT_ENABLE)
#define QUICKTEXT_DISABLE       STR(CTRL_QUICKTEXT_DISABLE)
#define PERSISTENT              STR(CTRL_PERSISTENT)
#define EVENT                   STR(CTRL_EVENT)
#define BOX_BREAK_DELAYED(x)    STR(CTRL_BOX_BREAK_DELAYED)    ARG(x) // 1
#define AWAIT_BUTTON_PRESS      STR(CTRL_AWAIT_BUTTON_PRESS)
#define FADE(x)                 STR(CTRL_FADE)                 ARG(x) // 1
#define NAME                    STR(CTRL_NAME)
#define OCARINA                 STR(CTRL_OCARINA)
#define FADE2(x)                STR(CTRL_FADE2)                ARG(x) // 2
#define SFX(x)                  STR(CTRL_SFX)                  ARG(x) // 2
#define ITEM_ICON(x)            STR(CTRL_ITEM_ICON)            ARG(x) // 1
#define TEXT_SPEED(x)           STR(CTRL_TEXT_SPEED)           ARG(x) // 1
#define BACKGROUND(x,y,z)       STR(CTRL_BACKGROUND)           ARG(x) ARG(y) ARG(z)
#define MARATHON_TIME           STR(CTRL_MARATHON_TIME)
#define RACE_TIME               STR(CTRL_RACE_TIME)
#define POINTS                  STR(CTRL_POINTS)
#define TOKENS                  STR(CTRL_TOKENS)
#define UNSKIPPABLE             STR(CTRL_UNSKIPPABLE)
#define TWO_CHOICE              STR(CTRL_TWO_CHOICE)
#define THREE_CHOICE            STR(CTRL_THREE_CHOICE)
#define FISH_INFO               STR(CTRL_FISH_INFO)
#define HIGHSCORE(x)            STR(CTRL_HIGHSCORE)            ARG(x) // 1
#define TIME                    STR(CTRL_TIME)

/*
 * Highscore values as strings, for code references the HighScores
 * enum should be used.
 */

#define HS_HORSE_ARCHERY "\x00"
#define HS_POE_POINTS    "\x01"
#define HS_LARGEST_FISH  "\x02"
#define HS_HORSE_RACE    "\x03"
#define HS_MARATHON      "\x04"
#define HS_DAMPE_RACE    "\x06"

/*
 * Color values as strings
 */

#define DEFAULT     COLOR_STR(CTRL_DEFAULT)
#define RED         COLOR_STR(CTRL_RED)
#define ADJUSTABLE  COLOR_STR(CTRL_ADJUSTABLE)
#define BLUE        COLOR_STR(CTRL_BLUE)
#define LIGHTBLUE   COLOR_STR(CTRL_LIGHTBLUE)
#define PURPLE      COLOR_STR(CTRL_PURPLE)
#define YELLOW      COLOR_STR(CTRL_YELLOW)
#define BLACK       COLOR_STR(CTRL_BLACK)

#else
// For use in code files
#define MSGCOL_DEFAULT      HEX(CTRL_DEFAULT)
#define MSGCOL_RED          HEX(CTRL_RED)
#define MSGCOL_ADJUSTABLE   HEX(CTRL_ADJUSTABLE)
#define MSGCOL_BLUE         HEX(CTRL_BLUE)
#define MSGCOL_LIGHTBLUE    HEX(CTRL_LIGHTBLUE)
#define MSGCOL_PURPLE       HEX(CTRL_PURPLE)
#define MSGCOL_YELLOW       HEX(CTRL_YELLOW)
#define MSGCOL_BLACK        HEX(CTRL_BLACK)

#define MESSAGE_NEWLINE                 HEX(CTRL_NEWLINE)
#define MESSAGE_END                     HEX(CTRL_END)
#define MESSAGE_BOX_BREAK               HEX(CTRL_BOX_BREAK)
#define MESSAGE_COLOR                   HEX(CTRL_COLOR)
#define MESSAGE_SHIFT                   HEX(CTRL_SHIFT)
#define MESSAGE_TEXTID                  HEX(CTRL_TEXTID)
#define MESSAGE_QUICKTEXT_ENABLE        HEX(CTRL_QUICKTEXT_ENABLE)
#define MESSAGE_QUICKTEXT_DISABLE       HEX(CTRL_QUICKTEXT_DISABLE)
#define MESSAGE_PERSISTENT              HEX(CTRL_PERSISTENT)
#define MESSAGE_EVENT                   HEX(CTRL_EVENT)
#define MESSAGE_BOX_BREAK_DELAYED       HEX(CTRL_BOX_BREAK_DELAYED)
#define MESSAGE_AWAIT_BUTTON_PRESS      HEX(CTRL_AWAIT_BUTTON_PRESS)
#define MESSAGE_FADE                    HEX(CTRL_FADE)
#define MESSAGE_NAME                    HEX(CTRL_NAME)
#define MESSAGE_OCARINA                 HEX(CTRL_OCARINA)
#define MESSAGE_FADE2                   HEX(CTRL_FADE2)
#define MESSAGE_SFX                     HEX(CTRL_SFX)
#define MESSAGE_ITEM_ICON               HEX(CTRL_ITEM_ICON)
#define MESSAGE_TEXT_SPEED              HEX(CTRL_TEXT_SPEED)
#define MESSAGE_BACKGROUND              HEX(CTRL_BACKGROUND)
#define MESSAGE_MARATHON_TIME           HEX(CTRL_MARATHON_TIME)
#define MESSAGE_RACE_TIME               HEX(CTRL_RACE_TIME)
#define MESSAGE_POINTS                  HEX(CTRL_POINTS)
#define MESSAGE_TOKENS                  HEX(CTRL_TOKENS)
#define MESSAGE_UNSKIPPABLE             HEX(CTRL_UNSKIPPABLE)
#define MESSAGE_TWO_CHOICE              HEX(CTRL_TWO_CHOICE)
#define MESSAGE_THREE_CHOICE            HEX(CTRL_THREE_CHOICE)
#define MESSAGE_FISH_INFO               HEX(CTRL_FISH_INFO)
#define MESSAGE_HIGHSCORE               HEX(CTRL_HIGHSCORE)
#define MESSAGE_TIME                    HEX(CTRL_TIME)
#endif

#endif