pokeemerald/gflib/text.h

332 lines
10 KiB
C
Raw Normal View History

2017-01-14 20:53:20 +01:00
#ifndef GUARD_TEXT_H
#define GUARD_TEXT_H
#define CHAR_SPACE 0x00
2018-07-07 14:24:19 +02:00
#define CHAR_PLUS 0x2E
2017-09-06 17:19:08 +02:00
#define CHAR_0 0xA1
2018-07-07 14:24:19 +02:00
#define CHAR_1 0xA2
#define CHAR_2 0xA3
#define CHAR_3 0xA4
#define CHAR_4 0xA5
#define CHAR_5 0xA6
#define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
2019-01-28 18:13:07 +01:00
#define CHAR_EXCL_MARK 0xAB
2017-01-14 20:53:20 +01:00
#define CHAR_QUESTION_MARK 0xAC
2017-09-06 17:19:08 +02:00
#define CHAR_PERIOD 0xAD
2017-01-14 20:53:20 +01:00
#define CHAR_HYPHEN 0xAE
2017-09-06 17:19:08 +02:00
#define CHAR_ELLIPSIS 0xB0
#define CHAR_DBL_QUOT_LEFT 0xB1
#define CHAR_DBL_QUOT_RIGHT 0xB2
#define CHAR_SGL_QUOT_LEFT 0xB3
#define CHAR_SGL_QUOT_RIGHT 0xB4
2017-09-06 17:19:08 +02:00
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
2017-01-14 20:53:20 +01:00
#define CHAR_CURRENCY 0xB7
2017-09-06 17:19:08 +02:00
#define CHAR_COMMA 0xB8
#define CHAR_MULT_SIGN 0xB9
#define CHAR_SLASH 0xBA
#define CHAR_A 0xBB
#define CHAR_B 0xBC
#define CHAR_C 0xBD
#define CHAR_D 0xBE
#define CHAR_E 0xBF
#define CHAR_F 0xC0
#define CHAR_G 0xC1
#define CHAR_H 0xC2
#define CHAR_I 0xC3
#define CHAR_J 0xC4
#define CHAR_K 0xC5
#define CHAR_L 0xC6
#define CHAR_M 0xC7
#define CHAR_N 0xC8
#define CHAR_O 0xC9
#define CHAR_P 0xCA
#define CHAR_Q 0xCB
#define CHAR_R 0xCC
#define CHAR_S 0xCD
#define CHAR_T 0xCE
#define CHAR_U 0xCF
#define CHAR_V 0xD0
#define CHAR_W 0xD1
#define CHAR_X 0xD2
#define CHAR_Y 0xD3
#define CHAR_Z 0xD4
#define CHAR_a 0xD5
#define CHAR_b 0xD6
#define CHAR_c 0xD7
#define CHAR_d 0xD8
#define CHAR_e 0xD9
#define CHAR_f 0xDA
#define CHAR_g 0xDB
#define CHAR_h 0xDC
#define CHAR_i 0xDD
#define CHAR_j 0xDE
#define CHAR_k 0xDF
#define CHAR_l 0xE0
#define CHAR_m 0xE1
#define CHAR_n 0xE2
#define CHAR_o 0xE3
#define CHAR_p 0xE4
#define CHAR_q 0xE5
#define CHAR_r 0xE6
#define CHAR_s 0xE7
#define CHAR_t 0xE8
#define CHAR_u 0xE9
#define CHAR_v 0xEA
#define CHAR_w 0xEB
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_SPECIAL_F7 0xF7
2018-10-14 15:04:25 +02:00
#define CHAR_SPECIAL_F8 0xF8
2017-09-26 22:39:59 +02:00
#define CHAR_SPECIAL_F9 0xF9
2017-01-14 20:53:20 +01:00
#define CHAR_COLON 0xF0
2017-09-06 17:19:08 +02:00
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
2017-01-14 20:53:20 +01:00
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
2017-09-25 00:09:13 +02:00
#define EOS 0xFF // end of string
2020-02-01 06:25:50 +01:00
// Special F9 chars
#define CHAR_UP_ARROW_2 0x00
#define CHAR_DOWN_ARROW_2 0x01
#define CHAR_LEFT_ARROW_2 0x02
#define CHAR_RIGHT_ARROW_2 0x03
#define CHAR_PLUS_2 0x04
#define CHAR_LV_2 0x05
#define CHAR_PP 0x06
#define CHAR_ID 0x07
#define CHAR_NO 0x08
2020-02-02 03:28:49 +01:00
#define CHAR_UNDERSCORE 0x09
2020-02-01 06:25:50 +01:00
2018-02-07 03:37:54 +01:00
#define EXT_CTRL_CODE_COLOR 0x1
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
#define EXT_CTRL_CODE_SHADOW 0x3
//
#define EXT_CTRL_CODE_UNKNOWN_7 0x7
//
#define EXT_CTRL_CODE_CLEAR 0x11
//
#define EXT_CTRL_CODE_CLEAR_TO 0x13
#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
2018-02-07 03:37:54 +01:00
2017-09-26 22:39:59 +02:00
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GREY 0x2
2019-10-04 01:39:37 +02:00
#define TEXT_COLOR_LIGHT_GREY 0x3
2018-03-28 00:33:08 +02:00
#define TEXT_COLOR_RED 0x4
2019-10-04 01:39:37 +02:00
#define TEXT_COLOR_LIGHT_RED 0x5
2018-03-28 00:33:08 +02:00
#define TEXT_COLOR_GREEN 0x6
2019-10-04 01:39:37 +02:00
#define TEXT_COLOR_LIGHT_GREEN 0x7
2018-03-28 00:33:08 +02:00
#define TEXT_COLOR_BLUE 0x8
2019-10-04 01:39:37 +02:00
#define TEXT_COLOR_LIGHT_BLUE 0x9
#define TEXT_DYNAMIC_COLOR_1 0xA // Usually white
#define TEXT_DYNAMIC_COLOR_2 0xB // Usually white w/ tinge of green
#define TEXT_DYNAMIC_COLOR_3 0xC // Usually white
#define TEXT_DYNAMIC_COLOR_4 0xD // Usually aquamarine
#define TEXT_DYNAMIC_COLOR_5 0xE // Usually blue-green
#define TEXT_DYNAMIC_COLOR_6 0xF // Usually cerulean
2017-09-26 22:39:59 +02:00
2019-09-20 01:23:24 +02:00
#define PLACEHOLDER_ID_UNKNOWN 0x0
#define PLACEHOLDER_ID_PLAYER 0x1
#define PLACEHOLDER_ID_STRING_VAR_1 0x2
#define PLACEHOLDER_ID_STRING_VAR_2 0x3
#define PLACEHOLDER_ID_STRING_VAR_3 0x4
#define PLACEHOLDER_ID_KUN 0x5
#define PLACEHOLDER_ID_RIVAL 0x6
#define PLACEHOLDER_ID_VERSION 0x7
#define PLACEHOLDER_ID_AQUA 0x8
#define PLACEHOLDER_ID_MAGMA 0x9
#define PLACEHOLDER_ID_ARCHIE 0xA
#define PLACEHOLDER_ID_MAXIE 0xB
#define PLACEHOLDER_ID_KYOGRE 0xC
#define PLACEHOLDER_ID_GROUDON 0xD
2017-09-25 00:09:13 +02:00
// battle placeholders are located in battle_message.h
2017-09-06 17:19:08 +02:00
2017-03-07 14:44:41 +01:00
#define NUM_TEXT_PRINTERS 32
2017-11-19 22:48:46 +01:00
#define TEXT_SPEED_FF 0xFF
2018-11-21 21:58:35 +01:00
enum
{
2018-07-15 13:23:38 +02:00
FONTATTR_MAX_LETTER_WIDTH,
FONTATTR_MAX_LETTER_HEIGHT,
FONTATTR_LETTER_SPACING,
FONTATTR_LINE_SPACING,
2018-11-06 18:30:21 +01:00
FONTATTR_UNKNOWN, // dunno what this is yet
2018-07-15 13:23:38 +02:00
FONTATTR_COLOR_FOREGROUND,
FONTATTR_COLOR_BACKGROUND,
FONTATTR_COLOR_SHADOW
};
2018-11-05 21:42:12 +01:00
struct TextPrinterSubStruct
2017-09-22 05:43:13 +02:00
{
2018-11-06 17:44:48 +01:00
u8 glyphId:4; // 0x14
bool8 hasPrintBeenSpedUp:1;
2018-11-06 18:30:21 +01:00
u8 unk:3;
2018-11-06 17:44:48 +01:00
u8 downArrowDelay:5;
u8 downArrowYPosIdx:2;
bool8 hasGlyphIdBeenSet:1;
2018-11-06 18:30:21 +01:00
u8 autoScrollDelay;
2017-09-22 05:43:13 +02:00
};
2018-11-06 17:44:48 +01:00
struct TextPrinterTemplate
2017-09-26 22:39:59 +02:00
{
2018-11-06 17:44:48 +01:00
const u8* currentChar;
2017-09-23 03:26:37 +02:00
u8 windowId;
u8 fontId;
u8 x;
u8 y;
u8 currentX; // 0x8
u8 currentY;
u8 letterSpacing;
u8 lineSpacing;
2018-11-06 18:30:21 +01:00
u8 unk:4; // 0xC
2018-01-25 22:25:35 +01:00
u8 fgColor:4;
2017-09-23 03:26:37 +02:00
u8 bgColor:4;
u8 shadowColor:4;
};
2017-03-07 14:44:41 +01:00
struct TextPrinter
{
2018-11-06 17:44:48 +01:00
struct TextPrinterTemplate printerTemplate;
2017-09-06 17:19:08 +02:00
2018-11-06 17:44:48 +01:00
void (*callback)(struct TextPrinterTemplate *, u16); // 0x10
2017-09-06 17:19:08 +02:00
2019-07-19 02:46:00 +02:00
union
#if !MODERN
__attribute__((packed))
#endif
{
2017-09-22 05:43:13 +02:00
struct TextPrinterSubStruct sub;
2018-11-06 18:30:21 +01:00
u8 fields[7];
} subUnion;
2017-09-06 17:19:08 +02:00
2018-11-05 21:42:12 +01:00
u8 active;
2017-03-07 14:44:41 +01:00
u8 state; // 0x1C
2018-11-05 21:42:12 +01:00
u8 textSpeed;
2017-03-07 14:44:41 +01:00
u8 delayCounter;
u8 scrollDistance;
u8 minLetterSpacing; // 0x20
u8 japanese;
};
struct FontInfo
{
u16 (*fontFunction)(struct TextPrinter *x);
u8 maxLetterWidth;
u8 maxLetterHeight;
u8 letterSpacing;
u8 lineSpacing;
2018-11-06 18:30:21 +01:00
u8 unk:4;
2018-01-25 22:25:35 +01:00
u8 fgColor:4;
2017-03-07 14:44:41 +01:00
u8 bgColor:4;
u8 shadowColor:4;
};
2017-09-22 05:43:13 +02:00
extern const struct FontInfo *gFonts;
2017-09-18 23:48:47 +02:00
struct GlyphWidthFunc
{
2018-11-06 18:30:21 +01:00
u32 fontId;
2017-03-28 02:30:49 +02:00
u32 (*func)(u16 glyphId, bool32 isJapanese);
};
2017-09-18 23:48:47 +02:00
struct KeypadIcon
{
2018-11-06 18:30:21 +01:00
u16 tileOffset;
2017-03-28 02:30:49 +02:00
u8 width;
u8 height;
};
2017-09-22 05:43:13 +02:00
typedef struct {
2018-11-06 18:30:21 +01:00
bool8 canABSpeedUpPrint:1;
bool8 useAlternateDownArrow:1;
bool8 autoScroll:1;
bool8 forceMidTextSpeed:1;
2017-09-22 05:43:13 +02:00
} TextFlags;
2018-11-05 21:42:12 +01:00
struct Struct_03002F90
{
2018-11-21 21:58:35 +01:00
u32 unk0[8];
u32 unk20[8];
u32 unk40[8];
u32 unk60[8];
2018-11-05 21:42:12 +01:00
u8 unk80;
u8 unk81;
};
2017-09-22 05:43:13 +02:00
extern TextFlags gTextFlags;
2018-11-05 21:42:12 +01:00
extern u8 gUnknown_03002F84;
extern struct Struct_03002F90 gUnknown_03002F90;
2017-09-22 05:43:13 +02:00
2017-03-28 06:20:55 +02:00
void SetFontsPointer(const struct FontInfo *fonts);
void DeactivateAllTextPrinters(void);
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));
bool16 AddTextPrinter(struct TextPrinterTemplate *template, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16));
2017-03-28 06:20:55 +02:00
void RunTextPrinters(void);
2017-09-18 23:48:47 +02:00
bool16 IsTextPrinterActive(u8 id);
2017-03-28 06:20:55 +02:00
u32 RenderFont(struct TextPrinter *textPrinter);
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor);
void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
2018-11-21 23:30:04 +01:00
void DecompressGlyphTile(const void *src_, void *dest_);
2017-03-28 06:20:55 +02:00
u8 GetLastTextColor(u8 colorType);
void CopyGlyphToWindow(struct TextPrinter *x);
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
2018-02-09 03:00:28 +01:00
u8 GetMenuCursorDimensionByFont(u8, u8);
2017-03-28 06:20:55 +02:00
u16 Font0Func(struct TextPrinter *textPrinter);
u16 Font1Func(struct TextPrinter *textPrinter);
u16 Font2Func(struct TextPrinter *textPrinter);
u16 Font3Func(struct TextPrinter *textPrinter);
u16 Font4Func(struct TextPrinter *textPrinter);
u16 Font5Func(struct TextPrinter *textPrinter);
u16 Font7Func(struct TextPrinter *textPrinter);
u16 Font8Func(struct TextPrinter *textPrinter);
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter);
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter);
void TextPrinterClearDownArrow(struct TextPrinter *textPrinter);
bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter);
2017-09-22 05:43:13 +02:00
bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter);
bool16 TextPrinterWait(struct TextPrinter *textPrinter);
2017-03-28 06:20:55 +02:00
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex);
u16 RenderText(struct TextPrinter *textPrinter);
2017-09-18 17:26:45 +02:00
u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
2017-03-28 06:20:55 +02:00
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
2018-12-15 23:58:47 +01:00
s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
2017-03-28 06:20:55 +02:00
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
u8 GetKeypadIconTileOffset(u8 keypadIconId);
u8 GetKeypadIconWidth(u8 keypadIconId);
u8 GetKeypadIconHeight(u8 keypadIconId);
void SetDefaultFontsPointer(void);
u8 GetFontAttribute(u8 fontId, u8 attributeId);
u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension);
void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese);
u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese);
u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese);
u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese);
u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese);
u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese);
void DecompressGlyphFont9(u16 glyphId);
2019-03-02 09:18:08 +01:00
// unk_text_util_2.c
u16 Font6Func(struct TextPrinter *textPrinter);
u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
2017-01-14 20:53:20 +01:00
#endif // GUARD_TEXT_H