Sync characters

This commit is contained in:
GriffinR
2022-11-22 12:49:30 -05:00
parent 75b9950ec7
commit 26251e9fba
13 changed files with 595 additions and 335 deletions
+282
View File
@@ -0,0 +1,282 @@
#ifndef GUARD_CHARACTERS_H
#define GUARD_CHARACTERS_H
#define CHAR_SPACE 0x00
#define CHAR_A_GRAVE 0x01
#define CHAR_A_ACUTE 0x02
#define CHAR_A_CIRCUMFLEX 0x03
#define CHAR_C_CEDILLA 0x04
#define CHAR_E_GRAVE 0x05
#define CHAR_E_ACUTE 0x06
#define CHAR_E_CIRCUMFLEX 0x07
#define CHAR_E_DIAERESIS 0x08
#define CHAR_I_GRAVE 0x09
//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead
#define CHAR_I_CIRCUMFLEX 0x0B
#define CHAR_I_DIAERESIS 0x0C
#define CHAR_O_GRAVE 0x0D
#define CHAR_O_ACUTE 0x0E
#define CHAR_O_CIRCUMFLEX 0x0F
#define CHAR_OE 0x10
#define CHAR_U_GRAVE 0x11
#define CHAR_U_ACUTE 0x12
#define CHAR_U_CIRCUMFLEX 0x13
#define CHAR_N_TILDE 0x14
#define CHAR_ESZETT 0x15
#define CHAR_a_GRAVE 0x16
#define CHAR_a_ACUTE 0x17
//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead
#define CHAR_c_CEDILLA 0x19
#define CHAR_e_GRAVE 0x1A
#define CHAR_e_ACUTE 0x1B
#define CHAR_e_CIRCUMFLEX 0x1C
#define CHAR_e_DIAERESIS 0x1D
#define CHAR_i_GRAVE 0x1E
//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead
#define CHAR_i_CIRCUMFLEX 0x20
#define CHAR_i_DIAERESIS 0x21
#define CHAR_o_GRAVE 0x22
#define CHAR_o_ACUTE 0x23
#define CHAR_o_CIRCUMFLEX 0x24
#define CHAR_oe 0x25
#define CHAR_u_GRAVE 0x26
#define CHAR_u_ACUTE 0x27
#define CHAR_u_CIRCUMFLEX 0x28
#define CHAR_n_TILDE 0x29
#define CHAR_MASCULINE_ORDINAL 0x2A
#define CHAR_FEMININE_ORDINAL 0x2B
#define CHAR_SUPER_ER 0x2C
#define CHAR_AMPERSAND 0x2D
#define CHAR_PLUS 0x2E
//
#define CHAR_LV 0x34
#define CHAR_EQUALS 0x35
#define CHAR_SEMICOLON 0x36
#define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song
//
#define CHAR_EMPTY_RECT 0x50
#define CHAR_INV_QUESTION_MARK 0x51
#define CHAR_INV_EXCL_MARK 0x52
#define CHAR_PK 0x53
#define CHAR_MN 0x54
#define CHAR_PO 0x55
#define CHAR_KE 0x56
#define CHAR_BLOCK_1 0x57 // Each of these 3
#define CHAR_BLOCK_2 0x58 // chars contains 1/3
#define CHAR_BLOCK_3 0x59 // of the word BLOCK
#define CHAR_I_ACUTE 0x5A
#define CHAR_PERCENT 0x5B
#define CHAR_LEFT_PAREN 0x5C
#define CHAR_RIGHT_PAREN 0x5D
//
#define CHAR_a_CIRCUMFLEX 0x68
//
#define CHAR_i_ACUTE 0x6F
//
#define CHAR_SPACER 0x77 // Empty space
//
#define CHAR_UP_ARROW 0x79
#define CHAR_DOWN_ARROW 0x7A
#define CHAR_LEFT_ARROW 0x7B
#define CHAR_RIGHT_ARROW 0x7C
//
#define CHAR_SUPER_E 0x84
#define CHAR_LESS_THAN 0x85
#define CHAR_GREATER_THAN 0x86
//
#define CHAR_SUPER_RE 0xA0
#define CHAR_0 0xA1
#define CHAR_1 0xA2
#define CHAR_2 0xA3
#define CHAR_3 0xA4
#define CHAR_4 0xA5
#define CHAR_5 0xA6
#define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_BULLET 0xAF
#define CHAR_ELLIPSIS 0xB0
#define CHAR_DBL_QUOTE_LEFT 0xB1
#define CHAR_DBL_QUOTE_RIGHT 0xB2
#define CHAR_SGL_QUOTE_LEFT 0xB3
#define CHAR_SGL_QUOTE_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
#define CHAR_COMMA 0xB8
#define CHAR_MULT_SIGN 0xB9
#define CHAR_SLASH 0xBA
#define CHAR_A 0xBB
#define CHAR_B 0xBC
#define CHAR_C 0xBD
#define CHAR_D 0xBE
#define CHAR_E 0xBF
#define CHAR_F 0xC0
#define CHAR_G 0xC1
#define CHAR_H 0xC2
#define CHAR_I 0xC3
#define CHAR_J 0xC4
#define CHAR_K 0xC5
#define CHAR_L 0xC6
#define CHAR_M 0xC7
#define CHAR_N 0xC8
#define CHAR_O 0xC9
#define CHAR_P 0xCA
#define CHAR_Q 0xCB
#define CHAR_R 0xCC
#define CHAR_S 0xCD
#define CHAR_T 0xCE
#define CHAR_U 0xCF
#define CHAR_V 0xD0
#define CHAR_W 0xD1
#define CHAR_X 0xD2
#define CHAR_Y 0xD3
#define CHAR_Z 0xD4
#define CHAR_a 0xD5
#define CHAR_b 0xD6
#define CHAR_c 0xD7
#define CHAR_d 0xD8
#define CHAR_e 0xD9
#define CHAR_f 0xDA
#define CHAR_g 0xDB
#define CHAR_h 0xDC
#define CHAR_i 0xDD
#define CHAR_j 0xDE
#define CHAR_k 0xDF
#define CHAR_l 0xE0
#define CHAR_m 0xE1
#define CHAR_n 0xE2
#define CHAR_o 0xE3
#define CHAR_p 0xE4
#define CHAR_q 0xE5
#define CHAR_r 0xE6
#define CHAR_s 0xE7
#define CHAR_t 0xE8
#define CHAR_u 0xE9
#define CHAR_v 0xEA
#define CHAR_w 0xEB
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_BLACK_TRIANGLE 0xEF
#define CHAR_COLON 0xF0
#define CHAR_A_DIAERESIS 0xF1
#define CHAR_O_DIAERESIS 0xF2
#define CHAR_U_DIAERESIS 0xF3
#define CHAR_a_DIAERESIS 0xF4
#define CHAR_o_DIAERESIS 0xF5
#define CHAR_u_DIAERESIS 0xF6
#define CHAR_DYNAMIC 0xF7
#define CHAR_KEYPAD_ICON 0xF8
#define CHAR_EXTRA_SYMBOL 0xF9
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
// CHAR_KEYPAD_ICON chars
#define CHAR_A_BUTTON 0x00
#define CHAR_B_BUTTON 0x01
#define CHAR_L_BUTTON 0x02
#define CHAR_R_BUTTON 0x03
#define CHAR_START_BUTTON 0x04
#define CHAR_SELECT_BUTTON 0x05
#define CHAR_DPAD_UP 0x06
#define CHAR_DPAD_DOWN 0x07
#define CHAR_DPAD_LEFT 0x08
#define CHAR_DPAD_RIGHT 0x09
#define CHAR_DPAD_UPDOWN 0x0A
#define CHAR_DPAD_LEFTRIGHT 0x0B
#define CHAR_DPAD_NONE 0x0C
// CHAR_EXTRA_SYMBOL chars
#define CHAR_UP_ARROW_2 0x00
#define CHAR_DOWN_ARROW_2 0x01
#define CHAR_LEFT_ARROW_2 0x02
#define CHAR_RIGHT_ARROW_2 0x03
#define CHAR_PLUS_2 0x04
#define CHAR_LV_2 0x05
#define CHAR_PP 0x06
#define CHAR_ID 0x07
#define CHAR_NO 0x08
#define CHAR_UNDERSCORE 0x09
#define CHAR_CIRCLED_1 0x0A
#define CHAR_CIRCLED_2 0x0B
#define CHAR_CIRCLED_3 0x0C
#define CHAR_CIRCLED_4 0x0D
#define CHAR_CIRCLED_5 0x0E
#define CHAR_CIRCLED_6 0x0F
#define CHAR_CIRCLED_7 0x10
#define CHAR_CIRCLED_8 0x11
#define CHAR_CIRCLED_9 0x12
#define CHAR_LEFT_PAREN_SMALL 0x13
#define CHAR_RIGHT_PAREN_SMALL 0x14
#define CHAR_BULLSEYE 0x15
#define CHAR_TRIANGLE 0x16
#define CHAR_CROSS_X 0x17
#define EXT_CTRL_CODE_COLOR 0x01
#define EXT_CTRL_CODE_HIGHLIGHT 0x02
#define EXT_CTRL_CODE_SHADOW 0x03
#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x04
#define EXT_CTRL_CODE_PALETTE 0x05
#define EXT_CTRL_CODE_FONT 0x06
#define EXT_CTRL_CODE_RESET_FONT 0x07
#define EXT_CTRL_CODE_PAUSE 0x08
#define EXT_CTRL_CODE_PAUSE_UNTIL_PRESS 0x09
#define EXT_CTRL_CODE_WAIT_SE 0x0A
#define EXT_CTRL_CODE_PLAY_BGM 0x0B
#define EXT_CTRL_CODE_ESCAPE 0x0C
#define EXT_CTRL_CODE_SHIFT_RIGHT 0x0D
#define EXT_CTRL_CODE_SHIFT_DOWN 0x0E
#define EXT_CTRL_CODE_FILL_WINDOW 0x0F
#define EXT_CTRL_CODE_PLAY_SE 0x10
#define EXT_CTRL_CODE_CLEAR 0x11
#define EXT_CTRL_CODE_SKIP 0x12
#define EXT_CTRL_CODE_CLEAR_TO 0x13
#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
#define EXT_CTRL_CODE_PAUSE_MUSIC 0x17
#define EXT_CTRL_CODE_RESUME_MUSIC 0x18
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GRAY 0x2
#define TEXT_COLOR_LIGHT_GRAY 0x3
#define TEXT_COLOR_RED 0x4
#define TEXT_COLOR_LIGHT_RED 0x5
#define TEXT_COLOR_GREEN 0x6
#define TEXT_COLOR_LIGHT_GREEN 0x7
#define TEXT_COLOR_BLUE 0x8
#define TEXT_COLOR_LIGHT_BLUE 0x9
#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white
#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green
#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white
#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine
#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green
#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean
#define PLACEHOLDER_ID_UNKNOWN 0x0
#define PLACEHOLDER_ID_PLAYER 0x1
#define PLACEHOLDER_ID_STRING_VAR_1 0x2
#define PLACEHOLDER_ID_STRING_VAR_2 0x3
#define PLACEHOLDER_ID_STRING_VAR_3 0x4
#define PLACEHOLDER_ID_KUN 0x5
#define PLACEHOLDER_ID_RIVAL 0x6
#define PLACEHOLDER_ID_VERSION 0x7
#define PLACEHOLDER_ID_MAGMA 0x8
#define PLACEHOLDER_ID_AQUA 0x9
#define PLACEHOLDER_ID_MAXIE 0xA
#define PLACEHOLDER_ID_ARCHIE 0xB
#define PLACEHOLDER_ID_GROUDON 0xC
#define PLACEHOLDER_ID_KYOGRE 0xD
#endif // GUARD_CHARACTERS_H
+21 -158
View File
@@ -2,157 +2,7 @@
#define GUARD_TEXT_H
#include "global.h"
#define CHAR_SPACE 0x00
#define CHAR_0 0xA1
#define CHAR_1 0xA2
#define CHAR_2 0xA3
#define CHAR_3 0xA4
#define CHAR_4 0xA5
#define CHAR_5 0xA6
#define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_ELLIPSIS 0xB0
#define CHAR_DBL_QUOT_LEFT 0xB1
#define CHAR_DBL_QUOT_RIGHT 0xB2
#define CHAR_SGL_QUOT_LEFT 0xB3
#define CHAR_SGL_QUOT_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
#define CHAR_COMMA 0xB8
#define CHAR_MULT_SIGN 0xB9
#define CHAR_SLASH 0xBA
#define CHAR_A 0xBB
#define CHAR_B 0xBC
#define CHAR_C 0xBD
#define CHAR_D 0xBE
#define CHAR_E 0xBF
#define CHAR_F 0xC0
#define CHAR_G 0xC1
#define CHAR_H 0xC2
#define CHAR_I 0xC3
#define CHAR_J 0xC4
#define CHAR_K 0xC5
#define CHAR_L 0xC6
#define CHAR_M 0xC7
#define CHAR_N 0xC8
#define CHAR_O 0xC9
#define CHAR_P 0xCA
#define CHAR_Q 0xCB
#define CHAR_R 0xCC
#define CHAR_S 0xCD
#define CHAR_T 0xCE
#define CHAR_U 0xCF
#define CHAR_V 0xD0
#define CHAR_W 0xD1
#define CHAR_X 0xD2
#define CHAR_Y 0xD3
#define CHAR_Z 0xD4
#define CHAR_a 0xD5
#define CHAR_b 0xD6
#define CHAR_c 0xD7
#define CHAR_d 0xD8
#define CHAR_e 0xD9
#define CHAR_f 0xDA
#define CHAR_g 0xDB
#define CHAR_h 0xDC
#define CHAR_i 0xDD
#define CHAR_j 0xDE
#define CHAR_k 0xDF
#define CHAR_l 0xE0
#define CHAR_m 0xE1
#define CHAR_n 0xE2
#define CHAR_o 0xE3
#define CHAR_p 0xE4
#define CHAR_q 0xE5
#define CHAR_r 0xE6
#define CHAR_s 0xE7
#define CHAR_t 0xE8
#define CHAR_u 0xE9
#define CHAR_v 0xEA
#define CHAR_w 0xEB
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_COLON 0xF0
#define CHAR_DYNAMIC_PLACEHOLDER 0xF7
#define CHAR_KEYPAD_ICON 0xF8
#define CHAR_EXTRA_SYMBOL 0xF9
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
// CHAR_EXTRA_SYMBOL chars
#define CHAR_LV_2 0x05
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GRAY 0x2
#define TEXT_COLOR_LIGHT_GRAY 0x3
#define TEXT_COLOR_RED 0x4
#define TEXT_COLOR_LIGHT_RED 0x5
#define TEXT_COLOR_GREEN 0x6
#define TEXT_COLOR_LIGHT_GREEN 0x7
#define TEXT_COLOR_BLUE 0x8
#define TEXT_COLOR_LIGHT_BLUE 0x9
#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white
#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green
#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white
#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine
#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green
#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean
#define PLACEHOLDER_ID_UNKNOWN 0x0
#define PLACEHOLDER_ID_PLAYER 0x1
#define PLACEHOLDER_ID_STRING_VAR_1 0x2
#define PLACEHOLDER_ID_STRING_VAR_2 0x3
#define PLACEHOLDER_ID_STRING_VAR_3 0x4
#define PLACEHOLDER_ID_KUN 0x5
#define PLACEHOLDER_ID_RIVAL 0x6
#define PLACEHOLDER_ID_VERSION 0x7
#define PLACEHOLDER_ID_MAGMA 0x8
#define PLACEHOLDER_ID_AQUA 0x9
#define PLACEHOLDER_ID_MAXIE 0xA
#define PLACEHOLDER_ID_ARCHIE 0xB
#define PLACEHOLDER_ID_GROUDON 0xC
#define PLACEHOLDER_ID_KYOGRE 0xD
// battle placeholders are located in battle_message.h
#define EXT_CTRL_CODE_COLOR 0x1
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
#define EXT_CTRL_CODE_SHADOW 0x3
#define EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW 0x4
#define EXT_CTRL_CODE_PALETTE 0x5
#define EXT_CTRL_CODE_FONT 0x6
#define EXT_CTRL_CODE_RESET_FONT 0x7
#define EXT_CTRL_CODE_PAUSE 0x8
#define EXT_CTRL_CODE_WAIT_BUTTON 0x9
#define EXT_CTRL_CODE_WAIT_SE 0xA
#define EXT_CTRL_CODE_PLAY_BGM 0xB
#define EXT_CTRL_CODE_ESCAPE 0xC
#define EXT_CTRL_CODE_SHIFT_RIGHT 0xD
#define EXT_CTRL_CODE_SHIFT_DOWN 0xE
#define EXT_CTRL_CODE_FILL_WINDOW 0xF
#define EXT_CTRL_CODE_PLAY_SE 0x10
#define EXT_CTRL_CODE_CLEAR 0x11
#define EXT_CTRL_CODE_SKIP 0x12
#define EXT_CTRL_CODE_CLEAR_TO 0x13
#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
#define EXT_CTRL_CODE_STOP_BGM 0x17
#define EXT_CTRL_CODE_RESUME_BGM 0x18
#include "characters.h"
#define NUM_TEXT_PRINTERS 32
@@ -170,6 +20,26 @@ enum {
FONT_4,
FONT_5,
FONT_BRAILLE,
FONT_7,
};
// Return values for font functions
enum {
RENDER_PRINT,
RENDER_FINISH,
RENDER_REPEAT, // Run render function again, if e.g. a control code is encountered.
RENDER_UPDATE,
};
// Text printer states read by RenderText / FontFunc_Braille
enum {
RENDER_STATE_HANDLE_CHAR,
RENDER_STATE_WAIT,
RENDER_STATE_CLEAR,
RENDER_STATE_SCROLL_START,
RENDER_STATE_SCROLL,
RENDER_STATE_WAIT_SE,
RENDER_STATE_PAUSE,
};
enum
@@ -259,13 +129,6 @@ struct GlyphWidthFunc
s32 (*func)(u16 glyphId, bool32 isJapanese);
};
struct KeypadIcon
{
u16 tileOffset;
u8 width;
u8 height;
};
typedef struct {
u8 canABSpeedUpPrint:1;
u8 useAlternateDownArrow:1;
+1 -1
View File
@@ -2195,7 +2195,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|| *src == B_TXT_TRAINER2_LOSE_TEXT || *src == B_TXT_TRAINER2_WIN_TEXT)
{
dst[dstId++] = EXT_CTRL_CODE_BEGIN;
dst[dstId++] = EXT_CTRL_CODE_WAIT_BUTTON;
dst[dstId++] = EXT_CTRL_CODE_PAUSE_UNTIL_PRESS;
}
}
else
+1 -1
View File
@@ -110,7 +110,7 @@ u8 *DynamicPlaceholderTextUtil_ExpandPlaceholders(u8 *dest, const u8 *src)
{
while (*src != EOS)
{
if (*src != CHAR_DYNAMIC_PLACEHOLDER)
if (*src != CHAR_DYNAMIC)
{
*dest++ = *src++;
}
+1 -1
View File
@@ -1454,7 +1454,7 @@ static void PrintECFields(void)
for (k = 0; k < 7; k++)
{
*str++ = CHAR_EXTRA_SYMBOL;
*str++ = 9;
*str++ = CHAR_UNDERSCORE;
}
str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GRAY);
+1 -1
View File
@@ -479,7 +479,7 @@ void HelpSystemRenderText(u8 fontId, u8 * dest, const u8 * src, u8 x, u8 y, u8 w
case EXT_CTRL_CODE_SHIFT_DOWN:
src++;
case EXT_CTRL_CODE_RESET_FONT:
case EXT_CTRL_CODE_WAIT_BUTTON:
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
case EXT_CTRL_CODE_WAIT_SE:
case EXT_CTRL_CODE_FILL_WINDOW:
break;
+1 -1
View File
@@ -220,7 +220,7 @@ static const u8 sWireless_RSEtoASCIITable[] = {
[CHAR_y] = 'y',
[CHAR_z] = 'z',
0x20, 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
[CHAR_DYNAMIC_PLACEHOLDER] = ' ',
[CHAR_DYNAMIC] = ' ',
[CHAR_KEYPAD_ICON] = ' ',
[CHAR_EXTRA_SYMBOL] = ' ',
[CHAR_PROMPT_SCROLL] = ' ',
+1 -1
View File
@@ -355,7 +355,7 @@ static void BufferCardText(void)
// Copy stat texts
for (i = 0, charsUntilStat = 0; i < WONDER_CARD_TEXT_LENGTH; i++)
{
if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER)
if (sWonderCardData->card.footerLine2Text[i] != CHAR_DYNAMIC)
{
// Regular text, just copy as is
sWonderCardData->statTextData[sWonderCardData->recordIdx].statText[charsUntilStat] = sWonderCardData->card.footerLine2Text[i];
+72 -80
View File
@@ -58,106 +58,98 @@ static const struct WindowTemplate sYesNo_WindowTemplate =
static const struct FontInfo gFontInfos[] =
{
{
[FONT_0] = {
.fontFunction = Font0Func,
.maxLetterWidth = 0x8,
.maxLetterHeight = 0xD,
.letterSpacing = 0x0,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 8,
.maxLetterHeight = 13,
.letterSpacing = 0,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_1] = {
.fontFunction = Font1Func,
.maxLetterWidth = 0x8,
.maxLetterHeight = 0xE,
.letterSpacing = 0x0,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 8,
.maxLetterHeight = 14,
.letterSpacing = 0,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_2] = {
.fontFunction = Font2Func,
.maxLetterWidth = 0xA,
.maxLetterHeight = 0xE,
.letterSpacing = 0x1,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 10,
.maxLetterHeight = 14,
.letterSpacing = 1,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_3] = {
.fontFunction = Font3Func,
.maxLetterWidth = 0xA,
.maxLetterHeight = 0xE,
.letterSpacing = 0x1,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 10,
.maxLetterHeight = 14,
.letterSpacing = 1,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_4] = {
.fontFunction = Font4Func,
.maxLetterWidth = 0xA,
.maxLetterHeight = 0xE,
.letterSpacing = 0x0,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 10,
.maxLetterHeight = 14,
.letterSpacing = 0,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_5] = {
.fontFunction = Font5Func,
.maxLetterWidth = 0xA,
.maxLetterHeight = 0xE,
.letterSpacing = 0x0,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 10,
.maxLetterHeight = 14,
.letterSpacing = 0,
.lineSpacing = 0,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_BRAILLE] = {
.fontFunction = Font6Func,
.maxLetterWidth = 0x8,
.maxLetterHeight = 0x10,
.letterSpacing = 0x0,
.lineSpacing = 0x2,
.unk = 0x0,
.fgColor = 0x2,
.bgColor = 0x1,
.shadowColor = 0x3,
.maxLetterWidth = 8,
.maxLetterHeight = 16,
.letterSpacing = 0,
.lineSpacing = 2,
.fgColor = 2,
.bgColor = 1,
.shadowColor = 3,
},
{
[FONT_7] = {
.fontFunction = NULL,
.maxLetterWidth = 0x8,
.maxLetterHeight = 0x8,
.letterSpacing = 0x0,
.lineSpacing = 0x0,
.unk = 0x0,
.fgColor = 0x1,
.bgColor = 0x2,
.shadowColor = 0xF,
.maxLetterWidth = 8,
.maxLetterHeight = 8,
.letterSpacing = 0,
.lineSpacing = 0,
.fgColor = 1,
.bgColor = 2,
.shadowColor = 15,
}
};
static const u8 gMenuCursorDimensions[][2] =
{
{ 0x8, 0xD },
{ 0x8, 0xE },
{ 0x8, 0xE },
{ 0x8, 0xE },
{ 0x8, 0xE },
{ 0x8, 0xE },
{ 0x8, 0x10 },
{ 0x0, 0x0 }
[FONT_0] = { 8, 13 },
[FONT_1] = { 8, 14 },
[FONT_2] = { 8, 14 },
[FONT_3] = { 8, 14 },
[FONT_4] = { 8, 14 },
[FONT_5] = { 8, 14 },
[FONT_BRAILLE] = { 8, 16 },
[FONT_7] = {}
};
static u16 CopyDecompressedTileDataToVram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
+4 -4
View File
@@ -2735,20 +2735,20 @@ void DexScreen_PrintMonHeight(u8 windowId, u16 species, u8 x, u8 y)
buffer[i++] = feet / 10 + CHAR_0;
buffer[i++] = feet % 10 + CHAR_0;
}
buffer[i++] = CHAR_SGL_QUOT_RIGHT;
buffer[i++] = CHAR_SGL_QUOTE_RIGHT;
buffer[i++] = inches / 10 + CHAR_0;
buffer[i++] = inches % 10 + CHAR_0;
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
buffer[i++] = CHAR_DBL_QUOTE_RIGHT;
buffer[i++] = EOS;
}
else
{
buffer[i++] = CHAR_QUESTION_MARK;
buffer[i++] = CHAR_QUESTION_MARK;
buffer[i++] = CHAR_SGL_QUOT_RIGHT;
buffer[i++] = CHAR_SGL_QUOTE_RIGHT;
buffer[i++] = CHAR_QUESTION_MARK;
buffer[i++] = CHAR_QUESTION_MARK;
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
buffer[i++] = CHAR_DBL_QUOTE_RIGHT;
}
buffer[i++] = EOS;
+42 -32
View File
@@ -20,17 +20,21 @@ static const u8 sTinyDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow
static const u8 sDoubleArrowTiles1[] = INCBIN_U8("graphics/fonts/down_arrow_3.4bpp");
static const u8 sDoubleArrowTiles2[] = INCBIN_U8("graphics/fonts/down_arrow_4.4bpp");
static const u8 sDownArrowYCoords[] = { 0x0, 0x10, 0x20, 0x10 };
static const u8 sWindowVerticalScrollSpeeds[] = { 0x1, 0x2 , 0x4 , 0x0 };
static const u8 sDownArrowYCoords[] = { 0, 16, 32, 16 };
static const u8 sWindowVerticalScrollSpeeds[] = {
[OPTIONS_TEXT_SPEED_SLOW] = 1,
[OPTIONS_TEXT_SPEED_MID] = 2,
[OPTIONS_TEXT_SPEED_FAST] = 4,
};
static const struct GlyphWidthFunc sGlyphWidthFuncs[] = {
{ 0x0, GetGlyphWidthFont0 },
{ 0x1, GetGlyphWidthFont1 },
{ 0x2, GetGlyphWidthFont2 },
{ 0x3, GetGlyphWidthFont3 },
{ 0x4, GetGlyphWidthFont4 },
{ 0x5, GetGlyphWidthFont5 },
{ 0x6, GetGlyphWidthFont6 }
{ FONT_0, GetGlyphWidthFont0 },
{ FONT_1, GetGlyphWidthFont1 },
{ FONT_2, GetGlyphWidthFont2 },
{ FONT_3, GetGlyphWidthFont3 },
{ FONT_4, GetGlyphWidthFont4 },
{ FONT_5, GetGlyphWidthFont5 },
{ FONT_BRAILLE, GetGlyphWidthFont6 }
};
static const struct SpriteSheet sUnknown_81EA68C[] =
@@ -57,20 +61,26 @@ static const struct SpriteTemplate sUnknown_81EA6B4 =
.callback = sub_80062B0,
};
static const struct KeypadIcon sKeypadIcons[] = {
{ 0x0, 0x8, 0xC },
{ 0x1, 0x8, 0xC },
{ 0x2, 0x10, 0xC },
{ 0x4, 0x10, 0xC },
{ 0x6, 0x18, 0xC },
{ 0x9, 0x18, 0xC },
{ 0xC, 0x8, 0xC },
{ 0xD, 0x8, 0xC },
{ 0xE, 0x8, 0xC },
{ 0xF, 0x8, 0xC },
{ 0x20, 0x8, 0xC },
{ 0x21, 0x8, 0xC },
{ 0x22, 0x8, 0xC },
struct
{
u16 tileOffset;
u8 width;
u8 height;
} static const sKeypadIcons[] =
{
[CHAR_A_BUTTON] = { 0x0, 8, 12 },
[CHAR_B_BUTTON] = { 0x1, 8, 12 },
[CHAR_L_BUTTON] = { 0x2, 16, 12 },
[CHAR_R_BUTTON] = { 0x4, 16, 12 },
[CHAR_START_BUTTON] = { 0x6, 24, 12 },
[CHAR_SELECT_BUTTON] = { 0x9, 24, 12 },
[CHAR_DPAD_UP] = { 0xC, 8, 12 },
[CHAR_DPAD_DOWN] = { 0xD, 8, 12 },
[CHAR_DPAD_LEFT] = { 0xE, 8, 12 },
[CHAR_DPAD_RIGHT] = { 0xF, 8, 12 },
[CHAR_DPAD_UPDOWN] = { 0x20, 8, 12 },
[CHAR_DPAD_LEFTRIGHT] = { 0x21, 8, 12 },
[CHAR_DPAD_NONE] = { 0x22, 8, 12 },
};
const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp");
@@ -694,7 +704,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
textPrinter->printerTemplate.currentChar++;
textPrinter->state = 6;
return 2;
case EXT_CTRL_CODE_WAIT_BUTTON:
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
textPrinter->state = 1;
if (gTextFlags.autoScroll)
subStruct->autoScrollDelay = 0;
@@ -732,10 +742,10 @@ u16 RenderText(struct TextPrinter *textPrinter)
case EXT_CTRL_CODE_FILL_WINDOW:
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
return 2;
case EXT_CTRL_CODE_STOP_BGM:
case EXT_CTRL_CODE_PAUSE_MUSIC:
m4aMPlayStop(&gMPlayInfo_BGM);
return 2;
case EXT_CTRL_CODE_RESUME_BGM:
case EXT_CTRL_CODE_RESUME_MUSIC:
m4aMPlayContinue(&gMPlayInfo_BGM);
return 2;
case EXT_CTRL_CODE_CLEAR:
@@ -955,7 +965,7 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci
++strPos;
break;
case EXT_CTRL_CODE_RESET_FONT:
case EXT_CTRL_CODE_WAIT_BUTTON:
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
case EXT_CTRL_CODE_WAIT_SE:
case EXT_CTRL_CODE_FILL_WINDOW:
case EXT_CTRL_CODE_JPN:
@@ -964,7 +974,7 @@ static s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpaci
break;
}
break;
case CHAR_DYNAMIC_PLACEHOLDER:
case CHAR_DYNAMIC:
case PLACEHOLDER_BEGIN:
++strPos;
break;
@@ -1053,7 +1063,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
default:
return 0;
}
case CHAR_DYNAMIC_PLACEHOLDER:
case CHAR_DYNAMIC:
if (bufferPointer == NULL)
bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str);
while (*bufferPointer != EOS)
@@ -1087,7 +1097,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
case EXT_CTRL_CODE_SHIFT_DOWN:
++str;
case EXT_CTRL_CODE_RESET_FONT:
case EXT_CTRL_CODE_WAIT_BUTTON:
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
case EXT_CTRL_CODE_WAIT_SE:
case EXT_CTRL_CODE_FILL_WINDOW:
break;
@@ -1231,7 +1241,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a
++strPos;
break;
case EXT_CTRL_CODE_RESET_FONT:
case EXT_CTRL_CODE_WAIT_BUTTON:
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
case EXT_CTRL_CODE_WAIT_SE:
case EXT_CTRL_CODE_FILL_WINDOW:
case EXT_CTRL_CODE_JPN:
@@ -1240,7 +1250,7 @@ u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a
continue;
}
break;
case CHAR_DYNAMIC_PLACEHOLDER:
case CHAR_DYNAMIC:
case CHAR_KEYPAD_ICON:
case CHAR_EXTRA_SYMBOL:
case PLACEHOLDER_BEGIN:
+23 -22
View File
@@ -73,16 +73,14 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
if (!gFonts)
return FALSE;
sTempTextPrinter.active = 1;
sTempTextPrinter.state = 0;
sTempTextPrinter.active = TRUE;
sTempTextPrinter.state = RENDER_STATE_HANDLE_CHAR;
sTempTextPrinter.textSpeed = speed;
sTempTextPrinter.delayCounter = 0;
sTempTextPrinter.scrollDistance = 0;
for (i = 0; i < 7; ++i)
{
for (i = 0; i < (int)ARRAY_COUNT(sTempTextPrinter.subUnion.fields); ++i)
sTempTextPrinter.subUnion.fields[i] = 0;
}
sTempTextPrinter.printerTemplate = *textSubPrinter;
sTempTextPrinter.callback = callback;
@@ -90,7 +88,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
sTempTextPrinter.japanese = 0;
GenerateFontHalfRowLookupTable(textSubPrinter->fgColor, textSubPrinter->bgColor, textSubPrinter->shadowColor);
if (speed != TEXT_SKIP_DRAW && speed != 0x0)
if (speed != TEXT_SKIP_DRAW && speed != 0)
{
--sTempTextPrinter.textSpeed;
sTextPrinters[textSubPrinter->windowId] = sTempTextPrinter;
@@ -98,15 +96,18 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
else
{
sTempTextPrinter.textSpeed = 0;
// Render all text (up to limit) at once
for (j = 0; j < 0x400; ++j)
{
if ((u32)RenderFont(&sTempTextPrinter) == 1)
if (RenderFont(&sTempTextPrinter) == RENDER_FINISH)
break;
}
// All the text is rendered to the window but don't draw it yet.
if (speed != TEXT_SKIP_DRAW)
CopyWindowToVram(sTempTextPrinter.printerTemplate.windowId, COPYWIN_GFX);
sTextPrinters[textSubPrinter->windowId].active = 0;
sTextPrinters[textSubPrinter->windowId].active = FALSE;
}
return TRUE;
}
@@ -114,23 +115,23 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *textSubPrinter, u8 speed, void
void RunTextPrinters(void)
{
int i;
u16 temp;
for (i = 0; i < 0x20; ++i)
for (i = 0; i < NUM_TEXT_PRINTERS; ++i)
{
if (sTextPrinters[i].active != 0)
if (sTextPrinters[i].active)
{
temp = RenderFont(&sTextPrinters[i]);
switch (temp) {
case 0:
CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX);
case 3:
if (sTextPrinters[i].callback != 0)
sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, temp);
break;
case 1:
sTextPrinters[i].active = 0;
break;
u16 renderCmd = RenderFont(&sTextPrinters[i]);
switch (renderCmd)
{
case RENDER_PRINT:
CopyWindowToVram(sTextPrinters[i].printerTemplate.windowId, COPYWIN_GFX);
case RENDER_UPDATE:
if (sTextPrinters[i].callback != NULL)
sTextPrinters[i].callback(&sTextPrinters[i].printerTemplate, renderCmd);
break;
case RENDER_FINISH:
sTextPrinters[i].active = FALSE;
break;
}
}
}
+145 -33
View File
@@ -128,39 +128,151 @@ static const u8 sKeyboardPageMaxRow[] =
9
};
static const u8 sCaseToggleTable[] = {
0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24,
0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02,
0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00,
0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00,
0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD,
0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5,
0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF,
0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
static const u8 sCaseToggleTable[256] = {
[CHAR_A] = CHAR_a,
[CHAR_B] = CHAR_b,
[CHAR_C] = CHAR_c,
[CHAR_D] = CHAR_d,
[CHAR_E] = CHAR_e,
[CHAR_F] = CHAR_f,
[CHAR_G] = CHAR_g,
[CHAR_H] = CHAR_h,
[CHAR_I] = CHAR_i,
[CHAR_J] = CHAR_j,
[CHAR_K] = CHAR_k,
[CHAR_L] = CHAR_l,
[CHAR_M] = CHAR_m,
[CHAR_N] = CHAR_n,
[CHAR_O] = CHAR_o,
[CHAR_P] = CHAR_p,
[CHAR_Q] = CHAR_q,
[CHAR_R] = CHAR_r,
[CHAR_S] = CHAR_s,
[CHAR_T] = CHAR_t,
[CHAR_U] = CHAR_u,
[CHAR_V] = CHAR_v,
[CHAR_W] = CHAR_w,
[CHAR_X] = CHAR_x,
[CHAR_Y] = CHAR_y,
[CHAR_Z] = CHAR_z,
[CHAR_a] = CHAR_A,
[CHAR_b] = CHAR_B,
[CHAR_c] = CHAR_C,
[CHAR_d] = CHAR_D,
[CHAR_e] = CHAR_E,
[CHAR_f] = CHAR_F,
[CHAR_g] = CHAR_G,
[CHAR_h] = CHAR_H,
[CHAR_i] = CHAR_I,
[CHAR_j] = CHAR_J,
[CHAR_k] = CHAR_K,
[CHAR_l] = CHAR_L,
[CHAR_m] = CHAR_M,
[CHAR_n] = CHAR_N,
[CHAR_o] = CHAR_O,
[CHAR_p] = CHAR_P,
[CHAR_q] = CHAR_Q,
[CHAR_r] = CHAR_R,
[CHAR_s] = CHAR_S,
[CHAR_t] = CHAR_T,
[CHAR_u] = CHAR_U,
[CHAR_v] = CHAR_V,
[CHAR_w] = CHAR_W,
[CHAR_x] = CHAR_X,
[CHAR_y] = CHAR_Y,
[CHAR_z] = CHAR_Z,
[CHAR_A_GRAVE] = CHAR_a_GRAVE,
[CHAR_A_ACUTE] = CHAR_a_ACUTE,
[CHAR_A_CIRCUMFLEX] = CHAR_a_CIRCUMFLEX,
[CHAR_A_DIAERESIS] = CHAR_a_DIAERESIS,
[CHAR_C_CEDILLA] = CHAR_c_CEDILLA,
[CHAR_E_GRAVE] = CHAR_e_GRAVE,
[CHAR_E_ACUTE] = CHAR_e_ACUTE,
[CHAR_E_CIRCUMFLEX] = CHAR_e_CIRCUMFLEX,
[CHAR_E_DIAERESIS] = CHAR_e_DIAERESIS,
[CHAR_I_GRAVE] = CHAR_i_GRAVE,
[CHAR_I_ACUTE] = CHAR_i_ACUTE,
[CHAR_I_CIRCUMFLEX] = CHAR_i_CIRCUMFLEX,
[CHAR_I_DIAERESIS] = CHAR_i_DIAERESIS,
[CHAR_O_GRAVE] = CHAR_o_GRAVE,
[CHAR_O_ACUTE] = CHAR_o_ACUTE,
[CHAR_O_CIRCUMFLEX] = CHAR_o_CIRCUMFLEX,
[CHAR_O_DIAERESIS] = CHAR_o_DIAERESIS,
[CHAR_OE] = CHAR_oe,
[CHAR_U_GRAVE] = CHAR_u_GRAVE,
[CHAR_U_ACUTE] = CHAR_u_ACUTE,
[CHAR_U_CIRCUMFLEX] = CHAR_u_CIRCUMFLEX,
[CHAR_U_DIAERESIS] = CHAR_u_DIAERESIS,
[CHAR_N_TILDE] = CHAR_n_TILDE,
[CHAR_ESZETT] = CHAR_ESZETT,
[CHAR_a_GRAVE] = CHAR_A_GRAVE,
[CHAR_a_ACUTE] = CHAR_A_ACUTE,
[CHAR_a_CIRCUMFLEX] = CHAR_A_CIRCUMFLEX,
[CHAR_a_DIAERESIS] = CHAR_A_DIAERESIS,
[CHAR_c_CEDILLA] = CHAR_C_CEDILLA,
[CHAR_e_GRAVE] = CHAR_E_GRAVE,
[CHAR_e_ACUTE] = CHAR_E_ACUTE,
[CHAR_e_CIRCUMFLEX] = CHAR_E_CIRCUMFLEX,
[CHAR_e_DIAERESIS] = CHAR_E_DIAERESIS,
[CHAR_i_GRAVE] = CHAR_I_GRAVE,
[CHAR_i_ACUTE] = CHAR_I_ACUTE,
[CHAR_i_CIRCUMFLEX] = CHAR_I_CIRCUMFLEX,
[CHAR_i_DIAERESIS] = CHAR_I_DIAERESIS,
[CHAR_o_GRAVE] = CHAR_O_GRAVE,
[CHAR_o_ACUTE] = CHAR_O_ACUTE,
[CHAR_o_CIRCUMFLEX] = CHAR_O_CIRCUMFLEX,
[CHAR_o_DIAERESIS] = CHAR_O_DIAERESIS,
[CHAR_oe] = CHAR_OE,
[CHAR_u_GRAVE] = CHAR_U_GRAVE,
[CHAR_u_ACUTE] = CHAR_U_ACUTE,
[CHAR_u_CIRCUMFLEX] = CHAR_U_CIRCUMFLEX,
[CHAR_u_DIAERESIS] = CHAR_U_DIAERESIS,
[CHAR_n_TILDE] = CHAR_N_TILDE,
[CHAR_0] = CHAR_0,
[CHAR_1] = CHAR_1,
[CHAR_2] = CHAR_2,
[CHAR_3] = CHAR_3,
[CHAR_4] = CHAR_4,
[CHAR_5] = CHAR_5,
[CHAR_6] = CHAR_6,
[CHAR_7] = CHAR_7,
[CHAR_8] = CHAR_8,
[CHAR_9] = CHAR_9,
[CHAR_PK] = CHAR_PK,
[CHAR_MN] = CHAR_MN,
[CHAR_PO] = CHAR_PO,
[CHAR_KE] = CHAR_KE,
[CHAR_SUPER_E] = CHAR_SUPER_E,
[CHAR_SUPER_ER] = CHAR_SUPER_ER,
[CHAR_SUPER_RE] = CHAR_SUPER_RE,
[CHAR_PERIOD] = CHAR_PERIOD,
[CHAR_COMMA] = CHAR_COMMA,
[CHAR_COLON] = CHAR_COLON,
[CHAR_SEMICOLON] = CHAR_SEMICOLON,
[CHAR_EXCL_MARK] = CHAR_EXCL_MARK,
[CHAR_QUESTION_MARK] = CHAR_QUESTION_MARK,
[CHAR_HYPHEN] = CHAR_HYPHEN,
[CHAR_SLASH] = CHAR_SLASH,
[CHAR_ELLIPSIS] = CHAR_ELLIPSIS,
[CHAR_LEFT_PAREN] = CHAR_LEFT_PAREN,
[CHAR_RIGHT_PAREN] = CHAR_RIGHT_PAREN,
[CHAR_AMPERSAND] = CHAR_AMPERSAND,
[CHAR_DBL_QUOTE_LEFT] = CHAR_DBL_QUOTE_LEFT,
[CHAR_DBL_QUOTE_RIGHT] = CHAR_DBL_QUOTE_RIGHT,
[CHAR_SGL_QUOTE_LEFT] = CHAR_SGL_QUOTE_LEFT,
[CHAR_SGL_QUOTE_RIGHT] = CHAR_SGL_QUOTE_RIGHT,
[CHAR_MASCULINE_ORDINAL] = CHAR_MASCULINE_ORDINAL,
[CHAR_FEMININE_ORDINAL] = CHAR_FEMININE_ORDINAL,
[CHAR_BULLET] = CHAR_BULLET,
[CHAR_EQUALS] = CHAR_EQUALS,
[CHAR_MULT_SIGN] = CHAR_MULT_SIGN,
[CHAR_PERCENT] = CHAR_PERCENT,
[CHAR_LESS_THAN] = CHAR_LESS_THAN,
[CHAR_GREATER_THAN] = CHAR_GREATER_THAN,
[CHAR_MALE] = CHAR_MALE,
[CHAR_FEMALE] = CHAR_FEMALE,
[CHAR_CURRENCY] = CHAR_CURRENCY,
[CHAR_BLACK_TRIANGLE] = CHAR_BLACK_TRIANGLE,
};
const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {