mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-25 15:23:22 -05:00
1973 lines
31 KiB
ArmAsm
1973 lines
31 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "constants/constants.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start ExecuteTableBasedItemEffect_
|
|
ExecuteTableBasedItemEffect_: @ 80413C0
|
|
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_80413E4
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
add sp, 0x4
|
|
pop {r4}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end ExecuteTableBasedItemEffect_
|
|
|
|
thumb_func_start sub_80413E4
|
|
sub_80413E4: @ 80413E4
|
|
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 _08041474
|
|
ldr r0, _08041450 @ =gMain
|
|
ldr r4, _08041454 @ =0x00000439
|
|
adds r0, r4
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041460
|
|
ldr r2, _08041458 @ =gUnknown_2023F54
|
|
ldr r0, _0804145C @ =gUnknown_2024004
|
|
ldrb r1, [r0]
|
|
lsls r0, r1, 3
|
|
subs r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x7]
|
|
b _0804147C
|
|
.align 2, 0
|
|
_08041450: .4byte gMain
|
|
_08041454: .4byte 0x00000439
|
|
_08041458: .4byte gUnknown_2023F54
|
|
_0804145C: .4byte gUnknown_2024004
|
|
_08041460:
|
|
ldr r0, _0804146C @ =gSaveBlock1Ptr
|
|
ldr r0, [r0]
|
|
ldr r5, _08041470 @ =0x0000311a
|
|
adds r0, r5
|
|
ldrb r0, [r0]
|
|
b _0804147C
|
|
.align 2, 0
|
|
_0804146C: .4byte gSaveBlock1Ptr
|
|
_08041470: .4byte 0x0000311a
|
|
_08041474:
|
|
bl ItemId_GetHoldEffect
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
_0804147C:
|
|
str r0, [sp, 0x30]
|
|
ldr r1, _080414D8 @ =gUnknown_2023D6F
|
|
ldr r0, _080414DC @ =gUnknown_2024004
|
|
ldrb r2, [r0]
|
|
strb r2, [r1]
|
|
ldr r0, _080414E0 @ =gMain
|
|
ldr r1, _080414E4 @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
cmp r1, 0
|
|
beq _0804151C
|
|
ldr r0, _080414E8 @ =gActiveBattler
|
|
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, 0x18]
|
|
ldr r0, _080414EC @ =gUnknown_2023BCC
|
|
ldr r4, [sp, 0x8]
|
|
subs r4, 0xD
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
bge _08041528
|
|
ldr r2, _080414F0 @ =gBattlerPartyIndexes
|
|
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 _080414F4
|
|
ldr r0, [sp, 0x18]
|
|
str r0, [sp, 0x34]
|
|
b _08041528
|
|
.align 2, 0
|
|
_080414D8: .4byte gUnknown_2023D6F
|
|
_080414DC: .4byte gUnknown_2024004
|
|
_080414E0: .4byte gMain
|
|
_080414E4: .4byte 0x00000439
|
|
_080414E8: .4byte gActiveBattler
|
|
_080414EC: .4byte gUnknown_2023BCC
|
|
_080414F0: .4byte gBattlerPartyIndexes
|
|
_080414F4:
|
|
ldr r1, [sp, 0x18]
|
|
adds r1, 0x2
|
|
str r1, [sp, 0x18]
|
|
ldr r0, _08041518 @ =gUnknown_2023BCC
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
bge _08041528
|
|
lsls r0, r1, 1
|
|
adds r0, r2
|
|
ldrh r1, [r0]
|
|
lsrs r0, r5, 16
|
|
cmp r1, r0
|
|
bne _080414F4
|
|
ldr r2, [sp, 0x18]
|
|
lsls r0, r2, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x34]
|
|
b _08041528
|
|
.align 2, 0
|
|
_08041518: .4byte gUnknown_2023BCC
|
|
_0804151C:
|
|
ldr r0, _08041544 @ =gActiveBattler
|
|
strb r1, [r0]
|
|
movs r3, 0x4
|
|
str r3, [sp, 0x34]
|
|
ldr r4, [sp, 0x8]
|
|
subs r4, 0xD
|
|
_08041528:
|
|
lsls r0, r4, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0xA5
|
|
bhi _080415A8
|
|
ldr r1, _08041548 @ =gUnknown_82528BC
|
|
lsls r0, r4, 2
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
cmp r0, 0
|
|
bne _0804154C
|
|
ldr r4, [sp, 0x8]
|
|
cmp r4, 0xAF
|
|
beq _08041552
|
|
b _080415A8
|
|
.align 2, 0
|
|
_08041544: .4byte gActiveBattler
|
|
_08041548: .4byte gUnknown_82528BC
|
|
_0804154C:
|
|
ldr r5, [sp, 0x8]
|
|
cmp r5, 0xAF
|
|
bne _080415AE
|
|
_08041552:
|
|
ldr r0, _08041574 @ =gMain
|
|
ldr r1, _08041578 @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041584
|
|
ldr r0, _0804157C @ =gActiveBattler
|
|
ldrb r1, [r0]
|
|
lsls r0, r1, 3
|
|
subs r0, r1
|
|
lsls r0, 2
|
|
ldr r1, _08041580 @ =gUnknown_2023F5C
|
|
adds r0, r1
|
|
b _080415AE
|
|
.align 2, 0
|
|
_08041574: .4byte gMain
|
|
_08041578: .4byte 0x00000439
|
|
_0804157C: .4byte gActiveBattler
|
|
_08041580: .4byte gUnknown_2023F5C
|
|
_08041584:
|
|
ldr r0, _08041590 @ =gSaveBlock1Ptr
|
|
ldr r0, [r0]
|
|
ldr r2, _08041594 @ =0x00003108
|
|
adds r2, r0, r2
|
|
str r2, [sp, 0x20]
|
|
b _080415B0
|
|
.align 2, 0
|
|
_08041590: .4byte gSaveBlock1Ptr
|
|
_08041594: .4byte 0x00003108
|
|
_08041598:
|
|
mov r0, r8
|
|
movs r2, 0
|
|
ldr r3, [sp, 0xC]
|
|
bl BeginEvolutionScene
|
|
movs r0, 0
|
|
bl _08042394
|
|
_080415A8:
|
|
movs r0, 0x1
|
|
bl _08042394
|
|
_080415AE:
|
|
str r0, [sp, 0x20]
|
|
_080415B0:
|
|
movs r3, 0
|
|
str r3, [sp, 0x18]
|
|
_080415B4:
|
|
ldr r4, [sp, 0x18]
|
|
cmp r4, 0x5
|
|
bls _080415BE
|
|
bl _08042384
|
|
_080415BE:
|
|
lsls r0, r4, 2
|
|
ldr r1, _080415C8 @ =_080415CC
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_080415C8: .4byte _080415CC
|
|
.align 2, 0
|
|
_080415CC:
|
|
.4byte _080415E4
|
|
.4byte _080416B0
|
|
.4byte _08041744
|
|
.4byte _080417D8
|
|
.4byte _080419B8
|
|
.4byte _08042056
|
|
_080415E4:
|
|
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 _0804162C
|
|
ldr r0, _0804169C @ =gMain
|
|
ldr r1, _080416A0 @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0804162C
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _0804162C
|
|
ldr r1, _080416A4 @ =gBattleMons
|
|
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 _0804162C
|
|
ldr r0, _080416A8 @ =0xfff0ffff
|
|
ands r1, r0
|
|
str r1, [r2]
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
_0804162C:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x30
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0804165A
|
|
ldr r1, _080416A4 @ =gBattleMons
|
|
ldr r0, _080416AC @ =gActiveBattler
|
|
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 _0804165A
|
|
orrs r1, r3
|
|
str r1, [r2]
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_0804165A:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _08041668
|
|
bl _08042384
|
|
_08041668:
|
|
ldr r6, _080416A4 @ =gBattleMons
|
|
ldr r5, _080416AC @ =gActiveBattler
|
|
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 _08041682
|
|
bl _08042384
|
|
_08041682:
|
|
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 _08041696
|
|
b _0804198A
|
|
_08041696:
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x19]
|
|
b _0804198A
|
|
.align 2, 0
|
|
_0804169C: .4byte gMain
|
|
_080416A0: .4byte 0x00000439
|
|
_080416A4: .4byte gBattleMons
|
|
_080416A8: .4byte 0xfff0ffff
|
|
_080416AC: .4byte gActiveBattler
|
|
_080416B0:
|
|
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 _080416F6
|
|
ldr r7, _0804173C @ =gBattleMons
|
|
ldr r5, _08041740 @ =gActiveBattler
|
|
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 _080416F6
|
|
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 _080416F2
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1A]
|
|
_080416F2:
|
|
movs r2, 0
|
|
str r2, [sp, 0x1C]
|
|
_080416F6:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _08041704
|
|
bl _08042384
|
|
_08041704:
|
|
ldr r6, _0804173C @ =gBattleMons
|
|
ldr r5, _08041740 @ =gActiveBattler
|
|
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 _0804171E
|
|
bl _08042384
|
|
_0804171E:
|
|
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 _08041734
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1B]
|
|
_08041734:
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
bl _08042384
|
|
.align 2, 0
|
|
_0804173C: .4byte gBattleMons
|
|
_08041740: .4byte gActiveBattler
|
|
_08041744:
|
|
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 _0804178A
|
|
ldr r7, _080417D0 @ =gBattleMons
|
|
ldr r5, _080417D4 @ =gActiveBattler
|
|
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 _0804178A
|
|
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 _08041786
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1E]
|
|
_08041786:
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
_0804178A:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _08041798
|
|
bl _08042384
|
|
_08041798:
|
|
ldr r6, _080417D0 @ =gBattleMons
|
|
ldr r5, _080417D4 @ =gActiveBattler
|
|
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 _080417B2
|
|
bl _08042384
|
|
_080417B2:
|
|
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 _080417C8
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1C]
|
|
_080417C8:
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
bl _08042384
|
|
.align 2, 0
|
|
_080417D0: .4byte gBattleMons
|
|
_080417D4: .4byte gActiveBattler
|
|
_080417D8:
|
|
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 _08041820
|
|
ldr r5, _08041994 @ =gUnknown_2023DE4
|
|
ldr r4, _08041998 @ =gActiveBattler
|
|
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 _08041820
|
|
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, 0x1C]
|
|
_08041820:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x40
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041882
|
|
mov r0, r8
|
|
movs r1, 0x38
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x64
|
|
beq _08041882
|
|
ldr r5, _0804199C @ =gUnknown_8253AE4
|
|
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, _080419A0 @ =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 sub_804037C
|
|
mov r0, r8
|
|
bl CalculateMonStats
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
_08041882:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x20
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _080418BE
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x7
|
|
ldr r3, [sp, 0x34]
|
|
bl sub_80423A4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _080418BE
|
|
ldr r1, [sp, 0x34]
|
|
cmp r1, 0x4
|
|
beq _080418BA
|
|
ldr r1, _080419A4 @ =gBattleMons
|
|
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, _080419A8 @ =0xf7ffffff
|
|
ands r0, r1
|
|
str r0, [r2]
|
|
_080418BA:
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_080418BE:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _080418DE
|
|
ldr r2, _080419AC @ =0x00000f88
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
ldr r3, [sp, 0x34]
|
|
bl sub_80423A4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _080418DE
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
_080418DE:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x8
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _080418FE
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x10
|
|
ldr r3, [sp, 0x34]
|
|
bl sub_80423A4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _080418FE
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
_080418FE:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x4
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0804191E
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x20
|
|
ldr r3, [sp, 0x34]
|
|
bl sub_80423A4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0804191E
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
_0804191E:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0804193E
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x40
|
|
ldr r3, [sp, 0x34]
|
|
bl sub_80423A4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0804193E
|
|
movs r2, 0
|
|
str r2, [sp, 0x1C]
|
|
_0804193E:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0804194C
|
|
bl _08042384
|
|
_0804194C:
|
|
ldr r0, _080419B0 @ =gMain
|
|
ldr r3, _080419B4 @ =0x00000439
|
|
adds r0, r3
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08041960
|
|
bl _08042384
|
|
_08041960:
|
|
ldr r4, [sp, 0x34]
|
|
cmp r4, 0x4
|
|
bne _0804196A
|
|
bl _08042384
|
|
_0804196A:
|
|
ldr r1, _080419A4 @ =gBattleMons
|
|
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 _08041982
|
|
bl _08042384
|
|
_08041982:
|
|
movs r0, 0x8
|
|
negs r0, r0
|
|
ands r1, r0
|
|
str r1, [r2]
|
|
_0804198A:
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
bl _08042384
|
|
.align 2, 0
|
|
_08041994: .4byte gUnknown_2023DE4
|
|
_08041998: .4byte gActiveBattler
|
|
_0804199C: .4byte gUnknown_8253AE4
|
|
_080419A0: .4byte gBaseStats
|
|
_080419A4: .4byte gBattleMons
|
|
_080419A8: .4byte 0xf7ffffff
|
|
_080419AC: .4byte 0x00000f88
|
|
_080419B0: .4byte gMain
|
|
_080419B4: .4byte 0x00000439
|
|
_080419B8:
|
|
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 _08041A90
|
|
movs r0, 0xDF
|
|
ands r3, r0
|
|
mov r10, r3
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _08041ABC @ =gUnknown_825DEA1
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x28]
|
|
ldr r0, [sp]
|
|
cmp r0, 0x2
|
|
bhi _08041A90
|
|
ldr r0, [sp, 0x28]
|
|
cmp r0, 0x4
|
|
bls _08041A90
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _08041AC0 @ =gUnknown_825DEA9
|
|
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 sub_804037C
|
|
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 CalculatePPWithBonus
|
|
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 sub_804037C
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_08041A90:
|
|
movs r5, 0
|
|
str r5, [sp, 0x28]
|
|
mov r0, r10
|
|
cmp r0, 0
|
|
bne _08041A9E
|
|
bl _08042384
|
|
_08041A9E:
|
|
movs r0, 0x1
|
|
mov r1, r10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08041AAA
|
|
b _08042042
|
|
_08041AAA:
|
|
ldr r2, [sp, 0x28]
|
|
cmp r2, 0x7
|
|
bls _08041AB2
|
|
b _08042042
|
|
_08041AB2:
|
|
lsls r0, r2, 2
|
|
ldr r1, _08041AC4 @ =_08041AC8
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_08041ABC: .4byte gUnknown_825DEA1
|
|
_08041AC0: .4byte gUnknown_825DEA9
|
|
_08041AC4: .4byte _08041AC8
|
|
.align 2, 0
|
|
_08041AC8:
|
|
.4byte _08041AE8
|
|
.4byte _08041AE8
|
|
.4byte _08041B70
|
|
.4byte _08041D94
|
|
.4byte _08042042
|
|
.4byte _08042042
|
|
.4byte _08042042
|
|
.4byte _0804202C
|
|
_08041AE8:
|
|
mov r0, r8
|
|
bl GetMonEVCount
|
|
lsls r0, 16
|
|
lsrs r5, r0, 16
|
|
ldr r0, _08041B28 @ =0x000001fd
|
|
cmp r5, r0
|
|
bls _08041AFA
|
|
b _080415A8
|
|
_08041AFA:
|
|
ldr r0, _08041B2C @ =gUnknown_825DFEA
|
|
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 _08041B14
|
|
b _08042042
|
|
_08041B14:
|
|
ldr r4, [sp, 0x20]
|
|
ldr r2, [sp, 0x24]
|
|
adds r0, r4, r2
|
|
ldrb r0, [r0]
|
|
adds r1, r0
|
|
cmp r1, 0x64
|
|
bls _08041B30
|
|
adds r0, 0x64
|
|
subs r4, r0, r1
|
|
b _08041B32
|
|
.align 2, 0
|
|
_08041B28: .4byte 0x000001fd
|
|
_08041B2C: .4byte gUnknown_825DFEA
|
|
_08041B30:
|
|
adds r4, r0, 0
|
|
_08041B32:
|
|
adds r1, r5, r4
|
|
movs r0, 0xFF
|
|
lsls r0, 1
|
|
cmp r1, r0
|
|
bls _08041B40
|
|
adds r0, r4, r0
|
|
subs r4, r0, r1
|
|
_08041B40:
|
|
ldr r0, [sp]
|
|
adds r0, r4
|
|
str r0, [sp]
|
|
ldr r0, _08041B6C @ =gUnknown_825DFEA
|
|
ldr r3, [sp, 0x28]
|
|
adds r0, r3, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
mov r2, sp
|
|
bl sub_804037C
|
|
mov r0, r8
|
|
bl CalculateMonStats
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
b _08042042
|
|
.align 2, 0
|
|
_08041B6C: .4byte gUnknown_825DFEA
|
|
_08041B70:
|
|
movs r0, 0x10
|
|
mov r5, r10
|
|
ands r0, r5
|
|
cmp r0, 0
|
|
beq _08041C30
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08041B90
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
b _08041ED6
|
|
_08041B90:
|
|
ldr r0, _08041BD8 @ =gMain
|
|
ldr r1, _08041BDC @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r4, 0x2
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041C46
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _08041BF0
|
|
ldr r2, _08041BE0 @ =gAbsentBattlerFlags
|
|
ldr r1, _08041BE4 @ =gBitTable
|
|
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, _08041BE8 @ =gBattlerPartyIndexes
|
|
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 CopyPlayerPartyMonToBattleData
|
|
ldr r0, _08041BEC @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
b _08041C08
|
|
.align 2, 0
|
|
_08041BD8: .4byte gMain
|
|
_08041BDC: .4byte 0x00000439
|
|
_08041BE0: .4byte gAbsentBattlerFlags
|
|
_08041BE4: .4byte gBitTable
|
|
_08041BE8: .4byte gBattlerPartyIndexes
|
|
_08041BEC: .4byte gActiveBattler
|
|
_08041BF0:
|
|
ldr r3, _08041C20 @ =gAbsentBattlerFlags
|
|
ldr r1, _08041C24 @ =gBitTable
|
|
ldr r2, _08041C28 @ =gActiveBattler
|
|
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]
|
|
_08041C08:
|
|
bl GetBankSide
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08041C46
|
|
ldr r1, _08041C2C @ =gBattleResults
|
|
ldrb r0, [r1, 0x4]
|
|
cmp r0, 0xFE
|
|
bhi _08041C46
|
|
adds r0, 0x1
|
|
strb r0, [r1, 0x4]
|
|
b _08041C46
|
|
.align 2, 0
|
|
_08041C20: .4byte gAbsentBattlerFlags
|
|
_08041C24: .4byte gBitTable
|
|
_08041C28: .4byte gActiveBattler
|
|
_08041C2C: .4byte gBattleResults
|
|
_08041C30:
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
bne _08041C46
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
b _08041ED6
|
|
_08041C46:
|
|
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 _08041C88
|
|
cmp r0, 0xFE
|
|
bhi _08041C68
|
|
cmp r0, 0xFD
|
|
beq _08041C9E
|
|
b _08041CA6
|
|
_08041C68:
|
|
cmp r1, 0xFF
|
|
bne _08041CA6
|
|
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 _08041CA6
|
|
_08041C88:
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
lsrs r0, 1
|
|
str r0, [sp]
|
|
cmp r0, 0
|
|
bne _08041CA6
|
|
movs r0, 0x1
|
|
b _08041CA4
|
|
_08041C9E:
|
|
ldr r0, _08041D60 @ =gBattleScripting
|
|
adds r0, 0x23
|
|
ldrb r0, [r0]
|
|
_08041CA4:
|
|
str r0, [sp]
|
|
_08041CA6:
|
|
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 _08041D84
|
|
ldr r5, [sp, 0x14]
|
|
cmp r5, 0
|
|
bne _08041D78
|
|
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 _08041CF2
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
_08041CF2:
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
mov r2, sp
|
|
bl sub_804037C
|
|
ldr r0, _08041D64 @ =gMain
|
|
ldr r1, _08041D68 @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041D80
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _08041D80
|
|
ldr r1, _08041D6C @ =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 _08041D80
|
|
ldr r4, _08041D70 @ =gActiveBattler
|
|
ldrb r0, [r4]
|
|
bl GetBankSide
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08041D80
|
|
ldr r1, _08041D74 @ =gBattleResults
|
|
ldrb r0, [r1, 0x3]
|
|
cmp r0, 0xFE
|
|
bhi _08041D42
|
|
adds r0, 0x1
|
|
strb r0, [r1, 0x3]
|
|
_08041D42:
|
|
ldrb r5, [r4]
|
|
add r0, sp, 0x34
|
|
ldrb r0, [r0]
|
|
strb r0, [r4]
|
|
movs r0, 0
|
|
movs r1, 0
|
|
movs r2, 0
|
|
bl EmitGetMonData
|
|
ldrb r0, [r4]
|
|
bl MarkBufferBankForExecution
|
|
strb r5, [r4]
|
|
b _08041D80
|
|
.align 2, 0
|
|
_08041D60: .4byte gBattleScripting
|
|
_08041D64: .4byte gMain
|
|
_08041D68: .4byte 0x00000439
|
|
_08041D6C: .4byte gBattleMons
|
|
_08041D70: .4byte gActiveBattler
|
|
_08041D74: .4byte gBattleResults
|
|
_08041D78:
|
|
ldr r1, _08041D90 @ =gBattleMoveDamage
|
|
ldr r0, [sp]
|
|
negs r0, r0
|
|
str r0, [r1]
|
|
_08041D80:
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
_08041D84:
|
|
movs r0, 0xEF
|
|
mov r2, r10
|
|
ands r2, r0
|
|
mov r10, r2
|
|
b _08042042
|
|
.align 2, 0
|
|
_08041D90: .4byte gBattleMoveDamage
|
|
_08041D94:
|
|
movs r7, 0x2
|
|
mov r0, r10
|
|
ands r0, r7
|
|
cmp r0, 0
|
|
beq _08041DA0
|
|
b _08041EF0
|
|
_08041DA0:
|
|
movs r5, 0
|
|
ldr r3, [sp, 0x24]
|
|
adds r3, 0x1
|
|
str r3, [sp, 0x38]
|
|
_08041DA8:
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
beq _08041ECA
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
bls _08041E60
|
|
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]
|
|
_08041E60:
|
|
mov r0, r8
|
|
mov r1, r9
|
|
mov r2, sp
|
|
bl sub_804037C
|
|
ldr r0, _08041EDC @ =gMain
|
|
ldr r4, _08041EE0 @ =0x00000439
|
|
adds r0, r4
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08041EC6
|
|
ldr r0, [sp, 0x34]
|
|
cmp r0, 0x4
|
|
beq _08041EC6
|
|
ldr r4, _08041EE4 @ =gBattleMons
|
|
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 _08041EC6
|
|
ldr r1, _08041EE8 @ =gDisableStructs
|
|
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, _08041EEC @ =gBitTable
|
|
lsls r0, r5, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _08041EC6
|
|
adds r0, r5, r3
|
|
adds r1, r4, 0
|
|
adds r1, 0x24
|
|
adds r0, r1
|
|
ldr r1, [sp]
|
|
strb r1, [r0]
|
|
_08041EC6:
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
_08041ECA:
|
|
adds r5, 0x1
|
|
cmp r5, 0x3
|
|
bgt _08041ED2
|
|
b _08041DA8
|
|
_08041ED2:
|
|
ldr r4, [sp, 0x38]
|
|
lsls r0, r4, 24
|
|
_08041ED6:
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
b _08042042
|
|
.align 2, 0
|
|
_08041EDC: .4byte gMain
|
|
_08041EE0: .4byte 0x00000439
|
|
_08041EE4: .4byte gBattleMons
|
|
_08041EE8: .4byte gDisableStructs
|
|
_08041EEC: .4byte gBitTable
|
|
_08041EF0:
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r2, [sp]
|
|
cmp r2, r0
|
|
bne _08041F38
|
|
b _08042042
|
|
_08041F38:
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
bls _08041FAC
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp]
|
|
_08041FAC:
|
|
mov r0, r8
|
|
adds r1, r6, 0
|
|
mov r2, sp
|
|
bl sub_804037C
|
|
ldr r0, _08042018 @ =gMain
|
|
ldr r1, _0804201C @ =0x00000439
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
adds r0, r7, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08042010
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _08042010
|
|
ldr r4, _08042020 @ =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 _08042010
|
|
ldr r1, _08042024 @ =gDisableStructs
|
|
lsls r0, r2, 3
|
|
subs r0, r2
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldrb r1, [r0, 0x18]
|
|
lsrs r1, 4
|
|
ldr r2, _08042028 @ =gBitTable
|
|
ldr r5, [sp, 0x10]
|
|
lsls r0, r5, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _08042010
|
|
adds r0, r5, r3
|
|
adds r1, r4, 0
|
|
adds r1, 0x24
|
|
adds r0, r1
|
|
ldr r1, [sp]
|
|
strb r1, [r0]
|
|
_08042010:
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
b _08042042
|
|
.align 2, 0
|
|
_08042018: .4byte gMain
|
|
_0804201C: .4byte 0x00000439
|
|
_08042020: .4byte gBattleMons
|
|
_08042024: .4byte gDisableStructs
|
|
_08042028: .4byte gBitTable
|
|
_0804202C:
|
|
mov r0, r8
|
|
movs r1, 0x2
|
|
ldr r2, [sp, 0x8]
|
|
bl sub_8042EC4
|
|
lsls r0, 16
|
|
lsrs r1, r0, 16
|
|
cmp r1, 0
|
|
beq _08042042
|
|
bl _08041598
|
|
_08042042:
|
|
ldr r1, [sp, 0x28]
|
|
adds r1, 0x1
|
|
str r1, [sp, 0x28]
|
|
mov r2, r10
|
|
lsrs r2, 1
|
|
mov r10, r2
|
|
cmp r2, 0
|
|
beq _08042054
|
|
b _08041A9E
|
|
_08042054:
|
|
b _08042384
|
|
_08042056:
|
|
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 _0804206A
|
|
b _08042384
|
|
_0804206A:
|
|
movs r0, 0x1
|
|
mov r1, r10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08042076
|
|
b _08042372
|
|
_08042076:
|
|
ldr r2, [sp, 0x28]
|
|
cmp r2, 0x7
|
|
bls _0804207E
|
|
b _08042372
|
|
_0804207E:
|
|
lsls r0, r2, 2
|
|
ldr r1, _08042088 @ =_0804208C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_08042088: .4byte _0804208C
|
|
.align 2, 0
|
|
_0804208C:
|
|
.4byte _080420AC
|
|
.4byte _080420AC
|
|
.4byte _080420AC
|
|
.4byte _080420AC
|
|
.4byte _08042130
|
|
.4byte _08042204
|
|
.4byte _0804225E
|
|
.4byte _080422B4
|
|
_080420AC:
|
|
mov r0, r8
|
|
bl GetMonEVCount
|
|
lsls r0, 16
|
|
lsrs r5, r0, 16
|
|
ldr r0, _080420F4 @ =0x000001fd
|
|
cmp r5, r0
|
|
bls _080420C0
|
|
bl _080415A8
|
|
_080420C0:
|
|
ldr r0, _080420F8 @ =gUnknown_825DFEA
|
|
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 _080420DE
|
|
b _08042372
|
|
_080420DE:
|
|
ldr r3, [sp, 0x20]
|
|
ldr r4, [sp, 0x24]
|
|
adds r0, r3, r4
|
|
ldrb r0, [r0]
|
|
adds r1, r0
|
|
cmp r1, 0x64
|
|
bls _080420FC
|
|
adds r0, 0x64
|
|
subs r4, r0, r1
|
|
b _080420FE
|
|
.align 2, 0
|
|
_080420F4: .4byte 0x000001fd
|
|
_080420F8: .4byte gUnknown_825DFEA
|
|
_080420FC:
|
|
adds r4, r0, 0
|
|
_080420FE:
|
|
adds r1, r5, r4
|
|
movs r0, 0xFF
|
|
lsls r0, 1
|
|
cmp r1, r0
|
|
bls _0804210C
|
|
adds r0, r4, r0
|
|
subs r4, r0, r1
|
|
_0804210C:
|
|
ldr r0, [sp]
|
|
adds r0, r4
|
|
str r0, [sp]
|
|
ldr r0, _0804212C @ =gUnknown_825DFEA
|
|
adds r0, r2, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
mov r2, sp
|
|
bl sub_804037C
|
|
mov r0, r8
|
|
bl CalculateMonStats
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
b _08042368
|
|
.align 2, 0
|
|
_0804212C: .4byte gUnknown_825DFEA
|
|
_08042130:
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _080421F8 @ =gUnknown_825DEA1
|
|
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 _08042150
|
|
b _08042372
|
|
_08042150:
|
|
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 CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
ldr r1, _080421FC @ =gUnknown_825DEA5
|
|
ldr r3, [sp, 0x10]
|
|
adds r1, r3, r1
|
|
ldrb r2, [r1]
|
|
ands r2, r0
|
|
str r2, [sp]
|
|
ldr r0, _08042200 @ =gUnknown_825DEA9
|
|
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 sub_804037C
|
|
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 CalculatePPWithBonus
|
|
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 sub_804037C
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
b _08042372
|
|
.align 2, 0
|
|
_080421F8: .4byte gUnknown_825DEA1
|
|
_080421FC: .4byte gUnknown_825DEA5
|
|
_08042200: .4byte gUnknown_825DEA9
|
|
_08042204:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x63
|
|
bls _08042214
|
|
b _08042368
|
|
_08042214:
|
|
ldr r5, [sp, 0x1C]
|
|
cmp r5, 0
|
|
beq _0804221C
|
|
b _08042368
|
|
_0804221C:
|
|
ldr r0, [sp, 0x2C]
|
|
cmp r0, 0
|
|
beq _08042224
|
|
b _08042368
|
|
_08042224:
|
|
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 _08042308
|
|
ldr r0, [sp, 0x30]
|
|
cmp r0, 0x1B
|
|
bne _08042308
|
|
movs r0, 0x96
|
|
muls r0, r1
|
|
movs r1, 0x64
|
|
bl __divsi3
|
|
adds r0, r5, r0
|
|
str r0, [sp, 0x4]
|
|
adds r2, r4, 0
|
|
b _08042314
|
|
_0804225E:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x63
|
|
bls _08042368
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xC7
|
|
bhi _08042368
|
|
ldr r2, [sp, 0x1C]
|
|
cmp r2, 0
|
|
bne _08042368
|
|
ldr r3, [sp, 0x2C]
|
|
cmp r3, 0
|
|
bne _08042368
|
|
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 _080422AE
|
|
ldr r2, [sp, 0x30]
|
|
cmp r2, 0x1B
|
|
beq _080422F6
|
|
_080422AE:
|
|
ldr r3, [sp, 0x2C]
|
|
lsls r2, r3, 24
|
|
b _0804230C
|
|
_080422B4:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xC7
|
|
bls _08042368
|
|
ldr r4, [sp, 0x1C]
|
|
cmp r4, 0
|
|
bne _08042368
|
|
ldr r5, [sp, 0x2C]
|
|
cmp r5, 0
|
|
bne _08042368
|
|
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 _08042308
|
|
ldr r0, [sp, 0x30]
|
|
cmp r0, 0x1B
|
|
bne _08042308
|
|
_080422F6:
|
|
movs r0, 0x96
|
|
muls r0, r1
|
|
movs r1, 0x64
|
|
bl __divsi3
|
|
adds r0, r4, r0
|
|
str r0, [sp, 0x4]
|
|
adds r2, r5, 0
|
|
b _08042314
|
|
_08042308:
|
|
ldr r1, [sp, 0x2C]
|
|
lsls r2, r1, 24
|
|
_0804230C:
|
|
asrs r1, r2, 24
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, r1
|
|
str r0, [sp, 0x4]
|
|
_08042314:
|
|
cmp r2, 0
|
|
ble _0804234A
|
|
mov r0, r8
|
|
movs r1, 0x26
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xB
|
|
bne _0804232C
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, 0x1
|
|
str r0, [sp, 0x4]
|
|
_0804232C:
|
|
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 _0804234A
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, 0x1
|
|
str r0, [sp, 0x4]
|
|
_0804234A:
|
|
ldr r0, [sp, 0x4]
|
|
cmp r0, 0
|
|
bge _08042354
|
|
movs r0, 0
|
|
str r0, [sp, 0x4]
|
|
_08042354:
|
|
ldr r0, [sp, 0x4]
|
|
cmp r0, 0xFF
|
|
ble _0804235E
|
|
movs r0, 0xFF
|
|
str r0, [sp, 0x4]
|
|
_0804235E:
|
|
add r2, sp, 0x4
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
bl sub_804037C
|
|
_08042368:
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
_08042372:
|
|
ldr r2, [sp, 0x28]
|
|
adds r2, 0x1
|
|
str r2, [sp, 0x28]
|
|
mov r3, r10
|
|
lsrs r3, 1
|
|
mov r10, r3
|
|
cmp r3, 0
|
|
beq _08042384
|
|
b _0804206A
|
|
_08042384:
|
|
ldr r4, [sp, 0x18]
|
|
adds r4, 0x1
|
|
str r4, [sp, 0x18]
|
|
cmp r4, 0x5
|
|
bgt _08042392
|
|
bl _080415B4
|
|
_08042392:
|
|
ldr r0, [sp, 0x1C]
|
|
_08042394:
|
|
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_80413E4
|
|
|
|
.align 2, 0 @ Don't pad with nop.
|