summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_02006D98.s1736
-rw-r--r--arm9/global.inc6
-rw-r--r--arm9/lib/libnns/include/NNS_g2d.h2
-rw-r--r--arm9/modules/63/include/mod63_021DB450.h6
-rw-r--r--arm9/src/unk_02006D98.c (renamed from arm9/src/unk_02006D98_c.c)896
6 files changed, 804 insertions, 1843 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 0e976777..04756a55 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -21,7 +21,6 @@ Static arm9
Object overlay_manager.o
Object filesystem.o
Object gf_gfx_loader.o
- Object unk_02006D98_c.o
Object unk_02006D98.o
Object unk_02008AA4.o
Object unk_02008DEC.o
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s
deleted file mode 100644
index 5359b45e..00000000
--- a/arm9/asm/unk_02006D98.s
+++ /dev/null
@@ -1,1736 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern UNK_020ECD4C
- .extern FX_SinCosTable_
-
- .section .rodata
-
-
-
-
-
-
-
-
-
-
-
- .section .data
-
-
- .text
-
-
-
-
- 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/global.inc b/arm9/global.inc
index ee15a6c2..b7a3a6a6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -8999,9 +8999,3 @@
.extern wcschr
.extern wcscpy
.extern wmemchr
-.extern UNK_020ECBD0
-.extern UNK_020ECC10
-.extern UNK_020ECC78
-.extern UNK_020ECCE2
-.extern UNK_020ECDCC
-.extern UNK_02105AE8
diff --git a/arm9/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..15c1c477 100644
--- a/arm9/modules/63/include/mod63_021DB450.h
+++ b/arm9/modules/63/include/mod63_021DB450.h
@@ -23,8 +23,10 @@ typedef struct UnkStruct63_021DB450 //intro base struct type
typedef struct UnkStruct63_021DB49C
{
- u32 field_00;
- u32 field_04;
+ u16 field_00;
+ u16 field_02;
+ u16 field_04;
+ u16 field_06;
u32 field_08;
u32 field_0C;
} UnkStruct63_021DB49C;
diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98.c
index 1ae1fa6e..154e3284 100644
--- a/arm9/src/unk_02006D98_c.c
+++ b/arm9/src/unk_02006D98.c
@@ -6,10 +6,7 @@
#include "poketool/pokegra/otherpoke.naix"
#include "registers.h"
#include "mod63_021DB450.h"
-
-struct UnkStruct3 {
- u32 unk00[8];
-};
+#include "palette.h"
struct UnkStruct4{
u8 unk0;
@@ -18,7 +15,7 @@ struct UnkStruct4{
-static const u8 UNK_020ECCE0[] = {
+const u8 UNK_020ECCE0[] = {
0xFF, 0xFF, 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,
@@ -31,7 +28,7 @@ static const u8 UNK_020ECCE0[] = {
-static const u8 UNK_020ECC10[] = {
+const u8 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,
@@ -42,7 +39,7 @@ static const u8 UNK_020ECC10[] = {
};
-static const u8 UNK_020ECC78[] = {
+const u8 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,
@@ -52,7 +49,7 @@ static const u8 UNK_020ECC78[] = {
0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18,
};
-static const u8 UNK_020ECDCC[] = {
+const u8 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,
@@ -68,7 +65,7 @@ static const u8 UNK_020ECDCC[] = {
-static const int UNK_020ECBD0[4][4] = {
+const int UNK_020ECBD0[4][4] = {
{160, 160, 224, 176}, {160, 160, 224, 176}, {160, 176, 224, 192}, {160, 192, 224, 208}
};
@@ -107,13 +104,33 @@ const u8 UNK_020ECD4C[] = {
-const struct UnkStruct4 *UNK_02105AE8[] = {
+struct UnkStruct4 *UNK_02105AE8[] = {
+ // ugly hack to fix extra padding added by the compiler
(struct UnkStruct4 *)(UNK_020ECCE0+2),
(struct UnkStruct4 *)UNK_020ECC78,
(struct UnkStruct4 *)UNK_020ECC10,
(struct UnkStruct4 *)UNK_020ECDCC,
};
+
+struct UnkStruct2_sub {
+ s8 unk0;
+ u8 unk1;
+};
+struct UnkStruct2_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 UnkStruct2 {
u32 unk00_0:1;
u32 unk00_1:6;
@@ -166,48 +183,27 @@ struct UnkStruct2 {
u8 unk5B;
u8 unk5C[10];
void (*unk68)(struct UnkStruct2 *, void *);
- u16 unk6C_0:2;
- u16 unk6C_2:1;
- u16 unk6C_3:1;
- u16 unk6C_4:1;
- u16 unk6C_5:2;
- s8 unk6E;
- u8 unk6F;
- s16 unk70;
- s16 unk72;
- s16 unk74;
- s16 unk76;
- u8 unk78[0xc];
- struct UnkStruct2_sub {
- s8 unk0;
- u8 unk1;
- } unk84[10];
+ struct UnkStruct2_sub2 unk6C;
+ struct UnkStruct2_sub2 unk78;
+ struct UnkStruct2_sub unk84[10];
};
struct UnkStruct1
{
struct UnkStruct2 unk000[4];
- u8 unk260[0xc];
- u32 unk26C;
- u32 unk270;
- u32 unk274;
- u32 unk278;
- u32 unk27C;
- u8 unk280[0x18];
+ NNSG2dImageProxy unk260;
+ NNSG2dImagePaletteProxy unk284;
u32 unk298;
u32 unk29C;
u32 unk2A0;
u32 unk2A4;
u32 unk2A8;
- void *unk2AC;
- void *unk2B0;
- void *unk2B4;
- u32 unk2B8;
- u32 unk2BC;
- u32 unk2C0;
- u32 unk2C4;
- u8 unk2C8[0x18];
+ u8 *unk2AC;
+ u16 *unk2B0;
+ u16 *unk2B4;
+ NNSG2dCharacterData unk2B8;
+ NNSG2dPaletteData unk2D0;
u8 unk2E0;
u8 unk2E1;
u8 unk2E2;
@@ -216,7 +212,7 @@ struct UnkStruct1
};
extern void NNS_G2dSetupSoftwareSpriteCamera(void);
-extern void FUN_02008A74(void *);
+extern void FUN_02008A74(u8 *);
THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id)
{
@@ -250,9 +246,9 @@ THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id)
NNSG2dCharacterData *stc;
NNS_G2dGetUnpackedCharacterData(st4, &stc);
- ptr->unk2BC = stc->pixelFmt;
- ptr->unk2C0 = stc->mapingType;
- ptr->unk2C4 = stc->characterFmt;
+ ptr->unk2B8.pixelFmt = stc->pixelFmt;
+ ptr->unk2B8.mapingType = stc->mapingType;
+ ptr->unk2B8.characterFmt = stc->characterFmt;
st8 = stc->pRawData;
FUN_02008A74(st8);
@@ -298,7 +294,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
reg_G3_MTX_PUSH = 0;
// this is all shuffled however I try
- reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29);
+ reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk260.attr.fmt << 26) | (1 << 30) | (param0->unk260.attr.sizeS << 20) | (param0->unk260.attr.sizeT << 23) | (param0->unk260.attr.plttUse << 29);
for (int st18 = 0; st18 < 4; st18++) {
if (param0->unk000[st18].unk00_0 == 0 || param0->unk000[st18].unk54_0 != 0 || param0->unk000[st18].unk54_B != 0) {
@@ -318,7 +314,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
FUN_02007F48(&param0->unk000[st18]);
u32 shift;
- if (param0->unk274 == 2) {
+ if (param0->unk260.attr.fmt == 2) {
shift = 1;
} else {
shift = 0;
@@ -379,7 +375,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
NNS_G2dDrawSpriteFast(
param0->unk000[st18].unk24-40 + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C,
- param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6E,
+ param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2,
param0->unk000[st18].unk28 + param0->unk000[st18].unk30,
r12,
r7,
@@ -395,7 +391,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
NNS_G2dDrawSpriteFast(
param0->unk000[st18].unk24-(arg3/2)+param0->unk000[st18].unk2C,
- param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6E,
+ param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2,
param0->unk000[st18].unk28 + param0->unk000[st18].unk30,
arg3,
arg4,
@@ -407,7 +403,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
}
- if (param0->unk000[st18].unk6C_0 == 0 || param0->unk000[st18].unk6C_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) {
+ 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;
}
@@ -416,16 +412,16 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
}
u32 shift2;
- if (param0->unk274 == 2) {
+ if (param0->unk260.attr.fmt == 2) {
shift2 = 1;
} else {
shift2 = 0;
}
- reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C_0+3)<<5))>>(4-shift2);
+ reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C.unk0_0+3)<<5))>>(4-shift2);
- if (param0->unk000[st18].unk6C_4 != 0) {
+ if (param0->unk000[st18].unk6C.unk0_4 != 0) {
arg3 = (param0->unk000[st18].unk34*64)>>8;
arg4 = (param0->unk000[st18].unk36*16)>>8;
} else {
@@ -433,25 +429,25 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) {
arg4 = 16;
}
- if (param0->unk000[st18].unk6C_2 != 0) {
- param0->unk000[st18].unk70 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk74;
+ if (param0->unk000[st18].unk6C.unk0_2 != 0) {
+ param0->unk000[st18].unk6C.unk4 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk6C.unk8;
}
- if (param0->unk000[st18].unk6C_3 != 0) {
- param0->unk000[st18].unk72 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk76;
+ if (param0->unk000[st18].unk6C.unk0_3 != 0) {
+ param0->unk000[st18].unk6C.unk6 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk6C.unka;
}
NNS_G2dDrawSpriteFast(
- param0->unk000[st18].unk70 - (arg3/2),
- param0->unk000[st18].unk72 - (arg4/2),
+ param0->unk000[st18].unk6C.unk4 - (arg3/2),
+ param0->unk000[st18].unk6C.unk4 - (arg4/2),
0xFFFFFC18,
arg3,
arg4,
- UNK_020ECBD0[param0->unk000[st18].unk6C_5][0],
- UNK_020ECBD0[param0->unk000[st18].unk6C_5][1],
- UNK_020ECBD0[param0->unk000[st18].unk6C_5][2],
- UNK_020ECBD0[param0->unk000[st18].unk6C_5][3]
+ 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]
);
}
@@ -1046,11 +1042,11 @@ THUMB_FUNC u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB
param0->unk000[param6].unk50_14 = 0x10;
param0->unk000[param6].unk50_19 = 0x10;
param0->unk000[param6].unk68 = param8;
- param0->unk000[param6].unk70 = (s16)param2;
- param0->unk000[param6].unk72 = (s16)param3;
- param0->unk000[param6].unk6C_2 = 1;
- param0->unk000[param6].unk6C_3 = 1;
- param0->unk000[param6].unk6C_4 = 1;
+ 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 != 0) {
MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14);
@@ -1132,16 +1128,16 @@ THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2)
param0->unk47 = param2;
break;
case 19:
- param0->unk70 = param2;
+ param0->unk6C.unk4 = param2;
break;
case 20:
- param0->unk72 = param2;
+ param0->unk6C.unk6 = param2;
break;
case 21:
- param0->unk74 = param2;
+ param0->unk6C.unk8 = param2;
break;
case 22:
- param0->unk76 = param2;
+ param0->unk6C.unka = param2;
break;
case 23:
param0->unk54_2 = param2;
@@ -1202,23 +1198,23 @@ THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2)
param0->unk00_7 = 1;
break;
case 41:
- param0->unk6E = param2;
+ param0->unk6C.unk2 = param2;
break;
case 42:
- param0->unk6C_0 = param2;
+ param0->unk6C.unk0_0 = param2;
param0->unk00_8 = 1;
break;
case 43:
- param0->unk6C_2 = param2;
+ param0->unk6C.unk0_2 = param2;
break;
case 44:
- param0->unk6C_3 = param2;
+ param0->unk6C.unk0_3 = param2;
break;
case 45:
- param0->unk6C_4 = param2;
+ param0->unk6C.unk0_4 = param2;
break;
case 46:
- param0->unk6C_5 = param2;
+ param0->unk6C.unk0_5 = param2;
break;
}
}
@@ -1284,16 +1280,16 @@ THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) {
return param0->unk47;
case 19:
- return param0->unk70;
+ return param0->unk6C.unk4;
case 20:
- return param0->unk72;
+ return param0->unk6C.unk6;
case 21:
- return param0->unk74;
+ return param0->unk6C.unk8;
case 22:
- return param0->unk76;
+ return param0->unk6C.unka;
case 23:
return param0->unk54_2;
@@ -1347,22 +1343,22 @@ THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) {
return param0->unk54_D;
case 41:
- return param0->unk6E;
+ return param0->unk6C.unk2;
case 42:
- return param0->unk6C_0;
+ return param0->unk6C.unk0_0;
case 43:
- return param0->unk6C_2;
+ return param0->unk6C.unk0_2;
case 44:
- return param0->unk6C_3;
+ return param0->unk6C.unk0_3;
case 45:
- return param0->unk6C_4;
+ return param0->unk6C.unk0_4;
case 46:
- return param0->unk6C_5;
+ return param0->unk6C.unk0_5;
}
@@ -1432,16 +1428,16 @@ THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2)
param0->unk47 += param2;
break;
case 19:
- param0->unk70 += param2;
+ param0->unk6C.unk4 += param2;
break;
case 20:
- param0->unk72 += param2;
+ param0->unk6C.unk6 += param2;
break;
case 21:
- param0->unk74 += param2;
+ param0->unk6C.unk8 += param2;
break;
case 22:
- param0->unk76 += param2;
+ param0->unk6C.unka += param2;
break;
case 23:
param0->unk54_2 += param2;
@@ -1502,23 +1498,727 @@ THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2)
param0->unk00_7 = 1;
break;
case 41:
- param0->unk6E += param2;
+ param0->unk6C.unk2 += param2;
break;
case 42:
- param0->unk6C_0 += param2;
+ param0->unk6C.unk0_0 += param2;
param0->unk00_8 = 1;
break;
case 43:
- param0->unk6C_2 += param2;
+ param0->unk6C.unk0_2 += param2;
break;
case 44:
- param0->unk6C_3 += param2;
+ param0->unk6C.unk0_3 += param2;
break;
case 45:
- param0->unk6C_4 += param2;
+ param0->unk6C.unk0_4 += param2;
break;
case 46:
- param0->unk6C_5 += param2;
+ param0->unk6C.unk0_5 += param2;
break;
}
}
+
+
+THUMB_FUNC void FUN_02007E40(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) {
+ param0->unk54_1 = 1;
+ param0->unk44 = param1;
+ param0->unk45 = param2;
+ param0->unk46 = param3;
+ param0->unk47 = param4;
+}
+
+
+THUMB_FUNC void FUN_02007E68(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) {
+ param0->unk54_C = 1;
+ param0->unk48 = param1;
+ param0->unk49 = param2;
+ param0->unk4A = 0;
+ param0->unk4B = param3;
+ param0->unk4C = param4;
+}
+
+
+THUMB_FUNC void FUN_02007E98(struct UnkStruct1 *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 UnkStruct2 *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 UnkStruct2 *param0) {
+ return param0->unk54_C == 1;
+}
+
+
+THUMB_FUNC void FUN_02007F34(struct UnkStruct2 *param0, s32 param1) {
+ param0->unk2E = (40-param1) - (((40-param1)*param0->unk36)>>8);
+}
+
+
+#ifdef NONMATCHING
+THUMB_FUNC void FUN_02007F48(struct UnkStruct2 *param0) {
+ u8 *r6 = &param0->unk59;
+ if (param0->unk58 == 0) {
+ return;
+ }
+
+ if (param0->unk5A == 0) {
+ (*r6)++;
+
+ while (param0->unk84[*r6].unk0 < -1) {
+ param0->unk5C[*r6]++;
+
+ if (param0->unk84[*r6].unk1 == param0->unk5C[*r6] || param0->unk84[*r6].unk1 == 0) {
+ param0->unk5C[*r6] = 0;
+ r6++;
+ } else {
+ *r6 = -2-param0->unk84[*r6].unk0;
+ }
+ }
+
+ if (param0->unk84[*r6].unk0 == -1 || *r6 >= 10) {
+ param0->unk5B = 0;
+ param0->unk58 = 0;
+
+ return;
+ }
+
+ param0->unk5B = param0->unk84[*r6].unk0;
+ param0->unk5A = param0->unk84[*r6].unk1;
+
+ } else {
+ param0->unk5A--;
+ }
+}
+#else
+asm void FUN_02007F48(struct UnkStruct2 *param0) {
+ // clang-format off
+ 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
+ // clang-format on
+}
+#endif
+
+
+THUMB_FUNC void FUN_02008010(u8 *param0, struct UnkStruct2_sub *param1) {
+ param0[0] = 1;
+ param0[2] = 0;
+ param0[1] = param1->unk0;
+ param0[3] = param1->unk1;
+ ((u32 *)param0)[4] = param1;
+
+ for (s32 i= 0; i<10;i++) {
+ param0[i+4]=0;
+ }
+}
+
+#ifdef NONMATCHING
+THUMB_FUNC s32 FUN_02008030(u8 *param0) {
+ if (*param0 != 0) {
+ u8 *r3 = param0+2;
+ struct UnkStruct2_sub *r4 = ((struct UnkStruct2_sub **)param0)[4];
+ if (*param0 != 0) {
+ if (param0[3] == 0) {
+ (*r3)++;
+
+ while (r4[*r3].unk0 < -1) {
+ param0[*r3+4]++;
+ if (r4[*r3].unk1 == param0[*r3+4] || r4[*r3].unk1 == 0) {
+ param0[*r3+4] = 0;
+ r3++;
+ } else {
+ *r3 = -2 - r4[*r3].unk0;
+ }
+ }
+
+ if (r4[*r3].unk0 == -1 || *r3 >= 10) {
+ param0[0] = 0;
+ param0[1] = 0;
+ } else {
+ param0[1] = r4[*r3].unk0;
+ param0[3] = r4[*r3].unk1;
+ }
+ } else {
+ param0[3]--;
+ }
+ }
+
+ return param0[1];
+
+ }
+
+ return -1;
+}
+#else
+asm s32 FUN_02008030(u8 *param0) {
+ // clang-format off
+ 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
+ // clang-format on
+}
+#endif
+
+
+THUMB_FUNC void FUN_020080D0(struct UnkStruct2 *param0) {
+ param0->unk00_7 = 1;
+ param0->unk00_8 = 1;
+}
+
+
+THUMB_FUNC void FUN_020080E0(struct UnkStruct2 *param0) {
+ param0->unk14 = param0->unk04;
+ param0->unk78 = param0->unk6C;
+}
+
+
+THUMB_FUNC void FUN_0200813C(struct UnkStruct2 *param0) {
+ param0->unk04 = param0->unk14;
+ param0->unk6C = param0->unk78;
+ param0->unk00_7 = 1;
+ param0->unk00_8 = 1;
+}
+
+
+THUMB_FUNC void FUN_020081A8(struct UnkStruct1 *param0, u32 param1, u32 param2) {
+ param0->unk29C = param1;
+ param0->unk2A0 = param2;
+}
+
+
+THUMB_FUNC void FUN_020081B4(struct UnkStruct1 *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 UnkStruct1 *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, 0, &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, 0, &param0->unk284);
+
+ }
+}
+
+
+THUMB_FUNC void FUN_0200825C(struct UnkStruct1 *param0, u8 param1) {
+ param0->unk2E3 = param1;
+}
+
+
+THUMB_FUNC BOOL FUN_02008268(struct UnkStruct2 *param0) {
+ GF_ASSERT(param0);
+ return param0->unk00_0 != 0;
+}
+
+
+THUMB_FUNC void FUN_02008284(struct UnkStruct1 *param0, u32 param1) {
+ param0->unk2E4 |= param1;
+}
+
+
+THUMB_FUNC void FUN_02008290(struct UnkStruct1 *param0, u32 param1) {
+ param0->unk2E4 &= (param1^~0);
+}
+
+
+extern void FUN_020088EC(struct UnkStruct2 *, u8 *);
+extern u8 FUN_020088D8(u8);
+
+THUMB_FUNC void FUN_020082A8(struct UnkStruct1 *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(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] = ((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] = ((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] = ((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 UnkStruct1 *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(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)((param0&0xf0)>>4)) | ((u8)(param0<<4));
+}
+
+extern void FUN_02008904(u8 *param0, u32 param1, u32 param2);
+
+THUMB_FUNC void FUN_020088EC(struct UnkStruct2 *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) {
+ struct UnkStruct4 *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 = st10[r1].unk0+((param1&0xf) - 8);
+ r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8);
+ r2 = 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 = st10[r1].unk0-14+((param1&0xf)-8)+0x50;
+ r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8);
+ r2 = 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 *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);
+ }
+}