diff --git a/include/characters.h b/include/characters.h new file mode 100644 index 000000000..c310a8e51 --- /dev/null +++ b/include/characters.h @@ -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 diff --git a/include/text.h b/include/text.h index a20da3b10..a1d187a13 100644 --- a/include/text.h +++ b/include/text.h @@ -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; diff --git a/src/battle_message.c b/src/battle_message.c index 94d1f190e..ea1f07329 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -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 diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 3eaf8db8d..e9089c30a 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -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++; } diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 49c639ebc..d722fbdb5 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -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); diff --git a/src/help_system_util.c b/src/help_system_util.c index c95e46003..6cd01f9ed 100644 --- a/src/help_system_util.c +++ b/src/help_system_util.c @@ -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; diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 21efcaf22..6a9d27606 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -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] = ' ', diff --git a/src/mystery_gift_show_card.c b/src/mystery_gift_show_card.c index c462bda76..8d2520c15 100644 --- a/src/mystery_gift_show_card.c +++ b/src/mystery_gift_show_card.c @@ -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]; diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 85521d0e9..41d0d27b0 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -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); diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 5da6f5b3d..25b8a9534 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -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; diff --git a/src/text.c b/src/text.c index 78521e4e6..f070c2df5 100644 --- a/src/text.c +++ b/src/text.c @@ -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: diff --git a/src/text_printer.c b/src/text_printer.c index fddb00307..6710ebfd0 100644 --- a/src/text_printer.c +++ b/src/text_printer.c @@ -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; } } } diff --git a/src/union_room_chat.c b/src/union_room_chat.c index a2436575b..aedc57fdc 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -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] = {