summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/unk_02002C14.s432
-rw-r--r--arm9/src/unk_02002C14.c275
2 files changed, 275 insertions, 432 deletions
diff --git a/arm9/asm/unk_02002C14.s b/arm9/asm/unk_02002C14.s
deleted file mode 100644
index 60d27fed..00000000
--- a/arm9/asm/unk_02002C14.s
+++ /dev/null
@@ -1,432 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .section .bss
-
- .global UNK_02106FC8
-UNK_02106FC8: ; 0x02106FC8
- .space 0x4
-
- .global UNK_02106FCC
-UNK_02106FCC: ; 0x02106FCC
- .space 0xa4
-
- .section .rodata
-
- .global UNK_020ECB54
-UNK_020ECB54: ; 0x020ECB54
- .short 0x0000, 0x0000
- .short 0x0001, 0x0000
- .short 0x0002, 0x0000
- .short 0x0003, 0x0000
-
- .global UNK_020ECB64
-UNK_020ECB64: ; 0x020ECB64
- .byte 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02
- .byte 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02
- .byte 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02
- .byte 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .text
-
- thumb_func_start FUN_02002C14
-FUN_02002C14: ; 0x02002C14
- push {r4, lr}
- ldr r0, _02002C44 ; =UNK_02106FCC
- ldr r4, _02002C48 ; =UNK_02106FC8
- mov r1, #0x0
- str r0, [r4, #0x0]
- add r2, r1, #0x0
- add r0, r1, #0x0
-_02002C22:
- ldr r3, [r4, #0x0]
- add r1, r1, #0x1
- add r3, r3, r2
- add r3, #0x84
- str r0, [r3, #0x0]
- ldr r3, [r4, #0x0]
- add r3, r3, r2
- add r3, #0x94
- add r2, r2, #0x4
- str r0, [r3, #0x0]
- cmp r1, #0x4
- blo _02002C22
- ldr r0, _02002C4C ; =UNK_020ECB64
- bl SetFontsPointer
- pop {r4, pc}
- nop
-_02002C44: .word UNK_02106FCC
-_02002C48: .word UNK_02106FC8
-_02002C4C: .word UNK_020ECB64
-
- thumb_func_start FUN_02002C50
-FUN_02002C50: ; 0x02002C50
- push {r3-r4, lr}
- sub sp, #0x4
- str r1, [sp, #0x0]
- lsl r4, r0, #0x2
- ldr r1, _02002C78 ; =UNK_020ECB54
- ldr r3, _02002C7C ; =UNK_020ECB54 + 2
- ldrh r1, [r1, r4]
- ldrh r3, [r3, r4]
- mov r0, #0xe
- mov r2, #0x1
- bl FUN_02021590
- ldr r1, _02002C80 ; =UNK_02106FC8
- ldr r1, [r1, #0x0]
- add r1, r1, r4
- add r1, #0x94
- str r0, [r1, #0x0]
- add sp, #0x4
- pop {r3-r4, pc}
- nop
-_02002C78: .word UNK_020ECB54
-_02002C7C: .word UNK_020ECB54 + 2
-_02002C80: .word UNK_02106FC8
-
- thumb_func_start FUN_02002C84
-FUN_02002C84: ; 0x02002C84
- push {r3-r5, lr}
- add r4, r0, #0x0
- add r5, r1, #0x0
- cmp r4, #0x4
- blt _02002C92
- bl GF_AssertFail
-_02002C92:
- ldr r0, _02002CBC ; =UNK_02106FC8
- lsl r4, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002CA6
- bl GF_AssertFail
-_02002CA6:
- ldr r0, _02002CBC ; =UNK_02106FC8
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- add r2, r5, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020215E0
- pop {r3-r5, pc}
- nop
-_02002CBC: .word UNK_02106FC8
-
- thumb_func_start FUN_02002CC0
-FUN_02002CC0: ; 0x02002CC0
- push {r4, lr}
- add r4, r0, #0x0
- cmp r4, #0x4
- blt _02002CCC
- bl GF_AssertFail
-_02002CCC:
- ldr r0, _02002CF4 ; =UNK_02106FC8
- lsl r4, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002CE0
- bl GF_AssertFail
-_02002CE0:
- ldr r0, _02002CF4 ; =UNK_02106FC8
- mov r1, #0x1
- ldr r0, [r0, #0x0]
- mov r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020215E0
- pop {r4, pc}
- .balign 4
-_02002CF4: .word UNK_02106FC8
-
- thumb_func_start FUN_02002CF8
-FUN_02002CF8: ; 0x02002CF8
- push {r3-r7, lr}
- add r4, r0, #0x0
- cmp r4, #0x4
- blt _02002D04
- bl GF_AssertFail
-_02002D04:
- ldr r0, _02002D8C ; =UNK_02106FC8
- lsl r6, r4, #0x2
- ldr r7, [r0, #0x0]
- add r0, r7, r6
- add r0, #0x84
- ldr r0, [r0, #0x0]
- mov r12, r0
- cmp r0, #0x0
- beq _02002D68
- ldr r2, _02002D90 ; =UNK_020ECB54
- mov r1, #0x0
- ldrh r0, [r2, r6]
- add r3, r7, #0x0
-_02002D1E:
- cmp r1, r4
- beq _02002D3E
- ldrh r5, [r2, #0x0]
- cmp r5, r0
- bne _02002D3E
- add r5, r3, #0x0
- add r5, #0x94
- ldr r5, [r5, #0x0]
- cmp r5, #0x0
- beq _02002D3E
- lsl r0, r1, #0x2
- add r2, r7, r0
- add r2, #0x84
- mov r0, r12
- str r0, [r2, #0x0]
- b _02002D48
-_02002D3E:
- add r1, r1, #0x1
- add r2, r2, #0x4
- add r3, r3, #0x4
- cmp r1, #0x4
- blo _02002D1E
-_02002D48:
- cmp r1, #0x4
- bne _02002D68
- ldr r0, _02002D8C ; =UNK_02106FC8
- lsl r5, r4, #0x2
- ldr r0, [r0, #0x0]
- add r0, r0, r5
- add r0, #0x84
- ldr r0, [r0, #0x0]
- bl FreeToHeap
- ldr r0, _02002D8C ; =UNK_02106FC8
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r5
- add r0, #0x84
- str r1, [r0, #0x0]
-_02002D68:
- ldr r0, _02002D8C ; =UNK_02106FC8
- ldr r0, [r0, #0x0]
- add r0, r0, r6
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _02002D88
- bl FUN_020215C8
- ldr r0, _02002D8C ; =UNK_02106FC8
- mov r2, #0x0
- ldr r1, [r0, #0x0]
- lsl r0, r4, #0x2
- add r0, r1, r0
- add r0, #0x94
- str r2, [r0, #0x0]
-_02002D88:
- pop {r3-r7, pc}
- nop
-_02002D8C: .word UNK_02106FC8
-_02002D90: .word UNK_020ECB54
-
- thumb_func_start FUN_02002D94
-FUN_02002D94: ; 0x02002D94
- push {r3, lr}
- ldr r2, _02002DAC ; =UNK_02106FC8
- lsl r0, r0, #0x2
- ldr r2, [r2, #0x0]
- add r0, r2, r0
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_02021750
- ldr r0, _02002DAC ; =UNK_02106FC8
- ldr r0, [r0, #0x0]
- pop {r3, pc}
- .balign 4
-_02002DAC: .word UNK_02106FC8
-
- thumb_func_start FontFunc
-FontFunc: ; 0x02002DB0
- push {r4, lr}
- add r3, r1, #0x0
- add r3, #0x1c
- ldrb r2, [r3, #0x1]
- lsl r2, r2, #0x18
- lsr r2, r2, #0x1f
- bne _02002DD8
- ldrb r2, [r3, #0x0]
- mov r4, #0xf
- lsl r0, r0, #0x18
- bic r2, r4
- lsr r4, r0, #0x18
- mov r0, #0xf
- and r0, r4
- orr r0, r2
- strb r0, [r3, #0x0]
- ldrb r2, [r3, #0x1]
- mov r0, #0x80
- orr r0, r2
- strb r0, [r3, #0x1]
-_02002DD8:
- add r0, r1, #0x0
- bl RenderText
- pop {r4, pc}
-
- thumb_func_start FUN_02002DE0
-FUN_02002DE0: ; 0x02002DE0
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002E10 ; =UNK_02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002DFA
- bl GF_AssertFail
-_02002DFA:
- ldr r0, _02002E10 ; =UNK_02106FC8
- add r1, r5, #0x0
- ldr r0, [r0, #0x0]
- add r2, r6, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020218D8
- pop {r4-r6, pc}
- nop
-_02002E10: .word UNK_02106FC8
-
- thumb_func_start FUN_02002E14
-FUN_02002E14: ; 0x02002E14
- push {r4-r6, lr}
- lsl r4, r0, #0x2
- ldr r0, _02002E48 ; =UNK_02106FC8
- add r5, r1, #0x0
- ldr r0, [r0, #0x0]
- add r6, r2, #0x0
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _02002E2E
- bl GF_AssertFail
-_02002E2E:
- add r0, r5, #0x0
- bl String_c_str
- add r1, r0, #0x0
- ldr r0, _02002E48 ; =UNK_02106FC8
- add r2, r6, #0x0
- ldr r0, [r0, #0x0]
- add r0, r0, r4
- add r0, #0x94
- ldr r0, [r0, #0x0]
- bl FUN_020218D8
- pop {r4-r6, pc}
- .balign 4
-_02002E48: .word UNK_02106FC8
-
- thumb_func_start GetFontAttribute
-GetFontAttribute: ; 0x02002E4C
- mov r2, #0x0
- cmp r1, #0x7
- bhi _02002EAC
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02002E5E: ; jump table (using 16-bit offset)
- .short _02002E6E - _02002E5E - 2; case 0
- .short _02002E76 - _02002E5E - 2; case 1
- .short _02002E7E - _02002E5E - 2; case 2
- .short _02002E86 - _02002E5E - 2; case 3
- .short _02002E8E - _02002E5E - 2; case 4
- .short _02002E96 - _02002E5E - 2; case 5
- .short _02002E9E - _02002E5E - 2; case 6
- .short _02002EA6 - _02002E5E - 2; case 7
-_02002E6E:
- lsl r1, r0, #0x3
- ldr r0, _02002EB0 ; =UNK_020ECB64
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E76:
- lsl r1, r0, #0x3
- ldr r0, _02002EB4 ; =UNK_020ECB64 + 1
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E7E:
- lsl r1, r0, #0x3
- ldr r0, _02002EB8 ; =UNK_020ECB64 + 2
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E86:
- lsl r1, r0, #0x3
- ldr r0, _02002EBC ; =UNK_020ECB64 + 3
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E8E:
- lsl r1, r0, #0x3
- ldr r0, _02002EC0 ; =UNK_020ECB64 + 4
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E96:
- lsl r1, r0, #0x3
- ldr r0, _02002EC4 ; =UNK_020ECB64 + 5
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002E9E:
- lsl r1, r0, #0x3
- ldr r0, _02002EC8 ; =UNK_020ECB64 + 6
- ldrb r2, [r0, r1]
- b _02002EAC
-_02002EA6:
- lsl r1, r0, #0x3
- ldr r0, _02002ECC ; =UNK_020ECB64 + 7
- ldrb r2, [r0, r1]
-_02002EAC:
- add r0, r2, #0x0
- bx lr
- .balign 4
-_02002EB0: .word UNK_020ECB64
-_02002EB4: .word UNK_020ECB64 + 1
-_02002EB8: .word UNK_020ECB64 + 2
-_02002EBC: .word UNK_020ECB64 + 3
-_02002EC0: .word UNK_020ECB64 + 4
-_02002EC4: .word UNK_020ECB64 + 5
-_02002EC8: .word UNK_020ECB64 + 6
-_02002ECC: .word UNK_020ECB64 + 7
-
- thumb_func_start FUN_02002ED0
-FUN_02002ED0: ; 0x02002ED0
- push {r4, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x20
- str r0, [sp, #0x0]
- add r3, r1, #0x0
- str r2, [sp, #0x4]
- mov r0, #0xe
- mov r1, #0x6
- add r2, r4, #0x0
- bl GfGfxLoader_GXLoadPal
- add sp, #0x8
- pop {r4, pc}
-
- thumb_func_start FUN_02002EEC
-FUN_02002EEC: ; 0x02002EEC
- push {r4, lr}
- sub sp, #0x8
- add r4, r0, #0x0
- mov r0, #0x20
- str r0, [sp, #0x0]
- add r3, r1, #0x0
- str r2, [sp, #0x4]
- mov r0, #0xe
- mov r1, #0x7
- add r2, r4, #0x0
- bl GfGfxLoader_GXLoadPal
- add sp, #0x8
- pop {r4, pc}
diff --git a/arm9/src/unk_02002C14.c b/arm9/src/unk_02002C14.c
new file mode 100644
index 00000000..8cbdfe74
--- /dev/null
+++ b/arm9/src/unk_02002C14.c
@@ -0,0 +1,275 @@
+#include "global.h"
+#include "render_text.h"
+#include "string16.h"
+#include "text.h"
+#include "gf_gfx_loader.h"
+
+struct UnkStruct *UNK_02106FC8;
+
+struct UnkStruct
+{
+ u8 unk00[0x84];
+ void *unk84[4];
+ void *unk94[4];
+};
+
+struct UnkStruct UNK_02106FCC;
+
+const u16 UNK_020ECB54[] = { 0, 0, 1, 0, 2, 0, 3, 0 };
+
+const struct FontInfo UNK_020ECB64[5] = {
+ { 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02 },
+ { 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02 },
+ { 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02 },
+ { 0x0B, 0x10, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x02 },
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+};
+
+THUMB_FUNC void FUN_02002C14()
+{
+ UNK_02106FC8 = &UNK_02106FCC;
+
+ for (u32 i = 0; i < 4; i++)
+ {
+ UNK_02106FC8->unk84[i] = NULL;
+ UNK_02106FC8->unk94[i] = NULL;
+ }
+
+ SetFontsPointer(&UNK_020ECB64[0]);
+}
+
+extern u32 FUN_02021590(u32, u16, u32, u16, u32);
+
+THUMB_FUNC void FUN_02002C50(u32 param0, u32 param1)
+{
+ UNK_02106FC8->unk94[param0] =
+ FUN_02021590(14, UNK_020ECB54[param0 * 2], 1, UNK_020ECB54[param0 * 2 + 1], param1);
+}
+
+extern void FUN_020215E0(u32, u32, u32);
+
+THUMB_FUNC void FUN_02002C84(s32 param0, u32 param1)
+{
+ GF_ASSERT(param0 < 4);
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ FUN_020215E0(UNK_02106FC8->unk94[param0], 0, param1);
+}
+
+THUMB_FUNC void FUN_02002CC0(s32 param0)
+{
+ GF_ASSERT(param0 < 4);
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ FUN_020215E0(UNK_02106FC8->unk94[param0], 1, 0);
+}
+
+extern void FUN_020215C8(u32 param0);
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02002CF8(s32 param0)
+{
+ GF_ASSERT(param0 < 4);
+
+ if (UNK_02106FC8->unk84[param0] != NULL)
+ {
+ u32 i;
+ for (i = 0; i < 4; i++)
+ {
+ if (i == param0)
+ {
+ continue;
+ }
+
+ if (UNK_020ECB54[i * 2] != UNK_020ECB54[param0 * 2])
+ {
+ continue;
+ }
+
+ if (UNK_02106FC8->unk84[i] == NULL)
+ {
+ continue;
+ }
+
+ UNK_02106FC8->unk84[i] = UNK_02106FC8->unk84[param0];
+ break;
+ }
+
+ if (i == 4)
+ {
+ FreeToHeap(UNK_02106FC8->unk84[param0]);
+ UNK_02106FC8->unk84[param0] = NULL;
+ }
+ }
+
+ if (UNK_02106FC8->unk94[param0] != NULL)
+ {
+ FUN_020215C8(UNK_02106FC8->unk94[param0]);
+ UNK_02106FC8->unk94[param0] = NULL;
+ }
+}
+#else
+asm void FUN_02002CF8(s32 param0)
+{
+ // clang-format off
+ push {r3-r7, lr}
+ add r4, r0, #0x0
+ cmp r4, #0x4
+ blt _02002D04
+ bl GF_AssertFail
+_02002D04:
+ ldr r0, =UNK_02106FC8
+ lsl r6, r4, #0x2
+ ldr r7, [r0, #0x0]
+ add r0, r7, r6
+ add r0, #0x84
+ ldr r0, [r0, #0x0]
+ mov r12, r0
+ cmp r0, #0x0
+ beq _02002D68
+ ldr r2, =UNK_020ECB54
+ mov r1, #0x0
+ ldrh r0, [r2, r6]
+ add r3, r7, #0x0
+_02002D1E:
+ cmp r1, r4
+ beq _02002D3E
+ ldrh r5, [r2, #0x0]
+ cmp r5, r0
+ bne _02002D3E
+ add r5, r3, #0x0
+ add r5, #0x94
+ ldr r5, [r5, #0x0]
+ cmp r5, #0x0
+ beq _02002D3E
+ lsl r0, r1, #0x2
+ add r2, r7, r0
+ add r2, #0x84
+ mov r0, r12
+ str r0, [r2, #0x0]
+ b _02002D48
+_02002D3E:
+ add r1, r1, #0x1
+ add r2, r2, #0x4
+ add r3, r3, #0x4
+ cmp r1, #0x4
+ blo _02002D1E
+_02002D48:
+ cmp r1, #0x4
+ bne _02002D68
+ ldr r0, =UNK_02106FC8
+ lsl r5, r4, #0x2
+ ldr r0, [r0, #0x0]
+ add r0, r0, r5
+ add r0, #0x84
+ ldr r0, [r0, #0x0]
+ bl FreeToHeap
+ ldr r0, =UNK_02106FC8
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ add r0, r0, r5
+ add r0, #0x84
+ str r1, [r0, #0x0]
+_02002D68:
+ ldr r0, =UNK_02106FC8
+ ldr r0, [r0, #0x0]
+ add r0, r0, r6
+ add r0, #0x94
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _02002D88
+ bl FUN_020215C8
+ ldr r0, =UNK_02106FC8
+ mov r2, #0x0
+ ldr r1, [r0, #0x0]
+ lsl r0, r4, #0x2
+ add r0, r1, r0
+ add r0, #0x94
+ str r2, [r0, #0x0]
+_02002D88:
+ pop {r3-r7, pc}
+ // clang-format on
+}
+#endif
+
+extern void FUN_02021750(void *, u32);
+THUMB_FUNC struct UnkStruct *FUN_02002D94(u32 param0, u32 param1)
+{
+ FUN_02021750(UNK_02106FC8->unk94[param0], param1);
+
+ return UNK_02106FC8;
+}
+
+THUMB_FUNC u32 FontFunc(u32 fontId, struct TextPrinter *printer)
+{
+ struct TextPrinterSubStruct *subStruct =
+ (struct TextPrinterSubStruct *)(&printer->subStructFields);
+
+ if (subStruct->hasGlyphIdBeenSet == 0)
+ {
+ subStruct->glyphId = fontId;
+ subStruct->hasGlyphIdBeenSet = 1;
+ }
+
+ return RenderText(printer);
+}
+
+extern u32 FUN_020218D8(void *, u16 *str, u32);
+
+THUMB_FUNC u32 FUN_02002DE0(u32 param0, u16 *str, u32 param2)
+{
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ FUN_020218D8(UNK_02106FC8->unk94[param0], str, param2);
+}
+
+THUMB_FUNC u32 FUN_02002E14(u32 param0, struct String *str, u32 param2)
+{
+ GF_ASSERT(UNK_02106FC8->unk94[param0] != NULL);
+
+ FUN_020218D8(UNK_02106FC8->unk94[param0], String_c_str(str), param2);
+}
+
+THUMB_FUNC s32 GetFontAttribute(u8 fontId, s32 attr)
+{
+ u8 ret = 0;
+ switch (attr)
+ {
+ case 0:
+ ret = UNK_020ECB64[fontId].maxLetterWidth;
+ break;
+ case 1:
+ ret = UNK_020ECB64[fontId].maxLetterHeight;
+ break;
+ case 2:
+ ret = UNK_020ECB64[fontId].letterSpacing;
+ break;
+ case 3:
+ ret = UNK_020ECB64[fontId].lineSpacing;
+ break;
+ case 4:
+ ret = UNK_020ECB64[fontId].unk;
+ break;
+ case 5:
+ ret = UNK_020ECB64[fontId].fgColor;
+ break;
+ case 6:
+ ret = UNK_020ECB64[fontId].bgColor;
+ break;
+ case 7:
+ ret = UNK_020ECB64[fontId].shadowColor;
+ break;
+ }
+
+ return ret;
+}
+
+
+THUMB_FUNC void FUN_02002ED0(u32 layer, u32 baseAddr, u32 heap_id) {
+ GfGfxLoader_GXLoadPal(14, 6, layer, baseAddr, 0x20, heap_id);
+}
+
+
+THUMB_FUNC void FUN_02002EEC(u32 layer, u32 baseAddr, u32 heap_id) {
+ GfGfxLoader_GXLoadPal(14, 7, layer, baseAddr, 0x20, heap_id);
+}