.include "asm/macros.inc" .include "constants/constants.inc" .syntax unified .text thumb_func_start ExecuteTableBasedItemEffect_ @ bool8 ExecuteTableBasedItemEffect_(struct pokemon *mon, u16 itemId, u8 a3, u8 monMoveIndex) ExecuteTableBasedItemEffect_: @ 806BD04 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 ExecuteTableBasedItemEffect lsls r0, 24 lsrs r0, 24 add sp, 0x4 pop {r4} pop {r1} bx r1 thumb_func_end ExecuteTableBasedItemEffect_ thumb_func_start ExecuteTableBasedItemEffect @ bool8 ExecuteTableBasedItemEffect(struct pokemon *mon, u16 itemId, u8 a3, u8 monMoveIndex, u8 a5) ExecuteTableBasedItemEffect: @ 806BD28 push {r4-r7,lr} mov r7, r10 mov r6, r9 mov r5, r8 push {r5-r7} sub sp, 0x44 mov r8, r0 ldr r0, [sp, 0x64] lsls r1, 16 lsrs r1, 16 str r1, [sp, 0xC] lsls r2, 24 lsrs r2, 24 str r2, [sp, 0x10] lsls r3, 24 lsrs r3, 24 str r3, [sp, 0x14] lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x18] movs r0, 0x1 str r0, [sp, 0x20] movs r1, 0x6 str r1, [sp, 0x28] movs r2, 0 str r2, [sp, 0x30] movs r3, 0x4 str r3, [sp, 0x38] movs r5, 0 str r5, [sp, 0x3C] mov r0, r8 movs r1, 0xC bl GetMonData lsls r0, 16 lsrs r0, 16 cmp r0, 0xAF bne _0806BDBC ldr r0, =gMain ldr r1, =0x00000439 adds r0, r1 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806BDA8 ldr r2, =gEnigmaBerries ldr r0, =gBankInMenu ldrb r1, [r0] lsls r0, r1, 3 subs r0, r1 lsls r0, 2 adds r0, r2 ldrb r0, [r0, 0x7] b _0806BDC4 .pool _0806BDA8: ldr r0, =gSaveBlock1Ptr ldr r0, [r0] ldr r2, =0x00003226 adds r0, r2 ldrb r0, [r0] b _0806BDC4 .pool _0806BDBC: bl ItemId_GetHoldEffect lsls r0, 24 lsrs r0, 24 _0806BDC4: str r0, [sp, 0x34] ldr r1, =gStringBank ldr r0, =gBankInMenu ldrb r2, [r0] strb r2, [r1] ldr r0, =gMain ldr r3, =0x00000439 adds r0, r3 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0 beq _0806BE64 ldr r0, =gActiveBank strb r2, [r0] ldrb r0, [r0] bl GetBankSide lsls r0, 24 lsrs r0, 24 negs r1, r0 orrs r1, r0 lsrs r1, 31 str r1, [sp, 0x1C] ldr r0, =gNoOfAllBanks ldr r4, [sp, 0xC] subs r4, 0xD ldrb r0, [r0] cmp r1, r0 bge _0806BE70 ldr r2, =gBattlePartyID lsls r0, r1, 1 adds r0, r2 ldrh r3, [r0] ldr r5, [sp, 0x10] lsls r0, r5, 16 lsrs r1, r0, 16 adds r5, r0, 0 cmp r3, r1 bne _0806BE3C ldr r0, [sp, 0x1C] str r0, [sp, 0x38] b _0806BE70 .pool _0806BE3C: ldr r1, [sp, 0x1C] adds r1, 0x2 str r1, [sp, 0x1C] ldr r0, =gNoOfAllBanks ldrb r0, [r0] cmp r1, r0 bge _0806BE70 lsls r0, r1, 1 adds r0, r2 ldrh r1, [r0] lsrs r0, r5, 16 cmp r1, r0 bne _0806BE3C ldr r2, [sp, 0x1C] lsls r0, r2, 24 lsrs r0, 24 str r0, [sp, 0x38] b _0806BE70 .pool _0806BE64: ldr r0, =gActiveBank strb r1, [r0] movs r3, 0x4 str r3, [sp, 0x38] ldr r4, [sp, 0xC] subs r4, 0xD _0806BE70: lsls r0, r4, 16 lsrs r0, 16 cmp r0, 0xA5 bhi _0806BEF0 ldr r1, =gItemEffectTable lsls r0, r4, 2 adds r0, r1 ldr r0, [r0] cmp r0, 0 bne _0806BE94 ldr r5, [sp, 0xC] cmp r5, 0xAF beq _0806BE9A b _0806BEF0 .pool _0806BE94: ldr r1, [sp, 0xC] cmp r1, 0xAF bne _0806BEF6 _0806BE9A: ldr r0, =gMain ldr r2, =0x00000439 adds r0, r2 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806BECC ldr r0, =gActiveBank ldrb r1, [r0] lsls r0, r1, 3 subs r0, r1 lsls r0, 2 ldr r1, =gEnigmaBerries + 8 adds r0, r1 b _0806BEF6 .pool _0806BECC: ldr r0, =gSaveBlock1Ptr ldr r0, [r0] ldr r3, =0x00003214 adds r3, r0, r3 str r3, [sp, 0x24] b _0806BEF8 .pool _0806BEE0: mov r0, r8 movs r2, 0 ldr r3, [sp, 0x10] bl sub_813DA40 movs r0, 0 bl _0806CD5C _0806BEF0: movs r0, 0x1 bl _0806CD5C _0806BEF6: str r0, [sp, 0x24] _0806BEF8: movs r5, 0 str r5, [sp, 0x1C] _0806BEFC: ldr r0, [sp, 0x1C] cmp r0, 0x5 bls _0806BF06 bl _0806CD4C _0806BF06: lsls r0, 2 ldr r1, =_0806BF14 adds r0, r1 ldr r0, [r0] mov pc, r0 .pool .align 2, 0 _0806BF14: .4byte _0806BF2C .4byte _0806BFFC .4byte _0806C08C .4byte _0806C120 .4byte _0806C300 .4byte _0806C9BE _0806BF2C: ldr r1, [sp, 0x24] ldr r3, [sp, 0x1C] adds r2, r1, r3 ldrb r1, [r2] movs r0, 0x80 ands r0, r1 adds r6, r2, 0 cmp r0, 0 beq _0806BF76 ldr r0, =gMain ldr r5, =0x00000439 adds r0, r5 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806BF76 ldr r0, [sp, 0x38] cmp r0, 0x4 beq _0806BF76 ldr r1, =gBattleMons movs r0, 0x58 ldr r2, [sp, 0x38] 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 _0806BF76 ldr r0, =0xfff0ffff ands r1, r0 str r1, [r2] movs r3, 0 str r3, [sp, 0x20] _0806BF76: ldrb r1, [r6] movs r0, 0x30 ands r0, r1 cmp r0, 0 beq _0806BFA4 ldr r1, =gBattleMons ldr r0, =gActiveBank 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 _0806BFA4 orrs r1, r3 str r1, [r2] movs r5, 0 str r5, [sp, 0x20] _0806BFA4: ldrb r0, [r6] movs r3, 0xF ands r3, r0 cmp r3, 0 bne _0806BFB2 bl _0806CD4C _0806BFB2: ldr r6, =gBattleMons ldr r5, =gActiveBank 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 _0806BFCC bl _0806CD4C _0806BFCC: 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 _0806BFE0 b _0806C110 _0806BFE0: movs r0, 0xC strb r0, [r1, 0x19] b _0806C110 .pool _0806BFFC: ldr r1, [sp, 0x24] ldr r3, [sp, 0x1C] adds r2, r1, r3 ldrb r1, [r2] movs r0, 0xF0 ands r0, r1 lsls r3, r0, 24 adds r6, r2, 0 cmp r3, 0 beq _0806C042 ldr r7, =gBattleMons ldr r5, =gActiveBank 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 _0806C042 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 _0806C03E movs r0, 0xC strb r0, [r1, 0x1A] _0806C03E: movs r5, 0 str r5, [sp, 0x20] _0806C042: ldrb r0, [r6] movs r3, 0xF ands r3, r0 cmp r3, 0 bne _0806C050 bl _0806CD4C _0806C050: ldr r6, =gBattleMons ldr r5, =gActiveBank 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 _0806C06A bl _0806CD4C _0806C06A: 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 _0806C110 movs r0, 0xC strb r0, [r1, 0x1B] b _0806C110 .pool _0806C08C: ldr r1, [sp, 0x24] ldr r3, [sp, 0x1C] adds r2, r1, r3 ldrb r1, [r2] movs r0, 0xF0 ands r0, r1 lsls r3, r0, 24 adds r6, r2, 0 cmp r3, 0 beq _0806C0D2 ldr r7, =gBattleMons ldr r5, =gActiveBank 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 _0806C0D2 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 _0806C0CE movs r0, 0xC strb r0, [r1, 0x1E] _0806C0CE: movs r5, 0 str r5, [sp, 0x20] _0806C0D2: ldrb r0, [r6] movs r3, 0xF ands r3, r0 cmp r3, 0 bne _0806C0E0 bl _0806CD4C _0806C0E0: ldr r6, =gBattleMons ldr r5, =gActiveBank 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 _0806C0FA bl _0806CD4C _0806C0FA: 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 _0806C110 movs r0, 0xC strb r0, [r1, 0x1C] _0806C110: movs r0, 0 str r0, [sp, 0x20] bl _0806CD4C .pool _0806C120: ldr r1, [sp, 0x24] ldr r3, [sp, 0x1C] adds r2, r1, r3 ldrb r1, [r2] movs r0, 0x80 ands r0, r1 adds r6, r2, 0 cmp r0, 0 beq _0806C168 ldr r5, =gSideTimers ldr r4, =gActiveBank ldrb r0, [r4] bl GetBankSide lsls r0, 24 lsrs r0, 24 lsls r1, r0, 1 adds r1, r0 lsls r1, 2 adds r1, r5 ldrb r0, [r1, 0x4] cmp r0, 0 bne _0806C168 ldrb r0, [r4] bl GetBankSide 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, 0x4] movs r5, 0 str r5, [sp, 0x20] _0806C168: ldrb r1, [r6] movs r0, 0x40 ands r0, r1 cmp r0, 0 beq _0806C1CA mov r0, r8 movs r1, 0x38 movs r2, 0 bl GetMonData cmp r0, 0x64 beq _0806C1CA ldr r5, =gExperienceTables 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, =gBaseStats lsls r1, r0, 3 subs r1, r0 lsls r1, 2 adds r1, r2 ldrb r1, [r1, 0x13] movs r0, 0xCA lsls r0, 1 muls r0, r1 adds r4, r0 adds r4, r5 ldr r0, [r4] str r0, [sp] mov r0, r8 movs r1, 0x19 mov r2, sp bl SetMonData mov r0, r8 bl CalculateMonStats movs r0, 0 str r0, [sp, 0x20] _0806C1CA: ldrb r1, [r6] movs r0, 0x20 ands r0, r1 cmp r0, 0 beq _0806C206 mov r0, r8 ldr r1, [sp, 0x10] movs r2, 0x7 ldr r3, [sp, 0x38] bl HealStatusConditions lsls r0, 24 cmp r0, 0 bne _0806C206 ldr r1, [sp, 0x38] cmp r1, 0x4 beq _0806C202 ldr r1, =gBattleMons movs r0, 0x58 ldr r3, [sp, 0x38] adds r2, r3, 0 muls r2, r0 adds r1, 0x50 adds r2, r1 ldr r0, [r2] ldr r1, =0xf7ffffff ands r0, r1 str r0, [r2] _0806C202: movs r5, 0 str r5, [sp, 0x20] _0806C206: ldrb r1, [r6] movs r0, 0x10 ands r0, r1 cmp r0, 0 beq _0806C226 ldr r2, =0x00000f88 mov r0, r8 ldr r1, [sp, 0x10] ldr r3, [sp, 0x38] bl HealStatusConditions lsls r0, 24 cmp r0, 0 bne _0806C226 movs r0, 0 str r0, [sp, 0x20] _0806C226: ldrb r1, [r6] movs r0, 0x8 ands r0, r1 cmp r0, 0 beq _0806C246 mov r0, r8 ldr r1, [sp, 0x10] movs r2, 0x10 ldr r3, [sp, 0x38] bl HealStatusConditions lsls r0, 24 cmp r0, 0 bne _0806C246 movs r1, 0 str r1, [sp, 0x20] _0806C246: ldrb r1, [r6] movs r0, 0x4 ands r0, r1 cmp r0, 0 beq _0806C266 mov r0, r8 ldr r1, [sp, 0x10] movs r2, 0x20 ldr r3, [sp, 0x38] bl HealStatusConditions lsls r0, 24 cmp r0, 0 bne _0806C266 movs r2, 0 str r2, [sp, 0x20] _0806C266: ldrb r1, [r6] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806C286 mov r0, r8 ldr r1, [sp, 0x10] movs r2, 0x40 ldr r3, [sp, 0x38] bl HealStatusConditions lsls r0, 24 cmp r0, 0 bne _0806C286 movs r3, 0 str r3, [sp, 0x20] _0806C286: ldrb r1, [r6] movs r0, 0x1 ands r0, r1 cmp r0, 0 bne _0806C294 bl _0806CD4C _0806C294: ldr r0, =gMain ldr r5, =0x00000439 adds r0, r5 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 bne _0806C2A8 bl _0806CD4C _0806C2A8: ldr r0, [sp, 0x38] cmp r0, 0x4 bne _0806C2B2 bl _0806CD4C _0806C2B2: ldr r1, =gBattleMons movs r0, 0x58 ldr r2, [sp, 0x38] muls r0, r2 adds r1, 0x50 adds r2, r0, r1 ldr r1, [r2] movs r0, 0x7 ands r0, r1 cmp r0, 0 bne _0806C2CC bl _0806CD4C _0806C2CC: movs r0, 0x8 negs r0, r0 ands r1, r0 str r1, [r2] movs r3, 0 str r3, [sp, 0x20] bl _0806CD4C .pool _0806C300: ldr r5, [sp, 0x24] ldr r1, [sp, 0x1C] adds r0, r5, r1 ldrb r0, [r0] mov r10, r0 movs r0, 0x20 mov r2, r10 ands r0, r2 cmp r0, 0 beq _0806C3D8 movs r0, 0xDF ands r2, r0 mov r10, r2 mov r0, r8 movs r1, 0x15 movs r2, 0 bl GetMonData ldr r1, =gUnknown_08329D22 ldr r3, [sp, 0x14] adds r1, r3, r1 ldrb r1, [r1] ands r0, r1 lsls r1, r3, 1 lsrs r0, r1 str r0, [sp] adds r5, r3, 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x2C] ldr r0, [sp] cmp r0, 0x2 bhi _0806C3D8 ldr r0, [sp, 0x2C] cmp r0, 0x4 bls _0806C3D8 mov r0, r8 movs r1, 0x15 movs r2, 0 bl GetMonData ldr r1, =gUnknown_08329D2A ldr r2, [sp, 0x14] 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 ldr r3, [sp, 0x2C] subs r0, r3 str r0, [sp] ldr r4, [sp, 0x14] 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 r5, 0 str r5, [sp, 0x20] _0806C3D8: movs r0, 0 str r0, [sp, 0x2C] mov r1, r10 cmp r1, 0 bne _0806C3E6 bl _0806CD4C _0806C3E6: movs r0, 0x1 mov r2, r10 ands r0, r2 cmp r0, 0 bne _0806C3F2 b _0806C9AA _0806C3F2: ldr r3, [sp, 0x2C] cmp r3, 0x7 bls _0806C3FA b _0806C9AA _0806C3FA: lsls r0, r3, 2 ldr r1, =_0806C410 adds r0, r1 ldr r0, [r0] mov pc, r0 .pool .align 2, 0 _0806C410: .4byte _0806C430 .4byte _0806C430 .4byte _0806C4DC .4byte _0806C700 .4byte _0806C9AA .4byte _0806C9AA .4byte _0806C9AA .4byte _0806C994 _0806C430: mov r0, r8 bl GetMonEVCount lsls r0, 16 lsrs r6, r0, 16 ldr r5, [sp, 0x24] ldr r1, [sp, 0x28] adds r0, r5, r1 ldrb r5, [r0] ldr r0, =gUnknown_08329EC2 ldr r2, [sp, 0x2C] adds r0, r2, r0 ldrb r1, [r0] mov r0, r8 movs r2, 0 bl GetMonData adds r1, r0, 0 str r1, [sp, 0x4] lsls r0, r5, 24 asrs r2, r0, 24 cmp r2, 0 ble _0806C498 ldr r0, =0x000001fd cmp r6, r0 bls _0806C466 b _0806BEF0 _0806C466: adds r3, r1, 0 cmp r3, 0x63 ble _0806C46E b _0806C9AA _0806C46E: adds r1, r3, r2 cmp r1, 0x64 ble _0806C484 adds r0, r2, 0 adds r0, 0x64 subs r5, r0, r1 b _0806C486 .pool _0806C484: adds r5, r2, 0 _0806C486: adds r1, r6, r5 movs r0, 0xFF lsls r0, 1 cmp r1, r0 bls _0806C494 adds r0, r5, r0 subs r5, r0, r1 _0806C494: adds r0, r3, r5 b _0806C4B2 _0806C498: cmp r1, 0 bne _0806C4A8 movs r3, 0x1 str r3, [sp, 0x3C] ldr r0, [sp, 0x28] adds r0, 0x1 lsls r0, 24 b _0806C83E _0806C4A8: adds r0, r1, r2 str r0, [sp, 0x4] cmp r0, 0 bge _0806C4B4 movs r0, 0 _0806C4B2: str r0, [sp, 0x4] _0806C4B4: ldr r0, =gUnknown_08329EC2 ldr r5, [sp, 0x2C] adds r0, r5, r0 ldrb r1, [r0] add r2, sp, 0x4 mov r0, r8 bl SetMonData mov r0, r8 bl CalculateMonStats ldr r0, [sp, 0x28] adds r0, 0x1 lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x28] b _0806C978 .pool _0806C4DC: movs r0, 0x10 mov r1, r10 ands r0, r1 cmp r0, 0 beq _0806C59C mov r0, r8 movs r1, 0x39 movs r2, 0 bl GetMonData cmp r0, 0 beq _0806C4FC ldr r0, [sp, 0x28] adds r0, 0x1 lsls r0, 24 b _0806C83E _0806C4FC: ldr r0, =gMain ldr r2, =0x00000439 adds r0, r2 ldrb r1, [r0] movs r4, 0x2 movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806C5B2 ldr r3, [sp, 0x38] cmp r3, 0x4 beq _0806C55C ldr r2, =gAbsentBankFlags ldr r1, =gBitTable lsls r0, r3, 2 adds r0, r1 ldr r1, [r0] ldrb r0, [r2] bics r0, r1 strb r0, [r2] ldr r1, =gBattlePartyID 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, 0x38] bl CopyPlayerPartyMonToBattleData ldr r0, =gActiveBank ldrb r0, [r0] b _0806C574 .pool _0806C55C: ldr r3, =gAbsentBankFlags ldr r1, =gBitTable ldr r2, =gActiveBank 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] _0806C574: bl GetBankSide lsls r0, 24 cmp r0, 0 bne _0806C5B2 ldr r1, =gBattleResults ldrb r0, [r1, 0x4] cmp r0, 0xFE bhi _0806C5B2 adds r0, 0x1 strb r0, [r1, 0x4] b _0806C5B2 .pool _0806C59C: mov r0, r8 movs r1, 0x39 movs r2, 0 bl GetMonData cmp r0, 0 bne _0806C5B2 ldr r0, [sp, 0x28] adds r0, 0x1 lsls r0, 24 b _0806C83E _0806C5B2: ldr r1, [sp, 0x28] adds r0, r1, 0x1 lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x28] ldr r5, [sp, 0x24] adds r1, r5, r1 ldrb r1, [r1] str r1, [sp] adds r0, r1, 0 cmp r0, 0xFE beq _0806C5F4 cmp r0, 0xFE bhi _0806C5D4 cmp r0, 0xFD beq _0806C60A b _0806C612 _0806C5D4: cmp r1, 0xFF bne _0806C612 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 _0806C612 _0806C5F4: mov r0, r8 movs r1, 0x3A movs r2, 0 bl GetMonData lsrs r0, 1 str r0, [sp] cmp r0, 0 bne _0806C612 movs r0, 0x1 b _0806C610 _0806C60A: ldr r0, =gBattleScripting adds r0, 0x23 ldrb r0, [r0] _0806C610: str r0, [sp] _0806C612: 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 _0806C6F0 ldr r0, [sp, 0x18] cmp r0, 0 bne _0806C6E4 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 _0806C65E mov r0, r8 movs r1, 0x3A movs r2, 0 bl GetMonData str r0, [sp] _0806C65E: mov r0, r8 movs r1, 0x39 mov r2, sp bl SetMonData ldr r0, =gMain ldr r1, =0x00000439 adds r0, r1 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806C6EC ldr r2, [sp, 0x38] cmp r2, 0x4 beq _0806C6EC ldr r1, =gBattleMons 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 _0806C6EC ldr r4, =gActiveBank ldrb r0, [r4] bl GetBankSide lsls r0, 24 cmp r0, 0 bne _0806C6EC ldr r1, =gBattleResults ldrb r0, [r1, 0x3] cmp r0, 0xFE bhi _0806C6AE adds r0, 0x1 strb r0, [r1, 0x3] _0806C6AE: ldrb r5, [r4] add r0, sp, 0x38 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 MarkBufferBankForExecution strb r5, [r4] b _0806C6EC .pool _0806C6E4: ldr r1, =gBattleMoveDamage ldr r0, [sp] negs r0, r0 str r0, [r1] _0806C6EC: movs r1, 0 str r1, [sp, 0x20] _0806C6F0: movs r0, 0xEF mov r2, r10 ands r2, r0 mov r10, r2 b _0806C9AA .pool _0806C700: movs r7, 0x2 mov r0, r10 ands r0, r7 cmp r0, 0 beq _0806C70C b _0806C858 _0806C70C: movs r5, 0 ldr r3, [sp, 0x28] adds r3, 0x1 str r3, [sp, 0x40] _0806C714: movs r0, 0x11 adds r0, r5 mov r9, r0 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 CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 ldr r1, [sp] cmp r1, r0 beq _0806C832 ldr r2, [sp, 0x24] ldr r3, [sp, 0x28] 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 CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 ldr r1, [sp] cmp r1, r0 bls _0806C7CC 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 CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 str r0, [sp] _0806C7CC: mov r0, r8 mov r1, r9 mov r2, sp bl SetMonData ldr r0, =gMain ldr r1, =0x00000439 adds r0, r1 ldrb r1, [r0] movs r0, 0x2 ands r0, r1 cmp r0, 0 beq _0806C82E ldr r2, [sp, 0x38] cmp r2, 0x4 beq _0806C82E ldr r4, =gBattleMons movs r0, 0x58 adds r3, r2, 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 _0806C82E ldr r1, =gDisableStructs lsls r0, r2, 3 subs r0, r2 lsls r0, 2 adds r0, r1 ldrb r1, [r0, 0x18] lsrs r1, 4 ldr r2, =gBitTable lsls r0, r5, 2 adds r0, r2 ldr r0, [r0] ands r1, r0 cmp r1, 0 bne _0806C82E adds r0, r5, r3 adds r1, r4, 0 adds r1, 0x24 adds r0, r1 ldr r1, [sp] strb r1, [r0] _0806C82E: movs r3, 0 str r3, [sp, 0x20] _0806C832: adds r5, 0x1 cmp r5, 0x3 bgt _0806C83A b _0806C714 _0806C83A: ldr r5, [sp, 0x40] lsls r0, r5, 24 _0806C83E: lsrs r0, 24 str r0, [sp, 0x28] b _0806C9AA .pool _0806C858: ldr r6, [sp, 0x14] adds r6, 0x11 mov r0, r8 adds r1, r6, 0 movs r2, 0 bl GetMonData str r0, [sp] ldr r5, [sp, 0x14] 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 ldr r2, [sp] cmp r2, r0 bne _0806C8A0 b _0806C9AA _0806C8A0: ldr r1, [sp, 0x28] adds r0, r1, 0x1 lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x28] ldr r0, [sp, 0x24] 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 ldr r1, [sp] cmp r1, r0 bls _0806C914 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 str r0, [sp] _0806C914: mov r0, r8 adds r1, r6, 0 mov r2, sp bl SetMonData ldr r0, =gMain ldr r1, =0x00000439 adds r0, r1 ldrb r1, [r0] adds r0, r7, 0 ands r0, r1 cmp r0, 0 beq _0806C978 ldr r2, [sp, 0x38] cmp r2, 0x4 beq _0806C978 ldr r4, =gBattleMons 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 _0806C978 ldr r1, =gDisableStructs lsls r0, r2, 3 subs r0, r2 lsls r0, 2 adds r0, r1 ldrb r1, [r0, 0x18] lsrs r1, 4 ldr r2, =gBitTable ldr r5, [sp, 0x14] lsls r0, r5, 2 adds r0, r2 ldr r0, [r0] ands r1, r0 cmp r1, 0 bne _0806C978 adds r0, r5, r3 adds r1, r4, 0 adds r1, 0x24 adds r0, r1 ldr r1, [sp] strb r1, [r0] _0806C978: movs r0, 0 str r0, [sp, 0x20] b _0806C9AA .pool _0806C994: mov r0, r8 movs r1, 0x2 ldr r2, [sp, 0xC] bl GetEvolutionTargetSpecies lsls r0, 16 lsrs r1, r0, 16 cmp r1, 0 beq _0806C9AA bl _0806BEE0 _0806C9AA: ldr r1, [sp, 0x2C] adds r1, 0x1 str r1, [sp, 0x2C] mov r2, r10 lsrs r2, 1 mov r10, r2 cmp r2, 0 beq _0806C9BC b _0806C3E6 _0806C9BC: b _0806CD4C _0806C9BE: ldr r3, [sp, 0x24] ldr r5, [sp, 0x1C] adds r0, r3, r5 ldrb r0, [r0] mov r10, r0 movs r0, 0 str r0, [sp, 0x2C] mov r1, r10 cmp r1, 0 bne _0806C9D4 b _0806CD4C _0806C9D4: movs r0, 0x1 mov r2, r10 ands r0, r2 cmp r0, 0 bne _0806C9E0 b _0806CD3A _0806C9E0: ldr r3, [sp, 0x2C] cmp r3, 0x7 bls _0806C9E8 b _0806CD3A _0806C9E8: lsls r0, r3, 2 ldr r1, =_0806C9F8 adds r0, r1 ldr r0, [r0] mov pc, r0 .pool .align 2, 0 _0806C9F8: .4byte _0806CA18 .4byte _0806CA18 .4byte _0806CA18 .4byte _0806CA18 .4byte _0806CAB8 .4byte _0806CB94 .4byte _0806CC00 .4byte _0806CC68 _0806CA18: mov r0, r8 bl GetMonEVCount lsls r0, 16 lsrs r6, r0, 16 ldr r5, [sp, 0x24] ldr r1, [sp, 0x28] adds r0, r5, r1 ldrb r5, [r0] ldr r0, =gUnknown_08329EC2 ldr r4, [sp, 0x2C] 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, 0x4] lsls r0, r5, 24 asrs r2, r0, 24 cmp r2, 0 ble _0806CA84 ldr r0, =0x000001fd cmp r6, r0 bls _0806CA52 bl _0806BEF0 _0806CA52: adds r3, r1, 0 cmp r3, 0x63 ble _0806CA5A b _0806CD3A _0806CA5A: adds r1, r3, r2 cmp r1, 0x64 ble _0806CA70 adds r0, r2, 0 adds r0, 0x64 subs r5, r0, r1 b _0806CA72 .pool _0806CA70: adds r5, r2, 0 _0806CA72: adds r1, r6, r5 movs r0, 0xFF lsls r0, 1 cmp r1, r0 bls _0806CA80 adds r0, r5, r0 subs r5, r0, r1 _0806CA80: adds r0, r3, r5 b _0806CA98 _0806CA84: cmp r1, 0 bne _0806CA8E movs r2, 0x1 str r2, [sp, 0x3C] b _0806CD30 _0806CA8E: adds r0, r1, r2 str r0, [sp, 0x4] cmp r0, 0 bge _0806CA9A movs r0, 0 _0806CA98: str r0, [sp, 0x4] _0806CA9A: ldr r0, =gUnknown_08329EC2 adds r0, r4, r0 ldrb r1, [r0] add r2, sp, 0x4 mov r0, r8 bl SetMonData mov r0, r8 bl CalculateMonStats movs r3, 0 str r3, [sp, 0x20] b _0806CD30 .pool _0806CAB8: mov r0, r8 movs r1, 0x15 movs r2, 0 bl GetMonData ldr r1, =gUnknown_08329D22 ldr r5, [sp, 0x14] adds r1, r5, r1 ldrb r1, [r1] ands r0, r1 lsls r1, r5, 1 lsrs r0, r1 str r0, [sp] adds r6, r5, 0 adds r6, 0xD mov r0, r8 adds r1, r6, 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, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r5, r0, 24 ldr r0, [sp] cmp r0, 0x2 bls _0806CB0A b _0806CD3A _0806CB0A: cmp r5, 0x4 bhi _0806CB10 b _0806CD3A _0806CB10: mov r0, r8 movs r1, 0x15 movs r2, 0 bl GetMonData str r0, [sp] ldr r1, =gUnknown_08329D26 ldr r2, [sp, 0x14] adds r1, r2, r1 ldrb r2, [r1] ands r2, r0 str r2, [sp] ldr r0, =gUnknown_08329D2A ldr r3, [sp, 0x14] 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, r6, 0 movs r2, 0 bl GetMonData lsls r0, 16 lsrs r0, 16 ldr r1, [sp] lsls r1, 24 lsrs r1, 24 ldr r2, [sp, 0x14] bl CalculatePPWithBonus lsls r0, 24 lsrs r0, 24 subs r0, r5 str r0, [sp] ldr r4, [sp, 0x14] 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 r5, 0 str r5, [sp, 0x20] b _0806CD3A .pool _0806CB94: mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData cmp r0, 0x63 bls _0806CBA4 b _0806CD30 _0806CBA4: ldr r0, [sp, 0x20] cmp r0, 0 beq _0806CBB2 ldr r1, [sp, 0x3C] cmp r1, 0 bne _0806CBB2 b _0806CD30 _0806CBB2: bl sub_806F104 lsls r0, 24 cmp r0, 0 beq _0806CBBE b _0806CD30 _0806CBBE: ldr r2, [sp, 0x30] cmp r2, 0 beq _0806CBC6 b _0806CD30 _0806CBC6: ldr r3, [sp, 0x24] ldr r5, [sp, 0x28] adds r0, r3, r5 ldrb r0, [r0] str r0, [sp, 0x30] mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData adds r5, r0, 0 str r5, [sp, 0x8] ldr r0, [sp, 0x30] lsls r4, r0, 24 asrs r1, r4, 24 cmp r1, 0 ble _0806CCCC ldr r2, [sp, 0x34] cmp r2, 0x1B bne _0806CCCC movs r0, 0x96 muls r0, r1 movs r1, 0x64 bl __divsi3 adds r0, r5, r0 str r0, [sp, 0x8] adds r2, r4, 0 b _0806CCD8 _0806CC00: mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData cmp r0, 0x63 bhi _0806CC10 b _0806CD30 _0806CC10: mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData cmp r0, 0xC7 bls _0806CC20 b _0806CD30 _0806CC20: ldr r0, [sp, 0x20] cmp r0, 0 beq _0806CC2E ldr r1, [sp, 0x3C] cmp r1, 0 bne _0806CC2E b _0806CD30 _0806CC2E: bl sub_806F104 lsls r0, 24 cmp r0, 0 bne _0806CD30 ldr r2, [sp, 0x30] cmp r2, 0 bne _0806CD30 ldr r3, [sp, 0x24] ldr r5, [sp, 0x28] adds r0, r3, r5 ldrb r0, [r0] str r0, [sp, 0x30] mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData adds r4, r0, 0 str r4, [sp, 0x8] ldr r0, [sp, 0x30] lsls r5, r0, 24 asrs r1, r5, 24 cmp r1, 0 ble _0806CCCC ldr r2, [sp, 0x34] cmp r2, 0x1B beq _0806CCBA b _0806CCCC _0806CC68: mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData cmp r0, 0xC7 bls _0806CD30 ldr r0, [sp, 0x20] cmp r0, 0 beq _0806CC82 ldr r1, [sp, 0x3C] cmp r1, 0 beq _0806CD30 _0806CC82: bl sub_806F104 lsls r0, 24 cmp r0, 0 bne _0806CD30 ldr r2, [sp, 0x30] cmp r2, 0 bne _0806CD30 ldr r3, [sp, 0x24] ldr r5, [sp, 0x28] adds r0, r3, r5 ldrb r0, [r0] str r0, [sp, 0x30] mov r0, r8 movs r1, 0x20 movs r2, 0 bl GetMonData adds r4, r0, 0 str r4, [sp, 0x8] ldr r0, [sp, 0x30] lsls r5, r0, 24 asrs r1, r5, 24 cmp r1, 0 ble _0806CCCC ldr r2, [sp, 0x34] cmp r2, 0x1B bne _0806CCCC _0806CCBA: movs r0, 0x96 muls r0, r1 movs r1, 0x64 bl __divsi3 adds r0, r4, r0 str r0, [sp, 0x8] adds r2, r5, 0 b _0806CCD8 _0806CCCC: ldr r3, [sp, 0x30] lsls r2, r3, 24 asrs r1, r2, 24 ldr r0, [sp, 0x8] adds r0, r1 str r0, [sp, 0x8] _0806CCD8: cmp r2, 0 ble _0806CD0E mov r0, r8 movs r1, 0x26 movs r2, 0 bl GetMonData cmp r0, 0xB bne _0806CCF0 ldr r0, [sp, 0x8] adds r0, 0x1 str r0, [sp, 0x8] _0806CCF0: 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 _0806CD0E ldr r0, [sp, 0x8] adds r0, 0x1 str r0, [sp, 0x8] _0806CD0E: ldr r0, [sp, 0x8] cmp r0, 0 bge _0806CD18 movs r0, 0 str r0, [sp, 0x8] _0806CD18: ldr r0, [sp, 0x8] cmp r0, 0xFF ble _0806CD22 movs r0, 0xFF str r0, [sp, 0x8] _0806CD22: add r2, sp, 0x8 mov r0, r8 movs r1, 0x20 bl SetMonData movs r5, 0 str r5, [sp, 0x20] _0806CD30: ldr r0, [sp, 0x28] adds r0, 0x1 lsls r0, 24 lsrs r0, 24 str r0, [sp, 0x28] _0806CD3A: ldr r0, [sp, 0x2C] adds r0, 0x1 str r0, [sp, 0x2C] mov r1, r10 lsrs r1, 1 mov r10, r1 cmp r1, 0 beq _0806CD4C b _0806C9D4 _0806CD4C: ldr r2, [sp, 0x1C] adds r2, 0x1 str r2, [sp, 0x1C] cmp r2, 0x5 bgt _0806CD5A bl _0806BEFC _0806CD5A: ldr r0, [sp, 0x20] _0806CD5C: add sp, 0x44 pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r7} pop {r1} bx r1 thumb_func_end ExecuteTableBasedItemEffect .align 2, 0 @ Don't pad with nop.