summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/berry_crush_2.s8
-rw-r--r--asm/decompress.s6
-rw-r--r--asm/dodrio_berry_picking_2.s734
-rw-r--r--asm/ereader_helpers.s (renamed from asm/unk_815C27C.s)0
-rw-r--r--asm/link.s30
-rw-r--r--asm/link_rfu_2.s52
-rw-r--r--asm/link_rfu_3.s8
-rw-r--r--asm/pokemon_jump.s4
-rw-r--r--asm/pokemon_jump_2.s16
-rw-r--r--asm/unk_8159F40.s1623
-rw-r--r--asm/unk_815C980.s1314
-rw-r--r--data/data_8471F00.s7
-rw-r--r--include/decompress.h1
-rw-r--r--include/global.fieldmap.h19
-rw-r--r--include/global.h51
-rw-r--r--include/link_rfu.h6
-rw-r--r--include/unk_815C980.h24
-rw-r--r--ld_script.txt10
-rw-r--r--src/dodrio_berry_picking_2.c23
-rw-r--r--src/unk_8159F40.c622
-rw-r--r--src/unk_815C980.c436
-rw-r--r--sym_bss.txt11
-rw-r--r--sym_common.txt2
-rw-r--r--sym_ewram.txt6
24 files changed, 1981 insertions, 3032 deletions
diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s
index 7477bbf9c..16f7bff79 100644
--- a/asm/berry_crush_2.s
+++ b/asm/berry_crush_2.s
@@ -1046,7 +1046,7 @@ sub_814C2FC: @ 814C2FC
mov r10, r3
_0814C320:
lsls r0, r7, 4
- ldr r1, _0814C3C4 @ =gUnknown_3003ED0
+ ldr r1, _0814C3C4 @ =gRecvCmds
adds r2, r0, r1
ldrh r1, [r2]
movs r0, 0xFF
@@ -1127,7 +1127,7 @@ _0814C320:
b _0814C3D6
.align 2, 0
_0814C3C0: .4byte gUnknown_846E2E0
-_0814C3C4: .4byte gUnknown_3003ED0
+_0814C3C4: .4byte gRecvCmds
_0814C3C8:
adds r0, r4, r6
adds r2, r0, 0
@@ -1671,7 +1671,7 @@ sub_814C7BC: @ 814C7BC
push {r4,r5,lr}
adds r5, r0, 0
movs r4, 0
- ldr r3, _0814C808 @ =gUnknown_3003ED0
+ ldr r3, _0814C808 @ =gRecvCmds
ldrb r0, [r5, 0x9]
cmp r4, r0
bcs _0814C7E0
@@ -1710,7 +1710,7 @@ _0814C7F8:
strb r0, [r2]
b _0814C84A
.align 2, 0
-_0814C808: .4byte gUnknown_3003ED0
+_0814C808: .4byte gRecvCmds
_0814C80C:
adds r4, r5, 0
adds r4, 0x4E
diff --git a/asm/decompress.s b/asm/decompress.s
index 175304245..cc38e0df5 100644
--- a/asm/decompress.s
+++ b/asm/decompress.s
@@ -722,8 +722,8 @@ _0800F0BA:
bx r1
thumb_func_end sub_800F078
- thumb_func_start sub_800F0C4
-sub_800F0C4: @ 800F0C4
+ thumb_func_start GetDecompressedDataSize
+GetDecompressedDataSize: @ 800F0C4
sub sp, 0x4
mov r3, sp
ldrb r2, [r0, 0x1]
@@ -738,7 +738,7 @@ sub_800F0C4: @ 800F0C4
ldr r0, [sp]
add sp, 0x4
bx lr
- thumb_func_end sub_800F0C4
+ thumb_func_end GetDecompressedDataSize
thumb_func_start DecompressPicFromTable_DontHandleDeoxys
DecompressPicFromTable_DontHandleDeoxys: @ 800F0E0
diff --git a/asm/dodrio_berry_picking_2.s b/asm/dodrio_berry_picking_2.s
new file mode 100644
index 000000000..792dc4b0f
--- /dev/null
+++ b/asm/dodrio_berry_picking_2.s
@@ -0,0 +1,734 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_815A61C
+sub_815A61C: @ 815A61C
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x20
+ ldr r4, [sp, 0x48]
+ lsls r4, 24
+ str r4, [sp, 0x1C]
+ movs r4, 0x14
+ adds r4, r0
+ mov r9, r4
+ mov r5, sp
+ movs r4, 0x2
+ strb r4, [r5]
+ mov r10, sp
+ mov r5, r9
+ ldrb r4, [r5, 0xB]
+ movs r7, 0xF
+ adds r5, r7, 0
+ ands r5, r4
+ mov r6, r10
+ ldrb r6, [r6, 0x1]
+ mov r8, r6
+ movs r4, 0x10
+ negs r4, r4
+ mov r6, r8
+ ands r4, r6
+ orrs r4, r5
+ mov r5, r10
+ strb r4, [r5, 0x1]
+ mov r8, sp
+ mov r6, r9
+ ldrb r5, [r6, 0xC]
+ lsls r5, 4
+ ands r4, r7
+ orrs r4, r5
+ mov r5, r8
+ strb r4, [r5, 0x1]
+ ldrb r5, [r6, 0xD]
+ movs r6, 0xF
+ ands r5, r6
+ mov r4, r10
+ ldrb r4, [r4, 0x2]
+ mov r8, r4
+ movs r4, 0x10
+ negs r4, r4
+ mov r6, r8
+ ands r4, r6
+ orrs r4, r5
+ mov r5, r10
+ strb r4, [r5, 0x2]
+ mov r8, sp
+ mov r6, r9
+ ldrb r5, [r6, 0xE]
+ lsls r5, 4
+ ands r4, r7
+ orrs r4, r5
+ mov r5, r8
+ strb r4, [r5, 0x2]
+ ldrb r5, [r6, 0xF]
+ movs r6, 0xF
+ ands r5, r6
+ mov r4, r10
+ ldrb r4, [r4, 0x3]
+ mov r8, r4
+ movs r4, 0x10
+ negs r4, r4
+ mov r6, r8
+ ands r4, r6
+ orrs r4, r5
+ mov r5, r10
+ strb r4, [r5, 0x3]
+ mov r8, sp
+ mov r6, r9
+ ldrb r5, [r6, 0x10]
+ lsls r5, 4
+ ands r4, r7
+ orrs r4, r5
+ mov r5, r8
+ strb r4, [r5, 0x3]
+ ldrb r5, [r6, 0x11]
+ movs r6, 0xF
+ ands r5, r6
+ mov r4, r10
+ ldrb r4, [r4, 0x4]
+ mov r8, r4
+ movs r4, 0x10
+ negs r4, r4
+ mov r6, r8
+ ands r4, r6
+ orrs r4, r5
+ mov r5, r10
+ strb r4, [r5, 0x4]
+ mov r8, sp
+ mov r6, r9
+ ldrb r5, [r6, 0x12]
+ lsls r5, 4
+ ands r4, r7
+ orrs r4, r5
+ mov r5, r8
+ strb r4, [r5, 0x4]
+ ldrb r4, [r6, 0x13]
+ movs r6, 0xF
+ ands r4, r6
+ mov r6, r8
+ ldrb r5, [r6, 0x5]
+ movs r6, 0x10
+ negs r6, r6
+ ands r6, r5
+ orrs r6, r4
+ str r6, [sp, 0xC]
+ mov r4, r8
+ strb r6, [r4, 0x5]
+ mov r5, sp
+ mov r6, r9
+ ldrb r4, [r6, 0x14]
+ lsls r4, 4
+ ldr r6, [sp, 0xC]
+ ands r6, r7
+ orrs r6, r4
+ strb r6, [r5, 0x5]
+ mov r7, sp
+ movs r4, 0x3
+ mov r8, r4
+ ldrb r0, [r0, 0x14]
+ mov r5, r8
+ ands r0, r5
+ ldrb r5, [r7, 0x6]
+ movs r6, 0x4
+ negs r6, r6
+ mov r10, r6
+ mov r4, r10
+ ands r4, r5
+ orrs r4, r0
+ strb r4, [r7, 0x6]
+ mov r5, r9
+ ldrb r0, [r5, 0x1]
+ mov r6, r8
+ ands r0, r6
+ lsls r0, 2
+ movs r5, 0xD
+ negs r5, r5
+ ands r5, r4
+ orrs r5, r0
+ strb r5, [r7, 0x6]
+ mov r0, r9
+ ldrb r4, [r0, 0x2]
+ ands r4, r6
+ lsls r4, 4
+ movs r0, 0x31
+ negs r0, r0
+ ands r0, r5
+ orrs r0, r4
+ strb r0, [r7, 0x6]
+ mov r5, sp
+ mov r6, r9
+ ldrb r4, [r6, 0x3]
+ lsls r4, 6
+ movs r6, 0x3F
+ ands r0, r6
+ orrs r0, r4
+ strb r0, [r5, 0x6]
+ mov r4, r9
+ ldrb r0, [r4, 0x4]
+ mov r5, r8
+ ands r0, r5
+ ldrb r5, [r7, 0x7]
+ mov r4, r10
+ ands r4, r5
+ orrs r4, r0
+ strb r4, [r7, 0x7]
+ mov r6, r9
+ ldrb r0, [r6, 0x5]
+ mov r5, r8
+ ands r0, r5
+ lsls r0, 2
+ movs r5, 0xD
+ negs r5, r5
+ ands r5, r4
+ orrs r5, r0
+ strb r5, [r7, 0x7]
+ ldrb r4, [r6, 0x6]
+ mov r6, r8
+ ands r4, r6
+ lsls r4, 4
+ movs r0, 0x31
+ negs r0, r0
+ ands r0, r5
+ orrs r0, r4
+ strb r0, [r7, 0x7]
+ mov r5, sp
+ mov r6, r9
+ ldrb r4, [r6, 0x7]
+ lsls r4, 6
+ movs r6, 0x3F
+ ands r0, r6
+ orrs r0, r4
+ strb r0, [r5, 0x7]
+ mov r8, sp
+ mov r0, r9
+ ldrb r4, [r0, 0x8]
+ movs r7, 0x3
+ adds r0, r7, 0
+ ands r0, r4
+ mov r4, r8
+ ldrb r5, [r4, 0x8]
+ mov r4, r10
+ ands r4, r5
+ orrs r4, r0
+ mov r5, r8
+ strb r4, [r5, 0x8]
+ mov r6, r9
+ ldrb r5, [r6, 0x9]
+ adds r0, r7, 0
+ ands r0, r5
+ lsls r0, 2
+ movs r5, 0xD
+ negs r5, r5
+ ands r5, r4
+ orrs r5, r0
+ mov r0, r8
+ strb r5, [r0, 0x8]
+ ldrb r0, [r1]
+ adds r4, r7, 0
+ ands r4, r0
+ lsls r4, 4
+ movs r0, 0x31
+ negs r0, r0
+ ands r0, r5
+ orrs r0, r4
+ mov r4, r8
+ strb r0, [r4, 0x8]
+ mov r5, sp
+ ldrb r4, [r2]
+ lsls r4, 6
+ movs r6, 0x3F
+ ands r0, r6
+ orrs r0, r4
+ strb r0, [r5, 0x8]
+ ldrb r4, [r3]
+ adds r0, r7, 0
+ ands r0, r4
+ ldrb r4, [r5, 0x9]
+ mov r6, r10
+ ands r6, r4
+ orrs r6, r0
+ mov r10, r6
+ strb r6, [r5, 0x9]
+ ldr r0, [sp, 0x40]
+ ldrb r4, [r0]
+ adds r0, r7, 0
+ ands r0, r4
+ lsls r0, 2
+ movs r4, 0xD
+ negs r4, r4
+ ands r6, r4
+ orrs r6, r0
+ str r6, [sp, 0x10]
+ strb r6, [r5, 0x9]
+ mov r4, sp
+ ldr r5, [sp, 0x44]
+ ldrb r0, [r5]
+ adds r6, r7, 0
+ ands r6, r0
+ lsls r0, r6, 4
+ subs r7, 0x34
+ ldr r5, [sp, 0x10]
+ ands r7, r5
+ orrs r7, r0
+ strb r7, [r4, 0x9]
+ mov r5, sp
+ ldrb r0, [r1, 0x4]
+ movs r6, 0x1
+ mov r12, r6
+ mov r4, r12
+ ands r4, r0
+ lsls r4, 6
+ movs r0, 0x41
+ negs r0, r0
+ mov r10, r0
+ ands r0, r7
+ orrs r0, r4
+ strb r0, [r5, 0x9]
+ ldrb r4, [r2, 0x4]
+ lsls r4, 7
+ movs r5, 0x7F
+ ands r0, r5
+ orrs r0, r4
+ mov r4, r8
+ strb r0, [r4, 0x9]
+ ldrb r4, [r3, 0x4]
+ mov r0, r12
+ ands r0, r4
+ mov r5, r8
+ ldrb r4, [r5, 0xA]
+ movs r7, 0x2
+ negs r7, r7
+ adds r5, r7, 0
+ ands r5, r4
+ orrs r5, r0
+ mov r6, r8
+ strb r5, [r6, 0xA]
+ mov r9, sp
+ ldr r4, [sp, 0x40]
+ ldrb r0, [r4, 0x4]
+ mov r4, r12
+ ands r4, r0
+ lsls r4, 1
+ movs r6, 0x3
+ negs r6, r6
+ mov r8, r6
+ mov r0, r8
+ ands r0, r5
+ orrs r0, r4
+ mov r4, r9
+ strb r0, [r4, 0xA]
+ ldr r6, [sp, 0x44]
+ ldrb r5, [r6, 0x4]
+ mov r4, r12
+ ands r4, r5
+ lsls r4, 2
+ movs r5, 0x5
+ negs r5, r5
+ ands r0, r5
+ orrs r0, r4
+ mov r4, r9
+ strb r0, [r4, 0xA]
+ mov r4, sp
+ ldrb r1, [r1, 0x8]
+ mov r0, r12
+ ands r0, r1
+ lsls r0, 2
+ ldrb r1, [r4, 0xB]
+ ands r5, r1
+ orrs r5, r0
+ strb r5, [r4, 0xB]
+ ldrb r1, [r2, 0x8]
+ mov r0, r12
+ ands r0, r1
+ lsls r0, 3
+ movs r1, 0x9
+ negs r1, r1
+ ands r1, r5
+ orrs r1, r0
+ strb r1, [r4, 0xB]
+ ldrb r2, [r3, 0x8]
+ mov r0, r12
+ ands r0, r2
+ lsls r0, 4
+ movs r2, 0x11
+ negs r2, r2
+ ands r2, r1
+ orrs r2, r0
+ strb r2, [r4, 0xB]
+ mov r3, sp
+ ldr r5, [sp, 0x40]
+ ldrb r0, [r5, 0x8]
+ mov r1, r12
+ ands r1, r0
+ lsls r1, 5
+ movs r0, 0x21
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r3, 0xB]
+ mov r2, sp
+ ldrb r1, [r6, 0x8]
+ mov r6, r12
+ ands r6, r1
+ lsls r1, r6, 6
+ mov r3, r10
+ ands r0, r3
+ orrs r0, r1
+ strb r0, [r2, 0xB]
+ ldr r4, [sp, 0x1C]
+ lsrs r3, r4, 21
+ ldrb r1, [r2, 0xA]
+ movs r0, 0x7
+ ands r0, r1
+ orrs r0, r3
+ strb r0, [r2, 0xA]
+ mov r1, sp
+ ldr r5, [sp, 0x4C]
+ movs r6, 0x1
+ ands r5, r6
+ lsls r2, r5, 1
+ ldrb r0, [r1, 0xB]
+ mov r3, r8
+ ands r3, r0
+ orrs r3, r2
+ mov r8, r3
+ strb r3, [r1, 0xB]
+ mov r0, sp
+ ldr r4, [sp, 0x50]
+ ands r4, r6
+ mov r5, r8
+ ands r5, r7
+ orrs r5, r4
+ strb r5, [r0, 0xB]
+ bl sub_80F9E2C
+ add sp, 0x20
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_815A61C
+
+ thumb_func_start sub_815A950
+sub_815A950: @ 815A950
+ push {r4-r7,lr}
+ mov r7, r9
+ mov r6, r8
+ push {r6,r7}
+ adds r7, r1, 0
+ adds r5, r2, 0
+ adds r6, r3, 0
+ ldr r0, [sp, 0x1C]
+ mov r12, r0
+ ldr r1, [sp, 0x20]
+ mov r8, r1
+ ldr r0, [sp, 0x24]
+ mov r9, r0
+ adds r2, r7, 0
+ adds r2, 0x14
+ ldr r4, _0815A98C @ =gRecvCmds
+ ldrh r0, [r4]
+ movs r1, 0xFF
+ lsls r1, 8
+ ands r1, r0
+ movs r0, 0xBC
+ lsls r0, 6
+ cmp r1, r0
+ bne _0815A988
+ adds r3, r4, 0x2
+ ldrb r0, [r4, 0x2]
+ cmp r0, 0x2
+ beq _0815A990
+_0815A988:
+ movs r0, 0
+ b _0815AACA
+ .align 2, 0
+_0815A98C: .4byte gRecvCmds
+_0815A990:
+ ldrb r0, [r3, 0x1]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0xB]
+ ldrb r0, [r3, 0x1]
+ lsrs r0, 4
+ strb r0, [r2, 0xC]
+ ldrb r0, [r3, 0x2]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0xD]
+ ldrb r0, [r3, 0x2]
+ lsrs r0, 4
+ strb r0, [r2, 0xE]
+ ldrb r0, [r3, 0x3]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0xF]
+ ldrb r0, [r3, 0x3]
+ lsrs r0, 4
+ strb r0, [r2, 0x10]
+ ldrb r0, [r3, 0x4]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0x11]
+ ldrb r0, [r3, 0x4]
+ lsrs r0, 4
+ strb r0, [r2, 0x12]
+ ldrb r0, [r3, 0x5]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0x13]
+ ldrb r0, [r3, 0x5]
+ lsrs r0, 4
+ strb r0, [r2, 0x14]
+ ldrb r0, [r3, 0x1]
+ lsls r0, 28
+ lsrs r0, 28
+ strb r0, [r2, 0x15]
+ ldrb r0, [r3, 0x6]
+ lsls r0, 30
+ lsrs r0, 30
+ strb r0, [r7, 0x14]
+ ldrb r0, [r3, 0x6]
+ lsls r0, 28
+ lsrs r0, 30
+ strb r0, [r2, 0x1]
+ ldrb r0, [r3, 0x6]
+ lsls r0, 26
+ lsrs r0, 30
+ strb r0, [r2, 0x2]
+ ldrb r0, [r3, 0x6]
+ lsrs r0, 6
+ strb r0, [r2, 0x3]
+ ldrb r0, [r3, 0x7]
+ lsls r0, 30
+ lsrs r0, 30
+ strb r0, [r2, 0x4]
+ ldrb r0, [r3, 0x7]
+ lsls r0, 28
+ lsrs r0, 30
+ strb r0, [r2, 0x5]
+ ldrb r0, [r3, 0x7]
+ lsls r0, 26
+ lsrs r0, 30
+ strb r0, [r2, 0x6]
+ ldrb r0, [r3, 0x7]
+ lsrs r0, 6
+ strb r0, [r2, 0x7]
+ ldrb r0, [r3, 0x8]
+ lsls r0, 30
+ lsrs r0, 30
+ strb r0, [r2, 0x8]
+ ldrb r0, [r3, 0x8]
+ lsls r0, 28
+ lsrs r0, 30
+ strb r0, [r2, 0x9]
+ ldrb r0, [r3, 0x6]
+ lsls r0, 30
+ lsrs r0, 30
+ strb r0, [r2, 0xA]
+ ldrb r0, [r3, 0x8]
+ lsls r0, 26
+ lsrs r0, 30
+ strb r0, [r5]
+ ldrb r0, [r3, 0x9]
+ lsls r0, 25
+ lsrs r0, 31
+ strb r0, [r5, 0x4]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 29
+ lsrs r0, 31
+ strb r0, [r5, 0x8]
+ ldrb r0, [r3, 0x8]
+ lsrs r0, 6
+ strb r0, [r6]
+ ldrb r0, [r3, 0x9]
+ lsrs r0, 7
+ strb r0, [r6, 0x4]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 28
+ lsrs r0, 31
+ strb r0, [r6, 0x8]
+ ldrb r0, [r3, 0x9]
+ lsls r0, 30
+ lsrs r0, 30
+ mov r1, r12
+ strb r0, [r1]
+ ldrb r0, [r3, 0xA]
+ lsls r0, 31
+ lsrs r0, 31
+ strb r0, [r1, 0x4]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 27
+ lsrs r0, 31
+ strb r0, [r1, 0x8]
+ ldrb r0, [r3, 0x9]
+ lsls r0, 28
+ lsrs r0, 30
+ mov r1, r8
+ strb r0, [r1]
+ ldrb r0, [r3, 0xA]
+ lsls r0, 30
+ lsrs r0, 31
+ strb r0, [r1, 0x4]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 26
+ lsrs r0, 31
+ strb r0, [r1, 0x8]
+ ldrb r0, [r3, 0x9]
+ lsls r0, 26
+ lsrs r0, 30
+ mov r1, r9
+ strb r0, [r1]
+ ldrb r0, [r3, 0xA]
+ lsls r0, 29
+ lsrs r0, 31
+ strb r0, [r1, 0x4]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 25
+ lsrs r0, 31
+ strb r0, [r1, 0x8]
+ ldrb r0, [r3, 0xA]
+ lsrs r0, 3
+ ldr r1, [sp, 0x28]
+ strb r0, [r1]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 30
+ lsrs r0, 31
+ ldr r1, [sp, 0x2C]
+ str r0, [r1]
+ ldrb r0, [r3, 0xB]
+ lsls r0, 31
+ lsrs r0, 31
+ ldr r1, [sp, 0x30]
+ str r0, [r1]
+ movs r0, 0x1
+_0815AACA:
+ pop {r3,r4}
+ mov r8, r3
+ mov r9, r4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_815A950
+
+ thumb_func_start sub_815AAD8
+sub_815AAD8: @ 815AAD8
+ push {lr}
+ sub sp, 0x8
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r3, _0815AB00 @ =0xffffff00
+ ldr r1, [sp]
+ ands r1, r3
+ movs r2, 0x3
+ orrs r1, r2
+ str r1, [sp]
+ ldr r1, [sp, 0x4]
+ ands r1, r3
+ orrs r1, r0
+ str r1, [sp, 0x4]
+ mov r0, sp
+ bl sub_80F9E2C
+ add sp, 0x8
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0815AB00: .4byte 0xffffff00
+ thumb_func_end sub_815AAD8
+
+ thumb_func_start sub_815AB04
+sub_815AB04: @ 815AB04
+ push {r4,lr}
+ adds r2, r0, 0
+ adds r4, r1, 0
+ ldr r3, _0815AB2C @ =gRecvCmds
+ ldrh r0, [r3]
+ movs r1, 0xFF
+ lsls r1, 8
+ ands r1, r0
+ movs r0, 0xBC
+ lsls r0, 6
+ cmp r1, r0
+ bne _0815AB28
+ lsls r0, r2, 4
+ adds r1, r3, 0x2
+ adds r1, r0, r1
+ ldrb r0, [r1]
+ cmp r0, 0x3
+ beq _0815AB30
+_0815AB28:
+ movs r0, 0
+ b _0815AB36
+ .align 2, 0
+_0815AB2C: .4byte gRecvCmds
+_0815AB30:
+ ldrb r0, [r1, 0x4]
+ strb r0, [r4]
+ movs r0, 0x1
+_0815AB36:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_815AB04
+
+ thumb_func_start sub_815AB3C
+sub_815AB3C: @ 815AB3C
+ push {lr}
+ sub sp, 0x8
+ ldr r2, _0815AB5C @ =0xffffff00
+ ldr r1, [sp]
+ ands r1, r2
+ movs r2, 0x4
+ orrs r1, r2
+ str r1, [sp]
+ str r0, [sp, 0x4]
+ mov r0, sp
+ bl sub_80F9E2C
+ add sp, 0x8
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0815AB5C: .4byte 0xffffff00
+ thumb_func_end sub_815AB3C
+
+ thumb_func_start sub_815AB60
+sub_815AB60: @ 815AB60
+ push {lr}
+ adds r2, r0, 0
+ ldr r3, _0815AB88 @ =gRecvCmds
+ ldrh r0, [r3]
+ movs r1, 0xFF
+ lsls r1, 8
+ ands r1, r0
+ movs r0, 0xBC
+ lsls r0, 6
+ cmp r1, r0
+ bne _0815AB82
+ lsls r0, r2, 4
+ adds r1, r3, 0x2
+ adds r1, r0, r1
+ ldrb r0, [r1]
+ cmp r0, 0x4
+ beq _0815AB8C
+_0815AB82:
+ movs r0, 0
+ b _0815AB8E
+ .align 2, 0
+_0815AB88: .4byte gRecvCmds
+_0815AB8C:
+ ldr r0, [r1, 0x4]
+_0815AB8E:
+ pop {r1}
+ bx r1
+ thumb_func_end sub_815AB60
+
+ .align 2, 0 @ Don't pad with nop.
diff --git a/asm/unk_815C27C.s b/asm/ereader_helpers.s
index 067ab8659..067ab8659 100644
--- a/asm/unk_815C27C.s
+++ b/asm/ereader_helpers.s
diff --git a/asm/link.s b/asm/link.s
index d2fabbd0c..6b89ed2db 100644
--- a/asm/link.s
+++ b/asm/link.s
@@ -870,7 +870,7 @@ _08009B7E:
movs r0, 0
strh r0, [r3]
lsls r4, r6, 4
- ldr r5, _08009BCC @ =gUnknown_3003ED0
+ ldr r5, _08009BCC @ =gRecvCmds
adds r2, r4, r5
ldrh r0, [r2]
mov r12, r1
@@ -906,7 +906,7 @@ _08009BC4:
b _08009E3E
.align 2, 0
_08009BC8: .4byte gUnknown_3003E60
-_08009BCC: .4byte gUnknown_3003ED0
+_08009BCC: .4byte gRecvCmds
_08009BD0: .4byte 0x00005fff
_08009BD4: .4byte 0x00004444
_08009BD8: .4byte 0x00002222
@@ -1006,12 +1006,12 @@ _08009C94:
adds r1, r0
movs r2, 0
strh r2, [r1]
- ldr r0, _08009CBC @ =gUnknown_3003ED0
+ ldr r0, _08009CBC @ =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r0, [r0]
strh r0, [r1, 0x2]
- ldr r0, _08009CBC @ =gUnknown_3003ED0
+ ldr r0, _08009CBC @ =gRecvCmds
adds r0, 0x4
adds r0, r4, r0
ldrh r0, [r0]
@@ -1019,7 +1019,7 @@ _08009C94:
b _08009E3E
.align 2, 0
_08009CB8: .4byte gUnknown_3000E18
-_08009CBC: .4byte gUnknown_3003ED0
+_08009CBC: .4byte gRecvCmds
_08009CC0:
mov r3, r12
adds r0, r3, r6
@@ -1037,7 +1037,7 @@ _08009CC0:
mov r8, r0
movs r2, 0
adds r5, r3, 0
- ldr r7, _08009D0C @ =gUnknown_3003ED0
+ ldr r7, _08009D0C @ =gRecvCmds
adds r3, r4, 0
_08009CE4:
ldrh r1, [r5]
@@ -1059,13 +1059,13 @@ _08009CE4:
.align 2, 0
_08009D04: .4byte gUnknown_3000E18
_08009D08: .4byte gDecompressionBuffer
-_08009D0C: .4byte gUnknown_3003ED0
+_08009D0C: .4byte gRecvCmds
_08009D10:
movs r2, 0
ldr r1, _08009DC4 @ =gBlockRecvBuffer
mov r9, r1
adds r7, r3, 0
- ldr r3, _08009DC8 @ =gUnknown_3003ED0
+ ldr r3, _08009DC8 @ =gRecvCmds
mov r8, r3
lsls r5, r6, 8
adds r3, r4, 0
@@ -1153,7 +1153,7 @@ _08009DBC:
b _08009E3E
.align 2, 0
_08009DC4: .4byte gBlockRecvBuffer
-_08009DC8: .4byte gUnknown_3003ED0
+_08009DC8: .4byte gRecvCmds
_08009DCC: .4byte gUnknown_3003EB8
_08009DD0: .4byte gLinkPlayers
_08009DD4: .4byte gUnknown_82345C0
@@ -1187,7 +1187,7 @@ _08009E08:
b _08009E3E
_08009E0E:
ldr r3, _08009E2C @ =gUnknown_8234598
- ldr r0, _08009E30 @ =gUnknown_3003ED0
+ ldr r0, _08009E30 @ =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r2, [r0]
@@ -1202,9 +1202,9 @@ _08009E0E:
b _08009E3E
.align 2, 0
_08009E2C: .4byte gUnknown_8234598
-_08009E30: .4byte gUnknown_3003ED0
+_08009E30: .4byte gRecvCmds
_08009E34:
- ldr r0, _08009E5C @ =gUnknown_3003ED0
+ ldr r0, _08009E5C @ =gRecvCmds
adds r0, 0x2
adds r0, r4, r0
ldrh r0, [r0]
@@ -1226,7 +1226,7 @@ _08009E4A:
pop {r0}
bx r0
.align 2, 0
-_08009E5C: .4byte gUnknown_3003ED0
+_08009E5C: .4byte gRecvCmds
thumb_func_end sub_8009B70
thumb_func_start sub_8009E60
@@ -3779,7 +3779,7 @@ HandleLinkConnection: @ 800B178
bne _0800B1C8
ldr r0, _0800B1B4 @ =gUnknown_3003F84
ldr r1, _0800B1B8 @ =gUnknown_3003F50
- ldr r2, _0800B1BC @ =gUnknown_3003ED0
+ ldr r2, _0800B1BC @ =gRecvCmds
bl LinkMain1
ldr r4, _0800B1C0 @ =gUnknown_3003F20
str r0, [r4]
@@ -3801,7 +3801,7 @@ _0800B1AA:
_0800B1B0: .4byte gWirelessCommType
_0800B1B4: .4byte gUnknown_3003F84
_0800B1B8: .4byte gUnknown_3003F50
-_0800B1BC: .4byte gUnknown_3003ED0
+_0800B1BC: .4byte gRecvCmds
_0800B1C0: .4byte gUnknown_3003F20
_0800B1C4: .4byte gMain + 0x2C
_0800B1C8:
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index e15838946..feb7c886f 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -77,7 +77,7 @@ _080F863E:
bl CpuSet
mov r0, r8
strh r5, [r0]
- ldr r1, _080F86B4 @ =gUnknown_3003ED0
+ ldr r1, _080F86B4 @ =gRecvCmds
ldr r2, _080F86B8 @ =0x01000028
bl CpuSet
mov r0, r9
@@ -99,7 +99,7 @@ _080F86A4: .4byte gUnknown_30054BC
_080F86A8: .4byte 0x00000634
_080F86AC: .4byte gUnknown_3003F50
_080F86B0: .4byte 0x01000008
-_080F86B4: .4byte gUnknown_3003ED0
+_080F86B4: .4byte gRecvCmds
_080F86B8: .4byte 0x01000028
_080F86BC: .4byte gLinkPlayers
_080F86C0: .4byte 0x01000046
@@ -1228,7 +1228,7 @@ sub_80F8FD4: @ 80F8FD4
push {r4-r7,lr}
sub sp, 0x4
movs r2, 0
- ldr r7, _080F9028 @ =gUnknown_3003ED0
+ ldr r7, _080F9028 @ =gRecvCmds
ldr r0, _080F902C @ =gUnknown_3005450
adds r6, r7, 0
ldr r1, _080F9030 @ =0x0000093f
@@ -1268,7 +1268,7 @@ _080F8FF4:
pop {r0}
bx r0
.align 2, 0
-_080F9028: .4byte gUnknown_3003ED0
+_080F9028: .4byte gRecvCmds
_080F902C: .4byte gUnknown_3005450
_080F9030: .4byte 0x0000093f
_080F9034: .4byte 0x01000028
@@ -1278,7 +1278,7 @@ _080F9034: .4byte 0x01000028
sub_80F9038: @ 80F9038
push {lr}
ldr r3, _080F9064 @ =gUnknown_3003F50
- ldr r2, _080F9068 @ =gUnknown_3003ED0
+ ldr r2, _080F9068 @ =gRecvCmds
movs r1, 0x6
_080F9040:
ldrh r0, [r3]
@@ -1301,7 +1301,7 @@ _080F9056:
bx r0
.align 2, 0
_080F9064: .4byte gUnknown_3003F50
-_080F9068: .4byte gUnknown_3003ED0
+_080F9068: .4byte gRecvCmds
thumb_func_end sub_80F9038
thumb_func_start sub_80F906C
@@ -1375,7 +1375,7 @@ _080F90E8:
_080F90EC: .4byte gUnknown_3007460
_080F90F0:
movs r3, 0
- ldr r4, _080F9118 @ =gUnknown_3003ED0
+ ldr r4, _080F9118 @ =gRecvCmds
_080F90F4:
movs r2, 0
lsls r0, r3, 4
@@ -1397,7 +1397,7 @@ _080F9110:
pop {r1}
bx r1
.align 2, 0
-_080F9118: .4byte gUnknown_3003ED0
+_080F9118: .4byte gRecvCmds
thumb_func_end sub_80F90DC
thumb_func_start sub_80F911C
@@ -1664,7 +1664,7 @@ _080F9304:
str r2, [sp, 0x4]
adds r5, 0x1
str r5, [sp]
- ldr r1, _080F9450 @ =gUnknown_3003ED0
+ ldr r1, _080F9450 @ =gRecvCmds
mov r9, r1
adds r5, r3, 0
adds r7, r4, 0
@@ -1791,7 +1791,7 @@ _080F93FA:
_080F9444: .4byte gUnknown_3005450
_080F9448: .4byte 0x000009a6
_080F944C: .4byte gUnknown_3005DE6
-_080F9450: .4byte gUnknown_3003ED0
+_080F9450: .4byte gRecvCmds
_080F9454: .4byte 0x0000099d
_080F9458: .4byte 0x00000991
_080F945C: .4byte gUnknown_203AC08
@@ -1904,7 +1904,7 @@ sub_80F9514: @ 80F9514
mov r1, sp
bl sub_80FC6E8
movs r1, 0
- ldr r0, _080F963C @ =gUnknown_3003ED0
+ ldr r0, _080F963C @ =gRecvCmds
mov r12, r0
_080F952A:
movs r4, 0
@@ -2038,7 +2038,7 @@ _080F9628:
bx r1
.align 2, 0
_080F9638: .4byte gUnknown_3005574
-_080F963C: .4byte gUnknown_3003ED0
+_080F963C: .4byte gRecvCmds
_080F9640: .4byte gUnknown_3005E10
_080F9644: .4byte gUnknown_3005450
_080F9648: .4byte 0x0000099c
@@ -2348,7 +2348,7 @@ sub_80F9868: @ 80F9868
_080F9876:
mov r1, r8
lsls r5, r1, 4
- ldr r2, _080F98B4 @ =gUnknown_3003ED0
+ ldr r2, _080F98B4 @ =gRecvCmds
adds r0, r5, r2
ldrh r7, [r0]
movs r3, 0xFF
@@ -2379,7 +2379,7 @@ _080F98A2:
_080F98B0:
b _080F9BF4
.align 2, 0
-_080F98B4: .4byte gUnknown_3003ED0
+_080F98B4: .4byte gRecvCmds
_080F98B8:
movs r0, 0xEE
lsls r0, 7
@@ -2562,7 +2562,7 @@ _080F99FE:
adds r2, r4, 0x1
lsls r0, r2, 1
adds r0, r3
- ldr r4, _080F9A90 @ =gUnknown_3003ED0
+ ldr r4, _080F9A90 @ =gRecvCmds
adds r0, r4
ldrh r0, [r0]
strh r0, [r1]
@@ -2623,7 +2623,7 @@ _080F9A80:
.align 2, 0
_080F9A88: .4byte gUnknown_3005450
_080F9A8C: .4byte gBlockRecvBuffer
-_080F9A90: .4byte gUnknown_3003ED0
+_080F9A90: .4byte gRecvCmds
_080F9A94: .4byte gUnknown_843EBD4
_080F9A98: .4byte gReceivedRemoteLinkPlayers
_080F9A9C:
@@ -2703,7 +2703,7 @@ _080F9B00:
adds r0, r7, r2
strb r1, [r0]
_080F9B38:
- ldr r0, _080F9B64 @ =gUnknown_3003ED0
+ ldr r0, _080F9B64 @ =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
@@ -2718,7 +2718,7 @@ _080F9B54: .4byte gUnknown_3003ED2
_080F9B58: .4byte gUnknown_3007460
_080F9B5C: .4byte gUnknown_3003ED4
_080F9B60: .4byte 0x0000099c
-_080F9B64: .4byte gUnknown_3003ED0
+_080F9B64: .4byte gRecvCmds
_080F9B68:
movs r0, 0xEE
lsls r0, 8
@@ -2732,7 +2732,7 @@ _080F9B68:
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1, 0x4]
- ldr r0, _080F9B9C @ =gUnknown_3003ED0
+ ldr r0, _080F9B9C @ =gRecvCmds
adds r0, 0x6
adds r0, r5, r0
ldrh r0, [r0]
@@ -2742,7 +2742,7 @@ _080F9B68:
_080F9B90: .4byte gUnknown_3003F50
_080F9B94: .4byte gUnknown_3003ED2
_080F9B98: .4byte gUnknown_3003ED4
-_080F9B9C: .4byte gUnknown_3003ED0
+_080F9B9C: .4byte gRecvCmds
_080F9BA0:
ldr r4, _080F9BD0 @ =gUnknown_3005450
ldrb r0, [r4, 0xC]
@@ -3267,7 +3267,7 @@ _080F9F74: .4byte gUnknown_3003F50
_080F9F78: .4byte gUnknown_3005450
_080F9F7C:
bl GetMultiplayerId
- ldr r1, _080F9FA0 @ =gUnknown_3003ED0
+ ldr r1, _080F9FA0 @ =gRecvCmds
lsls r0, 24
lsrs r0, 20
adds r0, r1
@@ -3285,7 +3285,7 @@ _080F9F98:
pop {r0}
bx r0
.align 2, 0
-_080F9FA0: .4byte gUnknown_3003ED0
+_080F9FA0: .4byte gRecvCmds
_080F9FA4: .4byte sub_80F9FA8
thumb_func_end rfufunc_80F9F44
@@ -3378,7 +3378,7 @@ rfufunc_80FA020: @ 80FA020
strh r0, [r3]
movs r4, 0
mov r9, r5
- ldr r0, _080FA0D4 @ =gUnknown_3003ED0
+ ldr r0, _080FA0D4 @ =gRecvCmds
mov r12, r0
lsls r5, r6, 4
adds r7, r2, 0
@@ -3441,7 +3441,7 @@ _080FA05C:
_080FA0C8: .4byte gUnknown_3005450
_080FA0CC: .4byte gUnknown_3003F50
_080FA0D0: .4byte 0xffff8900
-_080FA0D4: .4byte gUnknown_3003ED0
+_080FA0D4: .4byte gRecvCmds
_080FA0D8: .4byte gUnknown_843EBD4
_080FA0DC: .4byte gUnknown_203AC08
_080FA0E0:
@@ -6835,7 +6835,7 @@ sub_80FBA44: @ 80FBA44
sub sp, 0x4
movs r0, 0
str r0, [sp]
- ldr r1, _080FBA5C @ =gUnknown_3003ED0
+ ldr r1, _080FBA5C @ =gRecvCmds
ldr r2, _080FBA60 @ =0x05000014
mov r0, sp
bl CpuSet
@@ -6843,7 +6843,7 @@ sub_80FBA44: @ 80FBA44
pop {r0}
bx r0
.align 2, 0
-_080FBA5C: .4byte gUnknown_3003ED0
+_080FBA5C: .4byte gRecvCmds
_080FBA60: .4byte 0x05000014
thumb_func_end sub_80FBA44
diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s
index 388c871d9..f2e88b619 100644
--- a/asm/link_rfu_3.s
+++ b/asm/link_rfu_3.s
@@ -7477,7 +7477,7 @@ _08119900: .4byte gSpecialVar_Result
sub_8119904: @ 8119904
push {r4,r5,lr}
adds r2, r0, 0
- ldr r3, _08119940 @ =gUnknown_3003ED0
+ ldr r3, _08119940 @ =gRecvCmds
ldrh r5, [r3, 0x12]
adds r4, r5, 0
cmp r4, 0
@@ -7506,7 +7506,7 @@ _08119938:
pop {r0}
bx r0
.align 2, 0
-_08119940: .4byte gUnknown_3003ED0
+_08119940: .4byte gRecvCmds
thumb_func_end sub_8119904
thumb_func_start sub_8119944
@@ -10578,7 +10578,7 @@ _0811B0A0: .4byte gUnknown_8457E0C
sub_811B0A4: @ 811B0A4
push {lr}
adds r2, r0, 0
- ldr r0, _0811B0C4 @ =gUnknown_3003ED0
+ ldr r0, _0811B0C4 @ =gRecvCmds
ldrh r1, [r0, 0x2]
cmp r1, 0
beq _0811B0C8
@@ -10593,7 +10593,7 @@ _0811B0B8:
movs r0, 0x1
b _0811B0CA
.align 2, 0
-_0811B0C4: .4byte gUnknown_3003ED0
+_0811B0C4: .4byte gRecvCmds
_0811B0C8:
movs r0, 0
_0811B0CA:
diff --git a/asm/pokemon_jump.s b/asm/pokemon_jump.s
index 1af1fd10b..c00c08f20 100644
--- a/asm/pokemon_jump.s
+++ b/asm/pokemon_jump.s
@@ -596,7 +596,7 @@ sub_8147A34: @ 8147A34
ldrb r0, [r0]
cmp r0, 0
beq _08147A98
- ldr r1, _08147A90 @ =gUnknown_3003ED0
+ ldr r1, _08147A90 @ =gRecvCmds
ldrh r0, [r1, 0x2]
ldr r5, _08147A94 @ =0x00007fff
cmp r0, r5
@@ -626,7 +626,7 @@ _08147A5C:
.align 2, 0
_08147A88: .4byte gTasks+0x8
_08147A8C: .4byte gReceivedRemoteLinkPlayers
-_08147A90: .4byte gUnknown_3003ED0
+_08147A90: .4byte gRecvCmds
_08147A94: .4byte 0x00007fff
_08147A98:
ldrh r0, [r4, 0x16]
diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s
index f47e312ff..dcdf8ad3b 100644
--- a/asm/pokemon_jump_2.s
+++ b/asm/pokemon_jump_2.s
@@ -4313,7 +4313,7 @@ sub_8149A90: @ 8149A90
push {r4,lr}
sub sp, 0xC
adds r4, r1, 0
- ldr r3, _08149AC4 @ =gUnknown_3003ED0
+ ldr r3, _08149AC4 @ =gRecvCmds
lsls r2, r0, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -4337,7 +4337,7 @@ _08149AC0:
movs r0, 0
b _08149AD8
.align 2, 0
-_08149AC4: .4byte gUnknown_3003ED0
+_08149AC4: .4byte gRecvCmds
_08149AC8:
mov r0, sp
ldrh r0, [r0, 0x2]
@@ -4443,7 +4443,7 @@ sub_8149B7C: @ 8149B7C
sub sp, 0xC
adds r5, r0, 0
adds r4, r1, 0
- ldr r2, _08149BE4 @ =gUnknown_3003ED0
+ ldr r2, _08149BE4 @ =gRecvCmds
ldrh r0, [r2]
movs r1, 0xFF
lsls r1, 8
@@ -4491,7 +4491,7 @@ sub_8149B7C: @ 8149B7C
movs r0, 0x1
b _08149BEA
.align 2, 0
-_08149BE4: .4byte gUnknown_3003ED0
+_08149BE4: .4byte gRecvCmds
_08149BE8:
movs r0, 0
_08149BEA:
@@ -4534,7 +4534,7 @@ sub_8149C24: @ 8149C24
adds r4, r0, 0
adds r5, r2, 0
adds r6, r3, 0
- ldr r3, _08149C80 @ =gUnknown_3003ED0
+ ldr r3, _08149C80 @ =gRecvCmds
lsls r2, r1, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -4575,7 +4575,7 @@ sub_8149C24: @ 8149C24
movs r0, 0x1
b _08149C86
.align 2, 0
-_08149C80: .4byte gUnknown_3003ED0
+_08149C80: .4byte gRecvCmds
_08149C84:
movs r0, 0
_08149C86:
@@ -4590,7 +4590,7 @@ sub_8149C90: @ 8149C90
push {r4,lr}
sub sp, 0xC
adds r4, r0, 0
- ldr r3, _08149CDC @ =gUnknown_3003ED0
+ ldr r3, _08149CDC @ =gRecvCmds
lsls r2, r1, 4
adds r0, r2, r3
ldrh r1, [r0]
@@ -4625,7 +4625,7 @@ sub_8149C90: @ 8149C90
movs r0, 0x1
b _08149CE2
.align 2, 0
-_08149CDC: .4byte gUnknown_3003ED0
+_08149CDC: .4byte gRecvCmds
_08149CE0:
movs r0, 0
_08149CE2:
diff --git a/asm/unk_8159F40.s b/asm/unk_8159F40.s
deleted file mode 100644
index aefa4ecff..000000000
--- a/asm/unk_8159F40.s
+++ /dev/null
@@ -1,1623 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8159F40
-sub_8159F40: @ 8159F40
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- movs r0, 0
- mov r10, r0
- mov r9, r0
- ldr r1, _08159F90 @ =gBattleTypeFlags
- movs r0, 0x80
- lsls r0, 9
- str r0, [r1]
- bl ZeroPlayerPartyMons
- bl ZeroEnemyPartyMons
- ldr r1, _08159F94 @ =gUnknown_84792D0
- ldr r0, _08159F98 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- mov r8, r0
- movs r7, 0
-_08159F72:
- lsls r0, r7, 4
- mov r2, r8
- adds r1, r0, r2
- ldrb r1, [r1]
- adds r4, r0, 0
- cmp r1, 0
- bne _08159FA0
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, _08159F9C @ =gPlayerParty
- adds r6, r1, r0
- movs r0, 0x1
- add r10, r0
- b _08159FAE
- .align 2, 0
-_08159F90: .4byte gBattleTypeFlags
-_08159F94: .4byte gUnknown_84792D0
-_08159F98: .4byte gSpecialVar_0x8004
-_08159F9C: .4byte gPlayerParty
-_08159FA0:
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, _0815A004 @ =gEnemyParty
- adds r6, r1, r0
- movs r2, 0x1
- add r9, r2
-_08159FAE:
- mov r0, r8
- adds r3, r4, r0
- ldrh r1, [r3, 0x2]
- ldrb r2, [r3, 0x1]
- ldrb r0, [r3, 0xD]
- str r0, [sp]
- ldrb r0, [r3, 0xC]
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r3, 0
- bl CreateMonWithGenderNatureLetter
- movs r5, 0
- adds r7, 0x1
- mov r0, r8
- adds r0, 0x4
- adds r4, r0
-_08159FD4:
- ldrh r1, [r4]
- lsls r2, r5, 24
- lsrs r2, 24
- adds r0, r6, 0
- bl SetMonMoveSlot
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08159FD4
- lsls r0, r7, 4
- add r0, r8
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08159F72
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815A004: .4byte gEnemyParty
- thumb_func_end sub_8159F40
-
- thumb_func_start sub_815A008
-sub_815A008: @ 815A008
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r1, 0
- mov r8, r1
- movs r6, 0x1
- movs r2, 0x2
- negs r2, r2
- mov r12, r2
- adds r5, r0, 0
- adds r5, 0x8
- movs r7, 0
- movs r0, 0x41
- negs r0, r0
- mov r10, r0
- movs r1, 0x7F
- mov r9, r1
-_0815A02E:
- ldr r2, _0815A1F4 @ =gMapObjects
- adds r3, r7, r2
- ldrb r0, [r3]
- lsls r0, 31
- lsrs r0, 31
- ands r0, r6
- ldrb r2, [r5]
- mov r1, r12
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r3]
- lsls r0, 28
- lsrs r0, 31
- ands r0, r6
- lsls r0, 1
- movs r2, 0x3
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5]
- ldrb r0, [r3]
- lsls r0, 27
- lsrs r0, 31
- ands r0, r6
- lsls r0, 2
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r3]
- lsls r0, 26
- lsrs r0, 31
- ands r0, r6
- lsls r0, 3
- movs r2, 0x9
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5]
- ldrb r0, [r3, 0x1]
- lsls r0, 31
- lsrs r0, 31
- ands r0, r6
- lsls r0, 4
- movs r1, 0x11
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r3, 0x1]
- lsls r0, 30
- lsrs r0, 31
- ands r0, r6
- lsls r0, 5
- movs r2, 0x21
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5]
- ldrb r0, [r3, 0x1]
- lsls r0, 29
- lsrs r0, 31
- ands r0, r6
- lsls r0, 6
- mov r1, r10
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r3, 0x1]
- lsls r0, 28
- lsrs r0, 31
- lsls r0, 7
- mov r2, r9
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r3, 0x1]
- lsls r0, 27
- lsrs r0, 31
- ands r0, r6
- ldrb r2, [r5, 0x1]
- mov r1, r12
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r3, 0x1]
- lsls r0, 26
- lsrs r0, 31
- ands r0, r6
- lsls r0, 1
- movs r2, 0x3
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x1]
- ldrb r0, [r3, 0x1]
- lsls r0, 25
- lsrs r0, 31
- ands r0, r6
- lsls r0, 2
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r3, 0x1]
- lsrs r0, 7
- ands r0, r6
- lsls r0, 3
- movs r2, 0x9
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x1]
- ldrb r0, [r3, 0x2]
- lsls r0, 31
- lsrs r0, 31
- ands r0, r6
- lsls r0, 4
- movs r1, 0x11
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r3, 0x2]
- lsrs r0, 7
- ands r0, r6
- lsls r0, 5
- movs r2, 0x21
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x1]
- ldrb r0, [r3, 0x3]
- lsls r0, 31
- lsrs r0, 31
- ands r0, r6
- lsls r0, 6
- mov r1, r10
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r3, 0x3]
- lsls r0, 30
- lsrs r0, 31
- lsls r0, 7
- mov r2, r9
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r3, 0x3]
- lsls r0, 29
- lsrs r0, 31
- ands r0, r6
- ldrb r2, [r5, 0x2]
- mov r1, r12
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x2]
- ldrb r2, [r3, 0x18]
- lsls r2, 28
- lsrs r2, 27
- movs r0, 0x1F
- negs r0, r0
- ands r1, r0
- orrs r1, r2
- strb r1, [r5, 0x2]
- ldrb r1, [r3, 0xB]
- lsls r1, 28
- movs r4, 0xF
- lsrs r1, 28
- ldrb r2, [r5, 0x3]
- adds r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
- ldrb r1, [r3, 0xB]
- lsrs r1, 4
- lsls r1, 4
- ands r0, r4
- orrs r0, r1
- strb r0, [r5, 0x3]
- ldrb r0, [r3, 0x5]
- strb r0, [r5, 0x4]
- ldrb r0, [r3, 0x6]
- strb r0, [r5, 0x5]
- ldrb r0, [r3, 0x7]
- strb r0, [r5, 0x6]
- ldrb r0, [r3, 0x8]
- strb r0, [r5, 0x7]
- ldrb r0, [r3, 0x9]
- strb r0, [r5, 0x8]
- ldrb r0, [r3, 0xA]
- strb r0, [r5, 0x9]
- ldrh r0, [r3, 0x10]
- strh r0, [r5, 0xA]
- ldrh r0, [r3, 0x12]
- strh r0, [r5, 0xC]
- ldrb r0, [r3, 0x1D]
- strb r0, [r5, 0xE]
- ldrb r0, [r3, 0x1F]
- strb r0, [r5, 0xF]
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- strb r0, [r5, 0x10]
- adds r3, 0x22
- ldrb r0, [r3]
- strb r0, [r5, 0x11]
- adds r5, 0x14
- adds r7, 0x24
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0xF
- bhi _0815A1E4
- b _0815A02E
-_0815A1E4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815A1F4: .4byte gMapObjects
- thumb_func_end sub_815A008
-
- thumb_func_start sub_815A1F8
-sub_815A1F8: @ 815A1F8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- str r1, [sp, 0x4]
- adds r0, 0x8
- str r0, [sp, 0x8]
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r4, _0815A480 @ =gMapObjects
- ldr r2, _0815A484 @ =0x01000120
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0
- mov r12, r0
- movs r1, 0x1
- mov r10, r1
-_0815A224:
- mov r2, r12
- lsls r7, r2, 3
- adds r5, r7, r2
- lsls r5, 2
- ldr r0, _0815A480 @ =gMapObjects
- adds r5, r0
- lsls r6, r2, 2
- add r6, r12
- lsls r6, 2
- ldr r1, [sp, 0x8]
- adds r6, r1
- ldrb r0, [r6]
- lsls r0, 31
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- ldrb r2, [r5]
- movs r1, 0x2
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r6]
- lsls r0, 30
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- lsls r0, 3
- movs r2, 0x9
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5]
- ldrb r0, [r6]
- lsls r0, 29
- lsrs r0, 31
- mov r1, r10
- ands r0, r1
- lsls r0, 4
- movs r1, 0x11
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r6]
- lsls r0, 28
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- lsls r0, 5
- movs r4, 0x21
- negs r4, r4
- ands r1, r4
- orrs r1, r0
- strb r1, [r5]
- ldrb r0, [r6]
- lsls r0, 27
- lsrs r0, 31
- ands r0, r2
- ldrb r1, [r5, 0x1]
- movs r2, 0x2
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x1]
- ldrb r0, [r6]
- lsls r0, 26
- lsrs r0, 31
- mov r1, r10
- ands r0, r1
- lsls r0, 1
- movs r1, 0x3
- negs r1, r1
- mov r8, r1
- mov r3, r8
- ands r3, r2
- orrs r3, r0
- strb r3, [r5, 0x1]
- ldrb r0, [r6]
- lsls r0, 25
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- lsls r0, 2
- subs r1, 0x2
- mov r9, r1
- ands r1, r3
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r6]
- lsrs r0, 7
- ands r0, r2
- lsls r0, 3
- movs r2, 0x9
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- lsls r0, 31
- lsrs r0, 31
- mov r1, r10
- ands r0, r1
- lsls r0, 4
- movs r1, 0x11
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- lsls r0, 30
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- lsls r0, 5
- ands r4, r1
- orrs r4, r0
- strb r4, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- lsls r0, 29
- lsrs r0, 31
- ands r0, r2
- lsls r0, 6
- movs r2, 0x41
- negs r2, r2
- adds r1, r2, 0
- ands r4, r1
- orrs r4, r0
- strb r4, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- lsls r0, 28
- lsrs r0, 31
- lsls r0, 7
- movs r3, 0x7F
- ands r4, r3
- orrs r4, r0
- strb r4, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- lsls r0, 27
- lsrs r0, 31
- mov r1, r10
- ands r0, r1
- ldrb r2, [r5, 0x2]
- movs r1, 0x2
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x2]
- ldrb r0, [r6, 0x1]
- lsls r0, 26
- lsrs r0, 31
- lsls r0, 7
- ands r1, r3
- orrs r1, r0
- strb r1, [r5, 0x2]
- ldrb r0, [r6, 0x1]
- lsls r0, 25
- lsrs r0, 31
- mov r2, r10
- ands r0, r2
- ldrb r2, [r5, 0x3]
- movs r1, 0x2
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x3]
- ldrb r0, [r6, 0x1]
- lsrs r0, 7
- mov r2, r10
- ands r0, r2
- lsls r0, 1
- mov r2, r8
- ands r2, r1
- orrs r2, r0
- mov r8, r2
- strb r2, [r5, 0x3]
- ldrb r0, [r6, 0x2]
- lsls r0, 31
- lsrs r0, 31
- mov r1, r10
- ands r0, r1
- lsls r0, 2
- mov r1, r9
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x3]
- ldrb r1, [r6, 0x2]
- lsls r1, 27
- lsrs r1, 28
- ldrb r2, [r5, 0x18]
- movs r4, 0x10
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x18]
- ldrb r1, [r6, 0x3]
- lsls r1, 28
- movs r3, 0xF
- lsrs r1, 28
- ldrb r2, [r5, 0xB]
- adds r0, r4, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0xB]
- ldrb r1, [r6, 0x3]
- lsrs r1, 4
- lsls r1, 4
- ands r0, r3
- orrs r0, r1
- strb r0, [r5, 0xB]
- ldrb r0, [r6, 0x4]
- strb r0, [r5, 0x5]
- ldrb r0, [r6, 0x5]
- strb r0, [r5, 0x6]
- ldrb r0, [r6, 0x6]
- strb r0, [r5, 0x7]
- ldrb r0, [r6, 0x7]
- strb r0, [r5, 0x8]
- ldrb r0, [r6, 0x8]
- strb r0, [r5, 0x9]
- ldrb r0, [r6, 0x9]
- strb r0, [r5, 0xA]
- ldrh r0, [r6, 0xA]
- strh r0, [r5, 0x10]
- ldrh r0, [r6, 0xC]
- strh r0, [r5, 0x12]
- ldrb r0, [r6, 0xE]
- strb r0, [r5, 0x1D]
- ldrb r0, [r6, 0xF]
- strb r0, [r5, 0x1F]
- ldrb r0, [r6, 0x10]
- adds r1, r5, 0
- adds r1, 0x21
- strb r0, [r1]
- ldrb r0, [r6, 0x11]
- adds r1, 0x1
- strb r0, [r1]
- movs r6, 0
- mov r8, r7
- mov r2, r12
- adds r2, 0x1
- str r2, [sp, 0xC]
- ldrb r7, [r5, 0x8]
- ldr r3, [sp, 0x4]
- movs r0, 0xF
- mov r9, r0
-_0815A412:
- ldrb r1, [r3]
- cmp r7, r1
- bne _0815A444
- ldrh r0, [r3, 0x4]
- adds r0, 0x7
- strh r0, [r5, 0xC]
- ldrh r0, [r3, 0x6]
- adds r0, 0x7
- strh r0, [r5, 0xE]
- ldrb r1, [r3, 0xA]
- lsls r1, 28
- lsrs r1, 28
- mov r2, r9
- ands r1, r2
- ldrb r0, [r5, 0x19]
- ands r0, r4
- orrs r0, r1
- strb r0, [r5, 0x19]
- ldrb r1, [r3, 0xA]
- lsrs r1, 4
- lsls r1, 4
- movs r2, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x19]
-_0815A444:
- adds r3, 0x18
- adds r6, 0x1
- cmp r6, 0x3F
- bls _0815A412
- mov r0, r8
- add r0, r12
- lsls r0, 2
- ldr r1, _0815A480 @ =gMapObjects
- adds r6, r0, r1
- movs r2, 0x10
- ldrsh r0, [r6, r2]
- movs r2, 0x12
- ldrsh r1, [r6, r2]
- bl MapGridGetMetatileBehaviorAt
- strb r0, [r6, 0x1E]
- ldrb r4, [r6, 0x1F]
- movs r1, 0x10
- ldrsh r0, [r6, r1]
- movs r2, 0x12
- ldrsh r1, [r6, r2]
- bl MapGridGetMetatileBehaviorAt
- cmp r4, r0
- bne _0815A488
- ldrh r0, [r6, 0x10]
- strh r0, [r6, 0x14]
- ldrh r0, [r6, 0x12]
- b _0815A506
- .align 2, 0
-_0815A480: .4byte gMapObjects
-_0815A484: .4byte 0x01000120
-_0815A488:
- ldrb r4, [r6, 0x1F]
- ldrh r0, [r6, 0x10]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x12
- ldrsh r1, [r6, r2]
- bl MapGridGetMetatileBehaviorAt
- cmp r4, r0
- bne _0815A4A8
- ldrh r0, [r6, 0x10]
- subs r0, 0x1
- strh r0, [r6, 0x14]
- ldrh r0, [r6, 0x12]
- b _0815A506
-_0815A4A8:
- ldrb r4, [r6, 0x1F]
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x12
- ldrsh r1, [r6, r2]
- bl MapGridGetMetatileBehaviorAt
- cmp r4, r0
- bne _0815A4C8
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- strh r0, [r6, 0x14]
- ldrh r0, [r6, 0x12]
- b _0815A506
-_0815A4C8:
- ldrb r4, [r6, 0x1F]
- movs r1, 0x10
- ldrsh r0, [r6, r1]
- ldrh r1, [r6, 0x12]
- subs r1, 0x1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- cmp r4, r0
- bne _0815A4E8
- ldrh r0, [r6, 0x10]
- strh r0, [r6, 0x14]
- ldrh r0, [r6, 0x12]
- subs r0, 0x1
- b _0815A506
-_0815A4E8:
- ldrb r4, [r6, 0x1F]
- movs r2, 0x10
- ldrsh r0, [r6, r2]
- ldrh r1, [r6, 0x12]
- adds r1, 0x1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- cmp r4, r0
- bne _0815A508
- ldrh r0, [r6, 0x10]
- strh r0, [r6, 0x14]
- ldrh r0, [r6, 0x12]
- adds r0, 0x1
-_0815A506:
- strh r0, [r6, 0x16]
-_0815A508:
- ldr r0, [sp, 0xC]
- mov r12, r0
- cmp r0, 0xF
- bhi _0815A512
- b _0815A224
-_0815A512:
- ldr r0, _0815A538 @ =gMapObjects
- ldr r1, _0815A53C @ =gSaveBlock1Ptr
- ldr r1, [r1]
- movs r2, 0xD4
- lsls r2, 3
- adds r1, r2
- movs r2, 0x90
- lsls r2, 1
- bl CpuSet
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815A538: .4byte gMapObjects
-_0815A53C: .4byte gSaveBlock1Ptr
- thumb_func_end sub_815A1F8
-
- thumb_func_start sub_815A540
-sub_815A540: @ 815A540
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0815A5AC @ =gUnknown_203ADFA
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0815A5A4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfable
- lsls r0, 24
- cmp r0, 0
- bne _0815A5A4
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0815A5A4
- ldr r0, _0815A5B0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _0815A5B4 @ =gMapObjects
- adds r4, r0
- movs r0, 0x1
- bl SetPlayerAvatarTransitionFlags
- ldrb r1, [r4, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0815A5B8 @ =gSprites
- adds r0, r1
- bl DestroySprite
-_0815A5A4:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0815A5AC: .4byte gUnknown_203ADFA
-_0815A5B0: .4byte gPlayerAvatar
-_0815A5B4: .4byte gMapObjects
-_0815A5B8: .4byte gSprites
- thumb_func_end sub_815A540
-
- thumb_func_start sub_815A5BC
-sub_815A5BC: @ 815A5BC
- push {lr}
- sub sp, 0x8
- ldr r3, _0815A5E4 @ =0xffffff00
- ldr r1, [sp]
- ands r1, r3
- movs r2, 0x1
- orrs r1, r2
- str r1, [sp]
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [sp, 0x4]
- ands r1, r3
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl sub_80F9E2C
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_0815A5E4: .4byte 0xffffff00
- thumb_func_end sub_815A5BC
-
- thumb_func_start sub_815A5E8
-sub_815A5E8: @ 815A5E8
- push {lr}
- adds r2, r0, 0
- ldr r3, _0815A610 @ =gUnknown_3003ED0
- ldrh r0, [r3]
- movs r1, 0xFF
- lsls r1, 8
- ands r1, r0
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- bne _0815A60A
- lsls r0, r2, 4
- adds r1, r3, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0x1
- beq _0815A614
-_0815A60A:
- movs r0, 0
- b _0815A616
- .align 2, 0
-_0815A610: .4byte gUnknown_3003ED0
-_0815A614:
- ldrb r0, [r1, 0x4]
-_0815A616:
- pop {r1}
- bx r1
- thumb_func_end sub_815A5E8
-
- thumb_func_start sub_815A61C
-sub_815A61C: @ 815A61C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- ldr r4, [sp, 0x48]
- lsls r4, 24
- str r4, [sp, 0x1C]
- movs r4, 0x14
- adds r4, r0
- mov r9, r4
- mov r5, sp
- movs r4, 0x2
- strb r4, [r5]
- mov r10, sp
- mov r5, r9
- ldrb r4, [r5, 0xB]
- movs r7, 0xF
- adds r5, r7, 0
- ands r5, r4
- mov r6, r10
- ldrb r6, [r6, 0x1]
- mov r8, r6
- movs r4, 0x10
- negs r4, r4
- mov r6, r8
- ands r4, r6
- orrs r4, r5
- mov r5, r10
- strb r4, [r5, 0x1]
- mov r8, sp
- mov r6, r9
- ldrb r5, [r6, 0xC]
- lsls r5, 4
- ands r4, r7
- orrs r4, r5
- mov r5, r8
- strb r4, [r5, 0x1]
- ldrb r5, [r6, 0xD]
- movs r6, 0xF
- ands r5, r6
- mov r4, r10
- ldrb r4, [r4, 0x2]
- mov r8, r4
- movs r4, 0x10
- negs r4, r4
- mov r6, r8
- ands r4, r6
- orrs r4, r5
- mov r5, r10
- strb r4, [r5, 0x2]
- mov r8, sp
- mov r6, r9
- ldrb r5, [r6, 0xE]
- lsls r5, 4
- ands r4, r7
- orrs r4, r5
- mov r5, r8
- strb r4, [r5, 0x2]
- ldrb r5, [r6, 0xF]
- movs r6, 0xF
- ands r5, r6
- mov r4, r10
- ldrb r4, [r4, 0x3]
- mov r8, r4
- movs r4, 0x10
- negs r4, r4
- mov r6, r8
- ands r4, r6
- orrs r4, r5
- mov r5, r10
- strb r4, [r5, 0x3]
- mov r8, sp
- mov r6, r9
- ldrb r5, [r6, 0x10]
- lsls r5, 4
- ands r4, r7
- orrs r4, r5
- mov r5, r8
- strb r4, [r5, 0x3]
- ldrb r5, [r6, 0x11]
- movs r6, 0xF
- ands r5, r6
- mov r4, r10
- ldrb r4, [r4, 0x4]
- mov r8, r4
- movs r4, 0x10
- negs r4, r4
- mov r6, r8
- ands r4, r6
- orrs r4, r5
- mov r5, r10
- strb r4, [r5, 0x4]
- mov r8, sp
- mov r6, r9
- ldrb r5, [r6, 0x12]
- lsls r5, 4
- ands r4, r7
- orrs r4, r5
- mov r5, r8
- strb r4, [r5, 0x4]
- ldrb r4, [r6, 0x13]
- movs r6, 0xF
- ands r4, r6
- mov r6, r8
- ldrb r5, [r6, 0x5]
- movs r6, 0x10
- negs r6, r6
- ands r6, r5
- orrs r6, r4
- str r6, [sp, 0xC]
- mov r4, r8
- strb r6, [r4, 0x5]
- mov r5, sp
- mov r6, r9
- ldrb r4, [r6, 0x14]
- lsls r4, 4
- ldr r6, [sp, 0xC]
- ands r6, r7
- orrs r6, r4
- strb r6, [r5, 0x5]
- mov r7, sp
- movs r4, 0x3
- mov r8, r4
- ldrb r0, [r0, 0x14]
- mov r5, r8
- ands r0, r5
- ldrb r5, [r7, 0x6]
- movs r6, 0x4
- negs r6, r6
- mov r10, r6
- mov r4, r10
- ands r4, r5
- orrs r4, r0
- strb r4, [r7, 0x6]
- mov r5, r9
- ldrb r0, [r5, 0x1]
- mov r6, r8
- ands r0, r6
- lsls r0, 2
- movs r5, 0xD
- negs r5, r5
- ands r5, r4
- orrs r5, r0
- strb r5, [r7, 0x6]
- mov r0, r9
- ldrb r4, [r0, 0x2]
- ands r4, r6
- lsls r4, 4
- movs r0, 0x31
- negs r0, r0
- ands r0, r5
- orrs r0, r4
- strb r0, [r7, 0x6]
- mov r5, sp
- mov r6, r9
- ldrb r4, [r6, 0x3]
- lsls r4, 6
- movs r6, 0x3F
- ands r0, r6
- orrs r0, r4
- strb r0, [r5, 0x6]
- mov r4, r9
- ldrb r0, [r4, 0x4]
- mov r5, r8
- ands r0, r5
- ldrb r5, [r7, 0x7]
- mov r4, r10
- ands r4, r5
- orrs r4, r0
- strb r4, [r7, 0x7]
- mov r6, r9
- ldrb r0, [r6, 0x5]
- mov r5, r8
- ands r0, r5
- lsls r0, 2
- movs r5, 0xD
- negs r5, r5
- ands r5, r4
- orrs r5, r0
- strb r5, [r7, 0x7]
- ldrb r4, [r6, 0x6]
- mov r6, r8
- ands r4, r6
- lsls r4, 4
- movs r0, 0x31
- negs r0, r0
- ands r0, r5
- orrs r0, r4
- strb r0, [r7, 0x7]
- mov r5, sp
- mov r6, r9
- ldrb r4, [r6, 0x7]
- lsls r4, 6
- movs r6, 0x3F
- ands r0, r6
- orrs r0, r4
- strb r0, [r5, 0x7]
- mov r8, sp
- mov r0, r9
- ldrb r4, [r0, 0x8]
- movs r7, 0x3
- adds r0, r7, 0
- ands r0, r4
- mov r4, r8
- ldrb r5, [r4, 0x8]
- mov r4, r10
- ands r4, r5
- orrs r4, r0
- mov r5, r8
- strb r4, [r5, 0x8]
- mov r6, r9
- ldrb r5, [r6, 0x9]
- adds r0, r7, 0
- ands r0, r5
- lsls r0, 2
- movs r5, 0xD
- negs r5, r5
- ands r5, r4
- orrs r5, r0
- mov r0, r8
- strb r5, [r0, 0x8]
- ldrb r0, [r1]
- adds r4, r7, 0
- ands r4, r0
- lsls r4, 4
- movs r0, 0x31
- negs r0, r0
- ands r0, r5
- orrs r0, r4
- mov r4, r8
- strb r0, [r4, 0x8]
- mov r5, sp
- ldrb r4, [r2]
- lsls r4, 6
- movs r6, 0x3F
- ands r0, r6
- orrs r0, r4
- strb r0, [r5, 0x8]
- ldrb r4, [r3]
- adds r0, r7, 0
- ands r0, r4
- ldrb r4, [r5, 0x9]
- mov r6, r10
- ands r6, r4
- orrs r6, r0
- mov r10, r6
- strb r6, [r5, 0x9]
- ldr r0, [sp, 0x40]
- ldrb r4, [r0]
- adds r0, r7, 0
- ands r0, r4
- lsls r0, 2
- movs r4, 0xD
- negs r4, r4
- ands r6, r4
- orrs r6, r0
- str r6, [sp, 0x10]
- strb r6, [r5, 0x9]
- mov r4, sp
- ldr r5, [sp, 0x44]
- ldrb r0, [r5]
- adds r6, r7, 0
- ands r6, r0
- lsls r0, r6, 4
- subs r7, 0x34
- ldr r5, [sp, 0x10]
- ands r7, r5
- orrs r7, r0
- strb r7, [r4, 0x9]
- mov r5, sp
- ldrb r0, [r1, 0x4]
- movs r6, 0x1
- mov r12, r6
- mov r4, r12
- ands r4, r0
- lsls r4, 6
- movs r0, 0x41
- negs r0, r0
- mov r10, r0
- ands r0, r7
- orrs r0, r4
- strb r0, [r5, 0x9]
- ldrb r4, [r2, 0x4]
- lsls r4, 7
- movs r5, 0x7F
- ands r0, r5
- orrs r0, r4
- mov r4, r8
- strb r0, [r4, 0x9]
- ldrb r4, [r3, 0x4]
- mov r0, r12
- ands r0, r4
- mov r5, r8
- ldrb r4, [r5, 0xA]
- movs r7, 0x2
- negs r7, r7
- adds r5, r7, 0
- ands r5, r4
- orrs r5, r0
- mov r6, r8
- strb r5, [r6, 0xA]
- mov r9, sp
- ldr r4, [sp, 0x40]
- ldrb r0, [r4, 0x4]
- mov r4, r12
- ands r4, r0
- lsls r4, 1
- movs r6, 0x3
- negs r6, r6
- mov r8, r6
- mov r0, r8
- ands r0, r5
- orrs r0, r4
- mov r4, r9
- strb r0, [r4, 0xA]
- ldr r6, [sp, 0x44]
- ldrb r5, [r6, 0x4]
- mov r4, r12
- ands r4, r5
- lsls r4, 2
- movs r5, 0x5
- negs r5, r5
- ands r0, r5
- orrs r0, r4
- mov r4, r9
- strb r0, [r4, 0xA]
- mov r4, sp
- ldrb r1, [r1, 0x8]
- mov r0, r12
- ands r0, r1
- lsls r0, 2
- ldrb r1, [r4, 0xB]
- ands r5, r1
- orrs r5, r0
- strb r5, [r4, 0xB]
- ldrb r1, [r2, 0x8]
- mov r0, r12
- ands r0, r1
- lsls r0, 3
- movs r1, 0x9
- negs r1, r1
- ands r1, r5
- orrs r1, r0
- strb r1, [r4, 0xB]
- ldrb r2, [r3, 0x8]
- mov r0, r12
- ands r0, r2
- lsls r0, 4
- movs r2, 0x11
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r4, 0xB]
- mov r3, sp
- ldr r5, [sp, 0x40]
- ldrb r0, [r5, 0x8]
- mov r1, r12
- ands r1, r0
- lsls r1, 5
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0xB]
- mov r2, sp
- ldrb r1, [r6, 0x8]
- mov r6, r12
- ands r6, r1
- lsls r1, r6, 6
- mov r3, r10
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0xB]
- ldr r4, [sp, 0x1C]
- lsrs r3, r4, 21
- ldrb r1, [r2, 0xA]
- movs r0, 0x7
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0xA]
- mov r1, sp
- ldr r5, [sp, 0x4C]
- movs r6, 0x1
- ands r5, r6
- lsls r2, r5, 1
- ldrb r0, [r1, 0xB]
- mov r3, r8
- ands r3, r0
- orrs r3, r2
- mov r8, r3
- strb r3, [r1, 0xB]
- mov r0, sp
- ldr r4, [sp, 0x50]
- ands r4, r6
- mov r5, r8
- ands r5, r7
- orrs r5, r4
- strb r5, [r0, 0xB]
- bl sub_80F9E2C
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_815A61C
-
- thumb_func_start sub_815A950
-sub_815A950: @ 815A950
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- ldr r0, [sp, 0x1C]
- mov r12, r0
- ldr r1, [sp, 0x20]
- mov r8, r1
- ldr r0, [sp, 0x24]
- mov r9, r0
- adds r2, r7, 0
- adds r2, 0x14
- ldr r4, _0815A98C @ =gUnknown_3003ED0
- ldrh r0, [r4]
- movs r1, 0xFF
- lsls r1, 8
- ands r1, r0
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- bne _0815A988
- adds r3, r4, 0x2
- ldrb r0, [r4, 0x2]
- cmp r0, 0x2
- beq _0815A990
-_0815A988:
- movs r0, 0
- b _0815AACA
- .align 2, 0
-_0815A98C: .4byte gUnknown_3003ED0
-_0815A990:
- ldrb r0, [r3, 0x1]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0xB]
- ldrb r0, [r3, 0x1]
- lsrs r0, 4
- strb r0, [r2, 0xC]
- ldrb r0, [r3, 0x2]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0xD]
- ldrb r0, [r3, 0x2]
- lsrs r0, 4
- strb r0, [r2, 0xE]
- ldrb r0, [r3, 0x3]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0xF]
- ldrb r0, [r3, 0x3]
- lsrs r0, 4
- strb r0, [r2, 0x10]
- ldrb r0, [r3, 0x4]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0x11]
- ldrb r0, [r3, 0x4]
- lsrs r0, 4
- strb r0, [r2, 0x12]
- ldrb r0, [r3, 0x5]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0x13]
- ldrb r0, [r3, 0x5]
- lsrs r0, 4
- strb r0, [r2, 0x14]
- ldrb r0, [r3, 0x1]
- lsls r0, 28
- lsrs r0, 28
- strb r0, [r2, 0x15]
- ldrb r0, [r3, 0x6]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r7, 0x14]
- ldrb r0, [r3, 0x6]
- lsls r0, 28
- lsrs r0, 30
- strb r0, [r2, 0x1]
- ldrb r0, [r3, 0x6]
- lsls r0, 26
- lsrs r0, 30
- strb r0, [r2, 0x2]
- ldrb r0, [r3, 0x6]
- lsrs r0, 6
- strb r0, [r2, 0x3]
- ldrb r0, [r3, 0x7]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r2, 0x4]
- ldrb r0, [r3, 0x7]
- lsls r0, 28
- lsrs r0, 30
- strb r0, [r2, 0x5]
- ldrb r0, [r3, 0x7]
- lsls r0, 26
- lsrs r0, 30
- strb r0, [r2, 0x6]
- ldrb r0, [r3, 0x7]
- lsrs r0, 6
- strb r0, [r2, 0x7]
- ldrb r0, [r3, 0x8]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r2, 0x8]
- ldrb r0, [r3, 0x8]
- lsls r0, 28
- lsrs r0, 30
- strb r0, [r2, 0x9]
- ldrb r0, [r3, 0x6]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r2, 0xA]
- ldrb r0, [r3, 0x8]
- lsls r0, 26
- lsrs r0, 30
- strb r0, [r5]
- ldrb r0, [r3, 0x9]
- lsls r0, 25
- lsrs r0, 31
- strb r0, [r5, 0x4]
- ldrb r0, [r3, 0xB]
- lsls r0, 29
- lsrs r0, 31
- strb r0, [r5, 0x8]
- ldrb r0, [r3, 0x8]
- lsrs r0, 6
- strb r0, [r6]
- ldrb r0, [r3, 0x9]
- lsrs r0, 7
- strb r0, [r6, 0x4]
- ldrb r0, [r3, 0xB]
- lsls r0, 28
- lsrs r0, 31
- strb r0, [r6, 0x8]
- ldrb r0, [r3, 0x9]
- lsls r0, 30
- lsrs r0, 30
- mov r1, r12
- strb r0, [r1]
- ldrb r0, [r3, 0xA]
- lsls r0, 31
- lsrs r0, 31
- strb r0, [r1, 0x4]
- ldrb r0, [r3, 0xB]
- lsls r0, 27
- lsrs r0, 31
- strb r0, [r1, 0x8]
- ldrb r0, [r3, 0x9]
- lsls r0, 28
- lsrs r0, 30
- mov r1, r8
- strb r0, [r1]
- ldrb r0, [r3, 0xA]
- lsls r0, 30
- lsrs r0, 31
- strb r0, [r1, 0x4]
- ldrb r0, [r3, 0xB]
- lsls r0, 26
- lsrs r0, 31
- strb r0, [r1, 0x8]
- ldrb r0, [r3, 0x9]
- lsls r0, 26
- lsrs r0, 30
- mov r1, r9
- strb r0, [r1]
- ldrb r0, [r3, 0xA]
- lsls r0, 29
- lsrs r0, 31
- strb r0, [r1, 0x4]
- ldrb r0, [r3, 0xB]
- lsls r0, 25
- lsrs r0, 31
- strb r0, [r1, 0x8]
- ldrb r0, [r3, 0xA]
- lsrs r0, 3
- ldr r1, [sp, 0x28]
- strb r0, [r1]
- ldrb r0, [r3, 0xB]
- lsls r0, 30
- lsrs r0, 31
- ldr r1, [sp, 0x2C]
- str r0, [r1]
- ldrb r0, [r3, 0xB]
- lsls r0, 31
- lsrs r0, 31
- ldr r1, [sp, 0x30]
- str r0, [r1]
- movs r0, 0x1
-_0815AACA:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_815A950
-
- thumb_func_start sub_815AAD8
-sub_815AAD8: @ 815AAD8
- push {lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0815AB00 @ =0xffffff00
- ldr r1, [sp]
- ands r1, r3
- movs r2, 0x3
- orrs r1, r2
- str r1, [sp]
- ldr r1, [sp, 0x4]
- ands r1, r3
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl sub_80F9E2C
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_0815AB00: .4byte 0xffffff00
- thumb_func_end sub_815AAD8
-
- thumb_func_start sub_815AB04
-sub_815AB04: @ 815AB04
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- ldr r3, _0815AB2C @ =gUnknown_3003ED0
- ldrh r0, [r3]
- movs r1, 0xFF
- lsls r1, 8
- ands r1, r0
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- bne _0815AB28
- lsls r0, r2, 4
- adds r1, r3, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0x3
- beq _0815AB30
-_0815AB28:
- movs r0, 0
- b _0815AB36
- .align 2, 0
-_0815AB2C: .4byte gUnknown_3003ED0
-_0815AB30:
- ldrb r0, [r1, 0x4]
- strb r0, [r4]
- movs r0, 0x1
-_0815AB36:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_815AB04
-
- thumb_func_start sub_815AB3C
-sub_815AB3C: @ 815AB3C
- push {lr}
- sub sp, 0x8
- ldr r2, _0815AB5C @ =0xffffff00
- ldr r1, [sp]
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- str r1, [sp]
- str r0, [sp, 0x4]
- mov r0, sp
- bl sub_80F9E2C
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_0815AB5C: .4byte 0xffffff00
- thumb_func_end sub_815AB3C
-
- thumb_func_start sub_815AB60
-sub_815AB60: @ 815AB60
- push {lr}
- adds r2, r0, 0
- ldr r3, _0815AB88 @ =gUnknown_3003ED0
- ldrh r0, [r3]
- movs r1, 0xFF
- lsls r1, 8
- ands r1, r0
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- bne _0815AB82
- lsls r0, r2, 4
- adds r1, r3, 0x2
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0x4
- beq _0815AB8C
-_0815AB82:
- movs r0, 0
- b _0815AB8E
- .align 2, 0
-_0815AB88: .4byte gUnknown_3003ED0
-_0815AB8C:
- ldr r0, [r1, 0x4]
-_0815AB8E:
- pop {r1}
- bx r1
- thumb_func_end sub_815AB60
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/unk_815C980.s b/asm/unk_815C980.s
deleted file mode 100644
index a348558f3..000000000
--- a/asm/unk_815C980.s
+++ /dev/null
@@ -1,1314 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_815C980
-sub_815C980: @ 815C980
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r5, _0815C9A0 @ =gUnknown_203F454
- ldr r0, [r5]
- cmp r0, 0
- beq _0815C990
- bl sub_815C9F4
-_0815C990:
- movs r0, 0x8
- bl Alloc
- str r0, [r5]
- cmp r0, 0
- bne _0815C9A4
- movs r0, 0
- b _0815C9EC
- .align 2, 0
-_0815C9A0: .4byte gUnknown_203F454
-_0815C9A4:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- bl Alloc
- ldr r1, [r5]
- str r0, [r1, 0x4]
- cmp r0, 0
- bne _0815C9C0
- adds r0, r1, 0
- bl Free
- movs r0, 0
- b _0815C9EC
-_0815C9C0:
- str r4, [r1]
- movs r3, 0
- cmp r3, r4
- bcs _0815C9EA
- movs r7, 0
- movs r6, 0xFF
- movs r2, 0
-_0815C9CE:
- ldr r0, [r5]
- ldr r0, [r0, 0x4]
- adds r0, r2, r0
- strb r7, [r0]
- ldr r0, [r5]
- ldr r1, [r0, 0x4]
- adds r1, r2, r1
- ldrb r0, [r1, 0x1]
- orrs r0, r6
- strb r0, [r1, 0x1]
- adds r2, 0x1C
- adds r3, 0x1
- cmp r3, r4
- bcc _0815C9CE
-_0815C9EA:
- movs r0, 0x1
-_0815C9EC:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_815C980
-
- thumb_func_start sub_815C9F4
-sub_815C9F4: @ 815C9F4
- push {r4,r5,lr}
- ldr r2, _0815CA3C @ =gUnknown_203F454
- ldr r1, [r2]
- cmp r1, 0
- beq _0815CA34
- ldr r0, [r1, 0x4]
- cmp r0, 0
- beq _0815CA28
- movs r4, 0
- ldr r0, [r1]
- cmp r4, r0
- bcs _0815CA1E
- adds r5, r2, 0
-_0815CA0E:
- adds r0, r4, 0
- bl sub_815D108
- adds r4, 0x1
- ldr r0, [r5]
- ldr r0, [r0]
- cmp r4, r0
- bcc _0815CA0E
-_0815CA1E:
- ldr r0, _0815CA3C @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- bl Free
-_0815CA28:
- ldr r4, _0815CA3C @ =gUnknown_203F454
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
-_0815CA34:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0815CA3C: .4byte gUnknown_203F454
- thumb_func_end sub_815C9F4
-
- thumb_func_start sub_815CA40
-sub_815CA40: @ 815CA40
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r8, r0
- mov r10, r1
- adds r5, r2, 0
- ldr r6, _0815CAB8 @ =gUnknown_203F454
- ldr r0, [r6]
- cmp r0, 0
- beq _0815CB00
- ldr r1, [r0, 0x4]
- mov r0, r8
- lsls r2, r0, 3
- subs r0, r2, r0
- lsls r4, r0, 2
- adds r1, r4, r1
- ldrb r0, [r1]
- mov r9, r2
- cmp r0, 0
- bne _0815CB00
- ldrb r0, [r5, 0x1]
- bl sub_815D244
- ldr r1, [r6]
- ldr r1, [r1, 0x4]
- adds r1, r4, r1
- strb r0, [r1, 0x1]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r0, r4, r0
- ldrb r0, [r0, 0x1]
- cmp r0, 0xFF
- beq _0815CB00
- ldr r0, [r5, 0x8]
- ldrh r0, [r0, 0x6]
- bl GetSpriteTileStartByTag
- ldr r2, [r6]
- ldr r1, [r2, 0x4]
- adds r1, r4, r1
- strh r0, [r1, 0xA]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- ldrh r1, [r0, 0xA]
- ldr r7, _0815CABC @ =0xffff0000
- lsrs r0, r7, 16
- cmp r1, r0
- bne _0815CB0C
- ldr r2, [r5, 0x8]
- ldrh r0, [r2, 0x4]
- adds r1, r2, 0
- cmp r0, 0
- beq _0815CAC0
- adds r0, r1, 0
- bl LoadSpriteSheet
- b _0815CAE0
- .align 2, 0
-_0815CAB8: .4byte gUnknown_203F454
-_0815CABC: .4byte 0xffff0000
-_0815CAC0:
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [r2]
- bl sub_800F0C4
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp, 0x4]
- ands r1, r7
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl LoadCompressedObjectPic
-_0815CAE0:
- ldr r1, [r6]
- ldr r1, [r1, 0x4]
- adds r1, r4, r1
- strh r0, [r1, 0xA]
- ldr r0, _0815CB04 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- mov r2, r9
- mov r3, r8
- subs r0, r2, r3
- lsls r0, 2
- adds r0, r1
- ldrh r1, [r0, 0xA]
- ldr r0, _0815CB08 @ =0x0000ffff
- cmp r1, r0
- bne _0815CB0C
-_0815CB00:
- movs r0, 0
- b _0815CC14
- .align 2, 0
-_0815CB04: .4byte gUnknown_203F454
-_0815CB08: .4byte 0x0000ffff
-_0815CB0C:
- ldr r0, [r5, 0xC]
- ldrh r0, [r0, 0x4]
- bl IndexOfSpritePaletteTag
- ldr r6, _0815CC24 @ =gUnknown_203F454
- ldr r1, [r6]
- ldr r1, [r1, 0x4]
- mov r4, r9
- mov r3, r8
- subs r2, r4, r3
- lsls r4, r2, 2
- adds r1, r4, r1
- strb r0, [r1, 0x4]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r0, r4, r0
- ldrb r0, [r0, 0x4]
- cmp r0, 0xFF
- bne _0815CB40
- ldr r0, [r5, 0xC]
- bl LoadSpritePalette
- ldr r1, [r6]
- ldr r1, [r1, 0x4]
- adds r1, r4, r1
- strb r0, [r1, 0x4]
-_0815CB40:
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- adds r1, r4, r1
- ldrb r0, [r5]
- lsls r0, 30
- lsrs r0, 30
- strb r0, [r1, 0x2]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r0, r4, r0
- ldrb r1, [r5, 0x1]
- strb r1, [r0, 0x3]
- ldr r2, [r6]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- ldrh r1, [r5, 0x4]
- strh r1, [r0, 0xC]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- ldrh r1, [r5, 0x6]
- strh r1, [r0, 0xE]
- ldr r1, [r2, 0x4]
- adds r1, r4, r1
- ldrb r0, [r5]
- lsls r0, 28
- lsrs r0, 30
- strb r0, [r1, 0x6]
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- adds r1, r4, r1
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r0, 30
- strb r0, [r1, 0x5]
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- adds r1, r4, r1
- ldrb r0, [r5]
- lsrs r0, 6
- strb r0, [r1, 0x7]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r0, r4, r0
- ldrb r1, [r5, 0x2]
- strb r1, [r0, 0x8]
- ldrb r1, [r5]
- lsls r0, r1, 28
- lsrs r0, 30
- lsls r1, 26
- lsrs r1, 30
- bl sub_815D324
- ldr r1, [r6]
- ldr r1, [r1, 0x4]
- adds r1, r4, r1
- strb r0, [r1, 0x9]
- ldr r2, [r6]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- ldr r1, [r5, 0x8]
- ldrh r1, [r1, 0x6]
- strh r1, [r0, 0x10]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- ldr r1, [r5, 0xC]
- ldrh r1, [r1, 0x4]
- strh r1, [r0, 0x12]
- ldr r0, [r2, 0x4]
- adds r0, r4, r0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r6]
- ldr r0, [r0, 0x4]
- adds r0, r4, r0
- str r1, [r0, 0x14]
- movs r3, 0x1
- ldrb r0, [r5, 0x1]
- cmp r3, r0
- bcs _0815CBF6
-_0815CBDE:
- ldr r0, [r6]
- ldr r2, [r0, 0x4]
- adds r2, r4, r2
- ldr r1, [r2, 0x14]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- str r0, [r2, 0x14]
- adds r3, 0x1
- ldrb r2, [r5, 0x1]
- cmp r3, r2
- bcc _0815CBDE
-_0815CBF6:
- ldr r0, _0815CC24 @ =gUnknown_203F454
- ldr r0, [r0]
- mov r3, r9
- mov r4, r8
- subs r1, r3, r4
- lsls r1, 2
- ldr r0, [r0, 0x4]
- adds r0, r1
- bl sub_815CC28
- mov r0, r8
- mov r1, r10
- bl sub_815CD70
- movs r0, 0x1
-_0815CC14:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0815CC24: .4byte gUnknown_203F454
- thumb_func_end sub_815CA40
-
- thumb_func_start sub_815CC28
-sub_815CC28: @ 815CC28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- ldrb r5, [r4, 0x1]
- movs r0, 0xC
- ldrsh r7, [r4, r0]
- ldrb r0, [r4, 0x3]
- adds r0, 0x1
- mov r8, r0
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- lsls r1, r5, 3
- ldr r2, _0815CD58 @ =gMain + 0x38
- mov r9, r2
- add r1, r9
- mov r0, r8
- lsls r2, r0, 2
- movs r0, 0x80
- lsls r0, 17
- orrs r2, r0
- mov r0, sp
- bl CpuSet
- movs r6, 0
- ldrb r5, [r4, 0x1]
- cmp r6, r8
- bcs _0815CCFA
- movs r1, 0x3F
- mov r10, r1
- movs r2, 0xD
- negs r2, r2
- mov r9, r2
-_0815CC72:
- lsls r0, r5, 3
- ldr r1, _0815CD5C @ =gMain
- adds r3, r0, r1
- ldrh r1, [r4, 0xE]
- adds r0, r3, 0
- adds r0, 0x38
- strb r1, [r0]
- ldr r2, _0815CD60 @ =0x000001ff
- adds r0, r2, 0
- adds r1, r7, 0
- ands r1, r0
- ldrh r2, [r3, 0x3A]
- ldr r0, _0815CD64 @ =0xfffffe00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x3A]
- ldrb r1, [r4, 0x6]
- movs r0, 0x39
- adds r0, r3
- mov r12, r0
- lsls r1, 6
- ldrb r2, [r0]
- mov r0, r10
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrb r1, [r4, 0x5]
- movs r2, 0x3B
- adds r2, r3
- mov r12, r2
- lsls r1, 6
- ldrb r2, [r2]
- mov r0, r10
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- ldrh r0, [r4, 0xA]
- ldr r1, _0815CD68 @ =0x000003ff
- ands r1, r0
- ldrh r2, [r3, 0x3C]
- ldr r0, _0815CD6C @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x3C]
- adds r3, 0x3D
- movs r0, 0x3
- ldrb r1, [r4, 0x7]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- mov r0, r9
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrb r2, [r4, 0x4]
- lsls r2, 4
- movs r1, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r3]
- ldrb r0, [r4, 0x8]
- adds r7, r0
- adds r6, 0x1
- adds r5, 0x1
- cmp r6, r8
- bcc _0815CC72
-_0815CCFA:
- subs r5, 0x1
- ldr r0, _0815CD5C @ =gMain
- lsls r3, r5, 3
- adds r3, r0
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- ldrb r0, [r4, 0x8]
- subs r1, r0
- ldr r2, _0815CD60 @ =0x000001ff
- adds r0, r2, 0
- ands r1, r0
- ldrh r2, [r3, 0x3A]
- ldr r0, _0815CD64 @ =0xfffffe00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x3A]
- adds r2, r3, 0
- adds r2, 0x39
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4, 0x9]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 1
- ldrh r4, [r4, 0xA]
- adds r1, r4
- ldr r2, _0815CD68 @ =0x000003ff
- adds r0, r2, 0
- ands r1, r0
- ldrh r2, [r3, 0x3C]
- ldr r0, _0815CD6C @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r3, 0x3C]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815CD58: .4byte gMain + 0x38
-_0815CD5C: .4byte gMain
-_0815CD60: .4byte 0x000001ff
-_0815CD64: .4byte 0xfffffe00
-_0815CD68: .4byte 0x000003ff
-_0815CD6C: .4byte 0xfffffc00
- thumb_func_end sub_815CC28
-
- thumb_func_start sub_815CD70
-sub_815CD70: @ 815CD70
- push {r4-r6,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r0, _0815CDA0 @ =gUnknown_203F454
- ldr r1, [r0]
- adds r6, r0, 0
- cmp r1, 0
- beq _0815CDD4
- ldr r2, [r1, 0x4]
- lsls r1, r3, 3
- subs r0, r1, r3
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2]
- adds r5, r1, 0
- cmp r0, 0
- beq _0815CDD4
- str r4, [r2, 0x18]
- cmp r4, 0
- bge _0815CDA4
- movs r2, 0x1
- negs r4, r4
- b _0815CDA6
- .align 2, 0
-_0815CDA0: .4byte gUnknown_203F454
-_0815CDA4:
- movs r2, 0
-_0815CDA6:
- ldr r0, [r6]
- ldr r1, [r0, 0x4]
- subs r0, r5, r3
- lsls r0, 2
- adds r0, r1
- ldrb r3, [r0, 0x2]
- cmp r3, 0x1
- beq _0815CDC6
- cmp r3, 0x1
- ble _0815CDBE
- cmp r3, 0x2
- beq _0815CDCE
-_0815CDBE:
- adds r1, r4, 0
- bl sub_815CDDC
- b _0815CDD4
-_0815CDC6:
- adds r1, r4, 0
- bl sub_815CE90
- b _0815CDD4
-_0815CDCE:
- adds r1, r4, 0
- bl sub_815CFEC
-_0815CDD4:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_815CD70
-
- thumb_func_start sub_815CDDC
-sub_815CDDC: @ 815CDDC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- mov r9, r1
- str r2, [sp]
- ldr r5, [r0, 0x14]
- ldrb r7, [r0, 0x1]
- ldr r0, _0815CE60 @ =gMain
- mov r10, r0
- cmp r5, 0
- beq _0815CE46
- lsls r0, r7, 3
- adds r0, 0x3C
- mov r1, r10
- adds r6, r0, r1
-_0815CE02:
- mov r0, r9
- adds r1, r5, 0
- bl __udivsi3
- adds r4, r0, 0
- adds r0, r4, 0
- muls r0, r5
- mov r2, r9
- subs r2, r0
- mov r9, r2
- adds r0, r5, 0
- movs r1, 0xA
- bl __udivsi3
- adds r5, r0, 0
- mov r1, r8
- ldrb r0, [r1, 0x9]
- adds r1, r4, 0
- muls r1, r0
- mov r2, r8
- ldrh r2, [r2, 0xA]
- adds r1, r2
- ldr r2, _0815CE64 @ =0x000003ff
- adds r0, r2, 0
- ands r1, r0
- ldrh r0, [r6]
- ldr r2, _0815CE68 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r6]
- adds r6, 0x8
- adds r7, 0x1
- cmp r5, 0
- bne _0815CE02
-_0815CE46:
- ldr r0, [sp]
- cmp r0, 0
- beq _0815CE6C
- lsls r0, r7, 3
- add r0, r10
- adds r0, 0x39
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- b _0815CE80
- .align 2, 0
-_0815CE60: .4byte gMain
-_0815CE64: .4byte 0x000003ff
-_0815CE68: .4byte 0xfffffc00
-_0815CE6C:
- lsls r2, r7, 3
- add r2, r10
- adds r2, 0x39
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
-_0815CE80:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_815CDDC
-
- thumb_func_start sub_815CE90
-sub_815CE90: @ 815CE90
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r6, r0, 0
- mov r8, r1
- str r2, [sp]
- ldr r5, [r6, 0x14]
- ldr r3, _0815CF38 @ =gUnknown_3002078
- ldrb r0, [r6, 0x1]
- str r0, [r3]
- ldr r2, _0815CF3C @ =gUnknown_300207C
- movs r0, 0
- str r0, [r2]
- ldr r1, _0815CF40 @ =gUnknown_3002080
- subs r0, 0x1
- str r0, [r1]
- adds r7, r3, 0
- mov r10, r1
- ldr r0, _0815CF44 @ =gMain
- mov r9, r0
- cmp r5, 0
- beq _0815CF78
-_0815CEC2:
- mov r0, r8
- adds r1, r5, 0
- bl __udivsi3
- adds r4, r0, 0
- adds r0, r4, 0
- muls r0, r5
- mov r1, r8
- subs r1, r0
- mov r8, r1
- adds r0, r5, 0
- movs r1, 0xA
- bl __udivsi3
- adds r5, r0, 0
- cmp r4, 0
- bne _0815CEF4
- mov r2, r10
- ldr r1, [r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0815CEF4
- cmp r5, 0
- bne _0815CF50
-_0815CEF4:
- ldr r2, [r7]
- lsls r2, 3
- add r2, r9
- ldrb r0, [r6, 0x9]
- adds r3, r4, 0
- muls r3, r0
- ldrh r4, [r6, 0xA]
- adds r3, r4
- ldr r1, _0815CF48 @ =0x000003ff
- adds r0, r1, 0
- ands r3, r0
- ldrh r0, [r2, 0x3C]
- ldr r4, _0815CF4C @ =0xfffffc00
- adds r1, r4, 0
- ands r0, r1
- orrs r0, r3
- strh r0, [r2, 0x3C]
- adds r2, 0x39
- ldrb r0, [r2]
- movs r1, 0x4
- negs r1, r1
- ands r0, r1
- strb r0, [r2]
- mov r2, r10
- ldr r1, [r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0815CF66
- ldr r4, _0815CF3C @ =gUnknown_300207C
- ldr r0, [r4]
- str r0, [r2]
- b _0815CF66
- .align 2, 0
-_0815CF38: .4byte gUnknown_3002078
-_0815CF3C: .4byte gUnknown_300207C
-_0815CF40: .4byte gUnknown_3002080
-_0815CF44: .4byte gMain
-_0815CF48: .4byte 0x000003ff
-_0815CF4C: .4byte 0xfffffc00
-_0815CF50:
- ldr r0, [r7]
- lsls r0, 3
- add r0, r9
- adds r0, 0x39
- ldrb r1, [r0]
- movs r2, 0x4
- negs r2, r2
- ands r1, r2
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_0815CF66:
- ldr r0, [r7]
- adds r0, 0x1
- str r0, [r7]
- ldr r4, _0815CFB8 @ =gUnknown_300207C
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- cmp r5, 0
- bne _0815CEC2
-_0815CF78:
- ldr r0, [sp]
- cmp r0, 0
- beq _0815CFC4
- ldr r1, [r7]
- lsls r1, 3
- add r1, r9
- adds r1, 0x39
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r3, [r7]
- lsls r3, 3
- add r3, r9
- movs r1, 0xC
- ldrsh r2, [r6, r1]
- mov r4, r10
- ldr r0, [r4]
- subs r0, 0x1
- ldrb r1, [r6, 0x8]
- muls r0, r1
- adds r2, r0
- ldr r1, _0815CFBC @ =0x000001ff
- adds r0, r1, 0
- ands r2, r0
- ldrh r1, [r3, 0x3A]
- ldr r0, _0815CFC0 @ =0xfffffe00
- ands r0, r1
- orrs r0, r2
- strh r0, [r3, 0x3A]
- b _0815CFDA
- .align 2, 0
-_0815CFB8: .4byte gUnknown_300207C
-_0815CFBC: .4byte 0x000001ff
-_0815CFC0: .4byte 0xfffffe00
-_0815CFC4:
- ldr r0, [r7]
- lsls r0, 3
- add r0, r9
- adds r0, 0x39
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r0]
-_0815CFDA:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_815CE90
-
- thumb_func_start sub_815CFEC
-sub_815CFEC: @ 815CFEC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- mov r8, r0
- mov r10, r1
- str r2, [sp]
- ldr r5, [r0, 0x14]
- ldrb r3, [r0, 0x1]
- movs r0, 0
- str r0, [sp, 0x4]
- mov r9, r0
- cmp r5, 0
- beq _0815D086
-_0815D00C:
- lsls r0, r3, 3
- adds r1, r0, 0
- adds r1, 0x39
- ldr r2, _0815D0D0 @ =gMain
- adds r7, r1, r2
- adds r0, 0x3C
- adds r6, r0, r2
-_0815D01A:
- mov r0, r10
- adds r1, r5, 0
- str r3, [sp, 0x8]
- bl __udivsi3
- adds r4, r0, 0
- adds r0, r4, 0
- muls r0, r5
- mov r1, r10
- subs r1, r0
- mov r10, r1
- adds r0, r5, 0
- movs r1, 0xA
- bl __udivsi3
- adds r5, r0, 0
- ldr r3, [sp, 0x8]
- cmp r4, 0
- bne _0815D04A
- ldr r2, [sp, 0x4]
- cmp r2, 0
- bne _0815D04A
- cmp r5, 0
- bne _0815D00C
-_0815D04A:
- movs r0, 0x1
- str r0, [sp, 0x4]
- mov r1, r8
- ldrb r0, [r1, 0x9]
- adds r2, r4, 0
- muls r2, r0
- ldrh r4, [r1, 0xA]
- adds r2, r4
- ldr r1, _0815D0D4 @ =0x000003ff
- adds r0, r1, 0
- ands r2, r0
- ldrh r0, [r6]
- ldr r4, _0815D0D8 @ =0xfffffc00
- adds r1, r4, 0
- ands r0, r1
- orrs r0, r2
- strh r0, [r6]
- ldrb r0, [r7]
- movs r2, 0x4
- negs r2, r2
- adds r1, r2, 0
- ands r0, r1
- strb r0, [r7]
- adds r7, 0x8
- adds r6, 0x8
- adds r3, 0x1
- movs r4, 0x1
- add r9, r4
- cmp r5, 0
- bne _0815D01A
-_0815D086:
- mov r0, r8
- ldrb r0, [r0, 0x3]
- cmp r9, r0
- bge _0815D0B6
- ldr r1, _0815D0D0 @ =gMain
- movs r5, 0x4
- negs r5, r5
- movs r4, 0x2
- lsls r0, r3, 3
- adds r0, 0x39
- adds r2, r0, r1
-_0815D09C:
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- orrs r0, r4
- strb r0, [r2]
- adds r2, 0x8
- adds r3, 0x1
- movs r1, 0x1
- add r9, r1
- mov r0, r8
- ldrb r0, [r0, 0x3]
- cmp r9, r0
- blt _0815D09C
-_0815D0B6:
- ldr r1, [sp]
- cmp r1, 0
- beq _0815D0DC
- lsls r0, r3, 3
- ldr r2, _0815D0D0 @ =gMain
- adds r0, r2
- adds r0, 0x39
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- b _0815D0F2
- .align 2, 0
-_0815D0D0: .4byte gMain
-_0815D0D4: .4byte 0x000003ff
-_0815D0D8: .4byte 0xfffffc00
-_0815D0DC:
- lsls r2, r3, 3
- ldr r4, _0815D104 @ =gMain
- adds r2, r4
- adds r2, 0x39
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
-_0815D0F2:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815D104: .4byte gMain
- thumb_func_end sub_815CFEC
-
- thumb_func_start sub_815D108
-sub_815D108: @ 815D108
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r0, _0815D1A0 @ =gUnknown_203F454
- ldr r0, [r0]
- cmp r0, 0
- beq _0815D19A
- ldr r2, [r0, 0x4]
- lsls r1, r4, 3
- subs r0, r1, r4
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2]
- adds r5, r1, 0
- cmp r0, 0
- beq _0815D19A
- ldrb r3, [r2, 0x3]
- adds r0, r3, 0x1
- ldrb r2, [r2, 0x1]
- cmp r0, 0
- beq _0815D152
- ldr r1, _0815D1A4 @ =gMain
- movs r7, 0x4
- negs r7, r7
- movs r6, 0x2
- adds r3, r0, 0
- lsls r0, r2, 3
- adds r0, 0x39
- adds r2, r0, r1
-_0815D140:
- ldrb r1, [r2]
- adds r0, r7, 0
- ands r0, r1
- orrs r0, r6
- strb r0, [r2]
- subs r3, 0x1
- adds r2, 0x8
- cmp r3, 0
- bne _0815D140
-_0815D152:
- adds r0, r4, 0
- bl sub_815D29C
- cmp r0, 0
- bne _0815D16E
- ldr r0, _0815D1A0 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- subs r0, r5, r4
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x10]
- bl FreeSpriteTilesByTag
-_0815D16E:
- adds r0, r4, 0
- bl sub_815D2E0
- cmp r0, 0
- bne _0815D18A
- ldr r0, _0815D1A0 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- subs r0, r5, r4
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x12]
- bl FreeSpritePaletteByTag
-_0815D18A:
- ldr r0, _0815D1A0 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- subs r0, r5, r4
- lsls r0, 2
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0815D19A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815D1A0: .4byte gUnknown_203F454
-_0815D1A4: .4byte gMain
- thumb_func_end sub_815D108
-
- thumb_func_start sub_815D1A8
-sub_815D1A8: @ 815D1A8
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, _0815D1FC @ =gUnknown_203F454
- ldr r1, [r0]
- adds r7, r0, 0
- cmp r1, 0
- beq _0815D238
- ldr r2, [r1, 0x4]
- lsls r1, r4, 3
- subs r0, r1, r4
- lsls r0, 2
- adds r2, r0, r2
- ldrb r0, [r2]
- adds r6, r1, 0
- cmp r0, 0
- beq _0815D238
- ldrb r3, [r2, 0x3]
- adds r1, r3, 0x1
- ldrb r0, [r2, 0x1]
- cmp r5, 0
- beq _0815D204
- cmp r1, 0
- beq _0815D238
- ldr r1, _0815D200 @ =gMain
- movs r5, 0x4
- negs r5, r5
- movs r4, 0x2
- adds r3, 0x1
- lsls r0, 3
- adds r0, 0x39
- adds r2, r0, r1
-_0815D1E8:
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- orrs r0, r4
- strb r0, [r2]
- subs r3, 0x1
- adds r2, 0x8
- cmp r3, 0
- bne _0815D1E8
- b _0815D238
- .align 2, 0
-_0815D1FC: .4byte gUnknown_203F454
-_0815D200: .4byte gMain
-_0815D204:
- cmp r1, 0
- beq _0815D226
- ldr r1, _0815D240 @ =gMain
- movs r5, 0x4
- negs r5, r5
- adds r3, 0x1
- lsls r0, 3
- adds r0, 0x39
- adds r2, r0, r1
-_0815D216:
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- strb r0, [r2]
- subs r3, 0x1
- adds r2, 0x8
- cmp r3, 0
- bne _0815D216
-_0815D226:
- ldr r0, [r7]
- ldr r1, [r0, 0x4]
- subs r0, r6, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0, 0x18]
- adds r0, r4, 0
- bl sub_815CD70
-_0815D238:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0815D240: .4byte gMain
- thumb_func_end sub_815D1A8
-
- thumb_func_start sub_815D244
-sub_815D244: @ 815D244
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r5, 0x40
- movs r3, 0
- ldr r0, _0815D270 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r2, [r0]
- cmp r3, r2
- bcs _0815D286
- ldr r1, [r0, 0x4]
-_0815D25A:
- ldrb r0, [r1]
- cmp r0, 0
- bne _0815D274
- ldrb r0, [r1, 0x1]
- cmp r0, 0xFF
- beq _0815D27E
- ldrb r0, [r1, 0x3]
- cmp r0, r4
- bhi _0815D27E
- ldrb r0, [r1, 0x1]
- b _0815D296
- .align 2, 0
-_0815D270: .4byte gUnknown_203F454
-_0815D274:
- adds r0, r5, 0x1
- ldrb r5, [r1, 0x3]
- adds r0, r5
- lsls r0, 16
- lsrs r5, r0, 16
-_0815D27E:
- adds r1, 0x1C
- adds r3, 0x1
- cmp r3, r2
- bcc _0815D25A
-_0815D286:
- adds r0, r5, r4
- adds r0, 0x1
- cmp r0, 0x80
- bgt _0815D294
- lsls r0, r5, 24
- lsrs r0, 24
- b _0815D296
-_0815D294:
- movs r0, 0xFF
-_0815D296:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_815D244
-
- thumb_func_start sub_815D29C
-sub_815D29C: @ 815D29C
- push {r4-r6,lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r0, _0815D2CC @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r4, [r0]
- cmp r2, r4
- bcs _0815D2D8
- ldr r1, [r0, 0x4]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r5, r0, r1
-_0815D2B6:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0815D2D0
- cmp r2, r3
- beq _0815D2D0
- ldrh r0, [r1, 0x10]
- ldrh r6, [r5, 0x10]
- cmp r0, r6
- bne _0815D2D0
- movs r0, 0x1
- b _0815D2DA
- .align 2, 0
-_0815D2CC: .4byte gUnknown_203F454
-_0815D2D0:
- adds r1, 0x1C
- adds r2, 0x1
- cmp r2, r4
- bcc _0815D2B6
-_0815D2D8:
- movs r0, 0
-_0815D2DA:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_815D29C
-
- thumb_func_start sub_815D2E0
-sub_815D2E0: @ 815D2E0
- push {r4-r6,lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r0, _0815D310 @ =gUnknown_203F454
- ldr r0, [r0]
- ldr r4, [r0]
- cmp r2, r4
- bcs _0815D31C
- ldr r1, [r0, 0x4]
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r5, r0, r1
-_0815D2FA:
- ldrb r0, [r1]
- cmp r0, 0
- beq _0815D314
- cmp r2, r3
- beq _0815D314
- ldrh r0, [r1, 0x12]
- ldrh r6, [r5, 0x12]
- cmp r0, r6
- bne _0815D314
- movs r0, 0x1
- b _0815D31E
- .align 2, 0
-_0815D310: .4byte gUnknown_203F454
-_0815D314:
- adds r1, 0x1C
- adds r2, 0x1
- cmp r2, r4
- bcc _0815D2FA
-_0815D31C:
- movs r0, 0
-_0815D31E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_815D2E0
-
- thumb_func_start sub_815D324
-sub_815D324: @ 815D324
- ldr r2, _0815D330 @ =gUnknown_8479658
- lsls r0, 2
- adds r1, r0
- adds r1, r2
- ldrb r0, [r1]
- bx lr
- .align 2, 0
-_0815D330: .4byte gUnknown_8479658
- thumb_func_end sub_815D324
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_8471F00.s b/data/data_8471F00.s
index 9c616b37c..e8b51cf69 100644
--- a/data/data_8471F00.s
+++ b/data/data_8471F00.s
@@ -256,8 +256,11 @@ gUnknown_84795B8:: @ 84795B8
gUnknown_84795C8:: @ 84795C8
.incbin "baserom.gba", 0x4795C8, 0x90
-gUnknown_8479658:: @ 8479658
- .incbin "baserom.gba", 0x479658, 0x600
+ .section .rodata.8479668
+
+ .align 2
+gUnknown_8479668:: @ 8479668
+ .incbin "baserom.gba", 0x479668, 0x5F0
gUnknown_8479C58:: @ 8479C58
.incbin "baserom.gba", 0x479C58, 0x30
diff --git a/include/decompress.h b/include/decompress.h
index 9a2093b9f..19b507525 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -36,5 +36,6 @@ void LoadSpecialPokePic_DontHandleDeoxys(const struct CompressedSpriteSheet *src
u32 sub_8034974(const u8 *ptr);
void sub_800F034(const struct CompressedSpriteSheet *src);
+u32 GetDecompressedDataSize(const u8 *ptr);
#endif // GUARD_DECOMPRESS_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b602741a6..801606d50 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -74,6 +74,14 @@ struct BackupMapData
u16 *map;
};
+union __attribute__((packed)) MapObjectRange {
+ u8 as_byte;
+ struct __attribute__((packed)) {
+ u8 x:4;
+ u8 y:4;
+ } __attribute__((aligned (1))) as_nybbles;
+} __attribute__((aligned (1)));
+
struct MapObjectTemplate
{
/*0x00*/ u8 localId;
@@ -83,8 +91,7 @@ struct MapObjectTemplate
/*0x06*/ s16 y;
/*0x08*/ u8 elevation;
/*0x09*/ u8 movementType;
- /*0x0A*/ u8 unkA_0:4;
- u8 unkA_4:4;
+ /*0x0A*/ union MapObjectRange range;
///*0x0B*/ u8 fillerB[1];
/*0x0C*/ u16 unkC;
/*0x0E*/ u16 unkE;
@@ -228,13 +235,7 @@ struct MapObject
/*0x14*/ struct Coords16 coords3;
/*0x18*/ u8 mapobj_unk_18:4; //current direction?
/*0x18*/ u8 placeholder18:4;
- /*0x19*/ union __attribute__((packed)) {
- u8 as_byte;
- struct __attribute__((packed)) {
- u8 x:4;
- u8 y:4;
- } __attribute__((aligned (1))) as_nybbles;
- } __attribute__((aligned (1))) range;
+ /*0x19*/ union MapObjectRange range;
/*0x1A*/ u8 mapobj_unk_1A;
/*0x1B*/ u8 mapobj_unk_1B;
/*0x1C*/ u8 mapobj_unk_1C;
diff --git a/include/global.h b/include/global.h
index 461402f1f..b10f4af49 100644
--- a/include/global.h
+++ b/include/global.h
@@ -565,6 +565,12 @@ typedef union QuestLogScene QuestLogScene;
// This name is a complete guess and may change.
+#define MAP_OBJECTS_COUNT 16
+#define BERRY_TREES_COUNT 128
+#define FLAGS_COUNT 288 // 300
+#define VARS_COUNT 256
+#define MAIL_COUNT 16
+
// Declare here so that it can be recursively referenced.
union QuestLogMovement;
@@ -578,6 +584,43 @@ union QuestLogMovement
} ident_struct;
};
+struct QuestLogMapObject
+{
+ /*0x00*/ u8 active:1;
+ /*0x00*/ u8 mapobj_bit_3:1;
+ /*0x00*/ u8 mapobj_bit_4:1;
+ /*0x00*/ u8 mapobj_bit_5:1;
+ /*0x00*/ u8 mapobj_bit_8:1;
+ /*0x00*/ u8 mapobj_bit_9:1;
+ /*0x00*/ u8 mapobj_bit_10:1;
+ /*0x00*/ u8 mapobj_bit_11:1;
+ /*0x01*/ u8 mapobj_bit_12:1;
+ /*0x01*/ u8 mapobj_bit_13:1;
+ /*0x01*/ u8 mapobj_bit_14:1;
+ /*0x01*/ u8 mapobj_bit_15:1;
+ /*0x01*/ u8 mapobj_bit_16:1;
+ /*0x01*/ u8 mapobj_bit_23:1;
+ /*0x01*/ u8 mapobj_bit_24:1;
+ /*0x01*/ u8 mapobj_bit_25:1;
+ /*0x02*/ u8 mapobj_bit_26:1;
+ /*0x02*/ u8 mapobj_unk_18:4;
+ /*0x02*/ u8 unused_02_5:3;
+ /*0x03*/ u8 mapobj_unk_0B_0:4;
+ /*0x03*/ u8 elevation:4;
+ /*0x04*/ u8 graphicsId;
+ /*0x05*/ u8 animPattern;
+ /*0x06*/ u8 trainerType;
+ /*0x07*/ u8 localId;
+ /*0x08*/ u8 mapNum;
+ /*0x09*/ u8 mapGroup;
+ /*0x0a*/ s16 x;
+ /*0x0c*/ s16 y;
+ /*0x0e*/ u8 trainerRange_berryTreeId;
+ /*0x0f*/ u8 mapobj_unk_1F;
+ /*0x10*/ u8 mapobj_unk_21;
+ /*0x11*/ u8 animId;
+};
+
struct QuestLog
{
/*0x0000*/ u8 unk_000;
@@ -586,7 +629,7 @@ struct QuestLog
/*0x0003*/ s8 unk_003;
/*0x0004*/ s16 unk_004;
/*0x0006*/ s16 unk_006;
- /*0x0008*/ u8 filler_008[0x140];
+ /*0x0008*/ struct QuestLogMapObject unk_008[MAP_OBJECTS_COUNT];
// These arrays hold the game state for
// playing back the quest log
@@ -606,12 +649,6 @@ struct FameCheckerSaveData
u16 unk_0_E:2;
};
-#define MAP_OBJECTS_COUNT 16
-#define BERRY_TREES_COUNT 128
-#define FLAGS_COUNT 288 // 300
-#define VARS_COUNT 256
-#define MAIL_COUNT 16
-
#define NUM_EASY_CHAT_EXTRA_PHRASES 33
#define EASY_CHAT_EXTRA_PHRASES_SIZE ((NUM_EASY_CHAT_EXTRA_PHRASES >> 3) + (NUM_EASY_CHAT_EXTRA_PHRASES % 8 ? 1 : 0))
diff --git a/include/link_rfu.h b/include/link_rfu.h
index d076efae6..8d02577a5 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -1,6 +1,11 @@
#ifndef GUARD_LINK_RFU_H
#define GUARD_LINK_RFU_H
+struct Padded_U8
+{
+ u8 value;
+};
+
void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void sub_80FA190(void);
@@ -11,5 +16,6 @@ void DestroyWirelessStatusIndicatorSprite(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u8);
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
void MEvent_CreateTask_Leader(u8);
+void sub_80F9E2C(void * data);
#endif //GUARD_LINK_RFU_H
diff --git a/include/unk_815C980.h b/include/unk_815C980.h
new file mode 100644
index 000000000..78d4bd73b
--- /dev/null
+++ b/include/unk_815C980.h
@@ -0,0 +1,24 @@
+#ifndef GUARD_UNK_815C980_H
+#define GUARD_UNK_815C980_H
+
+struct UnkStruct3
+{
+ u8 field_0_0:2;
+ u8 shape:2;
+ u8 size:2;
+ u8 priority:2;
+ u8 field_1;
+ u8 xDelta;
+ s16 x;
+ s16 y;
+ const struct SpriteSheet *spriteSheet;
+ const struct SpritePalette *spritePal;
+};
+
+void sub_815C9F4(void);
+void sub_815D108(u32 id);
+void sub_815CD70(u32 id, s32 arg1);
+u8 sub_815D324(u32 shape, u32 size);
+bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
+
+#endif //GUARD_UNK_815C980_H
diff --git a/ld_script.txt b/ld_script.txt
index 9b056bf84..01d2765a7 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -257,10 +257,12 @@ SECTIONS {
src/quest_log_8150454.o(.text);
asm/dodrio_berry_picking.o(.text);
asm/battle_controller_pokedude.o(.text);
- asm/unk_8159F40.o(.text);
+ src/unk_8159F40.o(.text);
+ src/dodrio_berry_picking_2.o(.text);
+ asm/dodrio_berry_picking_2.o(.text);
asm/teachy_tv.o(.text);
- asm/unk_815C27C.o(.text);
- asm/unk_815C980.o(.text);
+ asm/ereader_helpers.o(.text);
+ src/unk_815C980.o(.text);
asm/ss_anne.o(.text);
asm/cereader_tool.o(.text);
src/trainer_tower.o(.text);
@@ -426,6 +428,8 @@ SECTIONS {
data/data_8468C98.o(.rodata);
src/quest_log_8150454.o(.rodata);
data/data_8471F00.o(.rodata);
+ src/unk_815C980.o(.rodata);
+ data/data_8471F00.o(.rodata.8479668);
src/trainer_tower.o(.rodata);
data/data_8471F00.o(.rodata.after_trainer_tower);
src/mystery_event_msg.o(.rodata);
diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c
new file mode 100644
index 000000000..fc6aa14c6
--- /dev/null
+++ b/src/dodrio_berry_picking_2.c
@@ -0,0 +1,23 @@
+#include "global.h"
+#include "link.h"
+#include "link_rfu.h"
+
+void sub_815A5BC(s32 a0)
+{
+ struct Padded_U8 data[2];
+ data[0].value = 1;
+ data[1].value = a0;
+ sub_80F9E2C(data);
+}
+
+u8 sub_815A5E8(s32 a0)
+{
+ u8 * r1;
+ if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00)
+ return 0;
+ r1 = (u8 *)&gRecvCmds[a0][1];
+ if (r1[0] == 1)
+ return r1[4];
+ return 0;
+}
+
diff --git a/src/unk_8159F40.c b/src/unk_8159F40.c
new file mode 100644
index 000000000..a6f6e67fc
--- /dev/null
+++ b/src/unk_8159F40.c
@@ -0,0 +1,622 @@
+#include "global.h"
+#include "battle.h"
+#include "event_data.h"
+#include "quest_log.h"
+#include "fieldmap.h"
+#include "field_player_avatar.h"
+#include "metatile_behavior.h"
+#include "link.h"
+#include "link_rfu.h"
+
+struct UnkStruct_84792D0
+{
+ u8 field_0;
+ u8 field_1;
+ u16 field_2;
+ u16 field_4[4];
+ u8 field_C;
+ u8 field_D;
+};
+
+extern const struct UnkStruct_84792D0 *const gUnknown_84792D0[];
+
+void sub_8159F40(void)
+{
+ s32 i, j;
+ struct Pokemon *mon;
+ s32 myIdx = 0;
+ s32 opIdx = 0;
+ const struct UnkStruct_84792D0 * data;
+
+ gBattleTypeFlags = BATTLE_TYPE_DOME;
+ ZeroPlayerPartyMons();
+ ZeroEnemyPartyMons();
+ data = gUnknown_84792D0[gSpecialVar_0x8004];
+
+ i = 0;
+ do
+ {
+ if (data[i].field_0 == 0)
+ {
+ mon = &gPlayerParty[myIdx];
+ myIdx++;
+ }
+ else
+ {
+ mon = &gEnemyParty[opIdx];
+ opIdx++;
+ }
+ CreateMonWithGenderNatureLetter(mon, data[i].field_2, data[i].field_1, 0, data[i].field_D, data[i].field_C, 0);
+ for (j = 0; j < 4; j++)
+ {
+ SetMonMoveSlot(mon, data[i].field_4[j], j);
+ }
+ i++;
+ } while (data[i].field_0 != 0xFF);
+}
+
+void sub_815A008(struct QuestLog * questLog)
+{
+ u32 i;
+
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
+ {
+ questLog->unk_008[i].active = gMapObjects[i].active;
+ questLog->unk_008[i].mapobj_bit_3 = gMapObjects[i].mapobj_bit_3;
+ questLog->unk_008[i].mapobj_bit_4 = gMapObjects[i].mapobj_bit_4;
+ questLog->unk_008[i].mapobj_bit_5 = gMapObjects[i].mapobj_bit_5;
+ questLog->unk_008[i].mapobj_bit_8 = gMapObjects[i].mapobj_bit_8;
+ questLog->unk_008[i].mapobj_bit_9 = gMapObjects[i].mapobj_bit_9;
+ questLog->unk_008[i].mapobj_bit_10 = gMapObjects[i].mapobj_bit_10;
+ questLog->unk_008[i].mapobj_bit_11 = gMapObjects[i].mapobj_bit_11;
+ questLog->unk_008[i].mapobj_bit_12 = gMapObjects[i].mapobj_bit_12;
+ questLog->unk_008[i].mapobj_bit_13 = gMapObjects[i].mapobj_bit_13;
+ questLog->unk_008[i].mapobj_bit_14 = gMapObjects[i].mapobj_bit_14;
+ questLog->unk_008[i].mapobj_bit_15 = gMapObjects[i].mapobj_bit_15;
+ questLog->unk_008[i].mapobj_bit_16 = gMapObjects[i].mapobj_bit_16;
+ questLog->unk_008[i].mapobj_bit_23 = gMapObjects[i].mapobj_bit_23;
+ questLog->unk_008[i].mapobj_bit_24 = gMapObjects[i].mapobj_bit_24;
+ questLog->unk_008[i].mapobj_bit_25 = gMapObjects[i].mapobj_bit_25;
+ questLog->unk_008[i].mapobj_bit_26 = gMapObjects[i].mapobj_bit_26;
+ questLog->unk_008[i].mapobj_unk_18 = gMapObjects[i].mapobj_unk_18;
+ questLog->unk_008[i].mapobj_unk_0B_0 = gMapObjects[i].mapobj_unk_0B_0;
+ questLog->unk_008[i].elevation = gMapObjects[i].elevation;
+ questLog->unk_008[i].graphicsId = gMapObjects[i].graphicsId;
+ questLog->unk_008[i].animPattern = gMapObjects[i].animPattern;
+ questLog->unk_008[i].trainerType = gMapObjects[i].trainerType;
+ questLog->unk_008[i].localId = gMapObjects[i].localId;
+ questLog->unk_008[i].mapNum = gMapObjects[i].mapNum;
+ questLog->unk_008[i].mapGroup = gMapObjects[i].mapGroup;
+ questLog->unk_008[i].x = gMapObjects[i].coords2.x;
+ questLog->unk_008[i].y = gMapObjects[i].coords2.y;
+ questLog->unk_008[i].trainerRange_berryTreeId = gMapObjects[i].trainerRange_berryTreeId;
+ questLog->unk_008[i].mapobj_unk_1F = gMapObjects[i].mapobj_unk_1F;
+ questLog->unk_008[i].mapobj_unk_21 = gMapObjects[i].mapobj_unk_21;
+ questLog->unk_008[i].animId = gMapObjects[i].animId;
+ }
+}
+
+#ifdef NONMATCHING
+void sub_815A1F8(const struct QuestLog * questLog, const struct MapObjectTemplate * templates)
+{
+ u32 i, j;
+ const struct QuestLogMapObject * questLogMapObjects = questLog->unk_008;
+
+ CpuFill16(0, gMapObjects, sizeof(gMapObjects));
+
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
+ {
+ gMapObjects[i].active = questLogMapObjects[i].active;
+ gMapObjects[i].mapobj_bit_3 = questLogMapObjects[i].mapobj_bit_3;
+ gMapObjects[i].mapobj_bit_4 = questLogMapObjects[i].mapobj_bit_4;
+ gMapObjects[i].mapobj_bit_5 = questLogMapObjects[i].mapobj_bit_5;
+ gMapObjects[i].mapobj_bit_8 = questLogMapObjects[i].mapobj_bit_8;
+ gMapObjects[i].mapobj_bit_9 = questLogMapObjects[i].mapobj_bit_9;
+ gMapObjects[i].mapobj_bit_10 = questLogMapObjects[i].mapobj_bit_10;
+ gMapObjects[i].mapobj_bit_11 = questLogMapObjects[i].mapobj_bit_11;
+ gMapObjects[i].mapobj_bit_12 = questLogMapObjects[i].mapobj_bit_12;
+ gMapObjects[i].mapobj_bit_13 = questLogMapObjects[i].mapobj_bit_13;
+ gMapObjects[i].mapobj_bit_14 = questLogMapObjects[i].mapobj_bit_14;
+ gMapObjects[i].mapobj_bit_15 = questLogMapObjects[i].mapobj_bit_15;
+ gMapObjects[i].mapobj_bit_16 = questLogMapObjects[i].mapobj_bit_16;
+ gMapObjects[i].mapobj_bit_23 = questLogMapObjects[i].mapobj_bit_23;
+ gMapObjects[i].mapobj_bit_24 = questLogMapObjects[i].mapobj_bit_24;
+ gMapObjects[i].mapobj_bit_25 = questLogMapObjects[i].mapobj_bit_25;
+ gMapObjects[i].mapobj_bit_26 = questLogMapObjects[i].mapobj_bit_26;
+ gMapObjects[i].mapobj_unk_18 = questLogMapObjects[i].mapobj_unk_18;
+ gMapObjects[i].mapobj_unk_0B_0 = questLogMapObjects[i].mapobj_unk_0B_0;
+ gMapObjects[i].elevation = questLogMapObjects[i].elevation;
+ gMapObjects[i].graphicsId = questLogMapObjects[i].graphicsId;
+ gMapObjects[i].animPattern = questLogMapObjects[i].animPattern;
+ gMapObjects[i].trainerType = questLogMapObjects[i].trainerType;
+ gMapObjects[i].localId = questLogMapObjects[i].localId;
+ gMapObjects[i].mapNum = questLogMapObjects[i].mapNum;
+ gMapObjects[i].mapGroup = questLogMapObjects[i].mapGroup;
+ gMapObjects[i].coords2.x = questLogMapObjects[i].x;
+ gMapObjects[i].coords2.y = questLogMapObjects[i].y;
+ gMapObjects[i].trainerRange_berryTreeId = questLogMapObjects[i].trainerRange_berryTreeId;
+ gMapObjects[i].mapobj_unk_1F = questLogMapObjects[i].mapobj_unk_1F;
+ gMapObjects[i].mapobj_unk_21 = questLogMapObjects[i].mapobj_unk_21;
+ gMapObjects[i].animId = questLogMapObjects[i].animId;
+
+ for (j = 0; j < 0x40; j++)
+ {
+ if (gMapObjects[i].localId == templates[j].localId)
+ {
+ gMapObjects[i].coords1.x = templates[j].x + 7;
+ gMapObjects[i].coords1.y = templates[j].y + 7;
+ gMapObjects[i].range.as_nybbles.x = templates[j].range.as_nybbles.x;
+ gMapObjects[i].range.as_nybbles.y = templates[j].range.as_nybbles.y;
+ }
+ }
+
+ gMapObjects[i].mapobj_unk_1E = MapGridGetMetatileBehaviorAt(gMapObjects[i].coords2.x, gMapObjects[i].coords2.y);
+ if (gMapObjects[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gMapObjects[i].coords2.x), (s16)(gMapObjects[i].coords2.y)))
+ {
+ gMapObjects[i].coords3.x = gMapObjects[i].coords2.x;
+ gMapObjects[i].coords3.y = gMapObjects[i].coords2.y;
+ }
+ else if (gMapObjects[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gMapObjects[i].coords2.x - 1), (s16)(gMapObjects[i].coords2.y)))
+ {
+ gMapObjects[i].coords3.x = gMapObjects[i].coords2.x - 1;
+ gMapObjects[i].coords3.y = gMapObjects[i].coords2.y;
+ }
+ else if (gMapObjects[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gMapObjects[i].coords2.x + 1), (s16)(gMapObjects[i].coords2.y)))
+ {
+ gMapObjects[i].coords3.x = gMapObjects[i].coords2.x + 1;
+ gMapObjects[i].coords3.y = gMapObjects[i].coords2.y;
+ }
+ else if (gMapObjects[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gMapObjects[i].coords2.x), (s16)(gMapObjects[i].coords2.y - 1)))
+ {
+ gMapObjects[i].coords3.x = gMapObjects[i].coords2.x;
+ gMapObjects[i].coords3.y = gMapObjects[i].coords2.y - 1;
+ }
+ else if (gMapObjects[i].mapobj_unk_1F == MapGridGetMetatileBehaviorAt((s16)(gMapObjects[i].coords2.x), (s16)(gMapObjects[i].coords2.y + 1)))
+ {
+ gMapObjects[i].coords3.x = gMapObjects[i].coords2.x;
+ gMapObjects[i].coords3.y = gMapObjects[i].coords2.y + 1;
+ }
+ }
+
+ CpuCopy16(gMapObjects, gSaveBlock1Ptr->mapObjects, sizeof(gMapObjects));
+}
+#else
+NAKED
+void sub_815A1F8(const struct QuestLog * questLog, const struct MapObjectTemplate * templates)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x10\n"
+ "\tstr r1, [sp, 0x4]\n"
+ "\tadds r0, 0x8\n"
+ "\tstr r0, [sp, 0x8]\n"
+ "\tmov r1, sp\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r1]\n"
+ "\tldr r4, _0815A480 @ =gMapObjects\n"
+ "\tldr r2, _0815A484 @ =0x01000120\n"
+ "\tmov r0, sp\n"
+ "\tadds r1, r4, 0\n"
+ "\tbl CpuSet\n"
+ "\tmovs r0, 0\n"
+ "\tmov r12, r0\n"
+ "\tmovs r1, 0x1\n"
+ "\tmov r10, r1\n"
+ "_0815A224:\n"
+ "\tmov r2, r12\n"
+ "\tlsls r7, r2, 3\n"
+ "\tadds r5, r7, r2\n"
+ "\tlsls r5, 2\n"
+ "\tldr r0, _0815A480 @ =gMapObjects\n"
+ "\tadds r5, r0\n"
+ "\tlsls r6, r2, 2\n"
+ "\tadd r6, r12\n"
+ "\tlsls r6, 2\n"
+ "\tldr r1, [sp, 0x8]\n"
+ "\tadds r6, r1\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 31\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tldrb r2, [r5]\n"
+ "\tmovs r1, 0x2\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 30\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tmovs r2, 0x9\n"
+ "\tnegs r2, r2\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tstrb r2, [r5]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 29\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r1, r10\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 4\n"
+ "\tmovs r1, 0x11\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 28\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 5\n"
+ "\tmovs r4, 0x21\n"
+ "\tnegs r4, r4\n"
+ "\tands r1, r4\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 27\n"
+ "\tlsrs r0, 31\n"
+ "\tands r0, r2\n"
+ "\tldrb r1, [r5, 0x1]\n"
+ "\tmovs r2, 0x2\n"
+ "\tnegs r2, r2\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tstrb r2, [r5, 0x1]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 26\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r1, r10\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 1\n"
+ "\tmovs r1, 0x3\n"
+ "\tnegs r1, r1\n"
+ "\tmov r8, r1\n"
+ "\tmov r3, r8\n"
+ "\tands r3, r2\n"
+ "\torrs r3, r0\n"
+ "\tstrb r3, [r5, 0x1]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsls r0, 25\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 2\n"
+ "\tsubs r1, 0x2\n"
+ "\tmov r9, r1\n"
+ "\tands r1, r3\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5, 0x1]\n"
+ "\tldrb r0, [r6]\n"
+ "\tlsrs r0, 7\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 3\n"
+ "\tmovs r2, 0x9\n"
+ "\tnegs r2, r2\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tstrb r2, [r5, 0x1]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 31\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r1, r10\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 4\n"
+ "\tmovs r1, 0x11\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5, 0x1]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 30\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 5\n"
+ "\tands r4, r1\n"
+ "\torrs r4, r0\n"
+ "\tstrb r4, [r5, 0x1]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 29\n"
+ "\tlsrs r0, 31\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 6\n"
+ "\tmovs r2, 0x41\n"
+ "\tnegs r2, r2\n"
+ "\tadds r1, r2, 0\n"
+ "\tands r4, r1\n"
+ "\torrs r4, r0\n"
+ "\tstrb r4, [r5, 0x1]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 28\n"
+ "\tlsrs r0, 31\n"
+ "\tlsls r0, 7\n"
+ "\tmovs r3, 0x7F\n"
+ "\tands r4, r3\n"
+ "\torrs r4, r0\n"
+ "\tstrb r4, [r5, 0x1]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 27\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r1, r10\n"
+ "\tands r0, r1\n"
+ "\tldrb r2, [r5, 0x2]\n"
+ "\tmovs r1, 0x2\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5, 0x2]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 26\n"
+ "\tlsrs r0, 31\n"
+ "\tlsls r0, 7\n"
+ "\tands r1, r3\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5, 0x2]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsls r0, 25\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tldrb r2, [r5, 0x3]\n"
+ "\tmovs r1, 0x2\n"
+ "\tnegs r1, r1\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r5, 0x3]\n"
+ "\tldrb r0, [r6, 0x1]\n"
+ "\tlsrs r0, 7\n"
+ "\tmov r2, r10\n"
+ "\tands r0, r2\n"
+ "\tlsls r0, 1\n"
+ "\tmov r2, r8\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tmov r8, r2\n"
+ "\tstrb r2, [r5, 0x3]\n"
+ "\tldrb r0, [r6, 0x2]\n"
+ "\tlsls r0, 31\n"
+ "\tlsrs r0, 31\n"
+ "\tmov r1, r10\n"
+ "\tands r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tmov r1, r9\n"
+ "\tands r2, r1\n"
+ "\torrs r2, r0\n"
+ "\tstrb r2, [r5, 0x3]\n"
+ "\tldrb r1, [r6, 0x2]\n"
+ "\tlsls r1, 27\n"
+ "\tlsrs r1, 28\n"
+ "\tldrb r2, [r5, 0x18]\n"
+ "\tmovs r4, 0x10\n"
+ "\tnegs r4, r4\n"
+ "\tadds r0, r4, 0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5, 0x18]\n"
+ "\tldrb r1, [r6, 0x3]\n"
+ "\tlsls r1, 28\n"
+ "\tmovs r3, 0xF\n"
+ "\tlsrs r1, 28\n"
+ "\tldrb r2, [r5, 0xB]\n"
+ "\tadds r0, r4, 0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5, 0xB]\n"
+ "\tldrb r1, [r6, 0x3]\n"
+ "\tlsrs r1, 4\n"
+ "\tlsls r1, 4\n"
+ "\tands r0, r3\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5, 0xB]\n"
+ "\tldrb r0, [r6, 0x4]\n"
+ "\tstrb r0, [r5, 0x5]\n"
+ "\tldrb r0, [r6, 0x5]\n"
+ "\tstrb r0, [r5, 0x6]\n"
+ "\tldrb r0, [r6, 0x6]\n"
+ "\tstrb r0, [r5, 0x7]\n"
+ "\tldrb r0, [r6, 0x7]\n"
+ "\tstrb r0, [r5, 0x8]\n"
+ "\tldrb r0, [r6, 0x8]\n"
+ "\tstrb r0, [r5, 0x9]\n"
+ "\tldrb r0, [r6, 0x9]\n"
+ "\tstrb r0, [r5, 0xA]\n"
+ "\tldrh r0, [r6, 0xA]\n"
+ "\tstrh r0, [r5, 0x10]\n"
+ "\tldrh r0, [r6, 0xC]\n"
+ "\tstrh r0, [r5, 0x12]\n"
+ "\tldrb r0, [r6, 0xE]\n"
+ "\tstrb r0, [r5, 0x1D]\n"
+ "\tldrb r0, [r6, 0xF]\n"
+ "\tstrb r0, [r5, 0x1F]\n"
+ "\tldrb r0, [r6, 0x10]\n"
+ "\tadds r1, r5, 0\n"
+ "\tadds r1, 0x21\n"
+ "\tstrb r0, [r1]\n"
+ "\tldrb r0, [r6, 0x11]\n"
+ "\tadds r1, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tmovs r6, 0\n"
+ "\tmov r8, r7\n"
+ "\tmov r2, r12\n"
+ "\tadds r2, 0x1\n"
+ "\tstr r2, [sp, 0xC]\n"
+ "\tldrb r7, [r5, 0x8]\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tmovs r0, 0xF\n"
+ "\tmov r9, r0\n"
+ "_0815A412:\n"
+ "\tldrb r1, [r3]\n"
+ "\tcmp r7, r1\n"
+ "\tbne _0815A444\n"
+ "\tldrh r0, [r3, 0x4]\n"
+ "\tadds r0, 0x7\n"
+ "\tstrh r0, [r5, 0xC]\n"
+ "\tldrh r0, [r3, 0x6]\n"
+ "\tadds r0, 0x7\n"
+ "\tstrh r0, [r5, 0xE]\n"
+ "\tldrb r1, [r3, 0xA]\n"
+ "\tlsls r1, 28\n"
+ "\tlsrs r1, 28\n"
+ "\tmov r2, r9\n"
+ "\tands r1, r2\n"
+ "\tldrb r0, [r5, 0x19]\n"
+ "\tands r0, r4\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5, 0x19]\n"
+ "\tldrb r1, [r3, 0xA]\n"
+ "\tlsrs r1, 4\n"
+ "\tlsls r1, 4\n"
+ "\tmovs r2, 0xF\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r5, 0x19]\n"
+ "_0815A444:\n"
+ "\tadds r3, 0x18\n"
+ "\tadds r6, 0x1\n"
+ "\tcmp r6, 0x3F\n"
+ "\tbls _0815A412\n"
+ "\tmov r0, r8\n"
+ "\tadd r0, r12\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _0815A480 @ =gMapObjects\n"
+ "\tadds r6, r0, r1\n"
+ "\tmovs r2, 0x10\n"
+ "\tldrsh r0, [r6, r2]\n"
+ "\tmovs r2, 0x12\n"
+ "\tldrsh r1, [r6, r2]\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tstrb r0, [r6, 0x1E]\n"
+ "\tldrb r4, [r6, 0x1F]\n"
+ "\tmovs r1, 0x10\n"
+ "\tldrsh r0, [r6, r1]\n"
+ "\tmovs r2, 0x12\n"
+ "\tldrsh r1, [r6, r2]\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tcmp r4, r0\n"
+ "\tbne _0815A488\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tstrh r0, [r6, 0x14]\n"
+ "\tldrh r0, [r6, 0x12]\n"
+ "\tb _0815A506\n"
+ "\t.align 2, 0\n"
+ "_0815A480: .4byte gMapObjects\n"
+ "_0815A484: .4byte 0x01000120\n"
+ "_0815A488:\n"
+ "\tldrb r4, [r6, 0x1F]\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tsubs r0, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r2, 0x12\n"
+ "\tldrsh r1, [r6, r2]\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tcmp r4, r0\n"
+ "\tbne _0815A4A8\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tsubs r0, 0x1\n"
+ "\tstrh r0, [r6, 0x14]\n"
+ "\tldrh r0, [r6, 0x12]\n"
+ "\tb _0815A506\n"
+ "_0815A4A8:\n"
+ "\tldrb r4, [r6, 0x1F]\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tadds r0, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r2, 0x12\n"
+ "\tldrsh r1, [r6, r2]\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tcmp r4, r0\n"
+ "\tbne _0815A4C8\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r6, 0x14]\n"
+ "\tldrh r0, [r6, 0x12]\n"
+ "\tb _0815A506\n"
+ "_0815A4C8:\n"
+ "\tldrb r4, [r6, 0x1F]\n"
+ "\tmovs r1, 0x10\n"
+ "\tldrsh r0, [r6, r1]\n"
+ "\tldrh r1, [r6, 0x12]\n"
+ "\tsubs r1, 0x1\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tcmp r4, r0\n"
+ "\tbne _0815A4E8\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tstrh r0, [r6, 0x14]\n"
+ "\tldrh r0, [r6, 0x12]\n"
+ "\tsubs r0, 0x1\n"
+ "\tb _0815A506\n"
+ "_0815A4E8:\n"
+ "\tldrb r4, [r6, 0x1F]\n"
+ "\tmovs r2, 0x10\n"
+ "\tldrsh r0, [r6, r2]\n"
+ "\tldrh r1, [r6, 0x12]\n"
+ "\tadds r1, 0x1\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tbl MapGridGetMetatileBehaviorAt\n"
+ "\tcmp r4, r0\n"
+ "\tbne _0815A508\n"
+ "\tldrh r0, [r6, 0x10]\n"
+ "\tstrh r0, [r6, 0x14]\n"
+ "\tldrh r0, [r6, 0x12]\n"
+ "\tadds r0, 0x1\n"
+ "_0815A506:\n"
+ "\tstrh r0, [r6, 0x16]\n"
+ "_0815A508:\n"
+ "\tldr r0, [sp, 0xC]\n"
+ "\tmov r12, r0\n"
+ "\tcmp r0, 0xF\n"
+ "\tbhi _0815A512\n"
+ "\tb _0815A224\n"
+ "_0815A512:\n"
+ "\tldr r0, _0815A538 @ =gMapObjects\n"
+ "\tldr r1, _0815A53C @ =gSaveBlock1Ptr\n"
+ "\tldr r1, [r1]\n"
+ "\tmovs r2, 0xD4\n"
+ "\tlsls r2, 3\n"
+ "\tadds r1, r2\n"
+ "\tmovs r2, 0x90\n"
+ "\tlsls r2, 1\n"
+ "\tbl CpuSet\n"
+ "\tadd sp, 0x10\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0815A538: .4byte gMapObjects\n"
+ "_0815A53C: .4byte gSaveBlock1Ptr");
+}
+#endif // NONMATCHING
+
+void sub_815A540(void)
+{
+ if (gUnknown_203ADFA == 2)
+ {
+ s16 x, y;
+
+ PlayerGetDestCoords(&x, &y);
+ if (!MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)) && TestPlayerAvatarFlags(0x08))
+ {
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ SetPlayerAvatarTransitionFlags(0x01);
+ DestroySprite(&gSprites[mapObject->mapobj_unk_1A]);
+ }
+ }
+}
diff --git a/src/unk_815C980.c b/src/unk_815C980.c
new file mode 100644
index 000000000..9d0dd3341
--- /dev/null
+++ b/src/unk_815C980.c
@@ -0,0 +1,436 @@
+#include "global.h"
+#include "malloc.h"
+#include "decompress.h"
+#include "unk_815C980.h"
+#include "main.h"
+#include "battle.h"
+
+struct UnkStruct2
+{
+ bool8 isActive;
+ u8 firstOamId;
+ u8 field_2;
+ u8 oamCount;
+ u8 palTagIndex;
+ u8 size;
+ u8 shape;
+ u8 priority;
+ u8 xDelta;
+ u8 field_9;
+ u16 tileStart;
+ s16 x;
+ s16 y;
+ u16 tileTag;
+ u16 palTag;
+ u32 field_14;
+ s32 field_18;
+};
+
+struct UnkStruct1
+{
+ u32 count;
+ struct UnkStruct2 *array;
+};
+
+// this file's functions
+static u8 sub_815D244(u8 arg0);;
+static void sub_815CC28(struct UnkStruct2 *arg0);
+static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
+static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
+static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
+static bool32 SharesTileWithAnyActive(u32 id);
+static bool32 SharesPalWithAnyActive(u32 id);
+static void sub_8035648(void);
+
+// ewram
+static EWRAM_DATA struct UnkStruct1 *gUnknown_203F454 = {0};
+
+// const rom data
+static const u8 gUnknown_8479658[][4] =
+{
+ {0x01, 0x04, 0x10, 0x40},
+ {0x02, 0x04, 0x08, 0x20},
+ {0x02, 0x04, 0x08, 0x20},
+ {0x00, 0x00, 0x00, 0x00}
+};
+
+// code
+bool32 sub_815C980(u32 count)
+{
+ u32 i;
+
+ if (gUnknown_203F454 != NULL)
+ sub_815C9F4();
+
+ gUnknown_203F454 = Alloc(sizeof(*gUnknown_203F454));
+ if (gUnknown_203F454 == NULL)
+ return FALSE;
+
+ gUnknown_203F454->array = Alloc(sizeof(struct UnkStruct2) * count);
+ if (gUnknown_203F454->array == NULL)
+ {
+ Free(gUnknown_203F454);
+ return FALSE;
+ }
+
+ gUnknown_203F454->count = count;
+ for (i = 0; i < count; i++)
+ {
+ gUnknown_203F454->array[i].isActive = FALSE;
+ gUnknown_203F454->array[i].firstOamId = 0xFF;
+ }
+
+ return TRUE;
+}
+
+void sub_815C9F4(void)
+{
+ if (gUnknown_203F454 != NULL)
+ {
+ if (gUnknown_203F454->array != NULL)
+ {
+ u32 i;
+
+ for (i = 0; i < gUnknown_203F454->count; i++)
+ sub_815D108(i);
+
+ Free(gUnknown_203F454->array);
+ }
+
+ FREE_AND_SET_NULL(gUnknown_203F454);
+ }
+}
+
+bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2)
+{
+ u32 i;
+
+ if (gUnknown_203F454 == NULL)
+ return FALSE;
+ if (gUnknown_203F454->array[id].isActive)
+ return FALSE;
+
+ gUnknown_203F454->array[id].firstOamId = sub_815D244(arg2->field_1);
+ if (gUnknown_203F454->array[id].firstOamId == 0xFF)
+ return FALSE;
+
+ gUnknown_203F454->array[id].tileStart = GetSpriteTileStartByTag(arg2->spriteSheet->tag);
+ if (gUnknown_203F454->array[id].tileStart == 0xFFFF)
+ {
+ if (arg2->spriteSheet->size != 0)
+ {
+ gUnknown_203F454->array[id].tileStart = LoadSpriteSheet(arg2->spriteSheet);
+ }
+ else
+ {
+ struct CompressedSpriteSheet compObjectPic;
+
+ compObjectPic = *(struct CompressedSpriteSheet*)(arg2->spriteSheet);
+ compObjectPic.size = GetDecompressedDataSize(arg2->spriteSheet->data);
+ gUnknown_203F454->array[id].tileStart = LoadCompressedObjectPic(&compObjectPic);
+ }
+
+ if (gUnknown_203F454->array[id].tileStart == 0xFFFF)
+ return FALSE;
+ }
+
+ gUnknown_203F454->array[id].palTagIndex = IndexOfSpritePaletteTag(arg2->spritePal->tag);
+ if (gUnknown_203F454->array[id].palTagIndex == 0xFF)
+ gUnknown_203F454->array[id].palTagIndex = LoadSpritePalette(arg2->spritePal);
+
+ gUnknown_203F454->array[id].field_2 = arg2->field_0_0;
+ gUnknown_203F454->array[id].oamCount = arg2->field_1;
+ gUnknown_203F454->array[id].x = arg2->x;
+ gUnknown_203F454->array[id].y = arg2->y;
+ gUnknown_203F454->array[id].shape = arg2->shape;
+ gUnknown_203F454->array[id].size = arg2->size;
+ gUnknown_203F454->array[id].priority = arg2->priority;
+ gUnknown_203F454->array[id].xDelta = arg2->xDelta;
+ gUnknown_203F454->array[id].field_9 = sub_815D324(arg2->shape, arg2->size);
+ gUnknown_203F454->array[id].tileTag = arg2->spriteSheet->tag;
+ gUnknown_203F454->array[id].palTag = arg2->spritePal->tag;
+ gUnknown_203F454->array[id].isActive = TRUE;
+ gUnknown_203F454->array[id].field_14 = 1;
+
+ for (i = 1; i < arg2->field_1; i++)
+ gUnknown_203F454->array[id].field_14 *= 10;
+
+ sub_815CC28(&gUnknown_203F454->array[id]);
+ sub_815CD70(id, arg1);
+
+ return TRUE;
+}
+
+static void sub_815CC28(struct UnkStruct2 *arg0)
+{
+ u32 i;
+ u32 oamId = arg0->firstOamId;
+ u32 x = arg0->x;
+ u32 oamCount = arg0->oamCount + 1;
+
+ CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount);
+ for (i = 0, oamId = arg0->firstOamId; i < oamCount; i++, oamId++)
+ {
+ gMain.oamBuffer[oamId].y = arg0->y;
+ gMain.oamBuffer[oamId].x = x;
+ gMain.oamBuffer[oamId].shape = arg0->shape;
+ gMain.oamBuffer[oamId].size = arg0->size;
+ gMain.oamBuffer[oamId].tileNum = arg0->tileStart;
+ gMain.oamBuffer[oamId].priority = arg0->priority;
+ gMain.oamBuffer[oamId].paletteNum = arg0->palTagIndex;
+
+ x += arg0->xDelta;
+ }
+
+ oamId--;
+ gMain.oamBuffer[oamId].x = arg0->x - arg0->xDelta;
+ gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].tileNum = arg0->tileStart + (arg0->field_9 * 10);
+}
+
+void sub_815CD70(u32 id, s32 arg1)
+{
+ bool32 r2;
+
+ if (gUnknown_203F454 == NULL)
+ return;
+ if (!gUnknown_203F454->array[id].isActive)
+ return;
+
+ gUnknown_203F454->array[id].field_18 = arg1;
+ if (arg1 < 0)
+ {
+ r2 = TRUE;
+ arg1 *= -1;
+ }
+ else
+ {
+ r2 = FALSE;
+ }
+
+ switch (gUnknown_203F454->array[id].field_2)
+ {
+ case 0:
+ default:
+ sub_815CDDC(&gUnknown_203F454->array[id], arg1, r2);
+ break;
+ case 1:
+ sub_815CE90(&gUnknown_203F454->array[id], arg1, r2);
+ break;
+ case 2:
+ sub_815CFEC(&gUnknown_203F454->array[id], arg1, r2);
+ break;
+ }
+}
+
+static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
+{
+ u32 r5 = arg0->field_14;
+ u32 oamId = arg0->firstOamId;
+
+ while (r5 != 0)
+ {
+ u32 r4 = arg1 / r5;
+ arg1 -= (r4 * r5);
+ r5 /= 10;
+
+ gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
+ oamId++;
+ }
+
+ if (arg2)
+ gMain.oamBuffer[oamId].affineMode = 0;
+ else
+ gMain.oamBuffer[oamId].affineMode = 2;
+}
+
+static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
+{
+ u32 r5 = arg0->field_14;
+ static int gUnknown_3002078;
+ static int gUnknown_300207C;
+ static int gUnknown_3002080;
+
+ gUnknown_3002078 = arg0->firstOamId;
+ gUnknown_300207C = 0;
+ gUnknown_3002080 = -1;
+
+ while (r5 != 0)
+ {
+ u32 r4 = arg1 / r5;
+ arg1 -= (r4 * r5);
+ r5 /= 10;
+
+ if (r4 != 0 || gUnknown_3002080 != -1 || r5 == 0)
+ {
+ gMain.oamBuffer[gUnknown_3002078].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
+ gMain.oamBuffer[gUnknown_3002078].affineMode = 0;
+
+ if (gUnknown_3002080 == -1)
+ gUnknown_3002080 = gUnknown_300207C;
+ }
+ else
+ {
+ gMain.oamBuffer[gUnknown_3002078].affineMode = 2;
+ }
+
+ gUnknown_3002078++;
+ gUnknown_300207C++;
+ }
+
+ if (arg2)
+ {
+ gMain.oamBuffer[gUnknown_3002078].affineMode = 0;
+ gMain.oamBuffer[gUnknown_3002078].x = arg0->x + ((gUnknown_3002080 - 1) * arg0->xDelta);
+ }
+ else
+ {
+ gMain.oamBuffer[gUnknown_3002078].affineMode = 2;
+ }
+}
+
+static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
+{
+ u32 r5 = arg0->field_14;
+ u32 oamId = arg0->firstOamId;
+ u32 var_28 = 0;
+ s32 r9 = 0;
+
+ while (r5 != 0)
+ {
+ u32 r4 = arg1 / r5;
+ arg1 -= (r4 * r5);
+ r5 /= 10;
+
+ if (r4 != 0 || var_28 != 0 || r5 == 0)
+ {
+ var_28 = 1;
+ gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
+ gMain.oamBuffer[oamId].affineMode = 0;
+
+ oamId++;
+ r9++;
+ }
+ }
+
+ while (r9 < arg0->oamCount)
+ {
+ gMain.oamBuffer[oamId].affineMode = 2;
+ oamId++;
+ r9++;
+ }
+
+ if (arg2)
+ gMain.oamBuffer[oamId].affineMode = 0;
+ else
+ gMain.oamBuffer[oamId].affineMode = 2;
+}
+
+void sub_815D108(u32 id)
+{
+ s32 oamId, oamCount, i;
+
+ if (gUnknown_203F454 == NULL)
+ return;
+ if (!gUnknown_203F454->array[id].isActive)
+ return;
+
+ oamCount = gUnknown_203F454->array[id].oamCount + 1;
+ oamId = gUnknown_203F454->array[id].firstOamId;
+
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = 2;
+
+ if (!SharesTileWithAnyActive(id))
+ FreeSpriteTilesByTag(gUnknown_203F454->array[id].tileTag);
+ if (!SharesPalWithAnyActive(id))
+ FreeSpritePaletteByTag(gUnknown_203F454->array[id].palTag);
+
+ gUnknown_203F454->array[id].isActive = FALSE;
+}
+
+void sub_815D1A8(u32 id, bool32 arg1)
+{
+ s32 oamId, oamCount, i;
+
+ if (gUnknown_203F454 == NULL)
+ return;
+ if (!gUnknown_203F454->array[id].isActive)
+ return;
+
+ oamCount = gUnknown_203F454->array[id].oamCount + 1;
+ oamId = gUnknown_203F454->array[id].firstOamId;
+ if (arg1)
+ {
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = 2;
+ }
+ else
+ {
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = 0;
+
+ sub_815CD70(id, gUnknown_203F454->array[id].field_18);
+ }
+}
+
+static u8 sub_815D244(u8 arg0)
+{
+ u32 i;
+ u16 oamCount = 64;
+
+ for (i = 0; i < gUnknown_203F454->count; i++)
+ {
+ if (!gUnknown_203F454->array[i].isActive)
+ {
+ if (gUnknown_203F454->array[i].firstOamId != 0xFF && gUnknown_203F454->array[i].oamCount <= arg0)
+ return gUnknown_203F454->array[i].firstOamId;
+ }
+ else
+ {
+ oamCount += 1 + gUnknown_203F454->array[i].oamCount;
+ }
+ }
+
+ if (oamCount + arg0 + 1 > 128)
+ return 0xFF;
+ else
+ return oamCount;
+}
+
+static bool32 SharesTileWithAnyActive(u32 id)
+{
+ u32 i;
+
+ for (i = 0; i < gUnknown_203F454->count; i++)
+ {
+ if (gUnknown_203F454->array[i].isActive && i != id
+ && gUnknown_203F454->array[i].tileTag == gUnknown_203F454->array[id].tileTag)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static bool32 SharesPalWithAnyActive(u32 id)
+{
+ u32 i;
+
+ for (i = 0; i < gUnknown_203F454->count; i++)
+ {
+ if (gUnknown_203F454->array[i].isActive && i != id
+ && gUnknown_203F454->array[i].palTag == gUnknown_203F454->array[id].palTag)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+u8 sub_815D324(u32 shape, u32 size)
+{
+ return gUnknown_8479658[shape][size];
+}
diff --git a/sym_bss.txt b/sym_bss.txt
index 88c464566..556a53add 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -230,15 +230,10 @@ gUnknown_3002072: @ 3002072
gUnknown_3002074: @ 3002074
.space 0x4
-gUnknown_3002078: @ 3002078
- .space 0x4
-
-gUnknown_300207C: @ 300207C
- .space 0x4
-
-gUnknown_3002080: @ 3002080
- .space 0x8
+ .align 3
+ .include "src/unk_815C980.o"
+ .align 3
.include "asm/m4a_1.o"
.include "src/agb_flash.o"
diff --git a/sym_common.txt b/sym_common.txt
index 6f47cb531..56536bda2 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -30,7 +30,7 @@ gUnknown_3003EBC: @ 3003EBC
gUnknown_3003EC4: @ 3003EC4
.space 0xC
-gUnknown_3003ED0: @ 3003ED0
+gRecvCmds: @ 3003ED0
.space 0x2
gUnknown_3003ED2: @ 3003ED2
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 4a8ceab1b..a5151ebc0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1647,9 +1647,9 @@ gUnknown_203F44A: @ 203F44A
gUnknown_203F450: @ 203F450
.space 0x4
-gUnknown_203F454: @ 203F454
- .space 0x4
-
+ .align 2
+ .include "src/unk_815C980.o"
+ .align 2
.include "src/trainer_tower.o"
gUnknown_203F460: @ 203F460