pokeemerald/include/text.h

113 lines
2.3 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
#define NUM_WINDOWS 20
struct Window
{
u8 priority;
u8 tilemapLeft;
u8 tilemapTop;
u8 width;
u8 height;
u8 paletteNum;
u16 baseBlock;
u8 *tileData;
};
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 Bitmap // TODO: Find a better spot for this
{
u8* pixels;
u32 width:16;
u32 height:16;
};
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[];
#endif // GUARD_TEXT_H