.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 SetMonBoxData _0803D2E6: pop {r0} bx r0 thumb_func_end SetMonData thumb_func_start SetMonBoxData SetMonBoxData: @ 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 DecryptMon adds r0, r7, 0 bl pokemon_calc_checksum 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 EncryptMon 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 pokemon_calc_checksum strh r0, [r7, 0x1C] adds r0, r7, 0 bl EncryptMon _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 SetMonBoxData 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 GetMonBoxData 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 zero_enemy_party_data 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 create_pokemon_set_level 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 GetMonBoxData 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 pokemon_calc_effective_stats 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 pokemon_calc_effective_stats 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 pokemon_calc_effective_stats 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 gLevelUpLearnsetPointers _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 gLevelUpLearnsetPointers _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 gLevelUpLearnsetPointers _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 GetMonBoxData cmp r0, 0 beq _08040B7C adds r0, r5, 0 adds r1, r4, 0 movs r2, 0 bl GetMonBoxData adds r4, r0, 0 lsls r4, 16 lsrs r4, 16 adds r0, r5, 0 movs r1, 0x15 movs r2, 0 bl GetMonBoxData 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 SetMonBoxData _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