diff options
Diffstat (limited to 'arm9/src/text.c')
-rw-r--r-- | arm9/src/text.c | 68 |
1 files changed, 66 insertions, 2 deletions
diff --git a/arm9/src/text.c b/arm9/src/text.c index 8ec3efe8..6207d913 100644 --- a/arm9/src/text.c +++ b/arm9/src/text.c @@ -1,10 +1,11 @@ #include "text.h" #include "heap.h" #include "string16.h" +#include "MI_memory.h" const struct FontInfo *gFonts = NULL; -u8 UNK_021C5734[0x200]; +u16 UNK_021C5734[0x100]; u32 UNK_021C5714[8]; u8 UNK_021C570C[8]; @@ -12,13 +13,18 @@ extern u32 FUN_0200CA7C(void (*func)(u32, struct TextPrinter *), struct TextPrin extern struct TextPrinter *FUN_0201B6C8(void); extern void FUN_0200CAB4(u32 param0); -extern void FUN_0201C238(struct TextPrinter *printer); extern void FUN_0201C1A8(struct TextPrinter *printer); extern void CopyWindowToVram(u32 windowId); extern u32 FontFunc(u8 fontId, struct TextPrinter *printer); +extern void *FUN_02006BB0(u32 param0, u32 param1, u32 param2, struct TextPrinter **param3, u32 param4); + +extern u32 FUN_0201AB0C(u32 windowId); +extern void FUN_02019658(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8, u32 param9); + + THUMB_FUNC void SetFontsPointer(const struct FontInfo *fonts) { gFonts = fonts; @@ -498,3 +504,61 @@ THUMB_FUNC void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadow } } #endif + +THUMB_FUNC void DecompressGlyphTile(const u16 *src, u16 *dst) +{ + dst[0] = UNK_021C5734[(u32)src[0] >> 8]; + dst[1] = UNK_021C5734[(u8)src[0]]; + dst[2] = UNK_021C5734[(u32)src[1] >> 8]; + dst[3] = UNK_021C5734[(u8)src[1]]; + dst[4] = UNK_021C5734[(u32)src[2] >> 8]; + dst[5] = UNK_021C5734[(u8)src[2]]; + dst[6] = UNK_021C5734[(u32)src[3] >> 8]; + dst[7] = UNK_021C5734[(u8)src[3]]; + dst[8] = UNK_021C5734[(u32)src[4] >> 8]; + dst[9] = UNK_021C5734[(u8)src[4]]; + dst[10] = UNK_021C5734[(u32)src[5] >> 8]; + dst[11] = UNK_021C5734[(u8)src[5]]; + dst[12] = UNK_021C5734[(u32)src[6] >> 8]; + dst[13] = UNK_021C5734[(u8)src[6]]; + dst[14] = UNK_021C5734[(u32)src[7] >> 8]; + dst[15] = UNK_021C5734[(u8)src[7]]; +} + +THUMB_FUNC void FUN_0201C1A8(struct TextPrinter *printer) +{ + printer->Unk2C = NULL; +} + +THUMB_FUNC void *FUN_0201C1B0(void) +{ + void *res = AllocFromHeap(0, sizeof(struct TextPrinter) * 32); + struct TextPrinter *var; + void *tmp = FUN_02006BB0(14, 5, 0, &var, 0); + MIi_CpuCopy32((void *)var->printerTemplate.Unk20, res, sizeof(struct TextPrinter) * 32); //todo Unk20 can't be right here + FreeToHeap(tmp); + return res; +} + +THUMB_FUNC void FUN_0201C1EC(struct TextPrinter *printer, u32 param1, u32 param2, u32 param3) +{ +#pragma unused (param1, param2) + u32 windowId = printer->printerTemplate.windowId; + if (printer->Unk2C == NULL) + { + printer->Unk2C = FUN_0201C1B0(); + } + u32 r6 = (u32)printer->Unk2C + param3 * (sizeof(struct TextPrinter) * 8); + u32 r2 = ((FUN_0201AB0C(windowId) - 3) << 0x13) >> 0x10; + FUN_02019658(windowId, r6, 0, 0, 24, 32, r2, 0, 24, 32); +} + +THUMB_FUNC void FUN_0201C238(struct TextPrinter *printer) +{ + if (printer->Unk2C == NULL) + { + return; + } + FreeToHeap(printer->Unk2C); + printer->Unk2C = NULL; +} |