2017-03-07 14:44:41 +01:00
|
|
|
#include "global.h"
|
2018-01-24 22:45:37 +01:00
|
|
|
#include "battle.h"
|
2017-03-07 14:44:41 +01:00
|
|
|
#include "main.h"
|
2018-01-24 22:45:37 +01:00
|
|
|
#include "m4a.h"
|
2017-03-07 14:44:41 +01:00
|
|
|
#include "palette.h"
|
2018-01-24 22:45:37 +01:00
|
|
|
#include "sound.h"
|
2018-02-28 13:07:58 +01:00
|
|
|
#include "constants/songs.h"
|
2017-03-07 14:44:41 +01:00
|
|
|
#include "string_util.h"
|
2017-03-30 02:02:15 +02:00
|
|
|
#include "window.h"
|
2017-09-23 03:26:37 +02:00
|
|
|
#include "text.h"
|
2018-02-28 13:07:58 +01:00
|
|
|
#include "blit.h"
|
2018-12-24 00:02:29 +01:00
|
|
|
#include "menu.h"
|
2018-10-18 21:24:37 +02:00
|
|
|
#include "dynamic_placeholder_text_util.h"
|
2017-03-07 14:44:41 +01:00
|
|
|
|
2017-09-02 00:21:11 +02:00
|
|
|
EWRAM_DATA struct TextPrinter gTempTextPrinter = {0};
|
|
|
|
EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0};
|
2017-03-28 02:30:49 +02:00
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
static u16 gFontHalfRowLookupTable[0x51];
|
|
|
|
static u16 gLastTextBgColor;
|
|
|
|
static u16 gLastTextFgColor;
|
|
|
|
static u16 gLastTextShadowColor;
|
2017-03-07 14:44:41 +01:00
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
const struct FontInfo *gFonts;
|
2021-03-29 18:20:00 +02:00
|
|
|
u8 gDisableTextPrinters;
|
|
|
|
struct TextGlyph gCurGlyph;
|
2017-09-22 05:43:13 +02:00
|
|
|
TextFlags gTextFlags;
|
2017-03-28 02:30:49 +02:00
|
|
|
|
2018-11-21 21:58:35 +01:00
|
|
|
const u8 gFontHalfRowOffsets[] =
|
|
|
|
{
|
2018-01-24 22:45:37 +01:00
|
|
|
0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
|
2017-03-28 02:30:49 +02:00
|
|
|
0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09,
|
|
|
|
0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12,
|
2018-01-24 22:45:37 +01:00
|
|
|
0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
|
2017-03-28 02:30:49 +02:00
|
|
|
0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B,
|
|
|
|
0x24, 0x25, 0x26, 0x24, 0x27, 0x28, 0x29, 0x27, 0x2A, 0x2B, 0x2C, 0x2A, 0x24, 0x25, 0x26, 0x24,
|
2018-01-24 22:45:37 +01:00
|
|
|
0x2D, 0x2E, 0x2F, 0x2D, 0x30, 0x31, 0x32, 0x30, 0x33, 0x34, 0x35, 0x33, 0x2D, 0x2E, 0x2F, 0x2D,
|
2017-03-28 02:30:49 +02:00
|
|
|
0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B,
|
|
|
|
0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36,
|
2018-01-24 22:45:37 +01:00
|
|
|
0x3F, 0x40, 0x41, 0x3F, 0x42, 0x43, 0x44, 0x42, 0x45, 0x46, 0x47, 0x45, 0x3F, 0x40, 0x41, 0x3F,
|
2017-03-28 02:30:49 +02:00
|
|
|
0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4C, 0x4D, 0x4B, 0x4E, 0x4F, 0x50, 0x4E, 0x48, 0x49, 0x4A, 0x48,
|
|
|
|
0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36,
|
2018-01-24 22:45:37 +01:00
|
|
|
0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
|
2017-03-28 02:30:49 +02:00
|
|
|
0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09,
|
|
|
|
0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12,
|
2018-01-24 22:45:37 +01:00
|
|
|
0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00
|
2017-03-28 02:30:49 +02:00
|
|
|
};
|
|
|
|
|
2020-03-12 18:40:00 +01:00
|
|
|
const u8 gDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow.4bpp");
|
|
|
|
const u8 gDarkDownArrowTiles[] = INCBIN_U8("graphics/fonts/down_arrow_RS.4bpp");
|
|
|
|
const u8 gUnusedFRLGBlankedDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_blanked_down_arrow.4bpp");
|
|
|
|
const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("graphics/fonts/unused_frlg_down_arrow.4bpp");
|
2017-03-28 02:30:49 +02:00
|
|
|
const u8 gDownArrowYCoords[] = { 0x0, 0x1, 0x2, 0x1 };
|
|
|
|
const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2, 0x4, 0x0 };
|
|
|
|
|
2018-11-21 21:58:35 +01:00
|
|
|
const struct GlyphWidthFunc gGlyphWidthFuncs[] =
|
|
|
|
{
|
2017-03-28 02:30:49 +02:00
|
|
|
{ 0x0, GetGlyphWidthFont0 },
|
|
|
|
{ 0x1, GetGlyphWidthFont1 },
|
|
|
|
{ 0x2, GetGlyphWidthFont2 },
|
|
|
|
{ 0x3, GetGlyphWidthFont2 },
|
|
|
|
{ 0x4, GetGlyphWidthFont2 },
|
|
|
|
{ 0x5, GetGlyphWidthFont2 },
|
|
|
|
{ 0x6, GetGlyphWidthFont6 },
|
|
|
|
{ 0x7, GetGlyphWidthFont7 },
|
|
|
|
{ 0x8, GetGlyphWidthFont8 }
|
|
|
|
};
|
|
|
|
|
2018-11-21 21:58:35 +01:00
|
|
|
const struct KeypadIcon gKeypadIcons[] =
|
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
[CHAR_A_BUTTON] = { 0x0, 0x8, 0xC },
|
|
|
|
[CHAR_B_BUTTON] = { 0x1, 0x8, 0xC },
|
|
|
|
[CHAR_L_BUTTON] = { 0x2, 0x10, 0xC },
|
|
|
|
[CHAR_R_BUTTON] = { 0x4, 0x10, 0xC },
|
|
|
|
[CHAR_START_BUTTON] = { 0x6, 0x18, 0xC },
|
|
|
|
[CHAR_SELECT_BUTTON] = { 0x9, 0x18, 0xC },
|
|
|
|
[CHAR_DPAD_UP] = { 0xC, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_DOWN] = { 0xD, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_LEFT] = { 0xE, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_RIGHT] = { 0xF, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_UPDOWN] = { 0x20, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_LEFTRIGHT] = { 0x21, 0x8, 0xC },
|
|
|
|
[CHAR_DPAD_NONE] = { 0x22, 0x8, 0xC }
|
2017-03-28 02:30:49 +02:00
|
|
|
};
|
|
|
|
|
2020-03-12 18:40:00 +01:00
|
|
|
const u8 gKeypadIconTiles[] = INCBIN_U8("graphics/fonts/keypad_icons.4bpp");
|
2017-03-08 21:44:44 +01:00
|
|
|
|
2018-11-21 21:58:35 +01:00
|
|
|
const struct FontInfo gFontInfos[] =
|
|
|
|
{
|
2017-03-28 02:30:49 +02:00
|
|
|
{ Font0Func, 0x5, 0xC, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font1Func, 0x6, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font2Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font3Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font4Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font5Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font6Func, 0x8, 0x10, 0x0, 0x8, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font7Func, 0x5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ Font8Func, 0x5, 0x8, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
|
|
|
|
{ NULL, 0x8, 0x8, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF }
|
|
|
|
};
|
2017-03-07 14:44:41 +01:00
|
|
|
|
2018-11-21 21:58:35 +01:00
|
|
|
const u8 gMenuCursorDimensions[][2] =
|
|
|
|
{
|
2017-03-28 02:30:49 +02:00
|
|
|
{ 0x8, 0xC },
|
|
|
|
{ 0x8, 0xF },
|
|
|
|
{ 0x8, 0xE },
|
|
|
|
{ 0x8, 0xE },
|
|
|
|
{ 0x8, 0xE },
|
|
|
|
{ 0x8, 0xE },
|
|
|
|
{ 0x8, 0x10 },
|
|
|
|
{ 0x8, 0xF },
|
|
|
|
{ 0x8, 0x8 },
|
|
|
|
{ 0x0, 0x0 }
|
|
|
|
};
|
|
|
|
|
2020-03-12 18:40:00 +01:00
|
|
|
const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("graphics/fonts/font9.hwjpnfont");
|
2017-03-28 02:30:49 +02:00
|
|
|
|
|
|
|
extern const u16 gFont8LatinGlyphs[];
|
|
|
|
extern const u8 gFont8LatinGlyphWidths[];
|
|
|
|
extern const u16 gFont0LatinGlyphs[];
|
|
|
|
extern const u8 gFont0LatinGlyphWidths[];
|
|
|
|
extern const u16 gFont7LatinGlyphs[];
|
|
|
|
extern const u8 gFont7LatinGlyphWidths[];
|
|
|
|
extern const u16 gFont2LatinGlyphs[];
|
|
|
|
extern const u8 gFont2LatinGlyphWidths[];
|
|
|
|
extern const u16 gFont1LatinGlyphs[];
|
|
|
|
extern const u8 gFont1LatinGlyphWidths[];
|
|
|
|
extern const u16 gFont0JapaneseGlyphs[];
|
|
|
|
extern const u16 gFont1JapaneseGlyphs[];
|
|
|
|
extern const u16 gFont2JapaneseGlyphs[];
|
|
|
|
extern const u8 gFont2JapaneseGlyphWidths[];
|
|
|
|
|
|
|
|
void SetFontsPointer(const struct FontInfo *fonts)
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
|
|
|
gFonts = fonts;
|
|
|
|
}
|
|
|
|
|
2018-09-08 23:38:30 +02:00
|
|
|
void DeactivateAllTextPrinters(void)
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
|
|
|
int printer;
|
|
|
|
for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer)
|
2018-11-05 21:42:12 +01:00
|
|
|
gTextPrinters[printer].active = 0;
|
2017-03-07 14:44:41 +01:00
|
|
|
}
|
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
struct TextPrinterTemplate printerTemplate;
|
|
|
|
|
|
|
|
printerTemplate.currentChar = str;
|
|
|
|
printerTemplate.windowId = windowId;
|
|
|
|
printerTemplate.fontId = fontId;
|
|
|
|
printerTemplate.x = x;
|
|
|
|
printerTemplate.y = y;
|
|
|
|
printerTemplate.currentX = x;
|
|
|
|
printerTemplate.currentY = y;
|
|
|
|
printerTemplate.letterSpacing = gFonts[fontId].letterSpacing;
|
|
|
|
printerTemplate.lineSpacing = gFonts[fontId].lineSpacing;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
printerTemplate.unk = gFonts[fontId].unk;
|
2018-11-06 17:44:48 +01:00
|
|
|
printerTemplate.fgColor = gFonts[fontId].fgColor;
|
|
|
|
printerTemplate.bgColor = gFonts[fontId].bgColor;
|
|
|
|
printerTemplate.shadowColor = gFonts[fontId].shadowColor;
|
|
|
|
return AddTextPrinter(&printerTemplate, speed, callback);
|
2017-03-07 14:44:41 +01:00
|
|
|
}
|
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
u16 j;
|
|
|
|
|
|
|
|
if (!gFonts)
|
|
|
|
return FALSE;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-05 21:42:12 +01:00
|
|
|
gTempTextPrinter.active = 1;
|
2017-03-07 14:44:41 +01:00
|
|
|
gTempTextPrinter.state = 0;
|
2018-11-05 21:42:12 +01:00
|
|
|
gTempTextPrinter.textSpeed = speed;
|
2017-03-07 14:44:41 +01:00
|
|
|
gTempTextPrinter.delayCounter = 0;
|
|
|
|
gTempTextPrinter.scrollDistance = 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-05 21:42:12 +01:00
|
|
|
for (i = 0; i < 7; i++)
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
gTempTextPrinter.subStructFields[i] = 0;
|
2017-03-07 14:44:41 +01:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
gTempTextPrinter.printerTemplate = *printerTemplate;
|
2017-03-07 14:44:41 +01:00
|
|
|
gTempTextPrinter.callback = callback;
|
|
|
|
gTempTextPrinter.minLetterSpacing = 0;
|
|
|
|
gTempTextPrinter.japanese = 0;
|
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
GenerateFontHalfRowLookupTable(printerTemplate->fgColor, printerTemplate->bgColor, printerTemplate->shadowColor);
|
2020-05-21 04:07:49 +02:00
|
|
|
if (speed != TEXT_SPEED_FF && speed != 0)
|
2017-03-07 14:44:41 +01:00
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
--gTempTextPrinter.textSpeed;
|
2018-11-06 17:44:48 +01:00
|
|
|
gTextPrinters[printerTemplate->windowId] = gTempTextPrinter;
|
2017-03-07 14:44:41 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
gTempTextPrinter.textSpeed = 0;
|
2017-03-07 14:44:41 +01:00
|
|
|
for (j = 0; j < 0x400; ++j)
|
|
|
|
{
|
2019-07-01 21:08:49 +02:00
|
|
|
if (RenderFont(&gTempTextPrinter) == 1)
|
2017-03-07 14:44:41 +01:00
|
|
|
break;
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-11-19 22:48:46 +01:00
|
|
|
if (speed != TEXT_SPEED_FF)
|
2020-05-21 04:28:17 +02:00
|
|
|
CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2);
|
2018-11-06 17:44:48 +01:00
|
|
|
gTextPrinters[printerTemplate->windowId].active = 0;
|
2017-03-07 14:44:41 +01:00
|
|
|
}
|
2021-03-29 18:20:00 +02:00
|
|
|
gDisableTextPrinters = 0;
|
2017-03-07 14:44:41 +01:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
void RunTextPrinters(void)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gDisableTextPrinters == 0)
|
2017-03-08 21:44:44 +01:00
|
|
|
{
|
2020-05-21 04:28:17 +02:00
|
|
|
for (i = 0; i < NUM_TEXT_PRINTERS; ++i)
|
2017-03-08 21:44:44 +01:00
|
|
|
{
|
2018-11-21 21:58:35 +01:00
|
|
|
if (gTextPrinters[i].active)
|
2017-03-08 21:44:44 +01:00
|
|
|
{
|
2018-11-21 21:58:35 +01:00
|
|
|
u16 temp = RenderFont(&gTextPrinters[i]);
|
|
|
|
switch (temp)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2);
|
|
|
|
case 3:
|
|
|
|
if (gTextPrinters[i].callback != 0)
|
|
|
|
gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
gTextPrinters[i].active = 0;
|
|
|
|
break;
|
2017-03-08 21:44:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-18 23:48:47 +02:00
|
|
|
bool16 IsTextPrinterActive(u8 id)
|
2017-03-08 21:44:44 +01:00
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
return gTextPrinters[id].active;
|
2017-03-08 21:44:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
u32 RenderFont(struct TextPrinter *textPrinter)
|
|
|
|
{
|
|
|
|
u32 ret;
|
|
|
|
while (TRUE)
|
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
ret = gFonts[textPrinter->printerTemplate.fontId].fontFunction(textPrinter);
|
2017-03-08 21:44:44 +01:00
|
|
|
if (ret != 2)
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
|
|
|
|
{
|
2018-11-25 20:16:41 +01:00
|
|
|
u32 fg12, bg12, shadow12;
|
|
|
|
u32 temp;
|
|
|
|
|
|
|
|
u16 *current = gFontHalfRowLookupTable;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
gLastTextBgColor = bgColor;
|
|
|
|
gLastTextFgColor = fgColor;
|
|
|
|
gLastTextShadowColor = shadowColor;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-25 20:16:41 +01:00
|
|
|
bg12 = bgColor << 12;
|
|
|
|
fg12 = fgColor << 12;
|
|
|
|
shadow12 = shadowColor << 12;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (bgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (bgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (bgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (fgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (fgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (fgColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (shadowColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (shadowColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (shadowColor << 4) | bgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (bgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (bgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (bgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (fgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (fgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (fgColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (shadowColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (shadowColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (shadowColor << 4) | fgColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (bgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (bgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (bgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (fgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (fgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (fgColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (bgColor << 8) | (shadowColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (fgColor << 8) | (shadowColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
|
|
|
|
2018-11-26 20:19:52 +01:00
|
|
|
temp = (shadowColor << 8) | (shadowColor << 4) | shadowColor;
|
2018-11-25 20:16:41 +01:00
|
|
|
*(current++) = (bg12) | temp;
|
|
|
|
*(current++) = (fg12) | temp;
|
|
|
|
*(current++) = (shadow12) | temp;
|
2017-03-08 21:44:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
|
|
|
|
{
|
|
|
|
*bgColor = gLastTextBgColor;
|
|
|
|
*fgColor = gLastTextFgColor;
|
|
|
|
*shadowColor = gLastTextShadowColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
|
|
|
|
{
|
|
|
|
GenerateFontHalfRowLookupTable(*fgColor, *bgColor, *shadowColor);
|
|
|
|
}
|
|
|
|
|
2018-11-21 23:30:50 +01:00
|
|
|
void DecompressGlyphTile(const void *src_, void *dest_)
|
2017-03-08 21:44:44 +01:00
|
|
|
{
|
|
|
|
u32 temp;
|
2018-11-21 23:30:04 +01:00
|
|
|
const u16 *src = src_;
|
2018-11-21 21:58:35 +01:00
|
|
|
u32 *dest = dest_;
|
|
|
|
|
2018-11-21 23:30:04 +01:00
|
|
|
temp = *(src++);
|
2018-11-21 21:58:35 +01:00
|
|
|
*(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-21 23:30:04 +01:00
|
|
|
temp = *(src++);
|
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
2018-11-21 21:58:35 +01:00
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
temp = *(src++);
|
2018-11-21 21:58:35 +01:00
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
temp = *(src++);
|
2018-11-21 21:58:35 +01:00
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
temp = *(src++);
|
2018-11-21 21:58:35 +01:00
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
|
|
|
|
2017-03-08 21:44:44 +01:00
|
|
|
temp = *(src++);
|
2018-11-21 21:58:35 +01:00
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
|
|
|
|
|
|
|
temp = *(src++);
|
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
|
|
|
|
|
|
|
temp = *(src++);
|
|
|
|
*(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
|
2017-03-08 21:44:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetLastTextColor(u8 colorType)
|
|
|
|
{
|
|
|
|
switch (colorType)
|
|
|
|
{
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
case 0:
|
2018-11-21 21:58:35 +01:00
|
|
|
return gLastTextFgColor;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
case 2:
|
2018-11-21 21:58:35 +01:00
|
|
|
return gLastTextBgColor;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
case 1:
|
2018-11-21 21:58:35 +01:00
|
|
|
return gLastTextShadowColor;
|
|
|
|
default:
|
|
|
|
return 0;
|
2017-03-08 21:44:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *glyphPixels, s32 width, s32 height)
|
2020-10-21 10:26:45 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
u32 xAdd, yAdd, pixelData, bits, toOrr, dummyX;
|
2020-10-21 10:26:45 +02:00
|
|
|
u8 *dst;
|
|
|
|
|
|
|
|
xAdd = j + width;
|
|
|
|
yAdd = i + height;
|
|
|
|
dummyX = j;
|
|
|
|
for (; i < yAdd; i++)
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
pixelData = *glyphPixels++;
|
2020-10-21 10:26:45 +02:00
|
|
|
for (j = dummyX; j < xAdd; j++)
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
if ((toOrr = pixelData & 0xF))
|
2020-10-21 10:26:45 +02:00
|
|
|
{
|
|
|
|
dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4);
|
|
|
|
bits = ((j & 1) * 4);
|
|
|
|
*dst = (toOrr << bits) | (*dst & (0xF0 >> bits));
|
|
|
|
}
|
2021-03-29 18:20:00 +02:00
|
|
|
pixelData >>= 4;
|
2020-10-21 10:26:45 +02:00
|
|
|
}
|
|
|
|
}
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
}
|
2020-08-03 20:21:51 +02:00
|
|
|
|
2019-07-28 10:37:44 +02:00
|
|
|
void CopyGlyphToWindow(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
struct Window *window;
|
|
|
|
struct WindowTemplate *template;
|
|
|
|
u32 *glyphPixels;
|
2020-10-21 10:26:45 +02:00
|
|
|
u32 currX, currY, widthOffset;
|
2021-03-29 18:20:00 +02:00
|
|
|
s32 glyphWidth, glyphHeight;
|
2019-07-28 10:37:44 +02:00
|
|
|
u8 *windowTiles;
|
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
window = &gWindows[textPrinter->printerTemplate.windowId];
|
|
|
|
template = &window->window;
|
2019-07-28 10:37:44 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if ((glyphWidth = (template->width * 8) - textPrinter->printerTemplate.currentX) > gCurGlyph.width)
|
|
|
|
glyphWidth = gCurGlyph.width;
|
2019-07-28 10:37:44 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if ((glyphHeight = (template->height * 8) - textPrinter->printerTemplate.currentY) > gCurGlyph.height)
|
|
|
|
glyphHeight = gCurGlyph.height;
|
2019-07-28 10:37:44 +02:00
|
|
|
|
|
|
|
currX = textPrinter->printerTemplate.currentX;
|
|
|
|
currY = textPrinter->printerTemplate.currentY;
|
2021-03-29 18:20:00 +02:00
|
|
|
glyphPixels = gCurGlyph.gfxBufferTop;
|
|
|
|
windowTiles = window->tileData;
|
|
|
|
widthOffset = template->width * 32;
|
2019-07-28 10:37:44 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (glyphWidth < 9)
|
2019-07-28 10:37:44 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
if (glyphHeight < 9)
|
2019-07-28 10:37:44 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY, glyphPixels, glyphWidth, glyphHeight);
|
2019-07-28 10:37:44 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY, glyphPixels, glyphWidth, 8);
|
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, glyphPixels + 16, glyphWidth, glyphHeight - 8);
|
2019-07-28 10:37:44 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
if (glyphHeight < 9)
|
2019-07-28 10:37:44 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY, glyphPixels, 8, glyphHeight);
|
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, glyphPixels + 8, glyphWidth - 8, glyphHeight);
|
2019-07-28 10:37:44 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY, glyphPixels, 8, 8);
|
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, glyphPixels + 8, glyphWidth - 8, 8);
|
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, glyphPixels + 16, 8, glyphHeight - 8);
|
|
|
|
GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY + 8, glyphPixels + 24, glyphWidth - 8, glyphHeight - 8);
|
2019-07-28 10:37:44 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width)
|
|
|
|
{
|
|
|
|
struct Window *window;
|
|
|
|
struct Bitmap pixels_data;
|
2021-03-29 18:20:00 +02:00
|
|
|
struct TextGlyph *glyph;
|
2017-03-28 02:30:49 +02:00
|
|
|
u8* glyphHeight;
|
|
|
|
|
|
|
|
if (gLastTextBgColor != 0)
|
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
window = &gWindows[textPrinter->printerTemplate.windowId];
|
2017-03-28 02:30:49 +02:00
|
|
|
pixels_data.pixels = window->tileData;
|
2017-04-05 22:51:55 +02:00
|
|
|
pixels_data.width = window->window.width << 3;
|
|
|
|
pixels_data.height = window->window.height << 3;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
glyph = &gCurGlyph;
|
|
|
|
glyphHeight = &glyph->height;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
FillBitmapRect4Bit(
|
|
|
|
&pixels_data,
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX,
|
|
|
|
textPrinter->printerTemplate.currentY,
|
2017-03-28 02:30:49 +02:00
|
|
|
width,
|
|
|
|
*glyphHeight,
|
|
|
|
gLastTextBgColor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font0Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 0;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font1Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 1;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font2Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 2;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
2017-03-08 21:44:44 +01:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
u16 Font3Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 3;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font4Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 4;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font5Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 5;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font7Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 7;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 Font8Func(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (subStruct->hasGlyphIdBeenSet == FALSE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->glyphId = 8;
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasGlyphIdBeenSet = TRUE;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return RenderText(textPrinter);
|
|
|
|
}
|
|
|
|
|
|
|
|
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (gTextFlags.autoScroll == 1)
|
2020-05-21 04:07:49 +02:00
|
|
|
{
|
2018-11-06 18:30:21 +01:00
|
|
|
subStruct->autoScrollDelay = 0;
|
2020-05-21 04:07:49 +02:00
|
|
|
}
|
2017-03-28 02:30:49 +02:00
|
|
|
else
|
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->downArrowYPosIdx = 0;
|
|
|
|
subStruct->downArrowDelay = 0;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-03-28 02:30:49 +02:00
|
|
|
const u8 *arrowTiles;
|
|
|
|
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (gTextFlags.autoScroll == 0)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
if (subStruct->downArrowDelay != 0)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->downArrowDelay--;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FillWindowPixelRect(
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.windowId,
|
|
|
|
textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
|
|
|
|
textPrinter->printerTemplate.currentX,
|
|
|
|
textPrinter->printerTemplate.currentY,
|
2020-05-21 04:07:49 +02:00
|
|
|
8,
|
|
|
|
16);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-06 18:30:21 +01:00
|
|
|
switch (gTextFlags.useAlternateDownArrow)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
case FALSE:
|
2017-03-28 02:30:49 +02:00
|
|
|
default:
|
|
|
|
arrowTiles = gDownArrowTiles;
|
|
|
|
break;
|
2020-05-21 04:07:49 +02:00
|
|
|
case TRUE:
|
2017-03-28 02:30:49 +02:00
|
|
|
arrowTiles = gDarkDownArrowTiles;
|
|
|
|
break;
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
BlitBitmapRectToWindow(
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.windowId,
|
2017-03-28 02:30:49 +02:00
|
|
|
arrowTiles,
|
|
|
|
0,
|
2020-05-21 04:07:49 +02:00
|
|
|
gDownArrowYCoords[subStruct->downArrowYPosIdx],
|
|
|
|
8,
|
|
|
|
16,
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX,
|
|
|
|
textPrinter->printerTemplate.currentY,
|
2020-05-21 04:07:49 +02:00
|
|
|
8,
|
|
|
|
16);
|
|
|
|
CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->downArrowDelay = 8;
|
|
|
|
subStruct->downArrowYPosIdx++;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void TextPrinterClearDownArrow(struct TextPrinter *textPrinter)
|
|
|
|
{
|
|
|
|
FillWindowPixelRect(
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.windowId,
|
|
|
|
textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
|
|
|
|
textPrinter->printerTemplate.currentX,
|
|
|
|
textPrinter->printerTemplate.currentY,
|
2020-05-21 04:07:49 +02:00
|
|
|
8,
|
|
|
|
16);
|
|
|
|
CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-11-06 18:30:21 +01:00
|
|
|
if (subStruct->autoScrollDelay == 49)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
subStruct->autoScrollDelay++;
|
2017-03-28 02:30:49 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-22 05:43:13 +02:00
|
|
|
bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
bool8 result = FALSE;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (gTextFlags.autoScroll != 0)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
result = TextPrinterWaitAutoMode(textPrinter);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
TextPrinterDrawDownArrow(textPrinter);
|
2020-11-03 02:02:39 +01:00
|
|
|
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
result = TRUE;
|
2018-02-28 13:07:58 +01:00
|
|
|
PlaySE(SE_SELECT);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2017-09-22 05:43:13 +02:00
|
|
|
bool16 TextPrinterWait(struct TextPrinter *textPrinter)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2017-09-22 05:43:13 +02:00
|
|
|
bool16 result = FALSE;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (gTextFlags.autoScroll != 0)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
result = TextPrinterWaitAutoMode(textPrinter);
|
|
|
|
}
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
else
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2020-11-03 02:18:26 +01:00
|
|
|
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
{
|
|
|
|
result = TRUE;
|
|
|
|
PlaySE(SE_SELECT);
|
|
|
|
}
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex)
|
|
|
|
{
|
|
|
|
const u8 *arrowTiles;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
if (*counter != 0)
|
|
|
|
{
|
|
|
|
--*counter;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10);
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
if (drawArrow == 0)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2018-11-06 18:30:21 +01:00
|
|
|
switch (gTextFlags.useAlternateDownArrow)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
default:
|
|
|
|
arrowTiles = gDownArrowTiles;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
arrowTiles = gDarkDownArrowTiles;
|
|
|
|
break;
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
BlitBitmapRectToWindow(
|
|
|
|
windowId,
|
|
|
|
arrowTiles,
|
|
|
|
0,
|
|
|
|
gDownArrowYCoords[*yCoordIndex & 3],
|
|
|
|
0x8,
|
|
|
|
0x10,
|
|
|
|
x,
|
|
|
|
y - 2,
|
|
|
|
0x8,
|
|
|
|
0x10);
|
|
|
|
CopyWindowToVram(windowId, 0x2);
|
|
|
|
*counter = 8;
|
|
|
|
++*yCoordIndex;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-11-04 23:09:10 +01:00
|
|
|
|
2018-01-24 22:45:37 +01:00
|
|
|
u16 RenderText(struct TextPrinter *textPrinter)
|
|
|
|
{
|
2020-05-21 04:07:49 +02:00
|
|
|
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
2018-01-30 20:13:07 +01:00
|
|
|
u16 currChar;
|
|
|
|
s32 width;
|
2018-11-04 23:09:10 +01:00
|
|
|
s32 widthHelper;
|
2017-03-28 02:30:49 +02:00
|
|
|
|
2018-11-04 23:09:10 +01:00
|
|
|
switch (textPrinter->state)
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
case 0:
|
2020-11-03 02:02:39 +01:00
|
|
|
if ((JOY_HELD(A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp)
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->delayCounter = 0;
|
|
|
|
|
2018-11-05 21:42:12 +01:00
|
|
|
if (textPrinter->delayCounter && textPrinter->textSpeed)
|
2018-01-30 20:13:07 +01:00
|
|
|
{
|
|
|
|
textPrinter->delayCounter--;
|
2020-11-03 02:02:39 +01:00
|
|
|
if (gTextFlags.canABSpeedUpPrint && (JOY_NEW(A_BUTTON | B_BUTTON)))
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->hasPrintBeenSpedUp = TRUE;
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->delayCounter = 0;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
2018-11-06 18:30:21 +01:00
|
|
|
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.autoScroll)
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->delayCounter = 3;
|
|
|
|
else
|
2018-11-05 21:42:12 +01:00
|
|
|
textPrinter->delayCounter = textPrinter->textSpeed;
|
2018-01-30 20:13:07 +01:00
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
|
2018-11-04 23:09:10 +01:00
|
|
|
switch (currChar)
|
2018-01-30 20:13:07 +01:00
|
|
|
{
|
2018-11-04 23:09:10 +01:00
|
|
|
case CHAR_NEWLINE:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
|
|
|
textPrinter->printerTemplate.currentY += (gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing);
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2018-11-04 23:09:10 +01:00
|
|
|
case PLACEHOLDER_BEGIN:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2018-11-04 23:09:10 +01:00
|
|
|
case EXT_CTRL_CODE_BEGIN:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-11-04 23:09:10 +01:00
|
|
|
switch (currChar)
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_HIGHLIGHT:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SHADOW:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PALETTE:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2021-10-30 00:00:07 +02:00
|
|
|
case EXT_CTRL_CODE_FONT:
|
2018-11-06 17:44:48 +01:00
|
|
|
subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_RESET_SIZE:
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PAUSE:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 6;
|
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 1;
|
2018-11-06 18:30:21 +01:00
|
|
|
if (gTextFlags.autoScroll)
|
|
|
|
subStruct->autoScrollDelay = 0;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 3;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_WAIT_SE:
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 5;
|
|
|
|
return 3;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PLAY_BGM:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
currChar |= *textPrinter->printerTemplate.currentChar << 8;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
PlayBGM(currChar);
|
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_ESCAPE:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar | 0x100;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-11-04 23:09:10 +01:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PLAY_SE:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
currChar |= (*textPrinter->printerTemplate.currentChar << 8);
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
PlaySE(currChar);
|
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SHIFT_TEXT:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SHIFT_DOWN:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_FILL_WINDOW:
|
2019-03-02 23:25:39 +01:00
|
|
|
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
|
|
|
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PAUSE_MUSIC:
|
2018-01-30 20:13:07 +01:00
|
|
|
m4aMPlayStop(&gMPlayInfo_BGM);
|
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_RESUME_MUSIC:
|
2018-01-30 20:13:07 +01:00
|
|
|
m4aMPlayContinue(&gMPlayInfo_BGM);
|
|
|
|
return 2;
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_CLEAR:
|
2018-11-06 17:44:48 +01:00
|
|
|
width = *textPrinter->printerTemplate.currentChar;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
if (width > 0)
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2018-01-30 20:13:07 +01:00
|
|
|
ClearTextSpan(textPrinter, width);
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX += width;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 0;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SKIP:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2019-03-28 01:09:12 +01:00
|
|
|
case EXT_CTRL_CODE_CLEAR_TO:
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
widthHelper = *textPrinter->printerTemplate.currentChar;
|
|
|
|
widthHelper += textPrinter->printerTemplate.x;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
|
|
|
width = widthHelper - textPrinter->printerTemplate.currentX;
|
2018-01-30 20:13:07 +01:00
|
|
|
if (width > 0)
|
|
|
|
{
|
|
|
|
ClearTextSpan(textPrinter, width);
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX += width;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 0;
|
|
|
|
}
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2019-03-29 02:20:52 +01:00
|
|
|
case EXT_CTRL_CODE_MIN_LETTER_SPACING:
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_JPN:
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
textPrinter->japanese = 1;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_ENG:
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
textPrinter->japanese = 0;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 2;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
break;
|
2018-11-04 23:09:10 +01:00
|
|
|
case CHAR_PROMPT_CLEAR:
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 2;
|
|
|
|
TextPrinterInitDownArrowCounters(textPrinter);
|
2018-01-24 22:45:37 +01:00
|
|
|
return 3;
|
2018-11-04 23:09:10 +01:00
|
|
|
case CHAR_PROMPT_SCROLL:
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 3;
|
|
|
|
TextPrinterInitDownArrowCounters(textPrinter);
|
2018-01-24 22:45:37 +01:00
|
|
|
return 3;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_EXTRA_SYMBOL:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar | 0x100;
|
|
|
|
textPrinter->printerTemplate.currentChar++;
|
2018-01-30 20:13:07 +01:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_KEYPAD_ICON:
|
2018-11-06 17:44:48 +01:00
|
|
|
currChar = *textPrinter->printerTemplate.currentChar++;
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY);
|
|
|
|
textPrinter->printerTemplate.currentX += gCurGlyph.width + textPrinter->printerTemplate.letterSpacing;
|
2018-01-30 20:13:07 +01:00
|
|
|
return 0;
|
2018-11-04 23:09:10 +01:00
|
|
|
case EOS:
|
2018-01-30 20:13:07 +01:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2018-11-06 17:44:48 +01:00
|
|
|
switch (subStruct->glyphId)
|
2018-01-30 20:13:07 +01:00
|
|
|
{
|
2018-11-06 17:44:48 +01:00
|
|
|
case 0:
|
2018-01-30 20:13:07 +01:00
|
|
|
DecompressGlyphFont0(currChar, textPrinter->japanese);
|
|
|
|
break;
|
2018-11-06 17:44:48 +01:00
|
|
|
case 1:
|
2018-01-30 20:13:07 +01:00
|
|
|
DecompressGlyphFont1(currChar, textPrinter->japanese);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
case 4:
|
2018-11-06 17:44:48 +01:00
|
|
|
case 5:
|
2018-01-30 20:13:07 +01:00
|
|
|
DecompressGlyphFont2(currChar, textPrinter->japanese);
|
|
|
|
break;
|
2018-11-06 17:44:48 +01:00
|
|
|
case 7:
|
2018-01-30 20:13:07 +01:00
|
|
|
DecompressGlyphFont7(currChar, textPrinter->japanese);
|
|
|
|
break;
|
2018-11-06 17:44:48 +01:00
|
|
|
case 8:
|
2018-01-30 20:13:07 +01:00
|
|
|
DecompressGlyphFont8(currChar, textPrinter->japanese);
|
|
|
|
break;
|
2018-11-06 17:44:48 +01:00
|
|
|
case 6:
|
2018-01-30 20:13:07 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2018-11-04 23:09:10 +01:00
|
|
|
CopyGlyphToWindow(textPrinter);
|
2018-01-30 20:13:07 +01:00
|
|
|
|
|
|
|
if (textPrinter->minLetterSpacing)
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
textPrinter->printerTemplate.currentX += gCurGlyph.width;
|
|
|
|
width = textPrinter->minLetterSpacing - gCurGlyph.width;
|
2018-01-30 20:13:07 +01:00
|
|
|
if (width > 0)
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2018-01-30 20:13:07 +01:00
|
|
|
ClearTextSpan(textPrinter, width);
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX += width;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
}
|
2018-11-04 23:09:10 +01:00
|
|
|
else
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
{
|
|
|
|
if (textPrinter->japanese)
|
2021-03-29 18:20:00 +02:00
|
|
|
textPrinter->printerTemplate.currentX += (gCurGlyph.width + textPrinter->printerTemplate.letterSpacing);
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
else
|
2021-03-29 18:20:00 +02:00
|
|
|
textPrinter->printerTemplate.currentX += gCurGlyph.width;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
return 0;
|
2018-11-04 23:09:10 +01:00
|
|
|
case 1:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (TextPrinterWait(textPrinter))
|
|
|
|
textPrinter->state = 0;
|
|
|
|
return 3;
|
2018-11-04 23:09:10 +01:00
|
|
|
case 2:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (TextPrinterWaitWithDownArrow(textPrinter))
|
|
|
|
{
|
2019-03-02 23:25:39 +01:00
|
|
|
FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
|
|
|
textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 0;
|
|
|
|
}
|
|
|
|
return 3;
|
2018-11-04 23:09:10 +01:00
|
|
|
case 3:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (TextPrinterWaitWithDownArrow(textPrinter))
|
|
|
|
{
|
|
|
|
TextPrinterClearDownArrow(textPrinter);
|
2018-11-06 17:44:48 +01:00
|
|
|
textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
|
|
|
|
textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->state = 4;
|
|
|
|
}
|
|
|
|
return 3;
|
2018-11-04 23:09:10 +01:00
|
|
|
case 4:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (textPrinter->scrollDistance)
|
|
|
|
{
|
2018-11-06 18:30:21 +01:00
|
|
|
int scrollSpeed = GetPlayerTextSpeed();
|
2018-01-30 20:13:07 +01:00
|
|
|
int speed = gWindowVerticalScrollSpeeds[scrollSpeed];
|
|
|
|
if (textPrinter->scrollDistance < speed)
|
2018-01-24 22:45:37 +01:00
|
|
|
{
|
2019-03-02 23:25:39 +01:00
|
|
|
ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->scrollDistance = 0;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
|
|
|
else
|
2018-01-30 20:13:07 +01:00
|
|
|
{
|
2019-03-02 23:25:39 +01:00
|
|
|
ScrollWindow(textPrinter->printerTemplate.windowId, 0, speed, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
|
2018-01-30 20:13:07 +01:00
|
|
|
textPrinter->scrollDistance -= speed;
|
|
|
|
}
|
2018-11-06 17:44:48 +01:00
|
|
|
CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
|
2018-01-30 20:13:07 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
textPrinter->state = 0;
|
|
|
|
}
|
|
|
|
return 3;
|
2018-11-04 23:09:10 +01:00
|
|
|
case 5:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (!IsSEPlaying())
|
|
|
|
textPrinter->state = 0;
|
|
|
|
return 3;
|
2018-11-06 17:44:48 +01:00
|
|
|
case 6:
|
2018-01-30 20:13:07 +01:00
|
|
|
if (textPrinter->delayCounter != 0)
|
|
|
|
textPrinter->delayCounter--;
|
|
|
|
else
|
|
|
|
textPrinter->state = 0;
|
|
|
|
return 3;
|
2018-01-24 22:45:37 +01:00
|
|
|
}
|
2018-01-30 20:13:07 +01:00
|
|
|
|
2018-01-24 22:45:37 +01:00
|
|
|
return 1;
|
|
|
|
}
|
2017-03-28 02:30:49 +02:00
|
|
|
|
2017-09-18 17:26:45 +02:00
|
|
|
u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
u8 width;
|
|
|
|
int temp;
|
|
|
|
int temp2;
|
|
|
|
u8 line;
|
|
|
|
int strPos;
|
|
|
|
u8 lineWidths[8];
|
2017-09-18 17:26:45 +02:00
|
|
|
const u8 *strLocal;
|
2017-03-28 02:30:49 +02:00
|
|
|
|
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
{
|
|
|
|
lineWidths[i] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
width = 0;
|
|
|
|
line = 0;
|
|
|
|
strLocal = str;
|
|
|
|
strPos = 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
do
|
|
|
|
{
|
|
|
|
temp = strLocal[strPos++];
|
|
|
|
switch (temp)
|
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
case CHAR_NEWLINE:
|
|
|
|
case EOS:
|
|
|
|
lineWidths[line] = width;
|
|
|
|
width = 0;
|
|
|
|
line++;
|
|
|
|
break;
|
|
|
|
case EXT_CTRL_CODE_BEGIN:
|
|
|
|
temp2 = strLocal[strPos++];
|
|
|
|
switch (temp2)
|
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
|
2017-03-28 02:30:49 +02:00
|
|
|
++strPos;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PLAY_BGM:
|
|
|
|
case EXT_CTRL_CODE_PLAY_SE:
|
2018-11-05 21:42:12 +01:00
|
|
|
++strPos;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR:
|
|
|
|
case EXT_CTRL_CODE_HIGHLIGHT:
|
|
|
|
case EXT_CTRL_CODE_SHADOW:
|
|
|
|
case EXT_CTRL_CODE_PALETTE:
|
2021-10-30 00:00:07 +02:00
|
|
|
case EXT_CTRL_CODE_FONT:
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PAUSE:
|
|
|
|
case EXT_CTRL_CODE_ESCAPE:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_TEXT:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_DOWN:
|
|
|
|
case EXT_CTRL_CODE_CLEAR:
|
|
|
|
case EXT_CTRL_CODE_SKIP:
|
|
|
|
case EXT_CTRL_CODE_CLEAR_TO:
|
|
|
|
case EXT_CTRL_CODE_MIN_LETTER_SPACING:
|
2017-03-28 02:30:49 +02:00
|
|
|
++strPos;
|
2018-11-05 21:42:12 +01:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_RESET_SIZE:
|
|
|
|
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
|
|
|
case EXT_CTRL_CODE_WAIT_SE:
|
|
|
|
case EXT_CTRL_CODE_FILL_WINDOW:
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_JPN:
|
|
|
|
case EXT_CTRL_CODE_ENG:
|
2017-03-28 02:30:49 +02:00
|
|
|
default:
|
|
|
|
break;
|
2018-11-05 21:42:12 +01:00
|
|
|
}
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_DYNAMIC:
|
2018-11-05 21:42:12 +01:00
|
|
|
case PLACEHOLDER_BEGIN:
|
|
|
|
++strPos;
|
|
|
|
break;
|
|
|
|
case CHAR_PROMPT_SCROLL:
|
|
|
|
case CHAR_PROMPT_CLEAR:
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_KEYPAD_ICON:
|
|
|
|
case CHAR_EXTRA_SYMBOL:
|
2018-11-05 21:42:12 +01:00
|
|
|
++strPos;
|
|
|
|
default:
|
|
|
|
++width;
|
|
|
|
break;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2018-10-14 15:04:25 +02:00
|
|
|
} while (temp != EOS);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
for (width = 0, strPos = 0; strPos < 8; ++strPos)
|
|
|
|
{
|
|
|
|
if (width < lineWidths[strPos])
|
|
|
|
width = lineWidths[strPos];
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-07-15 13:23:38 +02:00
|
|
|
return (u8)(GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + letterSpacing) * width;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32)
|
|
|
|
{
|
|
|
|
u32 i;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
for (i = 0; i < 9; ++i)
|
|
|
|
{
|
2018-11-06 18:30:21 +01:00
|
|
|
if (glyphId == gGlyphWidthFuncs[i].fontId)
|
2017-03-28 02:30:49 +02:00
|
|
|
return gGlyphWidthFuncs[i].func;
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-10-18 21:24:37 +02:00
|
|
|
return NULL;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
|
2018-12-15 23:58:47 +01:00
|
|
|
s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
bool8 isJapanese;
|
|
|
|
int minGlyphWidth;
|
|
|
|
u32 (*func)(u16 glyphId, bool32 isJapanese);
|
|
|
|
int localLetterSpacing;
|
|
|
|
u32 lineWidth;
|
2018-10-18 21:24:37 +02:00
|
|
|
const u8 *bufferPointer;
|
2017-03-28 02:30:49 +02:00
|
|
|
int glyphWidth;
|
2018-12-15 23:58:47 +01:00
|
|
|
s32 width;
|
2017-03-28 02:30:49 +02:00
|
|
|
|
|
|
|
isJapanese = 0;
|
|
|
|
minGlyphWidth = 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
func = GetFontWidthFunc(fontId);
|
|
|
|
if (func == NULL)
|
|
|
|
return 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
if (letterSpacing == -1)
|
2018-07-15 13:23:38 +02:00
|
|
|
localLetterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
|
2017-03-28 02:30:49 +02:00
|
|
|
else
|
|
|
|
localLetterSpacing = letterSpacing;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
width = 0;
|
|
|
|
lineWidth = 0;
|
|
|
|
bufferPointer = 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2018-10-14 15:04:25 +02:00
|
|
|
while (*str != EOS)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
switch (*str)
|
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
case CHAR_NEWLINE:
|
|
|
|
if (lineWidth > width)
|
|
|
|
width = lineWidth;
|
|
|
|
lineWidth = 0;
|
|
|
|
break;
|
|
|
|
case PLACEHOLDER_BEGIN:
|
|
|
|
switch (*++str)
|
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
case PLACEHOLDER_ID_STRING_VAR_1:
|
2018-11-05 21:42:12 +01:00
|
|
|
bufferPointer = gStringVar1;
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case PLACEHOLDER_ID_STRING_VAR_2:
|
2018-11-05 21:42:12 +01:00
|
|
|
bufferPointer = gStringVar2;
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case PLACEHOLDER_ID_STRING_VAR_3:
|
2018-11-05 21:42:12 +01:00
|
|
|
bufferPointer = gStringVar3;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return 0;
|
|
|
|
}
|
2021-03-19 23:52:37 +01:00
|
|
|
case CHAR_DYNAMIC:
|
2018-11-05 21:42:12 +01:00
|
|
|
if (bufferPointer == NULL)
|
|
|
|
bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str);
|
|
|
|
while (*bufferPointer != EOS)
|
|
|
|
{
|
|
|
|
glyphWidth = func(*bufferPointer++, isJapanese);
|
2017-03-28 02:30:49 +02:00
|
|
|
if (minGlyphWidth > 0)
|
|
|
|
{
|
|
|
|
if (glyphWidth < minGlyphWidth)
|
|
|
|
glyphWidth = minGlyphWidth;
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
lineWidth += glyphWidth;
|
2018-10-14 15:04:25 +02:00
|
|
|
if (isJapanese && str[1] != EOS)
|
2017-03-28 02:30:49 +02:00
|
|
|
lineWidth += localLetterSpacing;
|
|
|
|
}
|
2018-11-05 21:42:12 +01:00
|
|
|
}
|
|
|
|
bufferPointer = 0;
|
|
|
|
break;
|
|
|
|
case EXT_CTRL_CODE_BEGIN:
|
|
|
|
switch (*++str)
|
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
|
2018-11-05 21:42:12 +01:00
|
|
|
++str;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PLAY_BGM:
|
|
|
|
case EXT_CTRL_CODE_PLAY_SE:
|
2018-11-05 21:42:12 +01:00
|
|
|
++str;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR:
|
|
|
|
case EXT_CTRL_CODE_HIGHLIGHT:
|
|
|
|
case EXT_CTRL_CODE_SHADOW:
|
|
|
|
case EXT_CTRL_CODE_PALETTE:
|
|
|
|
case EXT_CTRL_CODE_PAUSE:
|
|
|
|
case EXT_CTRL_CODE_ESCAPE:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_TEXT:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_DOWN:
|
2018-11-05 21:42:12 +01:00
|
|
|
++str;
|
|
|
|
break;
|
2021-10-30 00:00:07 +02:00
|
|
|
case EXT_CTRL_CODE_FONT:
|
2018-11-05 21:42:12 +01:00
|
|
|
func = GetFontWidthFunc(*++str);
|
|
|
|
if (func == NULL)
|
|
|
|
return 0;
|
|
|
|
if (letterSpacing == -1)
|
|
|
|
localLetterSpacing = GetFontAttribute(*str, FONTATTR_LETTER_SPACING);
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_CLEAR:
|
2018-11-05 21:42:12 +01:00
|
|
|
glyphWidth = *++str;
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SKIP:
|
2018-11-05 21:42:12 +01:00
|
|
|
lineWidth = *++str;
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_CLEAR_TO:
|
2018-11-05 21:42:12 +01:00
|
|
|
if (*++str > lineWidth)
|
|
|
|
lineWidth = *str;
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_MIN_LETTER_SPACING:
|
2018-11-05 21:42:12 +01:00
|
|
|
minGlyphWidth = *++str;
|
|
|
|
break;
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_JPN:
|
2018-11-05 21:42:12 +01:00
|
|
|
isJapanese = 1;
|
|
|
|
break;
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_ENG:
|
2018-11-05 21:42:12 +01:00
|
|
|
isJapanese = 0;
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_RESET_SIZE:
|
|
|
|
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
|
|
|
case EXT_CTRL_CODE_WAIT_SE:
|
|
|
|
case EXT_CTRL_CODE_FILL_WINDOW:
|
2017-03-28 02:30:49 +02:00
|
|
|
default:
|
|
|
|
break;
|
2018-11-05 21:42:12 +01:00
|
|
|
}
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_KEYPAD_ICON:
|
|
|
|
case CHAR_EXTRA_SYMBOL:
|
|
|
|
if (*str == CHAR_EXTRA_SYMBOL)
|
2018-11-05 21:42:12 +01:00
|
|
|
glyphWidth = func(*++str | 0x100, isJapanese);
|
|
|
|
else
|
|
|
|
glyphWidth = GetKeypadIconWidth(*++str);
|
|
|
|
|
|
|
|
if (minGlyphWidth > 0)
|
|
|
|
{
|
|
|
|
if (glyphWidth < minGlyphWidth)
|
|
|
|
glyphWidth = minGlyphWidth;
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
if (isJapanese && str[1] != EOS)
|
|
|
|
lineWidth += localLetterSpacing;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case CHAR_PROMPT_SCROLL:
|
|
|
|
case CHAR_PROMPT_CLEAR:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
glyphWidth = func(*str, isJapanese);
|
|
|
|
if (minGlyphWidth > 0)
|
|
|
|
{
|
|
|
|
if (glyphWidth < minGlyphWidth)
|
|
|
|
glyphWidth = minGlyphWidth;
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
lineWidth += glyphWidth;
|
|
|
|
if (isJapanese && str[1] != EOS)
|
|
|
|
lineWidth += localLetterSpacing;
|
|
|
|
}
|
|
|
|
break;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
++str;
|
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
if (lineWidth > width)
|
|
|
|
return lineWidth;
|
2021-03-19 23:49:19 +01:00
|
|
|
return width;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
|
|
|
|
{
|
|
|
|
u8 shadowColor;
|
|
|
|
u8 *strLocal;
|
|
|
|
int strPos;
|
|
|
|
int temp;
|
|
|
|
int temp2;
|
|
|
|
u8 colorBackup[3];
|
|
|
|
u8 fgColor;
|
|
|
|
u8 bgColor;
|
|
|
|
|
|
|
|
SaveTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2020-08-11 05:50:49 +02:00
|
|
|
fgColor = TEXT_COLOR_WHITE;
|
|
|
|
bgColor = TEXT_COLOR_TRANSPARENT;
|
2021-04-10 04:39:34 +02:00
|
|
|
shadowColor = TEXT_COLOR_LIGHT_GRAY;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-04-10 04:39:34 +02:00
|
|
|
GenerateFontHalfRowLookupTable(TEXT_COLOR_WHITE, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GRAY);
|
2017-03-28 02:30:49 +02:00
|
|
|
strLocal = str;
|
|
|
|
strPos = 0;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
do
|
|
|
|
{
|
|
|
|
temp = strLocal[strPos++];
|
|
|
|
switch (temp)
|
|
|
|
{
|
2018-11-05 21:42:12 +01:00
|
|
|
case EXT_CTRL_CODE_BEGIN:
|
|
|
|
temp2 = strLocal[strPos++];
|
|
|
|
switch (temp2)
|
|
|
|
{
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW:
|
2018-11-05 21:42:12 +01:00
|
|
|
fgColor = strLocal[strPos++];
|
|
|
|
bgColor = strLocal[strPos++];
|
|
|
|
shadowColor = strLocal[strPos++];
|
|
|
|
GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
|
|
|
|
continue;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_COLOR:
|
2018-11-05 21:42:12 +01:00
|
|
|
fgColor = strLocal[strPos++];
|
|
|
|
GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
|
|
|
|
continue;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_HIGHLIGHT:
|
2018-11-05 21:42:12 +01:00
|
|
|
bgColor = strLocal[strPos++];
|
|
|
|
GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
|
|
|
|
continue;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_SHADOW:
|
2018-11-05 21:42:12 +01:00
|
|
|
shadowColor = strLocal[strPos++];
|
|
|
|
GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
|
|
|
|
continue;
|
2021-10-30 00:00:07 +02:00
|
|
|
case EXT_CTRL_CODE_FONT:
|
2018-11-05 21:42:12 +01:00
|
|
|
fontId = strLocal[strPos++];
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PLAY_BGM:
|
|
|
|
case EXT_CTRL_CODE_PLAY_SE:
|
2018-11-05 21:42:12 +01:00
|
|
|
++strPos;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_PALETTE:
|
|
|
|
case EXT_CTRL_CODE_PAUSE:
|
|
|
|
case EXT_CTRL_CODE_ESCAPE:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_TEXT:
|
|
|
|
case EXT_CTRL_CODE_SHIFT_DOWN:
|
|
|
|
case EXT_CTRL_CODE_CLEAR:
|
|
|
|
case EXT_CTRL_CODE_SKIP:
|
|
|
|
case EXT_CTRL_CODE_CLEAR_TO:
|
|
|
|
case EXT_CTRL_CODE_MIN_LETTER_SPACING:
|
2017-03-28 02:30:49 +02:00
|
|
|
++strPos;
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case EXT_CTRL_CODE_RESET_SIZE:
|
|
|
|
case EXT_CTRL_CODE_PAUSE_UNTIL_PRESS:
|
|
|
|
case EXT_CTRL_CODE_WAIT_SE:
|
|
|
|
case EXT_CTRL_CODE_FILL_WINDOW:
|
2018-11-28 00:21:23 +01:00
|
|
|
case EXT_CTRL_CODE_JPN:
|
|
|
|
case EXT_CTRL_CODE_ENG:
|
2018-11-05 21:42:12 +01:00
|
|
|
default:
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
break;
|
2020-08-11 05:50:49 +02:00
|
|
|
case CHAR_DYNAMIC:
|
|
|
|
case CHAR_KEYPAD_ICON:
|
|
|
|
case CHAR_EXTRA_SYMBOL:
|
2018-11-05 21:42:12 +01:00
|
|
|
case PLACEHOLDER_BEGIN:
|
|
|
|
++strPos;
|
|
|
|
break;
|
|
|
|
case CHAR_PROMPT_SCROLL:
|
|
|
|
case CHAR_PROMPT_CLEAR:
|
|
|
|
case CHAR_NEWLINE:
|
|
|
|
case EOS:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
switch (fontId)
|
|
|
|
{
|
|
|
|
case 9:
|
|
|
|
DecompressGlyphFont9(temp);
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2018-11-05 21:42:12 +01:00
|
|
|
case 1:
|
2017-03-28 02:30:49 +02:00
|
|
|
default:
|
2018-11-05 21:42:12 +01:00
|
|
|
DecompressGlyphFont1(temp, 1);
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2018-11-05 21:42:12 +01:00
|
|
|
}
|
2021-03-29 18:20:00 +02:00
|
|
|
CpuCopy32(gCurGlyph.gfxBufferTop, pixels, 0x20);
|
|
|
|
CpuCopy32(gCurGlyph.gfxBufferBottom, pixels + 0x20, 0x20);
|
2018-11-05 21:42:12 +01:00
|
|
|
pixels += 0x40;
|
|
|
|
break;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
2018-10-14 15:04:25 +02:00
|
|
|
while (temp != EOS);
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 02:30:49 +02:00
|
|
|
RestoreTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y)
|
|
|
|
{
|
|
|
|
BlitBitmapRectToWindow(
|
|
|
|
windowId,
|
2018-11-06 18:30:21 +01:00
|
|
|
gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20),
|
2017-03-28 02:30:49 +02:00
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0x80,
|
|
|
|
0x80,
|
|
|
|
x,
|
|
|
|
y,
|
|
|
|
gKeypadIcons[keypadIconId].width,
|
|
|
|
gKeypadIcons[keypadIconId].height);
|
|
|
|
return gKeypadIcons[keypadIconId].width;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetKeypadIconTileOffset(u8 keypadIconId)
|
|
|
|
{
|
2018-11-06 18:30:21 +01:00
|
|
|
return gKeypadIcons[keypadIconId].tileOffset;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetKeypadIconWidth(u8 keypadIconId)
|
|
|
|
{
|
|
|
|
return gKeypadIcons[keypadIconId].width;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetKeypadIconHeight(u8 keypadIconId)
|
|
|
|
{
|
|
|
|
return gKeypadIcons[keypadIconId].height;
|
|
|
|
}
|
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
void SetDefaultFontsPointer(void)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
SetFontsPointer(&gFontInfos[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetFontAttribute(u8 fontId, u8 attributeId)
|
|
|
|
{
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
int result = 0;
|
2017-03-28 02:30:49 +02:00
|
|
|
switch (attributeId)
|
|
|
|
{
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_MAX_LETTER_WIDTH:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].maxLetterWidth;
|
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_MAX_LETTER_HEIGHT:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].maxLetterHeight;
|
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_LETTER_SPACING:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].letterSpacing;
|
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_LINE_SPACING:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].lineSpacing;
|
|
|
|
break;
|
Undo PokeCodec's PRs
This commit undoes most of PokeCodec's PRs after the debate in chat. Some
harmless or completely superseded PRs have been left alone, as there is not
much benefit in attempting to undo them.
Reverts #1104, #1108, #1115, #1118, #1119, #1124, #1126, #1127, #1132, #1136,
#1137, #1139, #1140, #1144, #1148, #1149, #1150, #1153, #1155, #1177, #1179,
#1180, #1181, #1182 and #1183.
2020-09-13 09:22:50 +02:00
|
|
|
case FONTATTR_UNKNOWN:
|
|
|
|
result = gFontInfos[fontId].unk;
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_COLOR_FOREGROUND:
|
2018-01-25 22:25:35 +01:00
|
|
|
result = gFontInfos[fontId].fgColor;
|
2017-03-28 02:30:49 +02:00
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_COLOR_BACKGROUND:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].bgColor;
|
|
|
|
break;
|
2018-07-15 13:23:38 +02:00
|
|
|
case FONTATTR_COLOR_SHADOW:
|
2017-03-28 02:30:49 +02:00
|
|
|
result = gFontInfos[fontId].shadowColor;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension)
|
|
|
|
{
|
|
|
|
return gMenuCursorDimensions[fontId][whichDimension];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
|
|
|
|
|
|
|
if (isJapanese == 1)
|
|
|
|
{
|
|
|
|
glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
|
|
|
|
gCurGlyph.width = 8;
|
|
|
|
gCurGlyph.height = 12;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
glyphs = gFont0LatinGlyphs + (0x20 * glyphId);
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = gFont0LatinGlyphWidths[glyphId];
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gCurGlyph.width <= 8)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
|
|
|
DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.height = 13;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
return 8;
|
|
|
|
else
|
|
|
|
return gFont0LatinGlyphWidths[glyphId];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-05-03 02:56:30 +02:00
|
|
|
glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
|
|
|
|
gCurGlyph.width = 8;
|
|
|
|
gCurGlyph.height = 15;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
glyphs = gFont7LatinGlyphs + (0x20 * glyphId);
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = gFont7LatinGlyphWidths[glyphId];
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gCurGlyph.width <= 8)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
|
|
|
DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.height = 15;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
return 8;
|
|
|
|
else
|
|
|
|
return gFont7LatinGlyphWidths[glyphId];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
|
|
|
|
gCurGlyph.width = 8;
|
|
|
|
gCurGlyph.height = 12;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
glyphs = gFont8LatinGlyphs + (0x20 * glyphId);
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = gFont8LatinGlyphWidths[glyphId];
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gCurGlyph.width <= 8)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
|
|
|
DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.height = 12;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
return 8;
|
|
|
|
else
|
|
|
|
return gFont8LatinGlyphWidths[glyphId];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
|
|
|
glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); // gCurGlyph + 0x20
|
|
|
|
DecompressGlyphTile(glyphs + 0x88, gCurGlyph.gfxBufferBottom + 8); // gCurGlyph + 0x60
|
|
|
|
gCurGlyph.width = gFont2JapaneseGlyphWidths[glyphId];
|
|
|
|
gCurGlyph.height = 14;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
glyphs = gFont2LatinGlyphs + (0x20 * glyphId);
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = gFont2LatinGlyphWidths[glyphId];
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gCurGlyph.width <= 8)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
|
|
|
DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.height = 14;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
return gFont2JapaneseGlyphWidths[glyphId];
|
|
|
|
else
|
|
|
|
return gFont2LatinGlyphWidths[glyphId];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-05-03 02:56:30 +02:00
|
|
|
glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
|
|
|
|
gCurGlyph.width = 8;
|
|
|
|
gCurGlyph.height = 15;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
glyphs = gFont1LatinGlyphs + (0x20 * glyphId);
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.width = gFont1LatinGlyphWidths[glyphId];
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
if (gCurGlyph.width <= 8)
|
2017-03-28 02:30:49 +02:00
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
|
|
|
|
DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
|
|
|
|
DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
2017-09-02 00:21:11 +02:00
|
|
|
|
2021-03-29 18:20:00 +02:00
|
|
|
gCurGlyph.height = 15;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese)
|
|
|
|
{
|
2017-03-28 06:20:55 +02:00
|
|
|
if (isJapanese == TRUE)
|
2017-03-28 02:30:49 +02:00
|
|
|
return 8;
|
|
|
|
else
|
|
|
|
return gFont1LatinGlyphWidths[glyphId];
|
|
|
|
}
|
|
|
|
|
|
|
|
void DecompressGlyphFont9(u16 glyphId)
|
|
|
|
{
|
|
|
|
const u16* glyphs;
|
|
|
|
|
|
|
|
glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF));
|
2021-03-29 18:20:00 +02:00
|
|
|
DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
|
|
|
|
DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
|
|
|
|
gCurGlyph.width = 8;
|
|
|
|
gCurGlyph.height = 12;
|
2017-03-28 02:30:49 +02:00
|
|
|
}
|