summaryrefslogtreecommitdiff
path: root/asm/rom_803D1FC.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/rom_803D1FC.s')
-rw-r--r--asm/rom_803D1FC.s7860
1 files changed, 7860 insertions, 0 deletions
diff --git a/asm/rom_803D1FC.s b/asm/rom_803D1FC.s
new file mode 100644
index 000000000..e25cf776f
--- /dev/null
+++ b/asm/rom_803D1FC.s
@@ -0,0 +1,7860 @@
+ .include "constants/gba_constants.s"
+ .include "constants/species_constants.s"
+ .include "asm/macros.s"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start SetMonData
+SetMonData: @ 803D1FC
+ push {lr}
+ adds r3, r0, 0
+ adds r0, r1, 0
+ subs r0, 0x37
+ cmp r0, 0xA
+ bhi _0803D2E0
+ lsls r0, 2
+ ldr r1, _0803D214
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803D214: .4byte _0803D218
+ .align 2, 0
+_0803D218:
+ .4byte _0803D244
+ .4byte _0803D25C
+ .4byte _0803D266
+ .4byte _0803D276
+ .4byte _0803D286
+ .4byte _0803D296
+ .4byte _0803D2A6
+ .4byte _0803D2B6
+ .4byte _0803D2C6
+ .4byte _0803D2D6
+ .4byte _0803D2E6
+_0803D244:
+ ldrb r1, [r2]
+ ldrb r0, [r2, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ ldrb r0, [r2, 0x2]
+ lsls r0, 16
+ adds r1, r0
+ ldrb r0, [r2, 0x3]
+ lsls r0, 24
+ adds r1, r0
+ str r1, [r3, 0x50]
+ b _0803D2E6
+_0803D25C:
+ ldrb r1, [r2]
+ adds r0, r3, 0
+ adds r0, 0x54
+ strb r1, [r0]
+ b _0803D2E6
+_0803D266:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x56
+ strh r0, [r1]
+ b _0803D2E6
+_0803D276:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x58
+ strh r0, [r1]
+ b _0803D2E6
+_0803D286:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x5A
+ strh r0, [r1]
+ b _0803D2E6
+_0803D296:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x5C
+ strh r0, [r1]
+ b _0803D2E6
+_0803D2A6:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x5E
+ strh r0, [r1]
+ b _0803D2E6
+_0803D2B6:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x60
+ strh r0, [r1]
+ b _0803D2E6
+_0803D2C6:
+ ldrb r0, [r2]
+ ldrb r1, [r2, 0x1]
+ lsls r1, 8
+ adds r0, r1
+ adds r1, r3, 0
+ adds r1, 0x62
+ strh r0, [r1]
+ b _0803D2E6
+_0803D2D6:
+ ldrb r1, [r2]
+ adds r0, r3, 0
+ adds r0, 0x55
+ strb r1, [r0]
+ b _0803D2E6
+_0803D2E0:
+ adds r0, r3, 0
+ bl SetBoxMonData
+_0803D2E6:
+ pop {r0}
+ bx r0
+ thumb_func_end SetMonData
+
+ thumb_func_start SetBoxMonData
+SetBoxMonData: @ 803D2EC
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ adds r7, r0, 0
+ mov r10, r1
+ adds r4, r2, 0
+ movs r0, 0
+ mov r8, r0
+ mov r9, r0
+ movs r6, 0
+ movs r5, 0
+ cmp r1, 0xA
+ ble _0803D36C
+ ldr r1, [r7]
+ adds r0, r7, 0
+ movs r2, 0
+ bl GetSubstruct
+ mov r8, r0
+ ldr r1, [r7]
+ adds r0, r7, 0
+ movs r2, 0x1
+ bl GetSubstruct
+ mov r9, r0
+ ldr r1, [r7]
+ adds r0, r7, 0
+ movs r2, 0x2
+ bl GetSubstruct
+ adds r6, r0, 0
+ ldr r1, [r7]
+ adds r0, r7, 0
+ movs r2, 0x3
+ bl GetSubstruct
+ adds r5, r0, 0
+ adds r0, r7, 0
+ bl DecryptBoxMon
+ adds r0, r7, 0
+ bl CalculateBoxMonChecksum
+ lsls r0, 16
+ lsrs r0, 16
+ ldrh r1, [r7, 0x1C]
+ cmp r0, r1
+ beq _0803D36C
+ ldrb r0, [r7, 0x13]
+ movs r1, 0x1
+ orrs r0, r1
+ movs r1, 0x4
+ orrs r0, r1
+ strb r0, [r7, 0x13]
+ ldrb r0, [r5, 0x7]
+ movs r1, 0x40
+ orrs r0, r1
+ strb r0, [r5, 0x7]
+ adds r0, r7, 0
+ bl EncryptBoxMon
+ b _0803D8F6
+_0803D36C:
+ mov r0, r10
+ cmp r0, 0x4F
+ bls _0803D374
+ b _0803D8E2
+_0803D374:
+ lsls r0, 2
+ ldr r1, _0803D380
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803D380: .4byte _0803D384
+ .align 2, 0
+_0803D384:
+ .4byte _0803D4C4
+ .4byte _0803D4DC
+ .4byte _0803D4F4
+ .4byte _0803D50A
+ .4byte _0803D510
+ .4byte _0803D520
+ .4byte _0803D532
+ .4byte _0803D544
+ .4byte _0803D55A
+ .4byte _0803D560
+ .4byte _0803D56C
+ .4byte _0803D578
+ .4byte _0803D598
+ .4byte _0803D5D0
+ .4byte _0803D5D0
+ .4byte _0803D5D0
+ .4byte _0803D5D0
+ .4byte _0803D5E4
+ .4byte _0803D5E4
+ .4byte _0803D5E4
+ .4byte _0803D5E4
+ .4byte _0803D5C0
+ .4byte _0803D614
+ .4byte _0803D61A
+ .4byte _0803D620
+ .4byte _0803D5A6
+ .4byte _0803D5F0
+ .4byte _0803D5F6
+ .4byte _0803D5FC
+ .4byte _0803D602
+ .4byte _0803D608
+ .4byte _0803D60E
+ .4byte _0803D5C8
+ .4byte _0803D626
+ .4byte _0803D638
+ .4byte _0803D63E
+ .4byte _0803D644
+ .4byte _0803D658
+ .4byte _0803D670
+ .4byte _0803D696
+ .4byte _0803D6AA
+ .4byte _0803D6C4
+ .4byte _0803D6DA
+ .4byte _0803D6F4
+ .4byte _0803D70C
+ .4byte _0803D720
+ .4byte _0803D750
+ .4byte _0803D62C
+ .4byte _0803D632
+ .4byte _0803D686
+ .4byte _0803D760
+ .4byte _0803D76E
+ .4byte _0803D784
+ .4byte _0803D79C
+ .4byte _0803D7AC
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D8E2
+ .4byte _0803D89A
+ .4byte _0803D7C2
+ .4byte _0803D7D2
+ .4byte _0803D7E0
+ .4byte _0803D7F0
+ .4byte _0803D800
+ .4byte _0803D810
+ .4byte _0803D820
+ .4byte _0803D830
+ .4byte _0803D846
+ .4byte _0803D856
+ .4byte _0803D864
+ .4byte _0803D874
+ .4byte _0803D88A
+_0803D4C4:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ ldrb r0, [r4, 0x2]
+ lsls r0, 16
+ adds r1, r0
+ ldrb r0, [r4, 0x3]
+ lsls r0, 24
+ adds r1, r0
+ str r1, [r7]
+ b _0803D8E2
+_0803D4DC:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ ldrb r0, [r4, 0x2]
+ lsls r0, 16
+ adds r1, r0
+ ldrb r0, [r4, 0x3]
+ lsls r0, 24
+ adds r1, r0
+ str r1, [r7, 0x4]
+ b _0803D8E2
+_0803D4F4:
+ movs r2, 0
+ adds r3, r7, 0
+ adds r3, 0x8
+_0803D4FA:
+ adds r0, r3, r2
+ adds r1, r4, r2
+ ldrb r1, [r1]
+ strb r1, [r0]
+ adds r2, 0x1
+ cmp r2, 0x9
+ ble _0803D4FA
+ b _0803D8E2
+_0803D50A:
+ ldrb r0, [r4]
+ strb r0, [r7, 0x12]
+ b _0803D8E2
+_0803D510:
+ ldrb r0, [r4]
+ movs r1, 0x1
+ ands r1, r0
+ ldrb r2, [r7, 0x13]
+ movs r0, 0x2
+ negs r0, r0
+ ands r0, r2
+ b _0803D73E
+_0803D520:
+ ldrb r0, [r4]
+ movs r1, 0x1
+ ands r1, r0
+ lsls r1, 1
+ ldrb r2, [r7, 0x13]
+ movs r0, 0x3
+ negs r0, r0
+ ands r0, r2
+ b _0803D73E
+_0803D532:
+ ldrb r0, [r4]
+ movs r1, 0x1
+ ands r1, r0
+ lsls r1, 2
+ ldrb r2, [r7, 0x13]
+ movs r0, 0x5
+ negs r0, r0
+ ands r0, r2
+ b _0803D73E
+_0803D544:
+ movs r2, 0
+ adds r3, r7, 0
+ adds r3, 0x14
+_0803D54A:
+ adds r0, r3, r2
+ adds r1, r4, r2
+ ldrb r1, [r1]
+ strb r1, [r0]
+ adds r2, 0x1
+ cmp r2, 0x6
+ ble _0803D54A
+ b _0803D8E2
+_0803D55A:
+ ldrb r0, [r4]
+ strb r0, [r7, 0x1B]
+ b _0803D8E2
+_0803D560:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ strh r1, [r7, 0x1C]
+ b _0803D8E2
+_0803D56C:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ strh r1, [r7, 0x1E]
+ b _0803D8E2
+_0803D578:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ mov r0, r8
+ strh r1, [r0]
+ lsls r1, 16
+ cmp r1, 0
+ beq _0803D590
+ ldrb r0, [r7, 0x13]
+ movs r1, 0x2
+ b _0803D73E
+_0803D590:
+ ldrb r1, [r7, 0x13]
+ movs r0, 0x3
+ negs r0, r0
+ b _0803D74A
+_0803D598:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ mov r0, r8
+ strh r1, [r0, 0x2]
+ b _0803D8E2
+_0803D5A6:
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ ldrb r0, [r4, 0x2]
+ lsls r0, 16
+ adds r1, r0
+ ldrb r0, [r4, 0x3]
+ lsls r0, 24
+ adds r1, r0
+ mov r0, r8
+ str r1, [r0, 0x4]
+ b _0803D8E2
+_0803D5C0:
+ ldrb r0, [r4]
+ mov r1, r8
+ strb r0, [r1, 0x8]
+ b _0803D8E2
+_0803D5C8:
+ ldrb r0, [r4]
+ mov r1, r8
+ strb r0, [r1, 0x9]
+ b _0803D8E2
+_0803D5D0:
+ mov r2, r10
+ subs r2, 0xD
+ lsls r2, 1
+ add r2, r9
+ ldrb r1, [r4]
+ ldrb r0, [r4, 0x1]
+ lsls r0, 8
+ adds r1, r0
+ strh r1, [r2]
+ b _0803D8E2
+_0803D5E4:
+ mov r0, r9
+ add r0, r10
+ subs r0, 0x9
+ ldrb r1, [r4]
+ strb r1, [r0]
+ b _0803D8E2
+_0803D5F0:
+ ldrb r0, [r4]
+ strb r0, [r6]
+ b _0803D8E2
+_0803D5F6:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x1]
+ b _0803D8E2
+_0803D5FC:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x2]
+ b _0803D8E2
+_0803D602:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x3]
+ b _0803D8E2
+_0803D608:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x4]
+ b _0803D8E2
+_0803D60E:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x5]
+ b _0803D8E2
+_0803D614:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x6]
+ b _0803D8E2
+_0803D61A:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x7]
+ b _0803D8E2
+_0803D620:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x8]
+ b _0803D8E2
+_0803D626:
+ ldrb r0, [r4]
+ strb r0, [r6, 0x9]
+ b _0803D8E2
+_0803D62C:
+ ldrb r0, [r4]
+ strb r0, [r6, 0xA]
+ b _0803D8E2
+_0803D632:
+ ldrb r0, [r4]
+ strb r0, [r6, 0xB]
+ b _0803D8E2
+_0803D638:
+ ldrb r0, [r4]
+ strb r0, [r5]
+ b _0803D8E2
+_0803D63E:
+ ldrb r0, [r4]
+ strb r0, [r5, 0x1]
+ b _0803D8E2
+_0803D644:
+ ldrb r1, [r4]
+ movs r0, 0x7F
+ ands r1, r0
+ ldrb r2, [r5, 0x2]
+ movs r0, 0x80
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x2]
+ b _0803D8E2
+_0803D658:
+ ldrb r1, [r4]
+ movs r0, 0xF
+ ands r1, r0
+ lsls r1, 7
+ ldrh r2, [r5, 0x2]
+ ldr r0, _0803D66C
+ ands r0, r2
+ orrs r0, r1
+ strh r0, [r5, 0x2]
+ b _0803D8E2
+ .align 2, 0
+_0803D66C: .4byte 0xfffff87f
+_0803D670:
+ ldrb r1, [r4]
+ movs r0, 0xF
+ ands r1, r0
+ lsls r1, 3
+ ldrb r2, [r5, 0x3]
+ movs r0, 0x79
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x3]
+ b _0803D8E2
+_0803D686:
+ ldrb r0, [r4]
+ lsls r0, 7
+ ldrb r2, [r5, 0x3]
+ movs r1, 0x7F
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r5, 0x3]
+ b _0803D8E2
+_0803D696:
+ ldrb r1, [r4]
+ movs r0, 0x1F
+ ands r1, r0
+ ldrb r2, [r5, 0x4]
+ movs r0, 0x20
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x4]
+ b _0803D8E2
+_0803D6AA:
+ ldrb r1, [r4]
+ movs r0, 0x1F
+ ands r1, r0
+ lsls r1, 5
+ ldrh r2, [r5, 0x4]
+ ldr r0, _0803D6C0
+ ands r0, r2
+ orrs r0, r1
+ strh r0, [r5, 0x4]
+ b _0803D8E2
+ .align 2, 0
+_0803D6C0: .4byte 0xfffffc1f
+_0803D6C4:
+ ldrb r1, [r4]
+ movs r0, 0x1F
+ ands r1, r0
+ lsls r1, 2
+ ldrb r2, [r5, 0x5]
+ movs r0, 0x7D
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x5]
+ b _0803D8E2
+_0803D6DA:
+ ldrb r2, [r4]
+ movs r0, 0x1F
+ ands r2, r0
+ lsls r2, 15
+ ldr r0, [r5, 0x4]
+ ldr r1, _0803D6F0
+ ands r0, r1
+ orrs r0, r2
+ str r0, [r5, 0x4]
+ b _0803D8E2
+ .align 2, 0
+_0803D6F0: .4byte 0xfff07fff
+_0803D6F4:
+ ldrb r1, [r4]
+ movs r0, 0x1F
+ ands r1, r0
+ lsls r1, 4
+ ldrh r2, [r5, 0x6]
+ ldr r0, _0803D708
+ ands r0, r2
+ orrs r0, r1
+ strh r0, [r5, 0x6]
+ b _0803D8E2
+ .align 2, 0
+_0803D708: .4byte 0xfffffe0f
+_0803D70C:
+ ldrb r1, [r4]
+ movs r0, 0x1F
+ ands r1, r0
+ lsls r1, 1
+ ldrb r2, [r5, 0x7]
+ movs r0, 0x3F
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ b _0803D8E0
+_0803D720:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 6
+ ldrb r2, [r5, 0x7]
+ movs r0, 0x41
+ negs r0, r0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x7]
+ lsls r0, 25
+ cmp r0, 0
+ bge _0803D744
+ ldrb r0, [r7, 0x13]
+ movs r1, 0x4
+_0803D73E:
+ orrs r0, r1
+ strb r0, [r7, 0x13]
+ b _0803D8E2
+_0803D744:
+ ldrb r1, [r7, 0x13]
+ movs r0, 0x5
+ negs r0, r0
+_0803D74A:
+ ands r0, r1
+ strb r0, [r7, 0x13]
+ b _0803D8E2
+_0803D750:
+ ldrb r0, [r4]
+ lsls r0, 7
+ ldrb r2, [r5, 0x7]
+ movs r1, 0x7F
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r5, 0x7]
+ b _0803D8E2
+_0803D760:
+ ldrb r1, [r4]
+ movs r0, 0x7
+ ands r1, r0
+ ldrb r2, [r5, 0x8]
+ movs r0, 0x8
+ negs r0, r0
+ b _0803D77C
+_0803D76E:
+ ldrb r1, [r4]
+ movs r0, 0x7
+ ands r1, r0
+ lsls r1, 3
+ ldrb r2, [r5, 0x8]
+ movs r0, 0x39
+ negs r0, r0
+_0803D77C:
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x8]
+ b _0803D8E2
+_0803D784:
+ ldrb r1, [r4]
+ movs r0, 0x7
+ ands r1, r0
+ lsls r1, 6
+ ldrh r2, [r5, 0x8]
+ ldr r0, _0803D798
+ ands r0, r2
+ orrs r0, r1
+ strh r0, [r5, 0x8]
+ b _0803D8E2
+ .align 2, 0
+_0803D798: .4byte 0xfffffe3f
+_0803D79C:
+ ldrb r1, [r4]
+ movs r0, 0x7
+ ands r1, r0
+ lsls r1, 1
+ ldrb r2, [r5, 0x9]
+ movs r0, 0xF
+ negs r0, r0
+ b _0803D7BA
+_0803D7AC:
+ ldrb r1, [r4]
+ movs r0, 0x7
+ ands r1, r0
+ lsls r1, 4
+ ldrb r2, [r5, 0x9]
+ movs r0, 0x71
+ negs r0, r0
+_0803D7BA:
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0x9]
+ b _0803D8E2
+_0803D7C2:
+ ldrb r0, [r4]
+ lsls r0, 7
+ ldrb r2, [r5, 0x9]
+ movs r1, 0x7F
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r5, 0x9]
+ b _0803D8E2
+_0803D7D2:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x2
+ negs r0, r0
+ b _0803D83E
+_0803D7E0:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 1
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x3
+ negs r0, r0
+ b _0803D83E
+_0803D7F0:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 2
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x5
+ negs r0, r0
+ b _0803D83E
+_0803D800:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 3
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x9
+ negs r0, r0
+ b _0803D83E
+_0803D810:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 4
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x11
+ negs r0, r0
+ b _0803D83E
+_0803D820:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 5
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x21
+ negs r0, r0
+ b _0803D83E
+_0803D830:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 6
+ ldrb r2, [r5, 0xA]
+ movs r0, 0x41
+ negs r0, r0
+_0803D83E:
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0xA]
+ b _0803D8E2
+_0803D846:
+ ldrb r0, [r4]
+ lsls r0, 7
+ ldrb r2, [r5, 0xA]
+ movs r1, 0x7F
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r5, 0xA]
+ b _0803D8E2
+_0803D856:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ ldrb r2, [r5, 0xB]
+ movs r0, 0x2
+ negs r0, r0
+ b _0803D882
+_0803D864:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 1
+ ldrb r2, [r5, 0xB]
+ movs r0, 0x3
+ negs r0, r0
+ b _0803D882
+_0803D874:
+ ldrb r1, [r4]
+ movs r0, 0x1
+ ands r1, r0
+ lsls r1, 2
+ ldrb r2, [r5, 0xB]
+ movs r0, 0x5
+ negs r0, r0
+_0803D882:
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r5, 0xB]
+ b _0803D8E2
+_0803D88A:
+ ldrb r0, [r4]
+ lsls r0, 3
+ ldrb r2, [r5, 0xB]
+ movs r1, 0x7
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r5, 0xB]
+ b _0803D8E2
+_0803D89A:
+ ldrb r1, [r4]
+ movs r4, 0x1F
+ adds r2, r1, 0
+ ands r2, r4
+ ldrb r3, [r5, 0x4]
+ movs r0, 0x20
+ negs r0, r0
+ ands r0, r3
+ orrs r0, r2
+ strb r0, [r5, 0x4]
+ lsrs r1, 5
+ ands r1, r4
+ lsls r1, 5
+ ldrh r2, [r5, 0x4]
+ ldr r0, _0803D904
+ ands r0, r2
+ orrs r0, r1
+ strh r0, [r5, 0x4]
+ ldrb r1, [r5, 0x5]
+ movs r0, 0x7D
+ negs r0, r0
+ ands r0, r1
+ strb r0, [r5, 0x5]
+ ldr r0, [r5, 0x4]
+ ldr r1, _0803D908
+ ands r0, r1
+ str r0, [r5, 0x4]
+ ldrh r1, [r5, 0x6]
+ ldr r0, _0803D90C
+ ands r0, r1
+ strh r0, [r5, 0x6]
+ ldrb r1, [r5, 0x7]
+ movs r0, 0x3F
+ negs r0, r0
+ ands r0, r1
+_0803D8E0:
+ strb r0, [r5, 0x7]
+_0803D8E2:
+ mov r0, r10
+ cmp r0, 0xA
+ ble _0803D8F6
+ adds r0, r7, 0
+ bl CalculateBoxMonChecksum
+ strh r0, [r7, 0x1C]
+ adds r0, r7, 0
+ bl EncryptBoxMon
+_0803D8F6:
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803D904: .4byte 0xfffffc1f
+_0803D908: .4byte 0xfff07fff
+_0803D90C: .4byte 0xfffffe0f
+ thumb_func_end SetBoxMonData
+
+ thumb_func_start CopyMon
+CopyMon: @ 803D910
+ push {lr}
+ bl memcpy
+ pop {r0}
+ bx r0
+ thumb_func_end CopyMon
+
+ thumb_func_start pokemon_catch
+pokemon_catch: @ 803D91C
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ ldr r4, _0803D948
+ movs r1, 0x7
+ adds r2, r4, 0
+ bl SetMonData
+ adds r2, r4, 0
+ adds r2, 0x8
+ adds r0, r6, 0
+ movs r1, 0x31
+ bl SetMonData
+ adds r4, 0xA
+ adds r0, r6, 0
+ movs r1, 0x1
+ adds r2, r4, 0
+ bl SetMonData
+ movs r5, 0
+ b _0803D94E
+ .align 2, 0
+_0803D948: .4byte gSaveBlock2
+_0803D94C:
+ adds r5, 0x1
+_0803D94E:
+ cmp r5, 0x5
+ bgt _0803D988
+ movs r0, 0x64
+ adds r1, r5, 0
+ muls r1, r0
+ ldr r0, _0803D980
+ adds r4, r1, r0
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0803D94C
+ adds r0, r4, 0
+ adds r1, r6, 0
+ movs r2, 0x64
+ bl CopyMon
+ ldr r1, _0803D984
+ adds r0, r5, 0x1
+ strb r0, [r1]
+ movs r0, 0
+ b _0803D992
+ .align 2, 0
+_0803D980: .4byte 0x03004360
+_0803D984: .4byte 0x03004350
+_0803D988:
+ adds r0, r6, 0
+ bl sub_803D998
+ lsls r0, 24
+ lsrs r0, 24
+_0803D992:
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end pokemon_catch
+
+ thumb_func_start sub_803D998
+sub_803D998: @ 803D998
+ push {r4-r7,lr}
+ mov r7, r9
+ mov r6, r8
+ push {r6,r7}
+ sub sp, 0x4
+ mov r9, r0
+ ldr r0, _0803D9E8
+ ldrb r5, [r0]
+_0803D9A8:
+ movs r7, 0
+ lsls r1, r5, 2
+ adds r1, r5
+ lsls r0, r1, 4
+ subs r0, r1
+ lsls r0, 5
+ mov r8, r0
+ movs r6, 0
+_0803D9B8:
+ ldr r3, _0803D9EC
+ adds r0, r6, r3
+ mov r1, r8
+ adds r4, r1, r0
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ str r3, [sp]
+ bl GetBoxMonData
+ ldr r3, [sp]
+ cmp r0, 0
+ bne _0803D9F0
+ mov r0, r9
+ bl sub_8040B1C
+ adds r0, r4, 0
+ mov r1, r9
+ movs r2, 0x50
+ bl CopyMon
+ movs r0, 0x1
+ b _0803DA0A
+ .align 2, 0
+_0803D9E8: .4byte 0x020300a0
+_0803D9EC: .4byte 0x020300a4
+_0803D9F0:
+ adds r6, 0x50
+ adds r7, 0x1
+ cmp r7, 0x1D
+ ble _0803D9B8
+ adds r5, 0x1
+ cmp r5, 0xE
+ bne _0803DA00
+ movs r5, 0
+_0803DA00:
+ subs r0, r3, 0x4
+ ldrb r0, [r0]
+ cmp r5, r0
+ bne _0803D9A8
+ movs r0, 0x2
+_0803DA0A:
+ add sp, 0x4
+ pop {r3,r4}
+ mov r8, r3
+ mov r9, r4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803D998
+
+ thumb_func_start calc_player_party_count
+calc_player_party_count: @ 803DA18
+ push {r4,lr}
+ ldr r0, _0803DA24
+ movs r1, 0
+ strb r1, [r0]
+ b _0803DA30
+ .align 2, 0
+_0803DA24: .4byte 0x03004350
+_0803DA28:
+ ldrb r0, [r4]
+ adds r0, 0x1
+ strb r0, [r4]
+ adds r0, r4, 0
+_0803DA30:
+ adds r4, r0, 0
+ ldrb r0, [r4]
+ cmp r0, 0x5
+ bhi _0803DA4E
+ adds r1, r0, 0
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _0803DA58
+ adds r0, r1
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0803DA28
+_0803DA4E:
+ ldrb r0, [r4]
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DA58: .4byte 0x03004360
+ thumb_func_end calc_player_party_count
+
+ thumb_func_start calc_enemy_party_count
+calc_enemy_party_count: @ 803DA5C
+ push {r4,lr}
+ ldr r0, _0803DA68
+ movs r1, 0
+ strb r1, [r0]
+ b _0803DA74
+ .align 2, 0
+_0803DA68: .4byte 0x030045b8
+_0803DA6C:
+ ldrb r0, [r4]
+ adds r0, 0x1
+ strb r0, [r4]
+ adds r0, r4, 0
+_0803DA74:
+ adds r4, r0, 0
+ ldrb r0, [r4]
+ cmp r0, 0x5
+ bhi _0803DA92
+ adds r1, r0, 0
+ movs r0, 0x64
+ muls r0, r1
+ ldr r1, _0803DA9C
+ adds r0, r1
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0803DA6C
+_0803DA92:
+ ldrb r0, [r4]
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DA9C: .4byte 0x030045c0
+ thumb_func_end calc_enemy_party_count
+
+ thumb_func_start sub_803DAA0
+sub_803DAA0: @ 803DAA0
+ push {r4-r6,lr}
+ movs r6, 0
+ bl calc_player_party_count
+ ldr r1, _0803DB0C
+ ldrb r0, [r1]
+ cmp r0, 0x1
+ beq _0803DB04
+ movs r5, 0
+ ldrb r1, [r1]
+ cmp r6, r1
+ bge _0803DAFC
+_0803DAB8:
+ movs r0, 0x64
+ adds r1, r5, 0
+ muls r1, r0
+ ldr r0, _0803DB10
+ adds r4, r1, r0
+ adds r0, r4, 0
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _0803DAF2
+ adds r0, r4, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _0803DAF2
+ adds r0, r4, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0xCE
+ lsls r1, 1
+ cmp r0, r1
+ beq _0803DAF2
+ adds r6, 0x1
+_0803DAF2:
+ adds r5, 0x1
+ ldr r0, _0803DB0C
+ ldrb r0, [r0]
+ cmp r5, r0
+ blt _0803DAB8
+_0803DAFC:
+ movs r0, 0
+ cmp r6, 0x1
+ bgt _0803DB04
+ movs r0, 0x2
+_0803DB04:
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DB0C: .4byte 0x03004350
+_0803DB10: .4byte 0x03004360
+ thumb_func_end sub_803DAA0
+
+ thumb_func_start sub_803DB14
+sub_803DB14: @ 803DB14
+ push {lr}
+ lsls r0, 16
+ lsrs r3, r0, 16
+ lsls r1, 24
+ cmp r1, 0
+ beq _0803DB38
+ ldr r2, _0803DB30
+ ldr r1, _0803DB34
+ lsls r0, r3, 3
+ subs r0, r3
+ lsls r0, 2
+ adds r0, r1
+ ldrb r0, [r0, 0x17]
+ b _0803DB46
+ .align 2, 0
+_0803DB30: .4byte 0x02024c06
+_0803DB34: .4byte gBaseStats
+_0803DB38:
+ ldr r2, _0803DB50
+ ldr r1, _0803DB54
+ lsls r0, r3, 3
+ subs r0, r3
+ lsls r0, 2
+ adds r0, r1
+ ldrb r0, [r0, 0x16]
+_0803DB46:
+ strb r0, [r2]
+ ldrb r0, [r2]
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DB50: .4byte 0x02024c06
+_0803DB54: .4byte gBaseStats
+ thumb_func_end sub_803DB14
+
+ thumb_func_start GetMonAbility
+GetMonAbility: @ 803DB58
+ push {r4,r5,lr}
+ adds r5, r0, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r5, 0
+ movs r1, 0x2E
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ bl sub_803DB14
+ lsls r0, 24
+ lsrs r0, 24
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end GetMonAbility
+
+ thumb_func_start create_enemy_party
+create_enemy_party: @ 803DB8C
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x18
+ adds r4, r0, 0
+ bl ZeroEnemyPartyMons
+ ldr r5, _0803DC8C
+ adds r0, r5, 0
+ adds r1, r4, 0
+ movs r2, 0xA0
+ bl memcpy
+ movs r7, 0
+_0803DBAC:
+ lsls r0, r7, 1
+ mov r9, r0
+ ldr r2, _0803DC8C
+ adds r2, 0x7C
+ mov r10, r2
+ mov r1, r9
+ add r1, r10
+ ldrh r0, [r1]
+ adds r2, r7, 0x1
+ str r2, [sp, 0x10]
+ cmp r0, 0
+ beq _0803DC64
+ movs r0, 0x64
+ adds r6, r7, 0
+ muls r6, r0
+ ldr r2, _0803DC90
+ mov r8, r2
+ adds r5, r6, r2
+ ldrh r1, [r1]
+ ldr r0, _0803DC8C
+ adds r0, 0x94
+ adds r0, r7, r0
+ ldrb r2, [r0]
+ movs r0, 0x1
+ str r0, [sp]
+ lsls r4, r7, 2
+ ldr r0, _0803DC8C
+ adds r0, 0x34
+ adds r0, r4, r0
+ ldr r0, [r0]
+ str r0, [sp, 0x4]
+ movs r0, 0x2
+ str r0, [sp, 0x8]
+ movs r0, 0
+ str r0, [sp, 0xC]
+ adds r0, r5, 0
+ movs r3, 0xF
+ bl CreateMon
+ ldr r2, _0803DC94
+ add r2, r9
+ adds r0, r5, 0
+ movs r1, 0xC
+ bl SetMonData
+ movs r5, 0
+ mov r9, r4
+ mov r3, r8
+ mov r4, r10
+ adds r4, 0x1E
+_0803DC10:
+ adds r1, r5, 0
+ adds r1, 0x1A
+ adds r0, r6, r3
+ adds r2, r7, r4
+ str r3, [sp, 0x14]
+ bl SetMonData
+ adds r5, 0x1
+ ldr r3, [sp, 0x14]
+ cmp r5, 0x5
+ ble _0803DC10
+ movs r5, 0
+ movs r0, 0x64
+ adds r1, r7, 0
+ muls r1, r0
+ ldr r0, _0803DC90
+ adds r7, r1, r0
+ mov r2, r9
+ lsls r6, r2, 1
+_0803DC36:
+ adds r1, r5, 0
+ adds r1, 0xD
+ ldr r4, _0803DC98
+ adds r4, r6, r4
+ adds r0, r7, 0
+ adds r2, r4, 0
+ bl SetMonData
+ adds r1, r5, 0
+ adds r1, 0x11
+ ldrh r0, [r4]
+ lsls r2, r0, 1
+ adds r2, r0
+ lsls r2, 2
+ ldr r0, _0803DC9C
+ adds r2, r0
+ adds r0, r7, 0
+ bl SetMonData
+ adds r6, 0x2
+ adds r5, 0x1
+ cmp r5, 0x3
+ ble _0803DC36
+_0803DC64:
+ ldr r7, [sp, 0x10]
+ cmp r7, 0x5
+ ble _0803DBAC
+ ldr r1, _0803DCA0
+ movs r0, 0x8
+ strh r0, [r1]
+ ldr r1, _0803DCA4
+ movs r2, 0x80
+ lsls r2, 3
+ adds r0, r2, 0
+ strh r0, [r1]
+ add sp, 0x18
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803DC8C: .4byte 0x02017000
+_0803DC90: .4byte 0x030045c0
+_0803DC94: .4byte 0x02017088
+_0803DC98: .4byte 0x0201704c
+_0803DC9C: .4byte gBattleMoves + 0x4 @ PP offset
+_0803DCA0: .4byte 0x020239f8
+_0803DCA4: .4byte 0x0202ff5e
+ thumb_func_end create_enemy_party
+
+ thumb_func_start sub_803DCA8
+sub_803DCA8: @ 803DCA8
+ push {r4,r5,lr}
+ ldr r5, _0803DCD8
+ ldr r4, _0803DCDC
+ ldrb r0, [r4, 0x9]
+ movs r1, 0x5
+ bl __umodsi3
+ lsls r0, 24
+ lsrs r0, 24
+ ldrb r2, [r4, 0x1]
+ lsls r2, 27
+ lsrs r2, 31
+ lsls r1, r2, 2
+ adds r1, r2
+ adds r0, r1
+ adds r0, r5
+ ldrb r0, [r0]
+ ldr r1, _0803DCE0
+ adds r0, r1
+ ldrb r0, [r0]
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DCD8: .4byte gUnknown_082082E8
+_0803DCDC: .4byte 0x02017000
+_0803DCE0: .4byte gTrainerClassToPicIndex
+ thumb_func_end sub_803DCA8
+
+ thumb_func_start sub_803DCE4
+sub_803DCE4: @ 803DCE4
+ push {r4,r5,lr}
+ ldr r5, _0803DD14
+ ldr r4, _0803DD18
+ ldrb r0, [r4, 0x9]
+ movs r1, 0x5
+ bl __umodsi3
+ lsls r0, 24
+ lsrs r0, 24
+ ldrb r2, [r4, 0x1]
+ lsls r2, 27
+ lsrs r2, 31
+ lsls r1, r2, 2
+ adds r1, r2
+ adds r0, r1
+ adds r0, r5
+ ldrb r0, [r0]
+ ldr r1, _0803DD1C
+ adds r0, r1
+ ldrb r0, [r0]
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DD14: .4byte gUnknown_082082E8
+_0803DD18: .4byte 0x02017000
+_0803DD1C: .4byte gTrainerClassToNameIndex
+ thumb_func_end sub_803DCE4
+
+ thumb_func_start sub_803DD20
+sub_803DD20: @ 803DD20
+ push {r4,lr}
+ movs r4, 0
+_0803DD24:
+ movs r0, 0x64
+ muls r0, r4
+ ldr r1, _0803DD3C
+ adds r0, r1
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0803DD40
+ movs r0, 0
+ b _0803DD4E
+ .align 2, 0
+_0803DD3C: .4byte 0x03004360
+_0803DD40:
+ adds r4, 0x1
+ cmp r4, 0x5
+ ble _0803DD24
+ bl sub_803DD54
+ lsls r0, 24
+ lsrs r0, 24
+_0803DD4E:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803DD20
+
+ thumb_func_start sub_803DD54
+sub_803DD54: @ 803DD54
+ push {r4-r7,lr}
+ sub sp, 0x4
+ movs r3, 0
+ movs r7, 0
+_0803DD5C:
+ movs r5, 0
+ adds r6, r7, 0
+ movs r4, 0
+_0803DD62:
+ ldr r0, _0803DD7C
+ adds r0, r4, r0
+ adds r0, r6, r0
+ movs r1, 0xB
+ movs r2, 0
+ str r3, [sp]
+ bl GetBoxMonData
+ ldr r3, [sp]
+ cmp r0, 0
+ bne _0803DD80
+ movs r0, 0
+ b _0803DD96
+ .align 2, 0
+_0803DD7C: .4byte 0x020300a4
+_0803DD80:
+ adds r4, 0x50
+ adds r5, 0x1
+ cmp r5, 0x1D
+ ble _0803DD62
+ movs r0, 0x96
+ lsls r0, 4
+ adds r7, r0
+ adds r3, 0x1
+ cmp r3, 0xD
+ ble _0803DD5C
+ movs r0, 0x1
+_0803DD96:
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803DD54
+
+ thumb_func_start GetSpeciesName
+GetSpeciesName: @ 803DDA0
+ push {r4-r7,lr}
+ adds r6, r0, 0
+ lsls r1, 16
+ lsrs r5, r1, 16
+ movs r1, 0
+ movs r0, 0xCE
+ lsls r0, 1
+ mov r12, r0
+ ldr r7, _0803DDBC
+ movs r0, 0xB
+ muls r0, r5
+ adds r3, r0, r7
+ adds r2, r6, 0
+ b _0803DDC6
+ .align 2, 0
+_0803DDBC: .4byte gSpeciesNames
+_0803DDC0:
+ adds r3, 0x1
+ adds r2, 0x1
+ adds r1, 0x1
+_0803DDC6:
+ adds r4, r6, r1
+ cmp r1, 0xA
+ bgt _0803DDE0
+ cmp r5, r12
+ bls _0803DDD6
+ adds r0, r1, r7
+ ldrb r0, [r0]
+ b _0803DDD8
+_0803DDD6:
+ ldrb r0, [r3]
+_0803DDD8:
+ strb r0, [r2]
+ ldrb r0, [r4]
+ cmp r0, 0xFF
+ bne _0803DDC0
+_0803DDE0:
+ movs r0, 0xFF
+ strb r0, [r4]
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end GetSpeciesName
+
+ thumb_func_start CalcPPWithPPUps
+CalcPPWithPPUps: @ 803DDEC
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r0, 16
+ lsls r2, 24
+ lsrs r2, 24
+ ldr r4, _0803DE2C
+ lsls r3, r0, 1
+ adds r3, r0
+ lsls r3, 2
+ adds r3, r4
+ ldrb r4, [r3, 0x4]
+ ldr r0, _0803DE30
+ adds r0, r2, r0
+ ldrb r3, [r0]
+ ands r3, r1
+ lsls r2, 1
+ asrs r3, r2
+ lsls r0, r3, 2
+ adds r0, r3
+ lsls r0, 2
+ muls r0, r4
+ movs r1, 0x64
+ bl __divsi3
+ adds r4, r0
+ lsls r4, 24
+ lsrs r4, 24
+ adds r0, r4, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803DE2C: .4byte gBattleMoves
+_0803DE30: .4byte gUnknown_08208238
+ thumb_func_end CalcPPWithPPUps
+
+ thumb_func_start sub_803DE34
+sub_803DE34: @ 803DE34
+ push {r4,r5,lr}
+ sub sp, 0x4
+ adds r5, r0, 0
+ lsls r4, r1, 24
+ lsrs r4, 24
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ mov r1, sp
+ strb r0, [r1]
+ ldr r1, _0803DE6C
+ adds r4, r1
+ ldrb r1, [r4]
+ ands r1, r0
+ mov r0, sp
+ strb r1, [r0]
+ adds r0, r5, 0
+ movs r1, 0x15
+ mov r2, sp
+ bl SetMonData
+ add sp, 0x4
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803DE6C: .4byte gUnknown_0820823C
+ thumb_func_end sub_803DE34
+
+ thumb_func_start sub_803DE70
+sub_803DE70: @ 803DE70
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, 0x3B
+ ldr r2, _0803DE84
+ adds r1, r2
+ ldrb r2, [r0]
+ ldrb r1, [r1]
+ ands r1, r2
+ strb r1, [r0]
+ bx lr
+ .align 2, 0
+_0803DE84: .4byte gUnknown_0820823C
+ thumb_func_end sub_803DE70
+
+ thumb_func_start battle_data_fill
+battle_data_fill: @ 803DE88
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x18
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x14]
+ lsls r1, 24
+ lsrs r1, 24
+ mov r9, r1
+ movs r0, 0x64
+ mov r5, r9
+ muls r5, r0
+ ldr r0, _0803E170
+ adds r5, r0
+ adds r0, r5, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ ldr r1, _0803E174
+ mov r8, r1
+ movs r1, 0x58
+ ldr r2, [sp, 0x14]
+ adds r4, r2, 0
+ muls r4, r1
+ mov r3, r8
+ adds r6, r4, r3
+ strh r0, [r6]
+ adds r0, r5, 0
+ movs r1, 0xC
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r6, 0x2E]
+ movs r6, 0
+ mov r0, r8
+ adds r0, 0x24
+ adds r7, r4, r0
+_0803DEDA:
+ adds r1, r6, 0
+ adds r1, 0xD
+ adds r0, r5, 0
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0xC
+ add r1, r8
+ mov r10, r1
+ adds r1, r4, r1
+ strh r0, [r1]
+ adds r1, r6, 0
+ adds r1, 0x11
+ adds r0, r5, 0
+ movs r2, 0
+ bl GetMonData
+ strb r0, [r7]
+ adds r7, 0x1
+ adds r4, 0x2
+ adds r6, 0x1
+ cmp r6, 0x3
+ ble _0803DEDA
+ movs r0, 0x64
+ mov r4, r9
+ muls r4, r0
+ ldr r0, _0803E170
+ adds r4, r0
+ adds r0, r4, 0
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ movs r2, 0xC
+ negs r2, r2
+ add r2, r10
+ mov r9, r2
+ movs r1, 0x58
+ ldr r3, [sp, 0x14]
+ adds r5, r3, 0
+ muls r5, r1
+ adds r7, r5, r2
+ adds r1, r7, 0
+ adds r1, 0x3B
+ strb r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ adds r1, r7, 0
+ adds r1, 0x2B
+ strb r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x19
+ movs r2, 0
+ bl GetMonData
+ mov r1, r10
+ adds r1, 0x38
+ adds r1, r5, r1
+ str r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x27
+ movs r2, 0
+ bl GetMonData
+ movs r6, 0x1F
+ ands r0, r6
+ ldrb r2, [r7, 0x14]
+ movs r1, 0x20
+ negs r1, r1
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r7, 0x14]
+ adds r0, r4, 0
+ movs r1, 0x28
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0x1F
+ mov r8, r1
+ mov r2, r8
+ ands r0, r2
+ lsls r0, 5
+ ldrh r2, [r7, 0x14]
+ ldr r1, _0803E178
+ ands r1, r2
+ orrs r1, r0
+ strh r1, [r7, 0x14]
+ adds r0, r4, 0
+ movs r1, 0x29
+ movs r2, 0
+ bl GetMonData
+ ands r0, r6
+ lsls r0, 2
+ ldrb r2, [r7, 0x15]
+ movs r1, 0x7D
+ negs r1, r1
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r7, 0x15]
+ adds r0, r4, 0
+ movs r1, 0x2A
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0x1F
+ ands r1, r0
+ lsls r1, 15
+ ldr r0, [r7, 0x14]
+ ldr r2, _0803E17C
+ ands r0, r2
+ orrs r0, r1
+ str r0, [r7, 0x14]
+ adds r0, r4, 0
+ movs r1, 0x2B
+ movs r2, 0
+ bl GetMonData
+ mov r3, r8
+ ands r0, r3
+ lsls r0, 4
+ ldrh r2, [r7, 0x16]
+ ldr r1, _0803E180
+ ands r1, r2
+ orrs r1, r0
+ strh r1, [r7, 0x16]
+ adds r0, r4, 0
+ movs r1, 0x2C
+ movs r2, 0
+ bl GetMonData
+ ands r0, r6
+ lsls r0, 1
+ ldrb r2, [r7, 0x17]
+ movs r1, 0x3F
+ negs r1, r1
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r7, 0x17]
+ adds r0, r4, 0
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ mov r1, r10
+ adds r1, 0x3C
+ adds r1, r5, r1
+ str r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x37
+ movs r2, 0
+ bl GetMonData
+ mov r1, r10
+ adds r1, 0x40
+ adds r1, r5, r1
+ str r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ adds r1, r7, 0
+ adds r1, 0x2A
+ strb r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x28]
+ adds r0, r4, 0
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x2C]
+ adds r0, r4, 0
+ movs r1, 0x3B
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x2]
+ adds r0, r4, 0
+ movs r1, 0x3C
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x4]
+ adds r0, r4, 0
+ movs r1, 0x3D
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x6]
+ adds r0, r4, 0
+ movs r1, 0x3E
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0x8]
+ adds r0, r4, 0
+ movs r1, 0x3F
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r7, 0xA]
+ adds r0, r4, 0
+ movs r1, 0x2D
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0x1
+ ands r0, r1
+ lsls r0, 6
+ ldrb r2, [r7, 0x17]
+ movs r1, 0x41
+ negs r1, r1
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r7, 0x17]
+ adds r0, r4, 0
+ movs r1, 0x2E
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 7
+ ldrb r2, [r7, 0x17]
+ movs r1, 0x7F
+ ands r1, r2
+ orrs r1, r0
+ strb r1, [r7, 0x17]
+ adds r0, r4, 0
+ movs r1, 0x1
+ movs r2, 0
+ bl GetMonData
+ mov r1, r10
+ adds r1, 0x48
+ adds r1, r5, r1
+ str r0, [r1]
+ ldr r2, _0803E184
+ ldrh r1, [r7]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ adds r0, r2
+ ldrb r0, [r0, 0x6]
+ adds r1, r7, 0
+ adds r1, 0x21
+ strb r0, [r1]
+ ldrh r1, [r7]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ adds r0, r2
+ ldrb r0, [r0, 0x7]
+ adds r1, r7, 0
+ adds r1, 0x22
+ strb r0, [r1]
+ ldrh r0, [r7]
+ ldrb r1, [r7, 0x17]
+ lsrs r1, 7
+ bl sub_803DB14
+ adds r1, r7, 0
+ adds r1, 0x20
+ strb r0, [r1]
+ adds r0, r4, 0
+ movs r1, 0x2
+ mov r2, sp
+ bl GetMonData
+ mov r0, r10
+ adds r0, 0x24
+ adds r0, r5, r0
+ mov r1, sp
+ bl StringCopy10
+ mov r2, r10
+ adds r2, 0x30
+ adds r2, r5, r2
+ adds r0, r4, 0
+ movs r1, 0x7
+ bl GetMonData
+ ldr r0, [sp, 0x14]
+ bl battle_side_get_owner
+ lsls r0, 24
+ lsrs r0, 23
+ ldr r1, _0803E188
+ adds r0, r1
+ ldrh r1, [r7, 0x28]
+ strh r1, [r0]
+ movs r2, 0x6
+ mov r1, r9
+ movs r6, 0x7
+ add r5, r10
+ adds r0, r5, 0
+ adds r0, 0x13
+_0803E13A:
+ strb r2, [r0]
+ subs r0, 0x1
+ subs r6, 0x1
+ cmp r6, 0
+ bge _0803E13A
+ movs r2, 0
+ movs r0, 0x58
+ ldr r3, [sp, 0x14]
+ muls r0, r3
+ adds r1, 0x50
+ adds r0, r1
+ str r2, [r0]
+ ldr r0, [sp, 0x14]
+ bl sub_80157C4
+ ldr r0, [sp, 0x14]
+ movs r1, 0
+ bl sub_8032AA8
+ add sp, 0x18
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803E170: .4byte 0x03004360
+_0803E174: .4byte 0x02024a80
+_0803E178: .4byte 0xfffffc1f
+_0803E17C: .4byte 0xfff07fff
+_0803E180: .4byte 0xfffffe0f
+_0803E184: .4byte gBaseStats
+_0803E188: .4byte 0x020160bc
+ thumb_func_end battle_data_fill
+
+ thumb_func_start ExecuteTableBasedItemEffect_
+ExecuteTableBasedItemEffect_: @ 803E18C
+ push {r4,lr}
+ sub sp, 0x4
+ lsls r1, 16
+ lsrs r1, 16
+ lsls r2, 24
+ lsrs r2, 24
+ lsls r3, 24
+ lsrs r3, 24
+ movs r4, 0
+ str r4, [sp]
+ bl sub_803E1B0
+ lsls r0, 24
+ lsrs r0, 24
+ add sp, 0x4
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end ExecuteTableBasedItemEffect_
+
+ thumb_func_start sub_803E1B0
+sub_803E1B0: @ 803E1B0
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x3C
+ mov r8, r0
+ ldr r0, [sp, 0x5C]
+ lsls r1, 16
+ lsrs r1, 16
+ str r1, [sp, 0x8]
+ lsls r2, 24
+ lsrs r2, 24
+ str r2, [sp, 0xC]
+ lsls r3, 24
+ lsrs r3, 24
+ str r3, [sp, 0x10]
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x14]
+ movs r0, 0x1
+ str r0, [sp, 0x1C]
+ movs r1, 0x6
+ str r1, [sp, 0x24]
+ movs r2, 0
+ str r2, [sp, 0x2C]
+ movs r3, 0x4
+ str r3, [sp, 0x34]
+ mov r0, r8
+ movs r1, 0xC
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0xAF
+ bne _0803E240
+ ldr r0, _0803E21C
+ ldr r4, _0803E220
+ adds r0, r4
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E22C
+ ldr r2, _0803E224
+ ldr r0, _0803E228
+ ldrb r1, [r0]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ adds r0, r2
+ ldrb r0, [r0, 0x7]
+ b _0803E248
+ .align 2, 0
+_0803E21C: .4byte 0x03001770
+_0803E220: .4byte 0x0000043d
+_0803E224: .4byte 0x02024df0
+_0803E228: .4byte 0x02024e6c
+_0803E22C:
+ ldr r0, _0803E238
+ ldr r5, _0803E23C
+ adds r0, r5
+ ldrb r0, [r0]
+ b _0803E248
+ .align 2, 0
+_0803E238: .4byte 0x02025734
+_0803E23C: .4byte 0x00003688
+_0803E240:
+ bl itemid_get_x12
+ lsls r0, 24
+ lsrs r0, 24
+_0803E248:
+ str r0, [sp, 0x30]
+ ldr r1, _0803E2A4
+ ldr r0, _0803E2A8
+ ldrb r2, [r0]
+ strb r2, [r1]
+ ldr r0, _0803E2AC
+ ldr r1, _0803E2B0
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ lsls r0, 24
+ lsrs r1, r0, 24
+ cmp r1, 0
+ beq _0803E2E8
+ ldr r0, _0803E2B4
+ strb r2, [r0]
+ ldrb r0, [r0]
+ bl battle_side_get_owner
+ lsls r0, 24
+ lsrs r0, 24
+ negs r1, r0
+ orrs r1, r0
+ lsrs r1, 31
+ str r1, [sp, 0x18]
+ ldr r0, _0803E2B8
+ ldr r4, [sp, 0x8]
+ subs r4, 0xD
+ ldrb r0, [r0]
+ cmp r1, r0
+ bge _0803E2F4
+ ldr r2, _0803E2BC
+ lsls r0, r1, 1
+ adds r0, r2
+ ldrh r3, [r0]
+ ldr r5, [sp, 0xC]
+ lsls r0, r5, 16
+ lsrs r1, r0, 16
+ adds r5, r0, 0
+ cmp r3, r1
+ bne _0803E2C0
+ ldr r0, [sp, 0x18]
+ str r0, [sp, 0x34]
+ b _0803E2F4
+ .align 2, 0
+_0803E2A4: .4byte 0x02024c0b
+_0803E2A8: .4byte 0x02024e6c
+_0803E2AC: .4byte 0x03001770
+_0803E2B0: .4byte 0x0000043d
+_0803E2B4: .4byte 0x02024a60
+_0803E2B8: .4byte 0x02024a68
+_0803E2BC: .4byte 0x02024a6a
+_0803E2C0:
+ ldr r1, [sp, 0x18]
+ adds r1, 0x2
+ str r1, [sp, 0x18]
+ ldr r0, _0803E2E4
+ ldrb r0, [r0]
+ cmp r1, r0
+ bge _0803E2F4
+ lsls r0, r1, 1
+ adds r0, r2
+ ldrh r1, [r0]
+ lsrs r0, r5, 16
+ cmp r1, r0
+ bne _0803E2C0
+ ldr r2, [sp, 0x18]
+ lsls r0, r2, 24
+ lsrs r0, 24
+ str r0, [sp, 0x34]
+ b _0803E2F4
+ .align 2, 0
+_0803E2E4: .4byte 0x02024a68
+_0803E2E8:
+ ldr r0, _0803E310
+ strb r1, [r0]
+ movs r3, 0x4
+ str r3, [sp, 0x34]
+ ldr r4, [sp, 0x8]
+ subs r4, 0xD
+_0803E2F4:
+ lsls r0, r4, 16
+ lsrs r0, 16
+ cmp r0, 0xA5
+ bhi _0803E36C
+ ldr r1, _0803E314
+ lsls r0, r4, 2
+ adds r0, r1
+ ldr r0, [r0]
+ cmp r0, 0
+ bne _0803E318
+ ldr r4, [sp, 0x8]
+ cmp r4, 0xAF
+ beq _0803E31E
+ b _0803E36C
+ .align 2, 0
+_0803E310: .4byte 0x02024a60
+_0803E314: .4byte gItemEffectTable
+_0803E318:
+ ldr r5, [sp, 0x8]
+ cmp r5, 0xAF
+ bne _0803E372
+_0803E31E:
+ ldr r0, _0803E340
+ ldr r1, _0803E344
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E350
+ ldr r0, _0803E348
+ ldrb r1, [r0]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ ldr r1, _0803E34C
+ adds r0, r1
+ b _0803E372
+ .align 2, 0
+_0803E340: .4byte 0x03001770
+_0803E344: .4byte 0x0000043d
+_0803E348: .4byte 0x02024a60
+_0803E34C: .4byte 0x02024df8
+_0803E350:
+ ldr r2, _0803E358
+ str r2, [sp, 0x20]
+ b _0803E374
+ .align 2, 0
+_0803E358: .4byte 0x02028daa
+_0803E35C:
+ mov r0, r8
+ movs r2, 0
+ ldr r3, [sp, 0xC]
+ bl sub_8111924
+ movs r0, 0
+ bl _0803F15C
+_0803E36C:
+ movs r0, 0x1
+ bl _0803F15C
+_0803E372:
+ str r0, [sp, 0x20]
+_0803E374:
+ movs r3, 0
+ str r3, [sp, 0x18]
+_0803E378:
+ ldr r4, [sp, 0x18]
+ cmp r4, 0x5
+ bls _0803E382
+ bl _0803F14C
+_0803E382:
+ lsls r0, r4, 2
+ ldr r1, _0803E38C
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803E38C: .4byte _0803E390
+ .align 2, 0
+_0803E390:
+ .4byte _0803E3A8
+ .4byte _0803E474
+ .4byte _0803E508
+ .4byte _0803E59C
+ .4byte _0803E77C
+ .4byte _0803EE1E
+_0803E3A8:
+ ldr r5, [sp, 0x20]
+ ldr r0, [sp, 0x18]
+ adds r2, r5, r0
+ ldrb r1, [r2]
+ movs r0, 0x80
+ ands r0, r1
+ adds r6, r2, 0
+ cmp r0, 0
+ beq _0803E3F0
+ ldr r0, _0803E460
+ ldr r1, _0803E464
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E3F0
+ ldr r2, [sp, 0x34]
+ cmp r2, 0x4
+ beq _0803E3F0
+ ldr r1, _0803E468
+ movs r0, 0x58
+ muls r0, r2
+ adds r1, 0x50
+ adds r2, r0, r1
+ ldr r1, [r2]
+ movs r0, 0xF0
+ lsls r0, 12
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E3F0
+ ldr r0, _0803E46C
+ ands r1, r0
+ str r1, [r2]
+ movs r3, 0
+ str r3, [sp, 0x1C]
+_0803E3F0:
+ ldrb r1, [r6]
+ movs r0, 0x30
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E41E
+ ldr r1, _0803E468
+ ldr r0, _0803E470
+ ldrb r2, [r0]
+ movs r0, 0x58
+ muls r0, r2
+ adds r1, 0x50
+ adds r2, r0, r1
+ ldr r1, [r2]
+ movs r3, 0x80
+ lsls r3, 13
+ adds r0, r1, 0
+ ands r0, r3
+ cmp r0, 0
+ bne _0803E41E
+ orrs r1, r3
+ str r1, [r2]
+ movs r4, 0
+ str r4, [sp, 0x1C]
+_0803E41E:
+ ldrb r0, [r6]
+ movs r3, 0xF
+ ands r3, r0
+ cmp r3, 0
+ bne _0803E42C
+ bl _0803F14C
+_0803E42C:
+ ldr r6, _0803E468
+ ldr r5, _0803E470
+ ldrb r0, [r5]
+ movs r4, 0x58
+ muls r0, r4
+ adds r1, r0, r6
+ ldrb r2, [r1, 0x19]
+ movs r0, 0x19
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xB
+ ble _0803E446
+ bl _0803F14C
+_0803E446:
+ adds r0, r2, r3
+ strb r0, [r1, 0x19]
+ ldrb r0, [r5]
+ muls r0, r4
+ adds r1, r0, r6
+ movs r0, 0x19
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xC
+ bgt _0803E45A
+ b _0803E74E
+_0803E45A:
+ movs r0, 0xC
+ strb r0, [r1, 0x19]
+ b _0803E74E
+ .align 2, 0
+_0803E460: .4byte 0x03001770
+_0803E464: .4byte 0x0000043d
+_0803E468: .4byte 0x02024a80
+_0803E46C: .4byte 0xfff0ffff
+_0803E470: .4byte 0x02024a60
+_0803E474:
+ ldr r0, [sp, 0x20]
+ ldr r1, [sp, 0x18]
+ adds r2, r0, r1
+ ldrb r1, [r2]
+ movs r0, 0xF0
+ ands r0, r1
+ lsls r3, r0, 24
+ adds r6, r2, 0
+ cmp r3, 0
+ beq _0803E4BA
+ ldr r7, _0803E500
+ ldr r5, _0803E504
+ ldrb r0, [r5]
+ movs r4, 0x58
+ muls r0, r4
+ adds r1, r0, r7
+ ldrb r2, [r1, 0x1A]
+ movs r0, 0x1A
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xB
+ bgt _0803E4BA
+ lsrs r0, r3, 28
+ adds r0, r2, r0
+ strb r0, [r1, 0x1A]
+ ldrb r0, [r5]
+ muls r0, r4
+ adds r1, r0, r7
+ movs r0, 0x1A
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xC
+ ble _0803E4B6
+ movs r0, 0xC
+ strb r0, [r1, 0x1A]
+_0803E4B6:
+ movs r2, 0
+ str r2, [sp, 0x1C]
+_0803E4BA:
+ ldrb r0, [r6]
+ movs r3, 0xF
+ ands r3, r0
+ cmp r3, 0
+ bne _0803E4C8
+ bl _0803F14C
+_0803E4C8:
+ ldr r6, _0803E500
+ ldr r5, _0803E504
+ ldrb r0, [r5]
+ movs r4, 0x58
+ muls r0, r4
+ adds r1, r0, r6
+ ldrb r2, [r1, 0x1B]
+ movs r0, 0x1B
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xB
+ ble _0803E4E2
+ bl _0803F14C
+_0803E4E2:
+ adds r0, r2, r3
+ strb r0, [r1, 0x1B]
+ ldrb r0, [r5]
+ muls r0, r4
+ adds r1, r0, r6
+ movs r0, 0x1B
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xC
+ ble _0803E4F8
+ movs r0, 0xC
+ strb r0, [r1, 0x1B]
+_0803E4F8:
+ movs r3, 0
+ str r3, [sp, 0x1C]
+ bl _0803F14C
+ .align 2, 0
+_0803E500: .4byte 0x02024a80
+_0803E504: .4byte 0x02024a60
+_0803E508:
+ ldr r4, [sp, 0x20]
+ ldr r5, [sp, 0x18]
+ adds r2, r4, r5
+ ldrb r1, [r2]
+ movs r0, 0xF0
+ ands r0, r1
+ lsls r3, r0, 24
+ adds r6, r2, 0
+ cmp r3, 0
+ beq _0803E54E
+ ldr r7, _0803E594
+ ldr r5, _0803E598
+ ldrb r0, [r5]
+ movs r4, 0x58
+ muls r0, r4
+ adds r1, r0, r7
+ ldrb r2, [r1, 0x1E]
+ movs r0, 0x1E
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xB
+ bgt _0803E54E
+ lsrs r0, r3, 28
+ adds r0, r2, r0
+ strb r0, [r1, 0x1E]
+ ldrb r0, [r5]
+ muls r0, r4
+ adds r1, r0, r7
+ movs r0, 0x1E
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xC
+ ble _0803E54A
+ movs r0, 0xC
+ strb r0, [r1, 0x1E]
+_0803E54A:
+ movs r0, 0
+ str r0, [sp, 0x1C]
+_0803E54E:
+ ldrb r0, [r6]
+ movs r3, 0xF
+ ands r3, r0
+ cmp r3, 0
+ bne _0803E55C
+ bl _0803F14C
+_0803E55C:
+ ldr r6, _0803E594
+ ldr r5, _0803E598
+ ldrb r0, [r5]
+ movs r4, 0x58
+ muls r0, r4
+ adds r1, r0, r6
+ ldrb r2, [r1, 0x1C]
+ movs r0, 0x1C
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xB
+ ble _0803E576
+ bl _0803F14C
+_0803E576:
+ adds r0, r2, r3
+ strb r0, [r1, 0x1C]
+ ldrb r0, [r5]
+ muls r0, r4
+ adds r1, r0, r6
+ movs r0, 0x1C
+ ldrsb r0, [r1, r0]
+ cmp r0, 0xC
+ ble _0803E58C
+ movs r0, 0xC
+ strb r0, [r1, 0x1C]
+_0803E58C:
+ movs r1, 0
+ str r1, [sp, 0x1C]
+ bl _0803F14C
+ .align 2, 0
+_0803E594: .4byte 0x02024a80
+_0803E598: .4byte 0x02024a60
+_0803E59C:
+ ldr r3, [sp, 0x20]
+ ldr r4, [sp, 0x18]
+ adds r2, r3, r4
+ ldrb r1, [r2]
+ movs r0, 0x80
+ ands r0, r1
+ adds r6, r2, 0
+ cmp r0, 0
+ beq _0803E5E4
+ ldr r5, _0803E758
+ ldr r4, _0803E75C
+ ldrb r0, [r4]
+ bl battle_side_get_owner
+ lsls r0, 24
+ lsrs r0, 24
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r5
+ ldrb r0, [r1, 0x2]
+ cmp r0, 0
+ bne _0803E5E4
+ ldrb r0, [r4]
+ bl battle_side_get_owner
+ lsls r0, 24
+ lsrs r0, 24
+ lsls r1, r0, 1
+ adds r1, r0
+ lsls r1, 2
+ adds r1, r5
+ movs r0, 0x5
+ strb r0, [r1, 0x2]
+ movs r5, 0
+ str r5, [sp, 0x1C]
+_0803E5E4:
+ ldrb r1, [r6]
+ movs r0, 0x40
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E646
+ mov r0, r8
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0x64
+ beq _0803E646
+ ldr r5, _0803E760
+ mov r0, r8
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ adds r4, 0x1
+ lsls r4, 2
+ ldr r2, _0803E764
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r1, 2
+ adds r1, r2
+ ldrb r1, [r1, 0x13]
+ movs r0, 0xCA
+ lsls r0, 1
+ muls r0, r1
+ adds r4, r0
+ adds r4, r5
+ ldr r0, [r4]
+ str r0, [sp]
+ mov r0, r8
+ movs r1, 0x19
+ mov r2, sp
+ bl SetMonData
+ mov r0, r8
+ bl CalculateMonStats
+ movs r0, 0
+ str r0, [sp, 0x1C]
+_0803E646:
+ ldrb r1, [r6]
+ movs r0, 0x20
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E682
+ mov r0, r8
+ ldr r1, [sp, 0xC]
+ movs r2, 0x7
+ ldr r3, [sp, 0x34]
+ bl HealStatusConditions
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803E682
+ ldr r1, [sp, 0x34]
+ cmp r1, 0x4
+ beq _0803E67E
+ ldr r1, _0803E768
+ movs r0, 0x58
+ ldr r3, [sp, 0x34]
+ adds r2, r3, 0
+ muls r2, r0
+ adds r1, 0x50
+ adds r2, r1
+ ldr r0, [r2]
+ ldr r1, _0803E76C
+ ands r0, r1
+ str r0, [r2]
+_0803E67E:
+ movs r4, 0
+ str r4, [sp, 0x1C]
+_0803E682:
+ ldrb r1, [r6]
+ movs r0, 0x10
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E6A2
+ ldr r2, _0803E770
+ mov r0, r8
+ ldr r1, [sp, 0xC]
+ ldr r3, [sp, 0x34]
+ bl HealStatusConditions
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803E6A2
+ movs r5, 0
+ str r5, [sp, 0x1C]
+_0803E6A2:
+ ldrb r1, [r6]
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E6C2
+ mov r0, r8
+ ldr r1, [sp, 0xC]
+ movs r2, 0x10
+ ldr r3, [sp, 0x34]
+ bl HealStatusConditions
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803E6C2
+ movs r0, 0
+ str r0, [sp, 0x1C]
+_0803E6C2:
+ ldrb r1, [r6]
+ movs r0, 0x4
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E6E2
+ mov r0, r8
+ ldr r1, [sp, 0xC]
+ movs r2, 0x20
+ ldr r3, [sp, 0x34]
+ bl HealStatusConditions
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803E6E2
+ movs r1, 0
+ str r1, [sp, 0x1C]
+_0803E6E2:
+ ldrb r1, [r6]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803E702
+ mov r0, r8
+ ldr r1, [sp, 0xC]
+ movs r2, 0x40
+ ldr r3, [sp, 0x34]
+ bl HealStatusConditions
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803E702
+ movs r2, 0
+ str r2, [sp, 0x1C]
+_0803E702:
+ ldrb r1, [r6]
+ movs r0, 0x1
+ ands r0, r1
+ cmp r0, 0
+ bne _0803E710
+ bl _0803F14C
+_0803E710:
+ ldr r0, _0803E774
+ ldr r3, _0803E778
+ adds r0, r3
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ bne _0803E724
+ bl _0803F14C
+_0803E724:
+ ldr r4, [sp, 0x34]
+ cmp r4, 0x4
+ bne _0803E72E
+ bl _0803F14C
+_0803E72E:
+ ldr r1, _0803E768
+ movs r0, 0x58
+ muls r0, r4
+ adds r1, 0x50
+ adds r2, r0, r1
+ ldr r1, [r2]
+ movs r0, 0x7
+ ands r0, r1
+ cmp r0, 0
+ bne _0803E746
+ bl _0803F14C
+_0803E746:
+ movs r0, 0x8
+ negs r0, r0
+ ands r1, r0
+ str r1, [r2]
+_0803E74E:
+ movs r5, 0
+ str r5, [sp, 0x1C]
+ bl _0803F14C
+ .align 2, 0
+_0803E758: .4byte 0x02024c80
+_0803E75C: .4byte 0x02024a60
+_0803E760: .4byte gExperienceTables
+_0803E764: .4byte gBaseStats
+_0803E768: .4byte 0x02024a80
+_0803E76C: .4byte 0xf7ffffff
+_0803E770: .4byte 0x00000f88
+_0803E774: .4byte 0x03001770
+_0803E778: .4byte 0x0000043d
+_0803E77C:
+ ldr r1, [sp, 0x20]
+ ldr r2, [sp, 0x18]
+ adds r0, r1, r2
+ ldrb r0, [r0]
+ mov r10, r0
+ movs r0, 0x20
+ mov r3, r10
+ ands r0, r3
+ cmp r0, 0
+ beq _0803E854
+ movs r0, 0xDF
+ ands r3, r0
+ mov r10, r3
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ ldr r1, _0803E880
+ ldr r4, [sp, 0x10]
+ adds r1, r4, r1
+ ldrb r1, [r1]
+ ands r0, r1
+ lsls r1, r4, 1
+ lsrs r0, r1
+ str r0, [sp]
+ adds r5, r4, 0
+ adds r5, 0xD
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x28]
+ ldr r0, [sp]
+ cmp r0, 0x2
+ bhi _0803E854
+ ldr r0, [sp, 0x28]
+ cmp r0, 0x4
+ bls _0803E854
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ ldr r1, _0803E884
+ ldr r2, [sp, 0x10]
+ adds r1, r2, r1
+ ldrb r1, [r1]
+ adds r0, r1
+ str r0, [sp]
+ mov r0, r8
+ movs r1, 0x15
+ mov r2, sp
+ bl SetMonData
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r1, [sp]
+ lsls r1, 24
+ lsrs r1, 24
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r3, [sp, 0x28]
+ subs r0, r3
+ str r0, [sp]
+ ldr r4, [sp, 0x10]
+ adds r4, 0x11
+ mov r0, r8
+ adds r1, r4, 0
+ movs r2, 0
+ bl GetMonData
+ ldr r1, [sp]
+ adds r0, r1
+ str r0, [sp]
+ mov r0, r8
+ adds r1, r4, 0
+ mov r2, sp
+ bl SetMonData
+ movs r4, 0
+ str r4, [sp, 0x1C]
+_0803E854:
+ movs r5, 0
+ str r5, [sp, 0x28]
+ mov r0, r10
+ cmp r0, 0
+ bne _0803E862
+ bl _0803F14C
+_0803E862:
+ movs r0, 0x1
+ mov r1, r10
+ ands r0, r1
+ cmp r0, 0
+ bne _0803E86E
+ b _0803EE0A
+_0803E86E:
+ ldr r2, [sp, 0x28]
+ cmp r2, 0x7
+ bls _0803E876
+ b _0803EE0A
+_0803E876:
+ lsls r0, r2, 2
+ ldr r1, _0803E888
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803E880: .4byte gUnknown_08208238
+_0803E884: .4byte gUnknown_08208240
+_0803E888: .4byte _0803E88C
+ .align 2, 0
+_0803E88C:
+ .4byte _0803E8AC
+ .4byte _0803E8AC
+ .4byte _0803E934
+ .4byte _0803EB5C
+ .4byte _0803EE0A
+ .4byte _0803EE0A
+ .4byte _0803EE0A
+ .4byte _0803EDF4
+_0803E8AC:
+ mov r0, r8
+ bl sub_8040020
+ lsls r0, 16
+ lsrs r5, r0, 16
+ ldr r0, _0803E8EC
+ cmp r5, r0
+ bls _0803E8BE
+ b _0803E36C
+_0803E8BE:
+ ldr r0, _0803E8F0
+ ldr r3, [sp, 0x28]
+ adds r0, r3, r0
+ ldrb r1, [r0]
+ mov r0, r8
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ str r1, [sp]
+ cmp r1, 0x63
+ bls _0803E8D8
+ b _0803EE0A
+_0803E8D8:
+ ldr r4, [sp, 0x20]
+ ldr r2, [sp, 0x24]
+ adds r0, r4, r2
+ ldrb r0, [r0]
+ adds r1, r0
+ cmp r1, 0x64
+ bls _0803E8F4
+ adds r0, 0x64
+ subs r4, r0, r1
+ b _0803E8F6
+ .align 2, 0
+_0803E8EC: .4byte 0x000001fd
+_0803E8F0: .4byte gUnknown_082082F2
+_0803E8F4:
+ adds r4, r0, 0
+_0803E8F6:
+ adds r1, r5, r4
+ movs r0, 0xFF
+ lsls r0, 1
+ cmp r1, r0
+ bls _0803E904
+ adds r0, r4, r0
+ subs r4, r0, r1
+_0803E904:
+ ldr r0, [sp]
+ adds r0, r4
+ str r0, [sp]
+ ldr r0, _0803E930
+ ldr r3, [sp, 0x28]
+ adds r0, r3, r0
+ ldrb r1, [r0]
+ mov r0, r8
+ mov r2, sp
+ bl SetMonData
+ mov r0, r8
+ bl CalculateMonStats
+ ldr r0, [sp, 0x24]
+ adds r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x24]
+ movs r4, 0
+ str r4, [sp, 0x1C]
+ b _0803EE0A
+ .align 2, 0
+_0803E930: .4byte gUnknown_082082F2
+_0803E934:
+ movs r0, 0x10
+ mov r5, r10
+ ands r0, r5
+ cmp r0, 0
+ beq _0803E9F4
+ mov r0, r8
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _0803E954
+ ldr r0, [sp, 0x24]
+ adds r0, 0x1
+ lsls r0, 24
+ b _0803EC9E
+_0803E954:
+ ldr r0, _0803E99C
+ ldr r1, _0803E9A0
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r4, 0x2
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803EA0A
+ ldr r2, [sp, 0x34]
+ cmp r2, 0x4
+ beq _0803E9B4
+ ldr r2, _0803E9A4
+ ldr r1, _0803E9A8
+ ldr r3, [sp, 0x34]
+ lsls r0, r3, 2
+ adds r0, r1
+ ldr r1, [r0]
+ ldrb r0, [r2]
+ bics r0, r1
+ strb r0, [r2]
+ ldr r1, _0803E9AC
+ lsls r0, r3, 1
+ adds r0, r1
+ ldrb r0, [r0]
+ bl pokemon_order_func
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ ldr r0, [sp, 0x34]
+ bl battle_data_fill
+ ldr r0, _0803E9B0
+ ldrb r0, [r0]
+ b _0803E9CC
+ .align 2, 0
+_0803E99C: .4byte 0x03001770
+_0803E9A0: .4byte 0x0000043d
+_0803E9A4: .4byte 0x02024c0c
+_0803E9A8: .4byte gBitTable
+_0803E9AC: .4byte 0x02024a6a
+_0803E9B0: .4byte 0x02024a60
+_0803E9B4:
+ ldr r3, _0803E9E4
+ ldr r1, _0803E9E8
+ ldr r2, _0803E9EC
+ ldrb r0, [r2]
+ eors r0, r4
+ lsls r0, 2
+ adds r0, r1
+ ldr r1, [r0]
+ ldrb r0, [r3]
+ bics r0, r1
+ strb r0, [r3]
+ ldrb r0, [r2]
+_0803E9CC:
+ bl battle_side_get_owner
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803EA0A
+ ldr r1, _0803E9F0
+ ldrb r0, [r1, 0x4]
+ cmp r0, 0xFE
+ bhi _0803EA0A
+ adds r0, 0x1
+ strb r0, [r1, 0x4]
+ b _0803EA0A
+ .align 2, 0
+_0803E9E4: .4byte 0x02024c0c
+_0803E9E8: .4byte gBitTable
+_0803E9EC: .4byte 0x02024a60
+_0803E9F0: .4byte 0x030042e0
+_0803E9F4:
+ mov r0, r8
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0803EA0A
+ ldr r0, [sp, 0x24]
+ adds r0, 0x1
+ lsls r0, 24
+ b _0803EC9E
+_0803EA0A:
+ ldr r1, [sp, 0x24]
+ adds r0, r1, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x24]
+ ldr r4, [sp, 0x20]
+ adds r1, r4, r1
+ ldrb r1, [r1]
+ str r1, [sp]
+ adds r0, r1, 0
+ cmp r0, 0xFE
+ beq _0803EA4C
+ cmp r0, 0xFE
+ bhi _0803EA2C
+ cmp r0, 0xFD
+ beq _0803EA62
+ b _0803EA6C
+_0803EA2C:
+ cmp r1, 0xFF
+ bne _0803EA6C
+ mov r0, r8
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ subs r4, r0
+ str r4, [sp]
+ b _0803EA6C
+_0803EA4C:
+ mov r0, r8
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ lsrs r0, 1
+ str r0, [sp]
+ cmp r0, 0
+ bne _0803EA6C
+ movs r0, 0x1
+ b _0803EA6A
+_0803EA62:
+ ldr r0, _0803EB24
+ ldr r5, _0803EB28
+ adds r0, r5
+ ldrb r0, [r0]
+_0803EA6A:
+ str r0, [sp]
+_0803EA6C:
+ mov r0, r8
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ cmp r4, r0
+ beq _0803EB4C
+ ldr r0, [sp, 0x14]
+ cmp r0, 0
+ bne _0803EB40
+ mov r0, r8
+ movs r1, 0x39
+ movs r2, 0
+ bl GetMonData
+ ldr r1, [sp]
+ adds r0, r1
+ str r0, [sp]
+ mov r0, r8
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ ldr r1, [sp]
+ cmp r1, r0
+ bls _0803EAB8
+ mov r0, r8
+ movs r1, 0x3A
+ movs r2, 0
+ bl GetMonData
+ str r0, [sp]
+_0803EAB8:
+ mov r0, r8
+ movs r1, 0x39
+ mov r2, sp
+ bl SetMonData
+ ldr r0, _0803EB2C
+ ldr r1, _0803EB30
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803EB48
+ ldr r2, [sp, 0x34]
+ cmp r2, 0x4
+ beq _0803EB48
+ ldr r1, _0803EB34
+ movs r0, 0x58
+ muls r0, r2
+ adds r0, r1
+ ldr r1, [sp]
+ strh r1, [r0, 0x28]
+ movs r0, 0x10
+ mov r3, r10
+ ands r0, r3
+ cmp r0, 0
+ bne _0803EB48
+ ldr r4, _0803EB38
+ ldrb r0, [r4]
+ bl battle_side_get_owner
+ lsls r0, 24
+ cmp r0, 0
+ bne _0803EB48
+ ldr r1, _0803EB3C
+ ldrb r0, [r1, 0x3]
+ cmp r0, 0xFE
+ bhi _0803EB08
+ adds r0, 0x1
+ strb r0, [r1, 0x3]
+_0803EB08:
+ ldrb r5, [r4]
+ add r0, sp, 0x34
+ ldrb r0, [r0]
+ strb r0, [r4]
+ movs r0, 0
+ movs r1, 0
+ movs r2, 0
+ bl dp01_build_cmdbuf_x00_a_b_0
+ ldrb r0, [r4]
+ bl dp01_battle_side_mark_buffer_for_execution
+ strb r5, [r4]
+ b _0803EB48
+ .align 2, 0
+_0803EB24: .4byte 0x02000000
+_0803EB28: .4byte 0x000160fa
+_0803EB2C: .4byte 0x03001770
+_0803EB30: .4byte 0x0000043d
+_0803EB34: .4byte 0x02024a80
+_0803EB38: .4byte 0x02024a60
+_0803EB3C: .4byte 0x030042e0
+_0803EB40:
+ ldr r1, _0803EB58
+ ldr r0, [sp]
+ negs r0, r0
+ str r0, [r1]
+_0803EB48:
+ movs r1, 0
+ str r1, [sp, 0x1C]
+_0803EB4C:
+ movs r0, 0xEF
+ mov r2, r10
+ ands r2, r0
+ mov r10, r2
+ b _0803EE0A
+ .align 2, 0
+_0803EB58: .4byte 0x02024bec
+_0803EB5C:
+ movs r7, 0x2
+ mov r0, r10
+ ands r0, r7
+ cmp r0, 0
+ beq _0803EB68
+ b _0803ECB8
+_0803EB68:
+ movs r5, 0
+ ldr r3, [sp, 0x24]
+ adds r3, 0x1
+ str r3, [sp, 0x38]
+_0803EB70:
+ movs r4, 0x11
+ adds r4, r5
+ mov r9, r4
+ mov r0, r8
+ mov r1, r9
+ movs r2, 0
+ bl GetMonData
+ str r0, [sp]
+ adds r7, r5, 0
+ adds r7, 0xD
+ mov r0, r8
+ adds r1, r7, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ lsls r0, r5, 24
+ lsrs r6, r0, 24
+ adds r0, r4, 0
+ adds r2, r6, 0
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r1, [sp]
+ cmp r1, r0
+ beq _0803EC92
+ ldr r2, [sp, 0x20]
+ ldr r3, [sp, 0x24]
+ adds r0, r2, r3
+ ldrb r0, [r0]
+ adds r0, r1, r0
+ str r0, [sp]
+ mov r0, r8
+ adds r1, r7, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ adds r2, r6, 0
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r1, [sp]
+ cmp r1, r0
+ bls _0803EC28
+ mov r0, r8
+ adds r1, r7, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ adds r2, r6, 0
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp]
+_0803EC28:
+ mov r0, r8
+ mov r1, r9
+ mov r2, sp
+ bl SetMonData
+ ldr r0, _0803ECA4
+ ldr r4, _0803ECA8
+ adds r0, r4
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803EC8E
+ ldr r0, [sp, 0x34]
+ cmp r0, 0x4
+ beq _0803EC8E
+ ldr r4, _0803ECAC
+ movs r0, 0x58
+ ldr r1, [sp, 0x34]
+ adds r3, r1, 0
+ muls r3, r0
+ adds r0, r4, 0
+ adds r0, 0x50
+ adds r0, r3, r0
+ ldr r1, [r0]
+ movs r0, 0x80
+ lsls r0, 14
+ ands r1, r0
+ cmp r1, 0
+ bne _0803EC8E
+ ldr r1, _0803ECB0
+ ldr r2, [sp, 0x34]
+ lsls r0, r2, 3
+ subs r0, r2
+ lsls r0, 2
+ adds r0, r1
+ ldrb r1, [r0, 0x18]
+ lsrs r1, 4
+ ldr r2, _0803ECB4
+ lsls r0, r5, 2
+ adds r0, r2
+ ldr r0, [r0]
+ ands r1, r0
+ cmp r1, 0
+ bne _0803EC8E
+ adds r0, r5, r3
+ adds r1, r4, 0
+ adds r1, 0x24
+ adds r0, r1
+ ldr r1, [sp]
+ strb r1, [r0]
+_0803EC8E:
+ movs r3, 0
+ str r3, [sp, 0x1C]
+_0803EC92:
+ adds r5, 0x1
+ cmp r5, 0x3
+ bgt _0803EC9A
+ b _0803EB70
+_0803EC9A:
+ ldr r4, [sp, 0x38]
+ lsls r0, r4, 24
+_0803EC9E:
+ lsrs r0, 24
+ str r0, [sp, 0x24]
+ b _0803EE0A
+ .align 2, 0
+_0803ECA4: .4byte 0x03001770
+_0803ECA8: .4byte 0x0000043d
+_0803ECAC: .4byte 0x02024a80
+_0803ECB0: .4byte 0x02024ca8
+_0803ECB4: .4byte gBitTable
+_0803ECB8:
+ ldr r6, [sp, 0x10]
+ adds r6, 0x11
+ mov r0, r8
+ adds r1, r6, 0
+ movs r2, 0
+ bl GetMonData
+ str r0, [sp]
+ ldr r5, [sp, 0x10]
+ adds r5, 0xD
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r2, [sp]
+ cmp r2, r0
+ bne _0803ED00
+ b _0803EE0A
+_0803ED00:
+ ldr r1, [sp, 0x24]
+ adds r0, r1, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x24]
+ ldr r0, [sp, 0x20]
+ adds r1, r0, r1
+ ldrb r0, [r1]
+ adds r0, r2, r0
+ str r0, [sp]
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r1, [sp]
+ cmp r1, r0
+ bls _0803ED74
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp]
+_0803ED74:
+ mov r0, r8
+ adds r1, r6, 0
+ mov r2, sp
+ bl SetMonData
+ ldr r0, _0803EDE0
+ ldr r1, _0803EDE4
+ adds r0, r1
+ ldrb r1, [r0]
+ adds r0, r7, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803EDD8
+ ldr r2, [sp, 0x34]
+ cmp r2, 0x4
+ beq _0803EDD8
+ ldr r4, _0803EDE8
+ movs r0, 0x58
+ adds r3, r2, 0
+ muls r3, r0
+ adds r0, r4, 0
+ adds r0, 0x50
+ adds r0, r3, r0
+ ldr r0, [r0]
+ movs r1, 0x80
+ lsls r1, 14
+ ands r0, r1
+ cmp r0, 0
+ bne _0803EDD8
+ ldr r1, _0803EDEC
+ lsls r0, r2, 3
+ subs r0, r2
+ lsls r0, 2
+ adds r0, r1
+ ldrb r1, [r0, 0x18]
+ lsrs r1, 4
+ ldr r2, _0803EDF0
+ ldr r5, [sp, 0x10]
+ lsls r0, r5, 2
+ adds r0, r2
+ ldr r0, [r0]
+ ands r1, r0
+ cmp r1, 0
+ bne _0803EDD8
+ adds r0, r5, r3
+ adds r1, r4, 0
+ adds r1, 0x24
+ adds r0, r1
+ ldr r1, [sp]
+ strb r1, [r0]
+_0803EDD8:
+ movs r0, 0
+ str r0, [sp, 0x1C]
+ b _0803EE0A
+ .align 2, 0
+_0803EDE0: .4byte 0x03001770
+_0803EDE4: .4byte 0x0000043d
+_0803EDE8: .4byte 0x02024a80
+_0803EDEC: .4byte 0x02024ca8
+_0803EDF0: .4byte gBitTable
+_0803EDF4:
+ mov r0, r8
+ movs r1, 0x2
+ ldr r2, [sp, 0x8]
+ bl GetEvolutionTargetSpecies
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0
+ beq _0803EE0A
+ bl _0803E35C
+_0803EE0A:
+ ldr r1, [sp, 0x28]
+ adds r1, 0x1
+ str r1, [sp, 0x28]
+ mov r2, r10
+ lsrs r2, 1
+ mov r10, r2
+ cmp r2, 0
+ beq _0803EE1C
+ b _0803E862
+_0803EE1C:
+ b _0803F14C
+_0803EE1E:
+ ldr r3, [sp, 0x20]
+ ldr r4, [sp, 0x18]
+ adds r0, r3, r4
+ ldrb r0, [r0]
+ mov r10, r0
+ movs r5, 0
+ str r5, [sp, 0x28]
+ cmp r0, 0
+ bne _0803EE32
+ b _0803F14C
+_0803EE32:
+ movs r0, 0x1
+ mov r1, r10
+ ands r0, r1
+ cmp r0, 0
+ bne _0803EE3E
+ b _0803F13A
+_0803EE3E:
+ ldr r2, [sp, 0x28]
+ cmp r2, 0x7
+ bls _0803EE46
+ b _0803F13A
+_0803EE46:
+ lsls r0, r2, 2
+ ldr r1, _0803EE50
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803EE50: .4byte _0803EE54
+ .align 2, 0
+_0803EE54:
+ .4byte _0803EE74
+ .4byte _0803EE74
+ .4byte _0803EE74
+ .4byte _0803EE74
+ .4byte _0803EEF8
+ .4byte _0803EFCC
+ .4byte _0803F026
+ .4byte _0803F07C
+_0803EE74:
+ mov r0, r8
+ bl sub_8040020
+ lsls r0, 16
+ lsrs r5, r0, 16
+ ldr r0, _0803EEBC
+ cmp r5, r0
+ bls _0803EE88
+ bl _0803E36C
+_0803EE88:
+ ldr r0, _0803EEC0
+ ldr r4, [sp, 0x28]
+ adds r4, 0x2
+ adds r0, r4, r0
+ ldrb r1, [r0]
+ mov r0, r8
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ str r1, [sp]
+ adds r2, r4, 0
+ cmp r1, 0x63
+ bls _0803EEA6
+ b _0803F13A
+_0803EEA6:
+ ldr r3, [sp, 0x20]
+ ldr r4, [sp, 0x24]
+ adds r0, r3, r4
+ ldrb r0, [r0]
+ adds r1, r0
+ cmp r1, 0x64
+ bls _0803EEC4
+ adds r0, 0x64
+ subs r4, r0, r1
+ b _0803EEC6
+ .align 2, 0
+_0803EEBC: .4byte 0x000001fd
+_0803EEC0: .4byte gUnknown_082082F2
+_0803EEC4:
+ adds r4, r0, 0
+_0803EEC6:
+ adds r1, r5, r4
+ movs r0, 0xFF
+ lsls r0, 1
+ cmp r1, r0
+ bls _0803EED4
+ adds r0, r4, r0
+ subs r4, r0, r1
+_0803EED4:
+ ldr r0, [sp]
+ adds r0, r4
+ str r0, [sp]
+ ldr r0, _0803EEF4
+ adds r0, r2, r0
+ ldrb r1, [r0]
+ mov r0, r8
+ mov r2, sp
+ bl SetMonData
+ mov r0, r8
+ bl CalculateMonStats
+ movs r5, 0
+ str r5, [sp, 0x1C]
+ b _0803F130
+ .align 2, 0
+_0803EEF4: .4byte gUnknown_082082F2
+_0803EEF8:
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ ldr r1, _0803EFC0
+ ldr r2, [sp, 0x10]
+ adds r1, r2, r1
+ ldrb r1, [r1]
+ ands r0, r1
+ lsls r1, r2, 1
+ lsrs r0, r1
+ str r0, [sp]
+ cmp r0, 0x2
+ bls _0803EF18
+ b _0803F13A
+_0803EF18:
+ adds r5, r2, 0
+ adds r5, 0xD
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ adds r0, r4, 0
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r4, r0, 24
+ mov r0, r8
+ movs r1, 0x15
+ movs r2, 0
+ bl GetMonData
+ str r0, [sp]
+ ldr r1, _0803EFC4
+ ldr r3, [sp, 0x10]
+ adds r1, r3, r1
+ ldrb r2, [r1]
+ ands r2, r0
+ str r2, [sp]
+ ldr r0, _0803EFC8
+ adds r0, r3, r0
+ ldrb r1, [r0]
+ lsls r0, r1, 1
+ adds r0, r1
+ adds r2, r0
+ str r2, [sp]
+ mov r0, r8
+ movs r1, 0x15
+ mov r2, sp
+ bl SetMonData
+ mov r0, r8
+ adds r1, r5, 0
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r1, [sp]
+ lsls r1, 24
+ lsrs r1, 24
+ ldr r2, [sp, 0x10]
+ bl CalcPPWithPPUps
+ lsls r0, 24
+ lsrs r0, 24
+ subs r0, r4
+ str r0, [sp]
+ ldr r4, [sp, 0x10]
+ adds r4, 0x11
+ mov r0, r8
+ adds r1, r4, 0
+ movs r2, 0
+ bl GetMonData
+ ldr r1, [sp]
+ adds r0, r1
+ str r0, [sp]
+ mov r0, r8
+ adds r1, r4, 0
+ mov r2, sp
+ bl SetMonData
+ movs r4, 0
+ str r4, [sp, 0x1C]
+ b _0803F13A
+ .align 2, 0
+_0803EFC0: .4byte gUnknown_08208238
+_0803EFC4: .4byte gUnknown_0820823C
+_0803EFC8: .4byte gUnknown_08208240
+_0803EFCC:
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0x63
+ bls _0803EFDC
+ b _0803F130
+_0803EFDC:
+ ldr r5, [sp, 0x1C]
+ cmp r5, 0
+ beq _0803EFE4
+ b _0803F130
+_0803EFE4:
+ ldr r0, [sp, 0x2C]
+ cmp r0, 0
+ beq _0803EFEC
+ b _0803F130
+_0803EFEC:
+ ldr r1, [sp, 0x20]
+ ldr r2, [sp, 0x24]
+ adds r0, r1, r2
+ ldrb r0, [r0]
+ str r0, [sp, 0x2C]
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ adds r5, r0, 0
+ str r5, [sp, 0x4]
+ ldr r3, [sp, 0x2C]
+ lsls r4, r3, 24
+ asrs r1, r4, 24
+ cmp r1, 0
+ ble _0803F0D0
+ ldr r0, [sp, 0x30]
+ cmp r0, 0x1B
+ bne _0803F0D0
+ movs r0, 0x96
+ muls r0, r1
+ movs r1, 0x64
+ bl __divsi3
+ adds r0, r5, r0
+ str r0, [sp, 0x4]
+ adds r2, r4, 0
+ b _0803F0DC
+_0803F026:
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0x63
+ bls _0803F130
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0xC7
+ bhi _0803F130
+ ldr r2, [sp, 0x1C]
+ cmp r2, 0
+ bne _0803F130
+ ldr r3, [sp, 0x2C]
+ cmp r3, 0
+ bne _0803F130
+ ldr r4, [sp, 0x20]
+ ldr r5, [sp, 0x24]
+ adds r0, r4, r5
+ ldrb r0, [r0]
+ str r0, [sp, 0x2C]
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ str r4, [sp, 0x4]
+ ldr r0, [sp, 0x2C]
+ lsls r5, r0, 24
+ asrs r1, r5, 24
+ cmp r1, 0
+ ble _0803F076
+ ldr r2, [sp, 0x30]
+ cmp r2, 0x1B
+ beq _0803F0BE
+_0803F076:
+ ldr r3, [sp, 0x2C]
+ lsls r2, r3, 24
+ b _0803F0D4
+_0803F07C:
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0xC7
+ bls _0803F130
+ ldr r4, [sp, 0x1C]
+ cmp r4, 0
+ bne _0803F130
+ ldr r5, [sp, 0x2C]
+ cmp r5, 0
+ bne _0803F130
+ ldr r1, [sp, 0x20]
+ ldr r2, [sp, 0x24]
+ adds r0, r1, r2
+ ldrb r0, [r0]
+ str r0, [sp, 0x2C]
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ str r4, [sp, 0x4]
+ ldr r3, [sp, 0x2C]
+ lsls r5, r3, 24
+ asrs r1, r5, 24
+ cmp r1, 0
+ ble _0803F0D0
+ ldr r0, [sp, 0x30]
+ cmp r0, 0x1B
+ bne _0803F0D0
+_0803F0BE:
+ movs r0, 0x96
+ muls r0, r1
+ movs r1, 0x64
+ bl __divsi3
+ adds r0, r4, r0
+ str r0, [sp, 0x4]
+ adds r2, r5, 0
+ b _0803F0DC
+_0803F0D0:
+ ldr r1, [sp, 0x2C]
+ lsls r2, r1, 24
+_0803F0D4:
+ asrs r1, r2, 24
+ ldr r0, [sp, 0x4]
+ adds r0, r1
+ str r0, [sp, 0x4]
+_0803F0DC:
+ cmp r2, 0
+ ble _0803F112
+ mov r0, r8
+ movs r1, 0x26
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0xB
+ bne _0803F0F4
+ ldr r0, [sp, 0x4]
+ adds r0, 0x1
+ str r0, [sp, 0x4]
+_0803F0F4:
+ mov r0, r8
+ movs r1, 0x23
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ bl sav1_map_get_name
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r4, r0
+ bne _0803F112
+ ldr r0, [sp, 0x4]
+ adds r0, 0x1
+ str r0, [sp, 0x4]
+_0803F112:
+ ldr r0, [sp, 0x4]
+ cmp r0, 0
+ bge _0803F11C
+ movs r0, 0
+ str r0, [sp, 0x4]
+_0803F11C:
+ ldr r0, [sp, 0x4]
+ cmp r0, 0xFF
+ ble _0803F126
+ movs r0, 0xFF
+ str r0, [sp, 0x4]
+_0803F126:
+ add r2, sp, 0x4
+ mov r0, r8
+ movs r1, 0x20
+ bl SetMonData
+_0803F130:
+ ldr r0, [sp, 0x24]
+ adds r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x24]
+_0803F13A:
+ ldr r2, [sp, 0x28]
+ adds r2, 0x1
+ str r2, [sp, 0x28]
+ mov r3, r10
+ lsrs r3, 1
+ mov r10, r3
+ cmp r3, 0
+ beq _0803F14C
+ b _0803EE32
+_0803F14C:
+ ldr r4, [sp, 0x18]
+ adds r4, 0x1
+ str r4, [sp, 0x18]
+ cmp r4, 0x5
+ bgt _0803F15A
+ bl _0803E378
+_0803F15A:
+ ldr r0, [sp, 0x1C]
+_0803F15C:
+ add sp, 0x3C
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803E1B0
+
+ thumb_func_start HealStatusConditions
+HealStatusConditions: @ 803F16C
+ push {r4-r6,lr}
+ sub sp, 0x4
+ adds r5, r0, 0
+ adds r4, r2, 0
+ lsls r3, 24
+ lsrs r6, r3, 24
+ movs r1, 0x37
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ str r1, [sp]
+ ands r0, r4
+ cmp r0, 0
+ beq _0803F1D0
+ mvns r4, r4
+ ands r1, r4
+ str r1, [sp]
+ adds r0, r5, 0
+ movs r1, 0x37
+ mov r2, sp
+ bl SetMonData
+ ldr r0, _0803F1C4
+ ldr r1, _0803F1C8
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803F1BE
+ cmp r6, 0x4
+ beq _0803F1BE
+ ldr r0, _0803F1CC
+ movs r1, 0x58
+ muls r1, r6
+ adds r0, 0x4C
+ adds r1, r0
+ ldr r0, [r1]
+ ands r0, r4
+ str r0, [r1]
+_0803F1BE:
+ movs r0, 0
+ b _0803F1D2
+ .align 2, 0
+_0803F1C4: .4byte 0x03001770
+_0803F1C8: .4byte 0x0000043d
+_0803F1CC: .4byte 0x02024a80
+_0803F1D0:
+ movs r0, 0x1
+_0803F1D2:
+ add sp, 0x4
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end HealStatusConditions
+
+ thumb_func_start sub_803F1DC
+sub_803F1DC: @ 803F1DC
+ push {r4-r7,lr}
+ lsls r0, 16
+ lsrs r3, r0, 16
+ lsls r1, 24
+ lsrs r4, r1, 24
+ lsls r2, 24
+ lsrs r5, r2, 24
+ movs r7, 0x6
+ ldr r1, _0803F204
+ adds r0, r3, 0
+ subs r0, 0xD
+ lsls r0, 2
+ adds r0, r1
+ ldr r0, [r0]
+ cmp r0, 0
+ bne _0803F208
+ cmp r3, 0xAF
+ beq _0803F20C
+_0803F200:
+ movs r0, 0
+ b _0803F31C
+ .align 2, 0
+_0803F204: .4byte gItemEffectTable
+_0803F208:
+ cmp r3, 0xAF
+ bne _0803F21A
+_0803F20C:
+ ldr r0, _0803F22C
+ ldrb r1, [r0]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ ldr r1, _0803F230
+ adds r0, r1
+_0803F21A:
+ mov r12, r0
+ movs r2, 0
+_0803F21E:
+ cmp r2, 0x4
+ beq _0803F23E
+ cmp r2, 0x4
+ ble _0803F234
+ cmp r2, 0x5
+ beq _0803F2C8
+ b _0803F312
+ .align 2, 0
+_0803F22C: .4byte 0x02024a60
+_0803F230: .4byte 0x02024df8
+_0803F234:
+ cmp r2, 0
+ blt _0803F312
+ cmp r2, r4
+ bne _0803F312
+ b _0803F200
+_0803F23E:
+ mov r0, r12
+ ldrb r3, [r0, 0x4]
+ movs r0, 0x20
+ ands r0, r3
+ cmp r0, 0
+ beq _0803F24E
+ movs r0, 0xDF
+ ands r3, r0
+_0803F24E:
+ movs r6, 0
+ cmp r3, 0
+ beq _0803F312
+_0803F254:
+ movs r0, 0x1
+ ands r0, r3
+ cmp r0, 0
+ beq _0803F2B4
+ cmp r6, 0x7
+ bhi _0803F2B4
+ lsls r0, r6, 2
+ ldr r1, _0803F26C
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803F26C: .4byte _0803F270
+ .align 2, 0
+_0803F270:
+ .4byte _0803F29C
+ .4byte _0803F29C
+ .4byte _0803F290
+ .4byte _0803F29C
+ .4byte _0803F2B4
+ .4byte _0803F2B4
+ .4byte _0803F2B4
+ .4byte _0803F2B0
+_0803F290:
+ movs r0, 0x10
+ ands r0, r3
+ cmp r0, 0
+ beq _0803F29C
+ movs r0, 0xEF
+ ands r3, r0
+_0803F29C:
+ cmp r2, r4
+ bne _0803F2A8
+ adds r0, r3, 0
+ ands r0, r5
+ cmp r0, 0
+ bne _0803F31A
+_0803F2A8:
+ adds r0, r7, 0x1
+ lsls r0, 24
+ lsrs r7, r0, 24
+ b _0803F2B4
+_0803F2B0:
+ cmp r2, r4
+ beq _0803F200
+_0803F2B4:
+ adds r0, r6, 0x1
+ lsls r0, 24
+ lsrs r6, r0, 24
+ lsrs r3, 1
+ cmp r2, r4
+ bne _0803F2C2
+ lsrs r5, 1
+_0803F2C2:
+ cmp r3, 0
+ bne _0803F254
+ b _0803F312
+_0803F2C8:
+ mov r0, r12
+ ldrb r3, [r0, 0x5]
+ movs r6, 0
+_0803F2CE:
+ cmp r3, 0
+ beq _0803F312
+ movs r0, 0x1
+ ands r0, r3
+ cmp r0, 0
+ beq _0803F302
+ cmp r6, 0
+ blt _0803F302
+ cmp r6, 0x6
+ ble _0803F2E8
+ cmp r6, 0x7
+ beq _0803F2FC
+ b _0803F302
+_0803F2E8:
+ cmp r2, r4
+ bne _0803F2F4
+ adds r0, r3, 0
+ ands r0, r5
+ cmp r0, 0
+ bne _0803F31A
+_0803F2F4:
+ adds r0, r7, 0x1
+ lsls r0, 24
+ lsrs r7, r0, 24
+ b _0803F302
+_0803F2FC:
+ cmp r2, r4
+ bne _0803F302
+ b _0803F200
+_0803F302:
+ adds r0, r6, 0x1
+ lsls r0, 24
+ lsrs r6, r0, 24
+ lsrs r3, 1
+ cmp r2, r4
+ bne _0803F2CE
+ lsrs r5, 1
+ b _0803F2CE
+_0803F312:
+ adds r2, 0x1
+ cmp r2, 0x5
+ bgt _0803F31A
+ b _0803F21E
+_0803F31A:
+ adds r0, r7, 0
+_0803F31C:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803F1DC
+
+ thumb_func_start sub_803F324
+sub_803F324: @ 803F324
+ push {lr}
+ ldr r2, _0803F358
+ ldr r1, _0803F35C
+ ldrb r1, [r1]
+ strb r1, [r2]
+ ldr r3, _0803F360
+ ldr r2, _0803F364
+ ldr r1, _0803F368
+ adds r0, r1
+ ldrb r0, [r0]
+ lsls r0, 2
+ adds r0, r2
+ ldr r1, [r0]
+ adds r0, r3, 0
+ bl StringCopy
+ ldr r0, _0803F36C
+ ldr r1, _0803F370
+ bl StringCopy
+ ldr r0, _0803F374
+ bl get_battle_strings_
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803F358: .4byte 0x02024c08
+_0803F35C: .4byte 0x02024e6c
+_0803F360: .4byte 0x030041c0
+_0803F364: .4byte gUnknown_08400F58
+_0803F368: .4byte gUnknown_082082F8
+_0803F36C: .4byte 0x03004290
+_0803F370: .4byte gUnknown_083FFDB3
+_0803F374: .4byte gUnknown_083FFDD3
+ thumb_func_end sub_803F324
+
+ thumb_func_start sub_803F378
+sub_803F378: @ 803F378
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0xAF
+ bne _0803F3C0
+ ldr r0, _0803F3A8
+ ldr r1, _0803F3AC
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803F3B8
+ ldr r2, _0803F3B0
+ ldrb r1, [r2]
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ ldr r1, _0803F3B4
+ adds r7, r0, r1
+ b _0803F3CC
+ .align 2, 0
+_0803F3A8: .4byte 0x03001770
+_0803F3AC: .4byte 0x0000043d
+_0803F3B0: .4byte 0x02024e6c
+_0803F3B4: .4byte 0x02024df8
+_0803F3B8:
+ ldr r7, _0803F3BC
+ b _0803F3CA
+ .align 2, 0
+_0803F3BC: .4byte 0x02028daa
+_0803F3C0:
+ ldr r1, _0803F404
+ subs r0, 0xD
+ lsls r0, 2
+ adds r0, r1
+ ldr r7, [r0]
+_0803F3CA:
+ ldr r2, _0803F408
+_0803F3CC:
+ ldr r1, _0803F40C
+ ldrb r0, [r2]
+ strb r0, [r1]
+ movs r5, 0
+ ldr r0, _0803F410
+ mov r8, r0
+ movs r6, 0
+_0803F3DA:
+ adds r4, r7, r5
+ ldrb r1, [r4]
+ movs r0, 0xF
+ ands r0, r1
+ cmp r0, 0
+ beq _0803F3EC
+ adds r0, r6, 0
+ bl sub_803F324
+_0803F3EC:
+ ldrb r1, [r4]
+ movs r0, 0xF0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803F422
+ cmp r5, 0
+ beq _0803F414
+ adds r0, r6, 0x1
+ bl sub_803F324
+ b _0803F422
+ .align 2, 0
+_0803F404: .4byte gItemEffectTable
+_0803F408: .4byte 0x02024e6c
+_0803F40C: .4byte 0x02024c0b
+_0803F410: .4byte 0x02024c07
+_0803F414:
+ ldr r0, _0803F450
+ ldrb r0, [r0]
+ mov r1, r8
+ strb r0, [r1]
+ ldr r0, _0803F454
+ bl get_battle_strings_
+_0803F422:
+ adds r6, 0x2
+ adds r5, 0x1
+ cmp r5, 0x2
+ ble _0803F3DA
+ ldrb r1, [r7, 0x3]
+ movs r0, 0x80
+ ands r0, r1
+ cmp r0, 0
+ beq _0803F442
+ ldr r1, _0803F458
+ ldr r0, _0803F450
+ ldrb r0, [r0]
+ strb r0, [r1]
+ ldr r0, _0803F45C
+ bl get_battle_strings_
+_0803F442:
+ ldr r0, _0803F460
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0803F450: .4byte 0x02024e6c
+_0803F454: .4byte gUnknown_083FEE92
+_0803F458: .4byte 0x02024c07
+_0803F45C: .4byte gUnknown_083FEE5D
+_0803F460: .4byte 0x020238cc
+ thumb_func_end sub_803F378
+
+ thumb_func_start GetNature
+GetNature: @ 803F464
+ push {lr}
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0x19
+ bl __umodsi3
+ lsls r0, 24
+ lsrs r0, 24
+ pop {r1}
+ bx r1
+ thumb_func_end GetNature
+
+ thumb_func_start GetNatureFromPersonality
+GetNatureFromPersonality: @ 803F47C
+ push {lr}
+ movs r1, 0x19
+ bl __umodsi3
+ lsls r0, 24
+ lsrs r0, 24
+ pop {r1}
+ bx r1
+ thumb_func_end GetNatureFromPersonality
+
+ thumb_func_start GetEvolutionTargetSpecies
+GetEvolutionTargetSpecies: @ 803F48C
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x14
+ mov r8, r0
+ lsls r1, 24
+ lsrs r5, r1, 24
+ lsls r2, 16
+ lsrs r2, 16
+ mov r9, r2
+ movs r0, 0
+ mov r10, r0
+ mov r0, r8
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r7, r0, 16
+ mov r0, r8
+ movs r1, 0xC
+ movs r2, 0
+ bl GetMonData
+ mov r1, sp
+ strh r0, [r1]
+ mov r0, r8
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x17
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0xC]
+ lsrs r4, 16
+ str r4, [sp, 0x10]
+ mov r0, sp
+ ldrh r0, [r0]
+ cmp r0, 0xAF
+ bne _0803F500
+ ldr r0, _0803F4F8
+ ldr r1, _0803F4FC
+ adds r0, r1
+ ldrb r0, [r0]
+ b _0803F508
+ .align 2, 0
+_0803F4F8: .4byte 0x02025734
+_0803F4FC: .4byte 0x00003688
+_0803F500:
+ bl itemid_get_x12
+ lsls r0, 24
+ lsrs r0, 24
+_0803F508:
+ cmp r0, 0x26
+ bne _0803F514
+ cmp r5, 0x3
+ beq _0803F514
+ movs r0, 0
+ b _0803F7A4
+_0803F514:
+ cmp r5, 0x1
+ bne _0803F51A
+ b _0803F734
+_0803F51A:
+ cmp r5, 0x1
+ bgt _0803F524
+ cmp r5, 0
+ beq _0803F538
+ b _0803F7A2
+_0803F524:
+ cmp r5, 0x3
+ ble _0803F52A
+ b _0803F7A2
+_0803F52A:
+ movs r2, 0
+ str r2, [sp, 0x4]
+ ldr r3, _0803F534
+ lsls r6, r7, 2
+ b _0803F782
+ .align 2, 0
+_0803F534: .4byte gEvolutionTable
+_0803F538:
+ mov r0, r8
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ mov r9, r0
+ mov r0, r8
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ str r0, [sp, 0x8]
+ movs r0, 0
+ str r0, [sp, 0x4]
+ lsls r6, r7, 2
+_0803F55E:
+ ldr r1, _0803F584
+ ldr r0, [sp, 0x4]
+ lsls r2, r0, 3
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r2, r0
+ adds r0, r1
+ ldrh r0, [r0]
+ subs r0, 0x1
+ adds r3, r1, 0
+ adds r4, r2, 0
+ cmp r0, 0xE
+ bls _0803F57A
+ b _0803F726
+_0803F57A:
+ lsls r0, 2
+ ldr r1, _0803F588
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803F584: .4byte gEvolutionTable
+_0803F588: .4byte _0803F58C
+ .align 2, 0
+_0803F58C:
+ .4byte _0803F5C8
+ .4byte _0803F5DA
+ .4byte _0803F5FC
+ .4byte _0803F62C
+ .4byte _0803F726
+ .4byte _0803F726
+ .4byte _0803F726
+ .4byte _0803F63C
+ .4byte _0803F666
+ .4byte _0803F690
+ .4byte _0803F6BE
+ .4byte _0803F6DE
+ .4byte _0803F702
+ .4byte _0803F726
+ .4byte _0803F712
+_0803F5C8:
+ ldr r1, [sp, 0x8]
+ cmp r1, 0xDB
+ bhi _0803F5D0
+ b _0803F726
+_0803F5D0:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r0, r3
+ b _0803F61C
+_0803F5DA:
+ bl RtcCalcLocalTime
+ ldr r0, _0803F5F8
+ ldrb r0, [r0, 0x2]
+ subs r0, 0xC
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0xB
+ bls _0803F5EE
+ b _0803F726
+_0803F5EE:
+ ldr r2, [sp, 0x8]
+ cmp r2, 0xDB
+ bhi _0803F5F6
+ b _0803F726
+_0803F5F6:
+ b _0803F612
+ .align 2, 0
+_0803F5F8: .4byte 0x03004038
+_0803F5FC:
+ bl RtcCalcLocalTime
+ ldr r0, _0803F624
+ ldrb r0, [r0, 0x2]
+ cmp r0, 0xB
+ bls _0803F60A
+ b _0803F726
+_0803F60A:
+ ldr r0, [sp, 0x8]
+ cmp r0, 0xDB
+ bhi _0803F612
+ b _0803F726
+_0803F612:
+ ldr r1, _0803F628
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r0, r1
+_0803F61C:
+ ldrh r0, [r0, 0x4]
+ mov r10, r0
+ b _0803F726
+ .align 2, 0
+_0803F624: .4byte 0x03004038
+_0803F628: .4byte gEvolutionTable
+_0803F62C:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r1, r0, r3
+ ldrh r0, [r1, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ b _0803F722
+_0803F63C:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r5, r0, r3
+ ldrh r0, [r5, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ mov r0, r8
+ movs r1, 0x3B
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x3C
+ movs r2, 0
+ bl GetMonData
+ cmp r4, r0
+ bls _0803F726
+ b _0803F6B8
+_0803F666:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r5, r0, r3
+ ldrh r0, [r5, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ mov r0, r8
+ movs r1, 0x3B
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x3C
+ movs r2, 0
+ bl GetMonData
+ cmp r4, r0
+ bne _0803F726
+ b _0803F6B8
+_0803F690:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r5, r0, r3
+ ldrh r0, [r5, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ mov r0, r8
+ movs r1, 0x3B
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ mov r0, r8
+ movs r1, 0x3C
+ movs r2, 0
+ bl GetMonData
+ cmp r4, r0
+ bcs _0803F726
+_0803F6B8:
+ ldrh r5, [r5, 0x4]
+ mov r10, r5
+ b _0803F726
+_0803F6BE:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r4, r0, r3
+ ldrh r0, [r4, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ ldr r0, [sp, 0x10]
+ movs r1, 0xA
+ bl __umodsi3
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0x4
+ bhi _0803F726
+ b _0803F6FC
+_0803F6DE:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r4, r0, r3
+ ldrh r0, [r4, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ ldr r0, [sp, 0x10]
+ movs r1, 0xA
+ bl __umodsi3
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0x4
+ bls _0803F726
+_0803F6FC:
+ ldrh r4, [r4, 0x4]
+ mov r10, r4
+ b _0803F726
+_0803F702:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r1, r0, r3
+ ldrh r0, [r1, 0x2]
+ cmp r0, r9
+ bhi _0803F726
+ b _0803F722
+_0803F712:
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r0, r4, r0
+ adds r1, r0, r3
+ ldrh r0, [r1, 0x2]
+ ldr r2, [sp, 0xC]
+ cmp r0, r2
+ bhi _0803F726
+_0803F722:
+ ldrh r1, [r1, 0x4]
+ mov r10, r1
+_0803F726:
+ ldr r0, [sp, 0x4]
+ adds r0, 0x1
+ str r0, [sp, 0x4]
+ cmp r0, 0x4
+ bgt _0803F732
+ b _0803F55E
+_0803F732:
+ b _0803F7A2
+_0803F734:
+ lsls r6, r7, 2
+ ldr r1, _0803F778
+ adds r0, r6, r7
+ lsls r0, 3
+ adds r4, r0, r1
+ mov r5, sp
+ movs r1, 0x4
+ str r1, [sp, 0x4]
+_0803F744:
+ ldrh r0, [r4]
+ cmp r0, 0x5
+ beq _0803F764
+ cmp r0, 0x6
+ bne _0803F768
+ ldrh r0, [r4, 0x2]
+ ldrh r1, [r5]
+ cmp r0, r1
+ bne _0803F768
+ movs r0, 0
+ strh r0, [r5]
+ mov r0, r8
+ movs r1, 0xC
+ mov r2, sp
+ bl SetMonData
+_0803F764:
+ ldrh r2, [r4, 0x4]
+ mov r10, r2
+_0803F768:
+ adds r4, 0x8
+ ldr r0, [sp, 0x4]
+ subs r0, 0x1
+ str r0, [sp, 0x4]
+ cmp r0, 0
+ bge _0803F744
+ b _0803F7A2
+ .align 2, 0
+_0803F778: .4byte gEvolutionTable
+_0803F77C:
+ ldrh r1, [r1, 0x4]
+ mov r10, r1
+ b _0803F7A2
+_0803F782:
+ adds r0, r6, r7
+ ldr r1, [sp, 0x4]
+ adds r0, r1
+ lsls r0, 3
+ adds r1, r0, r3
+ ldrh r0, [r1]
+ cmp r0, 0x7
+ bne _0803F798
+ ldrh r0, [r1, 0x2]
+ cmp r0, r9
+ beq _0803F77C
+_0803F798:
+ ldr r2, [sp, 0x4]
+ adds r2, 0x1
+ str r2, [sp, 0x4]
+ cmp r2, 0x4
+ ble _0803F782
+_0803F7A2:
+ mov r0, r10
+_0803F7A4:
+ add sp, 0x14
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end GetEvolutionTargetSpecies
+
+ thumb_func_start HoennPokedexNumToSpecies
+HoennPokedexNumToSpecies: @ 803F7B4
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r2, r0, 16
+ cmp r2, 0
+ beq _0803F7F8
+ movs r1, 0
+ ldr r3, _0803F7F0
+ ldrh r0, [r3]
+ cmp r0, r2
+ beq _0803F7E0
+ movs r4, 0xCD
+ lsls r4, 1
+_0803F7CC:
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, r4
+ bhi _0803F7E0
+ lsls r0, r1, 1
+ adds r0, r3
+ ldrh r0, [r0]
+ cmp r0, r2
+ bne _0803F7CC
+_0803F7E0:
+ ldr r0, _0803F7F4
+ cmp r1, r0
+ beq _0803F7F8
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r0, 16
+ b _0803F7FA
+ .align 2, 0
+_0803F7F0: .4byte gSpeciesToHoennPokedexNum
+_0803F7F4: .4byte 0x0000019b
+_0803F7F8:
+ movs r0, 0
+_0803F7FA:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end HoennPokedexNumToSpecies
+
+ thumb_func_start NationalPokedexNumToSpecies
+NationalPokedexNumToSpecies: @ 803F800
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r2, r0, 16
+ cmp r2, 0
+ beq _0803F844
+ movs r1, 0
+ ldr r3, _0803F83C
+ ldrh r0, [r3]
+ cmp r0, r2
+ beq _0803F82C
+ movs r4, 0xCD
+ lsls r4, 1
+_0803F818:
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, r4
+ bhi _0803F82C
+ lsls r0, r1, 1
+ adds r0, r3
+ ldrh r0, [r0]
+ cmp r0, r2
+ bne _0803F818
+_0803F82C:
+ ldr r0, _0803F840
+ cmp r1, r0
+ beq _0803F844
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r0, 16
+ b _0803F846
+ .align 2, 0
+_0803F83C: .4byte gSpeciesToNationalPokedexNum
+_0803F840: .4byte 0x0000019b
+_0803F844:
+ movs r0, 0
+_0803F846:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end NationalPokedexNumToSpecies
+
+ thumb_func_start NationalToHoennOrder
+NationalToHoennOrder: @ 803F84C
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r2, r0, 16
+ cmp r2, 0
+ beq _0803F890
+ movs r1, 0
+ ldr r3, _0803F888
+ ldrh r0, [r3]
+ cmp r0, r2
+ beq _0803F878
+ movs r4, 0xCD
+ lsls r4, 1
+_0803F864:
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, r4
+ bhi _0803F878
+ lsls r0, r1, 1
+ adds r0, r3
+ ldrh r0, [r0]
+ cmp r0, r2
+ bne _0803F864
+_0803F878:
+ ldr r0, _0803F88C
+ cmp r1, r0
+ beq _0803F890
+ adds r0, r1, 0x1
+ lsls r0, 16
+ lsrs r0, 16
+ b _0803F892
+ .align 2, 0
+_0803F888: .4byte gHoennToNationalOrder
+_0803F88C: .4byte 0x0000019b
+_0803F890:
+ movs r0, 0
+_0803F892:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end NationalToHoennOrder
+
+ thumb_func_start SpeciesToNationalPokedexNum
+SpeciesToNationalPokedexNum: @ 803F898
+ push {lr}
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0
+ beq _0803F8B4
+ ldr r0, _0803F8B0
+ subs r1, 0x1
+ lsls r1, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ b _0803F8B6
+ .align 2, 0
+_0803F8B0: .4byte gSpeciesToNationalPokedexNum
+_0803F8B4:
+ movs r0, 0
+_0803F8B6:
+ pop {r1}
+ bx r1
+ thumb_func_end SpeciesToNationalPokedexNum
+
+ thumb_func_start SpeciesToHoennPokedexNum
+SpeciesToHoennPokedexNum: @ 803F8BC
+ push {lr}
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0
+ beq _0803F8D8
+ ldr r0, _0803F8D4
+ subs r1, 0x1
+ lsls r1, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ b _0803F8DA
+ .align 2, 0
+_0803F8D4: .4byte gSpeciesToHoennPokedexNum
+_0803F8D8:
+ movs r0, 0
+_0803F8DA:
+ pop {r1}
+ bx r1
+ thumb_func_end SpeciesToHoennPokedexNum
+
+ thumb_func_start HoennToNationalOrder
+HoennToNationalOrder: @ 803F8E0
+ push {lr}
+ lsls r0, 16
+ lsrs r1, r0, 16
+ cmp r1, 0
+ beq _0803F8FC
+ ldr r0, _0803F8F8
+ subs r1, 0x1
+ lsls r1, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ b _0803F8FE
+ .align 2, 0
+_0803F8F8: .4byte gHoennToNationalOrder
+_0803F8FC:
+ movs r0, 0
+_0803F8FE:
+ pop {r1}
+ bx r1
+ thumb_func_end HoennToNationalOrder
+
+ thumb_func_start speciesid_conv
+speciesid_conv: @ 803F904
+ push {lr}
+ lsls r0, 16
+ lsrs r0, 16
+ adds r1, r0, 0
+ cmp r0, 0xFA
+ bls _0803F932
+ ldr r0, _0803F924
+ cmp r1, r0
+ bls _0803F930
+ ldr r0, _0803F928
+ ldr r2, _0803F92C
+ adds r1, r2
+ lsls r1, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ b _0803F932
+ .align 2, 0
+_0803F924: .4byte 0x00000113
+_0803F928: .4byte gSpeciesIdToCryId
+_0803F92C: .4byte 0xfffffeec
+_0803F930:
+ movs r0, 0xC8
+_0803F932:
+ pop {r1}
+ bx r1
+ thumb_func_end speciesid_conv
+
+ thumb_func_start unref_sub_803F938
+unref_sub_803F938: @ 803F938
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x8
+ adds r5, r1, 0
+ mov r10, r2
+ lsls r0, 16
+ movs r1, 0x9A
+ lsls r1, 17
+ cmp r0, r1
+ bne _0803FA42
+ ldr r1, _0803FA04
+ ldr r0, [r1]
+ cmp r10, r0
+ beq _0803FA42
+ ldr r0, [r1, 0x8]
+ cmp r10, r0
+ beq _0803FA42
+ movs r6, 0
+_0803F962:
+ lsls r3, r6, 3
+ adds r3, r6
+ lsls r3, 2
+ ldr r0, _0803FA08
+ adds r4, r3, r0
+ ldrb r1, [r4]
+ adds r1, 0xF8
+ movs r2, 0xF
+ adds r0, r5, 0
+ ands r0, r2
+ adds r1, r0
+ lsls r1, 24
+ lsrs r1, 24
+ mov r12, r1
+ ldrb r1, [r4, 0x1]
+ adds r1, 0xF8
+ movs r0, 0xF0
+ ands r0, r5
+ lsrs r0, 4
+ adds r1, r0
+ lsls r1, 24
+ lsrs r1, 24
+ movs r2, 0
+ lsrs r5, 8
+ str r5, [sp, 0x4]
+ adds r6, 0x1
+ str r6, [sp]
+ mov r9, r3
+_0803F99A:
+ lsls r0, r2, 1
+ add r0, r9
+ ldr r3, _0803FA0C
+ adds r0, r3
+ ldrh r3, [r0]
+ mov r4, r12
+ adds r0, r4, 0
+ adds r0, 0x10
+ adds r7, r1, 0x1
+ adds r2, 0x1
+ mov r8, r2
+ cmp r4, r0
+ bge _0803FA30
+ lsrs r0, r1, 3
+ lsls r6, r0, 8
+ movs r0, 0x7
+ ands r1, r0
+ lsls r5, r1, 2
+_0803F9BE:
+ adds r0, r4, 0
+ cmp r4, 0
+ bge _0803F9C6
+ adds r0, r4, 0x7
+_0803F9C6:
+ asrs r0, 3
+ lsls r2, r0, 5
+ add r2, r10
+ lsls r0, 3
+ subs r0, r4, r0
+ lsrs r1, r0, 31
+ adds r0, r1
+ asrs r0, 1
+ adds r2, r0
+ adds r2, r6
+ adds r2, r5
+ movs r1, 0x1
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FA24
+ adds r0, r4, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FA10
+ ldrb r1, [r2]
+ movs r0, 0xF0
+ ands r0, r1
+ subs r0, 0x10
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x20
+ bhi _0803FA24
+ adds r0, r1, 0
+ adds r0, 0x40
+ b _0803FA22
+ .align 2, 0
+_0803FA04: .4byte gUnknown_081FAF4C
+_0803FA08: .4byte gSpindaSpotGraphics
+_0803FA0C: .4byte gSpindaSpotGraphics + 0x2
+_0803FA10:
+ ldrb r1, [r2]
+ movs r0, 0xF
+ ands r0, r1
+ subs r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x2
+ bhi _0803FA24
+ adds r0, r1, 0x4
+_0803FA22:
+ strb r0, [r2]
+_0803FA24:
+ asrs r3, 1
+ adds r4, 0x1
+ mov r0, r12
+ adds r0, 0x10
+ cmp r4, r0
+ blt _0803F9BE
+_0803FA30:
+ lsls r0, r7, 24
+ lsrs r1, r0, 24
+ mov r2, r8
+ cmp r2, 0xF
+ ble _0803F99A
+ ldr r5, [sp, 0x4]
+ ldr r6, [sp]
+ cmp r6, 0x3
+ ble _0803F962
+_0803FA42:
+ add sp, 0x8
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end unref_sub_803F938
+
+ thumb_func_start DrawSpindaSpots
+DrawSpindaSpots: @ 803FA54
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x8
+ adds r5, r1, 0
+ str r2, [sp]
+ lsls r0, 16
+ lsls r3, 24
+ lsrs r3, 24
+ movs r1, 0x9A
+ lsls r1, 17
+ cmp r0, r1
+ bne _0803FB56
+ cmp r3, 0
+ beq _0803FB56
+ movs r6, 0
+_0803FA78:
+ lsls r3, r6, 3
+ adds r3, r6
+ lsls r3, 2
+ ldr r0, _0803FB1C
+ adds r4, r3, r0
+ ldrb r1, [r4]
+ adds r1, 0xF8
+ movs r2, 0xF
+ adds r0, r5, 0
+ ands r0, r2
+ adds r1, r0
+ lsls r1, 24
+ lsrs r1, 24
+ mov r12, r1
+ ldrb r1, [r4, 0x1]
+ adds r1, 0xF8
+ movs r0, 0xF0
+ ands r0, r5
+ lsrs r0, 4
+ adds r1, r0
+ lsls r1, 24
+ lsrs r1, 24
+ movs r2, 0
+ lsrs r5, 8
+ str r5, [sp, 0x4]
+ adds r6, 0x1
+ mov r10, r6
+ mov r9, r3
+_0803FAB0:
+ lsls r0, r2, 1
+ add r0, r9
+ ldr r3, _0803FB20
+ adds r0, r3
+ ldrh r3, [r0]
+ mov r4, r12
+ adds r0, r4, 0
+ adds r0, 0x10
+ adds r7, r1, 0x1
+ adds r2, 0x1
+ mov r8, r2
+ cmp r4, r0
+ bge _0803FB44
+ lsrs r0, r1, 3
+ lsls r6, r0, 8
+ movs r0, 0x7
+ ands r1, r0
+ lsls r5, r1, 2
+_0803FAD4:
+ adds r0, r4, 0
+ cmp r4, 0
+ bge _0803FADC
+ adds r0, r4, 0x7
+_0803FADC:
+ asrs r0, 3
+ lsls r2, r0, 5
+ ldr r1, [sp]
+ adds r2, r1, r2
+ lsls r0, 3
+ subs r0, r4, r0
+ lsrs r1, r0, 31
+ adds r0, r1
+ asrs r0, 1
+ adds r2, r0
+ adds r2, r6
+ adds r2, r5
+ movs r1, 0x1
+ adds r0, r3, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FB38
+ adds r0, r4, 0
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FB24
+ ldrb r1, [r2]
+ movs r0, 0xF0
+ ands r0, r1
+ subs r0, 0x10
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x20
+ bhi _0803FB38
+ adds r0, r1, 0
+ adds r0, 0x40
+ b _0803FB36
+ .align 2, 0
+_0803FB1C: .4byte gSpindaSpotGraphics
+_0803FB20: .4byte gSpindaSpotGraphics + 0x2
+_0803FB24:
+ ldrb r1, [r2]
+ movs r0, 0xF
+ ands r0, r1
+ subs r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x2
+ bhi _0803FB38
+ adds r0, r1, 0x4
+_0803FB36:
+ strb r0, [r2]
+_0803FB38:
+ asrs r3, 1
+ adds r4, 0x1
+ mov r0, r12
+ adds r0, 0x10
+ cmp r4, r0
+ blt _0803FAD4
+_0803FB44:
+ lsls r0, r7, 24
+ lsrs r1, r0, 24
+ mov r2, r8
+ cmp r2, 0xF
+ ble _0803FAB0
+ ldr r5, [sp, 0x4]
+ mov r6, r10
+ cmp r6, 0x3
+ ble _0803FA78
+_0803FB56:
+ add sp, 0x8
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end DrawSpindaSpots
+
+ thumb_func_start sub_803FB68
+sub_803FB68: @ 803FB68
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ adds r7, r0, 0
+ adds r4, r1, 0
+ lsls r4, 16
+ lsrs r4, 16
+ lsls r2, 16
+ lsrs r2, 16
+ mov r8, r2
+ ldr r5, _0803FBB4
+ movs r1, 0x2
+ adds r2, r5, 0
+ bl GetMonData
+ movs r6, 0xB
+ adds r0, r4, 0
+ muls r0, r6
+ ldr r4, _0803FBB8
+ adds r0, r4
+ adds r1, r5, 0
+ bl StringCompareWithoutExtCtrlCodes
+ cmp r0, 0
+ bne _0803FBA8
+ mov r2, r8
+ muls r2, r6
+ adds r2, r4
+ adds r0, r7, 0
+ movs r1, 0x2
+ bl SetMonData
+_0803FBA8:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803FBB4: .4byte 0x020231cc
+_0803FBB8: .4byte gSpeciesNames
+ thumb_func_end sub_803FB68
+
+ thumb_func_start sub_803FBBC
+sub_803FBBC: @ 803FBBC
+ push {r4,r5,lr}
+ movs r5, 0
+ ldr r4, _0803FBE4
+ bl GetMultiplayerId
+ lsls r0, 24
+ lsrs r0, 24
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r1, 2
+ adds r1, r4
+ ldrh r0, [r1, 0x18]
+ cmp r0, 0x2
+ bgt _0803FBE8
+ cmp r0, 0x1
+ bge _0803FBF0
+ cmp r0, 0
+ beq _0803FBEC
+ b _0803FBF2
+ .align 2, 0
+_0803FBE4: .4byte 0x03002970
+_0803FBE8:
+ cmp r0, 0x3
+ bne _0803FBF2
+_0803FBEC:
+ movs r5, 0
+ b _0803FBF2
+_0803FBF0:
+ movs r5, 0x1
+_0803FBF2:
+ adds r0, r5, 0
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803FBBC
+
+ thumb_func_start sub_803FBFC
+sub_803FBFC: @ 803FBFC
+ push {lr}
+ lsls r0, 24
+ lsrs r0, 24
+ movs r3, 0
+ ldr r2, _0803FC20
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r1, 2
+ adds r1, r2
+ ldrh r0, [r1, 0x18]
+ cmp r0, 0x2
+ bgt _0803FC24
+ cmp r0, 0x1
+ bge _0803FC2C
+ cmp r0, 0
+ beq _0803FC28
+ b _0803FC2E
+ .align 2, 0
+_0803FC20: .4byte 0x03002970
+_0803FC24:
+ cmp r0, 0x3
+ bne _0803FC2E
+_0803FC28:
+ movs r3, 0
+ b _0803FC2E
+_0803FC2C:
+ movs r3, 0x1
+_0803FC2E:
+ adds r0, r3, 0
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803FBFC
+
+ thumb_func_start sub_803FC34
+sub_803FC34: @ 803FC34
+ push {lr}
+ lsls r0, 16
+ lsrs r3, r0, 16
+ movs r2, 0
+ ldr r1, _0803FC40
+ b _0803FC4C
+ .align 2, 0
+_0803FC40: .4byte 0x03002970
+_0803FC44:
+ adds r1, 0x1C
+ adds r2, 0x1
+ cmp r2, 0x3
+ bgt _0803FC52
+_0803FC4C:
+ ldrh r0, [r1, 0x18]
+ cmp r0, r3
+ bne _0803FC44
+_0803FC52:
+ adds r0, r2, 0
+ pop {r1}
+ bx r1
+ thumb_func_end sub_803FC34
+
+ thumb_func_start sub_803FC58
+sub_803FC58: @ 803FC58
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r2, _0803FC70
+ lsls r1, r0, 2
+ adds r1, r0
+ lsls r1, 3
+ adds r1, r2
+ ldrb r1, [r1, 0x2]
+ movs r0, 0x7F
+ ands r0, r1
+ bx lr
+ .align 2, 0
+_0803FC70: .4byte gTrainers
+ thumb_func_end sub_803FC58
+
+ thumb_func_start nature_stat_mod
+nature_stat_mod: @ 803FC74
+ push {r4,r5,lr}
+ lsls r0, 24
+ lsrs r4, r0, 24
+ lsls r1, 16
+ lsrs r3, r1, 16
+ lsls r2, 24
+ lsrs r5, r2, 24
+ movs r0, 0xFF
+ lsls r0, 24
+ adds r2, r0
+ lsrs r2, 24
+ cmp r2, 0x4
+ bls _0803FC92
+ adds r0, r3, 0
+ b _0803FCCE
+_0803FC92:
+ ldr r0, _0803FCB4
+ lsls r1, r4, 2
+ adds r1, r4
+ subs r1, 0x1
+ adds r1, r5, r1
+ adds r1, r0
+ ldrb r1, [r1]
+ lsls r1, 24
+ asrs r1, 24
+ movs r0, 0x1
+ negs r0, r0
+ cmp r1, r0
+ beq _0803FCB8
+ cmp r1, 0x1
+ bne _0803FCCC
+ movs r0, 0x6E
+ b _0803FCBA
+ .align 2, 0
+_0803FCB4: .4byte gNatureStatTable
+_0803FCB8:
+ movs r0, 0x5A
+_0803FCBA:
+ muls r0, r3
+ lsls r0, 16
+ lsrs r0, 16
+ movs r1, 0x64
+ bl __udivsi3
+ lsls r0, 16
+ lsrs r0, 16
+ b _0803FCCE
+_0803FCCC:
+ adds r0, r3, 0
+_0803FCCE:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end nature_stat_mod
+
+ thumb_func_start sub_803FCD4
+sub_803FCD4: @ 803FCD4
+ push {r4-r7,lr}
+ sub sp, 0x4
+ adds r7, r0, 0
+ lsls r1, 24
+ lsrs r5, r1, 24
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r6, r0, 16
+ adds r0, r7, 0
+ movs r1, 0xC
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0xAF
+ bne _0803FD34
+ ldr r0, _0803FD14
+ ldr r1, _0803FD18
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FD20
+ ldr r0, _0803FD1C
+ ldrb r4, [r0, 0x7]
+ b _0803FD3C
+ .align 2, 0
+_0803FD14: .4byte 0x03001770
+_0803FD18: .4byte 0x0000043d
+_0803FD1C: .4byte 0x02024df0
+_0803FD20:
+ ldr r0, _0803FD2C
+ ldr r1, _0803FD30
+ adds r0, r1
+ ldrb r4, [r0]
+ b _0803FD3C
+ .align 2, 0
+_0803FD2C: .4byte 0x02025734
+_0803FD30: .4byte 0x00003688
+_0803FD34:
+ bl itemid_get_x12
+ lsls r0, 24
+ lsrs r4, r0, 24
+_0803FD3C:
+ cmp r6, 0
+ bne _0803FD42
+ b _0803FE56
+_0803FD42:
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r6, r0
+ bne _0803FD4C
+ b _0803FE56
+_0803FD4C:
+ movs r6, 0
+ adds r0, r7, 0
+ movs r1, 0x20
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ mov r1, sp
+ strh r0, [r1]
+ lsls r0, 16
+ asrs r0, 16
+ cmp r0, 0x63
+ ble _0803FD6A
+ movs r6, 0x1
+_0803FD6A:
+ cmp r0, 0xC7
+ ble _0803FD74
+ adds r0, r6, 0x1
+ lsls r0, 24
+ lsrs r6, r0, 24
+_0803FD74:
+ cmp r5, 0x5
+ bne _0803FD84
+ bl Random
+ movs r1, 0x1
+ ands r1, r0
+ cmp r1, 0
+ bne _0803FE56
+_0803FD84:
+ cmp r5, 0x3
+ bne _0803FDB4
+ ldr r0, _0803FE60
+ ldrh r1, [r0]
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FE56
+ ldr r2, _0803FE64
+ ldr r0, _0803FE68
+ ldrh r1, [r0]
+ lsls r0, r1, 2
+ adds r0, r1
+ lsls r0, 3
+ adds r0, r2
+ ldrb r1, [r0, 0x1]
+ adds r0, r1, 0
+ subs r0, 0x18
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x1
+ bls _0803FDB4
+ cmp r1, 0x20
+ bne _0803FE56
+_0803FDB4:
+ ldr r1, _0803FE6C
+ lsls r0, r5, 1
+ adds r0, r5
+ adds r0, r6, r0
+ adds r0, r1
+ ldrb r2, [r0]
+ movs r1, 0
+ ldrsb r1, [r0, r1]
+ cmp r1, 0
+ ble _0803FDDA
+ cmp r4, 0x1B
+ bne _0803FDDA
+ movs r0, 0x96
+ muls r0, r1
+ movs r1, 0x64
+ bl __divsi3
+ lsls r0, 24
+ lsrs r2, r0, 24
+_0803FDDA:
+ lsls r2, 24
+ asrs r2, 24
+ mov r0, sp
+ movs r1, 0
+ ldrsh r0, [r0, r1]
+ adds r0, r2
+ mov r1, sp
+ strh r0, [r1]
+ cmp r2, 0
+ ble _0803FE2C
+ adds r0, r7, 0
+ movs r1, 0x26
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0xB
+ bne _0803FE08
+ mov r0, sp
+ movs r1, 0
+ ldrsh r0, [r0, r1]
+ adds r0, 0x1
+ mov r1, sp
+ strh r0, [r1]
+_0803FE08:
+ adds r0, r7, 0
+ movs r1, 0x23
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ bl sav1_map_get_name
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r4, r0
+ bne _0803FE2C
+ mov r0, sp
+ movs r1, 0
+ ldrsh r0, [r0, r1]
+ adds r0, 0x1
+ mov r1, sp
+ strh r0, [r1]
+_0803FE2C:
+ mov r0, sp
+ movs r1, 0
+ ldrsh r0, [r0, r1]
+ cmp r0, 0
+ bge _0803FE3C
+ movs r1, 0
+ mov r0, sp
+ strh r1, [r0]
+_0803FE3C:
+ mov r0, sp
+ movs r1, 0
+ ldrsh r0, [r0, r1]
+ cmp r0, 0xFF
+ ble _0803FE4C
+ movs r1, 0xFF
+ mov r0, sp
+ strh r1, [r0]
+_0803FE4C:
+ adds r0, r7, 0
+ movs r1, 0x20
+ mov r2, sp
+ bl SetMonData
+_0803FE56:
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0803FE60: .4byte 0x020239f8
+_0803FE64: .4byte gTrainers
+_0803FE68: .4byte 0x0202ff5e
+_0803FE6C: .4byte gUnknown_082082FE
+ thumb_func_end sub_803FCD4
+
+ thumb_func_start sub_803FE70
+sub_803FE70: @ 803FE70
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ sub sp, 0x8
+ mov r8, r0
+ lsls r1, 16
+ lsrs r5, r1, 16
+ movs r4, 0
+ movs r7, 0
+ movs r6, 0
+_0803FE84:
+ adds r1, r6, 0
+ adds r1, 0x1A
+ mov r0, r8
+ movs r2, 0
+ bl GetMonData
+ mov r2, sp
+ adds r1, r2, r6
+ strb r0, [r1]
+ ldrb r0, [r1]
+ adds r0, r7, r0
+ lsls r0, 16
+ lsrs r7, r0, 16
+ adds r6, 0x1
+ cmp r6, 0x5
+ ble _0803FE84
+ movs r6, 0
+ b _08040006
+_0803FEA8:
+ mov r0, r8
+ movs r1, 0
+ bl sub_8040178
+ lsls r0, 24
+ movs r2, 0x1
+ cmp r0, 0
+ beq _0803FEBA
+ movs r2, 0x2
+_0803FEBA:
+ cmp r6, 0x5
+ bhi _0803FF5C
+ lsls r0, r6, 2
+ ldr r1, _0803FEC8
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0803FEC8: .4byte _0803FECC
+ .align 2, 0
+_0803FECC:
+ .4byte _0803FEE4
+ .4byte _0803FEF8
+ .4byte _0803FF0C
+ .4byte _0803FF20
+ .4byte _0803FF34
+ .4byte _0803FF48
+_0803FEE4:
+ ldr r0, _0803FEF4
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xA]
+ lsls r0, 30
+ b _0803FF56
+ .align 2, 0
+_0803FEF4: .4byte gBaseStats
+_0803FEF8:
+ ldr r0, _0803FF08
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xA]
+ b _0803FF54
+ .align 2, 0
+_0803FF08: .4byte gBaseStats
+_0803FF0C:
+ ldr r0, _0803FF1C
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xA]
+ lsls r0, 26
+ b _0803FF56
+ .align 2, 0
+_0803FF1C: .4byte gBaseStats
+_0803FF20:
+ ldr r0, _0803FF30
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xA]
+ lsrs r0, 6
+ b _0803FF58
+ .align 2, 0
+_0803FF30: .4byte gBaseStats
+_0803FF34:
+ ldr r0, _0803FF44
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xB]
+ lsls r0, 30
+ b _0803FF56
+ .align 2, 0
+_0803FF44: .4byte gBaseStats
+_0803FF48:
+ ldr r0, _0803FF84
+ lsls r1, r5, 3
+ subs r1, r5
+ lsls r1, 2
+ adds r1, r0
+ ldrb r0, [r1, 0xB]
+_0803FF54:
+ lsls r0, 28
+_0803FF56:
+ lsrs r0, 30
+_0803FF58:
+ adds r4, r0, 0
+ muls r4, r2
+_0803FF5C:
+ mov r0, r8
+ movs r1, 0xC
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ cmp r0, 0xAF
+ bne _0803FFA8
+ ldr r0, _0803FF88
+ ldr r1, _0803FF8C
+ adds r0, r1
+ ldrb r1, [r0]
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0803FF94
+ ldr r0, _0803FF90
+ ldrb r0, [r0, 0x7]
+ b _0803FFB0
+ .align 2, 0
+_0803FF84: .4byte gBaseStats
+_0803FF88: .4byte 0x03001770
+_0803FF8C: .4byte 0x0000043d
+_0803FF90: .4byte 0x02024df0
+_0803FF94:
+ ldr r0, _0803FFA0
+ ldr r2, _0803FFA4
+ adds r0, r2
+ ldrb r0, [r0]
+ b _0803FFB0
+ .align 2, 0
+_0803FFA0: .4byte 0x02025734
+_0803FFA4: .4byte 0x00003688
+_0803FFA8:
+ bl itemid_get_x12
+ lsls r0, 24
+ lsrs r0, 24
+_0803FFB0:
+ cmp r0, 0x18
+ bne _0803FFB8
+ lsls r0, r4, 17
+ lsrs r4, r0, 16
+_0803FFB8:
+ lsls r0, r4, 16
+ asrs r2, r0, 16
+ adds r1, r7, r2
+ movs r0, 0xFF
+ lsls r0, 1
+ cmp r1, r0
+ ble _0803FFD0
+ adds r0, r2, r0
+ adds r1, r7, r4
+ subs r0, r1
+ lsls r0, 16
+ lsrs r4, r0, 16
+_0803FFD0:
+ mov r0, sp
+ adds r2, r0, r6
+ ldrb r3, [r2]
+ lsls r0, r4, 16
+ asrs r1, r0, 16
+ adds r0, r3, r1
+ cmp r0, 0xFF
+ ble _0803FFEC
+ adds r0, r1, 0
+ adds r0, 0xFF
+ adds r1, r3, r4
+ subs r0, r1
+ lsls r0, 16
+ lsrs r4, r0, 16
+_0803FFEC:
+ adds r0, r3, r4
+ strb r0, [r2]
+ adds r0, r7, r4
+ lsls r0, 16
+ lsrs r7, r0, 16
+ adds r1, r6, 0
+ adds r1, 0x1A
+ mov r0, r8
+ bl SetMonData
+ adds r6, 0x1
+ cmp r6, 0x5
+ bgt _0804000E
+_08040006:
+ ldr r0, _0804001C
+ cmp r7, r0
+ bhi _0804000E
+ b _0803FEA8
+_0804000E:
+ add sp, 0x8
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0804001C: .4byte 0x000001fd
+ thumb_func_end sub_803FE70
+
+ thumb_func_start sub_8040020
+sub_8040020: @ 8040020
+ push {r4-r6,lr}
+ adds r6, r0, 0
+ movs r5, 0
+ movs r4, 0
+_08040028:
+ adds r1, r4, 0
+ adds r1, 0x1A
+ adds r0, r6, 0
+ movs r2, 0
+ bl GetMonData
+ adds r0, r5, r0
+ lsls r0, 16
+ lsrs r5, r0, 16
+ adds r4, 0x1
+ cmp r4, 0x5
+ ble _08040028
+ adds r0, r5, 0
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040020
+
+ thumb_func_start sub_8040048
+sub_8040048: @ 8040048
+ push {r4-r6,lr}
+ sub sp, 0x4
+ adds r6, r0, 0
+ bl Random
+ lsls r0, 16
+ lsrs r5, r0, 16
+ movs r0, 0x80
+ lsls r0, 7
+ cmp r5, r0
+ beq _0804006E
+ movs r0, 0x80
+ lsls r0, 8
+ cmp r5, r0
+ beq _0804006E
+ movs r0, 0xC0
+ lsls r0, 8
+ cmp r5, r0
+ bne _08040104
+_0804006E:
+ bl Random
+ lsls r0, 16
+ lsrs r0, 16
+ movs r1, 0x6
+ bl __umodsi3
+ lsls r0, 16
+ lsrs r5, r0, 16
+ movs r0, 0x64
+ muls r0, r5
+ adds r4, r6, r0
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _0804006E
+ adds r0, r4, 0
+ movs r1, 0x2D
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ bne _0804006E
+ ldr r1, _0804010C
+ lsls r0, r5, 2
+ adds r0, r1
+ ldrb r1, [r0]
+ adds r0, r6, 0
+ bl sub_8040178
+ lsls r0, 24
+ cmp r0, 0
+ bne _08040104
+ mov r4, sp
+_080400B8:
+ bl Random
+ lsls r0, 24
+ lsrs r0, 24
+ strb r0, [r4]
+ cmp r0, 0
+ beq _080400B8
+ movs r0, 0xF0
+ mov r1, sp
+ ldrb r1, [r1]
+ ands r0, r1
+ cmp r0, 0
+ beq _080400DA
+ movs r0, 0x7
+ ands r1, r0
+ mov r0, sp
+ strb r1, [r0]
+_080400DA:
+ mov r0, sp
+ ldrb r0, [r0]
+ lsls r1, r0, 4
+ orrs r0, r1
+ lsls r0, 24
+ lsrs r0, 24
+ mov r1, sp
+ strb r0, [r1]
+ movs r1, 0xF3
+ ands r1, r0
+ mov r0, sp
+ strb r1, [r0]
+ adds r1, 0x1
+ strb r1, [r0]
+ movs r0, 0x64
+ muls r0, r5
+ adds r0, r6, r0
+ movs r1, 0x22
+ mov r2, sp
+ bl SetMonData
+_08040104:
+ add sp, 0x4
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0804010C: .4byte gBitTable
+ thumb_func_end sub_8040048
+
+ thumb_func_start sub_8040110
+sub_8040110: @ 8040110
+ push {r4-r7,lr}
+ sub sp, 0x4
+ adds r7, r0, 0
+ lsls r1, 24
+ lsrs r4, r1, 24
+ movs r3, 0
+ movs r6, 0x1
+ movs r5, 0
+ cmp r4, 0
+ beq _08040158
+_08040124:
+ movs r0, 0x1
+ ands r0, r4
+ cmp r0, 0
+ beq _0804014C
+ movs r0, 0x64
+ muls r0, r3
+ adds r0, r7, r0
+ movs r1, 0x22
+ movs r2, 0
+ str r3, [sp]
+ bl GetMonData
+ movs r1, 0xF
+ ands r1, r0
+ ldr r3, [sp]
+ cmp r1, 0
+ beq _0804014C
+ orrs r5, r6
+ lsls r0, r5, 24
+ lsrs r5, r0, 24
+_0804014C:
+ adds r3, 0x1
+ lsls r6, 1
+ lsrs r4, 1
+ cmp r4, 0
+ bne _08040124
+ b _0804016C
+_08040158:
+ adds r0, r7, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0xF
+ ands r1, r0
+ cmp r1, 0
+ beq _0804016C
+ movs r5, 0x1
+_0804016C:
+ adds r0, r5, 0
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040110
+
+ thumb_func_start sub_8040178
+sub_8040178: @ 8040178
+ push {r4-r7,lr}
+ sub sp, 0x4
+ adds r7, r0, 0
+ lsls r1, 24
+ lsrs r4, r1, 24
+ movs r3, 0
+ movs r6, 0x1
+ movs r5, 0
+ cmp r4, 0
+ beq _080401BC
+_0804018C:
+ movs r0, 0x1
+ ands r0, r4
+ cmp r0, 0
+ beq _080401B0
+ movs r0, 0x64
+ muls r0, r3
+ adds r0, r7, r0
+ movs r1, 0x22
+ movs r2, 0
+ str r3, [sp]
+ bl GetMonData
+ ldr r3, [sp]
+ cmp r0, 0
+ beq _080401B0
+ orrs r5, r6
+ lsls r0, r5, 24
+ lsrs r5, r0, 24
+_080401B0:
+ adds r3, 0x1
+ lsls r6, 1
+ lsrs r4, 1
+ cmp r4, 0
+ bne _0804018C
+ b _080401CC
+_080401BC:
+ adds r0, r7, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _080401CC
+ movs r5, 0x1
+_080401CC:
+ adds r0, r5, 0
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040178
+
+ thumb_func_start sub_80401D8
+sub_80401D8: @ 80401D8
+ push {r4-r7,lr}
+ sub sp, 0x4
+ lsls r0, 16
+ lsrs r7, r0, 16
+ movs r5, 0
+ mov r6, sp
+_080401E4:
+ movs r0, 0x64
+ adds r1, r5, 0
+ muls r1, r0
+ ldr r0, _08040224
+ adds r4, r1, r0
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _0804023C
+ adds r0, r4, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ strb r0, [r6]
+ movs r1, 0xF
+ adds r2, r0, 0
+ ands r1, r2
+ cmp r1, 0
+ beq _0804023C
+ cmp r1, r7
+ bcc _0804021E
+ cmp r7, 0x4
+ bls _08040228
+_0804021E:
+ movs r0, 0xF0
+ ands r0, r2
+ b _0804022A
+ .align 2, 0
+_08040224: .4byte 0x03004360
+_08040228:
+ subs r0, r2, r7
+_0804022A:
+ strb r0, [r6]
+ movs r0, 0x64
+ muls r0, r5
+ ldr r1, _0804024C
+ adds r0, r1
+ movs r1, 0x22
+ mov r2, sp
+ bl SetMonData
+_0804023C:
+ adds r5, 0x1
+ cmp r5, 0x5
+ ble _080401E4
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0804024C: .4byte 0x03004360
+ thumb_func_end sub_80401D8
+
+ thumb_func_start atkE5_pickupitemcalculation
+atkE5_pickupitemcalculation: @ 8040250
+ push {r4-r7,lr}
+ sub sp, 0x4
+ adds r7, r0, 0
+ bl Random
+ lsls r0, 16
+ lsrs r0, 16
+ movs r1, 0x3
+ bl __umodsi3
+ lsls r0, 16
+ cmp r0, 0
+ bne _080402F6
+ movs r5, 0
+_0804026C:
+ movs r0, 0x64
+ adds r6, r5, 0
+ muls r6, r0
+ adds r4, r7, r6
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ cmp r0, 0
+ beq _080402F0
+ adds r0, r4, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r1, r0, 24
+ mov r0, sp
+ strb r1, [r0]
+ cmp r1, 0
+ beq _080402F0
+ movs r0, 0xF
+ ands r0, r1
+ cmp r0, 0
+ beq _080402F0
+ cmp r5, 0
+ beq _080402C6
+ adds r0, r6, 0
+ subs r0, 0x64
+ adds r4, r7, r0
+ adds r0, r4, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0xF0
+ ands r1, r0
+ cmp r1, 0
+ bne _080402C6
+ adds r0, r4, 0
+ movs r1, 0x22
+ mov r2, sp
+ bl SetMonData
+_080402C6:
+ cmp r5, 0x5
+ beq _080402F0
+ movs r0, 0x64
+ muls r0, r5
+ adds r0, 0x64
+ adds r4, r7, r0
+ adds r0, r4, 0
+ movs r1, 0x22
+ movs r2, 0
+ bl GetMonData
+ movs r1, 0xF0
+ ands r1, r0
+ cmp r1, 0
+ bne _080402F0
+ adds r0, r4, 0
+ movs r1, 0x22
+ mov r2, sp
+ bl SetMonData
+ adds r5, 0x1
+_080402F0:
+ adds r5, 0x1
+ cmp r5, 0x5
+ ble _0804026C
+_080402F6:
+ add sp, 0x4
+ pop {r4-r7}
+ pop {r0}
+ bx r0
+ thumb_func_end atkE5_pickupitemcalculation
+
+ thumb_func_start sub_8040300
+sub_8040300: @ 8040300
+ push {r4-r6,lr}
+ sub sp, 0x4
+ adds r6, r0, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r6, 0
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ adds r0, 0x1
+ mov r1, sp
+ strb r0, [r1]
+ adds r0, r6, 0
+ movs r1, 0x19
+ movs r2, 0
+ bl GetMonData
+ ldr r5, _08040358
+ mov r1, sp
+ ldrb r2, [r1]
+ lsls r2, 2
+ ldr r3, _0804035C
+ lsls r1, r4, 3
+ subs r1, r4
+ lsls r1, 2
+ adds r1, r3
+ ldrb r3, [r1, 0x13]
+ movs r1, 0xCA
+ lsls r1, 1
+ muls r1, r3
+ adds r2, r1
+ adds r2, r5
+ ldr r1, [r2]
+ cmp r0, r1
+ bhi _08040360
+ movs r0, 0
+ b _0804036C
+ .align 2, 0
+_08040358: .4byte gExperienceTables
+_0804035C: .4byte gBaseStats
+_08040360:
+ adds r0, r6, 0
+ movs r1, 0x38
+ mov r2, sp
+ bl SetMonData
+ movs r0, 0x1
+_0804036C:
+ add sp, 0x4
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040300
+
+ thumb_func_start sub_8040374
+sub_8040374: @ 8040374
+ push {r4,r5,lr}
+ lsls r1, 24
+ lsrs r4, r1, 24
+ adds r5, r4, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r1, r0, 16
+ adds r3, r1, 0
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r1, r0
+ bne _08040396
+ movs r0, 0
+ b _080403C2
+_08040396:
+ cmp r4, 0x1F
+ bls _080403B4
+ adds r0, r4, 0
+ subs r0, 0x20
+ movs r2, 0x1
+ lsls r2, r0
+ ldr r0, _080403B0
+ lsls r1, 3
+ adds r0, 0x4
+ adds r1, r0
+ ldr r0, [r1]
+ ands r0, r2
+ b _080403C2
+ .align 2, 0
+_080403B0: .4byte gTMHMLearnsets
+_080403B4:
+ movs r1, 0x1
+ lsls r1, r5
+ ldr r2, _080403C8
+ lsls r0, r3, 3
+ adds r0, r2
+ ldr r0, [r0]
+ ands r0, r1
+_080403C2:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_080403C8: .4byte gTMHMLearnsets
+ thumb_func_end sub_8040374
+
+ thumb_func_start sub_80403CC
+sub_80403CC: @ 80403CC
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x18
+ adds r6, r0, 0
+ str r1, [sp, 0x8]
+ movs r0, 0
+ mov r10, r0
+ adds r0, r6, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r7, r0, 16
+ adds r0, r6, 0
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0xC]
+ movs r5, 0
+ mov r4, sp
+_08040402:
+ adds r1, r5, 0
+ adds r1, 0xD
+ adds r0, r6, 0
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r4]
+ adds r4, 0x2
+ adds r5, 0x1
+ cmp r5, 0x3
+ ble _08040402
+ movs r5, 0
+ ldr r6, _08040510
+ lsls r1, r7, 2
+ adds r2, r1, r6
+ ldr r3, [r2]
+ ldrh r0, [r3]
+ ldr r4, _08040514
+ str r1, [sp, 0x14]
+ cmp r0, r4
+ beq _080404FC
+ mov r9, r2
+ str r3, [sp, 0x10]
+_08040430:
+ lsls r2, r5, 1
+ ldr r1, [sp, 0x10]
+ adds r0, r2, r1
+ ldrh r3, [r0]
+ movs r0, 0xFE
+ lsls r0, 8
+ ands r0, r3
+ ldr r4, [sp, 0xC]
+ lsls r1, r4, 9
+ adds r7, r2, 0
+ adds r5, 0x1
+ mov r12, r5
+ cmp r0, r1
+ bgt _080404E6
+ movs r4, 0
+ mov r0, sp
+ ldrh r1, [r0]
+ ldr r0, _08040518
+ ands r0, r3
+ cmp r1, r0
+ beq _08040480
+ ldr r0, [sp, 0x14]
+ ldr r1, _08040510
+ adds r6, r0, r1
+ ldr r2, _08040518
+ mov r8, r2
+ mov r3, sp
+ adds r5, r7, 0
+_08040468:
+ adds r3, 0x2
+ adds r4, 0x1
+ cmp r4, 0x3
+ bgt _08040480
+ ldr r0, [r6]
+ adds r0, r5, r0
+ ldrh r1, [r0]
+ ldrh r2, [r3]
+ mov r0, r8
+ ands r0, r1
+ cmp r2, r0
+ bne _08040468
+_08040480:
+ cmp r4, 0x4
+ bne _080404E6
+ movs r4, 0
+ cmp r4, r10
+ bge _080404C4
+ mov r1, r9
+ ldr r0, [r1]
+ adds r0, r7, r0
+ ldrh r1, [r0]
+ ldr r0, [sp, 0x8]
+ ldrh r2, [r0]
+ ldr r0, _08040518
+ ands r0, r1
+ cmp r2, r0
+ beq _080404C4
+ ldr r1, [sp, 0x14]
+ ldr r2, _08040510
+ adds r6, r1, r2
+ ldr r0, _08040518
+ mov r8, r0
+ ldr r3, [sp, 0x8]
+ adds r5, r7, 0
+_080404AC:
+ adds r3, 0x2
+ adds r4, 0x1
+ cmp r4, r10
+ bge _080404C4
+ ldr r0, [r6]
+ adds r0, r5, r0
+ ldrh r1, [r0]
+ ldrh r2, [r3]
+ mov r0, r8
+ ands r0, r1
+ cmp r2, r0
+ bne _080404AC
+_080404C4:
+ cmp r4, r10
+ bne _080404E6
+ mov r0, r10
+ adds r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ mov r10, r0
+ lsls r2, r4, 1
+ ldr r1, [sp, 0x8]
+ adds r2, r1
+ mov r4, r9
+ ldr r0, [r4]
+ adds r0, r7, r0
+ ldrh r1, [r0]
+ ldr r0, _08040518
+ ands r0, r1
+ strh r0, [r2]
+_080404E6:
+ mov r5, r12
+ cmp r5, 0x13
+ bgt _080404FC
+ mov r1, r9
+ ldr r0, [r1]
+ lsls r1, r5, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ ldr r2, _08040514
+ cmp r0, r2
+ bne _08040430
+_080404FC:
+ mov r0, r10
+ add sp, 0x18
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040510: .4byte gLevelUpLearnsets
+_08040514: .4byte 0x0000ffff
+_08040518: .4byte 0x000001ff
+ thumb_func_end sub_80403CC
+
+ thumb_func_start sub_804051C
+sub_804051C: @ 804051C
+ push {r4-r7,lr}
+ adds r6, r1, 0
+ lsls r0, 16
+ movs r5, 0
+ movs r4, 0
+ ldr r1, _08040568
+ lsrs r0, 14
+ adds r0, r1
+ ldr r2, [r0]
+ ldrh r0, [r2]
+ ldr r1, _0804056C
+ cmp r0, r1
+ beq _08040560
+ ldr r0, _08040570
+ mov r12, r0
+ adds r7, r1, 0
+ adds r3, r2, 0
+_0804053E:
+ adds r1, r5, 0
+ adds r0, r1, 0x1
+ lsls r0, 24
+ lsrs r5, r0, 24
+ lsls r1, 1
+ adds r1, r6
+ ldrh r2, [r3]
+ mov r0, r12
+ ands r0, r2
+ strh r0, [r1]
+ adds r3, 0x2
+ adds r4, 0x1
+ cmp r4, 0x13
+ bgt _08040560
+ ldrh r0, [r3]
+ cmp r0, r7
+ bne _0804053E
+_08040560:
+ adds r0, r5, 0
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040568: .4byte gLevelUpLearnsets
+_0804056C: .4byte 0x0000ffff
+_08040570: .4byte 0x000001ff
+ thumb_func_end sub_804051C
+
+ thumb_func_start sub_8040574
+sub_8040574: @ 8040574
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x3C
+ adds r6, r0, 0
+ movs r0, 0
+ mov r10, r0
+ adds r0, r6, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r4, r0, 16
+ adds r0, r6, 0
+ movs r1, 0x38
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 24
+ lsrs r0, 24
+ str r0, [sp, 0x30]
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r4, r0
+ bne _080405B0
+ movs r0, 0
+ b _080406BA
+_080405B0:
+ movs r5, 0
+ lsls r4, 2
+ str r4, [sp, 0x38]
+ mov r4, sp
+_080405B8:
+ adds r1, r5, 0
+ adds r1, 0xD
+ adds r0, r6, 0
+ movs r2, 0
+ bl GetMonData
+ strh r0, [r4]
+ adds r4, 0x2
+ adds r5, 0x1
+ cmp r5, 0x3
+ ble _080405B8
+ movs r5, 0
+ ldr r3, _080406CC
+ ldr r2, [sp, 0x38]
+ adds r1, r2, r3
+ ldr r0, [r1]
+ ldrh r0, [r0]
+ ldr r2, _080406D0
+ cmp r0, r2
+ beq _080406B8
+ mov r9, r1
+ mov r4, sp
+ adds r4, 0x8
+ str r4, [sp, 0x34]
+_080405E8:
+ mov r1, r9
+ ldr r0, [r1]
+ lsls r2, r5, 1
+ adds r0, r2, r0
+ ldrh r3, [r0]
+ movs r0, 0xFE
+ lsls r0, 8
+ ands r0, r3
+ ldr r4, [sp, 0x30]
+ lsls r1, r4, 9
+ adds r7, r2, 0
+ adds r5, 0x1
+ mov r12, r5
+ cmp r0, r1
+ bgt _080406A2
+ movs r4, 0
+ mov r0, sp
+ ldrh r1, [r0]
+ ldr r0, _080406D4
+ ands r0, r3
+ cmp r1, r0
+ beq _0804063A
+ ldr r0, [sp, 0x38]
+ ldr r1, _080406CC
+ adds r6, r0, r1
+ ldr r2, _080406D4
+ mov r8, r2
+ mov r3, sp
+ adds r5, r7, 0
+_08040622:
+ adds r3, 0x2
+ adds r4, 0x1
+ cmp r4, 0x3
+ bgt _0804063A
+ ldr r0, [r6]
+ adds r0, r5, r0
+ ldrh r1, [r0]
+ ldrh r2, [r3]
+ mov r0, r8
+ ands r0, r1
+ cmp r2, r0
+ bne _08040622
+_0804063A:
+ cmp r4, 0x4
+ bne _080406A2
+ movs r4, 0
+ cmp r4, r10
+ bge _08040680
+ mov r1, r9
+ ldr r0, [r1]
+ adds r0, r7, r0
+ ldrh r1, [r0]
+ ldr r0, [sp, 0x34]
+ ldrh r2, [r0]
+ ldr r0, _080406D4
+ ands r0, r1
+ add r1, sp, 0x8
+ cmp r2, r0
+ beq _08040680
+ ldr r2, [sp, 0x38]
+ ldr r0, _080406CC
+ adds r6, r2, r0
+ ldr r2, _080406D4
+ mov r8, r2
+ adds r3, r1, 0
+ adds r5, r7, 0
+_08040668:
+ adds r3, 0x2
+ adds r4, 0x1
+ cmp r4, r10
+ bge _08040680
+ ldr r0, [r6]
+ adds r0, r5, r0
+ ldrh r1, [r0]
+ ldrh r2, [r3]
+ mov r0, r8
+ ands r0, r1
+ cmp r2, r0
+ bne _08040668
+_08040680:
+ cmp r4, r10
+ bne _080406A2
+ mov r0, r10
+ adds r0, 0x1
+ lsls r0, 24
+ lsrs r0, 24
+ mov r10, r0
+ lsls r2, r4, 1
+ ldr r4, [sp, 0x34]
+ adds r2, r4, r2
+ mov r1, r9
+ ldr r0, [r1]
+ adds r0, r7, r0
+ ldrh r1, [r0]
+ ldr r0, _080406D4
+ ands r0, r1
+ strh r0, [r2]
+_080406A2:
+ mov r5, r12
+ cmp r5, 0x13
+ bgt _080406B8
+ mov r2, r9
+ ldr r0, [r2]
+ lsls r1, r5, 1
+ adds r1, r0
+ ldrh r0, [r1]
+ ldr r4, _080406D0
+ cmp r0, r4
+ bne _080405E8
+_080406B8:
+ mov r0, r10
+_080406BA:
+ add sp, 0x3C
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_080406CC: .4byte gLevelUpLearnsets
+_080406D0: .4byte 0x0000ffff
+_080406D4: .4byte 0x000001ff
+ thumb_func_end sub_8040574
+
+ thumb_func_start sub_80406D8
+sub_80406D8: @ 80406D8
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r4, r0, 16
+ bl sub_806912C
+ cmp r0, 0
+ beq _080406F2
+ adds r0, r4, 0
+ bl SpeciesToNationalPokedexNum
+ lsls r0, 16
+ lsrs r0, 16
+ b _0804070A
+_080406F2:
+ adds r0, r4, 0
+ bl SpeciesToHoennPokedexNum
+ adds r4, r0, 0
+ cmp r4, 0xCA
+ bls _08040708
+ ldr r0, _08040704
+ b _0804070A
+ .align 2, 0
+_08040704: .4byte 0x0000ffff
+_08040708:
+ adds r0, r4, 0
+_0804070A:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_80406D8
+
+ thumb_func_start sub_8040710
+sub_8040710: @ 8040710
+ push {lr}
+ ldr r1, _08040724
+ movs r2, 0
+ adds r0, r1, 0x3
+_08040718:
+ strb r2, [r0]
+ subs r0, 0x1
+ cmp r0, r1
+ bge _08040718
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08040724: .4byte 0x02024e84
+ thumb_func_end sub_8040710
+
+ thumb_func_start sub_8040728
+sub_8040728: @ 8040728
+ push {lr}
+ ldr r0, _0804073C
+ ldrh r1, [r0]
+ movs r0, 0x80
+ lsls r0, 5
+ ands r0, r1
+ cmp r0, 0
+ beq _08040744
+ ldr r0, _08040740
+ b _080408B2
+ .align 2, 0
+_0804073C: .4byte 0x020239f8
+_08040740: .4byte 0x000001cf
+_08040744:
+ movs r0, 0x80
+ lsls r0, 7
+ ands r0, r1
+ cmp r0, 0
+ beq _08040754
+ movs r0, 0xE7
+ lsls r0, 1
+ b _080408B2
+_08040754:
+ movs r0, 0x2
+ ands r0, r1
+ cmp r0, 0
+ beq _0804075E
+ b _080408A8
+_0804075E:
+ movs r0, 0x8
+ ands r0, r1
+ cmp r0, 0
+ bne _08040768
+ b _080408B0
+_08040768:
+ ldr r3, _0804078C
+ ldr r2, _08040790
+ ldrh r1, [r2]
+ lsls r0, r1, 2
+ adds r0, r1
+ lsls r0, 3
+ adds r0, r3
+ ldrb r0, [r0, 0x1]
+ subs r0, 0x2
+ cmp r0, 0x31
+ bls _08040780
+ b _080408A8
+_08040780:
+ lsls r0, 2
+ ldr r1, _08040794
+ adds r0, r1
+ ldr r0, [r0]
+ mov pc, r0
+ .align 2, 0
+_0804078C: .4byte gTrainers
+_08040790: .4byte 0x0202ff5e
+_08040794: .4byte _08040798
+ .align 2, 0
+_08040798:
+ .4byte _08040860
+ .4byte _08040866
+ .4byte _08040866
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A0
+ .4byte _0804086C
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _08040872
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _0804087C
+ .4byte _080408A8
+ .4byte _080408A8
+ .4byte _08040860
+ .4byte _08040866
+ .4byte _08040866
+_08040860:
+ movs r0, 0xE9
+ lsls r0, 1
+ b _080408B2
+_08040866:
+ movs r0, 0xE5
+ lsls r0, 1
+ b _080408B2
+_0804086C:
+ movs r0, 0xE6
+ lsls r0, 1
+ b _080408B2
+_08040872:
+ ldr r0, _08040878
+ b _080408B2
+ .align 2, 0
+_08040878: .4byte 0x000001cd
+_0804087C:
+ ldrh r1, [r2]
+ lsls r0, r1, 2
+ adds r0, r1
+ lsls r0, 3
+ ldr r1, _08040898
+ adds r0, r1
+ ldr r1, _0804089C
+ bl StringCompare
+ cmp r0, 0
+ beq _080408A8
+ movs r0, 0xE8
+ lsls r0, 1
+ b _080408B2
+ .align 2, 0
+_08040898: .4byte gTrainers + 0x4
+_0804089C: .4byte gUnknown_08400E42
+_080408A0:
+ ldr r0, _080408A4
+ b _080408B2
+ .align 2, 0
+_080408A4: .4byte 0x000001d1
+_080408A8:
+ ldr r0, _080408AC
+ b _080408B2
+ .align 2, 0
+_080408AC: .4byte 0x000001cb
+_080408B0:
+ ldr r0, _080408B8
+_080408B2:
+ pop {r1}
+ bx r1
+ .align 2, 0
+_080408B8: .4byte 0x000001c9
+ thumb_func_end sub_8040728
+
+ thumb_func_start sub_80408BC
+sub_80408BC: @ 80408BC
+ push {lr}
+ bl map_music_set_to_zero
+ bl m4aMPlayAllStop
+ bl sub_8040728
+ lsls r0, 16
+ lsrs r0, 16
+ bl sub_8075474
+ pop {r0}
+ bx r0
+ thumb_func_end sub_80408BC
+
+ thumb_func_start current_map_music_set__default_for_battle
+current_map_music_set__default_for_battle: @ 80408D8
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r4, r0, 16
+ bl map_music_set_to_zero
+ bl m4aMPlayAllStop
+ cmp r4, 0
+ beq _080408F2
+ adds r0, r4, 0
+ bl current_map_music_set
+ b _080408FE
+_080408F2:
+ bl sub_8040728
+ lsls r0, 16
+ lsrs r0, 16
+ bl current_map_music_set
+_080408FE:
+ pop {r4}
+ pop {r0}
+ bx r0
+ thumb_func_end current_map_music_set__default_for_battle
+
+ thumb_func_start pokemon_get_pal
+pokemon_get_pal: @ 8040904
+ push {r4-r6,lr}
+ adds r5, r0, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r5, 0
+ movs r1, 0x1
+ movs r2, 0
+ bl GetMonData
+ adds r6, r0, 0
+ adds r0, r5, 0
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ adds r2, r0, 0
+ adds r0, r4, 0
+ adds r1, r6, 0
+ bl species_and_otid_get_pal
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end pokemon_get_pal
+
+ thumb_func_start species_and_otid_get_pal
+species_and_otid_get_pal: @ 804093C
+ push {r4,r5,lr}
+ adds r3, r2, 0
+ lsls r0, 16
+ lsrs r4, r0, 16
+ adds r5, r4, 0
+ movs r0, 0xCE
+ lsls r0, 1
+ cmp r4, r0
+ bls _08040958
+ ldr r0, _08040954
+ ldr r0, [r0]
+ b _08040984
+ .align 2, 0
+_08040954: .4byte gMonPaletteTable
+_08040958:
+ lsrs r0, r1, 16
+ ldr r2, _08040974
+ ands r1, r2
+ eors r0, r1
+ lsrs r1, r3, 16
+ eors r0, r1
+ ands r3, r2
+ eors r0, r3
+ cmp r0, 0x7
+ bls _0804097C
+ ldr r0, _08040978
+ lsls r1, r4, 3
+ b _08040980
+ .align 2, 0
+_08040974: .4byte 0x0000ffff
+_08040978: .4byte gMonPaletteTable
+_0804097C:
+ ldr r0, _0804098C
+ lsls r1, r5, 3
+_08040980:
+ adds r1, r0
+ ldr r0, [r1]
+_08040984:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_0804098C: .4byte gMonShinyPaletteTable
+ thumb_func_end species_and_otid_get_pal
+
+ thumb_func_start sub_8040990
+sub_8040990: @ 8040990
+ push {r4-r6,lr}
+ adds r5, r0, 0
+ movs r1, 0x41
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r5, 0
+ movs r1, 0x1
+ movs r2, 0
+ bl GetMonData
+ adds r6, r0, 0
+ adds r0, r5, 0
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ adds r2, r0, 0
+ adds r0, r4, 0
+ adds r1, r6, 0
+ bl sub_80409C8
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040990
+
+ thumb_func_start sub_80409C8
+sub_80409C8: @ 80409C8
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r4, r0, 16
+ lsrs r0, r1, 16
+ ldr r3, _080409E8
+ ands r1, r3
+ eors r0, r1
+ lsrs r1, r2, 16
+ eors r0, r1
+ ands r2, r3
+ eors r0, r2
+ cmp r0, 0x7
+ bls _080409F0
+ lsls r0, r4, 3
+ ldr r1, _080409EC
+ b _080409F4
+ .align 2, 0
+_080409E8: .4byte 0x0000ffff
+_080409EC: .4byte gMonPaletteTable
+_080409F0:
+ lsls r0, r4, 3
+ ldr r1, _080409FC
+_080409F4:
+ adds r0, r1
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_080409FC: .4byte gMonShinyPaletteTable
+ thumb_func_end sub_80409C8
+
+ thumb_func_start sub_8040A00
+sub_8040A00: @ 8040A00
+ push {r4,lr}
+ lsls r0, 16
+ lsrs r3, r0, 16
+ ldr r2, _08040A24
+ ldrh r0, [r2]
+ ldr r1, _08040A28
+ cmp r0, r1
+ beq _08040A32
+ adds r4, r1, 0
+ adds r1, r2, 0
+_08040A14:
+ ldrh r0, [r2]
+ adds r1, 0x2
+ adds r2, 0x2
+ cmp r0, r3
+ bne _08040A2C
+ movs r0, 0x1
+ b _08040A34
+ .align 2, 0
+_08040A24: .4byte gUnknown_0820831A
+_08040A28: .4byte 0x0000ffff
+_08040A2C:
+ ldrh r0, [r1]
+ cmp r0, r4
+ bne _08040A14
+_08040A32:
+ movs r0, 0
+_08040A34:
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040A00
+
+ thumb_func_start sub_8040A3C
+sub_8040A3C: @ 8040A3C
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r2, _08040A50
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r1, 2
+ adds r1, r2
+ ldrb r0, [r1, 0x19]
+ lsrs r0, 7
+ bx lr
+ .align 2, 0
+_08040A50: .4byte gBaseStats
+ thumb_func_end sub_8040A3C
+
+ thumb_func_start sub_8040A54
+sub_8040A54: @ 8040A54
+ push {r4,lr}
+ lsls r4, r1, 24
+ lsrs r4, 24
+ bl GetNature
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r2, _08040A78
+ lsls r1, r0, 2
+ adds r1, r0
+ adds r1, r4
+ adds r1, r2
+ movs r0, 0
+ ldrsb r0, [r1, r0]
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040A78: .4byte gUnknown_083F7E28
+ thumb_func_end sub_8040A54
+
+ thumb_func_start sub_8040A7C
+sub_8040A7C: @ 8040A7C
+ push {r4,lr}
+ lsls r4, r1, 24
+ lsrs r4, 24
+ bl GetNatureFromPersonality
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r2, _08040AA0
+ lsls r1, r0, 2
+ adds r1, r0
+ adds r1, r4
+ adds r1, r2
+ movs r0, 0
+ ldrsb r0, [r1, r0]
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040AA0: .4byte gUnknown_083F7E28
+ thumb_func_end sub_8040A7C
+
+ thumb_func_start sub_8040AA4
+sub_8040AA4: @ 8040AA4
+ push {r4,lr}
+ sub sp, 0x8
+ adds r4, r0, 0
+ movs r1, 0x7
+ mov r2, sp
+ bl GetMonData
+ adds r0, r4, 0
+ movs r1, 0x1
+ movs r2, 0
+ bl GetMonData
+ mov r1, sp
+ bl sub_8040AD0
+ lsls r0, 24
+ lsrs r0, 24
+ add sp, 0x8
+ pop {r4}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040AA4
+
+ thumb_func_start sub_8040AD0
+sub_8040AD0: @ 8040AD0
+ push {r4,r5,lr}
+ adds r5, r1, 0
+ ldr r3, _08040B10
+ ldrb r2, [r3, 0xA]
+ ldrb r1, [r3, 0xB]
+ lsls r1, 8
+ orrs r2, r1
+ ldrb r1, [r3, 0xC]
+ lsls r1, 16
+ orrs r2, r1
+ ldrb r1, [r3, 0xD]
+ lsls r1, 24
+ orrs r2, r1
+ cmp r0, r2
+ bne _08040B14
+ movs r4, 0
+ ldrb r0, [r5]
+ cmp r0, 0xFF
+ beq _08040B0C
+ adds r2, r5, 0
+_08040AF8:
+ adds r1, r4, r3
+ ldrb r0, [r2]
+ ldrb r1, [r1]
+ cmp r0, r1
+ bne _08040B14
+ adds r2, 0x1
+ adds r4, 0x1
+ ldrb r0, [r2]
+ cmp r0, 0xFF
+ bne _08040AF8
+_08040B0C:
+ movs r0, 0
+ b _08040B16
+ .align 2, 0
+_08040B10: .4byte gSaveBlock2
+_08040B14:
+ movs r0, 0x1
+_08040B16:
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040AD0
+
+ thumb_func_start sub_8040B1C
+sub_8040B1C: @ 8040B1C
+ push {lr}
+ bl pokemon_restore_pp
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8040B1C
+
+ thumb_func_start pokemon_restore_pp
+pokemon_restore_pp: @ 8040B28
+ push {r4-r6,lr}
+ sub sp, 0x4
+ adds r5, r0, 0
+ movs r6, 0
+_08040B30:
+ adds r4, r6, 0
+ adds r4, 0xD
+ adds r0, r5, 0
+ adds r1, r4, 0
+ movs r2, 0
+ bl GetBoxMonData
+ cmp r0, 0
+ beq _08040B7C
+ adds r0, r5, 0
+ adds r1, r4, 0
+ movs r2, 0
+ bl GetBoxMonData
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r5, 0
+ movs r1, 0x15
+ movs r2, 0
+ bl GetBoxMonData
+ adds r1, r0, 0
+ lsls r1, 24
+ lsrs r1, 24
+ lsls r2, r6, 24
+ lsrs r2, 24
+ adds r0, r4, 0
+ bl CalcPPWithPPUps
+ mov r1, sp
+ strb r0, [r1]
+ adds r1, r6, 0
+ adds r1, 0x11
+ adds r0, r5, 0
+ mov r2, sp
+ bl SetBoxMonData
+_08040B7C:
+ adds r6, 0x1
+ cmp r6, 0x3
+ ble _08040B30
+ add sp, 0x4
+ pop {r4-r6}
+ pop {r0}
+ bx r0
+ thumb_func_end pokemon_restore_pp
+
+ thumb_func_start sub_8040B8C
+sub_8040B8C: @ 8040B8C
+ push {r4,r5,lr}
+ ldr r1, _08040BCC
+ ldr r2, _08040BD0
+ ldr r3, _08040BD4
+ adds r0, r2, r3
+ ldrb r0, [r0]
+ strb r0, [r1]
+ ldr r5, _08040BD8
+ movs r0, 0xFD
+ strb r0, [r5]
+ movs r0, 0x4
+ strb r0, [r5, 0x1]
+ ldr r0, _08040BDC
+ adds r4, r2, r0
+ ldrb r0, [r4]
+ strb r0, [r5, 0x2]
+ movs r0, 0xFF
+ strb r0, [r5, 0x4]
+ ldrb r0, [r4]
+ bl battle_side_get_owner
+ lsls r0, 24
+ cmp r0, 0
+ bne _08040BE4
+ ldr r1, _08040BE0
+ ldrb r0, [r4]
+ lsls r0, 1
+ adds r0, r1
+ ldrb r0, [r0]
+ bl pokemon_order_func
+ b _08040BEE
+ .align 2, 0
+_08040BCC: .4byte 0x02024c06
+_08040BD0: .4byte 0x02000000
+_08040BD4: .4byte 0x000160c0
+_08040BD8: .4byte 0x030041c0
+_08040BDC: .4byte 0x00016054
+_08040BE0: .4byte 0x02024a6a
+_08040BE4:
+ ldr r0, _08040C24
+ ldrb r1, [r4]
+ lsls r1, 1
+ adds r1, r0
+ ldrh r0, [r1]
+_08040BEE:
+ strb r0, [r5, 0x3]
+ ldr r4, _08040C28
+ movs r0, 0xFD
+ strb r0, [r4]
+ movs r0, 0x4
+ strb r0, [r4, 0x1]
+ ldr r1, _08040C2C
+ ldrb r0, [r1]
+ strb r0, [r4, 0x2]
+ ldr r2, _08040C24
+ ldrb r0, [r1]
+ lsls r0, 1
+ adds r0, r2
+ ldrb r0, [r0]
+ bl pokemon_order_func
+ strb r0, [r4, 0x3]
+ movs r0, 0xFF
+ strb r0, [r4, 0x4]
+ ldr r0, _08040C30
+ ldr r1, _08040C34
+ bl sub_8120FFC
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ .align 2, 0
+_08040C24: .4byte 0x02024a6a
+_08040C28: .4byte 0x03004290
+_08040C2C: .4byte 0x02024e6c
+_08040C30: .4byte gUnknown_083FFCCA
+_08040C34: .4byte 0x020234cc
+ thumb_func_end sub_8040B8C
+
+ thumb_func_start sub_8040C38
+sub_8040C38: @ 8040C38
+ push {r4,r5,lr}
+ ldr r0, _08040C90
+ ldrh r1, [r0]
+ ldr r0, _08040C94
+ ands r0, r1
+ cmp r0, 0
+ bne _08040CAC
+ bl Random
+ lsls r0, 16
+ lsrs r0, 16
+ movs r1, 0x64
+ bl __umodsi3
+ lsls r0, 16
+ lsrs r5, r0, 16
+ ldr r4, _08040C98
+ adds r0, r4, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ lsls r0, 16
+ lsrs r0, 16
+ ldr r2, _08040C9C
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r3, r1, 2
+ adds r1, r3, r2
+ ldrh r0, [r1, 0xC]
+ ldrh r1, [r1, 0xE]
+ cmp r0, r1
+ beq _08040C82
+ cmp r5, 0x2C
+ bls _08040CAC
+ cmp r5, 0x5E
+ bhi _08040CA0
+_08040C82:
+ adds r2, 0xC
+ adds r2, r3, r2
+ adds r0, r4, 0
+ movs r1, 0xC
+ bl SetMonData
+ b _08040CAC
+ .align 2, 0
+_08040C90: .4byte 0x020239f8
+_08040C94: .4byte 0x00002008
+_08040C98: .4byte 0x030045c0
+_08040C9C: .4byte gBaseStats
+_08040CA0:
+ adds r2, 0xE
+ adds r2, r3, r2
+ adds r0, r4, 0
+ movs r1, 0xC
+ bl SetMonData
+_08040CAC:
+ pop {r4,r5}
+ pop {r0}
+ bx r0
+ thumb_func_end sub_8040C38
+
+ thumb_func_start sub_8040CB4
+sub_8040CB4: @ 8040CB4
+ push {r4,r5,lr}
+ adds r4, r0, 0
+ movs r1, 0x1
+ movs r2, 0
+ bl GetMonData
+ adds r5, r0, 0
+ adds r0, r4, 0
+ movs r1, 0
+ movs r2, 0
+ bl GetMonData
+ adds r1, r0, 0
+ adds r0, r5, 0
+ bl sub_8040CE0
+ lsls r0, 24
+ lsrs r0, 24
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040CB4
+
+ thumb_func_start sub_8040CE0
+sub_8040CE0: @ 8040CE0
+ push {r4,lr}
+ movs r4, 0
+ lsrs r2, r0, 16
+ ldr r3, _08040D04
+ ands r0, r3
+ eors r2, r0
+ lsrs r0, r1, 16
+ eors r2, r0
+ ands r1, r3
+ eors r2, r1
+ cmp r2, 0x7
+ bhi _08040CFA
+ movs r4, 0x1
+_08040CFA:
+ adds r0, r4, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040D04: .4byte 0x0000ffff
+ thumb_func_end sub_8040CE0
+
+ thumb_func_start sub_8040D08
+sub_8040D08: @ 8040D08
+ push {r4,lr}
+ bl GetMultiplayerId
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r4, _08040D38
+ lsls r1, r0, 3
+ subs r1, r0
+ lsls r1, 2
+ adds r1, r4
+ ldrh r1, [r1, 0x18]
+ movs r0, 0x2
+ eors r0, r1
+ bl sub_803FC34
+ adds r1, r0, 0
+ lsls r0, r1, 3
+ subs r0, r1
+ lsls r0, 2
+ adds r4, 0x8
+ adds r0, r4
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040D38: .4byte 0x03002970
+ thumb_func_end sub_8040D08
+
+ thumb_func_start sub_8040D3C
+sub_8040D3C: @ 8040D3C
+ push {r4,lr}
+ adds r4, r1, 0
+ lsls r0, 16
+ lsrs r1, r0, 16
+ adds r0, r1, 0
+ lsls r2, 24
+ lsrs r2, 24
+ movs r3, 0
+ cmp r1, 0x20
+ beq _08040D54
+ cmp r1, 0x1D
+ bne _08040D7E
+_08040D54:
+ cmp r2, 0x2
+ bne _08040D68
+ movs r0, 0xB
+ muls r1, r0
+ ldr r0, _08040D64
+ adds r1, r0
+ b _08040D70
+ .align 2, 0
+_08040D64: .4byte gSpeciesNames
+_08040D68:
+ ldr r1, _08040D88
+ cmp r0, 0x20
+ bne _08040D70
+ subs r1, 0xB
+_08040D70:
+ adds r0, r4, 0
+ bl StringCompareWithoutExtCtrlCodes
+ movs r3, 0
+ cmp r0, 0
+ bne _08040D7E
+ movs r3, 0x1
+_08040D7E:
+ adds r0, r3, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_08040D88: .4byte gUnknown_08208337
+ thumb_func_end sub_8040D3C
+
+ thumb_func_start sub_8040D8C
+sub_8040D8C: @ 8040D8C
+ push {lr}
+ lsls r0, 16
+ lsrs r3, r0, 16
+ movs r2, 0x2
+ ldrb r0, [r1]
+ cmp r0, 0xFC
+ bne _08040DA2
+ ldrb r0, [r1, 0x1]
+ cmp r0, 0x15
+ bne _08040DA2
+ movs r2, 0x1
+_08040DA2:
+ adds r0, r3, 0
+ bl sub_8040D3C
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8040D8C
+
+ thumb_func_start unref_sub_8040DAC
+unref_sub_8040DAC: @ 8040DAC
+ push {r4-r6,lr}
+ sub sp, 0xC
+ adds r6, r0, 0
+ movs r1, 0xB
+ movs r2, 0
+ bl GetMonData
+ adds r5, r0, 0
+ lsls r5, 16
+ lsrs r5, 16
+ adds r0, r6, 0
+ movs r1, 0x3
+ movs r2, 0
+ bl GetMonData
+ adds r4, r0, 0
+ lsls r4, 24
+ lsrs r4, 24
+ adds r0, r6, 0
+ movs r1, 0x2
+ mov r2, sp
+ bl GetMonData
+ adds r0, r5, 0
+ mov r1, sp
+ adds r2, r4, 0
+ bl sub_8040D3C
+ add sp, 0xC
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end unref_sub_8040DAC
+
+ thumb_func_start sine
+sine: @ 8040DEC
+ lsls r1, 16
+ asrs r1, 16
+ ldr r2, _08040E04
+ lsls r0, 16
+ asrs r0, 15
+ adds r0, r2
+ movs r2, 0
+ ldrsh r0, [r0, r2]
+ muls r0, r1
+ lsls r0, 8
+ asrs r0, 16
+ bx lr
+ .align 2, 0
+_08040E04: .4byte gSineTable
+ thumb_func_end sine
+
+ thumb_func_start cosine
+cosine: @ 8040E08
+ lsls r1, 16
+ asrs r1, 16
+ ldr r2, _08040E24
+ lsls r0, 16
+ asrs r0, 15
+ adds r0, 0x80
+ adds r0, r2
+ movs r2, 0
+ ldrsh r0, [r0, r2]
+ muls r0, r1
+ lsls r0, 8
+ asrs r0, 16
+ bx lr
+ .align 2, 0
+_08040E24: .4byte gSineTable
+ thumb_func_end cosine
+
+ thumb_func_start sine2
+sine2: @ 8040E28
+ push {r4,r5,lr}
+ adds r5, r0, 0
+ lsls r5, 16
+ lsrs r5, 16
+ adds r0, r5, 0
+ movs r1, 0xB4
+ bl __umodsi3
+ adds r4, r0, 0
+ lsls r4, 16
+ lsrs r4, 16
+ adds r0, r5, 0
+ movs r1, 0xB4
+ bl __udivsi3
+ movs r1, 0x1
+ ands r0, r1
+ ldr r1, _08040E5C
+ lsls r4, 1
+ adds r4, r1
+ ldrh r1, [r4]
+ cmp r0, 0
+ bne _08040E60
+ lsls r0, r1, 16
+ b _08040E64
+ .align 2, 0
+_08040E5C: .4byte gSineDegreeTable
+_08040E60:
+ lsls r0, r1, 16
+ negs r0, r0
+_08040E64:
+ asrs r0, 16
+ pop {r4,r5}
+ pop {r1}
+ bx r1
+ thumb_func_end sine2
+
+ thumb_func_start cosine2
+cosine2: @ 8040E6C
+ push {lr}
+ lsls r0, 16
+ movs r1, 0xB4
+ lsls r1, 15
+ adds r0, r1
+ lsrs r0, 16
+ bl sine2
+ lsls r0, 16
+ asrs r0, 16
+ pop {r1}
+ bx r1
+ thumb_func_end cosine2