mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-16 11:37:40 +01:00
148 lines
4.9 KiB
C
148 lines
4.9 KiB
C
#ifndef GUARD_TEXT_H
|
|
#define GUARD_TEXT_H
|
|
|
|
#define CHAR_SPACE 0x00
|
|
#define CHAR_QUESTION_MARK 0xAC
|
|
#define CHAR_HYPHEN 0xAE
|
|
#define CHAR_CURRENCY 0xB7
|
|
#define CHAR_COLON 0xF0
|
|
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
|
|
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
|
|
#define CHAR_NEWLINE 0xFE
|
|
#define EOS 0xFF // end of string
|
|
|
|
#define NUM_TEXT_PRINTERS 32
|
|
|
|
struct TextPrinter
|
|
{
|
|
struct TextSubPrinter { // TODO: Better name
|
|
u8* current_text_offset;
|
|
u8 windowId;
|
|
u8 fontId;
|
|
u8 x;
|
|
u8 y;
|
|
u8 currentX; // 0x8
|
|
u8 currentY;
|
|
u8 letterSpacing;
|
|
u8 lineSpacing;
|
|
u8 fontColor_l:4; // 0xC
|
|
u8 fontColor_h:4;
|
|
u8 bgColor:4;
|
|
u8 shadowColor:4;
|
|
} subPrinter;
|
|
|
|
void (*callback)(struct TextSubPrinter *, u16); // 0x10
|
|
|
|
union {
|
|
struct TextPrinterSubStruct
|
|
{
|
|
u8 font_type:4; // 0x14
|
|
u8 font_type_upper:4;
|
|
u8 field_1:5;
|
|
u8 field_1_upmid:2;
|
|
u8 field_1_top:1;
|
|
u8 frames_visible_counter;
|
|
u8 field_3;
|
|
u8 field_4; // 0x18
|
|
u8 field_5;
|
|
u8 field_6;
|
|
u8 active;
|
|
} sub;
|
|
|
|
u8 sub_fields[8];
|
|
} sub_union;
|
|
|
|
u8 state; // 0x1C
|
|
u8 text_speed;
|
|
u8 delayCounter;
|
|
u8 scrollDistance;
|
|
u8 minLetterSpacing; // 0x20
|
|
u8 japanese;
|
|
};
|
|
|
|
struct FontInfo
|
|
{
|
|
u16 (*fontFunction)(struct TextPrinter *x);
|
|
u8 maxLetterWidth;
|
|
u8 maxLetterHeight;
|
|
u8 letterSpacing;
|
|
u8 lineSpacing;
|
|
u8 fontColor_l:4;
|
|
u8 fontColor_h:4;
|
|
u8 bgColor:4;
|
|
u8 shadowColor:4;
|
|
};
|
|
|
|
struct GlyphWidthFunc{
|
|
u32 font_id;
|
|
u32 (*func)(u16 glyphId, bool32 isJapanese);
|
|
};
|
|
|
|
struct KeypadIcon {
|
|
u16 tile_offset;
|
|
u8 width;
|
|
u8 height;
|
|
};
|
|
|
|
extern u8 gStringVar1[];
|
|
extern u8 gStringVar2[];
|
|
extern u8 gStringVar3[];
|
|
extern u8 gStringVar4[];
|
|
|
|
void SetFontsPointer(const struct FontInfo *fonts);
|
|
void DeactivateAllTextPrinters (void);
|
|
u16 Print(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
|
|
bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
|
|
void RunTextPrinters(void);
|
|
bool8 IsTextPrinterActive(u8 id);
|
|
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);
|
|
void DecompressGlyphTile(const u16 *src, u16 *dest);
|
|
u8 GetLastTextColor(u8 colorType);
|
|
void CopyGlyphToWindow(struct TextPrinter *x);
|
|
void ClearTextSpan(struct TextPrinter *textPrinter, u32 width);
|
|
|
|
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);
|
|
bool8 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter);
|
|
bool8 TextPrinterWait(struct TextPrinter *textPrinter);
|
|
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex);
|
|
u16 RenderText(struct TextPrinter *textPrinter);
|
|
u32 GetStringWidthFixedWidthFont(u8 *str, u8 fontId, u8 letterSpacing);
|
|
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
|
|
s32 GetStringWidth(u8 fontId, u8 *str, s16 letterSpacing);
|
|
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);
|
|
|
|
#endif // GUARD_TEXT_H
|