summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2021-11-24 13:34:26 -0500
committerGitHub <noreply@github.com>2021-11-24 13:34:26 -0500
commit7febf4e555bb26843df42692449a88e872385c48 (patch)
treeb4de9f3a5318203bf8482319fb65c8d522063db1
parentda8960d5f6ad7eed4594522681b3794853aca4e4 (diff)
parent23306c397c31ae0cffd2fee3b81206ddfec33ecd (diff)
Merge pull request #460 from remicalixte/unk_02006D98
decompile unk_02006D98.s
-rw-r--r--arm9/asm/unk_02006D98.s4066
-rw-r--r--arm9/lib/NitroSDK/include/GX_g3.h36
-rw-r--r--arm9/lib/NitroSDK/include/GX_g3imm.h60
-rw-r--r--arm9/lib/NitroSDK/include/registers.h150
-rw-r--r--arm9/lib/libnns/include/NNS_g2d.h2
-rw-r--r--arm9/modules/63/include/mod63_021DB450.h13
-rw-r--r--arm9/modules/63/src/mod63_021DB450.c33
-rw-r--r--arm9/src/render_window.c7
-rw-r--r--arm9/src/unk_02006D98.c1719
-rw-r--r--include/unk_02006D98.h192
10 files changed, 2178 insertions, 4100 deletions
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s
deleted file mode 100644
index 01721a1a..00000000
--- a/arm9/asm/unk_02006D98.s
+++ /dev/null
@@ -1,4066 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern UNK_020ECD4C
- .extern FX_SinCosTable_
-
- .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
- push {r3-r7, lr}
- sub sp, #0x20
- add r5, r0, #0x0
- bl FUN_020082A8
- add r0, r5, #0x0
- bl FUN_020086F4
- bl NNS_G3dGeFlushBuffer
- mov r6, #0x9f
- mov r0, #0x0
- ldr r4, _02007250 ; =0x04000444
- lsl r6, r6, #0x2
- str r0, [r4, #0x0]
- str r0, [sp, #0x18]
- add r0, r6, #0x0
- sub r0, #0xc
- ldr r1, [r5, r0]
- add r3, r6, #0x0
- ldr r2, [r5, r6]
- add r0, r6, #0x0
- sub r3, #0x8
- add r6, #0x20
- ldr r3, [r5, r3]
- ldr r6, [r5, r6]
- sub r0, #0x10
- ldr r0, [r5, r0]
- lsr r6, r6, #0x3
- lsl r3, r3, #0x1a
- orr r6, r3
- mov r3, #0x1
- lsl r3, r3, #0x1e
- lsl r0, r0, #0x14
- orr r3, r6
- lsl r1, r1, #0x17
- orr r0, r3
- lsl r2, r2, #0x1d
- orr r0, r1
- orr r0, r2
- str r0, [r4, #0x64]
- ldr r0, [sp, #0x18]
- add r4, r5, #0x0
- str r0, [sp, #0x14]
- ldr r0, _02007254 ; =UNK_020ECD4C
- str r0, [sp, #0x1c]
-_02006F30:
- ldr r0, [r4, #0x0]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- beq _02006F46
- ldr r0, [r4, #0x54]
- lsl r1, r0, #0x1f
- lsr r1, r1, #0x1f
- bne _02006F46
- lsl r0, r0, #0x14
- lsr r0, r0, #0x1f
- beq _02006F48
-_02006F46:
- b _020072BC
-_02006F48:
- ldr r2, [r4, #0x68]
- cmp r2, #0x0
- beq _02006F56
- add r1, r4, #0x0
- add r0, r4, #0x0
- add r1, #0x24
- blx r2
-_02006F56:
- bl NNS_G3dGeFlushBuffer
- ldr r0, _02007258 ; =0x000002E3
- ldrb r0, [r5, r0]
- cmp r0, #0x1
- beq _02006F68
- ldr r0, _0200725C ; =0x04000454
- mov r1, #0x0
- str r1, [r0, #0x0]
-_02006F68:
- add r0, r4, #0x0
- bl FUN_02007F48
- mov r0, #0x9d
- lsl r0, r0, #0x2
- ldr r0, [r5, r0]
- cmp r0, #0x2
- bne _02006F7C
- mov r0, #0x1
- b _02006F7E
-_02006F7C:
- mov r0, #0x0
-_02006F7E:
- mov r1, #0xa9
- lsl r1, r1, #0x2
- ldr r2, [r5, r1]
- ldr r1, [sp, #0x14]
- add r2, r2, r1
- mov r1, #0x4
- sub r0, r1, r0
- add r1, r2, #0x0
- lsr r1, r0
- ldr r0, _02007260 ; =0x040004AC
- str r1, [r0, #0x0]
- ldr r0, [r4, #0x28]
- lsl r1, r0, #0xc
- mov r0, #0x26
- ldrsh r2, [r4, r0]
- mov r0, #0x42
- ldrsh r0, [r4, r0]
- add r0, r2, r0
- mov r2, #0x24
- ldrsh r3, [r4, r2]
- mov r2, #0x40
- ldrsh r2, [r4, r2]
- lsl r0, r0, #0xc
- add r2, r3, r2
- lsl r3, r2, #0xc
- ldr r2, _02007264 ; =0x04000470
- str r3, [r2, #0x0]
- str r0, [r2, #0x0]
- add r0, r2, #0x0
- str r1, [r0, #0x0]
- ldrh r0, [r4, #0x38]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _02007268 ; =FX_SinCosTable_
- add r2, r0, r1
- ldrsh r0, [r0, r1]
- mov r1, #0x2
- ldrsh r1, [r2, r1]
- bl G3_RotX
- ldrh r0, [r4, #0x3a]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _02007268 ; =FX_SinCosTable_
- add r2, r0, r1
- ldrsh r0, [r0, r1]
- mov r1, #0x2
- ldrsh r1, [r2, r1]
- bl G3_RotY
- ldrh r0, [r4, #0x3c]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _02007268 ; =FX_SinCosTable_
- add r2, r0, r1
- ldrsh r0, [r0, r1]
- mov r1, #0x2
- ldrsh r1, [r2, r1]
- bl G3_RotZ
- ldr r0, [r4, #0x28]
- lsl r0, r0, #0xc
- neg r1, r0
- mov r0, #0x26
- ldrsh r2, [r4, r0]
- mov r0, #0x42
- ldrsh r0, [r4, r0]
- add r0, r2, r0
- mov r2, #0x24
- ldrsh r3, [r4, r2]
- mov r2, #0x40
- ldrsh r2, [r4, r2]
- lsl r0, r0, #0xc
- neg r0, r0
- add r2, r3, r2
- lsl r2, r2, #0xc
- neg r3, r2
- ldr r2, _02007264 ; =0x04000470
- str r3, [r2, #0x0]
- str r0, [r2, #0x0]
- add r0, r2, #0x0
- str r1, [r0, #0x0]
- ldr r3, [r4, #0x50]
- lsl r0, r3, #0x11
- lsr r0, r0, #0x1b
- lsl r2, r3, #0x16
- lsl r1, r0, #0xa
- lsl r0, r3, #0x1b
- lsr r2, r2, #0x1b
- lsr r0, r0, #0x1b
- lsl r2, r2, #0x5
- orr r0, r2
- orr r0, r1
- lsl r0, r0, #0x10
- lsr r2, r0, #0x10
- lsl r0, r3, #0x2
- lsr r0, r0, #0x1b
- lsl r1, r0, #0xa
- lsl r0, r3, #0xc
- lsl r3, r3, #0x7
- lsr r3, r3, #0x1b
- lsr r0, r0, #0x1b
- lsl r3, r3, #0x5
- orr r0, r3
- orr r0, r1
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x10
- add r1, r2, #0x0
- orr r1, r0
- mov r0, #0x2
- lsl r0, r0, #0xe
- orr r1, r0
- ldr r0, _0200726C ; =0x040004C0
- str r1, [r0, #0x0]
- ldr r1, _02007270 ; =0x00004210
- add r0, r0, #0x4
- str r1, [r0, #0x0]
- ldr r1, [r4, #0x0]
- ldr r0, [r4, #0x54]
- lsl r1, r1, #0x19
- lsl r0, r0, #0x19
- lsr r1, r1, #0x1a
- lsr r0, r0, #0x1b
- lsl r2, r1, #0x18
- mov r1, #0xc0
- lsl r0, r0, #0x10
- orr r1, r2
- orr r1, r0
- ldr r0, _02007274 ; =0x040004A4
- str r1, [r0, #0x0]
- ldr r0, [r4, #0x54]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1f
- beq _02007104
- add r0, r4, #0x0
- add r0, #0x5b
- ldrb r0, [r0, #0x0]
- add r2, r4, #0x0
- add r2, #0x44
- lsl r1, r0, #0x4
- ldr r0, [sp, #0x1c]
- ldrb r3, [r2, #0x0]
- add r0, r0, r1
- ldr r2, [sp, #0x1c]
- ldr r0, [r0, #0x4]
- ldr r1, [r2, r1]
- add r6, r3, r1
- add r1, r4, #0x0
- add r1, #0x46
- ldrb r1, [r1, #0x0]
- mov r12, r1
- add r1, r4, #0x0
- add r1, #0x45
- ldrb r2, [r1, #0x0]
- add r1, r2, r0
- add r0, r4, #0x0
- add r0, #0x47
- ldrb r7, [r0, #0x0]
- mov r0, r12
- add r0, r0, r6
- str r7, [sp, #0x0]
- str r6, [sp, #0x4]
- str r1, [sp, #0x8]
- str r0, [sp, #0xc]
- add r0, r7, r1
- str r0, [sp, #0x10]
- mov r1, #0x24
- ldrsh r1, [r4, r1]
- mov r0, #0x2c
- ldrsh r0, [r4, r0]
- sub r1, #0x28
- add r1, r1, r3
- add r0, r0, r1
- mov r3, #0x26
- ldrsh r3, [r4, r3]
- mov r1, #0x2e
- lsl r0, r0, #0x10
- sub r3, #0x28
- add r2, r3, r2
- ldrsh r1, [r4, r1]
- ldr r3, [r4, #0x28]
- asr r0, r0, #0x10
- add r2, r1, r2
- mov r1, #0x6e
- ldrsb r1, [r4, r1]
- sub r1, r2, r1
- ldr r2, [r4, #0x30]
- lsl r1, r1, #0x10
- add r2, r3, r2
- asr r1, r1, #0x10
- mov r3, r12
- bl NNS_G2dDrawSpriteFast
- b _02007174
-_02007104:
- mov r0, #0x34
- ldrsh r1, [r4, r0]
- mov r0, #0x50
- ldr r2, [sp, #0x1c]
- mul r0, r1
- asr r3, r0, #0x8
- mov r0, #0x36
- ldrsh r1, [r4, r0]
- mov r0, #0x50
- ldr r6, [sp, #0x1c]
- mul r0, r1
- asr r1, r0, #0x8
- add r0, r4, #0x0
- add r0, #0x5b
- ldrb r0, [r0, #0x0]
- lsl r0, r0, #0x4
- str r1, [sp, #0x0]
- add r2, r2, r0
- ldr r0, [r6, r0]
- lsr r6, r1, #0x1f
- str r0, [sp, #0x4]
- ldr r0, [r2, #0x4]
- add r6, r1, r6
- str r0, [sp, #0x8]
- ldr r0, [r2, #0x8]
- asr r1, r6, #0x1
- str r0, [sp, #0xc]
- ldr r0, [r2, #0xc]
- str r0, [sp, #0x10]
- mov r0, #0x24
- ldrsh r2, [r4, r0]
- lsr r0, r3, #0x1f
- add r0, r3, r0
- asr r0, r0, #0x1
- sub r2, r2, r0
- mov r0, #0x2c
- ldrsh r0, [r4, r0]
- ldr r6, [r4, #0x28]
- add r0, r2, r0
- mov r2, #0x26
- ldrsh r2, [r4, r2]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- sub r2, r2, r1
- mov r1, #0x2e
- ldrsh r1, [r4, r1]
- add r2, r2, r1
- mov r1, #0x6e
- ldrsb r1, [r4, r1]
- sub r1, r2, r1
- ldr r2, [r4, #0x30]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add r2, r6, r2
- bl NNS_G2dDrawSpriteFast
-_02007174:
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r1, r0, #0x1e
- lsr r1, r1, #0x1e
- beq _0200719A
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1e
- beq _0200719A
- ldr r0, [r4, #0x54]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1f
- bne _0200719A
- mov r0, #0xb9
- lsl r0, r0, #0x2
- ldr r1, [r5, r0]
- mov r0, #0x1
- tst r0, r1
- beq _0200719C
-_0200719A:
- b _020072BC
-_0200719C:
- ldr r0, _02007258 ; =0x000002E3
- ldrb r0, [r5, r0]
- cmp r0, #0x1
- beq _020071AA
- ldr r0, _0200725C ; =0x04000454
- mov r1, #0x0
- str r1, [r0, #0x0]
-_020071AA:
- mov r0, #0x9d
- lsl r0, r0, #0x2
- ldr r0, [r5, r0]
- cmp r0, #0x2
- bne _020071B8
- mov r1, #0x1
- b _020071BA
-_020071B8:
- mov r1, #0x0
-_020071BA:
- add r2, r4, #0x0
- add r2, #0x6c
- ldrh r2, [r2, #0x0]
- mov r0, #0xa9
- lsl r0, r0, #0x2
- lsl r2, r2, #0x1e
- lsr r2, r2, #0x1e
- add r2, r2, #0x3
- ldr r0, [r5, r0]
- lsl r2, r2, #0x5
- add r2, r0, r2
- mov r0, #0x4
- sub r0, r0, r1
- add r1, r2, #0x0
- lsr r1, r0
- ldr r0, _02007260 ; =0x040004AC
- str r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- beq _020071FA
- mov r0, #0x34
- ldrsh r0, [r4, r0]
- lsl r0, r0, #0x6
- asr r3, r0, #0x8
- mov r0, #0x36
- ldrsh r0, [r4, r0]
- lsl r0, r0, #0x4
- asr r1, r0, #0x8
- b _020071FE
-_020071FA:
- mov r3, #0x40
- mov r1, #0x10
-_020071FE:
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x1f
- beq _02007220
- mov r0, #0x74
- ldrsh r2, [r4, r0]
- mov r0, #0x24
- mov r6, #0x2c
- ldrsh r0, [r4, r0]
- ldrsh r6, [r4, r6]
- add r0, r0, r6
- add r2, r2, r0
- add r0, r4, #0x0
- add r0, #0x70
- strh r2, [r0, #0x0]
-_02007220:
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1f
- beq _02007242
- mov r0, #0x76
- ldrsh r2, [r4, r0]
- mov r0, #0x26
- mov r6, #0x2e
- ldrsh r0, [r4, r0]
- ldrsh r6, [r4, r6]
- add r0, r0, r6
- add r2, r2, r0
- add r0, r4, #0x0
- add r0, #0x72
- strh r2, [r0, #0x0]
-_02007242:
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- ldr r2, _02007278 ; =UNK_020ECBD0
- ldr r6, _02007278 ; =UNK_020ECBD0
- b _0200727C
- nop
-_02007250: .word 0x04000444
-_02007254: .word UNK_020ECD4C
-_02007258: .word 0x000002E3
-_0200725C: .word 0x04000454
-_02007260: .word 0x040004AC
-_02007264: .word 0x04000470
-_02007268: .word FX_SinCosTable_
-_0200726C: .word 0x040004C0
-_02007270: .word 0x00004210
-_02007274: .word 0x040004A4
-_02007278: .word UNK_020ECBD0
-_0200727C:
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1e
- lsl r0, r0, #0x4
- str r1, [sp, #0x0]
- add r2, r2, r0
- ldr r0, [r6, r0]
- lsr r6, r1, #0x1f
- str r0, [sp, #0x4]
- ldr r0, [r2, #0x4]
- add r6, r1, r6
- str r0, [sp, #0x8]
- ldr r0, [r2, #0x8]
- asr r1, r6, #0x1
- str r0, [sp, #0xc]
- ldr r0, [r2, #0xc]
- str r0, [sp, #0x10]
- mov r0, #0x70
- ldrsh r2, [r4, r0]
- lsr r0, r3, #0x1f
- add r0, r3, r0
- asr r0, r0, #0x1
- sub r0, r2, r0
- mov r2, #0x72
- ldrsh r2, [r4, r2]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- sub r1, r2, r1
- lsl r1, r1, #0x10
- ldr r2, _020072E0 ; =0xFFFFFC18
- asr r1, r1, #0x10
- bl NNS_G2dDrawSpriteFast
-_020072BC:
- ldr r0, [sp, #0x14]
- add r4, #0x98
- add r0, #0x20
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x1c]
- add r0, #0x20
- str r0, [sp, #0x1c]
- ldr r0, [sp, #0x18]
- add r0, r0, #0x1
- str r0, [sp, #0x18]
- cmp r0, #0x4
- bge _020072D6
- b _02006F30
-_020072D6:
- ldr r0, _020072E4 ; =0x04000448
- mov r1, #0x1
- str r1, [r0, #0x0]
- add sp, #0x20
- pop {r3-r7, pc}
- .balign 4
-_020072E0: .word 0xFFFFFC18
-_020072E4: .word 0x04000448
-
- thumb_func_start FUN_020072E8
-FUN_020072E8: ; 0x020072E8
- push {r4, lr}
- add r4, r0, #0x0
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r0, [r4, r0]
- bl FreeToHeap
- mov r0, #0x2b
- lsl r0, r0, #0x4
- ldr r0, [r4, r0]
- bl FreeToHeap
- mov r0, #0xad
- lsl r0, r0, #0x2
- ldr r0, [r4, r0]
- bl FreeToHeap
- add r0, r4, #0x0
- bl FreeToHeap
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02007314
-FUN_02007314: ; 0x02007314
- push {r3-r4}
- add r1, r0, #0x0
- mov r3, #0x0
- add r1, #0x59
- strb r3, [r1, #0x0]
- add r1, r3, #0x0
-_02007320:
- add r2, r0, r3
- add r2, #0x5c
- add r3, r3, #0x1
- strb r1, [r2, #0x0]
- cmp r3, #0xa
- blt _02007320
- add r2, r0, #0x0
- add r2, #0x59
- ldrb r2, [r2, #0x0]
- lsl r2, r2, #0x1
- add r3, r0, r2
- mov r2, #0x84
- ldrsb r4, [r3, r2]
- add r3, r2, #0x0
- sub r3, #0x85
- cmp r4, r3
- bne _0200734A
- add r0, #0x5b
- strb r1, [r0, #0x0]
- pop {r3-r4}
- bx lr
-_0200734A:
- add r1, r0, #0x0
- mov r3, #0x1
- add r1, #0x58
- strb r3, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x59
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1
- add r1, r0, r1
- ldrsb r2, [r1, r2]
- add r1, r0, #0x0
- add r1, #0x5b
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x59
- ldrb r1, [r1, #0x0]
- lsl r1, r1, #0x1
- add r1, r0, r1
- add r1, #0x85
- ldrb r1, [r1, #0x0]
- add r0, #0x5a
- strb r1, [r0, #0x0]
- pop {r3-r4}
- bx lr
- .balign 4
-
- thumb_func_start FUN_0200737C
-FUN_0200737C: ; 0x0200737C
- add r2, r0, #0x0
- ldr r3, _0200738C ; =MI_CpuCopy8
- add r2, #0x84
- add r0, r1, #0x0
- add r1, r2, #0x0
- mov r2, #0x14
- bx r3
- nop
-_0200738C: .word MI_CpuCopy8
-
- thumb_func_start FUN_02007390
-FUN_02007390: ; 0x02007390
- add r0, #0x58
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- beq _0200739C
- mov r0, #0x1
- bx lr
-_0200739C:
- mov r0, #0x0
- bx lr
-
- thumb_func_start FUN_020073A0
-FUN_020073A0: ; 0x020073A0
- push {r3-r7, lr}
- sub sp, #0x18
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r7, r2, #0x0
- str r3, [sp, #0x14]
- mov r4, #0x0
-_020073AE:
- ldr r1, [r0, #0x0]
- lsl r1, r1, #0x1f
- lsr r1, r1, #0x1f
- beq _020073BE
- add r4, r4, #0x1
- add r0, #0x98
- cmp r4, #0x4
- blt _020073AE
-_020073BE:
- cmp r4, #0x4
- bne _020073C6
- bl GF_AssertFail
-_020073C6:
- ldr r0, [sp, #0x30]
- ldr r3, [sp, #0x14]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x34]
- add r1, r6, #0x0
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x38]
- str r4, [sp, #0x8]
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x3c]
- add r2, r7, #0x0
- str r0, [sp, #0x10]
- add r0, r5, #0x0
- bl FUN_020073E8
- add sp, #0x18
- pop {r3-r7, pc}
-
- thumb_func_start FUN_020073E8
-FUN_020073E8: ; 0x020073E8
- push {r4-r7, lr}
- sub sp, #0xc
- str r1, [sp, #0x8]
- ldr r1, [sp, #0x28]
- add r4, r0, #0x0
- mov r0, #0x98
- add r6, r1, #0x0
- mul r6, r0
- ldr r0, [r4, r6]
- str r2, [sp, #0x0]
- lsl r0, r0, #0x1f
- str r3, [sp, #0x4]
- lsr r0, r0, #0x1f
- beq _02007408
- bl GF_AssertFail
-_02007408:
- add r5, r4, r6
- mov r0, #0x0
- add r1, r5, #0x0
- mov r2, #0x98
- bl MIi_CpuClearFast
- ldr r1, [r4, r6]
- mov r0, #0x1
- bic r1, r0
- mov r0, #0x1
- orr r0, r1
- str r0, [r4, r6]
- ldr r1, [r4, r6]
- mov r0, #0x80
- orr r0, r1
- str r0, [r4, r6]
- mov r0, #0x80
- ldr r1, [r4, r6]
- add r0, #0x80
- orr r0, r1
- str r0, [r4, r6]
- add r2, r5, #0x0
- ldr r0, [r4, r6]
- mov r1, #0x7e
- bic r0, r1
- ldr r1, [sp, #0x24]
- add r7, r2, #0x4
- lsl r1, r1, #0x1a
- lsr r1, r1, #0x19
- orr r0, r1
- str r0, [r4, r6]
- ldr r0, [sp, #0x8]
- mov r12, r0
- mov r3, r12
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- add r7, r2, #0x0
- ldr r3, [sp, #0x8]
- add r7, #0x14
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- str r3, [sp, #0x8]
- ldmia r3!, {r0-r1}
- stmia r7!, {r0-r1}
- ldr r0, [sp, #0x0]
- ldr r1, [sp, #0x4]
- lsl r0, r0, #0x10
- asr r0, r0, #0x10
- lsl r1, r1, #0x10
- asr r7, r1, #0x10
- strh r0, [r2, #0x24]
- str r3, [sp, #0x8]
- ldr r1, [sp, #0x20]
- strh r7, [r2, #0x26]
- str r1, [r2, #0x28]
- mov r1, #0x80
- add r1, #0x80
- strh r1, [r2, #0x34]
- strh r1, [r2, #0x36]
- ldr r1, [r5, #0x54]
- mov r3, #0x7c
- bic r1, r3
- mov r3, #0x7c
- orr r1, r3
- str r1, [r5, #0x54]
- ldr r1, [r5, #0x50]
- mov r3, #0x1f
- bic r1, r3
- mov r3, #0x1f
- orr r3, r1
- ldr r1, _02007520 ; =0xFFFFFC1F
- and r1, r3
- mov r3, #0x1f
- lsl r3, r3, #0x5
- orr r3, r1
- ldr r1, _02007524 ; =0xFFFF83FF
- and r1, r3
- mov r3, #0x1f
- lsl r3, r3, #0xa
- orr r3, r1
- ldr r1, _02007528 ; =0xFFF07FFF
- and r1, r3
- mov r3, #0x80
- lsl r3, r3, #0xc
- orr r3, r1
- ldr r1, _0200752C ; =0xFE0FFFFF
- and r1, r3
- mov r3, #0x80
- lsl r3, r3, #0x11
- orr r3, r1
- ldr r1, _02007530 ; =0xC1FFFFFF
- and r1, r3
- mov r3, #0x80
- lsl r3, r3, #0x16
- orr r1, r3
- str r1, [r5, #0x50]
- ldr r1, [sp, #0x30]
- str r1, [r2, #0x68]
- add r1, r2, #0x0
- add r1, #0x70
- strh r0, [r1, #0x0]
- add r2, #0x72
- add r0, r5, #0x0
- strh r7, [r2, #0x0]
- add r0, #0x6c
- ldrh r1, [r0, #0x0]
- mov r0, #0x4
- orr r1, r0
- add r0, r5, #0x0
- add r0, #0x6c
- strh r1, [r0, #0x0]
- add r0, r5, #0x0
- add r0, #0x6c
- ldrh r1, [r0, #0x0]
- mov r0, #0x8
- orr r1, r0
- add r0, r5, #0x0
- add r0, #0x6c
- strh r1, [r0, #0x0]
- add r0, r5, #0x0
- add r0, #0x6c
- ldrh r1, [r0, #0x0]
- mov r0, #0x10
- add r5, #0x6c
- orr r0, r1
- strh r0, [r5, #0x0]
- ldr r0, [sp, #0x2c]
- cmp r0, #0x0
- beq _02007518
- add r1, r4, r6
- add r1, #0x84
- mov r2, #0x14
- bl MI_CpuCopy8
-_02007518:
- add r0, r4, r6
- add sp, #0xc
- pop {r4-r7, pc}
- nop
-_02007520: .word 0xFFFFFC1F
-_02007524: .word 0xFFFF83FF
-_02007528: .word 0xFFF07FFF
-_0200752C: .word 0xFE0FFFFF
-_02007530: .word 0xC1FFFFFF
-
- thumb_func_start FUN_02007534
-FUN_02007534: ; 0x02007534
- ldr r2, [r0, #0x0]
- mov r1, #0x1
- bic r2, r1
- str r2, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007540
-FUN_02007540: ; 0x02007540
- push {r3-r5, lr}
- add r5, r0, #0x0
- mov r4, #0x0
-_02007546:
- add r0, r5, #0x0
- bl FUN_02007534
- add r4, r4, #0x1
- add r5, #0x98
- cmp r4, #0x4
- blt _02007546
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start FUN_02007558
-FUN_02007558: ; 0x02007558
- cmp r1, #0x2e
- bls _0200755E
- b _02007800
-_0200755E:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_0200756A: ; jump table (using 16-bit offset)
- .short _020075C8 - _0200756A - 2; case 0
- .short _020075CC - _0200756A - 2; case 1
- .short _020075D0 - _0200756A - 2; case 2
- .short _020075D4 - _0200756A - 2; case 3
- .short _020075D8 - _0200756A - 2; case 4
- .short _020075DC - _0200756A - 2; case 5
- .short _020075E0 - _0200756A - 2; case 6
- .short _020075F0 - _0200756A - 2; case 7
- .short _020075F4 - _0200756A - 2; case 8
- .short _020075F8 - _0200756A - 2; case 9
- .short _020075FC - _0200756A - 2; case 10
- .short _02007602 - _0200756A - 2; case 11
- .short _02007608 - _0200756A - 2; case 12
- .short _0200760C - _0200756A - 2; case 13
- .short _02007610 - _0200756A - 2; case 14
- .short _02007620 - _0200756A - 2; case 15
- .short _02007626 - _0200756A - 2; case 16
- .short _0200762C - _0200756A - 2; case 17
- .short _02007632 - _0200756A - 2; case 18
- .short _02007638 - _0200756A - 2; case 19
- .short _0200763E - _0200756A - 2; case 20
- .short _02007644 - _0200756A - 2; case 21
- .short _0200764A - _0200756A - 2; case 22
- .short _02007650 - _0200756A - 2; case 23
- .short _02007660 - _0200756A - 2; case 24
- .short _02007670 - _0200756A - 2; case 25
- .short _02007680 - _0200756A - 2; case 26
- .short _02007690 - _0200756A - 2; case 27
- .short _020076A0 - _0200756A - 2; case 28
- .short _020076B0 - _0200756A - 2; case 29
- .short _020076C0 - _0200756A - 2; case 30
- .short _020076DA - _0200756A - 2; case 31
- .short _020076E8 - _0200756A - 2; case 32
- .short _020076FA - _0200756A - 2; case 33
- .short _0200770C - _0200756A - 2; case 34
- .short _02007712 - _0200756A - 2; case 35
- .short _0200772A - _0200756A - 2; case 36
- .short _02007742 - _0200756A - 2; case 37
- .short _02007752 - _0200756A - 2; case 38
- .short _02007800 - _0200756A - 2; case 39
- .short _02007758 - _0200756A - 2; case 40
- .short _02007770 - _0200756A - 2; case 41
- .short _02007776 - _0200756A - 2; case 42
- .short _0200779A - _0200756A - 2; case 43
- .short _020077B4 - _0200756A - 2; case 44
- .short _020077CE - _0200756A - 2; case 45
- .short _020077E8 - _0200756A - 2; case 46
-_020075C8:
- strh r2, [r0, #0x24]
- bx lr
-_020075CC:
- strh r2, [r0, #0x26]
- bx lr
-_020075D0:
- str r2, [r0, #0x28]
- bx lr
-_020075D4:
- strh r2, [r0, #0x2c]
- bx lr
-_020075D8:
- strh r2, [r0, #0x2e]
- bx lr
-_020075DC:
- str r2, [r0, #0x30]
- bx lr
-_020075E0:
- ldr r3, [r0, #0x54]
- mov r1, #0x1
- bic r3, r1
- mov r1, #0x1
- and r1, r2
- orr r1, r3
- str r1, [r0, #0x54]
- bx lr
-_020075F0:
- strh r2, [r0, #0x38]
- bx lr
-_020075F4:
- strh r2, [r0, #0x3a]
- bx lr
-_020075F8:
- strh r2, [r0, #0x3c]
- bx lr
-_020075FC:
- add r0, #0x40
- strh r2, [r0, #0x0]
- bx lr
-_02007602:
- add r0, #0x42
- strh r2, [r0, #0x0]
- bx lr
-_02007608:
- strh r2, [r0, #0x34]
- bx lr
-_0200760C:
- strh r2, [r0, #0x36]
- bx lr
-_02007610:
- ldr r3, [r0, #0x54]
- mov r1, #0x2
- bic r3, r1
- lsl r1, r2, #0x1f
- lsr r1, r1, #0x1e
- orr r1, r3
- str r1, [r0, #0x54]
- bx lr
-_02007620:
- add r0, #0x44
- strb r2, [r0, #0x0]
- bx lr
-_02007626:
- add r0, #0x45
- strb r2, [r0, #0x0]
- bx lr
-_0200762C:
- add r0, #0x46
- strb r2, [r0, #0x0]
- bx lr
-_02007632:
- add r0, #0x47
- strb r2, [r0, #0x0]
- bx lr
-_02007638:
- add r0, #0x70
- strh r2, [r0, #0x0]
- bx lr
-_0200763E:
- add r0, #0x72
- strh r2, [r0, #0x0]
- bx lr
-_02007644:
- add r0, #0x74
- strh r2, [r0, #0x0]
- bx lr
-_0200764A:
- add r0, #0x76
- strh r2, [r0, #0x0]
- bx lr
-_02007650:
- ldr r3, [r0, #0x54]
- mov r1, #0x7c
- bic r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0x19
- orr r1, r3
- str r1, [r0, #0x54]
- bx lr
-_02007660:
- ldr r3, [r0, #0x50]
- mov r1, #0x1f
- bic r3, r1
- mov r1, #0x1f
- and r1, r2
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_02007670:
- ldr r3, [r0, #0x50]
- ldr r1, _02007804 ; =0xFFFFFC1F
- and r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0x16
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_02007680:
- ldr r3, [r0, #0x50]
- ldr r1, _02007808 ; =0xFFFF83FF
- and r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0x11
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_02007690:
- ldr r3, [r0, #0x50]
- ldr r1, _0200780C ; =0xFFF07FFF
- and r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0xc
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_020076A0:
- ldr r3, [r0, #0x50]
- ldr r1, _02007810 ; =0xFE0FFFFF
- and r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0x7
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_020076B0:
- ldr r3, [r0, #0x50]
- ldr r1, _02007814 ; =0xC1FFFFFF
- and r3, r1
- lsl r1, r2, #0x1b
- lsr r1, r1, #0x2
- orr r1, r3
- str r1, [r0, #0x50]
- bx lr
-_020076C0:
- ldr r3, [r0, #0x54]
- ldr r1, _02007818 ; =0xFFFFEFFF
- and r3, r1
- lsl r1, r2, #0x1f
- lsr r1, r1, #0x13
- orr r1, r3
- str r1, [r0, #0x54]
- mov r1, #0x1
- ldr r2, [r0, #0x0]
- lsl r1, r1, #0x8
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_020076DA:
- str r2, [r0, #0x4c]
- mov r1, #0x1
- ldr r2, [r0, #0x0]
- lsl r1, r1, #0x8
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_020076E8:
- add r1, r0, #0x0
- add r1, #0x48
- strb r2, [r1, #0x0]
- mov r1, #0x1
- ldr r2, [r0, #0x0]
- lsl r1, r1, #0x8
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_020076FA:
- add r1, r0, #0x0
- add r1, #0x49
- strb r2, [r1, #0x0]
- mov r1, #0x1
- ldr r2, [r0, #0x0]
- lsl r1, r1, #0x8
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_0200770C:
- add r0, #0x4a
- strb r2, [r0, #0x0]
- bx lr
-_02007712:
- ldr r3, [r0, #0x54]
- ldr r1, _0200781C ; =0xFFFFFDFF
- and r3, r1
- lsl r1, r2, #0x1f
- lsr r1, r1, #0x16
- orr r1, r3
- str r1, [r0, #0x54]
- ldr r2, [r0, #0x0]
- mov r1, #0x80
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_0200772A:
- ldr r3, [r0, #0x54]
- ldr r1, _02007820 ; =0xFFFFFBFF
- and r3, r1
- lsl r1, r2, #0x1f
- lsr r1, r1, #0x15
- orr r1, r3
- str r1, [r0, #0x54]
- ldr r2, [r0, #0x0]
- mov r1, #0x80
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_02007742:
- ldr r3, [r0, #0x54]
- ldr r1, _02007824 ; =0xFFFFF7FF
- and r3, r1
- lsl r1, r2, #0x1f
- lsr r1, r1, #0x14
- orr r1, r3
- str r1, [r0, #0x54]
- bx lr
-_02007752:
- add r0, #0x5b
- strb r2, [r0, #0x0]
- bx lr
-_02007758:
- ldr r3, [r0, #0x54]
- ldr r1, _02007828 ; =0xFFFE1FFF
- and r3, r1
- lsl r1, r2, #0x1c
- lsr r1, r1, #0xf
- orr r1, r3
- str r1, [r0, #0x54]
- ldr r2, [r0, #0x0]
- mov r1, #0x80
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_02007770:
- add r0, #0x6e
- strb r2, [r0, #0x0]
- bx lr
-_02007776:
- add r1, r0, #0x0
- add r1, #0x6c
- ldrh r3, [r1, #0x0]
- mov r1, #0x3
- bic r3, r1
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- mov r2, #0x3
- and r1, r2
- orr r3, r1
- add r1, r0, #0x0
- add r1, #0x6c
- strh r3, [r1, #0x0]
- ldr r1, [r0, #0x0]
- add r2, #0xfd
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
-_0200779A:
- add r1, r0, #0x0
- add r1, #0x6c
- ldrh r3, [r1, #0x0]
- mov r1, #0x4
- add r0, #0x6c
- bic r3, r1
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- lsr r1, r1, #0x1d
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-_020077B4:
- add r1, r0, #0x0
- add r1, #0x6c
- ldrh r3, [r1, #0x0]
- mov r1, #0x8
- add r0, #0x6c
- bic r3, r1
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- lsr r1, r1, #0x1c
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-_020077CE:
- add r1, r0, #0x0
- add r1, #0x6c
- ldrh r3, [r1, #0x0]
- mov r1, #0x10
- add r0, #0x6c
- bic r3, r1
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1f
- lsr r1, r1, #0x1b
- orr r1, r3
- strh r1, [r0, #0x0]
- bx lr
-_020077E8:
- add r1, r0, #0x0
- add r1, #0x6c
- ldrh r3, [r1, #0x0]
- mov r1, #0x60
- add r0, #0x6c
- bic r3, r1
- lsl r1, r2, #0x10
- lsr r1, r1, #0x10
- lsl r1, r1, #0x1e
- lsr r1, r1, #0x19
- orr r1, r3
- strh r1, [r0, #0x0]
-_02007800:
- bx lr
- nop
-_02007804: .word 0xFFFFFC1F
-_02007808: .word 0xFFFF83FF
-_0200780C: .word 0xFFF07FFF
-_02007810: .word 0xFE0FFFFF
-_02007814: .word 0xC1FFFFFF
-_02007818: .word 0xFFFFEFFF
-_0200781C: .word 0xFFFFFDFF
-_02007820: .word 0xFFFFFBFF
-_02007824: .word 0xFFFFF7FF
-_02007828: .word 0xFFFE1FFF
-
- thumb_func_start FUN_0200782C
-FUN_0200782C: ; 0x0200782C
- push {r3, lr}
- cmp r1, #0x2e
- bls _02007834
- b _020079D6
-_02007834:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_02007840: ; jump table (using 16-bit offset)
- .short _0200789E - _02007840 - 2; case 0
- .short _020078A4 - _02007840 - 2; case 1
- .short _020078AA - _02007840 - 2; case 2
- .short _020078AE - _02007840 - 2; case 3
- .short _020078B4 - _02007840 - 2; case 4
- .short _020078BA - _02007840 - 2; case 5
- .short _020078BE - _02007840 - 2; case 6
- .short _020078C6 - _02007840 - 2; case 7
- .short _020078CA - _02007840 - 2; case 8
- .short _020078CE - _02007840 - 2; case 9
- .short _020078D2 - _02007840 - 2; case 10
- .short _020078D8 - _02007840 - 2; case 11
- .short _020078DE - _02007840 - 2; case 12
- .short _020078E4 - _02007840 - 2; case 13
- .short _020078EA - _02007840 - 2; case 14
- .short _020078F2 - _02007840 - 2; case 15
- .short _020078F8 - _02007840 - 2; case 16
- .short _020078FE - _02007840 - 2; case 17
- .short _02007904 - _02007840 - 2; case 18
- .short _0200790A - _02007840 - 2; case 19
- .short _02007910 - _02007840 - 2; case 20
- .short _02007916 - _02007840 - 2; case 21
- .short _0200791C - _02007840 - 2; case 22
- .short _02007922 - _02007840 - 2; case 23
- .short _0200792A - _02007840 - 2; case 24
- .short _02007932 - _02007840 - 2; case 25
- .short _0200793A - _02007840 - 2; case 26
- .short _02007942 - _02007840 - 2; case 27
- .short _0200794A - _02007840 - 2; case 28
- .short _02007952 - _02007840 - 2; case 29
- .short _0200795A - _02007840 - 2; case 30
- .short _02007962 - _02007840 - 2; case 31
- .short _02007966 - _02007840 - 2; case 32
- .short _0200796C - _02007840 - 2; case 33
- .short _02007972 - _02007840 - 2; case 34
- .short _02007978 - _02007840 - 2; case 35
- .short _02007980 - _02007840 - 2; case 36
- .short _02007988 - _02007840 - 2; case 37
- .short _02007990 - _02007840 - 2; case 38
- .short _020079D6 - _02007840 - 2; case 39
- .short _02007996 - _02007840 - 2; case 40
- .short _0200799E - _02007840 - 2; case 41
- .short _020079A4 - _02007840 - 2; case 42
- .short _020079AE - _02007840 - 2; case 43
- .short _020079B8 - _02007840 - 2; case 44
- .short _020079C2 - _02007840 - 2; case 45
- .short _020079CC - _02007840 - 2; case 46
-_0200789E:
- mov r1, #0x24
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078A4:
- mov r1, #0x26
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078AA:
- ldr r0, [r0, #0x28]
- pop {r3, pc}
-_020078AE:
- mov r1, #0x2c
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078B4:
- mov r1, #0x2e
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078BA:
- ldr r0, [r0, #0x30]
- pop {r3, pc}
-_020078BE:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_020078C6:
- ldrh r0, [r0, #0x38]
- pop {r3, pc}
-_020078CA:
- ldrh r0, [r0, #0x3a]
- pop {r3, pc}
-_020078CE:
- ldrh r0, [r0, #0x3c]
- pop {r3, pc}
-_020078D2:
- mov r1, #0x40
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078D8:
- mov r1, #0x42
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078DE:
- mov r1, #0x34
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078E4:
- mov r1, #0x36
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_020078EA:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_020078F2:
- add r0, #0x44
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_020078F8:
- add r0, #0x45
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_020078FE:
- add r0, #0x46
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_02007904:
- add r0, #0x47
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_0200790A:
- mov r1, #0x70
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_02007910:
- mov r1, #0x72
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_02007916:
- mov r1, #0x74
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_0200791C:
- mov r1, #0x76
- ldrsh r0, [r0, r1]
- pop {r3, pc}
-_02007922:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_0200792A:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_02007932:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0x16
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_0200793A:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0x11
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_02007942:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0xc
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_0200794A:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0x7
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_02007952:
- ldr r0, [r0, #0x50]
- lsl r0, r0, #0x2
- lsr r0, r0, #0x1b
- pop {r3, pc}
-_0200795A:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x13
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_02007962:
- ldr r0, [r0, #0x4c]
- pop {r3, pc}
-_02007966:
- add r0, #0x48
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_0200796C:
- add r0, #0x49
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_02007972:
- add r0, #0x4a
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_02007978:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x16
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_02007980:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x15
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_02007988:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x14
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_02007990:
- add r0, #0x5b
- ldrb r0, [r0, #0x0]
- pop {r3, pc}
-_02007996:
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0xf
- lsr r0, r0, #0x1c
- pop {r3, pc}
-_0200799E:
- mov r1, #0x6e
- ldrsb r0, [r0, r1]
- pop {r3, pc}
-_020079A4:
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1e
- pop {r3, pc}
-_020079AE:
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1d
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_020079B8:
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1c
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_020079C2:
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x1f
- pop {r3, pc}
-_020079CC:
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x19
- lsr r0, r0, #0x1e
- pop {r3, pc}
-_020079D6:
- bl GF_AssertFail
- mov r0, #0x0
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_020079E0
-FUN_020079E0: ; 0x020079E0
- push {r3-r4}
- add r3, r0, #0x0
- add r0, r2, #0x0
- cmp r1, #0x2e
- bls _020079EC
- b _02007E12
-_020079EC:
- add r1, r1, r1
- add r1, pc
- ldrh r1, [r1, #0x6]
- lsl r1, r1, #0x10
- asr r1, r1, #0x10
- add pc, r1
-_020079F8: ; jump table (using 16-bit offset)
- .short _02007A56 - _020079F8 - 2; case 0
- .short _02007A62 - _020079F8 - 2; case 1
- .short _02007A6E - _020079F8 - 2; case 2
- .short _02007A78 - _020079F8 - 2; case 3
- .short _02007A84 - _020079F8 - 2; case 4
- .short _02007A90 - _020079F8 - 2; case 5
- .short _02007A9A - _020079F8 - 2; case 6
- .short _02007AB4 - _020079F8 - 2; case 7
- .short _02007ABE - _020079F8 - 2; case 8
- .short _02007AC8 - _020079F8 - 2; case 9
- .short _02007AD2 - _020079F8 - 2; case 10
- .short _02007AE0 - _020079F8 - 2; case 11
- .short _02007AEE - _020079F8 - 2; case 12
- .short _02007AFA - _020079F8 - 2; case 13
- .short _02007B06 - _020079F8 - 2; case 14
- .short _02007B20 - _020079F8 - 2; case 15
- .short _02007B30 - _020079F8 - 2; case 16
- .short _02007B40 - _020079F8 - 2; case 17
- .short _02007B50 - _020079F8 - 2; case 18
- .short _02007B60 - _020079F8 - 2; case 19
- .short _02007B6E - _020079F8 - 2; case 20
- .short _02007B7C - _020079F8 - 2; case 21
- .short _02007B8A - _020079F8 - 2; case 22
- .short _02007B98 - _020079F8 - 2; case 23
- .short _02007BB2 - _020079F8 - 2; case 24
- .short _02007BCC - _020079F8 - 2; case 25
- .short _02007BE4 - _020079F8 - 2; case 26
- .short _02007BFC - _020079F8 - 2; case 27
- .short _02007C14 - _020079F8 - 2; case 28
- .short _02007C2C - _020079F8 - 2; case 29
- .short _02007C44 - _020079F8 - 2; case 30
- .short _02007C66 - _020079F8 - 2; case 31
- .short _02007C7A - _020079F8 - 2; case 32
- .short _02007C96 - _020079F8 - 2; case 33
- .short _02007CB2 - _020079F8 - 2; case 34
- .short _02007CC2 - _020079F8 - 2; case 35
- .short _02007CE2 - _020079F8 - 2; case 36
- .short _02007D02 - _020079F8 - 2; case 37
- .short _02007D1A - _020079F8 - 2; case 38
- .short _02007E12 - _020079F8 - 2; case 39
- .short _02007D2A - _020079F8 - 2; case 40
- .short _02007D4A - _020079F8 - 2; case 41
- .short _02007D58 - _020079F8 - 2; case 42
- .short _02007D86 - _020079F8 - 2; case 43
- .short _02007DAA - _020079F8 - 2; case 44
- .short _02007DCE - _020079F8 - 2; case 45
- .short _02007DF2 - _020079F8 - 2; case 46
-_02007A56:
- mov r1, #0x24
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x24]
- pop {r3-r4}
- bx lr
-_02007A62:
- mov r1, #0x26
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x26]
- pop {r3-r4}
- bx lr
-_02007A6E:
- ldr r1, [r3, #0x28]
- add r0, r1, r0
- str r0, [r3, #0x28]
- pop {r3-r4}
- bx lr
-_02007A78:
- mov r1, #0x2c
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x2c]
- pop {r3-r4}
- bx lr
-_02007A84:
- mov r1, #0x2e
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x2e]
- pop {r3-r4}
- bx lr
-_02007A90:
- ldr r1, [r3, #0x30]
- add r0, r1, r0
- str r0, [r3, #0x30]
- pop {r3-r4}
- bx lr
-_02007A9A:
- ldr r4, [r3, #0x54]
- mov r2, #0x1
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1f
- lsr r2, r2, #0x1f
- add r2, r2, r0
- mov r0, #0x1
- and r0, r2
- orr r0, r1
- str r0, [r3, #0x54]
- pop {r3-r4}
- bx lr
-_02007AB4:
- ldrh r1, [r3, #0x38]
- add r0, r1, r0
- strh r0, [r3, #0x38]
- pop {r3-r4}
- bx lr
-_02007ABE:
- ldrh r1, [r3, #0x3a]
- add r0, r1, r0
- strh r0, [r3, #0x3a]
- pop {r3-r4}
- bx lr
-_02007AC8:
- ldrh r1, [r3, #0x3c]
- add r0, r1, r0
- strh r0, [r3, #0x3c]
- pop {r3-r4}
- bx lr
-_02007AD2:
- mov r1, #0x40
- ldrsh r1, [r3, r1]
- add r3, #0x40
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007AE0:
- mov r1, #0x42
- ldrsh r1, [r3, r1]
- add r3, #0x42
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007AEE:
- mov r1, #0x34
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x34]
- pop {r3-r4}
- bx lr
-_02007AFA:
- mov r1, #0x36
- ldrsh r1, [r3, r1]
- add r0, r1, r0
- strh r0, [r3, #0x36]
- pop {r3-r4}
- bx lr
-_02007B06:
- ldr r4, [r3, #0x54]
- mov r2, #0x2
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1e
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1e
- orr r0, r1
- str r0, [r3, #0x54]
- pop {r3-r4}
- bx lr
-_02007B20:
- add r1, r3, #0x0
- add r1, #0x44
- ldrb r1, [r1, #0x0]
- add r3, #0x44
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B30:
- add r1, r3, #0x0
- add r1, #0x45
- ldrb r1, [r1, #0x0]
- add r3, #0x45
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B40:
- add r1, r3, #0x0
- add r1, #0x46
- ldrb r1, [r1, #0x0]
- add r3, #0x46
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B50:
- add r1, r3, #0x0
- add r1, #0x47
- ldrb r1, [r1, #0x0]
- add r3, #0x47
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B60:
- mov r1, #0x70
- ldrsh r1, [r3, r1]
- add r3, #0x70
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B6E:
- mov r1, #0x72
- ldrsh r1, [r3, r1]
- add r3, #0x72
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B7C:
- mov r1, #0x74
- ldrsh r1, [r3, r1]
- add r3, #0x74
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B8A:
- mov r1, #0x76
- ldrsh r1, [r3, r1]
- add r3, #0x76
- add r0, r1, r0
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007B98:
- ldr r4, [r3, #0x54]
- mov r2, #0x7c
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x19
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x19
- orr r0, r1
- str r0, [r3, #0x54]
- pop {r3-r4}
- bx lr
-_02007BB2:
- ldr r4, [r3, #0x50]
- mov r2, #0x1f
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1b
- lsr r2, r2, #0x1b
- add r2, r2, r0
- mov r0, #0x1f
- and r0, r2
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007BCC:
- ldr r2, [r3, #0x50]
- ldr r1, _02007E18 ; =0xFFFFFC1F
- and r1, r2
- lsl r2, r2, #0x16
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x16
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007BE4:
- ldr r2, [r3, #0x50]
- ldr r1, _02007E1C ; =0xFFFF83FF
- and r1, r2
- lsl r2, r2, #0x11
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x11
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007BFC:
- ldr r2, [r3, #0x50]
- ldr r1, _02007E20 ; =0xFFF07FFF
- and r1, r2
- lsl r2, r2, #0xc
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0xc
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007C14:
- ldr r2, [r3, #0x50]
- ldr r1, _02007E24 ; =0xFE0FFFFF
- and r1, r2
- lsl r2, r2, #0x7
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x7
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007C2C:
- ldr r2, [r3, #0x50]
- ldr r1, _02007E28 ; =0xC1FFFFFF
- and r1, r2
- lsl r2, r2, #0x2
- lsr r2, r2, #0x1b
- add r0, r2, r0
- lsl r0, r0, #0x1b
- lsr r0, r0, #0x2
- orr r0, r1
- str r0, [r3, #0x50]
- pop {r3-r4}
- bx lr
-_02007C44:
- ldr r2, [r3, #0x54]
- ldr r1, _02007E2C ; =0xFFFFEFFF
- and r1, r2
- lsl r2, r2, #0x13
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x13
- orr r0, r1
- str r0, [r3, #0x54]
- mov r0, #0x1
- ldr r1, [r3, #0x0]
- lsl r0, r0, #0x8
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007C66:
- ldr r1, [r3, #0x4c]
- add r0, r1, r0
- str r0, [r3, #0x4c]
- mov r0, #0x1
- ldr r1, [r3, #0x0]
- lsl r0, r0, #0x8
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007C7A:
- add r1, r3, #0x0
- add r1, #0x48
- ldrb r1, [r1, #0x0]
- add r1, r1, r0
- add r0, r3, #0x0
- add r0, #0x48
- strb r1, [r0, #0x0]
- mov r0, #0x1
- ldr r1, [r3, #0x0]
- lsl r0, r0, #0x8
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007C96:
- add r1, r3, #0x0
- add r1, #0x49
- ldrb r1, [r1, #0x0]
- add r1, r1, r0
- add r0, r3, #0x0
- add r0, #0x49
- strb r1, [r0, #0x0]
- mov r0, #0x1
- ldr r1, [r3, #0x0]
- lsl r0, r0, #0x8
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007CB2:
- add r1, r3, #0x0
- add r1, #0x4a
- ldrb r1, [r1, #0x0]
- add r3, #0x4a
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007CC2:
- ldr r2, [r3, #0x54]
- ldr r1, _02007E30 ; =0xFFFFFDFF
- and r1, r2
- lsl r2, r2, #0x16
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x16
- orr r0, r1
- str r0, [r3, #0x54]
- ldr r1, [r3, #0x0]
- mov r0, #0x80
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007CE2:
- ldr r2, [r3, #0x54]
- ldr r1, _02007E34 ; =0xFFFFFBFF
- and r1, r2
- lsl r2, r2, #0x15
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x15
- orr r0, r1
- str r0, [r3, #0x54]
- ldr r1, [r3, #0x0]
- mov r0, #0x80
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007D02:
- ldr r2, [r3, #0x54]
- ldr r1, _02007E38 ; =0xFFFFF7FF
- and r1, r2
- lsl r2, r2, #0x14
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x14
- orr r0, r1
- str r0, [r3, #0x54]
- pop {r3-r4}
- bx lr
-_02007D1A:
- add r1, r3, #0x0
- add r1, #0x5b
- ldrb r1, [r1, #0x0]
- add r3, #0x5b
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007D2A:
- ldr r2, [r3, #0x54]
- ldr r1, _02007E3C ; =0xFFFE1FFF
- and r1, r2
- lsl r2, r2, #0xf
- lsr r2, r2, #0x1c
- add r0, r2, r0
- lsl r0, r0, #0x1c
- lsr r0, r0, #0xf
- orr r0, r1
- str r0, [r3, #0x54]
- ldr r1, [r3, #0x0]
- mov r0, #0x80
- orr r0, r1
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007D4A:
- mov r1, #0x6e
- ldrsb r1, [r3, r1]
- add r3, #0x6e
- add r0, r1, r0
- strb r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007D58:
- add r1, r3, #0x0
- add r1, #0x6c
- ldrh r4, [r1, #0x0]
- mov r2, #0x3
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1e
- lsr r2, r2, #0x1e
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r2, #0x3
- and r0, r2
- orr r1, r0
- add r0, r3, #0x0
- add r0, #0x6c
- strh r1, [r0, #0x0]
- ldr r0, [r3, #0x0]
- add r2, #0xfd
- orr r0, r2
- str r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007D86:
- add r1, r3, #0x0
- add r1, #0x6c
- ldrh r4, [r1, #0x0]
- mov r2, #0x4
- add r3, #0x6c
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1d
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1d
- orr r0, r1
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007DAA:
- add r1, r3, #0x0
- add r1, #0x6c
- ldrh r4, [r1, #0x0]
- mov r2, #0x8
- add r3, #0x6c
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1c
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1c
- orr r0, r1
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007DCE:
- add r1, r3, #0x0
- add r1, #0x6c
- ldrh r4, [r1, #0x0]
- mov r2, #0x10
- add r3, #0x6c
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x1b
- lsr r2, r2, #0x1f
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1b
- orr r0, r1
- strh r0, [r3, #0x0]
- pop {r3-r4}
- bx lr
-_02007DF2:
- add r1, r3, #0x0
- add r1, #0x6c
- ldrh r4, [r1, #0x0]
- mov r2, #0x60
- add r3, #0x6c
- add r1, r4, #0x0
- bic r1, r2
- lsl r2, r4, #0x19
- lsr r2, r2, #0x1e
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x19
- orr r0, r1
- strh r0, [r3, #0x0]
-_02007E12:
- pop {r3-r4}
- bx lr
- nop
-_02007E18: .word 0xFFFFFC1F
-_02007E1C: .word 0xFFFF83FF
-_02007E20: .word 0xFFF07FFF
-_02007E24: .word 0xFE0FFFFF
-_02007E28: .word 0xC1FFFFFF
-_02007E2C: .word 0xFFFFEFFF
-_02007E30: .word 0xFFFFFDFF
-_02007E34: .word 0xFFFFFBFF
-_02007E38: .word 0xFFFFF7FF
-_02007E3C: .word 0xFFFE1FFF
-
- thumb_func_start FUN_02007E40
-FUN_02007E40: ; 0x02007E40
- push {r4-r5}
- ldr r5, [r0, #0x54]
- mov r4, #0x2
- orr r4, r5
- str r4, [r0, #0x54]
- add r4, r0, #0x0
- add r4, #0x44
- strb r1, [r4, #0x0]
- add r1, r0, #0x0
- add r1, #0x45
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x46
- strb r3, [r1, #0x0]
- ldr r1, [sp, #0x8]
- add r0, #0x47
- strb r1, [r0, #0x0]
- pop {r4-r5}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007E68
-FUN_02007E68: ; 0x02007E68
- push {r4-r5}
- mov r4, #0x1
- ldr r5, [r0, #0x54]
- lsl r4, r4, #0xc
- orr r4, r5
- str r4, [r0, #0x54]
- add r4, r0, #0x0
- add r4, #0x48
- strb r1, [r4, #0x0]
- add r1, r0, #0x0
- add r1, #0x49
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- mov r2, #0x0
- add r1, #0x4a
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x4b
- strb r3, [r1, #0x0]
- ldr r1, [sp, #0x8]
- str r1, [r0, #0x4c]
- pop {r4-r5}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007E98
-FUN_02007E98: ; 0x02007E98
- push {r4-r7}
- add r4, r0, #0x0
- add r0, r1, #0x0
- add r5, r2, #0x0
- lsl r0, r0, #0x18
- lsr r6, r0, #0x18
- lsl r0, r5, #0x18
- lsr r5, r0, #0x18
- lsl r0, r3, #0x18
- ldr r2, [sp, #0x10]
- mov r1, #0x0
- lsr r0, r0, #0x18
-_02007EB0:
- ldr r3, [r4, #0x0]
- lsl r3, r3, #0x1f
- lsr r3, r3, #0x1f
- beq _02007EDE
- mov r3, #0x1
- ldr r7, [r4, #0x54]
- lsl r3, r3, #0xc
- orr r3, r7
- str r3, [r4, #0x54]
- add r3, r4, #0x0
- add r3, #0x48
- strb r6, [r3, #0x0]
- add r3, r4, #0x0
- add r3, #0x49
- add r7, r4, #0x0
- strb r5, [r3, #0x0]
- add r7, #0x4a
- mov r3, #0x0
- strb r3, [r7, #0x0]
- add r3, r4, #0x0
- add r3, #0x4b
- strb r0, [r3, #0x0]
- str r2, [r4, #0x4c]
-_02007EDE:
- add r1, r1, #0x1
- add r4, #0x98
- cmp r1, #0x4
- blt _02007EB0
- pop {r4-r7}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007EEC
-FUN_02007EEC: ; 0x02007EEC
- ldr r2, [r0, #0x54]
- ldr r1, _02007F1C ; =0xFFFFEFFF
- and r1, r2
- str r1, [r0, #0x54]
- add r1, r0, #0x0
- mov r2, #0x0
- add r1, #0x48
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x49
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x4a
- strb r2, [r1, #0x0]
- add r1, r0, #0x0
- add r1, #0x4b
- strb r2, [r1, #0x0]
- str r2, [r0, #0x4c]
- mov r1, #0x1
- ldr r2, [r0, #0x0]
- lsl r1, r1, #0x8
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_02007F1C: .word 0xFFFFEFFF
-
- thumb_func_start FUN_02007F20
-FUN_02007F20: ; 0x02007F20
- ldr r0, [r0, #0x54]
- lsl r0, r0, #0x13
- lsr r0, r0, #0x1f
- cmp r0, #0x1
- bne _02007F2E
- mov r0, #0x1
- bx lr
-_02007F2E:
- mov r0, #0x0
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007F34
-FUN_02007F34: ; 0x02007F34
- mov r2, #0x28
- sub r2, r2, r1
- mov r1, #0x36
- ldrsh r1, [r0, r1]
- mul r1, r2
- asr r1, r1, #0x8
- sub r1, r2, r1
- strh r1, [r0, #0x2e]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02007F48
-FUN_02007F48: ; 0x02007F48
- push {r4-r7}
- add r1, r0, #0x0
- add r1, #0x58
- ldrb r1, [r1, #0x0]
- add r6, r0, #0x0
- add r6, #0x59
- cmp r1, #0x0
- beq _0200800A
- add r1, r0, #0x0
- add r1, #0x5a
- ldrb r1, [r1, #0x0]
- cmp r1, #0x0
- bne _02007FFE
- ldrb r1, [r6, #0x0]
- add r1, r1, #0x1
- strb r1, [r6, #0x0]
- ldrb r3, [r6, #0x0]
- mov r1, #0x84
- lsl r4, r3, #0x1
- add r2, r0, r4
- ldrsb r2, [r2, r1]
- sub r1, #0x85
- cmp r2, r1
- bge _02007FC6
- mov r2, #0x0
- sub r1, r2, #0x2
-_02007F7C:
- add r4, r0, r3
- add r4, #0x5c
- ldrb r4, [r4, #0x0]
- add r3, r0, r3
- add r3, #0x5c
- add r4, r4, #0x1
- strb r4, [r3, #0x0]
- ldrb r5, [r6, #0x0]
- lsl r3, r5, #0x1
- add r4, r0, r3
- add r3, r4, #0x0
- add r7, r0, r5
- add r3, #0x85
- add r7, #0x5c
- ldrb r3, [r3, #0x0]
- ldrb r7, [r7, #0x0]
- cmp r3, r7
- beq _02007FA4
- cmp r3, #0x0
- bne _02007FAE
-_02007FA4:
- add r3, r0, r5
- add r3, #0x5c
- strb r2, [r3, #0x0]
- add r6, r6, #0x1
- b _02007FB6
-_02007FAE:
- mov r3, #0x84
- ldrsb r3, [r4, r3]
- sub r3, r1, r3
- strb r3, [r6, #0x0]
-_02007FB6:
- ldrb r3, [r6, #0x0]
- mov r5, #0x84
- lsl r4, r3, #0x1
- add r7, r0, r4
- ldrsb r7, [r7, r5]
- sub r5, #0x85
- cmp r7, r5
- blt _02007F7C
-_02007FC6:
- add r2, r0, r4
- mov r1, #0x84
- ldrsb r2, [r2, r1]
- sub r1, #0x85
- cmp r2, r1
- beq _02007FD6
- cmp r3, #0xa
- blo _02007FE6
-_02007FD6:
- add r1, r0, #0x0
- mov r2, #0x0
- add r1, #0x5b
- strb r2, [r1, #0x0]
- add r0, #0x58
- strb r2, [r0, #0x0]
- pop {r4-r7}
- bx lr
-_02007FE6:
- add r1, r0, #0x0
- add r1, #0x5b
- strb r2, [r1, #0x0]
- ldrb r1, [r6, #0x0]
- lsl r1, r1, #0x1
- add r1, r0, r1
- add r1, #0x85
- ldrb r1, [r1, #0x0]
- add r0, #0x5a
- strb r1, [r0, #0x0]
- pop {r4-r7}
- bx lr
-_02007FFE:
- add r1, r0, #0x0
- add r1, #0x5a
- ldrb r1, [r1, #0x0]
- add r0, #0x5a
- sub r1, r1, #0x1
- strb r1, [r0, #0x0]
-_0200800A:
- pop {r4-r7}
- bx lr
- .balign 4
-
- thumb_func_start FUN_02008010
-FUN_02008010: ; 0x02008010
- mov r2, #0x1
- strb r2, [r0, #0x0]
- mov r3, #0x0
- strb r3, [r0, #0x2]
- ldrsb r2, [r1, r3]
- strb r2, [r0, #0x1]
- ldrb r2, [r1, #0x1]
- strb r2, [r0, #0x3]
- str r1, [r0, #0x10]
- add r2, r3, #0x0
-_02008024:
- add r1, r0, r3
- add r3, r3, #0x1
- strb r2, [r1, #0x4]
- cmp r3, #0xa
- blt _02008024
- bx lr
-
- thumb_func_start FUN_02008030
-FUN_02008030: ; 0x02008030
- push {r4-r7}
- ldrb r1, [r0, #0x0]
- cmp r1, #0x0
- beq _020080C6
- add r3, r0, #0x2
- ldr r4, [r0, #0x10]
- cmp r1, #0x0
- beq _020080C0
- ldrb r1, [r0, #0x3]
- cmp r1, #0x0
- bne _020080BC
- ldrb r1, [r3, #0x0]
- add r1, r1, #0x1
- strb r1, [r3, #0x0]
- ldrb r2, [r3, #0x0]
- mov r1, #0x0
- mvn r1, r1
- lsl r5, r2, #0x1
- ldrsb r6, [r4, r5]
- cmp r6, r1
- bge _02008098
- mov r1, #0x0
-_0200805C:
- add r5, r0, r2
- ldrb r2, [r5, #0x4]
- add r2, r2, #0x1
- strb r2, [r5, #0x4]
- ldrb r2, [r3, #0x0]
- add r5, r0, r2
- lsl r2, r2, #0x1
- add r2, r4, r2
- ldrb r7, [r2, #0x1]
- ldrb r6, [r5, #0x4]
- cmp r7, r6
- beq _02008078
- cmp r7, #0x0
- bne _0200807E
-_02008078:
- strb r1, [r5, #0x4]
- add r3, r3, #0x1
- b _0200808A
-_0200807E:
- mov r5, #0x0
- ldrsb r5, [r2, r5]
- mov r2, #0x1
- mvn r2, r2
- sub r2, r2, r5
- strb r2, [r3, #0x0]
-_0200808A:
- ldrb r2, [r3, #0x0]
- mov r6, #0x0
- mvn r6, r6
- lsl r5, r2, #0x1
- ldrsb r7, [r4, r5]
- cmp r7, r6
- blt _0200805C
-_02008098:
- ldrsb r5, [r4, r5]
- mov r1, #0x0
- mvn r1, r1
- cmp r5, r1
- beq _020080A6
- cmp r2, #0xa
- blo _020080AE
-_020080A6:
- mov r1, #0x0
- strb r1, [r0, #0x1]
- strb r1, [r0, #0x0]
- b _020080C0
-_020080AE:
- strb r5, [r0, #0x1]
- ldrb r1, [r3, #0x0]
- lsl r1, r1, #0x1
- add r1, r4, r1
- ldrb r1, [r1, #0x1]
- strb r1, [r0, #0x3]
- b _020080C0
-_020080BC:
- sub r1, r1, #0x1
- strb r1, [r0, #0x3]
-_020080C0:
- ldrb r0, [r0, #0x1]
- pop {r4-r7}
- bx lr
-_020080C6:
- mov r0, #0x0
- mvn r0, r0
- pop {r4-r7}
- bx lr
- .balign 4
-
- thumb_func_start FUN_020080D0
-FUN_020080D0: ; 0x020080D0
- ldr r2, [r0, #0x0]
- mov r1, #0x80
- orr r2, r1
- add r1, #0x80
- orr r1, r2
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_020080E0
-FUN_020080E0: ; 0x020080E0
- push {r3-r4}
- add r2, r0, #0x0
- add r3, r2, #0x0
- add r4, r2, #0x4
- add r3, #0x14
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- add r0, r2, #0x0
- add r0, #0x6c
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x78
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x6e
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7a
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x70
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7c
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x72
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7e
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x74
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x80
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x76
- ldrh r0, [r0, #0x0]
- add r2, #0x82
- strh r0, [r2, #0x0]
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_0200813C
-FUN_0200813C: ; 0x0200813C
- push {r3-r4}
- add r2, r0, #0x0
- add r4, r2, #0x0
- add r4, #0x14
- add r3, r2, #0x4
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- add r0, r2, #0x0
- add r0, #0x78
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x6c
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7a
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x6e
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7c
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x70
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x7e
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x72
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x80
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x74
- strh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x82
- ldrh r1, [r0, #0x0]
- add r0, r2, #0x0
- add r0, #0x76
- strh r1, [r0, #0x0]
- ldr r1, [r2, #0x0]
- mov r0, #0x80
- orr r1, r0
- add r0, #0x80
- orr r0, r1
- str r0, [r2, #0x0]
- pop {r3-r4}
- bx lr
- .balign 4
-
- thumb_func_start FUN_020081A8
-FUN_020081A8: ; 0x020081A8
- mov r3, #0xa7
- lsl r3, r3, #0x2
- str r1, [r0, r3]
- add r1, r3, #0x4
- str r2, [r0, r1]
- bx lr
-
- thumb_func_start FUN_020081B4
-FUN_020081B4: ; 0x020081B4
- mov r3, #0xa9
- lsl r3, r3, #0x2
- str r1, [r0, r3]
- add r1, r3, #0x4
- str r2, [r0, r1]
- bx lr
-
- thumb_func_start FUN_020081C0
-FUN_020081C0: ; 0x020081C0
- add r0, r0, #0x4
- bx lr
-
- thumb_func_start FUN_020081C4
-FUN_020081C4: ; 0x020081C4
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, _02008254 ; =0x000002E1
- ldrb r1, [r4, r0]
- cmp r1, #0x0
- beq _02008212
- mov r1, #0x0
- strb r1, [r4, r0]
- sub r0, #0x81
- add r0, r4, r0
- bl NNS_G2dInitImageProxy
- mov r3, #0xae
- lsl r3, r3, #0x2
- mov r1, #0x20
- strh r1, [r4, r3]
- add r0, r3, #0x2
- strh r1, [r4, r0]
- add r0, r3, #0x0
- sub r0, #0x18
- ldr r1, [r4, r0]
- add r0, r3, #0x0
- add r0, #0x10
- str r1, [r4, r0]
- add r0, r3, #0x0
- sub r0, #0xc
- ldr r1, [r4, r0]
- add r0, r3, #0x0
- add r0, #0x14
- str r1, [r4, r0]
- add r1, r3, #0x0
- sub r1, #0x1c
- add r0, r4, r3
- sub r3, #0x58
- ldr r1, [r4, r1]
- mov r2, #0x0
- add r3, r4, r3
- bl NNS_G2dLoadImage2DMapping
-_02008212:
- ldr r0, _02008258 ; =0x000002E2
- ldrb r1, [r4, r0]
- cmp r1, #0x0
- beq _02008252
- mov r1, #0x0
- strb r1, [r4, r0]
- sub r0, #0x5e
- add r0, r4, r0
- bl NNS_G2dInitImagePaletteProxy
- mov r3, #0xaa
- lsl r3, r3, #0x2
- add r0, r3, #0x0
- ldr r1, [r4, r3]
- add r0, #0x30
- str r1, [r4, r0]
- add r0, r3, #0x0
- add r0, #0x8
- ldr r1, [r4, r0]
- add r0, r3, #0x0
- add r0, #0x34
- str r1, [r4, r0]
- add r0, r3, #0x0
- sub r1, r3, #0x4
- add r0, #0x28
- sub r3, #0x24
- ldr r1, [r4, r1]
- add r0, r4, r0
- mov r2, #0x0
- add r3, r4, r3
- bl NNS_G2dLoadPalette
-_02008252:
- pop {r4, pc}
- .balign 4
-_02008254: .word 0x000002E1
-_02008258: .word 0x000002E2
-
- thumb_func_start FUN_0200825C
-FUN_0200825C: ; 0x0200825C
- ldr r2, _02008264 ; =0x000002E3
- strb r1, [r0, r2]
- bx lr
- nop
-_02008264: .word 0x000002E3
-
- thumb_func_start FUN_02008268
-FUN_02008268: ; 0x02008268
- push {r4, lr}
- add r4, r0, #0x0
- bne _02008272
- bl GF_AssertFail
-_02008272:
- ldr r0, [r4, #0x0]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- beq _0200827E
- mov r0, #0x1
- pop {r4, pc}
-_0200827E:
- mov r0, #0x0
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_02008284
-FUN_02008284: ; 0x02008284
- mov r2, #0xb9
- lsl r2, r2, #0x2
- ldr r3, [r0, r2]
- orr r1, r3
- str r1, [r0, r2]
- bx lr
-
- thumb_func_start FUN_02008290
-FUN_02008290: ; 0x02008290
- push {r3-r4}
- mov r3, #0xb9
- lsl r3, r3, #0x2
- mov r2, #0x0
- mvn r2, r2
- ldr r4, [r0, r3]
- eor r1, r2
- and r1, r4
- str r1, [r0, r3]
- pop {r3-r4}
- bx lr
- .balign 4
-
- thumb_func_start FUN_020082A8
-FUN_020082A8: ; 0x020082A8
- push {r4-r7, lr}
- sub sp, #0x5c
- add r6, r0, #0x0
- mov r0, #0x0
- str r0, [sp, #0x48]
- str r0, [sp, #0x54]
- ldr r0, [sp, #0x48]
- str r6, [sp, #0x44]
- str r0, [sp, #0x38]
-_020082BA:
- ldr r0, [sp, #0x44]
- ldr r1, [r0, #0x0]
- lsl r0, r1, #0x1f
- lsr r0, r0, #0x1f
- beq _020082CA
- lsl r0, r1, #0x18
- lsr r0, r0, #0x1f
- bne _020082CC
-_020082CA:
- b _020086C2
-_020082CC:
- mov r0, #0x80
- bic r1, r0
- ldr r0, [sp, #0x44]
- mov r2, #0xa6
- str r1, [r0, #0x0]
- mov r0, #0x1
- str r0, [sp, #0x48]
- ldr r0, [sp, #0x44]
- ldr r1, [sp, #0x44]
- lsl r2, r2, #0x2
- ldrh r0, [r0, #0x4]
- ldrh r1, [r1, #0x6]
- ldr r2, [r6, r2]
- bl AllocAndReadWholeNarcMemberByIdPair
- add r1, sp, #0x58
- str r0, [sp, #0x4c]
- bl NNS_G2dGetUnpackedCharacterData
- ldr r0, [sp, #0x58]
- mov r1, #0xaf
- ldr r0, [r0, #0x4]
- lsl r1, r1, #0x2
- str r0, [r6, r1]
- ldr r0, [sp, #0x58]
- ldr r2, [r0, #0x8]
- add r0, r1, #0x4
- str r2, [r6, r0]
- ldr r0, [sp, #0x58]
- add r1, #0x8
- ldr r0, [r0, #0xc]
- str r0, [r6, r1]
- ldr r0, [sp, #0x58]
- ldr r0, [r0, #0x14]
- str r0, [sp, #0x50]
- bl FUN_02008A74
- ldr r0, [sp, #0x44]
- ldr r1, [sp, #0x50]
- bl FUN_020088EC
- ldr r0, [sp, #0x54]
- cmp r0, #0x3
- beq _02008326
- b _02008554
-_02008326:
- mov r5, #0x0
- add r0, r5, #0x0
- str r5, [sp, #0x14]
- str r0, [sp, #0x24]
-_0200832E:
- ldr r0, [sp, #0x14]
- mov r1, #0x4f
- sub r2, r1, r0
- mov r0, #0x50
- add r1, r2, #0x0
- mul r1, r0
- ldr r0, [sp, #0x50]
- mov r4, #0x0
- add r0, r0, r1
- str r0, [sp, #0x20]
- ldr r1, [sp, #0x50]
- ldr r0, [sp, #0x24]
- add r7, r1, r0
- ldr r0, [sp, #0x20]
- str r7, [sp, #0x18]
- str r0, [sp, #0x1c]
- ldr r0, [sp, #0x14]
- sub r0, r0, #0x1
- lsl r0, r0, #0x7
- str r0, [sp, #0x10]
-_02008356:
- cmp r4, #0x28
- bge _02008442
- ldr r0, [sp, #0x44]
- ldr r1, [r0, #0x54]
- lsl r0, r1, #0x16
- lsr r0, r0, #0x1f
- beq _02008386
- lsl r1, r1, #0x15
- lsr r1, r1, #0x1f
- beq _02008386
- mov r0, #0x27
- sub r1, r0, r4
- ldr r0, [sp, #0x1c]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r1, r4, r1
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_02008386:
- cmp r0, #0x0
- beq _020083A6
- mov r0, #0x27
- sub r1, r0, r4
- ldr r0, [sp, #0x18]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r1, r4, r1
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_020083A6:
- ldr r0, [sp, #0x44]
- ldr r0, [r0, #0x54]
- lsl r1, r0, #0x15
- lsr r1, r1, #0x1f
- beq _020083C4
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r0, [sp, #0x20]
- ldr r1, [r6, r1]
- ldrb r0, [r0, #0x0]
- add r1, r5, r1
- add r1, r4, r1
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_020083C4:
- lsl r0, r0, #0xf
- lsr r0, r0, #0x1c
- str r0, [sp, #0xc]
- beq _02008430
- ldr r1, [sp, #0xc]
- ldr r0, [sp, #0x14]
- lsl r1, r1, #0x1
- bl _u32_div_f
- cmp r1, #0x0
- beq _020083F4
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r1, [r6, r0]
- ldr r0, [sp, #0x10]
- add r0, r0, r1
- add r0, r4, r0
- add r0, #0x50
- add r1, r5, r1
- add r1, r4, r1
- ldrb r0, [r0, #0x0]
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_020083F4:
- ldr r1, [sp, #0xc]
- add r0, r4, #0x0
- bl _u32_div_f
- cmp r1, #0x0
- beq _02008416
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r0, [r6, r0]
- add r2, r5, r0
- add r0, r2, r4
- add r0, #0x4f
- ldrb r1, [r0, #0x0]
- add r0, r2, r4
- add r0, #0x50
- strb r1, [r0, #0x0]
- b _0200852E
-_02008416:
- ldrb r1, [r7, #0x0]
- mov r0, #0xf
- and r1, r0
- lsl r0, r1, #0x4
- orr r0, r1
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r1, r4, r1
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_02008430:
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- ldrb r0, [r7, #0x0]
- add r1, r5, r1
- add r1, r4, r1
- add r1, #0x50
- strb r0, [r1, #0x0]
- b _0200852E
-_02008442:
- ldr r0, [sp, #0x44]
- ldr r1, [r0, #0x54]
- lsl r0, r1, #0x16
- lsr r0, r0, #0x1f
- beq _02008472
- lsl r1, r1, #0x15
- lsr r1, r1, #0x1f
- beq _02008472
- add r1, r4, #0x0
- sub r1, #0x28
- mov r0, #0x4f
- sub r1, r0, r1
- ldr r0, [sp, #0x1c]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
- b _0200852E
-_02008472:
- cmp r0, #0x0
- beq _02008496
- add r1, r4, #0x0
- sub r1, #0x28
- mov r0, #0x4f
- sub r1, r0, r1
- ldr r0, [sp, #0x18]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
- b _0200852E
-_02008496:
- ldr r0, [sp, #0x44]
- ldr r0, [r0, #0x54]
- lsl r1, r0, #0x15
- lsr r1, r1, #0x1f
- beq _020084B4
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r0, [sp, #0x20]
- ldr r1, [r6, r1]
- ldrb r0, [r0, #0x0]
- add r1, r5, r1
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
- b _0200852E
-_020084B4:
- lsl r0, r0, #0xf
- lsr r0, r0, #0x1c
- str r0, [sp, #0x8]
- beq _0200851E
- ldr r1, [sp, #0x8]
- ldr r0, [sp, #0x14]
- lsl r1, r1, #0x1
- bl _u32_div_f
- cmp r1, #0x0
- beq _020084E4
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r1, [r6, r0]
- ldr r0, [sp, #0x10]
- add r0, r0, r1
- add r2, r4, r0
- ldr r0, _020086E8 ; =0x00002828
- add r1, r5, r1
- ldrb r0, [r2, r0]
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
- b _0200852E
-_020084E4:
- ldr r1, [sp, #0x8]
- add r0, r4, #0x0
- bl _u32_div_f
- cmp r1, #0x0
- beq _02008504
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r0, [r6, r0]
- ldr r1, _020086EC ; =0x00002827
- add r0, r5, r0
- add r0, r0, r4
- ldrb r2, [r0, r1]
- add r1, r1, #0x1
- strb r2, [r0, r1]
- b _0200852E
-_02008504:
- ldrb r1, [r7, #0x0]
- mov r0, #0xf
- and r1, r0
- lsl r0, r1, #0x4
- orr r0, r1
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
- b _0200852E
-_0200851E:
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- ldrb r0, [r7, #0x0]
- add r1, r5, r1
- add r2, r4, r1
- ldr r1, _020086E8 ; =0x00002828
- strb r0, [r2, r1]
-_0200852E:
- ldr r0, [sp, #0x20]
- add r4, r4, #0x1
- add r0, r0, #0x1
- add r7, r7, #0x1
- str r0, [sp, #0x20]
- cmp r4, #0x50
- bge _0200853E
- b _02008356
-_0200853E:
- ldr r0, [sp, #0x24]
- add r5, #0x80
- add r0, #0x50
- str r0, [sp, #0x24]
- ldr r0, [sp, #0x14]
- add r0, r0, #0x1
- str r0, [sp, #0x14]
- cmp r0, #0x50
- bge _02008552
- b _0200832E
-_02008552:
- b _020086BC
-_02008554:
- mov r0, #0x0
- str r0, [sp, #0x0]
- str r0, [sp, #0x40]
- str r0, [sp, #0x3c]
-_0200855C:
- ldr r0, [sp, #0x0]
- mov r1, #0x4f
- sub r2, r1, r0
- mov r0, #0x50
- add r1, r2, #0x0
- mul r1, r0
- ldr r0, [sp, #0x50]
- mov r4, #0x0
- add r0, r0, r1
- str r0, [sp, #0x34]
- ldr r1, [sp, #0x50]
- ldr r0, [sp, #0x3c]
- add r7, r1, r0
- ldr r0, [sp, #0x34]
- ldr r1, [sp, #0x38]
- str r0, [sp, #0x30]
- ldr r0, [sp, #0x40]
- str r7, [sp, #0x2c]
- add r5, r1, r0
- ldr r0, [sp, #0x0]
- sub r0, r0, #0x1
- lsl r1, r0, #0x7
- ldr r0, [sp, #0x38]
- add r0, r0, r1
- str r0, [sp, #0x28]
-_0200858E:
- ldr r0, [sp, #0x44]
- ldr r1, [r0, #0x54]
- lsl r0, r1, #0x16
- lsr r0, r0, #0x1f
- beq _020085D6
- lsl r1, r1, #0x15
- lsr r1, r1, #0x1f
- beq _020085D6
- cmp r4, #0x28
- bge _020085BA
- mov r0, #0x27
- sub r1, r0, r4
- ldr r0, [sp, #0x30]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_020085BA:
- add r1, r4, #0x0
- sub r1, #0x28
- mov r0, #0x4f
- sub r1, r0, r1
- ldr r0, [sp, #0x30]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_020085D6:
- cmp r0, #0x0
- beq _02008612
- cmp r4, #0x28
- bge _020085F6
- mov r0, #0x27
- sub r1, r0, r4
- ldr r0, [sp, #0x2c]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_020085F6:
- add r1, r4, #0x0
- sub r1, #0x28
- mov r0, #0x4f
- sub r1, r0, r1
- ldr r0, [sp, #0x2c]
- ldrb r0, [r0, r1]
- bl FUN_020088D8
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_02008612:
- ldr r0, [sp, #0x44]
- ldr r0, [r0, #0x54]
- lsl r1, r0, #0x15
- lsr r1, r1, #0x1f
- beq _0200862C
- ldr r0, [sp, #0x34]
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- ldrb r0, [r0, #0x0]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_0200862C:
- lsl r0, r0, #0xf
- lsr r0, r0, #0x1c
- str r0, [sp, #0x4]
- beq _02008688
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- lsl r1, r1, #0x1
- bl _u32_div_f
- cmp r1, #0x0
- beq _02008654
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r0, [r6, r0]
- ldr r1, [sp, #0x28]
- add r1, r1, r0
- ldrb r1, [r4, r1]
- add r0, r5, r0
- strb r1, [r4, r0]
- b _02008694
-_02008654:
- ldr r1, [sp, #0x4]
- add r0, r4, #0x0
- bl _u32_div_f
- cmp r1, #0x0
- beq _02008672
- mov r0, #0xab
- lsl r0, r0, #0x2
- ldr r0, [r6, r0]
- add r1, r5, r0
- add r0, r1, r4
- sub r0, r0, #0x1
- ldrb r0, [r0, #0x0]
- strb r0, [r1, r4]
- b _02008694
-_02008672:
- ldrb r1, [r7, #0x0]
- mov r0, #0xf
- and r1, r0
- lsl r0, r1, #0x4
- orr r0, r1
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- add r1, r5, r1
- strb r0, [r4, r1]
- b _02008694
-_02008688:
- mov r1, #0xab
- lsl r1, r1, #0x2
- ldr r1, [r6, r1]
- ldrb r0, [r7, #0x0]
- add r1, r5, r1
- strb r0, [r4, r1]
-_02008694:
- ldr r0, [sp, #0x34]
- add r4, r4, #0x1
- add r0, r0, #0x1
- add r7, r7, #0x1
- str r0, [sp, #0x34]
- cmp r4, #0x50
- bge _020086A4
- b _0200858E
-_020086A4:
- ldr r0, [sp, #0x40]
- add r0, #0x80
- str r0, [sp, #0x40]
- ldr r0, [sp, #0x3c]
- add r0, #0x50
- str r0, [sp, #0x3c]
- ldr r0, [sp, #0x0]
- add r0, r0, #0x1
- str r0, [sp, #0x0]
- cmp r0, #0x50
- bge _020086BC
- b _0200855C
-_020086BC:
- ldr r0, [sp, #0x4c]
- bl FreeToHeap
-_020086C2:
- ldr r0, [sp, #0x44]
- mov r1, #0xa
- add r0, #0x98
- str r0, [sp, #0x44]
- ldr r0, [sp, #0x38]
- lsl r1, r1, #0xa
- add r0, r0, r1
- str r0, [sp, #0x38]
- ldr r0, [sp, #0x54]
- add r0, r0, #0x1
- str r0, [sp, #0x54]
- cmp r0, #0x4
- bge _020086DE
- b _020082BA
-_020086DE:
- ldr r1, _020086F0 ; =0x000002E1
- ldr r0, [sp, #0x48]
- strb r0, [r6, r1]
- add sp, #0x5c
- pop {r4-r7, pc}
- .balign 4
-_020086E8: .word 0x00002828
-_020086EC: .word 0x00002827
-_020086F0: .word 0x000002E1
-
- thumb_func_start FUN_020086F4
-FUN_020086F4: ; 0x020086F4
- push {r4-r7, lr}
- sub sp, #0x1c
- add r5, r0, #0x0
- mov r0, #0x0
- str r0, [sp, #0xc]
- str r0, [sp, #0x14]
- ldr r0, [sp, #0xc]
- add r4, r5, #0x0
- str r0, [sp, #0x8]
-_02008706:
- ldr r1, [r4, #0x0]
- lsl r0, r1, #0x1f
- lsr r0, r0, #0x1f
- beq _020087E0
- lsl r0, r1, #0x17
- lsr r0, r0, #0x1f
- beq _020087E0
- ldr r0, _020088CC ; =0xFFFFFEFF
- mov r2, #0xa6
- and r0, r1
- str r0, [r4, #0x0]
- mov r0, #0x1
- str r0, [sp, #0xc]
- lsl r2, r2, #0x2
- ldrh r0, [r4, #0x4]
- ldrh r1, [r4, #0x8]
- ldr r2, [r5, r2]
- bl AllocAndReadWholeNarcMemberByIdPair
- add r1, sp, #0x18
- str r0, [sp, #0x10]
- bl NNS_G2dGetUnpackedPaletteData
- ldr r0, [sp, #0x18]
- mov r7, #0x0
- ldr r1, [r0, #0x0]
- mov r0, #0x2d
- lsl r0, r0, #0x4
- str r1, [r5, r0]
- ldr r0, [sp, #0x18]
- add r2, r7, #0x0
- ldr r1, [r0, #0xc]
- ldr r0, [sp, #0x8]
- lsl r3, r0, #0x1
-_0200874A:
- mov r6, #0x2b
- lsl r6, r6, #0x4
- ldr r6, [r5, r6]
- ldrh r0, [r1, #0x0]
- add r6, r3, r6
- add r7, r7, #0x1
- strh r0, [r2, r6]
- mov r6, #0xad
- lsl r6, r6, #0x2
- ldrh r0, [r1, #0x0]
- ldr r6, [r5, r6]
- add r1, r1, #0x2
- add r6, r3, r6
- strh r0, [r2, r6]
- add r2, r2, #0x2
- cmp r7, #0x10
- blt _0200874A
- ldr r0, [sp, #0x10]
- bl FreeToHeap
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1e
- beq _020087E0
- mov r2, #0xa6
- lsl r2, r2, #0x2
- ldr r2, [r5, r2]
- mov r0, #0x75 ; NARC_POKETOOL_POKEGRA_OTHERPOKE
- mov r1, #0xd4
- bl AllocAndReadWholeNarcMemberByIdPair
- add r1, sp, #0x18
- str r0, [sp, #0x4]
- bl NNS_G2dGetUnpackedPaletteData
- ldr r0, [sp, #0x18]
- mov r7, #0xad
- ldr r0, [r0, #0xc]
- mov r1, #0x0
- lsl r7, r7, #0x2
-_0200879E:
- add r6, r4, #0x0
- add r6, #0x6c
- ldrh r6, [r6, #0x0]
- mov r2, #0x2b
- lsl r2, r2, #0x4
- lsl r6, r6, #0x1e
- lsr r6, r6, #0x1e
- add r6, r6, #0x3
- lsl r6, r6, #0x4
- add r6, r1, r6
- ldrh r3, [r0, #0x0]
- ldr r2, [r5, r2]
- lsl r6, r6, #0x1
- strh r3, [r2, r6]
- add r6, r4, #0x0
- add r6, #0x6c
- ldrh r6, [r6, #0x0]
- ldrh r3, [r0, #0x0]
- ldr r2, [r5, r7]
- lsl r6, r6, #0x1e
- lsr r6, r6, #0x1e
- add r6, r6, #0x3
- lsl r6, r6, #0x4
- add r6, r1, r6
- lsl r6, r6, #0x1
- add r1, r1, #0x1
- add r0, r0, #0x2
- strh r3, [r2, r6]
- cmp r1, #0x10
- blt _0200879E
- ldr r0, [sp, #0x4]
- bl FreeToHeap
-_020087E0:
- ldr r0, [r4, #0x0]
- lsl r0, r0, #0x1f
- lsr r0, r0, #0x1f
- beq _020088AE
- ldr r0, [r4, #0x54]
- lsl r0, r0, #0x13
- lsr r0, r0, #0x1f
- beq _020088AE
- add r0, r4, #0x0
- add r0, #0x4a
- ldrb r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020088A0
- mov r0, #0x1
- str r0, [sp, #0xc]
- add r0, r4, #0x0
- add r0, #0x4b
- ldrb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x4a
- strb r1, [r0, #0x0]
- ldr r0, [sp, #0x8]
- mov r2, #0xad
- lsl r1, r0, #0x1
- ldr r0, [r4, #0x4c]
- add r3, r4, #0x0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- lsl r2, r2, #0x2
- str r0, [sp, #0x0]
- ldr r0, [r5, r2]
- sub r2, r2, #0x4
- add r3, #0x48
- ldr r2, [r5, r2]
- add r0, r0, r1
- add r1, r2, r1
- ldrb r3, [r3, #0x0]
- mov r2, #0x10
- bl BlendPalette
- add r0, r4, #0x0
- add r0, #0x6c
- ldrh r0, [r0, #0x0]
- lsl r0, r0, #0x1e
- lsr r0, r0, #0x1e
- beq _02008862
- add r0, r0, #0x3
- lsl r1, r0, #0x5
- ldr r0, [r4, #0x4c]
- mov r2, #0xad
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- add r3, r4, #0x0
- lsl r2, r2, #0x2
- str r0, [sp, #0x0]
- ldr r0, [r5, r2]
- sub r2, r2, #0x4
- add r3, #0x48
- ldr r2, [r5, r2]
- add r0, r0, r1
- add r1, r2, r1
- ldrb r3, [r3, #0x0]
- mov r2, #0x10
- bl BlendPalette
-_02008862:
- add r0, r4, #0x0
- add r0, #0x49
- ldrb r1, [r0, #0x0]
- add r0, r4, #0x0
- add r0, #0x48
- ldrb r0, [r0, #0x0]
- cmp r0, r1
- bne _0200887C
- ldr r1, [r4, #0x54]
- ldr r0, _020088D0 ; =0xFFFFEFFF
- and r0, r1
- str r0, [r4, #0x54]
- b _020088AE
-_0200887C:
- cmp r0, r1
- bls _02008890
- add r0, r4, #0x0
- add r0, #0x48
- ldrb r0, [r0, #0x0]
- sub r1, r0, #0x1
- add r0, r4, #0x0
- add r0, #0x48
- strb r1, [r0, #0x0]
- b _020088AE
-_02008890:
- add r0, r4, #0x0
- add r0, #0x48
- ldrb r0, [r0, #0x0]
- add r1, r0, #0x1
- add r0, r4, #0x0
- add r0, #0x48
- strb r1, [r0, #0x0]
- b _020088AE
-_020088A0:
- add r0, r4, #0x0
- add r0, #0x4a
- ldrb r0, [r0, #0x0]
- sub r1, r0, #0x1
- add r0, r4, #0x0
- add r0, #0x4a
- strb r1, [r0, #0x0]
-_020088AE:
- ldr r0, [sp, #0x8]
- add r4, #0x98
- add r0, #0x10
- str r0, [sp, #0x8]
- ldr r0, [sp, #0x14]
- add r0, r0, #0x1
- str r0, [sp, #0x14]
- cmp r0, #0x4
- bge _020088C2
- b _02008706
-_020088C2:
- ldr r1, _020088D4 ; =0x000002E2
- ldr r0, [sp, #0xc]
- strb r0, [r5, r1]
- add sp, #0x1c
- pop {r4-r7, pc}
- .balign 4
-_020088CC: .word 0xFFFFFEFF
-_020088D0: .word 0xFFFFEFFF
-_020088D4: .word 0x000002E2
-
- thumb_func_start FUN_020088D8
-FUN_020088D8: ; 0x020088D8
- mov r1, #0xf0
- and r1, r0
- lsl r1, r1, #0x14
- lsl r0, r0, #0x1c
- lsr r1, r1, #0x18
- lsr r0, r0, #0x18
- orr r0, r1
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
-
- thumb_func_start FUN_020088EC
-FUN_020088EC: ; 0x020088EC
- push {r3, lr}
- add r2, r0, #0x0
- ldrh r0, [r2, #0xa]
- cmp r0, #0x0
- beq _02008900
- add r0, r1, #0x0
- ldr r1, [r2, #0x10]
- mov r2, #0x1
- bl FUN_02008904
-_02008900:
- pop {r3, pc}
- .balign 4
-
- thumb_func_start FUN_02008904
-FUN_02008904: ; 0x02008904
- push {r4-r7, lr}
- sub sp, #0x1c
- add r3, r0, #0x0
- add r0, r1, #0x0
- mov lr, r0
- mov r0, #0x0
- mov r12, r0
- ldr r0, _02008A50 ; =UNK_02105AE8
- str r1, [sp, #0x0]
- str r2, [sp, #0x4]
- str r0, [sp, #0x10]
-_0200891A:
- ldr r0, [sp, #0x10]
- mov r1, #0x0
- ldr r6, [r0, #0x0]
- ldrb r0, [r6, #0x0]
- cmp r0, #0xff
- beq _02008992
- ldr r0, [sp, #0x0]
- mov r2, #0xf
- and r0, r2
- str r0, [sp, #0xc]
- sub r0, #0x8
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x0]
- mov r2, #0xf0
- and r0, r2
- lsr r7, r0, #0x4
- sub r7, #0x8
-_0200893C:
- lsl r0, r1, #0x1
- add r2, r6, r0
- ldrb r4, [r6, r0]
- ldrb r2, [r2, #0x1]
- ldr r0, [sp, #0xc]
- add r0, r0, r4
- add r2, r7, r2
- lsl r0, r0, #0x18
- lsl r2, r2, #0x18
- lsr r0, r0, #0x18
- lsr r4, r2, #0x18
- mov r2, #0x50
- mul r2, r4
- lsr r5, r0, #0x1
- add r2, r5, r2
- mov r4, #0x1
- tst r0, r4
- ldrb r4, [r3, r2]
- beq _02008974
- mov r0, #0xf0
- and r0, r4
- cmp r0, #0x10
- blt _02008984
- cmp r0, #0x30
- bgt _02008984
- add r4, #0x50
- strb r4, [r3, r2]
- b _02008984
-_02008974:
- mov r0, #0xf
- and r0, r4
- cmp r0, #0x1
- blt _02008984
- cmp r0, #0x3
- bgt _02008984
- add r0, r4, #0x5
- strb r0, [r3, r2]
-_02008984:
- add r0, r1, #0x1
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- lsl r0, r1, #0x1
- ldrb r0, [r6, r0]
- cmp r0, #0xff
- bne _0200893C
-_02008992:
- ldr r0, [sp, #0x0]
- lsr r0, r0, #0x8
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x10]
- add r0, r0, #0x4
- str r0, [sp, #0x10]
- mov r0, r12
- add r0, r0, #0x1
- mov r12, r0
- cmp r0, #0x4
- blt _0200891A
- mov r0, lr
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x4]
- cmp r0, #0x0
- beq _02008A4A
- mov r0, #0x0
- str r0, [sp, #0x8]
- ldr r0, _02008A50 ; =UNK_02105AE8
- str r0, [sp, #0x18]
-_020089BA:
- ldr r0, [sp, #0x18]
- mov r4, #0x0
- ldr r2, [r0, #0x0]
- ldrb r0, [r2, #0x0]
- cmp r0, #0xff
- beq _02008A34
- ldr r0, [sp, #0x0]
- mov r1, #0xf
- and r0, r1
- str r0, [sp, #0x14]
- add r0, #0x48
- str r0, [sp, #0x14]
- ldr r0, [sp, #0x0]
- mov r1, #0xf0
- and r0, r1
- lsr r7, r0, #0x4
- sub r7, #0x8
-_020089DC:
- lsl r0, r4, #0x1
- add r5, r2, r0
- ldrb r1, [r2, r0]
- ldrb r5, [r5, #0x1]
- ldr r0, [sp, #0x14]
- sub r1, #0xe
- add r0, r0, r1
- add r5, r7, r5
- lsl r0, r0, #0x18
- lsl r5, r5, #0x18
- lsr r1, r0, #0x18
- lsr r6, r5, #0x18
- mov r5, #0x50
- lsr r0, r1, #0x1
- mul r5, r6
- add r0, r0, r5
- mov r5, #0x1
- tst r1, r5
- ldrb r5, [r3, r0]
- beq _02008A16
- mov r1, #0xf0
- and r1, r5
- cmp r1, #0x10
- blt _02008A26
- cmp r1, #0x30
- bgt _02008A26
- add r5, #0x50
- strb r5, [r3, r0]
- b _02008A26
-_02008A16:
- mov r1, #0xf
- and r1, r5
- cmp r1, #0x1
- blt _02008A26
- cmp r1, #0x3
- bgt _02008A26
- add r1, r5, #0x5
- strb r1, [r3, r0]
-_02008A26:
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
- lsl r0, r4, #0x1
- ldrb r0, [r2, r0]
- cmp r0, #0xff
- bne _020089DC
-_02008A34:
- ldr r0, [sp, #0x0]
- lsr r0, r0, #0x8
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x18]
- add r0, r0, #0x4
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x8]
- add r0, r0, #0x1
- str r0, [sp, #0x8]
- cmp r0, #0x4
- blt _020089BA
-_02008A4A:
- add sp, #0x1c
- pop {r4-r7, pc}
- nop
-_02008A50: .word UNK_02105AE8
-
- thumb_func_start FUN_02008A54
-FUN_02008A54: ; 0x02008A54
- ldr r2, [r0, #0x0]
- ldr r1, _02008A6C ; =0x41C64E6D
- add r3, r2, #0x0
- mul r3, r1
- ldr r1, _02008A70 ; =0x00006073
- add r1, r3, r1
- str r1, [r0, #0x0]
- lsr r0, r1, #0x10
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- bx lr
- nop
-_02008A6C: .word 0x41C64E6D
-_02008A70: .word 0x00006073
-
- thumb_func_start FUN_02008A74
-FUN_02008A74: ; 0x02008A74
- push {r3-r7, lr}
- ldr r1, _02008AA0 ; =0x000018FE
- mov r6, #0x0
- ldrh r2, [r0, r1]
- lsr r4, r1, #0x1
- add r5, r0, r1
- str r2, [sp, #0x0]
- add r7, sp, #0x0
- mvn r6, r6
-_02008A86:
- ldrh r1, [r5, #0x0]
- ldr r0, [sp, #0x0]
- eor r0, r1
- strh r0, [r5, #0x0]
- add r0, r7, #0x0
- bl FUN_02008A54
- sub r4, r4, #0x1
- sub r5, r5, #0x2
- cmp r4, r6
- bgt _02008A86
- pop {r3-r7, pc}
- nop
-_02008AA0: .word 0x000018FE
diff --git a/arm9/lib/NitroSDK/include/GX_g3.h b/arm9/lib/NitroSDK/include/GX_g3.h
index 765ecc64..2c093370 100644
--- a/arm9/lib/NitroSDK/include/GX_g3.h
+++ b/arm9/lib/NitroSDK/include/GX_g3.h
@@ -181,4 +181,40 @@ typedef union
}
GXBoxTestParam;
+
+
+
+#define GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr) \
+ ((u32)(((addr) >> 3) | \
+ ((texFmt) << REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT) | \
+ ((texGen) << REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT) | \
+ ((s) << REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT) | \
+ ((t) << REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT) | \
+ ((repeat) << REG_G3_TEXIMAGE_PARAM_RS_SHIFT) | \
+ ((flip) << REG_G3_TEXIMAGE_PARAM_FS_SHIFT) | \
+ ((pltt0) << REG_G3_TEXIMAGE_PARAM_TR_SHIFT)))
+
+#define GX_PACK_POLYGONATTR_PARAM(light, polyMode, cullMode, polygonID, alpha, misc) \
+ ((u32)(((light) << REG_G3_POLYGON_ATTR_LE_SHIFT) | \
+ ((polyMode) << REG_G3_POLYGON_ATTR_PM_SHIFT) | \
+ ((cullMode) << REG_G3_POLYGON_ATTR_BK_SHIFT) | \
+ (misc) | \
+ ((polygonID) << REG_G3_POLYGON_ATTR_ID_SHIFT) | \
+ ((alpha) << REG_G3_POLYGON_ATTR_ALPHA_SHIFT)))
+
+
+#define GX_PACK_TEXPLTTBASE_PARAM(addr, texFmt) \
+ ((u32)((addr) >> (4 - ((texFmt) == GX_TEXFMT_PLTT4))))
+
+
+#define GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor) \
+ ((u32)((diffuse) | \
+ ((ambient) << REG_G3_DIF_AMB_AMBIENT_RED_SHIFT) | \
+ ((IsSetVtxColor != FALSE) << REG_G3_DIF_AMB_C_SHIFT)))
+
+#define GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess) \
+ ((u32)((specular) | \
+ ((emission) << REG_G3_SPE_EMI_EMISSION_RED_SHIFT) | \
+ ((IsShininess != FALSE) << REG_G3_SPE_EMI_S_SHIFT)))
+
#endif //GUARD_GX_G3_H
diff --git a/arm9/lib/NitroSDK/include/GX_g3imm.h b/arm9/lib/NitroSDK/include/GX_g3imm.h
index f811dc68..33ebdef2 100644
--- a/arm9/lib/NitroSDK/include/GX_g3imm.h
+++ b/arm9/lib/NitroSDK/include/GX_g3imm.h
@@ -1,10 +1,68 @@
#ifndef GUARD_GX_G3IMM_H
#define GUARD_GX_G3IMM_H
+#include "GX_g3.h"
#include "fx.h"
void G3_LoadMtx43(struct Mtx43 *mtx);
void G3_MultMtx43(struct Mtx43 *mtx);
void G3_MultMtx33(struct Mtx33 *mtx);
-#endif //GUARD_GX_G3IMM_H
+
+static inline void G3_PushMtx()
+{
+ reg_G3_MTX_PUSH = 0;
+}
+
+static inline void G3_PopMtx(int num)
+{
+ reg_G3_MTX_POP = (u32)num;
+}
+
+static inline void G3_Identity()
+{
+ reg_G3_MTX_IDENTITY = 0;
+}
+
+
+static inline void G3_Translate(fx32 x, fx32 y, fx32 z)
+{
+ reg_G3_MTX_TRANS = (u32)x;
+ reg_G3_MTX_TRANS = (u32)y;
+ reg_G3_MTX_TRANS = (u32)z;
+}
+
+
+static inline void G3_PolygonAttr(int light, GXPolygonMode polyMode, GXCull cullMode, int polygonID, int alpha, int misc) {
+ reg_G3_POLYGON_ATTR = GX_PACK_POLYGONATTR_PARAM(light,
+ polyMode, cullMode, polygonID, alpha, misc);
+}
+
+static inline void G3_TexImageParam(GXTexFmt texFmt,
+ GXTexGen texGen,
+ GXTexSizeS s,
+ GXTexSizeT t,
+ GXTexRepeat repeat,
+ GXTexFlip flip, GXTexPlttColor0 pltt0, u32 addr) {
+ reg_G3_TEXIMAGE_PARAM = GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr);
+}
+
+
+static inline void G3_TexPlttBase(u32 addr, GXTexFmt texfmt)
+{
+ u32 param = GX_PACK_TEXPLTTBASE_PARAM(addr, texfmt);
+ reg_G3_TEXPLTT_BASE = param;
+}
+
+
+static inline void G3_MaterialColorDiffAmb(GXRgb diffuse, GXRgb ambient, BOOL IsSetVtxColor)
+{
+ reg_G3_DIF_AMB = GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor);
+}
+
+static inline void G3_MaterialColorSpecEmi(GXRgb specular, GXRgb emission, BOOL IsShininess)
+{
+ reg_G3_SPE_EMI = GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess);
+}
+
+#endif //GUARD_GX_G3IMM_H
diff --git a/arm9/lib/NitroSDK/include/registers.h b/arm9/lib/NitroSDK/include/registers.h
index b4fd8ce7..d31cee22 100644
--- a/arm9/lib/NitroSDK/include/registers.h
+++ b/arm9/lib/NitroSDK/include/registers.h
@@ -1066,4 +1066,154 @@
#define REG_OS_TM3CNT_H_PS_SIZE 2
#define REG_OS_TM3CNT_H_PS_MASK 0x0003
+// POLYGON_ATTR
+
+#define REG_G3_POLYGON_ATTR_ID_SHIFT 24
+#define REG_G3_POLYGON_ATTR_ID_SIZE 6
+#define REG_G3_POLYGON_ATTR_ID_MASK 0x3f000000
+
+#define REG_G3_POLYGON_ATTR_ALPHA_SHIFT 16
+#define REG_G3_POLYGON_ATTR_ALPHA_SIZE 5
+#define REG_G3_POLYGON_ATTR_ALPHA_MASK 0x001f0000
+
+#define REG_G3_POLYGON_ATTR_FE_SHIFT 15
+#define REG_G3_POLYGON_ATTR_FE_SIZE 1
+#define REG_G3_POLYGON_ATTR_FE_MASK 0x00008000
+
+#define REG_G3_POLYGON_ATTR_DT_SHIFT 14
+#define REG_G3_POLYGON_ATTR_DT_SIZE 1
+#define REG_G3_POLYGON_ATTR_DT_MASK 0x00004000
+
+#define REG_G3_POLYGON_ATTR_D1_SHIFT 13
+#define REG_G3_POLYGON_ATTR_D1_SIZE 1
+#define REG_G3_POLYGON_ATTR_D1_MASK 0x00002000
+
+#define REG_G3_POLYGON_ATTR_FC_SHIFT 12
+#define REG_G3_POLYGON_ATTR_FC_SIZE 1
+#define REG_G3_POLYGON_ATTR_FC_MASK 0x00001000
+
+#define REG_G3_POLYGON_ATTR_XL_SHIFT 11
+#define REG_G3_POLYGON_ATTR_XL_SIZE 1
+#define REG_G3_POLYGON_ATTR_XL_MASK 0x00000800
+
+#define REG_G3_POLYGON_ATTR_FR_SHIFT 7
+#define REG_G3_POLYGON_ATTR_FR_SIZE 1
+#define REG_G3_POLYGON_ATTR_FR_MASK 0x00000080
+
+#define REG_G3_POLYGON_ATTR_BK_SHIFT 6
+#define REG_G3_POLYGON_ATTR_BK_SIZE 1
+#define REG_G3_POLYGON_ATTR_BK_MASK 0x00000040
+
+#define REG_G3_POLYGON_ATTR_PM_SHIFT 4
+#define REG_G3_POLYGON_ATTR_PM_SIZE 2
+#define REG_G3_POLYGON_ATTR_PM_MASK 0x00000030
+
+#define REG_G3_POLYGON_ATTR_LE_SHIFT 0
+#define REG_G3_POLYGON_ATTR_LE_SIZE 4
+#define REG_G3_POLYGON_ATTR_LE_MASK 0x0000000f
+
+// TEXIMAGE_PARAM
+
+#define REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT 30
+#define REG_G3_TEXIMAGE_PARAM_TGEN_SIZE 2
+#define REG_G3_TEXIMAGE_PARAM_TGEN_MASK 0xc0000000
+
+#define REG_G3_TEXIMAGE_PARAM_TR_SHIFT 29
+#define REG_G3_TEXIMAGE_PARAM_TR_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_TR_MASK 0x20000000
+
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT 26
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_TEXFMT_MASK 0x1c000000
+
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT 23
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_T_SIZE_MASK 0x03800000
+
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT 20
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SIZE 3
+#define REG_G3_TEXIMAGE_PARAM_V_SIZE_MASK 0x00700000
+
+#define REG_G3_TEXIMAGE_PARAM_FT_SHIFT 19
+#define REG_G3_TEXIMAGE_PARAM_FT_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_FT_MASK 0x00080000
+
+#define REG_G3_TEXIMAGE_PARAM_FS_SHIFT 18
+#define REG_G3_TEXIMAGE_PARAM_FS_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_FS_MASK 0x00040000
+
+#define REG_G3_TEXIMAGE_PARAM_RT_SHIFT 17
+#define REG_G3_TEXIMAGE_PARAM_RT_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_RT_MASK 0x00020000
+
+#define REG_G3_TEXIMAGE_PARAM_RS_SHIFT 16
+#define REG_G3_TEXIMAGE_PARAM_RS_SIZE 1
+#define REG_G3_TEXIMAGE_PARAM_RS_MASK 0x00010000
+
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SHIFT 0
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SIZE 16
+#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_MASK 0x0000ffff
+
+
+// DIF_AMB
+
+#define REG_G3_DIF_AMB_AMBIENT_BLUE_SHIFT 26
+#define REG_G3_DIF_AMB_AMBIENT_BLUE_SIZE 5
+#define REG_G3_DIF_AMB_AMBIENT_BLUE_MASK 0x7c000000
+
+#define REG_G3_DIF_AMB_AMBIENT_GREEN_SHIFT 21
+#define REG_G3_DIF_AMB_AMBIENT_GREEN_SIZE 5
+#define REG_G3_DIF_AMB_AMBIENT_GREEN_MASK 0x03e00000
+
+#define REG_G3_DIF_AMB_AMBIENT_RED_SHIFT 16
+#define REG_G3_DIF_AMB_AMBIENT_RED_SIZE 5
+#define REG_G3_DIF_AMB_AMBIENT_RED_MASK 0x001f0000
+
+#define REG_G3_DIF_AMB_C_SHIFT 15
+#define REG_G3_DIF_AMB_C_SIZE 1
+#define REG_G3_DIF_AMB_C_MASK 0x00008000
+
+#define REG_G3_DIF_AMB_DIFFUSE_BLUE_SHIFT 10
+#define REG_G3_DIF_AMB_DIFFUSE_BLUE_SIZE 5
+#define REG_G3_DIF_AMB_DIFFUSE_BLUE_MASK 0x00007c00
+
+#define REG_G3_DIF_AMB_DIFFUSE_GREEN_SHIFT 5
+#define REG_G3_DIF_AMB_DIFFUSE_GREEN_SIZE 5
+#define REG_G3_DIF_AMB_DIFFUSE_GREEN_MASK 0x000003e0
+
+#define REG_G3_DIF_AMB_DIFFUSE_RED_SHIFT 0
+#define REG_G3_DIF_AMB_DIFFUSE_RED_SIZE 5
+#define REG_G3_DIF_AMB_DIFFUSE_RED_MASK 0x0000001f
+
+
+// SPE_EMI
+
+#define REG_G3_SPE_EMI_EMISSION_BLUE_SHIFT 26
+#define REG_G3_SPE_EMI_EMISSION_BLUE_SIZE 5
+#define REG_G3_SPE_EMI_EMISSION_BLUE_MASK 0x7c000000
+
+#define REG_G3_SPE_EMI_EMISSION_GREEN_SHIFT 21
+#define REG_G3_SPE_EMI_EMISSION_GREEN_SIZE 5
+#define REG_G3_SPE_EMI_EMISSION_GREEN_MASK 0x03e00000
+
+#define REG_G3_SPE_EMI_EMISSION_RED_SHIFT 16
+#define REG_G3_SPE_EMI_EMISSION_RED_SIZE 5
+#define REG_G3_SPE_EMI_EMISSION_RED_MASK 0x001f0000
+
+#define REG_G3_SPE_EMI_S_SHIFT 15
+#define REG_G3_SPE_EMI_S_SIZE 1
+#define REG_G3_SPE_EMI_S_MASK 0x00008000
+
+#define REG_G3_SPE_EMI_SPECULAR_BLUE_SHIFT 10
+#define REG_G3_SPE_EMI_SPECULAR_BLUE_SIZE 5
+#define REG_G3_SPE_EMI_SPECULAR_BLUE_MASK 0x00007c00
+
+#define REG_G3_SPE_EMI_SPECULAR_GREEN_SHIFT 5
+#define REG_G3_SPE_EMI_SPECULAR_GREEN_SIZE 5
+#define REG_G3_SPE_EMI_SPECULAR_GREEN_MASK 0x000003e0
+
+#define REG_G3_SPE_EMI_SPECULAR_RED_SHIFT 0
+#define REG_G3_SPE_EMI_SPECULAR_RED_SIZE 5
+#define REG_G3_SPE_EMI_SPECULAR_RED_MASK 0x0000001f
+
#endif //POKEDIAMOND_ARM9_REGISTERS_H
diff --git a/arm9/lib/libnns/include/NNS_g2d.h b/arm9/lib/libnns/include/NNS_g2d.h
index d65f0430..45d348ef 100644
--- a/arm9/lib/libnns/include/NNS_g2d.h
+++ b/arm9/lib/libnns/include/NNS_g2d.h
@@ -220,5 +220,7 @@ void NNS_G2dApplyAndResetOamManagerBuffer(NNSG2dOamManager *oamManager);
u32 NNS_G2dEntryOamManagerOamWithAffineIdx(
NNSG2dOamManager *oamManager, u32 param1, u32 param2);
u32 NNS_G2dEntryOamManagerAffine(NNSG2dOamManager *oamManager, u32 param1);
+void NNS_G2dInitImageProxy(NNSG2dImageProxy *);
+void NNS_G2dInitImagePaletteProxy(NNSG2dImagePaletteProxy *);
#endif //NNSYS_NNS_G2D_H
diff --git a/arm9/modules/63/include/mod63_021DB450.h b/arm9/modules/63/include/mod63_021DB450.h
index ac3da1b6..ff42aef5 100644
--- a/arm9/modules/63/include/mod63_021DB450.h
+++ b/arm9/modules/63/include/mod63_021DB450.h
@@ -2,11 +2,12 @@
#define POKEDIAMOND_MOD63_021DB450_H
#include "global.h"
+#include "unk_02006D98.h"
typedef struct UnkStruct63_021DB450 //intro base struct type
{
- struct UnkStruct63_021DB450 * field_00; //oddly requires this to be set to progress past copyright/pokemon screen.
- u32 field_04[3]; //mon animations?
+ struct UnkStruct_02006D98 * field_00; //oddly requires this to be set to progress past copyright/pokemon screen.
+ struct UnkStruct_02006D98_2 * field_04[3]; //mon animations?
u32 field_10;
void * field_14;
void * field_18;
@@ -21,13 +22,7 @@ typedef struct UnkStruct63_021DB450 //intro base struct type
u8 filler_34[0x30];
} UnkStruct63_021DB450;
-typedef struct UnkStruct63_021DB49C
-{
- u32 field_00;
- u32 field_04;
- u32 field_08;
- u32 field_0C;
-} UnkStruct63_021DB49C;
+
typedef struct UnkStruct63_021DBEF0
{
diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c
index 31917596..f3608116 100644
--- a/arm9/modules/63/src/mod63_021DB450.c
+++ b/arm9/modules/63/src/mod63_021DB450.c
@@ -3,6 +3,7 @@
#include "constants/species.h"
#include "gx.h"
#include "mod63_021DB450.h"
+#include "unk_02006D98.h"
//todo resolve to static code
extern u32 (*NNS_GfdDefaultFuncAllocTexVram)(u32 param0, u32 param1, u32 param2);
@@ -12,38 +13,30 @@ extern void FUN_0201327C(u32 param0);
extern void FUN_020132BC(u32 param0);
extern void * FUN_02012CDC(void *, void *, void *, u32, u32, u32);
-extern u32 FUN_020073A0(struct UnkStruct63_021DB450 *, struct UnkStruct63_021DB49C *, u32, u32, u32, u32, u32, u32);
-extern struct UnkStruct63_021DB450 * FUN_02006D98(u32);
-extern void FUN_02068C00(struct UnkStruct63_021DB49C*, u16, u32, u32, u32, u32, u32);
+extern void FUN_02068C00(struct UnkStruct_02006D98_4*, u16, u32, u32, u32, u32, u32);
extern void FUN_02012CC8(void);
-extern void FUN_02007558(u32, u32, u32);
extern void Camera_SetPerspectiveClippingPlane(u32, u32, u32);
extern u32 FUN_0201343C(void);
extern void FUN_02013194(void *, u32, u32, u32);
extern u32 FUN_0201318C(u32, u32, u32);
extern void FUN_02012DE4(void *);
-extern void FUN_020072E8(struct UnkStruct63_021DB450 *);
-extern void FUN_020081C4(struct UnkStruct63_021DB450 *);
extern void FUN_020222AC(void);
extern void NNS_G2dSetupSoftwareSpriteCamera(void);
-extern u32 FUN_02006ED4(struct UnkStruct63_021DB450 *);
extern void FUN_020222B4(u32, u32);
extern void FUN_02013440(void *, u32);
-extern void FUN_020133AC(void *, u32, const void *, u32);
+extern void FUN_020133AC(void *, u32, const void *, struct UnkStruct_02006D98_2 *);
extern BOOL FUN_020133C8(void *);
-extern void FUN_020079E0(u32, u32, s32);
extern void FUN_02013364(void);
extern void FUN_02013388(void);
-void * FUN_0201341C(struct UnkStruct63_021DB450 *);
-int FUN_0200782C(void *, int);
+struct UnkStruct_02006D98_2 * FUN_0201341C(struct UnkStruct63_021DB450 *);
const s32 MOD63_021DBEC0[3] = {0x703, 0x7CE, 0x8A8};
const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3];
@@ -71,7 +64,7 @@ THUMB_FUNC u32 MOD63_021DB498(void)
THUMB_FUNC void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB450 * arg0) //TODO: this does a lot more than setup anim sprites
{
- struct UnkStruct63_021DB49C sp1C;
+ struct UnkStruct_02006D98_4 sp1C;
int introMonArray[3] = {SPECIES_TURTWIG, SPECIES_CHIMCHAR, SPECIES_PIPLUP};
arg0->field_00 = FUN_02006D98(76); //this is needed to get into the world view, otherwise it is just black
@@ -115,7 +108,7 @@ THUMB_FUNC void MOD63_021DB5A8(UnkStruct63_021DB450 *param0)
}
FUN_020222AC();
NNS_G2dSetupSoftwareSpriteCamera();
- (void)FUN_02006ED4(param0->field_00);
+ FUN_02006ED4(param0->field_00);
MOD63_021DB934();
FUN_020222B4(1, 0);
}
@@ -193,7 +186,7 @@ THUMB_FUNC BOOL MOD63_021DB5CC(UnkStruct63_021DB450 *param0, u32 param1, s32 par
THUMB_FUNC BOOL MOD63_021DB720(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0x0, 0x6);
FUN_020079E0(field, 0x1, -0x10);
FUN_020079E0(field, 0xC, -0x80);
@@ -210,7 +203,7 @@ THUMB_FUNC BOOL MOD63_021DB720(UnkStruct63_021DB450 *param0, u32 param1)
THUMB_FUNC BOOL MOD63_021DB784(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0x0, -0x3);
FUN_020079E0(field, 0x1, -0x12);
param0->field_1D++;
@@ -225,7 +218,7 @@ THUMB_FUNC BOOL MOD63_021DB784(UnkStruct63_021DB450 *param0, u32 param1)
THUMB_FUNC BOOL MOD63_021DB7D0(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0x0, -0x10);
FUN_020079E0(field, 0x1, -0x10);
FUN_020079E0(field, 0xC, -0x80);
@@ -242,7 +235,7 @@ THUMB_FUNC BOOL MOD63_021DB7D0(UnkStruct63_021DB450 *param0, u32 param1)
THUMB_FUNC BOOL MOD63_021DB838(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0, -0x6);
FUN_020079E0(field, 1, -0x10);
param0->field_1D++;
@@ -257,7 +250,7 @@ THUMB_FUNC BOOL MOD63_021DB838(UnkStruct63_021DB450 *param0, u32 param1)
THUMB_FUNC BOOL MOD63_021DB884(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0, 0x8);
FUN_020079E0(field, 1, -0x10);
FUN_020079E0(field, 0xC, -0x80);
@@ -274,7 +267,7 @@ THUMB_FUNC BOOL MOD63_021DB884(UnkStruct63_021DB450 *param0, u32 param1)
THUMB_FUNC BOOL MOD63_021DB8E8(UnkStruct63_021DB450 *param0, u32 param1)
{
- u32 field = param0->field_04[param1];
+ struct UnkStruct_02006D98_2 *field = param0->field_04[param1];
FUN_020079E0(field, 0, 0x6);
FUN_020079E0(field, 1, -0x14);
param0->field_1D++;
@@ -295,7 +288,7 @@ THUMB_FUNC void MOD63_021DB934(void)
THUMB_FUNC void MOD63_021DB940(struct UnkStruct63_021DB450 * a0)
{
- void * r4 = FUN_0201341C(a0);
+ struct UnkStruct_02006D98_2 * r4 = FUN_0201341C(a0);
int sp0[3] = {0, 0, 0};
sp0[0] = (FUN_0200782C(r4, 0) - 0x80) * 0xAC;
sp0[1] = (FUN_0200782C(r4, 1) - 0x60) * 0xAC;
diff --git a/arm9/src/render_window.c b/arm9/src/render_window.c
index 33682cc0..95edb982 100644
--- a/arm9/src/render_window.c
+++ b/arm9/src/render_window.c
@@ -9,6 +9,7 @@
#include "unk_020061E8.h"
#include "unk_0200BB14.h"
#include "unk_0200CA44.h"
+#include "unk_02006D98.h"
const struct UnkStruct_0200CABC_3 UNK_020ECE88 = {
10,
@@ -50,8 +51,6 @@ extern void MOD05_021D971C(struct UnkStruct_0200CABC_2 *param0,
u32 param4,
u32 param5);
extern u32 *MOD05_021D9820(struct UnkStruct_0200CABC_2 *param0, void *);
-extern struct UnkStruct63_021DB450 *FUN_02006D98(u32);
-extern void FUN_020072E8(struct UnkStruct63_021DB450 *param0);
extern void FUN_02012400(u16, u16, u16, void *, void *);
extern u32 NNS_G2dGetImageLocation(u32, u32);
extern void *FUN_02012470(u16, u16, u16);
@@ -898,7 +897,7 @@ THUMB_FUNC void FUN_0200DE30(struct UnkStruct_0200CABC_2 *param0, u8 param1, u8
THUMB_FUNC void FUN_0200DE80(struct UnkStruct_0200CABC_2 *param0, u16 param1, u8 param2)
{
- struct UnkStruct63_021DB450 *r7 = FUN_02006D98(param0->unk162);
+ struct UnkStruct_02006D98 *r7 = FUN_02006D98(param0->unk162);
struct SomeDrawPokemonStruct stc;
FUN_02068C00(&stc, param1, param2, 2, 0, 0, 0);
FUN_0200DEF4(param0, &stc);
@@ -907,7 +906,7 @@ THUMB_FUNC void FUN_0200DE80(struct UnkStruct_0200CABC_2 *param0, u16 param1, u8
THUMB_FUNC void FUN_0200DEC0(struct UnkStruct_0200CABC_2 *param0, struct Pokemon *param1)
{
- struct UnkStruct63_021DB450 *r6 = FUN_02006D98(param0->unk162);
+ struct UnkStruct_02006D98 *r6 = FUN_02006D98(param0->unk162);
struct SomeDrawPokemonStruct st0;
FUN_02068B68(&st0, param1, 2);
FUN_0200DEF4(param0, &st0);
diff --git a/arm9/src/unk_02006D98.c b/arm9/src/unk_02006D98.c
new file mode 100644
index 00000000..ee7a8341
--- /dev/null
+++ b/arm9/src/unk_02006D98.c
@@ -0,0 +1,1719 @@
+#include "unk_02006D98.h"
+
+#include "global.h"
+#include "MI_memory.h"
+#include "NNS_g2d.h"
+#include "filesystem.h"
+#include "heap.h"
+#include "mod63_021DB450.h"
+#include "palette.h"
+#include "poketool/pokegra/otherpoke.naix"
+#include "registers.h"
+
+const struct UnkStruct_02006D98_3 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 UnkStruct_02006D98_3 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 UnkStruct_02006D98_3 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 UnkStruct_02006D98_3 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_020ECBD0[4][4] = {
+ { 160, 160, 224, 176 }, { 160, 160, 224, 176 }, { 160, 176, 224, 192 }, { 160, 192, 224, 208 }
+};
+
+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 struct UnkStruct_02006D98_3 *UNK_02105AE8[] = {
+ UNK_020ECCE2,
+ UNK_020ECC78,
+ UNK_020ECC10,
+ UNK_020ECDCC,
+};
+
+extern void NNS_G2dSetupSoftwareSpriteCamera(void);
+extern void NNS_G3dGeFlushBuffer();
+extern void NNS_G2dDrawSpriteFast(s16 param0,
+ s16 param1,
+ int param2,
+ int param3,
+ int param4,
+ int param5,
+ int param6,
+ int param7,
+ int param8);
+
+THUMB_FUNC struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id)
+{
+ struct UnkStruct_02006D98 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02006D98));
+ 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 UnkStruct_02006D98_2));
+ }
+
+ 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->unk2B8.pixelFmt = stc->pixelFmt;
+ ptr->unk2B8.mapingType = stc->mapingType;
+ ptr->unk2B8.characterFmt = 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;
+}
+
+THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0)
+{
+ s32 arg3;
+ s32 arg4;
+
+ FUN_020082A8(param0);
+ FUN_020086F4(param0);
+
+ NNS_G3dGeFlushBuffer();
+
+ G3_PushMtx();
+
+ G3_TexImageParam(param0->unk260.attr.fmt,
+ GX_TEXGEN_TEXCOORD,
+ param0->unk260.attr.sizeS,
+ param0->unk260.attr.sizeT,
+ GX_TEXREPEAT_NONE,
+ GX_TEXFLIP_NONE,
+ param0->unk260.attr.plttUse,
+ param0->unk29C);
+
+ 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)
+ {
+ G3_Identity();
+ }
+
+ FUN_02007F48(&param0->unk000[st18]);
+
+ G3_TexPlttBase(param0->unk2A4 + st18 * 0x20, param0->unk260.attr.fmt);
+ G3_Translate((fx32)((param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc),
+ (fx32)((param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc),
+ (fx32)(param0->unk000[st18].unk28 << 0xc));
+
+ 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]);
+
+ G3_Translate(-(fx32)((param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc),
+ -(fx32)((param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc),
+ -(fx32)(param0->unk000[st18].unk28 << 0xc));
+
+ G3_MaterialColorDiffAmb(
+ (GXRgb)(param0->unk000[st18].unk50_0 | (param0->unk000[st18].unk50_5 << 5) |
+ (param0->unk000[st18].unk50_a << 10)),
+ (GXRgb)(param0->unk000[st18].unk50_f | (param0->unk000[st18].unk50_14 << 5) |
+ (param0->unk000[st18].unk50_19 << 10)),
+ TRUE);
+
+ G3_MaterialColorSpecEmi(0x4210, 0, FALSE);
+
+ G3_PolygonAttr(GX_LIGHTMASK_NONE,
+ GX_POLYGONMODE_MODULATE,
+ GX_CULL_NONE,
+ (int)param0->unk000[st18].unk00_1,
+ (int)param0->unk000[st18].unk54_2,
+ 0);
+
+ if (param0->unk000[st18].unk54_1 != 0)
+ {
+ int r6 = param0->unk000[st18].unk44 + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][0];
+ int r12 = param0->unk000[st18].unk46;
+ int r1 = param0->unk000[st18].unk45 + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][1];
+ int r7 = param0->unk000[st18].unk47;
+ int r0 = r12 + r6;
+
+ NNS_G2dDrawSpriteFast((s16)(param0->unk000[st18].unk24 - 40 +
+ param0->unk000[st18].unk44 + param0->unk000[st18].unk2C),
+ (s16)(param0->unk000[st18].unk26 - 40 + param0->unk000[st18].unk45 +
+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2),
+ (int)(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(
+ (s16)(param0->unk000[st18].unk24 - (arg3 / 2) + param0->unk000[st18].unk2C),
+ (s16)(param0->unk000[st18].unk26 - (arg4 / 2) + param0->unk000[st18].unk2E -
+ param0->unk000[st18].unk6C.unk2),
+ (int)(param0->unk000[st18].unk28 + param0->unk000[st18].unk30),
+ arg3,
+ arg4,
+ UNK_020ECD4C[st18][param0->unk000[st18].unk5B][0],
+ UNK_020ECD4C[st18][param0->unk000[st18].unk5B][1],
+ UNK_020ECD4C[st18][param0->unk000[st18].unk5B][2],
+ UNK_020ECD4C[st18][param0->unk000[st18].unk5B][3]);
+ }
+
+ if (param0->unk000[st18].unk6C.unk0_0 == 0 || param0->unk000[st18].unk6C.unk0_5 == 0 ||
+ param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0)
+ {
+ continue;
+ }
+
+ if (param0->unk2E3 != 1)
+ {
+ G3_Identity();
+ }
+
+ G3_TexPlttBase((param0->unk2A4 + ((param0->unk000[st18].unk6C.unk0_0 + 3) << 5)),
+ param0->unk260.attr.fmt);
+
+ if (param0->unk000[st18].unk6C.unk0_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.unk0_2 != 0)
+ {
+ param0->unk000[st18].unk6C.unk4 =
+ (s16)(param0->unk000[st18].unk24 + param0->unk000[st18].unk2C +
+ param0->unk000[st18].unk6C.unk8);
+ }
+
+ if (param0->unk000[st18].unk6C.unk0_3 != 0)
+ {
+ param0->unk000[st18].unk6C.unk6 =
+ (s16)(param0->unk000[st18].unk26 + param0->unk000[st18].unk2E +
+ param0->unk000[st18].unk6C.unka);
+ }
+
+ NNS_G2dDrawSpriteFast((s16)(param0->unk000[st18].unk6C.unk4 - (arg3 / 2)),
+ (s16)(param0->unk000[st18].unk6C.unk6 - (arg4 / 2)),
+ 0xFFFFFC18,
+ arg3,
+ arg4,
+ UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][0],
+ UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][1],
+ UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][2],
+ UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][3]);
+ }
+
+ G3_PopMtx(1);
+}
+
+THUMB_FUNC void FUN_020072E8(struct UnkStruct_02006D98 *param0)
+{
+ FreeToHeap(param0->unk2AC);
+ FreeToHeap(param0->unk2B0);
+ FreeToHeap(param0->unk2B4);
+ FreeToHeap(param0);
+}
+
+THUMB_FUNC void FUN_02007314(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk59 = 0;
+ for (s32 i = 0; i < 10; i++)
+ {
+ param0->unk5C[i] = 0;
+ }
+ if (param0->unk84[param0->unk59].unk0 == -1)
+ {
+ param0->unk5B = 0;
+ return;
+ }
+
+ param0->unk58 = 1;
+ param0->unk5B = (u8)param0->unk84[param0->unk59].unk0;
+ param0->unk5A = param0->unk84[param0->unk59].unk1;
+}
+
+THUMB_FUNC void FUN_0200737C(
+ struct UnkStruct_02006D98_2 *param0, struct UnkStruct_02006D98_sub *param1)
+{
+ MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct_02006D98_sub) * 10);
+}
+
+THUMB_FUNC BOOL FUN_02007390(struct UnkStruct_02006D98_2 *param0)
+{
+ if (param0->unk58 != 0)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+THUMB_FUNC struct UnkStruct_02006D98_2 *FUN_020073A0(struct UnkStruct_02006D98 *param0,
+ struct UnkStruct_02006D98_4 *param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ const void *param6,
+ void (*param7)(struct UnkStruct_02006D98_2 *, void *))
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ if (param0->unk000[i].unk00_0 == 0)
+ {
+ break;
+ }
+ }
+ GF_ASSERT(i != 4);
+
+ return FUN_020073E8(param0, param1, param2, param3, param4, param5, i, param6, param7);
+}
+
+THUMB_FUNC struct UnkStruct_02006D98_2 *FUN_020073E8(struct UnkStruct_02006D98 *param0,
+ struct UnkStruct_02006D98_4 *param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ s32 param6,
+ const void *param7,
+ void (*param8)(struct UnkStruct_02006D98_2 *, void *))
+{
+ GF_ASSERT(param0->unk000[param6].unk00_0 == 0);
+
+ MIi_CpuClearFast(0, &param0->unk000[param6], sizeof(struct UnkStruct_02006D98_2));
+ param0->unk000[param6].unk00_0 = 1;
+ param0->unk000[param6].unk00_7 = 1;
+ param0->unk000[param6].unk00_8 = 1;
+ param0->unk000[param6].unk00_1 = param5;
+
+ param0->unk000[param6].unk04 = *param1;
+ param0->unk000[param6].unk14 = *param1;
+ param0->unk000[param6].unk24 = (s16)param2;
+ param0->unk000[param6].unk26 = (s16)param3;
+ param0->unk000[param6].unk28 = param4;
+ param0->unk000[param6].unk34 = 0x100;
+ param0->unk000[param6].unk36 = 0x100;
+ param0->unk000[param6].unk54_2 = 0x1f;
+ param0->unk000[param6].unk50_0 = 0x1f;
+ param0->unk000[param6].unk50_5 = 0x1f;
+ param0->unk000[param6].unk50_a = 0x1f;
+ param0->unk000[param6].unk50_f = 0x10;
+ param0->unk000[param6].unk50_14 = 0x10;
+ param0->unk000[param6].unk50_19 = 0x10;
+ param0->unk000[param6].unk68 = param8;
+ param0->unk000[param6].unk6C.unk4 = (s16)param2;
+ param0->unk000[param6].unk6C.unk6 = (s16)param3;
+ param0->unk000[param6].unk6C.unk0_2 = 1;
+ param0->unk000[param6].unk6C.unk0_3 = 1;
+ param0->unk000[param6].unk6C.unk0_4 = 1;
+
+ if (param7 != NULL)
+ {
+ MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14);
+ }
+
+ return &param0->unk000[param6];
+}
+
+THUMB_FUNC void FUN_02007534(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk00_0 = 0;
+}
+
+THUMB_FUNC void FUN_02007540(struct UnkStruct_02006D98 *param0)
+{
+ for (s32 i = 0; i < 4; i++)
+ {
+ FUN_02007534(&param0->unk000[i]);
+ }
+}
+
+THUMB_FUNC void FUN_02007558(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2)
+{
+ switch (param1)
+ {
+ case 0:
+ param0->unk24 = (s16)param2;
+ break;
+ case 1:
+ param0->unk26 = (s16)param2;
+ break;
+ case 2:
+ param0->unk28 = param2;
+ break;
+ case 3:
+ param0->unk2C = (s16)param2;
+ break;
+ case 4:
+ param0->unk2E = (s16)param2;
+ break;
+ case 5:
+ param0->unk30 = param2;
+ break;
+ case 6:
+ param0->unk54_0 = param2;
+ break;
+ case 7:
+ param0->unk38 = (u16)param2;
+ break;
+ case 8:
+ param0->unk3A = (u16)param2;
+ break;
+ case 9:
+ param0->unk3C = (u16)param2;
+ break;
+ case 10:
+ param0->unk40 = (s16)param2;
+ break;
+ case 11:
+ param0->unk42 = (s16)param2;
+ break;
+ case 12:
+ param0->unk34 = (s16)param2;
+ break;
+ case 13:
+ param0->unk36 = (s16)param2;
+ break;
+ case 14:
+ param0->unk54_1 = param2;
+ break;
+ case 15:
+ param0->unk44 = (u8)param2;
+ break;
+ case 16:
+ param0->unk45 = (u8)param2;
+ break;
+ case 17:
+ param0->unk46 = (u8)param2;
+ break;
+ case 18:
+ param0->unk47 = (u8)param2;
+ break;
+ case 19:
+ param0->unk6C.unk4 = (s16)param2;
+ break;
+ case 20:
+ param0->unk6C.unk6 = (s16)param2;
+ break;
+ case 21:
+ param0->unk6C.unk8 = (s16)param2;
+ break;
+ case 22:
+ param0->unk6C.unka = (s16)param2;
+ break;
+ case 23:
+ param0->unk54_2 = param2;
+ break;
+ case 24:
+ param0->unk50_0 = param2;
+ break;
+ case 25:
+ param0->unk50_5 = param2;
+ break;
+ case 26:
+ param0->unk50_a = param2;
+ break;
+ case 27:
+ param0->unk50_f = param2;
+ break;
+ case 28:
+ param0->unk50_14 = param2;
+ break;
+ case 29:
+ param0->unk50_19 = param2;
+ break;
+ case 30:
+ param0->unk54_C = param2;
+ param0->unk00_8 = 1;
+ break;
+ case 31:
+ param0->unk4C = param2;
+ param0->unk00_8 = 1;
+ break;
+ case 32:
+ param0->unk48 = (u8)param2;
+ param0->unk00_8 = 1;
+ break;
+ case 33:
+ param0->unk49 = (u8)param2;
+ param0->unk00_8 = 1;
+ break;
+ case 34:
+ param0->unk4A = (u8)param2;
+ break;
+ case 35:
+ param0->unk54_9 = param2;
+ param0->unk00_7 = 1;
+ break;
+ case 36:
+ param0->unk54_A = param2;
+ param0->unk00_7 = 1;
+ break;
+ case 37:
+ param0->unk54_B = param2;
+ break;
+ case 38:
+ param0->unk5B = (u8)param2;
+ break;
+ case 40:
+ param0->unk54_D = param2;
+ param0->unk00_7 = 1;
+ break;
+ case 41:
+ param0->unk6C.unk2 = (s8)param2;
+ break;
+ case 42:
+ param0->unk6C.unk0_0 = (u16)param2;
+ param0->unk00_8 = 1;
+ break;
+ case 43:
+ param0->unk6C.unk0_2 = (u16)param2;
+ break;
+ case 44:
+ param0->unk6C.unk0_3 = (u16)param2;
+ break;
+ case 45:
+ param0->unk6C.unk0_4 = (u16)param2;
+ break;
+ case 46:
+ param0->unk6C.unk0_5 = (u16)param2;
+ break;
+ }
+}
+
+THUMB_FUNC u32 FUN_0200782C(struct UnkStruct_02006D98_2 *param0, u32 param1)
+{
+ switch (param1)
+ {
+ case 0:
+ return param0->unk24;
+
+ case 1:
+ return param0->unk26;
+
+ case 2:
+ return param0->unk28;
+
+ case 3:
+ return param0->unk2C;
+
+ case 4:
+ return param0->unk2E;
+
+ case 5:
+ return param0->unk30;
+
+ case 6:
+ return param0->unk54_0;
+
+ case 7:
+ return param0->unk38;
+
+ case 8:
+ return param0->unk3A;
+
+ case 9:
+ return param0->unk3C;
+
+ case 10:
+ return param0->unk40;
+
+ case 11:
+ return param0->unk42;
+
+ case 12:
+ return param0->unk34;
+
+ case 13:
+ return param0->unk36;
+
+ case 14:
+ return param0->unk54_1;
+
+ case 15:
+ return param0->unk44;
+
+ case 16:
+ return param0->unk45;
+
+ case 17:
+ return param0->unk46;
+
+ case 18:
+ return param0->unk47;
+
+ case 19:
+ return param0->unk6C.unk4;
+
+ case 20:
+ return param0->unk6C.unk6;
+
+ case 21:
+ return param0->unk6C.unk8;
+
+ case 22:
+ return param0->unk6C.unka;
+
+ case 23:
+ return param0->unk54_2;
+
+ case 24:
+ return param0->unk50_0;
+
+ case 25:
+ return param0->unk50_5;
+
+ case 26:
+ return param0->unk50_a;
+
+ case 27:
+ return param0->unk50_f;
+
+ case 28:
+ return param0->unk50_14;
+
+ case 29:
+ return param0->unk50_19;
+
+ case 30:
+ return param0->unk54_C;
+
+ case 31:
+ return param0->unk4C;
+
+ case 32:
+ return param0->unk48;
+
+ case 33:
+ return param0->unk49;
+
+ case 34:
+ return param0->unk4A;
+
+ case 35:
+ return param0->unk54_9;
+
+ case 36:
+ return param0->unk54_A;
+
+ case 37:
+ return param0->unk54_B;
+
+ case 38:
+ return param0->unk5B;
+
+ case 40:
+ return param0->unk54_D;
+
+ case 41:
+ return param0->unk6C.unk2;
+
+ case 42:
+ return param0->unk6C.unk0_0;
+
+ case 43:
+ return param0->unk6C.unk0_2;
+
+ case 44:
+ return param0->unk6C.unk0_3;
+
+ case 45:
+ return param0->unk6C.unk0_4;
+
+ case 46:
+ return param0->unk6C.unk0_5;
+ }
+
+ GF_AssertFail();
+
+ return 0;
+}
+
+THUMB_FUNC void FUN_020079E0(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2)
+{
+ switch (param1)
+ {
+ case 0:
+ param0->unk24 += param2;
+ break;
+ case 1:
+ param0->unk26 += param2;
+ break;
+ case 2:
+ param0->unk28 += param2;
+ break;
+ case 3:
+ param0->unk2C += param2;
+ break;
+ case 4:
+ param0->unk2E += param2;
+ break;
+ case 5:
+ param0->unk30 += param2;
+ break;
+ case 6:
+ param0->unk54_0 += param2;
+ break;
+ case 7:
+ param0->unk38 += param2;
+ break;
+ case 8:
+ param0->unk3A += param2;
+ break;
+ case 9:
+ param0->unk3C += param2;
+ break;
+ case 10:
+ param0->unk40 += param2;
+ break;
+ case 11:
+ param0->unk42 += param2;
+ break;
+ case 12:
+ param0->unk34 += param2;
+ break;
+ case 13:
+ param0->unk36 += param2;
+ break;
+ case 14:
+ param0->unk54_1 += param2;
+ break;
+ case 15:
+ param0->unk44 += param2;
+ break;
+ case 16:
+ param0->unk45 += param2;
+ break;
+ case 17:
+ param0->unk46 += param2;
+ break;
+ case 18:
+ param0->unk47 += param2;
+ break;
+ case 19:
+ param0->unk6C.unk4 += param2;
+ break;
+ case 20:
+ param0->unk6C.unk6 += param2;
+ break;
+ case 21:
+ param0->unk6C.unk8 += param2;
+ break;
+ case 22:
+ param0->unk6C.unka += param2;
+ break;
+ case 23:
+ param0->unk54_2 += param2;
+ break;
+ case 24:
+ param0->unk50_0 += param2;
+ break;
+ case 25:
+ param0->unk50_5 += param2;
+ break;
+ case 26:
+ param0->unk50_a += param2;
+ break;
+ case 27:
+ param0->unk50_f += param2;
+ break;
+ case 28:
+ param0->unk50_14 += param2;
+ break;
+ case 29:
+ param0->unk50_19 += param2;
+ break;
+ case 30:
+ param0->unk54_C += param2;
+ param0->unk00_8 = 1;
+ break;
+ case 31:
+ param0->unk4C += param2;
+ param0->unk00_8 = 1;
+ break;
+ case 32:
+ param0->unk48 += param2;
+ param0->unk00_8 = 1;
+ break;
+ case 33:
+ param0->unk49 += param2;
+ param0->unk00_8 = 1;
+ break;
+ case 34:
+ param0->unk4A += param2;
+ break;
+ case 35:
+ param0->unk54_9 += param2;
+ param0->unk00_7 = 1;
+ break;
+ case 36:
+ param0->unk54_A += param2;
+ param0->unk00_7 = 1;
+ break;
+ case 37:
+ param0->unk54_B += param2;
+ break;
+ case 38:
+ param0->unk5B += param2;
+ break;
+ case 40:
+ param0->unk54_D += param2;
+ param0->unk00_7 = 1;
+ break;
+ case 41:
+ param0->unk6C.unk2 += param2;
+ break;
+ case 42:
+ param0->unk6C.unk0_0 += param2;
+ param0->unk00_8 = 1;
+ break;
+ case 43:
+ param0->unk6C.unk0_2 += param2;
+ break;
+ case 44:
+ param0->unk6C.unk0_3 += param2;
+ break;
+ case 45:
+ param0->unk6C.unk0_4 += param2;
+ break;
+ case 46:
+ param0->unk6C.unk0_5 += param2;
+ break;
+ }
+}
+
+THUMB_FUNC void FUN_02007E40(
+ struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4)
+{
+ param0->unk54_1 = 1;
+ param0->unk44 = (u8)param1;
+ param0->unk45 = (u8)param2;
+ param0->unk46 = (u8)param3;
+ param0->unk47 = (u8)param4;
+}
+
+THUMB_FUNC void FUN_02007E68(
+ struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4)
+{
+ param0->unk54_C = 1;
+ param0->unk48 = (u8)param1;
+ param0->unk49 = (u8)param2;
+ param0->unk4A = 0;
+ param0->unk4B = (u8)param3;
+ param0->unk4C = param4;
+}
+
+THUMB_FUNC void FUN_02007E98(
+ struct UnkStruct_02006D98 *param0, u32 param1, u32 param2, u32 param3, u32 param4)
+{
+ for (s32 i = 0; i < 4; i++)
+ {
+ if (param0->unk000[i].unk00_0 == 0)
+ {
+ continue;
+ }
+
+ param0->unk000[i].unk54_C = 1;
+ param0->unk000[i].unk48 = (u8)param1;
+ param0->unk000[i].unk49 = (u8)param2;
+ param0->unk000[i].unk4A = 0;
+ param0->unk000[i].unk4B = (u8)param3;
+ param0->unk000[i].unk4C = param4;
+ }
+}
+
+THUMB_FUNC void FUN_02007EEC(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk54_C = 0;
+ param0->unk48 = 0;
+ param0->unk49 = 0;
+ param0->unk4A = 0;
+ param0->unk4B = 0;
+ param0->unk4C = 0;
+ param0->unk00_8 = 1;
+}
+
+THUMB_FUNC BOOL FUN_02007F20(struct UnkStruct_02006D98_2 *param0)
+{
+ return param0->unk54_C == 1;
+}
+
+THUMB_FUNC void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1)
+{
+ param0->unk2E = (s16)((40 - param1) - (((40 - param1) * param0->unk36) >> 8));
+}
+
+static inline void inlineLoop(u8 *unk58,
+ u8 *unk59,
+ u8 *unk5A,
+ u8 *unk5B,
+ u8 *unk5C,
+ const struct UnkStruct_02006D98_sub *unk84)
+{
+ if (*unk58 == 0)
+ {
+ return;
+ }
+
+ if (*unk5A == 0)
+ {
+ (*unk59)++;
+
+ while (unk84[*unk59].unk0 < -1)
+ {
+ unk5C[*unk59]++;
+
+ if (unk84[*unk59].unk1 == unk5C[*unk59] || unk84[*unk59].unk1 == 0)
+ {
+ unk5C[*unk59] = 0;
+ unk59++;
+ }
+ else
+ {
+ *unk59 = (u8)(-2 - unk84[*unk59].unk0);
+ }
+ }
+
+ if (unk84[*unk59].unk0 == -1 || *unk59 >= 10)
+ {
+ *unk5B = 0;
+ *unk58 = 0;
+
+ return;
+ }
+
+ *unk5B = (u8)unk84[*unk59].unk0;
+ *unk5A = unk84[*unk59].unk1;
+ }
+ else
+ {
+ (*unk5A)--;
+ }
+}
+
+THUMB_FUNC void FUN_02007F48(struct UnkStruct_02006D98_2 *param0)
+{
+ inlineLoop(&param0->unk58,
+ &param0->unk59,
+ &param0->unk5A,
+ &param0->unk5B,
+ param0->unk5C,
+ param0->unk84);
+}
+
+THUMB_FUNC void FUN_02008010(
+ struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1)
+{
+ param0->unk00 = 1;
+ param0->unk02 = 0;
+ param0->unk01 = (u8)param1->unk0;
+ param0->unk03 = param1->unk1;
+ param0->unk10 = param1;
+
+ for (s32 i = 0; i < 10; i++)
+ {
+ param0->unk04[i] = 0;
+ }
+}
+
+THUMB_FUNC s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0)
+{
+ if (param0->unk00 != 0)
+ {
+ inlineLoop(&param0->unk00,
+ &param0->unk02,
+ &param0->unk03,
+ &param0->unk01,
+ param0->unk04,
+ param0->unk10);
+ return param0->unk01;
+ }
+
+ return -1;
+}
+
+THUMB_FUNC void FUN_020080D0(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk00_7 = 1;
+ param0->unk00_8 = 1;
+}
+
+THUMB_FUNC void FUN_020080E0(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk14 = param0->unk04;
+ param0->unk78 = param0->unk6C;
+}
+
+THUMB_FUNC void FUN_0200813C(struct UnkStruct_02006D98_2 *param0)
+{
+ param0->unk04 = param0->unk14;
+ param0->unk6C = param0->unk78;
+ param0->unk00_7 = 1;
+ param0->unk00_8 = 1;
+}
+
+THUMB_FUNC void FUN_020081A8(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2)
+{
+ param0->unk29C = param1;
+ param0->unk2A0 = param2;
+}
+
+THUMB_FUNC void FUN_020081B4(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2)
+{
+ param0->unk2A4 = param1;
+ param0->unk2A8 = param2;
+}
+
+THUMB_FUNC u32 FUN_020081C0(u32 param0)
+{
+ return param0 + 4;
+}
+
+THUMB_FUNC void FUN_020081C4(struct UnkStruct_02006D98 *param0)
+{
+ if (param0->unk2E1 != 0)
+ {
+ param0->unk2E1 = 0;
+ NNS_G2dInitImageProxy(&param0->unk260);
+
+ param0->unk2B8.H = 0x20;
+ param0->unk2B8.W = 0x20;
+ param0->unk2B8.szByte = param0->unk2A0;
+ param0->unk2B8.pRawData = param0->unk2AC;
+
+ NNS_G2dLoadImage2DMapping(
+ &param0->unk2B8, param0->unk29C, NNS_G2D_VRAM_TYPE_3DMAIN, &param0->unk260);
+ }
+
+ if (param0->unk2E2 != 0)
+ {
+ param0->unk2E2 = 0;
+ NNS_G2dInitImagePaletteProxy(&param0->unk284);
+
+ param0->unk2D0.szByte = param0->unk2A8;
+ param0->unk2D0.pRawData = param0->unk2B0;
+
+ NNS_G2dLoadPalette(
+ &param0->unk2D0, param0->unk2A4, NNS_G2D_VRAM_TYPE_3DMAIN, &param0->unk284);
+ }
+}
+
+THUMB_FUNC void FUN_0200825C(struct UnkStruct_02006D98 *param0, u8 param1)
+{
+ param0->unk2E3 = param1;
+}
+
+THUMB_FUNC BOOL FUN_02008268(struct UnkStruct_02006D98_2 *param0)
+{
+ GF_ASSERT(param0);
+ return param0->unk00_0 != 0;
+}
+
+THUMB_FUNC void FUN_02008284(struct UnkStruct_02006D98 *param0, u32 param1)
+{
+ param0->unk2E4 |= param1;
+}
+
+THUMB_FUNC void FUN_02008290(struct UnkStruct_02006D98 *param0, u32 param1)
+{
+ param0->unk2E4 &= (param1 ^ ~0);
+}
+
+THUMB_FUNC void FUN_020082A8(struct UnkStruct_02006D98 *param0)
+{
+ NNSG2dCharacterData *st58;
+ int st54;
+ int r4;
+ int st14;
+ u8 *st50;
+ void *st4c;
+ u8 st48 = 0;
+
+ for (st54 = 0; st54 < 4; st54++)
+ {
+ if (param0->unk000[st54].unk00_0 != 0 && param0->unk000[st54].unk00_7 != 0)
+ {
+ param0->unk000[st54].unk00_7 = 0;
+ st48 = 1;
+ st4c = AllocAndReadWholeNarcMemberByIdPair((NarcId)param0->unk000[st54].unk04.field_00,
+ param0->unk000[st54].unk04.field_02,
+ param0->unk298);
+ NNS_G2dGetUnpackedCharacterData(st4c, &st58);
+ param0->unk2B8.pixelFmt = st58->pixelFmt;
+ param0->unk2B8.mapingType = st58->mapingType;
+ param0->unk2B8.characterFmt = st58->characterFmt;
+
+ st50 = st58->pRawData;
+ FUN_02008A74(st50);
+ FUN_020088EC(&param0->unk000[st54], st50);
+
+ if (st54 == 3)
+ {
+ for (st14 = 0; st14 < 0x50; st14++)
+ {
+ for (r4 = 0; r4 < 0x50; r4++)
+ {
+ if (r4 < 0x28)
+ {
+ if (param0->unk000[st54].unk54_9 != 0 &&
+ param0->unk000[st54].unk54_A != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ FUN_020088D8(st50[(0x4f - st14) * 0x50 + (0x27 - r4)]);
+ }
+ else if (param0->unk000[st54].unk54_9 != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ FUN_020088D8(st50[st14 * 0x50 + (0x27 - r4)]);
+ }
+ else if (param0->unk000[st54].unk54_A != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ st50[(0x4f - st14) * 0x50 + r4];
+ }
+ else if (param0->unk000[st54].unk54_D != 0)
+ {
+ if (st14 % (param0->unk000[st54].unk54_D * 2) != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ param0->unk2AC[(st14 - 1) * 0x80 + r4 + 0x50];
+ }
+ else if (r4 % param0->unk000[st54].unk54_D != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ param0->unk2AC[st14 * 0x80 + r4 + 0x4f];
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] =
+ (u8)((st50[st14 * 0x50 + r4] & 0xf) |
+ ((st50[st14 * 0x50 + r4] & 0xf) << 4));
+ }
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x50] = st50[st14 * 0x50 + r4];
+ }
+ }
+ else
+ {
+ //_02008442
+ if (param0->unk000[st54].unk54_9 != 0 &&
+ param0->unk000[st54].unk54_A != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ FUN_020088D8(st50[(0x4f - st14) * 0x50 + (0x4f - (r4 - 0x28))]);
+ }
+ else if (param0->unk000[st54].unk54_9 != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ FUN_020088D8(st50[st14 * 0x50 + (0x4f - (r4 - 0x28))]);
+ }
+ else if (param0->unk000[st54].unk54_A != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ st50[(0x4f - st14) * 0x50 + r4];
+ }
+ else if (param0->unk000[st54].unk54_D != 0)
+ {
+ if (st14 % (param0->unk000[st54].unk54_D * 2) != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ param0->unk2AC[(st14 - 1) * 0x80 + r4 + 0x2828];
+ }
+ else if (r4 % param0->unk000[st54].unk54_D != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ param0->unk2AC[st14 * 0x80 + (r4 - 1) + 0x2828];
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] =
+ (u8)((st50[st14 * 0x50 + r4] & 0xf) |
+ ((st50[st14 * 0x50 + r4] & 0xf) << 4));
+ }
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + 0x2828] = st50[st14 * 0x50 + r4];
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ //_02008554
+ for (st14 = 0; st14 < 0x50; st14++)
+ {
+ for (r4 = 0; r4 < 0x50; r4++)
+ {
+ if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0)
+ {
+ if (r4 < 0x28)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ FUN_020088D8(st50[(0x4f - st14) * 0x50 + (0x27 - r4)]);
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ FUN_020088D8(st50[(0x4f - st14) * 0x50 + (0x4f - (r4 - 0x28))]);
+ }
+ }
+ else if (param0->unk000[st54].unk54_9 != 0)
+ {
+ if (r4 < 0x28)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ FUN_020088D8(st50[st14 * 0x50 + (0x27 - r4)]);
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ FUN_020088D8(st50[st14 * 0x50 + (0x4f - (r4 - 0x28))]);
+ }
+ }
+ else if (param0->unk000[st54].unk54_A != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ st50[(0x4f - st14) * 0x50 + r4];
+ }
+ else if (param0->unk000[st54].unk54_D != 0)
+ {
+ if (st14 % (param0->unk000[st54].unk54_D * 2) != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ param0->unk2AC[(st14 - 1) * 0x80 + r4 + st54 * 0x2800];
+ }
+ else if (r4 % (param0->unk000[st54].unk54_D) != 0)
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ param0->unk2AC[st14 * 0x80 + (r4 - 1) + st54 * 0x2800];
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ (u8)((st50[st14 * 0x50 + r4] & 0xf) |
+ ((st50[st14 * 0x50 + r4] & 0xf) << 4));
+ }
+ }
+ else
+ {
+ param0->unk2AC[st14 * 0x80 + r4 + st54 * 0x2800] =
+ st50[st14 * 0x50 + r4];
+ }
+ }
+ }
+ }
+
+ FreeToHeap(st4c);
+ }
+ //_020086C2
+ }
+
+ param0->unk2E1 = st48;
+}
+
+THUMB_FUNC void FUN_020086F4(struct UnkStruct_02006D98 *param0)
+{
+ NNSG2dPaletteData *st18;
+ int st14, r7;
+ u16 *r1;
+ void *st10;
+ u8 stc = 0;
+
+ for (st14 = 0; st14 < 4; st14++)
+ {
+ if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk00_8 != 0)
+ {
+ param0->unk000[st14].unk00_8 = 0;
+ stc = 1;
+ st10 = AllocAndReadWholeNarcMemberByIdPair((NarcId)param0->unk000[st14].unk04.field_00,
+ param0->unk000[st14].unk04.field_04,
+ param0->unk298);
+ NNS_G2dGetUnpackedPaletteData(st10, &st18);
+ param0->unk2D0.fmt = st18->fmt;
+ r1 = st18->pRawData;
+ for (r7 = 0; r7 < 0x10; r7++)
+ {
+ param0->unk2B0[st14 * 0x10 + r7] = r1[r7];
+ param0->unk2B4[st14 * 0x10 + r7] = r1[r7];
+ }
+ FreeToHeap(st10);
+
+ if (param0->unk000[st14].unk6C.unk0_0 != 0)
+ {
+ st10 = AllocAndReadWholeNarcMemberByIdPair(
+ NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0212_NCLR, param0->unk298);
+ NNS_G2dGetUnpackedPaletteData(st10, &st18);
+ r1 = st18->pRawData;
+ for (r7 = 0; r7 < 0x10; r7++)
+ {
+ param0->unk2B0[(param0->unk000[st14].unk6C.unk0_0 + 3) * 0x10 + r7] = r1[r7];
+ param0->unk2B4[(param0->unk000[st14].unk6C.unk0_0 + 3) * 0x10 + r7] = r1[r7];
+ }
+ FreeToHeap(st10);
+ }
+ }
+ //_020087E0
+
+ if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk54_C != 0)
+ {
+ if (param0->unk000[st14].unk4A == 0)
+ {
+ stc = 1;
+ param0->unk000[st14].unk4A = param0->unk000[st14].unk4B;
+ BlendPalette(param0->unk2B4 + st14 * 0x10,
+ param0->unk2B0 + st14 * 0x10,
+ 0x10,
+ param0->unk000[st14].unk48,
+ (u16)param0->unk000[st14].unk4C);
+
+ if (param0->unk000[st14].unk6C.unk0_0 != 0)
+ {
+ BlendPalette(param0->unk2B4 + (param0->unk000[st14].unk6C.unk0_0 + 3) * 0x10,
+ param0->unk2B0 + (param0->unk000[st14].unk6C.unk0_0 + 3) * 0x10,
+ 0x10,
+ param0->unk000[st14].unk48,
+ (u16)param0->unk000[st14].unk4C);
+ }
+
+ if (param0->unk000[st14].unk48 == param0->unk000[st14].unk49)
+ {
+ param0->unk000[st14].unk54_C = 0;
+ }
+ else if (param0->unk000[st14].unk48 > param0->unk000[st14].unk49)
+ {
+ param0->unk000[st14].unk48--;
+ }
+ else
+ {
+ param0->unk000[st14].unk48++;
+ }
+ }
+ else
+ {
+ param0->unk000[st14].unk4A--;
+ }
+ }
+ }
+
+ param0->unk2E2 = stc;
+}
+
+THUMB_FUNC u8 FUN_020088D8(u8 param0)
+{
+ return (u8)(((u8)((param0 & 0xf0) >> 4)) | ((u8)(param0 << 4)));
+}
+
+THUMB_FUNC void FUN_020088EC(struct UnkStruct_02006D98_2 *param0, u8 *param1)
+{
+ if (param0->unk04.field_06 != 0)
+ {
+ FUN_02008904(param1, param0->unk04.field_0C, 1);
+ }
+}
+
+THUMB_FUNC void FUN_02008904(u8 *param0, u32 param1, u32 param2)
+{
+ const struct UnkStruct_02006D98_3 *st10;
+ s32 i;
+ u32 r2;
+ u8 r0;
+ u8 r4;
+ u8 r1;
+ u32 st0 = param1;
+
+ for (i = 0; i < 4; i++)
+ {
+ st10 = UNK_02105AE8[i];
+ r1 = 0;
+ while (st10[r1].unk0 != 0xff)
+ {
+ r0 = (u8)(st10[r1].unk0 + ((param1 & 0xf) - 8));
+ r4 = (u8)(st10[r1].unk1 + (((param1 & 0xf0) >> 4) - 8));
+ r2 = (u32)(r0 / 2 + r4 * 0x50);
+ if ((r0 & 1) != 0)
+ {
+ if ((param0[r2] & 0xf0) >= 0x10 && (param0[r2] & 0xf0) <= 0x30)
+ {
+ param0[r2] += 0x50;
+ }
+ }
+ else
+ {
+ if ((param0[r2] & 0xf) >= 1 && (param0[r2] & 0xf) <= 3)
+ {
+ param0[r2] += 5;
+ }
+ }
+
+ r1++;
+ }
+ param1 >>= 8;
+ }
+
+ param1 = st0;
+
+ if (param2 != 0)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ st10 = UNK_02105AE8[i];
+ r1 = 0;
+ while (st10[r1].unk0 != 0xff)
+ {
+ r0 = (u8)(st10[r1].unk0 - 14 + ((param1 & 0xf) - 8) + 0x50);
+ r4 = (u8)(st10[r1].unk1 + (((param1 & 0xf0) >> 4) - 8));
+ r2 = (u32)(r0 / 2 + r4 * 0x50);
+ if ((r0 & 1) != 0)
+ {
+ if ((param0[r2] & 0xf0) >= 0x10 && (param0[r2] & 0xf0) <= 0x30)
+ {
+ param0[r2] += 0x50;
+ }
+ }
+ else
+ {
+ if ((param0[r2] & 0xf) >= 1 && (param0[r2] & 0xf) <= 3)
+ {
+ param0[r2] += 5;
+ }
+ }
+ r1++;
+ }
+ param1 >>= 8;
+ }
+ }
+}
+
+THUMB_FUNC u16 FUN_02008A54(u32 *param0)
+{
+ *param0 = (*param0) * 0x41C64E6D + 0x6073;
+
+ return (u16)(*param0 >> 16);
+}
+
+THUMB_FUNC void FUN_02008A74(u8 *param0)
+{
+ u32 st0 = ((u16 *)param0)[0xc7f];
+ for (s32 r4 = 0xc7f; r4 > -1; r4--)
+ {
+ ((u16 *)param0)[r4] ^= st0;
+ FUN_02008A54(&st0);
+ }
+}
diff --git a/include/unk_02006D98.h b/include/unk_02006D98.h
new file mode 100644
index 00000000..42ed8217
--- /dev/null
+++ b/include/unk_02006D98.h
@@ -0,0 +1,192 @@
+#ifndef POKEDIAMOND_UNK_02006D98_H
+#define POKEDIAMOND_UNK_02006D98_H
+
+#include "global.h"
+#include "NNS_g2d.h"
+struct UnkStruct_02006D98_4
+{
+ u16 field_00;
+ u16 field_02;
+ u16 field_04;
+ u16 field_06;
+ u32 field_08;
+ u32 field_0C;
+};
+
+struct UnkStruct_02006D98_sub
+{
+ s8 unk0;
+ u8 unk1;
+};
+struct UnkStruct_02006D98_sub2
+{
+ u16 unk0_0 : 2;
+ u16 unk0_2 : 1;
+ u16 unk0_3 : 1;
+ u16 unk0_4 : 1;
+ u16 unk0_5 : 2;
+ s8 unk2;
+ u8 unk3;
+ s16 unk4;
+ s16 unk6;
+ s16 unk8;
+ s16 unka;
+};
+
+struct UnkStruct_02006D98_2
+{
+ u32 unk00_0 : 1;
+ u32 unk00_1 : 6;
+ u32 unk00_7 : 1;
+ u32 unk00_8 : 1;
+ struct UnkStruct_02006D98_4 unk04;
+ struct UnkStruct_02006D98_4 unk14;
+ 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;
+ u8 unk49;
+ u8 unk4A;
+ u8 unk4B;
+ u32 unk4C;
+ 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 : 2;
+ u32 unk54_9 : 1;
+ u32 unk54_A : 1;
+ u32 unk54_B : 1;
+ u32 unk54_C : 1;
+ u32 unk54_D : 4;
+ u8 unk58;
+ u8 unk59;
+ u8 unk5A;
+ u8 unk5B;
+ u8 unk5C[10];
+ void (*unk68)(struct UnkStruct_02006D98_2 *, void *);
+ struct UnkStruct_02006D98_sub2 unk6C;
+ struct UnkStruct_02006D98_sub2 unk78;
+ struct UnkStruct_02006D98_sub unk84[10];
+};
+
+struct UnkStruct_02006D98
+{
+ struct UnkStruct_02006D98_2 unk000[4];
+ NNSG2dImageProxy unk260;
+ NNSG2dImagePaletteProxy unk284;
+ u32 unk298;
+ u32 unk29C;
+ u32 unk2A0;
+ u32 unk2A4;
+ u32 unk2A8;
+ u8 *unk2AC;
+ u16 *unk2B0;
+ u16 *unk2B4;
+ NNSG2dCharacterData unk2B8;
+ NNSG2dPaletteData unk2D0;
+ u8 unk2E0;
+ u8 unk2E1;
+ u8 unk2E2;
+ u8 unk2E3;
+ u32 unk2E4;
+};
+
+struct UnkStruct_02006D98_3
+{
+ u8 unk0;
+ u8 unk1;
+};
+
+
+struct UnkStruct_02006D98_5
+{
+ u8 unk00;
+ u8 unk01;
+ u8 unk02;
+ u8 unk03;
+ u8 unk04[10];
+ struct UnkStruct_02006D98_sub *unk10;
+};
+
+struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id);
+void FUN_02006ED4(struct UnkStruct_02006D98 *param0);
+void FUN_020072E8(struct UnkStruct_02006D98 *param0);
+void FUN_02007314(struct UnkStruct_02006D98_2 *param0);
+void FUN_0200737C(struct UnkStruct_02006D98_2 *param0, struct UnkStruct_02006D98_sub *param1);
+BOOL FUN_02007390(struct UnkStruct_02006D98_2 *param0);
+struct UnkStruct_02006D98_2 *FUN_020073A0(struct UnkStruct_02006D98 *param0,
+ struct UnkStruct_02006D98_4 *param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ const void *param6,
+ void (*param7)(struct UnkStruct_02006D98_2 *, void *));
+struct UnkStruct_02006D98_2 *FUN_020073E8(struct UnkStruct_02006D98 *param0,
+ struct UnkStruct_02006D98_4 *param1,
+ u32 param2,
+ u32 param3,
+ u32 param4,
+ u32 param5,
+ s32 param6,
+ const void *param7,
+ void (*param8)(struct UnkStruct_02006D98_2 *, void *));
+void FUN_02007534(struct UnkStruct_02006D98_2 *param0);
+void FUN_02007540(struct UnkStruct_02006D98 *param0);
+void FUN_02007558(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2);
+u32 FUN_0200782C(struct UnkStruct_02006D98_2 *param0, u32 param1);
+void FUN_020079E0(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2);
+void FUN_02007E40(
+ struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4);
+void FUN_02007E68(
+ struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4);
+void FUN_02007E98(
+ struct UnkStruct_02006D98 *param0, u32 param1, u32 param2, u32 param3, u32 param4);
+void FUN_02007EEC(struct UnkStruct_02006D98_2 *param0);
+BOOL FUN_02007F20(struct UnkStruct_02006D98_2 *param0);
+void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1);
+void FUN_02007F48(struct UnkStruct_02006D98_2 *param0);
+void FUN_02008010(struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1);
+s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0);
+void FUN_020080D0(struct UnkStruct_02006D98_2 *param0);
+void FUN_020080E0(struct UnkStruct_02006D98_2 *param0);
+void FUN_0200813C(struct UnkStruct_02006D98_2 *param0);
+void FUN_020081A8(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2);
+void FUN_020081B4(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2);
+u32 FUN_020081C0(u32 param0);
+void FUN_020081C4(struct UnkStruct_02006D98 *param0);
+void FUN_0200825C(struct UnkStruct_02006D98 *param0, u8 param1);
+BOOL FUN_02008268(struct UnkStruct_02006D98_2 *param0);
+void FUN_02008284(struct UnkStruct_02006D98 *param0, u32 param1);
+void FUN_02008290(struct UnkStruct_02006D98 *param0, u32 param1);
+void FUN_020082A8(struct UnkStruct_02006D98 *param0);
+void FUN_020086F4(struct UnkStruct_02006D98 *param0);
+u8 FUN_020088D8(u8 param0);
+void FUN_020088EC(struct UnkStruct_02006D98_2 *param0, u8 *param1);
+void FUN_02008904(u8 *param0, u32 param1, u32 param2);
+u16 FUN_02008A54(u32 *param0);
+void FUN_02008A74(u8 *param0);
+
+#endif // POKEDIAMOND_UNK_02006D98_H