diff options
author | red031000 <rubenru09@aol.com> | 2021-03-12 20:54:37 +0000 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-03-12 20:54:37 +0000 |
commit | bc398f3c399b5211a8b8ed38702670df654c66db (patch) | |
tree | ec88382ebad9f3eebd7926a2cc25cade2c922f15 | |
parent | 63bcf753d4d57c1585140c7b3eec1aace1e89caf (diff) |
finished text.c
-rw-r--r-- | arm9/arm9.lsf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_0201BCBC.s | 187 | ||||
-rw-r--r-- | arm9/asm/unk_02021590.s | 36 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/src/text.c | 68 | ||||
-rw-r--r-- | include/text.h | 20 |
6 files changed, 101 insertions, 213 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 8f0b150b..b8accee4 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -56,7 +56,6 @@ Static arm9 Object unk_0201B8B8.o Object math_util.o Object text.o - Object unk_0201BCBC.o Object unk_0201C24C.o Object unk_0201C360.o Object unk_0201C620.o diff --git a/arm9/asm/unk_0201BCBC.s b/arm9/asm/unk_0201BCBC.s deleted file mode 100644 index 65282b4a..00000000 --- a/arm9/asm/unk_0201BCBC.s +++ /dev/null @@ -1,187 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gFonts - .extern UNK_021C570C - .extern UNK_021C5714 - .extern UNK_021C5734 - .extern FUN_0201BCC8 - .extern FUN_0201BCFC - .extern FUN_0201BD44 - - .text - - thumb_func_start FUN_0201C100 -FUN_0201C100: ; 0x0201C100 - ldrh r2, [r0, #0x0] - lsr r2, r2, #0x8 - lsl r3, r2, #0x1 - ldr r2, _0201C1A4 ; =UNK_021C5734 - ldrh r3, [r2, r3] - strh r3, [r1, #0x0] - ldrh r3, [r0, #0x0] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0x2] - ldrh r3, [r0, #0x2] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x4] - ldrh r3, [r0, #0x2] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0x6] - ldrh r3, [r0, #0x4] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x8] - ldrh r3, [r0, #0x4] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0xa] - ldrh r3, [r0, #0x6] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0xc] - ldrh r3, [r0, #0x6] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0xe] - ldrh r3, [r0, #0x8] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x10] - ldrh r3, [r0, #0x8] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0x12] - ldrh r3, [r0, #0xa] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x14] - ldrh r3, [r0, #0xa] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0x16] - ldrh r3, [r0, #0xc] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x18] - ldrh r3, [r0, #0xc] - lsl r3, r3, #0x18 - lsr r3, r3, #0x17 - ldrh r3, [r2, r3] - strh r3, [r1, #0x1a] - ldrh r3, [r0, #0xe] - lsr r3, r3, #0x8 - lsl r3, r3, #0x1 - ldrh r3, [r2, r3] - strh r3, [r1, #0x1c] - ldrh r0, [r0, #0xe] - lsl r0, r0, #0x18 - lsr r0, r0, #0x17 - ldrh r0, [r2, r0] - strh r0, [r1, #0x1e] - bx lr - .balign 4 -_0201C1A4: .word UNK_021C5734 - - thumb_func_start FUN_0201C1A8 -FUN_0201C1A8: ; 0x0201C1A8 - mov r1, #0x0 - str r1, [r0, #0x2c] - bx lr - .balign 4 - - thumb_func_start FUN_0201C1B0 -FUN_0201C1B0: ; 0x0201C1B0 - push {r3-r5, lr} - sub sp, #0x8 - mov r1, #0x6 - mov r0, #0x0 - lsl r1, r1, #0x8 - bl AllocFromHeap - mov r2, #0x0 - add r5, r0, #0x0 - str r2, [sp, #0x0] - mov r0, #0xe - mov r1, #0x5 - add r3, sp, #0x4 - bl FUN_02006BB0 - add r4, r0, #0x0 - ldr r0, [sp, #0x4] - mov r2, #0x6 - ldr r0, [r0, #0x14] - add r1, r5, #0x0 - lsl r2, r2, #0x8 - bl MIi_CpuCopy32 - add r0, r4, #0x0 - bl FreeToHeap - add r0, r5, #0x0 - add sp, #0x8 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_0201C1EC -FUN_0201C1EC: ; 0x0201C1EC - push {r3-r7, lr} - sub sp, #0x18 - add r4, r0, #0x0 - ldr r0, [r4, #0x2c] - add r7, r3, #0x0 - ldr r5, [r4, #0x4] - cmp r0, #0x0 - bne _0201C202 - bl FUN_0201C1B0 - str r0, [r4, #0x2c] -_0201C202: - mov r0, #0x6 - lsl r0, r0, #0x6 - add r6, r7, #0x0 - mul r6, r0 - add r0, r5, #0x0 - ldr r4, [r4, #0x2c] - bl FUN_0201AB0C - sub r0, r0, #0x3 - lsl r0, r0, #0x13 - mov r1, #0x18 - lsr r2, r0, #0x10 - str r1, [sp, #0x0] - mov r0, #0x20 - str r0, [sp, #0x4] - str r2, [sp, #0x8] - mov r2, #0x0 - str r2, [sp, #0xc] - str r1, [sp, #0x10] - str r0, [sp, #0x14] - add r0, r5, #0x0 - add r1, r4, r6 - add r3, r2, #0x0 - bl FUN_02019658 - add sp, #0x18 - pop {r3-r7, pc} - - thumb_func_start FUN_0201C238 -FUN_0201C238: ; 0x0201C238 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, [r4, #0x2c] - cmp r0, #0x0 - beq _0201C24A - bl FreeToHeap - mov r0, #0x0 - str r0, [r4, #0x2c] -_0201C24A: - pop {r4, pc} diff --git a/arm9/asm/unk_02021590.s b/arm9/asm/unk_02021590.s index d526846f..67d46c65 100644 --- a/arm9/asm/unk_02021590.s +++ b/arm9/asm/unk_02021590.s @@ -309,47 +309,47 @@ _02021798: ; jump table (using 16-bit offset) _020217A0: add r0, r4, r5 add r1, r6, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile b _02021802 _020217AA: add r0, r4, r5 add r1, r6, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, r5 add r1, r6, #0x0 add r0, #0x10 add r1, #0x40 - bl FUN_0201C100 + bl DecompressGlyphTile b _02021802 _020217C0: add r0, r4, r5 add r1, r6, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, r5 add r1, r6, #0x0 add r0, #0x10 add r1, #0x20 - bl FUN_0201C100 + bl DecompressGlyphTile b _02021802 _020217D6: add r0, r4, r5 add r1, r6, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, r5 add r1, r6, #0x0 add r0, #0x10 add r1, #0x20 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, r5 add r1, r6, #0x0 add r0, #0x20 add r1, #0x40 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, r5 add r1, r6, #0x0 add r0, #0x30 add r1, #0x60 - bl FUN_0201C100 + bl DecompressGlyphTile _02021802: ldr r1, [sp, #0x0] ldr r2, [r7, #0x70] @@ -400,50 +400,50 @@ _02021856: add r0, r4, #0x0 add r0, #0x14 add r1, r5, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile b _020218C0 _02021862: add r0, r4, #0x0 add r0, #0x14 add r1, r5, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, #0x0 add r1, r5, #0x0 add r0, #0x24 add r1, #0x40 - bl FUN_0201C100 + bl DecompressGlyphTile b _020218C0 _0202187A: add r0, r4, #0x0 add r0, #0x14 add r1, r5, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, #0x0 add r1, r5, #0x0 add r0, #0x24 add r1, #0x20 - bl FUN_0201C100 + bl DecompressGlyphTile b _020218C0 _02021892: add r0, r4, #0x0 add r0, #0x14 add r1, r5, #0x0 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, #0x0 add r1, r5, #0x0 add r0, #0x24 add r1, #0x20 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, #0x0 add r1, r5, #0x0 add r0, #0x34 add r1, #0x40 - bl FUN_0201C100 + bl DecompressGlyphTile add r0, r4, #0x0 add r1, r5, #0x0 add r0, #0x44 add r1, #0x60 - bl FUN_0201C100 + bl DecompressGlyphTile _020218C0: ldr r2, [r4, #0x70] add r0, r4, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 0053d427..d816d92a 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1161,7 +1161,7 @@ .extern AddTextPrinterParameterized2 .extern AddTextPrinterParameterized3 .extern GenerateFontHalfRowLookupTable -.extern FUN_0201C100 +.extern DecompressGlyphTile .extern FUN_0201C1EC .extern FUN_0201C24C .extern FUN_0201C29C 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; +} diff --git a/include/text.h b/include/text.h index 48c3cbf4..40f4d03a 100644 --- a/include/text.h +++ b/include/text.h @@ -19,9 +19,16 @@ struct TextPrinterTemplate u8 fgColor; u8 bgColor; u8 shadowColor; - u16 unk2; - u8 unk3; - u8 unk4; + union + { + struct + { + u16 unk2; + u8 unk3; + u8 unk4; + }; + u32 Unk20; //todo this can't be right + }; }; struct TextPrinter @@ -40,7 +47,7 @@ struct TextPrinter u8 minLetterSpacing; // 0x20 u8 Unk29; // used to be japanese, not sure about that anymore u16 Unk2A; - u8 padding[4]; + void *Unk2C; }; struct FontInfo @@ -69,5 +76,10 @@ u16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u32 speed, u8 (* void RunTextPrinter(u32 param0, struct TextPrinter *printer); u32 RenderFont(struct TextPrinter *printer); void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor); +void DecompressGlyphTile(const u16 *src, u16 *dst); +void FUN_0201C1A8(struct TextPrinter *printer); +void *FUN_0201C1B0(void); +void FUN_0201C1EC(struct TextPrinter *printer, u32 param1, u32 param2, u32 param3); +void FUN_0201C238(struct TextPrinter *printer); #endif //POKEDIAMOND_TEXT_H |