.include "asm/macros.inc" .include "constants/constants.inc" .syntax unified .text thumb_func_start sub_803F5B4 sub_803F5B4: @ 803F5B4 push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 adds r1, r0, 0 movs r6, 0 cmp r0, 0x1 beq _0803F608 cmp r0, 0x1 bgt _0803F5CC cmp r0, 0 beq _0803F5D2 b _0803F68A _0803F5CC: cmp r1, 0x2 beq _0803F650 b _0803F68A _0803F5D2: movs r5, 0 ldr r0, _0803F5FC @ =gActiveBattler ldrb r3, [r0] ldr r4, _0803F600 @ =gAbsentBattlerFlags ldr r2, _0803F604 @ =gBitTable _0803F5DC: cmp r5, r3 beq _0803F5F0 ldrb r0, [r4] ldr r1, [r2] ands r0, r1 cmp r0, 0 bne _0803F5F0 adds r0, r6, 0x1 lsls r0, 24 lsrs r6, r0, 24 _0803F5F0: adds r2, 0x4 adds r5, 0x1 cmp r5, 0x3 ble _0803F5DC b _0803F68A .align 2, 0 _0803F5FC: .4byte gActiveBattler _0803F600: .4byte gAbsentBattlerFlags _0803F604: .4byte gBitTable _0803F608: movs r5, 0 _0803F60A: lsls r0, r5, 24 lsrs r0, 24 bl GetBankSide adds r4, r0, 0 ldr r0, _0803F644 @ =sBattler_AI ldrb r0, [r0] bl GetBankSide lsls r4, 24 lsls r0, 24 cmp r4, r0 bne _0803F63C ldr r0, _0803F648 @ =gAbsentBattlerFlags ldrb r1, [r0] ldr r2, _0803F64C @ =gBitTable lsls r0, r5, 2 adds r0, r2 ldr r0, [r0] ands r1, r0 cmp r1, 0 bne _0803F63C adds r0, r6, 0x1 lsls r0, 24 lsrs r6, r0, 24 _0803F63C: adds r5, 0x1 cmp r5, 0x3 ble _0803F60A b _0803F68A .align 2, 0 _0803F644: .4byte sBattler_AI _0803F648: .4byte gAbsentBattlerFlags _0803F64C: .4byte gBitTable _0803F650: movs r5, 0 _0803F652: lsls r0, r5, 24 lsrs r0, 24 bl GetBankSide adds r4, r0, 0 ldr r0, _0803F694 @ =gBattlerTarget ldrb r0, [r0] bl GetBankSide lsls r4, 24 lsls r0, 24 cmp r4, r0 bne _0803F684 ldr r0, _0803F698 @ =gAbsentBattlerFlags ldrb r1, [r0] ldr r2, _0803F69C @ =gBitTable lsls r0, r5, 2 adds r0, r2 ldr r0, [r0] ands r1, r0 cmp r1, 0 bne _0803F684 adds r0, r6, 0x1 lsls r0, 24 lsrs r6, r0, 24 _0803F684: adds r5, 0x1 cmp r5, 0x3 ble _0803F652 _0803F68A: adds r0, r6, 0 pop {r4-r6} pop {r1} bx r1 .align 2, 0 _0803F694: .4byte gBattlerTarget _0803F698: .4byte gAbsentBattlerFlags _0803F69C: .4byte gBitTable thumb_func_end sub_803F5B4 thumb_func_start GetDefaultMoveTarget GetDefaultMoveTarget: @ 803F6A0 push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 bl GetBankIdentity movs r1, 0x1 movs r6, 0x1 adds r4, r6, 0 ands r4, r0 eors r4, r1 adds r5, r4, 0 ldr r0, _0803F6C4 @ =gBattleTypeFlags ldr r0, [r0] ands r0, r6 cmp r0, 0 bne _0803F6C8 adds r0, r4, 0 b _0803F712 .align 2, 0 _0803F6C4: .4byte gBattleTypeFlags _0803F6C8: movs r0, 0 bl sub_803F5B4 lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bls _0803F6EC bl Random adds r1, r6, 0 ands r1, r0 cmp r1, 0 bne _0803F6E8 movs r0, 0x2 eors r0, r4 b _0803F712 _0803F6E8: adds r0, r4, 0 b _0803F712 _0803F6EC: ldr r0, _0803F704 @ =gAbsentBattlerFlags ldrb r1, [r0] ldr r2, _0803F708 @ =gBitTable lsls r0, r4, 2 adds r0, r2 ldr r0, [r0] ands r1, r0 cmp r1, 0 bne _0803F70C adds r0, r4, 0 b _0803F712 .align 2, 0 _0803F704: .4byte gAbsentBattlerFlags _0803F708: .4byte gBitTable _0803F70C: movs r0, 0x2 eors r5, r0 adds r0, r5, 0 _0803F712: bl GetBankByIdentity lsls r0, 24 lsrs r0, 24 pop {r4-r6} pop {r1} bx r1 thumb_func_end GetDefaultMoveTarget thumb_func_start GetMonGender GetMonGender: @ 803F720 push {lr} bl GetBoxMonGender lsls r0, 24 lsrs r0, 24 pop {r1} bx r1 thumb_func_end GetMonGender thumb_func_start GetBoxMonGender GetBoxMonGender: @ 803F730 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0xB movs r2, 0 bl GetBoxMonData lsls r0, 16 lsrs r5, r0, 16 adds r0, r4, 0 movs r1, 0 movs r2, 0 bl GetBoxMonData adds r2, r0, 0 ldr r1, _0803F780 @ =gBaseStats lsls r0, r5, 3 subs r0, r5 lsls r0, 2 adds r0, r1 ldrb r0, [r0, 0x10] cmp r0, 0 beq _0803F786 cmp r0, 0 blt _0803F768 cmp r0, 0xFF bgt _0803F768 cmp r0, 0xFE bge _0803F786 _0803F768: ldr r1, _0803F780 @ =gBaseStats lsls r0, r5, 3 subs r0, r5 lsls r0, 2 adds r0, r1 ldrb r1, [r0, 0x10] movs r0, 0xFF ands r0, r2 cmp r1, r0 bhi _0803F784 movs r0, 0 b _0803F786 .align 2, 0 _0803F780: .4byte gBaseStats _0803F784: movs r0, 0xFE _0803F786: pop {r4,r5} pop {r1} bx r1 thumb_func_end GetBoxMonGender thumb_func_start GetGenderFromSpeciesAndPersonality GetGenderFromSpeciesAndPersonality: @ 803F78C push {lr} adds r3, r1, 0 lsls r0, 16 lsrs r2, r0, 16 ldr r1, _0803F7C8 @ =gBaseStats lsls r0, r2, 3 subs r0, r2 lsls r0, 2 adds r0, r1 ldrb r0, [r0, 0x10] cmp r0, 0 beq _0803F7CE cmp r0, 0 blt _0803F7B0 cmp r0, 0xFF bgt _0803F7B0 cmp r0, 0xFE bge _0803F7CE _0803F7B0: lsls r0, r2, 3 subs r0, r2 lsls r0, 2 adds r0, r1 ldrb r1, [r0, 0x10] movs r0, 0xFF ands r0, r3 cmp r1, r0 bhi _0803F7CC movs r0, 0 b _0803F7CE .align 2, 0 _0803F7C8: .4byte gBaseStats _0803F7CC: movs r0, 0xFE _0803F7CE: pop {r1} bx r1 thumb_func_end GetGenderFromSpeciesAndPersonality thumb_func_start sub_803F7D4 sub_803F7D4: @ 803F7D4 push {r4-r6,lr} lsls r0, 16 lsrs r5, r0, 16 lsls r1, 24 lsrs r4, r1, 24 ldr r0, _0803F808 @ =gUnknown_202401C ldr r2, [r0] cmp r2, 0 beq _0803F810 cmp r4, 0x3 bls _0803F7EC movs r4, 0 _0803F7EC: ldr r0, _0803F80C @ =gUnknown_20244DC lsls r1, r4, 1 adds r1, r4 lsls r1, 3 adds r1, r2, r1 adds r2, r0, 0 adds r1, 0x14 ldm r1!, {r3,r4,r6} stm r2!, {r3,r4,r6} ldm r1!, {r3,r4,r6} stm r2!, {r3,r4,r6} adds r3, r0, 0 b _0803F84C .align 2, 0 _0803F808: .4byte gUnknown_202401C _0803F80C: .4byte gUnknown_20244DC _0803F810: ldr r0, _0803F828 @ =gUnknown_20244F4 ldr r1, [r0] cmp r1, 0 beq _0803F830 ldrb r0, [r1] lsrs r0, 4 cmp r4, r0 blt _0803F822 movs r4, 0 _0803F822: ldr r3, _0803F82C @ =gUnknown_20244DC ldr r2, [r1, 0x10] b _0803F83A .align 2, 0 _0803F828: .4byte gUnknown_20244F4 _0803F82C: .4byte gUnknown_20244DC _0803F830: cmp r4, 0x3 bls _0803F836 movs r4, 0 _0803F836: ldr r3, _0803F858 @ =gUnknown_20244DC ldr r2, _0803F85C @ =gUnknown_825DEF0 _0803F83A: lsls r0, r4, 1 adds r0, r4 lsls r0, 3 adds r1, r3, 0 adds r0, r2 ldm r0!, {r2,r4,r6} stm r1!, {r2,r4,r6} ldm r0!, {r2,r4,r6} stm r1!, {r2,r4,r6} _0803F84C: strh r5, [r3, 0x2] ldr r0, _0803F860 @ =gUnknown_82349BC str r0, [r3, 0x8] pop {r4-r6} pop {r0} bx r0 .align 2, 0 _0803F858: .4byte gUnknown_20244DC _0803F85C: .4byte gUnknown_825DEF0 _0803F860: .4byte gUnknown_82349BC thumb_func_end sub_803F7D4 thumb_func_start sub_803F864 sub_803F864: @ 803F864 push {r4-r6,lr} lsls r0, 16 lsrs r4, r0, 16 lsls r1, 24 lsrs r3, r1, 24 ldr r0, _0803F89C @ =gUnknown_20244DC strh r4, [r0, 0x2] adds r5, r0, 0 cmp r3, 0 beq _0803F87C cmp r3, 0x2 bne _0803F8A8 _0803F87C: ldr r2, _0803F8A0 @ =gUnknown_825DF50 lsls r0, r4, 1 adds r0, r4 lsls r0, 3 adds r1, r5, 0 adds r0, r2 ldm r0!, {r2,r3,r6} stm r1!, {r2,r3,r6} ldm r0!, {r2,r3,r6} stm r1!, {r2,r3,r6} ldr r1, _0803F8A4 @ =gUnknown_8239F74 lsls r0, r4, 2 adds r0, r1 ldr r0, [r0] b _0803F8E8 .align 2, 0 _0803F89C: .4byte gUnknown_20244DC _0803F8A0: .4byte gUnknown_825DF50 _0803F8A4: .4byte gUnknown_8239F74 _0803F8A8: ldr r0, _0803F8C8 @ =gUnknown_202401C ldr r1, [r0] cmp r1, 0 beq _0803F8CC lsls r0, r3, 1 adds r0, r3 lsls r0, 3 adds r0, r1, r0 adds r1, r5, 0 adds r0, 0x14 ldm r0!, {r2,r3,r6} stm r1!, {r2,r3,r6} ldm r0!, {r2,r3,r6} stm r1!, {r2,r3,r6} b _0803F8E0 .align 2, 0 _0803F8C8: .4byte gUnknown_202401C _0803F8CC: ldr r0, _0803F8F0 @ =gUnknown_825DEF0 lsls r1, r3, 1 adds r1, r3 lsls r1, 3 adds r2, r5, 0 adds r1, r0 ldm r1!, {r0,r3,r6} stm r2!, {r0,r3,r6} ldm r1!, {r0,r3,r6} stm r2!, {r0,r3,r6} _0803F8E0: ldr r0, _0803F8F4 @ =gUnknown_82390DC lsls r1, r4, 2 adds r1, r0 ldr r0, [r1] _0803F8E8: str r0, [r5, 0x8] pop {r4-r6} pop {r0} bx r0 .align 2, 0 _0803F8F0: .4byte gUnknown_825DEF0 _0803F8F4: .4byte gUnknown_82390DC thumb_func_end sub_803F864 thumb_func_start EncryptBoxMon EncryptBoxMon: @ 803F8F8 push {r4,lr} adds r3, r0, 0 movs r4, 0 adds r2, r3, 0 adds r2, 0x20 _0803F902: ldr r0, [r2] ldr r1, [r3] eors r0, r1 str r0, [r2] ldr r1, [r3, 0x4] eors r0, r1 stm r2!, {r0} adds r4, 0x1 cmp r4, 0xB bls _0803F902 pop {r4} pop {r0} bx r0 thumb_func_end EncryptBoxMon thumb_func_start DecryptBoxMon DecryptBoxMon: @ 803F91C push {r4,lr} adds r3, r0, 0 movs r4, 0 adds r2, r3, 0 adds r2, 0x20 _0803F926: ldr r0, [r2] ldr r1, [r3, 0x4] eors r0, r1 str r0, [r2] ldr r1, [r3] eors r0, r1 stm r2!, {r0} adds r4, 0x1 cmp r4, 0xB bls _0803F926 pop {r4} pop {r0} bx r0 thumb_func_end DecryptBoxMon thumb_func_start GetSubstruct GetSubstruct: @ 803F940 push {r4-r6,lr} adds r5, r0, 0 adds r0, r1, 0 lsls r2, 24 lsrs r4, r2, 24 movs r6, 0 movs r1, 0x18 bl __umodsi3 cmp r0, 0x17 bls _0803F958 b _0803FBE0 _0803F958: lsls r0, 2 ldr r1, _0803F964 @ =_0803F968 adds r0, r1 ldr r0, [r0] mov pc, r0 .align 2, 0 _0803F964: .4byte _0803F968 .align 2, 0 _0803F968: .4byte _0803F9C8 .4byte _0803F9EC .4byte _0803FA08 .4byte _0803FA1E .4byte _0803FA34 .4byte _0803FA50 .4byte _0803FA66 .4byte _0803FA7C .4byte _0803FA8C .4byte _0803FAAA .4byte _0803FAC2 .4byte _0803FAD2 .4byte _0803FAE6 .4byte _0803FAF8 .4byte _0803FB0A .4byte _0803FB1C .4byte _0803FB2E .4byte _0803FB40 .4byte _0803FB52 .4byte _0803FB68 .4byte _0803FB7C .4byte _0803FB8A .4byte _0803FB9C .4byte _0803FBB0 _0803F9C8: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803F9D2 b _0803FBD8 _0803F9D2: cmp r4, 0x1 bgt _0803F9DE _0803F9D6: cmp r4, 0 bne _0803F9DC b _0803FBDE _0803F9DC: b _0803FBE0 _0803F9DE: cmp r4, 0x2 bne _0803F9E4 b _0803FBD2 _0803F9E4: cmp r4, 0x3 beq _0803F9EA b _0803FBE0 _0803F9EA: b _0803FBCC _0803F9EC: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803F9F6 b _0803FBD8 _0803F9F6: cmp r4, 0x1 ble _0803F9D6 _0803F9FA: cmp r4, 0x2 bne _0803FA00 b _0803FBCC _0803FA00: cmp r4, 0x3 beq _0803FA06 b _0803FBE0 _0803FA06: b _0803FBD2 _0803FA08: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA12 b _0803FBD2 _0803FA12: cmp r4, 0x1 ble _0803F9D6 cmp r4, 0x2 bne _0803FA1C b _0803FBD8 _0803FA1C: b _0803F9E4 _0803FA1E: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA28 b _0803FBCC _0803FA28: cmp r4, 0x1 ble _0803F9D6 cmp r4, 0x2 bne _0803FA32 b _0803FBD8 _0803FA32: b _0803FA00 _0803FA34: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA3E b _0803FBD2 _0803FA3E: cmp r4, 0x1 ble _0803F9D6 _0803FA42: cmp r4, 0x2 bne _0803FA48 b _0803FBCC _0803FA48: cmp r4, 0x3 beq _0803FA4E b _0803FBE0 _0803FA4E: b _0803FBD8 _0803FA50: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA5A b _0803FBCC _0803FA5A: cmp r4, 0x1 ble _0803F9D6 cmp r4, 0x2 bne _0803FA64 b _0803FBD2 _0803FA64: b _0803FA48 _0803FA66: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA70 b _0803FBDE _0803FA70: cmp r4, 0x1 bgt _0803F9DE _0803FA74: cmp r4, 0 bne _0803FA7A b _0803FBD8 _0803FA7A: b _0803FBE0 _0803FA7C: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA86 b _0803FBDE _0803FA86: cmp r4, 0x1 ble _0803FA74 b _0803F9FA _0803FA8C: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FA96 b _0803FBDE _0803FA96: cmp r4, 0x1 bgt _0803FAA2 _0803FA9A: cmp r4, 0 bne _0803FAA0 b _0803FBD2 _0803FAA0: b _0803FBE0 _0803FAA2: cmp r4, 0x2 bne _0803FAA8 b _0803FBD8 _0803FAA8: b _0803F9E4 _0803FAAA: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FAB4 b _0803FBDE _0803FAB4: cmp r4, 0x1 bgt _0803FABA b _0803FBBC _0803FABA: cmp r4, 0x2 bne _0803FAC0 b _0803FBD8 _0803FAC0: b _0803FA00 _0803FAC2: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FACC b _0803FBDE _0803FACC: cmp r4, 0x1 ble _0803FA9A b _0803FA42 _0803FAD2: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 bne _0803FADC b _0803FBDE _0803FADC: cmp r4, 0x1 ble _0803FBBC cmp r4, 0x2 beq _0803FBD2 b _0803FA48 _0803FAE6: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD2 cmp r4, 0x1 ble _0803FA74 cmp r4, 0x2 beq _0803FBDE b _0803F9E4 _0803FAF8: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBCC cmp r4, 0x1 ble _0803FA74 cmp r4, 0x2 beq _0803FBDE b _0803FA00 _0803FB0A: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD8 cmp r4, 0x1 ble _0803FA9A cmp r4, 0x2 beq _0803FBDE b _0803F9E4 _0803FB1C: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD8 cmp r4, 0x1 ble _0803FBBC cmp r4, 0x2 beq _0803FBDE b _0803FA00 _0803FB2E: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBCC cmp r4, 0x1 ble _0803FA9A cmp r4, 0x2 beq _0803FBDE b _0803FA48 _0803FB40: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD2 cmp r4, 0x1 ble _0803FBBC cmp r4, 0x2 beq _0803FBDE b _0803FA48 _0803FB52: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD2 cmp r4, 0x1 ble _0803FA74 _0803FB5E: cmp r4, 0x2 beq _0803FBCC _0803FB62: cmp r4, 0x3 bne _0803FBE0 b _0803FBDE _0803FB68: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBCC cmp r4, 0x1 bgt _0803FB76 b _0803FA74 _0803FB76: cmp r4, 0x2 beq _0803FBD2 b _0803FB62 _0803FB7C: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD8 cmp r4, 0x1 ble _0803FA9A b _0803FB5E _0803FB8A: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD8 cmp r4, 0x1 ble _0803FBBC cmp r4, 0x2 beq _0803FBD2 b _0803FB62 _0803FB9C: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBCC cmp r4, 0x1 bgt _0803FBAA b _0803FA9A _0803FBAA: cmp r4, 0x2 beq _0803FBD8 b _0803FB62 _0803FBB0: adds r0, r5, 0 adds r0, 0x20 cmp r4, 0x1 beq _0803FBD2 cmp r4, 0x1 bgt _0803FBC2 _0803FBBC: cmp r4, 0 beq _0803FBCC b _0803FBE0 _0803FBC2: cmp r4, 0x2 beq _0803FBD8 cmp r4, 0x3 beq _0803FBDE b _0803FBE0 _0803FBCC: adds r6, r5, 0 adds r6, 0x44 b _0803FBE0 _0803FBD2: adds r6, r5, 0 adds r6, 0x38 b _0803FBE0 _0803FBD8: adds r6, r5, 0 adds r6, 0x2C b _0803FBE0 _0803FBDE: adds r6, r0, 0 _0803FBE0: adds r0, r6, 0 pop {r4-r6} pop {r1} bx r1 thumb_func_end GetSubstruct thumb_func_start GetMonData GetMonData: @ 803FBE8 push {r4,lr} adds r4, r0, 0 adds r3, r1, 0 adds r0, r3, 0 subs r0, 0x37 cmp r0, 0x21 bls _0803FBF8 b _0803FD36 _0803FBF8: lsls r0, 2 ldr r1, _0803FC04 @ =_0803FC08 adds r0, r1 ldr r0, [r0] mov pc, r0 .align 2, 0 _0803FC04: .4byte _0803FC08 .align 2, 0 _0803FC08: .4byte _0803FC90 .4byte _0803FC94 .4byte _0803FC9C .4byte _0803FCA4 .4byte _0803FCAC .4byte _0803FCBE .4byte _0803FCD0 .4byte _0803FCE2 .4byte _0803FCF4 .4byte _0803FD2E .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD36 .4byte _0803FD06 .4byte _0803FD0E .4byte _0803FD16 .4byte _0803FD1E .4byte _0803FD26 _0803FC90: ldr r0, [r4, 0x50] b _0803FD3E _0803FC94: adds r0, r4, 0 adds r0, 0x54 ldrb r0, [r0] b _0803FD3E _0803FC9C: adds r0, r4, 0 adds r0, 0x56 ldrh r0, [r0] b _0803FD3E _0803FCA4: adds r0, r4, 0 adds r0, 0x58 ldrh r0, [r0] b _0803FD3E _0803FCAC: adds r0, r4, 0 movs r1, 0x1 bl GetDeoxysStat lsls r0, 16 lsrs r0, 16 cmp r0, 0 bne _0803FD3E b _0803FD06 _0803FCBE: adds r0, r4, 0 movs r1, 0x2 bl GetDeoxysStat lsls r0, 16 lsrs r0, 16 cmp r0, 0 bne _0803FD3E b _0803FD0E _0803FCD0: adds r0, r4, 0 movs r1, 0x3 bl GetDeoxysStat lsls r0, 16 lsrs r0, 16 cmp r0, 0 bne _0803FD3E b _0803FD16 _0803FCE2: adds r0, r4, 0 movs r1, 0x4 bl GetDeoxysStat lsls r0, 16 lsrs r0, 16 cmp r0, 0 bne _0803FD3E b _0803FD1E _0803FCF4: adds r0, r4, 0 movs r1, 0x5 bl GetDeoxysStat lsls r0, 16 lsrs r0, 16 cmp r0, 0 bne _0803FD3E b _0803FD26 _0803FD06: adds r0, r4, 0 adds r0, 0x5A ldrh r0, [r0] b _0803FD3E _0803FD0E: adds r0, r4, 0 adds r0, 0x5C ldrh r0, [r0] b _0803FD3E _0803FD16: adds r0, r4, 0 adds r0, 0x5E ldrh r0, [r0] b _0803FD3E _0803FD1E: adds r0, r4, 0 adds r0, 0x60 ldrh r0, [r0] b _0803FD3E _0803FD26: adds r0, r4, 0 adds r0, 0x62 ldrh r0, [r0] b _0803FD3E _0803FD2E: adds r0, r4, 0 adds r0, 0x55 ldrb r0, [r0] b _0803FD3E _0803FD36: adds r0, r4, 0 adds r1, r3, 0 bl GetBoxMonData _0803FD3E: pop {r4} pop {r1} bx r1 thumb_func_end GetMonData thumb_func_start GetBoxMonData GetBoxMonData: @ 803FD44 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x4 mov r8, r0 str r1, [sp] adds r6, r2, 0 movs r4, 0 mov r9, r4 mov r10, r4 movs r7, 0 movs r5, 0 cmp r1, 0xA ble _0803FDC2 ldr r1, [r0] movs r2, 0 bl GetSubstruct mov r9, r0 mov r0, r8 ldr r1, [r0] movs r2, 0x1 bl GetSubstruct mov r10, r0 mov r2, r8 ldr r1, [r2] mov r0, r8 movs r2, 0x2 bl GetSubstruct adds r7, r0, 0 mov r0, r8 ldr r1, [r0] movs r2, 0x3 bl GetSubstruct adds r5, r0, 0 mov r0, r8 bl DecryptBoxMon mov r0, r8 bl CalculateBoxMonChecksum lsls r0, 16 lsrs r0, 16 mov r1, r8 ldrh r1, [r1, 0x1C] cmp r0, r1 beq _0803FDC2 mov r2, r8 ldrb r0, [r2, 0x13] movs r1, 0x1 orrs r0, r1 movs r1, 0x4 orrs r0, r1 strb r0, [r2, 0x13] ldrb r0, [r5, 0x7] movs r1, 0x40 orrs r0, r1 strb r0, [r5, 0x7] _0803FDC2: ldr r0, [sp] cmp r0, 0x53 bls _0803FDCA b _0804035C _0803FDCA: lsls r0, 2 ldr r1, _0803FDD4 @ =_0803FDD8 adds r0, r1 ldr r0, [r0] mov pc, r0 .align 2, 0 _0803FDD4: .4byte _0803FDD8 .align 2, 0 _0803FDD8: .4byte _0803FF28 .4byte _0803FF2E .4byte _0803FF34 .4byte _0803FFE8 .4byte _0803FFEE .4byte _0803FFF4 .4byte _0803FFFA .4byte _08040000 .4byte _0804001C .4byte _08040022 .4byte _08040028 .4byte _0804002E .4byte _08040046 .4byte _0804005E .4byte _0804005E .4byte _0804005E .4byte _0804005E .4byte _0804006A .4byte _0804006A .4byte _0804006A .4byte _0804006A .4byte _08040052 .4byte _0804008C .4byte _08040090 .4byte _08040094 .4byte _0804004C .4byte _08040074 .4byte _08040078 .4byte _0804007C .4byte _08040080 .4byte _08040084 .4byte _08040088 .4byte _08040058 .4byte _08040098 .4byte _080400A4 .4byte _080400A8 .4byte _080400AC .4byte _080400B4 .4byte _080400BC .4byte _080400C6 .4byte _080400CE .4byte _080400D6 .4byte _080400DE .4byte _080400E6 .4byte _080400EE .4byte _080400F6 .4byte _080400FA .4byte _0804009C .4byte _080400A0 .4byte _080400C0 .4byte _08040100 .4byte _08040108 .4byte _08040110 .4byte _08040118 .4byte _08040120 .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _0804035C .4byte _08040186 .4byte _080401AC .4byte _08040128 .4byte _0804012E .4byte _08040132 .4byte _08040136 .4byte _0804013A .4byte _08040142 .4byte _0804014A .4byte _08040152 .4byte _0804015A .4byte _08040160 .4byte _08040168 .4byte _08040170 .4byte _08040178 .4byte _08040180 .4byte _080401E6 .4byte _08040240 .4byte _080402C2 _0803FF28: mov r1, r8 ldr r4, [r1] b _0804035C _0803FF2E: mov r2, r8 ldr r4, [r2, 0x4] b _0804035C _0803FF34: mov r0, r8 ldrb r1, [r0, 0x13] movs r0, 0x1 ands r0, r1 cmp r0, 0 beq _0803FF6C movs r4, 0 ldr r0, _0803FF68 @ =gUnknown_83FE868 ldrb r1, [r0] adds r2, r0, 0 cmp r1, 0xFF beq _08040014 adds r3, r2, 0 _0803FF4E: adds r0, r6, r4 adds r1, r4, r3 ldrb r1, [r1] strb r1, [r0] adds r4, 0x1 cmp r4, 0x9 bhi _08040014 adds r0, r4, r2 ldrb r0, [r0] cmp r0, 0xFF bne _0803FF4E b _08040014 .align 2, 0 _0803FF68: .4byte gUnknown_83FE868 _0803FF6C: movs r0, 0x4 ands r0, r1 cmp r0, 0 beq _0803FF8C ldr r1, _0803FF88 @ =gUnknown_8415A62 adds r0, r6, 0 bl StringCopy adds r0, r6, 0 bl StringLength lsls r0, 16 lsrs r4, r0, 16 b _0804035C .align 2, 0 _0803FF88: .4byte gUnknown_8415A62 _0803FF8C: mov r1, r8 ldrb r0, [r1, 0x12] cmp r0, 0x1 bne _0803FFD2 movs r0, 0xFC strb r0, [r6] movs r0, 0x15 strb r0, [r6, 0x1] movs r4, 0x2 movs r3, 0 ldrb r0, [r1, 0x8] cmp r0, 0xFF beq _0803FFC0 mov r2, r8 adds r2, 0x8 _0803FFAA: adds r1, r6, r4 ldrb r0, [r2] strb r0, [r1] adds r4, 0x1 adds r2, 0x1 adds r3, 0x1 cmp r3, 0x5 bgt _0803FFC0 ldrb r0, [r2] cmp r0, 0xFF bne _0803FFAA _0803FFC0: adds r1, r6, r4 movs r0, 0xFC strb r0, [r1] adds r4, 0x1 adds r1, r6, r4 movs r0, 0x16 strb r0, [r1] adds r4, 0x1 b _08040014 _0803FFD2: movs r4, 0 mov r2, r8 adds r2, 0x8 _0803FFD8: adds r0, r6, r4 adds r1, r2, r4 ldrb r1, [r1] strb r1, [r0] adds r4, 0x1 cmp r4, 0x9 bls _0803FFD8 b _08040014 _0803FFE8: mov r2, r8 ldrb r4, [r2, 0x12] b _0804035C _0803FFEE: mov r6, r8 ldrb r0, [r6, 0x13] b _08040162 _0803FFF4: mov r1, r8 ldrb r0, [r1, 0x13] b _0804016A _0803FFFA: mov r2, r8 ldrb r0, [r2, 0x13] b _08040172 _08040000: movs r4, 0 mov r2, r8 adds r2, 0x14 _08040006: adds r0, r6, r4 adds r1, r2, r4 ldrb r1, [r1] strb r1, [r0] adds r4, 0x1 cmp r4, 0x6 bls _08040006 _08040014: adds r1, r6, r4 movs r0, 0xFF strb r0, [r1] b _0804035C _0804001C: mov r6, r8 ldrb r4, [r6, 0x1B] b _0804035C _08040022: mov r0, r8 ldrh r4, [r0, 0x1C] b _0804035C _08040028: mov r1, r8 ldrh r4, [r1, 0x1E] b _0804035C _0804002E: mov r2, r8 ldrb r1, [r2, 0x13] movs r0, 0x1 ands r0, r1 movs r4, 0xCE lsls r4, 1 cmp r0, 0 beq _08040040 b _0804035C _08040040: mov r6, r9 ldrh r4, [r6] b _0804035C _08040046: mov r0, r9 ldrh r4, [r0, 0x2] b _0804035C _0804004C: mov r1, r9 ldr r4, [r1, 0x4] b _0804035C _08040052: mov r2, r9 ldrb r4, [r2, 0x8] b _0804035C _08040058: mov r6, r9 ldrb r4, [r6, 0x9] b _0804035C _0804005E: ldr r0, [sp] subs r0, 0xD lsls r0, 1 add r0, r10 ldrh r4, [r0] b _0804035C _0804006A: ldr r0, [sp] add r0, r10 subs r0, 0x9 ldrb r4, [r0] b _0804035C _08040074: ldrb r4, [r7] b _0804035C _08040078: ldrb r4, [r7, 0x1] b _0804035C _0804007C: ldrb r4, [r7, 0x2] b _0804035C _08040080: ldrb r4, [r7, 0x3] b _0804035C _08040084: ldrb r4, [r7, 0x4] b _0804035C _08040088: ldrb r4, [r7, 0x5] b _0804035C _0804008C: ldrb r4, [r7, 0x6] b _0804035C _08040090: ldrb r4, [r7, 0x7] b _0804035C _08040094: ldrb r4, [r7, 0x8] b _0804035C _08040098: ldrb r4, [r7, 0x9] b _0804035C _0804009C: ldrb r4, [r7, 0xA] b _0804035C _080400A0: ldrb r4, [r7, 0xB] b _0804035C _080400A4: ldrb r4, [r5] b _0804035C _080400A8: ldrb r4, [r5, 0x1] b _0804035C _080400AC: ldrb r0, [r5, 0x2] lsls r0, 25 lsrs r4, r0, 25 b _0804035C _080400B4: ldrh r0, [r5, 0x2] lsls r0, 21 lsrs r4, r0, 28 b _0804035C _080400BC: ldrb r0, [r5, 0x3] b _0804017A _080400C0: ldrb r0, [r5, 0x3] lsrs r4, r0, 7 b _0804035C _080400C6: ldrb r0, [r5, 0x4] lsls r0, 27 lsrs r4, r0, 27 b _0804035C _080400CE: ldrh r0, [r5, 0x4] lsls r0, 22 lsrs r4, r0, 27 b _0804035C _080400D6: ldrb r0, [r5, 0x5] lsls r0, 25 lsrs r4, r0, 27 b _0804035C _080400DE: ldr r0, [r5, 0x4] lsls r0, 12 lsrs r4, r0, 27 b _0804035C _080400E6: ldrh r0, [r5, 0x6] lsls r0, 23 lsrs r4, r0, 27 b _0804035C _080400EE: ldrb r0, [r5, 0x7] lsls r0, 26 lsrs r4, r0, 27 b _0804035C _080400F6: ldrb r0, [r5, 0x7] b _08040154 _080400FA: ldrb r0, [r5, 0x7] lsrs r4, r0, 7 b _0804035C _08040100: ldrb r0, [r5, 0x8] lsls r0, 29 lsrs r4, r0, 29 b _0804035C _08040108: ldrb r0, [r5, 0x8] lsls r0, 26 lsrs r4, r0, 29 b _0804035C _08040110: ldrh r0, [r5, 0x8] lsls r0, 23 lsrs r4, r0, 29 b _0804035C _08040118: ldrb r0, [r5, 0x9] lsls r0, 28 lsrs r4, r0, 29 b _0804035C _08040120: ldrb r0, [r5, 0x9] lsls r0, 25 lsrs r4, r0, 29 b _0804035C _08040128: ldrb r0, [r5, 0x9] lsrs r4, r0, 7 b _0804035C _0804012E: ldrb r0, [r5, 0xA] b _08040162 _08040132: ldrb r0, [r5, 0xA] b _0804016A _08040136: ldrb r0, [r5, 0xA] b _08040172 _0804013A: ldrb r0, [r5, 0xA] lsls r0, 28 lsrs r4, r0, 31 b _0804035C _08040142: ldrb r0, [r5, 0xA] lsls r0, 27 lsrs r4, r0, 31 b _0804035C _0804014A: ldrb r0, [r5, 0xA] lsls r0, 26 lsrs r4, r0, 31 b _0804035C _08040152: ldrb r0, [r5, 0xA] _08040154: lsls r0, 25 lsrs r4, r0, 31 b _0804035C _0804015A: ldrb r0, [r5, 0xA] lsrs r4, r0, 7 b _0804035C _08040160: ldrb r0, [r5, 0xB] _08040162: lsls r0, 31 lsrs r4, r0, 31 b _0804035C _08040168: ldrb r0, [r5, 0xB] _0804016A: lsls r0, 30 lsrs r4, r0, 31 b _0804035C _08040170: ldrb r0, [r5, 0xB] _08040172: lsls r0, 29 lsrs r4, r0, 31 b _0804035C _08040178: ldrb r0, [r5, 0xB] _0804017A: lsls r0, 25 lsrs r4, r0, 28 b _0804035C _08040180: ldrb r0, [r5, 0xB] lsrs r4, r0, 7 b _0804035C _08040186: mov r0, r9 ldrh r4, [r0] cmp r4, 0 bne _08040190 b _0804035C _08040190: ldrb r0, [r5, 0x7] lsls r0, 25 cmp r0, 0 blt _080401A6 mov r2, r8 ldrb r1, [r2, 0x13] movs r0, 0x1 ands r0, r1 cmp r0, 0 bne _080401A6 b _0804035C _080401A6: movs r4, 0xCE lsls r4, 1 b _0804035C _080401AC: ldrb r0, [r5, 0x4] lsls r0, 27 lsrs r4, r0, 27 ldrh r1, [r5, 0x4] movs r0, 0xF8 lsls r0, 2 ands r0, r1 orrs r4, r0 ldrb r0, [r5, 0x5] lsls r0, 25 lsrs r0, 27 lsls r0, 10 orrs r4, r0 ldr r0, [r5, 0x4] movs r1, 0xF8 lsls r1, 12 ands r0, r1 orrs r4, r0 ldrh r0, [r5, 0x6] lsls r0, 23 lsrs r0, 27 lsls r0, 20 orrs r4, r0 ldrb r0, [r5, 0x7] lsls r0, 26 lsrs r0, 27 lsls r0, 25 orrs r4, r0 b _0804035C _080401E6: mov r1, r9 ldrh r0, [r1] cmp r0, 0 bne _080401F0 b _0804035C _080401F0: ldrb r0, [r5, 0x7] lsls r0, 25 cmp r0, 0 bge _080401FA b _0804035C _080401FA: ldrh r0, [r6] ldr r1, _08040238 @ =0x00000163 cmp r0, r1 bne _08040204 b _0804035C _08040204: mov r2, r10 ldrh r5, [r2] adds r7, r1, 0 adds r2, r6, 0 ldr r1, _0804023C @ =gBitTable _0804020E: ldrh r3, [r2] cmp r5, r3 beq _08040228 mov r6, r10 ldrh r0, [r6, 0x2] cmp r0, r3 beq _08040228 ldrh r0, [r6, 0x4] cmp r0, r3 beq _08040228 ldrh r0, [r6, 0x6] cmp r0, r3 bne _0804022C _08040228: ldr r0, [r1] orrs r4, r0 _0804022C: adds r2, 0x2 adds r1, 0x4 ldrh r0, [r2] cmp r0, r7 bne _0804020E b _0804035C .align 2, 0 _08040238: .4byte 0x00000163 _0804023C: .4byte gBitTable _08040240: movs r4, 0 mov r1, r9 ldrh r0, [r1] cmp r0, 0 bne _0804024C b _0804035C _0804024C: ldrb r0, [r5, 0x7] lsls r0, 25 cmp r0, 0 bge _08040256 b _0804035C _08040256: ldrb r0, [r5, 0x8] lsls r1, r0, 29 lsrs r4, r1, 29 lsls r0, 26 lsrs r0, 29 adds r4, r0 ldrh r0, [r5, 0x8] lsls r0, 23 lsrs r0, 29 adds r4, r0 ldrb r1, [r5, 0x9] lsls r0, r1, 28 lsrs r0, 29 adds r4, r0 lsls r0, r1, 25 lsrs r0, 29 adds r4, r0 lsrs r1, 7 adds r4, r1 ldrb r1, [r5, 0xA] lsls r0, r1, 31 lsrs r0, 31 adds r4, r0 lsls r0, r1, 30 lsrs r0, 31 adds r4, r0 lsls r0, r1, 29 lsrs r0, 31 adds r4, r0 lsls r0, r1, 28 lsrs r0, 31 adds r4, r0 lsls r0, r1, 27 lsrs r0, 31 adds r4, r0 lsls r0, r1, 26 lsrs r0, 31 adds r4, r0 lsls r0, r1, 25 lsrs r0, 31 adds r4, r0 lsrs r1, 7 adds r4, r1 ldrb r1, [r5, 0xB] lsls r0, r1, 31 lsrs r0, 31 adds r4, r0 lsls r0, r1, 30 lsrs r0, 31 adds r4, r0 lsls r1, 29 lsrs r1, 31 adds r4, r1 b _0804035C _080402C2: movs r4, 0 mov r2, r9 ldrh r0, [r2] cmp r0, 0 beq _0804035C ldrb r0, [r5, 0x7] lsls r0, 25 cmp r0, 0 blt _0804035C ldrb r2, [r5, 0x9] lsrs r4, r2, 7 ldrb r1, [r5, 0x8] lsls r0, r1, 29 lsrs r0, 28 orrs r4, r0 lsls r1, 26 lsrs r1, 29 lsls r1, 4 orrs r4, r1 ldrh r0, [r5, 0x8] lsls r0, 23 lsrs r0, 29 lsls r0, 7 orrs r4, r0 lsls r0, r2, 28 lsrs r0, 29 lsls r0, 10 orrs r4, r0 lsls r2, 25 lsrs r2, 29 lsls r2, 13 orrs r4, r2 ldrb r1, [r5, 0xA] lsls r0, r1, 31 lsrs r0, 31 lsls r0, 16 orrs r4, r0 lsls r0, r1, 30 lsrs r0, 31 lsls r0, 17 orrs r4, r0 lsls r0, r1, 29 lsrs r0, 31 lsls r0, 18 orrs r4, r0 lsls r0, r1, 28 lsrs r0, 31 lsls r0, 19 orrs r4, r0 lsls r0, r1, 27 lsrs r0, 31 lsls r0, 20 orrs r4, r0 lsls r0, r1, 26 lsrs r0, 31 lsls r0, 21 orrs r4, r0 lsls r0, r1, 25 lsrs r0, 31 lsls r0, 22 orrs r4, r0 lsrs r1, 7 lsls r1, 23 orrs r4, r1 ldrb r1, [r5, 0xB] lsls r0, r1, 31 lsrs r0, 31 lsls r0, 24 orrs r4, r0 lsls r0, r1, 30 lsrs r0, 31 lsls r0, 25 orrs r4, r0 lsls r1, 29 lsrs r1, 31 lsls r1, 26 orrs r4, r1 _0804035C: ldr r6, [sp] cmp r6, 0xA ble _08040368 mov r0, r8 bl EncryptBoxMon _08040368: adds r0, r4, 0 add sp, 0x4 pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r1} bx r1 thumb_func_end GetBoxMonData thumb_func_start sub_804037C sub_804037C: @ 804037C push {r4,lr} adds r3, r0, 0 adds r4, r1, 0 adds r0, r4, 0 subs r0, 0x37 cmp r0, 0x21 bls _0804038C b _080404C0 _0804038C: lsls r0, 2 ldr r1, _08040398 @ =_0804039C adds r0, r1 ldr r0, [r0] mov pc, r0 .align 2, 0 _08040398: .4byte _0804039C .align 2, 0 _0804039C: .4byte _08040424 .4byte _0804043C .4byte _08040446 .4byte _08040456 .4byte _08040466 .4byte _08040476 .4byte _08040486 .4byte _08040496 .4byte _080404A6 .4byte _080404B6 .4byte _080404C8 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _080404C0 .4byte _08040466 .4byte _08040476 .4byte _08040486 .4byte _08040496 .4byte _080404A6 _08040424: 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 _080404C8 _0804043C: ldrb r1, [r2] adds r0, r3, 0 adds r0, 0x54 strb r1, [r0] b _080404C8 _08040446: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x56 strh r0, [r1] b _080404C8 _08040456: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x58 strh r0, [r1] b _080404C8 _08040466: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x5A strh r0, [r1] b _080404C8 _08040476: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x5C strh r0, [r1] b _080404C8 _08040486: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x5E strh r0, [r1] b _080404C8 _08040496: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x60 strh r0, [r1] b _080404C8 _080404A6: ldrb r0, [r2] ldrb r1, [r2, 0x1] lsls r1, 8 adds r0, r1 adds r1, r3, 0 adds r1, 0x62 strh r0, [r1] b _080404C8 _080404B6: ldrb r1, [r2] adds r0, r3, 0 adds r0, 0x55 strb r1, [r0] b _080404C8 _080404C0: adds r0, r3, 0 adds r1, r4, 0 bl sub_80404D0 _080404C8: pop {r4} pop {r0} bx r0 thumb_func_end sub_804037C thumb_func_start sub_80404D0 sub_80404D0: @ 80404D0 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 _08040550 ldr r1, [r7] adds r0, r7, 0 movs r2, 0 bl GetSubstruct mov r8, r0 ldr r1, [r7] adds r0, r7, 0 movs r2, 0x1 bl GetSubstruct mov r9, r0 ldr r1, [r7] adds r0, r7, 0 movs r2, 0x2 bl GetSubstruct adds r6, r0, 0 ldr r1, [r7] adds r0, r7, 0 movs r2, 0x3 bl GetSubstruct adds r5, r0, 0 adds r0, r7, 0 bl DecryptBoxMon adds r0, r7, 0 bl CalculateBoxMonChecksum lsls r0, 16 lsrs r0, 16 ldrh r1, [r7, 0x1C] cmp r0, r1 beq _08040550 ldrb r0, [r7, 0x13] movs r1, 0x1 orrs r0, r1 movs r1, 0x4 orrs r0, r1 strb r0, [r7, 0x13] ldrb r0, [r5, 0x7] movs r1, 0x40 orrs r0, r1 strb r0, [r5, 0x7] adds r0, r7, 0 bl EncryptBoxMon b _08040AEE _08040550: mov r0, r10 cmp r0, 0x50 bls _08040558 b _08040ADA _08040558: lsls r0, 2 ldr r1, _08040564 @ =_08040568 adds r0, r1 ldr r0, [r0] mov pc, r0 .align 2, 0 _08040564: .4byte _08040568 .align 2, 0 _08040568: .4byte _080406AC .4byte _080406C4 .4byte _080406DC .4byte _080406F2 .4byte _080406F8 .4byte _08040708 .4byte _0804071A .4byte _0804072C .4byte _08040742 .4byte _08040748 .4byte _08040754 .4byte _08040760 .4byte _08040780 .4byte _080407B8 .4byte _080407B8 .4byte _080407B8 .4byte _080407B8 .4byte _080407CC .4byte _080407CC .4byte _080407CC .4byte _080407CC .4byte _080407A8 .4byte _080407FC .4byte _08040802 .4byte _08040808 .4byte _0804078E .4byte _080407D8 .4byte _080407DE .4byte _080407E4 .4byte _080407EA .4byte _080407F0 .4byte _080407F6 .4byte _080407B0 .4byte _0804080E .4byte _08040820 .4byte _08040826 .4byte _0804082C .4byte _08040840 .4byte _08040858 .4byte _0804087E .4byte _08040892 .4byte _080408AC .4byte _080408C2 .4byte _080408DC .4byte _080408F4 .4byte _08040908 .4byte _08040938 .4byte _08040814 .4byte _0804081A .4byte _0804086E .4byte _08040948 .4byte _08040956 .4byte _0804096C .4byte _08040984 .4byte _08040994 .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040ADA .4byte _08040A92 .4byte _080409AA .4byte _080409BA .4byte _080409C8 .4byte _080409D8 .4byte _080409E8 .4byte _080409F8 .4byte _08040A08 .4byte _08040A18 .4byte _08040A2E .4byte _08040A3E .4byte _08040A4C .4byte _08040A5C .4byte _08040A6C .4byte _08040A82 _080406AC: 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 _08040ADA _080406C4: 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 _08040ADA _080406DC: movs r2, 0 adds r3, r7, 0 adds r3, 0x8 _080406E2: adds r0, r3, r2 adds r1, r4, r2 ldrb r1, [r1] strb r1, [r0] adds r2, 0x1 cmp r2, 0x9 ble _080406E2 b _08040ADA _080406F2: ldrb r0, [r4] strb r0, [r7, 0x12] b _08040ADA _080406F8: ldrb r0, [r4] movs r1, 0x1 ands r1, r0 ldrb r2, [r7, 0x13] movs r0, 0x2 negs r0, r0 ands r0, r2 b _08040926 _08040708: 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 _08040926 _0804071A: 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 _08040926 _0804072C: movs r2, 0 adds r3, r7, 0 adds r3, 0x14 _08040732: adds r0, r3, r2 adds r1, r4, r2 ldrb r1, [r1] strb r1, [r0] adds r2, 0x1 cmp r2, 0x6 ble _08040732 b _08040ADA _08040742: ldrb r0, [r4] strb r0, [r7, 0x1B] b _08040ADA _08040748: ldrb r1, [r4] ldrb r0, [r4, 0x1] lsls r0, 8 adds r1, r0 strh r1, [r7, 0x1C] b _08040ADA _08040754: ldrb r1, [r4] ldrb r0, [r4, 0x1] lsls r0, 8 adds r1, r0 strh r1, [r7, 0x1E] b _08040ADA _08040760: 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 _08040778 ldrb r0, [r7, 0x13] movs r1, 0x2 b _08040926 _08040778: ldrb r1, [r7, 0x13] movs r0, 0x3 negs r0, r0 b _08040932 _08040780: ldrb r1, [r4] ldrb r0, [r4, 0x1] lsls r0, 8 adds r1, r0 mov r0, r8 strh r1, [r0, 0x2] b _08040ADA _0804078E: 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 _08040ADA _080407A8: ldrb r0, [r4] mov r1, r8 strb r0, [r1, 0x8] b _08040ADA _080407B0: ldrb r0, [r4] mov r1, r8 strb r0, [r1, 0x9] b _08040ADA _080407B8: 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 _08040ADA _080407CC: mov r0, r9 add r0, r10 subs r0, 0x9 ldrb r1, [r4] strb r1, [r0] b _08040ADA _080407D8: ldrb r0, [r4] strb r0, [r6] b _08040ADA _080407DE: ldrb r0, [r4] strb r0, [r6, 0x1] b _08040ADA _080407E4: ldrb r0, [r4] strb r0, [r6, 0x2] b _08040ADA _080407EA: ldrb r0, [r4] strb r0, [r6, 0x3] b _08040ADA _080407F0: ldrb r0, [r4] strb r0, [r6, 0x4] b _08040ADA _080407F6: ldrb r0, [r4] strb r0, [r6, 0x5] b _08040ADA _080407FC: ldrb r0, [r4] strb r0, [r6, 0x6] b _08040ADA _08040802: ldrb r0, [r4] strb r0, [r6, 0x7] b _08040ADA _08040808: ldrb r0, [r4] strb r0, [r6, 0x8] b _08040ADA _0804080E: ldrb r0, [r4] strb r0, [r6, 0x9] b _08040ADA _08040814: ldrb r0, [r4] strb r0, [r6, 0xA] b _08040ADA _0804081A: ldrb r0, [r4] strb r0, [r6, 0xB] b _08040ADA _08040820: ldrb r0, [r4] strb r0, [r5] b _08040ADA _08040826: ldrb r0, [r4] strb r0, [r5, 0x1] b _08040ADA _0804082C: 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 _08040ADA _08040840: ldrb r1, [r4] movs r0, 0xF ands r1, r0 lsls r1, 7 ldrh r2, [r5, 0x2] ldr r0, _08040854 @ =0xfffff87f ands r0, r2 orrs r0, r1 strh r0, [r5, 0x2] b _08040ADA .align 2, 0 _08040854: .4byte 0xfffff87f _08040858: 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 _08040ADA _0804086E: ldrb r0, [r4] lsls r0, 7 ldrb r2, [r5, 0x3] movs r1, 0x7F ands r1, r2 orrs r1, r0 strb r1, [r5, 0x3] b _08040ADA _0804087E: 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 _08040ADA _08040892: ldrb r1, [r4] movs r0, 0x1F ands r1, r0 lsls r1, 5 ldrh r2, [r5, 0x4] ldr r0, _080408A8 @ =0xfffffc1f ands r0, r2 orrs r0, r1 strh r0, [r5, 0x4] b _08040ADA .align 2, 0 _080408A8: .4byte 0xfffffc1f _080408AC: 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 _08040ADA _080408C2: ldrb r2, [r4] movs r0, 0x1F ands r2, r0 lsls r2, 15 ldr r0, [r5, 0x4] ldr r1, _080408D8 @ =0xfff07fff ands r0, r1 orrs r0, r2 str r0, [r5, 0x4] b _08040ADA .align 2, 0 _080408D8: .4byte 0xfff07fff _080408DC: ldrb r1, [r4] movs r0, 0x1F ands r1, r0 lsls r1, 4 ldrh r2, [r5, 0x6] ldr r0, _080408F0 @ =0xfffffe0f ands r0, r2 orrs r0, r1 strh r0, [r5, 0x6] b _08040ADA .align 2, 0 _080408F0: .4byte 0xfffffe0f _080408F4: 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 _08040AD8 _08040908: 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 _0804092C ldrb r0, [r7, 0x13] movs r1, 0x4 _08040926: orrs r0, r1 strb r0, [r7, 0x13] b _08040ADA _0804092C: ldrb r1, [r7, 0x13] movs r0, 0x5 negs r0, r0 _08040932: ands r0, r1 strb r0, [r7, 0x13] b _08040ADA _08040938: ldrb r0, [r4] lsls r0, 7 ldrb r2, [r5, 0x7] movs r1, 0x7F ands r1, r2 orrs r1, r0 strb r1, [r5, 0x7] b _08040ADA _08040948: ldrb r1, [r4] movs r0, 0x7 ands r1, r0 ldrb r2, [r5, 0x8] movs r0, 0x8 negs r0, r0 b _08040964 _08040956: ldrb r1, [r4] movs r0, 0x7 ands r1, r0 lsls r1, 3 ldrb r2, [r5, 0x8] movs r0, 0x39 negs r0, r0 _08040964: ands r0, r2 orrs r0, r1 strb r0, [r5, 0x8] b _08040ADA _0804096C: ldrb r1, [r4] movs r0, 0x7 ands r1, r0 lsls r1, 6 ldrh r2, [r5, 0x8] ldr r0, _08040980 @ =0xfffffe3f ands r0, r2 orrs r0, r1 strh r0, [r5, 0x8] b _08040ADA .align 2, 0 _08040980: .4byte 0xfffffe3f _08040984: ldrb r1, [r4] movs r0, 0x7 ands r1, r0 lsls r1, 1 ldrb r2, [r5, 0x9] movs r0, 0xF negs r0, r0 b _080409A2 _08040994: ldrb r1, [r4] movs r0, 0x7 ands r1, r0 lsls r1, 4 ldrb r2, [r5, 0x9] movs r0, 0x71 negs r0, r0 _080409A2: ands r0, r2 orrs r0, r1 strb r0, [r5, 0x9] b _08040ADA _080409AA: ldrb r0, [r4] lsls r0, 7 ldrb r2, [r5, 0x9] movs r1, 0x7F ands r1, r2 orrs r1, r0 strb r1, [r5, 0x9] b _08040ADA _080409BA: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 ldrb r2, [r5, 0xA] movs r0, 0x2 negs r0, r0 b _08040A26 _080409C8: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 1 ldrb r2, [r5, 0xA] movs r0, 0x3 negs r0, r0 b _08040A26 _080409D8: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 2 ldrb r2, [r5, 0xA] movs r0, 0x5 negs r0, r0 b _08040A26 _080409E8: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 3 ldrb r2, [r5, 0xA] movs r0, 0x9 negs r0, r0 b _08040A26 _080409F8: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 4 ldrb r2, [r5, 0xA] movs r0, 0x11 negs r0, r0 b _08040A26 _08040A08: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 5 ldrb r2, [r5, 0xA] movs r0, 0x21 negs r0, r0 b _08040A26 _08040A18: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 6 ldrb r2, [r5, 0xA] movs r0, 0x41 negs r0, r0 _08040A26: ands r0, r2 orrs r0, r1 strb r0, [r5, 0xA] b _08040ADA _08040A2E: ldrb r0, [r4] lsls r0, 7 ldrb r2, [r5, 0xA] movs r1, 0x7F ands r1, r2 orrs r1, r0 strb r1, [r5, 0xA] b _08040ADA _08040A3E: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 ldrb r2, [r5, 0xB] movs r0, 0x2 negs r0, r0 b _08040A7A _08040A4C: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 1 ldrb r2, [r5, 0xB] movs r0, 0x3 negs r0, r0 b _08040A7A _08040A5C: ldrb r1, [r4] movs r0, 0x1 ands r1, r0 lsls r1, 2 ldrb r2, [r5, 0xB] movs r0, 0x5 negs r0, r0 b _08040A7A _08040A6C: ldrb r1, [r4] movs r0, 0xF ands r1, r0 lsls r1, 3 ldrb r2, [r5, 0xB] movs r0, 0x79 negs r0, r0 _08040A7A: ands r0, r2 orrs r0, r1 strb r0, [r5, 0xB] b _08040ADA _08040A82: ldrb r0, [r4] lsls r0, 7 ldrb r2, [r5, 0xB] movs r1, 0x7F ands r1, r2 orrs r1, r0 strb r1, [r5, 0xB] b _08040ADA _08040A92: 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, _08040AFC @ =0xfffffc1f 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, _08040B00 @ =0xfff07fff ands r0, r1 str r0, [r5, 0x4] ldrh r1, [r5, 0x6] ldr r0, _08040B04 @ =0xfffffe0f ands r0, r1 strh r0, [r5, 0x6] ldrb r1, [r5, 0x7] movs r0, 0x3F negs r0, r0 ands r0, r1 _08040AD8: strb r0, [r5, 0x7] _08040ADA: mov r0, r10 cmp r0, 0xA ble _08040AEE adds r0, r7, 0 bl CalculateBoxMonChecksum strh r0, [r7, 0x1C] adds r0, r7, 0 bl EncryptBoxMon _08040AEE: pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 .align 2, 0 _08040AFC: .4byte 0xfffffc1f _08040B00: .4byte 0xfff07fff _08040B04: .4byte 0xfffffe0f thumb_func_end sub_80404D0 thumb_func_start CopyMon CopyMon: @ 8040B08 push {lr} bl memcpy pop {r0} bx r0 thumb_func_end CopyMon thumb_func_start GiveMonToPlayer GiveMonToPlayer: @ 8040B14 push {r4-r6,lr} adds r6, r0, 0 ldr r4, _08040B40 @ =gSaveBlock2Ptr ldr r2, [r4] movs r1, 0x7 bl sub_804037C ldr r2, [r4] adds r2, 0x8 adds r0, r6, 0 movs r1, 0x31 bl sub_804037C ldr r2, [r4] adds r2, 0xA adds r0, r6, 0 movs r1, 0x1 bl sub_804037C movs r5, 0 b _08040B46 .align 2, 0 _08040B40: .4byte gSaveBlock2Ptr _08040B44: adds r5, 0x1 _08040B46: cmp r5, 0x5 bgt _08040B80 movs r0, 0x64 adds r1, r5, 0 muls r1, r0 ldr r0, _08040B78 @ =gPlayerParty adds r4, r1, r0 adds r0, r4, 0 movs r1, 0xB movs r2, 0 bl GetMonData cmp r0, 0 bne _08040B44 adds r0, r4, 0 adds r1, r6, 0 movs r2, 0x64 bl CopyMon ldr r1, _08040B7C @ =gUnknown_2024029 adds r0, r5, 0x1 strb r0, [r1] movs r0, 0 b _08040B8A .align 2, 0 _08040B78: .4byte gPlayerParty _08040B7C: .4byte gUnknown_2024029 _08040B80: adds r0, r6, 0 bl SendMonToPC lsls r0, 24 lsrs r0, 24 _08040B8A: pop {r4-r6} pop {r1} bx r1 thumb_func_end GiveMonToPlayer thumb_func_start SendMonToPC SendMonToPC: @ 8040B90 push {r4-r7,lr} mov r7, r8 push {r7} mov r8, r0 ldr r0, _08040C04 @ =0x00004037 bl VarGet lsls r0, 24 lsrs r0, 24 bl set_unknown_box_id bl StorageGetCurrentBox lsls r0, 24 lsrs r5, r0, 24 _08040BAE: movs r6, 0 lsls r7, r5, 24 _08040BB2: lsls r1, r6, 24 lsrs r1, 24 lsrs r0, r7, 24 bl GetBoxedMonPtr adds r4, r0, 0 movs r1, 0xB movs r2, 0 bl GetBoxMonData cmp r0, 0 bne _08040C14 mov r0, r8 bl MonRestorePP adds r0, r4, 0 mov r1, r8 movs r2, 0x50 bl CopyMon ldr r0, _08040C08 @ =gUnknown_20370D6 strh r5, [r0] ldr r0, _08040C0C @ =gUnknown_20370D8 strh r6, [r0] bl get_unknown_box_id lsls r0, 16 lsrs r0, 16 cmp r0, r5 beq _08040BF4 ldr r0, _08040C10 @ =0x00000843 bl FlagClear _08040BF4: lsls r1, r5, 16 ldr r0, _08040C04 @ =0x00004037 lsrs r1, 16 bl VarSet movs r0, 0x1 b _08040C30 .align 2, 0 _08040C04: .4byte 0x00004037 _08040C08: .4byte gUnknown_20370D6 _08040C0C: .4byte gUnknown_20370D8 _08040C10: .4byte 0x00000843 _08040C14: adds r6, 0x1 cmp r6, 0x1D ble _08040BB2 adds r5, 0x1 cmp r5, 0xE bne _08040C22 movs r5, 0 _08040C22: bl StorageGetCurrentBox lsls r0, 24 lsrs r0, 24 cmp r5, r0 bne _08040BAE movs r0, 0x2 _08040C30: pop {r3} mov r8, r3 pop {r4-r7} pop {r1} bx r1 thumb_func_end SendMonToPC thumb_func_start CalculatePlayerPartyCount CalculatePlayerPartyCount: @ 8040C3C push {r4,lr} ldr r0, _08040C48 @ =gUnknown_2024029 movs r1, 0 strb r1, [r0] b _08040C54 .align 2, 0 _08040C48: .4byte gUnknown_2024029 _08040C4C: ldrb r0, [r4] adds r0, 0x1 strb r0, [r4] adds r0, r4, 0 _08040C54: adds r4, r0, 0 ldrb r0, [r4] cmp r0, 0x5 bhi _08040C72 adds r1, r0, 0 movs r0, 0x64 muls r0, r1 ldr r1, _08040C7C @ =gPlayerParty adds r0, r1 movs r1, 0xB movs r2, 0 bl GetMonData cmp r0, 0 bne _08040C4C _08040C72: ldrb r0, [r4] pop {r4} pop {r1} bx r1 .align 2, 0 _08040C7C: .4byte gPlayerParty thumb_func_end CalculatePlayerPartyCount thumb_func_start CalculateEnemyPartyCount CalculateEnemyPartyCount: @ 8040C80 push {r4,lr} ldr r0, _08040C8C @ =gUnknown_202402A movs r1, 0 strb r1, [r0] b _08040C98 .align 2, 0 _08040C8C: .4byte gUnknown_202402A _08040C90: ldrb r0, [r4] adds r0, 0x1 strb r0, [r4] adds r0, r4, 0 _08040C98: adds r4, r0, 0 ldrb r0, [r4] cmp r0, 0x5 bhi _08040CB6 adds r1, r0, 0 movs r0, 0x64 muls r0, r1 ldr r1, _08040CC0 @ =gEnemyParty adds r0, r1 movs r1, 0xB movs r2, 0 bl GetMonData cmp r0, 0 bne _08040C90 _08040CB6: ldrb r0, [r4] pop {r4} pop {r1} bx r1 .align 2, 0 _08040CC0: .4byte gEnemyParty thumb_func_end CalculateEnemyPartyCount thumb_func_start GetMonsStateToDoubles GetMonsStateToDoubles: @ 8040CC4 push {r4-r6,lr} movs r6, 0 bl CalculatePlayerPartyCount ldr r1, _08040D30 @ =gUnknown_2024029 ldrb r0, [r1] cmp r0, 0x1 beq _08040D28 movs r5, 0 ldrb r1, [r1] cmp r6, r1 bge _08040D20 _08040CDC: movs r0, 0x64 adds r1, r5, 0 muls r1, r0 ldr r0, _08040D34 @ =gPlayerParty adds r4, r1, r0 adds r0, r4, 0 movs r1, 0x39 movs r2, 0 bl GetMonData cmp r0, 0 beq _08040D16 adds r0, r4, 0 movs r1, 0x41 movs r2, 0 bl GetMonData cmp r0, 0 beq _08040D16 adds r0, r4, 0 movs r1, 0x41 movs r2, 0 bl GetMonData movs r1, 0xCE lsls r1, 1 cmp r0, r1 beq _08040D16 adds r6, 0x1 _08040D16: adds r5, 0x1 ldr r0, _08040D30 @ =gUnknown_2024029 ldrb r0, [r0] cmp r5, r0 blt _08040CDC _08040D20: movs r0, 0 cmp r6, 0x1 bgt _08040D28 movs r0, 0x2 _08040D28: pop {r4-r6} pop {r1} bx r1 .align 2, 0 _08040D30: .4byte gUnknown_2024029 _08040D34: .4byte gPlayerParty thumb_func_end GetMonsStateToDoubles thumb_func_start GetAbilityBySpecies GetAbilityBySpecies: @ 8040D38 push {lr} lsls r0, 16 lsrs r3, r0, 16 lsls r1, 24 cmp r1, 0 beq _08040D5C ldr r2, _08040D54 @ =gUnknown_2023D6A ldr r1, _08040D58 @ =gBaseStats lsls r0, r3, 3 subs r0, r3 lsls r0, 2 adds r0, r1 ldrb r0, [r0, 0x17] b _08040D6A .align 2, 0 _08040D54: .4byte gUnknown_2023D6A _08040D58: .4byte gBaseStats _08040D5C: ldr r2, _08040D74 @ =gUnknown_2023D6A ldr r1, _08040D78 @ =gBaseStats lsls r0, r3, 3 subs r0, r3 lsls r0, 2 adds r0, r1 ldrb r0, [r0, 0x16] _08040D6A: strb r0, [r2] ldrb r0, [r2] pop {r1} bx r1 .align 2, 0 _08040D74: .4byte gUnknown_2023D6A _08040D78: .4byte gBaseStats thumb_func_end GetAbilityBySpecies thumb_func_start GetMonAbility GetMonAbility: @ 8040D7C 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 GetAbilityBySpecies lsls r0, 24 lsrs r0, 24 pop {r4,r5} pop {r1} bx r1 thumb_func_end GetMonAbility thumb_func_start CreateSecretBaseEnemyParty CreateSecretBaseEnemyParty: @ 8040DB0 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x14 adds r5, r0, 0 bl ZeroEnemyPartyMons ldr r4, _08040ED8 @ =gBattleResources ldr r0, [r4] ldr r0, [r0] adds r1, r5, 0 movs r2, 0xA0 bl memcpy movs r0, 0 mov r9, r0 _08040DD4: ldr r1, _08040ED8 @ =gBattleResources ldr r3, [r1] ldr r2, [r3] mov r4, r9 lsls r7, r4, 1 adds r0, r2, 0 adds r0, 0x7C adds r1, r0, r7 ldrh r0, [r1] adds r4, 0x1 str r4, [sp, 0x10] cmp r0, 0 beq _08040EAE movs r0, 0x64 mov r6, r9 muls r6, r0 ldr r4, _08040EDC @ =gEnemyParty mov r8, r4 adds r5, r6, r4 ldrh r1, [r1] adds r0, r2, 0 adds r0, 0x94 add r0, r9 ldrb r2, [r0] movs r0, 0x1 str r0, [sp] ldr r0, [r3] mov r3, r9 lsls r4, r3, 2 adds r0, 0x34 adds r0, r4 ldr r0, [r0] str r0, [sp, 0x4] movs r0, 0x2 str r0, [sp, 0x8] movs r0, 0 str r0, [sp, 0xC] adds r0, r5, 0 movs r3, 0xF bl CreateMon ldr r1, _08040ED8 @ =gBattleResources ldr r0, [r1] adds r1, r7, 0 adds r1, 0x88 ldr r2, [r0] adds r2, r1 adds r0, r5, 0 movs r1, 0xC bl sub_804037C movs r5, 0 mov r10, r4 mov r7, r9 adds r7, 0x9A mov r4, r8 _08040E44: adds r1, r5, 0 adds r1, 0x1A ldr r2, _08040ED8 @ =gBattleResources ldr r0, [r2] ldr r2, [r0] adds r2, r7 adds r0, r6, r4 bl sub_804037C adds r5, 0x1 cmp r5, 0x5 ble _08040E44 movs r5, 0 movs r3, 0x64 mov r0, r9 muls r0, r3 ldr r1, _08040EDC @ =gEnemyParty adds r7, r0, r1 mov r4, r10 lsls r0, r4, 1 adds r6, r0, 0 adds r6, 0x4C adds r4, r0, 0 _08040E72: adds r1, r5, 0 adds r1, 0xD ldr r2, _08040ED8 @ =gBattleResources ldr r0, [r2] ldr r2, [r0] adds r2, r6 adds r0, r7, 0 bl sub_804037C adds r1, r5, 0 adds r1, 0x11 ldr r3, _08040ED8 @ =gBattleResources ldr r0, [r3] ldr r0, [r0] adds r0, 0x4C adds r0, r4 ldrh r0, [r0] lsls r2, r0, 1 adds r2, r0 lsls r2, 2 ldr r0, _08040EE0 @ =gUnknown_8250C08 adds r2, r0 adds r0, r7, 0 bl sub_804037C adds r6, 0x2 adds r4, 0x2 adds r5, 0x1 cmp r5, 0x3 ble _08040E72 _08040EAE: ldr r4, [sp, 0x10] mov r9, r4 cmp r4, 0x5 ble _08040DD4 ldr r1, _08040EE4 @ =gBattleTypeFlags movs r0, 0x8 str r0, [r1] ldr r1, _08040EE8 @ =gTrainerBattleOpponent_A movs r2, 0x80 lsls r2, 3 adds r0, r2, 0 strh r0, [r1] add sp, 0x14 pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r0} bx r0 .align 2, 0 _08040ED8: .4byte gBattleResources _08040EDC: .4byte gEnemyParty _08040EE0: .4byte gUnknown_8250C08 _08040EE4: .4byte gBattleTypeFlags _08040EE8: .4byte gTrainerBattleOpponent_A thumb_func_end CreateSecretBaseEnemyParty thumb_func_start GetSecretBaseTrainerPicIndex GetSecretBaseTrainerPicIndex: @ 8040EEC push {r4,r5,lr} ldr r5, _08040F20 @ =gUnknown_825DFE0 ldr r0, _08040F24 @ =gBattleResources ldr r0, [r0] ldr r4, [r0] 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, _08040F28 @ =gUnknown_82538A8 adds r0, r1 ldrb r0, [r0] pop {r4,r5} pop {r1} bx r1 .align 2, 0 _08040F20: .4byte gUnknown_825DFE0 _08040F24: .4byte gBattleResources _08040F28: .4byte gUnknown_82538A8 thumb_func_end GetSecretBaseTrainerPicIndex thumb_func_start GetSecretBaseTrainerNameIndex GetSecretBaseTrainerNameIndex: @ 8040F2C push {r4,r5,lr} ldr r5, _08040F60 @ =gUnknown_825DFE0 ldr r0, _08040F64 @ =gBattleResources ldr r0, [r0] ldr r4, [r0] 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, _08040F68 @ =gUnknown_825393E adds r0, r1 ldrb r0, [r0] pop {r4,r5} pop {r1} bx r1 .align 2, 0 _08040F60: .4byte gUnknown_825DFE0 _08040F64: .4byte gBattleResources _08040F68: .4byte gUnknown_825393E thumb_func_end GetSecretBaseTrainerNameIndex thumb_func_start IsPlayerPartyAndPokemonStorageFull IsPlayerPartyAndPokemonStorageFull: @ 8040F6C push {r4,lr} movs r4, 0 _08040F70: movs r0, 0x64 muls r0, r4 ldr r1, _08040F88 @ =gPlayerParty adds r0, r1 movs r1, 0xB movs r2, 0 bl GetMonData cmp r0, 0 bne _08040F8C movs r0, 0 b _08040F9A .align 2, 0 _08040F88: .4byte gPlayerParty _08040F8C: adds r4, 0x1 cmp r4, 0x5 ble _08040F70 bl IsPokemonStorageFull lsls r0, 24 lsrs r0, 24 _08040F9A: pop {r4} pop {r1} bx r1 thumb_func_end IsPlayerPartyAndPokemonStorageFull thumb_func_start IsPokemonStorageFull IsPokemonStorageFull: @ 8040FA0 push {r4-r6,lr} movs r6, 0 _08040FA4: movs r4, 0 lsls r5, r6, 24 _08040FA8: lsls r1, r4, 24 lsrs r1, 24 lsrs r0, r5, 24 movs r2, 0xB bl GetBoxMonDataFromAnyBox cmp r0, 0 bne _08040FBC movs r0, 0 b _08040FCA _08040FBC: adds r4, 0x1 cmp r4, 0x1D ble _08040FA8 adds r6, 0x1 cmp r6, 0xD ble _08040FA4 movs r0, 0x1 _08040FCA: pop {r4-r6} pop {r1} bx r1 thumb_func_end IsPokemonStorageFull thumb_func_start GetSpeciesName GetSpeciesName: @ 8040FD0 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, _08040FEC @ =gUnknown_8245EE0 movs r0, 0xB muls r0, r5 adds r3, r0, r7 adds r2, r6, 0 b _08040FF6 .align 2, 0 _08040FEC: .4byte gUnknown_8245EE0 _08040FF0: adds r3, 0x1 adds r2, 0x1 adds r1, 0x1 _08040FF6: adds r4, r6, r1 cmp r1, 0x9 bgt _08041010 cmp r5, r12 bls _08041006 adds r0, r1, r7 ldrb r0, [r0] b _08041008 _08041006: ldrb r0, [r3] _08041008: strb r0, [r2] ldrb r0, [r4] cmp r0, 0xFF bne _08040FF0 _08041010: movs r0, 0xFF strb r0, [r4] pop {r4-r7} pop {r0} bx r0 thumb_func_end GetSpeciesName thumb_func_start CalculatePPWithBonus CalculatePPWithBonus: @ 804101C push {r4,lr} lsls r0, 16 lsrs r0, 16 lsls r2, 24 lsrs r2, 24 ldr r4, _0804105C @ =gBattleMoves lsls r3, r0, 1 adds r3, r0 lsls r3, 2 adds r3, r4 ldrb r4, [r3, 0x4] ldr r0, _08041060 @ =gUnknown_825DEA1 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 _0804105C: .4byte gBattleMoves _08041060: .4byte gUnknown_825DEA1 thumb_func_end CalculatePPWithBonus thumb_func_start RemoveMonPPBonus RemoveMonPPBonus: @ 8041064 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, _0804109C @ =gUnknown_825DEA5 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 sub_804037C add sp, 0x4 pop {r4,r5} pop {r0} bx r0 .align 2, 0 _0804109C: .4byte gUnknown_825DEA5 thumb_func_end RemoveMonPPBonus thumb_func_start RemoveBattleMonPPBonus RemoveBattleMonPPBonus: @ 80410A0 lsls r1, 24 lsrs r1, 24 adds r0, 0x3B ldr r2, _080410B4 @ =gUnknown_825DEA5 adds r1, r2 ldrb r2, [r0] ldrb r1, [r1] ands r1, r2 strb r1, [r0] bx lr .align 2, 0 _080410B4: .4byte gUnknown_825DEA5 thumb_func_end RemoveBattleMonPPBonus thumb_func_start CopyPlayerPartyMonToBattleData CopyPlayerPartyMonToBattleData: @ 80410B8 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, _080413A4 @ =gPlayerParty adds r5, r0 adds r0, r5, 0 movs r1, 0xB movs r2, 0 bl GetMonData ldr r1, _080413A8 @ =gBattleMons 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 _0804110A: 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 _0804110A movs r0, 0x64 mov r4, r9 muls r4, r0 ldr r0, _080413A4 @ =gPlayerParty 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, _080413AC @ =0xfffffc1f 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, _080413B0 @ =0xfff07fff 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, _080413B4 @ =0xfffffe0f 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, _080413B8 @ =gBaseStats 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 GetAbilityBySpecies 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 GetBankSide ldr r1, _080413BC @ =gBattleStruct lsls r0, 24 lsrs r0, 23 adds r0, 0xA8 ldr r1, [r1] adds r1, r0 ldrh r0, [r7, 0x28] strh r0, [r1] movs r2, 0x6 mov r1, r9 movs r6, 0x7 add r5, r10 adds r0, r5, 0 adds r0, 0x13 _0804136E: strb r2, [r0] subs r0, 0x1 subs r6, 0x1 cmp r6, 0 bge _0804136E 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_80174B8 ldr r0, [sp, 0x14] movs r1, 0 bl ClearTemporarySpeciesSpriteData 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 _080413A4: .4byte gPlayerParty _080413A8: .4byte gBattleMons _080413AC: .4byte 0xfffffc1f _080413B0: .4byte 0xfff07fff _080413B4: .4byte 0xfffffe0f _080413B8: .4byte gBaseStats _080413BC: .4byte gBattleStruct thumb_func_end CopyPlayerPartyMonToBattleData .align 2, 0 @ Don't pad with nop.