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
+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] = {