summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2021-03-12 20:54:37 +0000
committerred031000 <rubenru09@aol.com>2021-03-12 20:54:37 +0000
commitbc398f3c399b5211a8b8ed38702670df654c66db (patch)
treeec88382ebad9f3eebd7926a2cc25cade2c922f15
parent63bcf753d4d57c1585140c7b3eec1aace1e89caf (diff)
finished text.c
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_0201BCBC.s187
-rw-r--r--arm9/asm/unk_02021590.s36
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/src/text.c68
-rw-r--r--include/text.h20
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