summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-08-04 21:00:41 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-08-04 21:00:41 +0200
commitd789398ef7fc5a2955199ac4f87be40b90182405 (patch)
tree366f6dc3938de8222dd941d960777533f0433d46
parent0c2db8de60375ab8c450ea64320feb22431f43aa (diff)
tmp
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_02006D98.s214
-rw-r--r--arm9/global.inc6
-rw-r--r--arm9/src/unk_02006D98_c.c442
4 files changed, 454 insertions, 209 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 25689701..06b32e1f 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -21,6 +21,7 @@ Static arm9
Object overlay_manager.o
Object filesystem.o
Object gf_gfx_loader.o
+ Object unk_02006D98_c.o
Object unk_02006D98.o
Object unk_02008AA4.o
Object unk_02008DEC.o
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s
index 01721a1a..f5256bc8 100644
--- a/arm9/asm/unk_02006D98.s
+++ b/arm9/asm/unk_02006D98.s
@@ -6,226 +6,22 @@
.section .rodata
- .global UNK_020ECBD0
-UNK_020ECBD0: ; 0x020ECBD0
- .byte 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00
- .byte 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00
- .byte 0xA0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00
- .byte 0xA0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00
- .global UNK_020ECC10
-UNK_020ECC10: ; 0x020ECC10
- .byte 0x1E, 0x21, 0x1F, 0x21, 0x20, 0x21, 0x1D, 0x22, 0x1E, 0x22, 0x1F, 0x22, 0x20, 0x22, 0x21, 0x22
- .byte 0x1C, 0x23, 0x1D, 0x23, 0x1E, 0x23, 0x1F, 0x23, 0x20, 0x23, 0x21, 0x23, 0x22, 0x23, 0x1C, 0x24
- .byte 0x1D, 0x24, 0x1E, 0x24, 0x1F, 0x24, 0x20, 0x24, 0x21, 0x24, 0x22, 0x24, 0x1C, 0x25, 0x1D, 0x25
- .byte 0x1E, 0x25, 0x1F, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x1C, 0x26, 0x1D, 0x26, 0x1E, 0x26
- .byte 0x1F, 0x26, 0x20, 0x26, 0x21, 0x26, 0x22, 0x26, 0x1C, 0x27, 0x1D, 0x27, 0x1E, 0x27, 0x1F, 0x27
- .byte 0x20, 0x27, 0x21, 0x27, 0x22, 0x27, 0x1D, 0x28, 0x1E, 0x28, 0x1F, 0x28, 0x20, 0x28, 0x21, 0x28
- .byte 0x1E, 0x29, 0x1F, 0x29, 0x20, 0x29, 0xFF, 0xFF
- .global UNK_020ECC78
-UNK_020ECC78: ; 0x020ECC78
- .byte 0x33, 0x11, 0x34, 0x11, 0x35, 0x11, 0x36, 0x11, 0x32, 0x12, 0x33, 0x12, 0x34, 0x12, 0x35, 0x12
- .byte 0x36, 0x12, 0x37, 0x12, 0x31, 0x13, 0x32, 0x13, 0x33, 0x13, 0x34, 0x13, 0x35, 0x13, 0x36, 0x13
- .byte 0x37, 0x13, 0x38, 0x13, 0x31, 0x14, 0x32, 0x14, 0x33, 0x14, 0x34, 0x14, 0x35, 0x14, 0x36, 0x14
- .byte 0x37, 0x14, 0x38, 0x14, 0x31, 0x15, 0x32, 0x15, 0x33, 0x15, 0x34, 0x15, 0x35, 0x15, 0x36, 0x15
- .byte 0x37, 0x15, 0x38, 0x15, 0x31, 0x16, 0x32, 0x16, 0x33, 0x16, 0x34, 0x16, 0x35, 0x16, 0x36, 0x16
- .byte 0x37, 0x16, 0x38, 0x16, 0x32, 0x17, 0x33, 0x17, 0x34, 0x17, 0x35, 0x17, 0x36, 0x17, 0x37, 0x17
- .byte 0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18, 0xFF, 0xFF
- .global UNK_020ECCE2
-UNK_020ECCE2: ; 0x020ECCE2
- .byte 0x1B, 0x0F, 0x1C, 0x0F, 0x1D, 0x0F, 0x1E, 0x0F, 0x1A, 0x10, 0x1B, 0x10, 0x1C, 0x10, 0x1D, 0x10
- .byte 0x1E, 0x10, 0x1F, 0x10, 0x19, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1C, 0x11, 0x1D, 0x11, 0x1E, 0x11
- .byte 0x1F, 0x11, 0x20, 0x11, 0x19, 0x12, 0x1A, 0x12, 0x1B, 0x12, 0x1C, 0x12, 0x1D, 0x12, 0x1E, 0x12
- .byte 0x1F, 0x12, 0x20, 0x12, 0x19, 0x13, 0x1A, 0x13, 0x1B, 0x13, 0x1C, 0x13, 0x1D, 0x13, 0x1E, 0x13
- .byte 0x1F, 0x13, 0x20, 0x13, 0x19, 0x14, 0x1A, 0x14, 0x1B, 0x14, 0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14
- .byte 0x1F, 0x14, 0x20, 0x14, 0x1A, 0x15, 0x1B, 0x15, 0x1C, 0x15, 0x1D, 0x15, 0x1E, 0x15, 0x1F, 0x15
- .byte 0x1B, 0x16, 0x1C, 0x16, 0x1D, 0x16, 0x1E, 0x16, 0xFF, 0xFF
- .global UNK_020ECD4C
-UNK_020ECD4C: ; 0x020ECD4C
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00
- .byte 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00
- .byte 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00
- .byte 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00
- .byte 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00
- .byte 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00
- .global UNK_020ECDCC
-UNK_020ECDCC: ; 0x020ECDCC
- .byte 0x2B, 0x21, 0x2C, 0x21, 0x2D, 0x21, 0x29, 0x22, 0x2A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x2D, 0x22
- .byte 0x2E, 0x22, 0x2F, 0x22, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x23, 0x2C, 0x23, 0x2D, 0x23
- .byte 0x2E, 0x23, 0x2F, 0x23, 0x30, 0x23, 0x28, 0x24, 0x29, 0x24, 0x2A, 0x24, 0x2B, 0x24, 0x2C, 0x24
- .byte 0x2D, 0x24, 0x2E, 0x24, 0x2F, 0x24, 0x30, 0x24, 0x28, 0x25, 0x29, 0x25, 0x2A, 0x25, 0x2B, 0x25
- .byte 0x2C, 0x25, 0x2D, 0x25, 0x2E, 0x25, 0x2F, 0x25, 0x30, 0x25, 0x28, 0x26, 0x29, 0x26, 0x2A, 0x26
- .byte 0x2B, 0x26, 0x2C, 0x26, 0x2D, 0x26, 0x2E, 0x26, 0x2F, 0x26, 0x30, 0x26, 0x28, 0x27, 0x29, 0x27
- .byte 0x2A, 0x27, 0x2B, 0x27, 0x2C, 0x27, 0x2D, 0x27, 0x2E, 0x27, 0x2F, 0x27, 0x30, 0x27, 0x28, 0x28
- .byte 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x2C, 0x28, 0x2D, 0x28, 0x2E, 0x28, 0x2F, 0x28, 0x30, 0x28
- .byte 0x29, 0x29, 0x2A, 0x29, 0x2B, 0x29, 0x2C, 0x29, 0x2D, 0x29, 0x2E, 0x29, 0x2F, 0x29, 0x2B, 0x2A
- .byte 0x2C, 0x2A, 0x2D, 0x2A, 0xFF, 0xFF, 0x00, 0x00
+
+
+
+
.section .data
- .global UNK_02105AE8
-UNK_02105AE8: ; 0x02105AE8
- .word UNK_020ECCE2
- .word UNK_020ECC78
- .word UNK_020ECC10
- .word UNK_020ECDCC
.text
- thumb_func_start FUN_02006D98
-FUN_02006D98: ; 0x02006D98
- push {r3-r7, lr}
- sub sp, #0x10
- mov r1, #0xba
- lsl r1, r1, #0x2
- add r5, r0, #0x0
- bl AllocFromHeap
- add r4, r0, #0x0
- mov r0, #0xa6
- lsl r0, r0, #0x2
- add r1, r0, #0x0
- add r3, r0, #0x0
- str r5, [r4, r0]
- mov r2, #0x0
- add r1, #0x48
- strb r2, [r4, r1]
- add r1, r0, #0x4
- str r2, [r4, r1]
- mov r1, #0x2
- lsl r1, r1, #0xe
- add r3, #0x8
- str r1, [r4, r3]
- add r3, r0, #0x0
- add r3, #0xc
- str r2, [r4, r3]
- mov r2, #0x80
- add r0, #0x10
- str r2, [r4, r0]
- add r0, r5, #0x0
- bl AllocFromHeap
- mov r1, #0xab
- lsl r1, r1, #0x2
- str r0, [r4, r1]
- add r0, r5, #0x0
- mov r1, #0xc0
- bl AllocFromHeap
- mov r1, #0x2b
- lsl r1, r1, #0x4
- str r0, [r4, r1]
- ldr r1, [r4, r1]
- mov r0, #0x0
- mov r2, #0x4
- bl MIi_CpuClearFast
- add r0, r5, #0x0
- mov r1, #0xc0
- bl AllocFromHeap
- mov r1, #0xad
- lsl r1, r1, #0x2
- str r0, [r4, r1]
- ldr r1, [r4, r1]
- mov r0, #0x0
- mov r2, #0x4
- bl MIi_CpuClearFast
- mov r6, #0x0
- add r5, r4, #0x0
- add r7, r6, #0x0
-_02006E12:
- add r0, r7, #0x0
- add r1, r5, #0x0
- mov r2, #0x98
- bl MIi_CpuClearFast
- add r6, r6, #0x1
- add r5, #0x98
- cmp r6, #0x4
- blt _02006E12
- bl NNS_G2dSetupSoftwareSpriteCamera
- ldr r2, _02006EC8 ; =0x000002E3
- mov r0, #0x0
- strb r0, [r4, r2]
- sub r2, #0x4b
- ldr r2, [r4, r2]
- mov r0, #0x75 ; NARC_POKETOOL_POKEGRA_OTHERPOKE
- mov r1, #0xd3
- bl AllocAndReadWholeNarcMemberByIdPair
- add r1, sp, #0xc
- str r0, [sp, #0x4]
- bl NNS_G2dGetUnpackedCharacterData
- ldr r0, [sp, #0xc]
- mov r1, #0xaf
- ldr r0, [r0, #0x4]
- lsl r1, r1, #0x2
- str r0, [r4, r1]
- ldr r0, [sp, #0xc]
- ldr r2, [r0, #0x8]
- add r0, r1, #0x4
- str r2, [r4, r0]
- ldr r0, [sp, #0xc]
- add r1, #0x8
- ldr r0, [r0, #0xc]
- str r0, [r4, r1]
- ldr r0, [sp, #0xc]
- ldr r0, [r0, #0x14]
- str r0, [sp, #0x8]
- bl FUN_02008A74
- ldr r1, [sp, #0x8]
- mov r0, #0xab
- lsl r0, r0, #0x2
- mov r2, #0x2
- ldrb r1, [r1, #0x0]
- ldr r0, [r4, r0]
- lsl r2, r2, #0xe
- bl MI_CpuFill8
- mov r0, #0x0
- mov r7, #0xab
- ldr r6, _02006ECC ; =0x00005050
- mov r12, r0
- str r0, [sp, #0x0]
- add r3, r0, #0x0
- lsl r7, r7, #0x2
-_02006E86:
- ldr r2, [sp, #0x8]
- ldr r0, [sp, #0x0]
- mov r1, #0x0
- add r2, r2, r0
-_02006E8E:
- ldr r5, [r4, r7]
- ldrb r0, [r2, #0x0]
- add r5, r3, r5
- add r5, r1, r5
- add r1, r1, #0x1
- add r2, r2, #0x1
- strb r0, [r5, r6]
- cmp r1, #0x28
- blt _02006E8E
- ldr r0, [sp, #0x0]
- add r3, #0x80
- add r0, #0x50
- str r0, [sp, #0x0]
- mov r0, r12
- add r0, r0, #0x1
- mov r12, r0
- cmp r0, #0x50
- blt _02006E86
- ldr r0, [sp, #0x4]
- bl FreeToHeap
- ldr r0, _02006ED0 ; =0x000002E1
- mov r1, #0x1
- strb r1, [r4, r0]
- add r0, r0, #0x1
- strb r1, [r4, r0]
- add r0, r4, #0x0
- add sp, #0x10
- pop {r3-r7, pc}
- .balign 4
-_02006EC8: .word 0x000002E3
-_02006ECC: .word 0x00005050
-_02006ED0: .word 0x000002E1
+
thumb_func_start FUN_02006ED4
FUN_02006ED4: ; 0x02006ED4
diff --git a/arm9/global.inc b/arm9/global.inc
index db33a314..d00c06de 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8729,3 +8729,9 @@
.extern wcschr
.extern wcscpy
.extern wmemchr
+.extern UNK_020ECBD0
+.extern UNK_020ECC10
+.extern UNK_020ECC78
+.extern UNK_020ECCE2
+.extern UNK_020ECDCC
+.extern UNK_02105AE8
diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98_c.c
new file mode 100644
index 00000000..f1fb4f34
--- /dev/null
+++ b/arm9/src/unk_02006D98_c.c
@@ -0,0 +1,442 @@
+#include "global.h"
+#include "MI_memory.h"
+#include "NNS_g2d.h"
+#include "filesystem.h"
+#include "heap.h"
+#include "poketool/pokegra/otherpoke.naix"
+#include "registers.h"
+
+struct UnkStruct3 {
+ u32 unk00[8];
+};
+
+struct UnkStruct4{
+ u8 unk0;
+ u8 unk1;
+};
+
+
+
+
+
+
+const struct UnkStruct4 UNK_020ECC78[] = {
+ {0x33, 0x11}, {0x34, 0x11}, {0x35, 0x11}, {0x36, 0x11}, {0x32, 0x12}, {0x33, 0x12}, {0x34, 0x12}, {0x35, 0x12},
+ {0x36, 0x12}, {0x37, 0x12}, {0x31, 0x13}, {0x32, 0x13}, {0x33, 0x13}, {0x34, 0x13}, {0x35, 0x13}, {0x36, 0x13},
+ {0x37, 0x13}, {0x38, 0x13}, {0x31, 0x14}, {0x32, 0x14}, {0x33, 0x14}, {0x34, 0x14}, {0x35, 0x14}, {0x36, 0x14},
+ {0x37, 0x14}, {0x38, 0x14}, {0x31, 0x15}, {0x32, 0x15}, {0x33, 0x15}, {0x34, 0x15}, {0x35, 0x15}, {0x36, 0x15},
+ {0x37, 0x15}, {0x38, 0x15}, {0x31, 0x16}, {0x32, 0x16}, {0x33, 0x16}, {0x34, 0x16}, {0x35, 0x16}, {0x36, 0x16},
+ {0x37, 0x16}, {0x38, 0x16}, {0x32, 0x17}, {0x33, 0x17}, {0x34, 0x17}, {0x35, 0x17}, {0x36, 0x17}, {0x37, 0x17},
+ {0x33, 0x18}, {0x34, 0x18}, {0x35, 0x18}, {0x36, 0x18}, {0xFF, 0xFF},
+};
+
+const struct UnkStruct4 UNK_020ECCE2[] = {
+ {0x1B, 0x0F}, {0x1C, 0x0F}, {0x1D, 0x0F}, {0x1E, 0x0F}, {0x1A, 0x10}, {0x1B, 0x10}, {0x1C, 0x10}, {0x1D, 0x10},
+ {0x1E, 0x10}, {0x1F, 0x10}, {0x19, 0x11}, {0x1A, 0x11}, {0x1B, 0x11}, {0x1C, 0x11}, {0x1D, 0x11}, {0x1E, 0x11},
+ {0x1F, 0x11}, {0x20, 0x11}, {0x19, 0x12}, {0x1A, 0x12}, {0x1B, 0x12}, {0x1C, 0x12}, {0x1D, 0x12}, {0x1E, 0x12},
+ {0x1F, 0x12}, {0x20, 0x12}, {0x19, 0x13}, {0x1A, 0x13}, {0x1B, 0x13}, {0x1C, 0x13}, {0x1D, 0x13}, {0x1E, 0x13},
+ {0x1F, 0x13}, {0x20, 0x13}, {0x19, 0x14}, {0x1A, 0x14}, {0x1B, 0x14}, {0x1C, 0x14}, {0x1D, 0x14}, {0x1E, 0x14},
+ {0x1F, 0x14}, {0x20, 0x14}, {0x1A, 0x15}, {0x1B, 0x15}, {0x1C, 0x15}, {0x1D, 0x15}, {0x1E, 0x15}, {0x1F, 0x15},
+ {0x1B, 0x16}, {0x1C, 0x16}, {0x1D, 0x16}, {0x1E, 0x16}, {0xFF, 0xFF},
+};
+
+
+
+
+const struct UnkStruct4 UNK_020ECC10[] = {
+ {0x1E, 0x21}, {0x1F, 0x21}, {0x20, 0x21}, {0x1D, 0x22}, {0x1E, 0x22}, {0x1F, 0x22}, {0x20, 0x22}, {0x21, 0x22},
+ {0x1C, 0x23}, {0x1D, 0x23}, {0x1E, 0x23}, {0x1F, 0x23}, {0x20, 0x23}, {0x21, 0x23}, {0x22, 0x23}, {0x1C, 0x24},
+ {0x1D, 0x24}, {0x1E, 0x24}, {0x1F, 0x24}, {0x20, 0x24}, {0x21, 0x24}, {0x22, 0x24}, {0x1C, 0x25}, {0x1D, 0x25},
+ {0x1E, 0x25}, {0x1F, 0x25}, {0x20, 0x25}, {0x21, 0x25}, {0x22, 0x25}, {0x1C, 0x26}, {0x1D, 0x26}, {0x1E, 0x26},
+ {0x1F, 0x26}, {0x20, 0x26}, {0x21, 0x26}, {0x22, 0x26}, {0x1C, 0x27}, {0x1D, 0x27}, {0x1E, 0x27}, {0x1F, 0x27},
+ {0x20, 0x27}, {0x21, 0x27}, {0x22, 0x27}, {0x1D, 0x28}, {0x1E, 0x28}, {0x1F, 0x28}, {0x20, 0x28}, {0x21, 0x28},
+ {0x1E, 0x29}, {0x1F, 0x29}, {0x20, 0x29}, {0xFF, 0xFF},
+};
+
+
+const struct UnkStruct4 UNK_020ECD4C[] = {
+ {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00},
+ {0x50, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00},
+ {0x00, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00},
+ {0x50, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00},
+ {0x00, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0xF0, 0x00}, {0x00, 0x00},
+ {0x50, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00}, {0xF0, 0x00}, {0x00, 0x00},
+ {0xA0, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0x00, 0x00}, {0xF0, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00},
+ {0xA0, 0x00}, {0x00, 0x00}, {0x50, 0x00}, {0x00, 0x00}, {0xF0, 0x00}, {0x00, 0x00}, {0xA0, 0x00}, {0x00, 0x00},
+};
+
+
+
+const struct UnkStruct4 UNK_020ECDCC[] = {
+ {0x2B, 0x21}, {0x2C, 0x21}, {0x2D, 0x21}, {0x29, 0x22}, {0x2A, 0x22}, {0x2B, 0x22}, {0x2C, 0x22}, {0x2D, 0x22},
+ {0x2E, 0x22}, {0x2F, 0x22}, {0x28, 0x23}, {0x29, 0x23}, {0x2A, 0x23}, {0x2B, 0x23}, {0x2C, 0x23}, {0x2D, 0x23},
+ {0x2E, 0x23}, {0x2F, 0x23}, {0x30, 0x23}, {0x28, 0x24}, {0x29, 0x24}, {0x2A, 0x24}, {0x2B, 0x24}, {0x2C, 0x24},
+ {0x2D, 0x24}, {0x2E, 0x24}, {0x2F, 0x24}, {0x30, 0x24}, {0x28, 0x25}, {0x29, 0x25}, {0x2A, 0x25}, {0x2B, 0x25},
+ {0x2C, 0x25}, {0x2D, 0x25}, {0x2E, 0x25}, {0x2F, 0x25}, {0x30, 0x25}, {0x28, 0x26}, {0x29, 0x26}, {0x2A, 0x26},
+ {0x2B, 0x26}, {0x2C, 0x26}, {0x2D, 0x26}, {0x2E, 0x26}, {0x2F, 0x26}, {0x30, 0x26}, {0x28, 0x27}, {0x29, 0x27},
+ {0x2A, 0x27}, {0x2B, 0x27}, {0x2C, 0x27}, {0x2D, 0x27}, {0x2E, 0x27}, {0x2F, 0x27}, {0x30, 0x27}, {0x28, 0x28},
+ {0x29, 0x28}, {0x2A, 0x28}, {0x2B, 0x28}, {0x2C, 0x28}, {0x2D, 0x28}, {0x2E, 0x28}, {0x2F, 0x28}, {0x30, 0x28},
+ {0x29, 0x29}, {0x2A, 0x29}, {0x2B, 0x29}, {0x2C, 0x29}, {0x2D, 0x29}, {0x2E, 0x29}, {0x2F, 0x29}, {0x2B, 0x2A},
+ {0x2C, 0x2A}, {0x2D, 0x2A}, {0xFF, 0xFF}
+};
+
+
+// const int UNK_020ECD4C[4][2][4] = {
+// {
+// {0, 0, 0x50, 0x50}, {0x50, 0, 0xA0, 0x50}
+// }, {
+
+// {0, 0x50, 0x50, 0xA0}, {0x50, 0x50, 0xA0, 0xA0}
+
+// }, {
+
+
+// {0, 0xA0, 0x50, 0xF0}, {0x50, 0xA0, 0xA0, 0xF0}
+
+// }, {
+
+// {0xA0, 0, 0xF0, 0x50}, {0xA0, 0x50, 0xF0, 0xA0}
+
+// }
+// };
+
+const int UNK_020ECBD0[4][4] = {
+ {160, 160, 224, 176}, {160, 160, 224, 176}, {160, 176, 224, 192}, {160, 192, 224, 208}
+};
+
+
+
+const struct UnkStruct4 *UNK_02105AE8[] = {
+ UNK_020ECCE2,
+ UNK_020ECC78,
+ UNK_020ECC10,
+ UNK_020ECDCC,
+};
+
+struct UnkStruct2 {
+ u32 unk00_0:1;
+ u32 unk00_1:6;
+ u8 unk04[0x20];
+ s16 unk24;
+ s16 unk26;
+ u32 unk28;
+ s16 unk2C;
+ s16 unk2E;
+ u32 unk30;
+ s16 unk34;
+ s16 unk36;
+ u16 unk38;
+ u16 unk3A;
+ u16 unk3C;
+ u16 unk3E;
+ s16 unk40;
+ s16 unk42;
+ u8 unk44;
+ u8 unk45;
+ u8 unk46;
+ u8 unk47;
+ u8 unk48[0x8];
+ u32 unk50_0:5;
+ u32 unk50_5:5;
+ u32 unk50_a:5;
+ u32 unk50_f:5;
+ u32 unk50_14:5;
+ u32 unk50_19:5;
+ u32 unk50_1E:2;
+ u32 unk54_0:1;
+ u32 unk54_1:1;
+ u32 unk54_2:5;
+ u32 unk54_7:4;
+ u32 unk54_B:1;
+ u8 unk58;
+ u8 unk59;
+ u8 unk5A;
+ u8 unk5B;
+ u8 unk5C[0xC];
+ void (*unk68)(struct UnkStruct2 *, void *);
+ u16 unk6C_0:2;
+ u16 unk6C_2:1;
+ u16 unk6C_3:1;
+ u16 unk6C_4:1;
+ u16 unk6C_5:2;
+ s8 unk6E;
+ u8 unk6F;
+ s16 unk70;
+ s16 unk72;
+ s16 unk74;
+ s16 unk76;
+ u8 unk78[0x20];
+};
+
+
+struct UnkStruct1
+{
+ struct UnkStruct2 unk000[4];
+ u8 unk260[0xc];
+ u32 unk26C;
+ u32 unk270;
+ u32 unk274;
+ u32 unk278;
+ u32 unk27C;
+ u8 unk280[0x18];
+ u32 unk298;
+ u32 unk29C;
+ u32 unk2A0;
+ u32 unk2A4;
+ u32 unk2A8;
+ void *unk2AC;
+ void *unk2B0;
+ void *unk2B4;
+ u32 unk2B8;
+ u32 unk2BC;
+ u32 unk2C0;
+ u32 unk2C4;
+ u8 unk2C8[0x18];
+ u8 unk2E0;
+ u8 unk2E1;
+ u8 unk2E2;
+ u8 unk2E3;
+ u32 unk2E4;
+};
+
+extern void NNS_G2dSetupSoftwareSpriteCamera(void);
+extern void FUN_02008A74(void *);
+
+THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id)
+{
+ struct UnkStruct1 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct1));
+ ptr->unk298 = heap_id;
+ ptr->unk2E0 = 0;
+ ptr->unk29C = 0;
+ ptr->unk2A0 = 0x8000;
+ ptr->unk2A4 = 0;
+ ptr->unk2A8 = 0x80;
+
+ ptr->unk2AC = AllocFromHeap(heap_id, 0x8000);
+
+ ptr->unk2B0 = AllocFromHeap(heap_id, 0xc0);
+ MIi_CpuClearFast(0, ptr->unk2B0, 4);
+
+ ptr->unk2B4 = AllocFromHeap(heap_id, 0xc0);
+ MIi_CpuClearFast(0, ptr->unk2B4, 4);
+
+ for (int i = 0; i < 4; i++)
+ {
+ MIi_CpuClearFast(0, &ptr->unk000[i], sizeof(struct UnkStruct2));
+ }
+
+ NNS_G2dSetupSoftwareSpriteCamera();
+ ptr->unk2E3 = 0;
+
+ u8 *st8;
+ void *st4 = AllocAndReadWholeNarcMemberByIdPair(
+ NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0211_NCGR, ptr->unk298);
+ NNSG2dCharacterData *stc;
+ NNS_G2dGetUnpackedCharacterData(st4, &stc);
+
+ ptr->unk2BC = stc->pixelFmt;
+ ptr->unk2C0 = stc->mapingType;
+ ptr->unk2C4 = stc->characterFmt;
+ st8 = stc->pRawData;
+
+ FUN_02008A74(st8);
+ MI_CpuFill8(ptr->unk2AC, *st8, 0x8000);
+
+ for (int i = 0; i < 0x50; i++)
+ {
+ for (int j = 0; j < 0x28; j++)
+ {
+ ((u8 *)ptr->unk2AC)[0x5050 + i * 0x80 + j] = st8[i * 0x50 + j];
+ }
+ }
+
+ FreeToHeap(st4);
+ ptr->unk2E1 = 1;
+ ptr->unk2E2 = 1;
+
+ return ptr;
+}
+
+
+extern void FUN_020082A8(struct UnkStruct1 *);
+extern void FUN_020086F4(struct UnkStruct1 *);
+extern void NNS_G3dGeFlushBuffer();
+extern void FUN_02007F48(struct UnkStruct2 *);
+
+
+
+
+// extern struct UnkStruct3 UNK_020ECD4C[4];
+extern void NNS_G2dDrawSpriteFast(s16 param0, s16 param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8);
+
+
+// THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
+// s32 arg3;
+// s32 arg4;
+
+// FUN_020082A8(param0);
+// FUN_020086F4(param0);
+
+// NNS_G3dGeFlushBuffer();
+
+// reg_G3_MTX_PUSH = 0;
+
+// reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29);
+
+// for (int st18 = 0; st18 < 4; st18++) {
+// if (param0->unk000[st18].unk00_0 == 0 || param0->unk000[st18].unk54_0 != 0 || param0->unk000[st18].unk54_B != 0) {
+// continue;
+// }
+
+// if (param0->unk000[st18].unk68 != NULL) {
+// param0->unk000[st18].unk68(&param0->unk000[st18], &param0->unk000[st18].unk24);
+// }
+
+// NNS_G3dGeFlushBuffer();
+
+// if (param0->unk2E3 != 1) {
+// reg_G3_MTX_IDENTITY = 0;
+// }
+
+// FUN_02007F48(&param0->unk000[st18]);
+
+// u32 shift;
+// if (param0->unk274 == 2) {
+// shift = 1;
+// } else {
+// shift = 0;
+// }
+
+// reg_G3_TEXPLTT_BASE = (param0->unk2A4 + st18*0x20)>>(4-shift);
+
+// u32 r1 = param0->unk000[st18].unk28<<0xc;
+// u32 r0 = (param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc;
+// u32 r3 = (param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc;
+
+// reg_G3_MTX_TRANS = r3;
+// reg_G3_MTX_TRANS = r0;
+// reg_G3_MTX_TRANS = r1;
+
+
+// s32 idx = ((s32)param0->unk000[st18].unk38)>>4;
+// G3_RotX(FX_SinCosTable_[idx*2], FX_SinCosTable_[idx*2+1]);
+
+// s32 idy = ((s32)param0->unk000[st18].unk3A)>>4;
+// G3_RotY(FX_SinCosTable_[idy*2], FX_SinCosTable_[idy*2+1]);
+
+// s32 idz = ((s32)param0->unk000[st18].unk3C)>>4;
+// G3_RotZ(FX_SinCosTable_[idz*2], FX_SinCosTable_[idz*2+1]);
+
+
+// r1 = -(param0->unk000[st18].unk28<<0xc);
+// r0 = -((param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc);
+// r3 = -((param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc);
+
+// reg_G3_MTX_TRANS = r3;
+// reg_G3_MTX_TRANS = r0;
+// reg_G3_MTX_TRANS = r1;
+
+// reg_G3_DIF_AMB =
+// ((u16)(param0->unk000[st18].unk50_0 | (param0->unk000[st18].unk50_5<<5) | (param0->unk000[st18].unk50_a<<10))) |
+// (((u16)(param0->unk000[st18].unk50_f | (param0->unk000[st18].unk50_14<<5) | (param0->unk000[st18].unk50_19<<10)))<<16) |
+// 0x8000;
+
+
+// reg_G3_SPE_EMI = 0x4210;
+
+// {
+// u32 r1 = param0->unk000[st18].unk00_1;
+// u32 r0 = param0->unk000[st18].unk54_2;
+// reg_G3_POLYGON_ATTR = 0xc0 | (r1<<24) | (r0<<16);
+// }
+
+// if (param0->unk000[st18].unk54_1 != 0) {
+// u32 r6 = param0->unk000[st18].unk44 + UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4];
+// u32 r12 = param0->unk000[st18].unk46;
+// u32 r1 = param0->unk000[st18].unk45 + UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4 + 1];
+// u32 r7 = param0->unk000[st18].unk47;
+// u32 r0 = r12 + r6;
+
+
+// NNS_G2dDrawSpriteFast(
+// param0->unk000[st18].unk24-40 + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C,
+// param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6E,
+// param0->unk000[st18].unk28 + param0->unk000[st18].unk30,
+// r12,
+// r7,
+// r6,
+// r1,
+// r0,
+// r7 + r1
+// );
+
+// } else {
+// arg3 = (param0->unk000[st18].unk34*80)>>8;
+// arg4 = (param0->unk000[st18].unk36*80)>>8;
+
+// NNS_G2dDrawSpriteFast(
+// param0->unk000[st18].unk24-(arg3/2)+param0->unk000[st18].unk2C,
+// param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6E,
+// param0->unk000[st18].unk28 + param0->unk000[st18].unk30,
+// arg3,
+// arg4,
+// UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4],
+// UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4+1],
+// UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4+2],
+// UNK_020ECD4C[st18].unk00[param0->unk000[st18].unk5B*4+3]
+// );
+// }
+
+
+// if (param0->unk000[st18].unk6C_0 == 0 || param0->unk000[st18].unk6C_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) {
+// continue;
+// }
+
+// if (param0->unk2E3 != 1) {
+// reg_G3_MTX_IDENTITY = 0;
+// }
+
+// u32 shift2;
+// if (param0->unk274 == 2) {
+// shift2 = 1;
+// } else {
+// shift2 = 0;
+// }
+// reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C_0+3)<<5))>>(4-shift2);
+
+
+
+// if (param0->unk000[st18].unk6C_4 != 0) {
+// arg3 = (param0->unk000[st18].unk34*64)>>8;
+// arg4 = (param0->unk000[st18].unk36*16)>>8;
+// } else {
+// arg3 = 64;
+// arg4 = 16;
+// }
+
+// if (param0->unk000[st18].unk6C_2 != 0) {
+// param0->unk000[st18].unk70 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk74;
+// }
+
+// if (param0->unk000[st18].unk6C_3 != 0) {
+// param0->unk000[st18].unk72 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk76;
+// }
+
+
+// NNS_G2dDrawSpriteFast(
+// param0->unk000[st18].unk70 - (arg3/2),
+// param0->unk000[st18].unk72 - (arg4/2),
+// 0xFFFFFC18,
+// arg3,
+// arg4,
+// UNK_020ECBD0[param0->unk000[st18].unk6C_5*4],
+// UNK_020ECBD0[param0->unk000[st18].unk6C_5*4 + 1],
+// UNK_020ECBD0[param0->unk000[st18].unk6C_5*4 + 2],
+// UNK_020ECBD0[param0->unk000[st18].unk6C_5*4 + 3]
+// );
+
+// }
+
+
+// reg_G3_MTX_POP = 1;
+// }