mirror of
https://github.com/pret/pokeruby.git
synced 2025-01-09 06:10:21 +00:00
102f5b1e15
* Changed battle labels
1971 lines
31 KiB
ArmAsm
1971 lines
31 KiB
ArmAsm
.include "constants/gba_constants.inc"
|
|
.include "constants/species_constants.inc"
|
|
.include "asm/macros.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start ExecuteTableBasedItemEffect_
|
|
ExecuteTableBasedItemEffect_: @ 803E18C
|
|
push {r4,lr}
|
|
sub sp, 0x4
|
|
lsls r1, 16
|
|
lsrs r1, 16
|
|
lsls r2, 24
|
|
lsrs r2, 24
|
|
lsls r3, 24
|
|
lsrs r3, 24
|
|
movs r4, 0
|
|
str r4, [sp]
|
|
bl sub_803E1B0
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
add sp, 0x4
|
|
pop {r4}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end ExecuteTableBasedItemEffect_
|
|
|
|
thumb_func_start sub_803E1B0
|
|
sub_803E1B0: @ 803E1B0
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
sub sp, 0x3C
|
|
mov r8, r0
|
|
ldr r0, [sp, 0x5C]
|
|
lsls r1, 16
|
|
lsrs r1, 16
|
|
str r1, [sp, 0x8]
|
|
lsls r2, 24
|
|
lsrs r2, 24
|
|
str r2, [sp, 0xC]
|
|
lsls r3, 24
|
|
lsrs r3, 24
|
|
str r3, [sp, 0x10]
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x14]
|
|
movs r0, 0x1
|
|
str r0, [sp, 0x1C]
|
|
movs r1, 0x6
|
|
str r1, [sp, 0x24]
|
|
movs r2, 0
|
|
str r2, [sp, 0x2C]
|
|
movs r3, 0x4
|
|
str r3, [sp, 0x34]
|
|
mov r0, r8
|
|
movs r1, 0xC
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0xAF
|
|
bne _0803E240
|
|
ldr r0, _0803E21C @ =gMain
|
|
ldr r4, _0803E220 @ =0x0000043d
|
|
adds r0, r4
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E22C
|
|
ldr r2, _0803E224 @ =gEnigmaBerries
|
|
ldr r0, _0803E228 @ =gBankInMenu
|
|
ldrb r1, [r0]
|
|
lsls r0, r1, 3
|
|
subs r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x7]
|
|
b _0803E248
|
|
.align 2, 0
|
|
_0803E21C: .4byte gMain
|
|
_0803E220: .4byte 0x0000043d
|
|
_0803E224: .4byte gEnigmaBerries
|
|
_0803E228: .4byte gBankInMenu
|
|
_0803E22C:
|
|
ldr r0, _0803E238 @ =gSaveBlock1
|
|
ldr r5, _0803E23C @ =0x00003688
|
|
adds r0, r5
|
|
ldrb r0, [r0]
|
|
b _0803E248
|
|
.align 2, 0
|
|
_0803E238: .4byte gSaveBlock1
|
|
_0803E23C: .4byte 0x00003688
|
|
_0803E240:
|
|
bl ItemId_GetHoldEffect
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
_0803E248:
|
|
str r0, [sp, 0x30]
|
|
ldr r1, _0803E2A4 @ =gStringBank
|
|
ldr r0, _0803E2A8 @ =gBankInMenu
|
|
ldrb r2, [r0]
|
|
strb r2, [r1]
|
|
ldr r0, _0803E2AC @ =gMain
|
|
ldr r1, _0803E2B0 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
cmp r1, 0
|
|
beq _0803E2E8
|
|
ldr r0, _0803E2B4 @ =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, 0x18]
|
|
ldr r0, _0803E2B8 @ =gNoOfAllBanks
|
|
ldr r4, [sp, 0x8]
|
|
subs r4, 0xD
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
bge _0803E2F4
|
|
ldr r2, _0803E2BC @ =gBattlePartyID
|
|
lsls r0, r1, 1
|
|
adds r0, r2
|
|
ldrh r3, [r0]
|
|
ldr r5, [sp, 0xC]
|
|
lsls r0, r5, 16
|
|
lsrs r1, r0, 16
|
|
adds r5, r0, 0
|
|
cmp r3, r1
|
|
bne _0803E2C0
|
|
ldr r0, [sp, 0x18]
|
|
str r0, [sp, 0x34]
|
|
b _0803E2F4
|
|
.align 2, 0
|
|
_0803E2A4: .4byte gStringBank
|
|
_0803E2A8: .4byte gBankInMenu
|
|
_0803E2AC: .4byte gMain
|
|
_0803E2B0: .4byte 0x0000043d
|
|
_0803E2B4: .4byte gActiveBank
|
|
_0803E2B8: .4byte gNoOfAllBanks
|
|
_0803E2BC: .4byte gBattlePartyID
|
|
_0803E2C0:
|
|
ldr r1, [sp, 0x18]
|
|
adds r1, 0x2
|
|
str r1, [sp, 0x18]
|
|
ldr r0, _0803E2E4 @ =gNoOfAllBanks
|
|
ldrb r0, [r0]
|
|
cmp r1, r0
|
|
bge _0803E2F4
|
|
lsls r0, r1, 1
|
|
adds r0, r2
|
|
ldrh r1, [r0]
|
|
lsrs r0, r5, 16
|
|
cmp r1, r0
|
|
bne _0803E2C0
|
|
ldr r2, [sp, 0x18]
|
|
lsls r0, r2, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x34]
|
|
b _0803E2F4
|
|
.align 2, 0
|
|
_0803E2E4: .4byte gNoOfAllBanks
|
|
_0803E2E8:
|
|
ldr r0, _0803E310 @ =gActiveBank
|
|
strb r1, [r0]
|
|
movs r3, 0x4
|
|
str r3, [sp, 0x34]
|
|
ldr r4, [sp, 0x8]
|
|
subs r4, 0xD
|
|
_0803E2F4:
|
|
lsls r0, r4, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0xA5
|
|
bhi _0803E36C
|
|
ldr r1, _0803E314 @ =gItemEffectTable
|
|
lsls r0, r4, 2
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
cmp r0, 0
|
|
bne _0803E318
|
|
ldr r4, [sp, 0x8]
|
|
cmp r4, 0xAF
|
|
beq _0803E31E
|
|
b _0803E36C
|
|
.align 2, 0
|
|
_0803E310: .4byte gActiveBank
|
|
_0803E314: .4byte gItemEffectTable
|
|
_0803E318:
|
|
ldr r5, [sp, 0x8]
|
|
cmp r5, 0xAF
|
|
bne _0803E372
|
|
_0803E31E:
|
|
ldr r0, _0803E340 @ =gMain
|
|
ldr r1, _0803E344 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E350
|
|
ldr r0, _0803E348 @ =gActiveBank
|
|
ldrb r1, [r0]
|
|
lsls r0, r1, 3
|
|
subs r0, r1
|
|
lsls r0, 2
|
|
ldr r1, _0803E34C @ =gUnknown_02024DF8
|
|
adds r0, r1
|
|
b _0803E372
|
|
.align 2, 0
|
|
_0803E340: .4byte gMain
|
|
_0803E344: .4byte 0x0000043d
|
|
_0803E348: .4byte gActiveBank
|
|
_0803E34C: .4byte gUnknown_02024DF8
|
|
_0803E350:
|
|
ldr r2, _0803E358 @ =gSaveBlock1 + 0x3676
|
|
str r2, [sp, 0x20]
|
|
b _0803E374
|
|
.align 2, 0
|
|
_0803E358: .4byte gSaveBlock1 + 0x3676
|
|
_0803E35C:
|
|
mov r0, r8
|
|
movs r2, 0
|
|
ldr r3, [sp, 0xC]
|
|
bl BeginEvolutionScene
|
|
movs r0, 0
|
|
bl _0803F15C
|
|
_0803E36C:
|
|
movs r0, 0x1
|
|
bl _0803F15C
|
|
_0803E372:
|
|
str r0, [sp, 0x20]
|
|
_0803E374:
|
|
movs r3, 0
|
|
str r3, [sp, 0x18]
|
|
_0803E378:
|
|
ldr r4, [sp, 0x18]
|
|
cmp r4, 0x5
|
|
bls _0803E382
|
|
bl _0803F14C
|
|
_0803E382:
|
|
lsls r0, r4, 2
|
|
ldr r1, _0803E38C @ =_0803E390
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_0803E38C: .4byte _0803E390
|
|
.align 2, 0
|
|
_0803E390:
|
|
.4byte _0803E3A8
|
|
.4byte _0803E474
|
|
.4byte _0803E508
|
|
.4byte _0803E59C
|
|
.4byte _0803E77C
|
|
.4byte _0803EE1E
|
|
_0803E3A8:
|
|
ldr r5, [sp, 0x20]
|
|
ldr r0, [sp, 0x18]
|
|
adds r2, r5, r0
|
|
ldrb r1, [r2]
|
|
movs r0, 0x80
|
|
ands r0, r1
|
|
adds r6, r2, 0
|
|
cmp r0, 0
|
|
beq _0803E3F0
|
|
ldr r0, _0803E460 @ =gMain
|
|
ldr r1, _0803E464 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E3F0
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _0803E3F0
|
|
ldr r1, _0803E468 @ =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 _0803E3F0
|
|
ldr r0, _0803E46C @ =0xfff0ffff
|
|
ands r1, r0
|
|
str r1, [r2]
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
_0803E3F0:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x30
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E41E
|
|
ldr r1, _0803E468 @ =gBattleMons
|
|
ldr r0, _0803E470 @ =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 _0803E41E
|
|
orrs r1, r3
|
|
str r1, [r2]
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_0803E41E:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _0803E42C
|
|
bl _0803F14C
|
|
_0803E42C:
|
|
ldr r6, _0803E468 @ =gBattleMons
|
|
ldr r5, _0803E470 @ =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 _0803E446
|
|
bl _0803F14C
|
|
_0803E446:
|
|
adds r0, r2, r3
|
|
strb r0, [r1, 0x19]
|
|
ldrb r0, [r5]
|
|
muls r0, r4
|
|
adds r1, r0, r6
|
|
movs r0, 0x19
|
|
ldrsb r0, [r1, r0]
|
|
cmp r0, 0xC
|
|
bgt _0803E45A
|
|
b _0803E74E
|
|
_0803E45A:
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x19]
|
|
b _0803E74E
|
|
.align 2, 0
|
|
_0803E460: .4byte gMain
|
|
_0803E464: .4byte 0x0000043d
|
|
_0803E468: .4byte gBattleMons
|
|
_0803E46C: .4byte 0xfff0ffff
|
|
_0803E470: .4byte gActiveBank
|
|
_0803E474:
|
|
ldr r0, [sp, 0x20]
|
|
ldr r1, [sp, 0x18]
|
|
adds r2, r0, r1
|
|
ldrb r1, [r2]
|
|
movs r0, 0xF0
|
|
ands r0, r1
|
|
lsls r3, r0, 24
|
|
adds r6, r2, 0
|
|
cmp r3, 0
|
|
beq _0803E4BA
|
|
ldr r7, _0803E500 @ =gBattleMons
|
|
ldr r5, _0803E504 @ =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 _0803E4BA
|
|
lsrs r0, r3, 28
|
|
adds r0, r2, r0
|
|
strb r0, [r1, 0x1A]
|
|
ldrb r0, [r5]
|
|
muls r0, r4
|
|
adds r1, r0, r7
|
|
movs r0, 0x1A
|
|
ldrsb r0, [r1, r0]
|
|
cmp r0, 0xC
|
|
ble _0803E4B6
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1A]
|
|
_0803E4B6:
|
|
movs r2, 0
|
|
str r2, [sp, 0x1C]
|
|
_0803E4BA:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _0803E4C8
|
|
bl _0803F14C
|
|
_0803E4C8:
|
|
ldr r6, _0803E500 @ =gBattleMons
|
|
ldr r5, _0803E504 @ =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 _0803E4E2
|
|
bl _0803F14C
|
|
_0803E4E2:
|
|
adds r0, r2, r3
|
|
strb r0, [r1, 0x1B]
|
|
ldrb r0, [r5]
|
|
muls r0, r4
|
|
adds r1, r0, r6
|
|
movs r0, 0x1B
|
|
ldrsb r0, [r1, r0]
|
|
cmp r0, 0xC
|
|
ble _0803E4F8
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1B]
|
|
_0803E4F8:
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
bl _0803F14C
|
|
.align 2, 0
|
|
_0803E500: .4byte gBattleMons
|
|
_0803E504: .4byte gActiveBank
|
|
_0803E508:
|
|
ldr r4, [sp, 0x20]
|
|
ldr r5, [sp, 0x18]
|
|
adds r2, r4, r5
|
|
ldrb r1, [r2]
|
|
movs r0, 0xF0
|
|
ands r0, r1
|
|
lsls r3, r0, 24
|
|
adds r6, r2, 0
|
|
cmp r3, 0
|
|
beq _0803E54E
|
|
ldr r7, _0803E594 @ =gBattleMons
|
|
ldr r5, _0803E598 @ =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 _0803E54E
|
|
lsrs r0, r3, 28
|
|
adds r0, r2, r0
|
|
strb r0, [r1, 0x1E]
|
|
ldrb r0, [r5]
|
|
muls r0, r4
|
|
adds r1, r0, r7
|
|
movs r0, 0x1E
|
|
ldrsb r0, [r1, r0]
|
|
cmp r0, 0xC
|
|
ble _0803E54A
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1E]
|
|
_0803E54A:
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
_0803E54E:
|
|
ldrb r0, [r6]
|
|
movs r3, 0xF
|
|
ands r3, r0
|
|
cmp r3, 0
|
|
bne _0803E55C
|
|
bl _0803F14C
|
|
_0803E55C:
|
|
ldr r6, _0803E594 @ =gBattleMons
|
|
ldr r5, _0803E598 @ =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 _0803E576
|
|
bl _0803F14C
|
|
_0803E576:
|
|
adds r0, r2, r3
|
|
strb r0, [r1, 0x1C]
|
|
ldrb r0, [r5]
|
|
muls r0, r4
|
|
adds r1, r0, r6
|
|
movs r0, 0x1C
|
|
ldrsb r0, [r1, r0]
|
|
cmp r0, 0xC
|
|
ble _0803E58C
|
|
movs r0, 0xC
|
|
strb r0, [r1, 0x1C]
|
|
_0803E58C:
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
bl _0803F14C
|
|
.align 2, 0
|
|
_0803E594: .4byte gBattleMons
|
|
_0803E598: .4byte gActiveBank
|
|
_0803E59C:
|
|
ldr r3, [sp, 0x20]
|
|
ldr r4, [sp, 0x18]
|
|
adds r2, r3, r4
|
|
ldrb r1, [r2]
|
|
movs r0, 0x80
|
|
ands r0, r1
|
|
adds r6, r2, 0
|
|
cmp r0, 0
|
|
beq _0803E5E4
|
|
ldr r5, _0803E758 @ =gSideTimer
|
|
ldr r4, _0803E75C @ =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, 0x2]
|
|
cmp r0, 0
|
|
bne _0803E5E4
|
|
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, 0x2]
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
_0803E5E4:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x40
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E646
|
|
mov r0, r8
|
|
movs r1, 0x38
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x64
|
|
beq _0803E646
|
|
ldr r5, _0803E760 @ =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, _0803E764 @ =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, 0x1C]
|
|
_0803E646:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x20
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E682
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x7
|
|
ldr r3, [sp, 0x34]
|
|
bl HealStatusConditions
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803E682
|
|
ldr r1, [sp, 0x34]
|
|
cmp r1, 0x4
|
|
beq _0803E67E
|
|
ldr r1, _0803E768 @ =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, _0803E76C @ =0xf7ffffff
|
|
ands r0, r1
|
|
str r0, [r2]
|
|
_0803E67E:
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_0803E682:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E6A2
|
|
ldr r2, _0803E770 @ =0x00000f88
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
ldr r3, [sp, 0x34]
|
|
bl HealStatusConditions
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803E6A2
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
_0803E6A2:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x8
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E6C2
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x10
|
|
ldr r3, [sp, 0x34]
|
|
bl HealStatusConditions
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803E6C2
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
_0803E6C2:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x4
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E6E2
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x20
|
|
ldr r3, [sp, 0x34]
|
|
bl HealStatusConditions
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803E6E2
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
_0803E6E2:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803E702
|
|
mov r0, r8
|
|
ldr r1, [sp, 0xC]
|
|
movs r2, 0x40
|
|
ldr r3, [sp, 0x34]
|
|
bl HealStatusConditions
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803E702
|
|
movs r2, 0
|
|
str r2, [sp, 0x1C]
|
|
_0803E702:
|
|
ldrb r1, [r6]
|
|
movs r0, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803E710
|
|
bl _0803F14C
|
|
_0803E710:
|
|
ldr r0, _0803E774 @ =gMain
|
|
ldr r3, _0803E778 @ =0x0000043d
|
|
adds r0, r3
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803E724
|
|
bl _0803F14C
|
|
_0803E724:
|
|
ldr r4, [sp, 0x34]
|
|
cmp r4, 0x4
|
|
bne _0803E72E
|
|
bl _0803F14C
|
|
_0803E72E:
|
|
ldr r1, _0803E768 @ =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 _0803E746
|
|
bl _0803F14C
|
|
_0803E746:
|
|
movs r0, 0x8
|
|
negs r0, r0
|
|
ands r1, r0
|
|
str r1, [r2]
|
|
_0803E74E:
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
bl _0803F14C
|
|
.align 2, 0
|
|
_0803E758: .4byte gSideTimer
|
|
_0803E75C: .4byte gActiveBank
|
|
_0803E760: .4byte gExperienceTables
|
|
_0803E764: .4byte gBaseStats
|
|
_0803E768: .4byte gBattleMons
|
|
_0803E76C: .4byte 0xf7ffffff
|
|
_0803E770: .4byte 0x00000f88
|
|
_0803E774: .4byte gMain
|
|
_0803E778: .4byte 0x0000043d
|
|
_0803E77C:
|
|
ldr r1, [sp, 0x20]
|
|
ldr r2, [sp, 0x18]
|
|
adds r0, r1, r2
|
|
ldrb r0, [r0]
|
|
mov r10, r0
|
|
movs r0, 0x20
|
|
mov r3, r10
|
|
ands r0, r3
|
|
cmp r0, 0
|
|
beq _0803E854
|
|
movs r0, 0xDF
|
|
ands r3, r0
|
|
mov r10, r3
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _0803E880 @ =gUnknown_08208238
|
|
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 _0803E854
|
|
ldr r0, [sp, 0x28]
|
|
cmp r0, 0x4
|
|
bls _0803E854
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _0803E884 @ =gUnknown_08208240
|
|
ldr r2, [sp, 0x10]
|
|
adds r1, r2, r1
|
|
ldrb r1, [r1]
|
|
adds r0, r1
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
mov r2, sp
|
|
bl SetMonData
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
ldr r1, [sp]
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
ldr r2, [sp, 0x10]
|
|
bl 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 SetMonData
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
_0803E854:
|
|
movs r5, 0
|
|
str r5, [sp, 0x28]
|
|
mov r0, r10
|
|
cmp r0, 0
|
|
bne _0803E862
|
|
bl _0803F14C
|
|
_0803E862:
|
|
movs r0, 0x1
|
|
mov r1, r10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803E86E
|
|
b _0803EE0A
|
|
_0803E86E:
|
|
ldr r2, [sp, 0x28]
|
|
cmp r2, 0x7
|
|
bls _0803E876
|
|
b _0803EE0A
|
|
_0803E876:
|
|
lsls r0, r2, 2
|
|
ldr r1, _0803E888 @ =_0803E88C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_0803E880: .4byte gUnknown_08208238
|
|
_0803E884: .4byte gUnknown_08208240
|
|
_0803E888: .4byte _0803E88C
|
|
.align 2, 0
|
|
_0803E88C:
|
|
.4byte _0803E8AC
|
|
.4byte _0803E8AC
|
|
.4byte _0803E934
|
|
.4byte _0803EB5C
|
|
.4byte _0803EE0A
|
|
.4byte _0803EE0A
|
|
.4byte _0803EE0A
|
|
.4byte _0803EDF4
|
|
_0803E8AC:
|
|
mov r0, r8
|
|
bl GetMonEVCount
|
|
lsls r0, 16
|
|
lsrs r5, r0, 16
|
|
ldr r0, _0803E8EC @ =0x000001fd
|
|
cmp r5, r0
|
|
bls _0803E8BE
|
|
b _0803E36C
|
|
_0803E8BE:
|
|
ldr r0, _0803E8F0 @ =gUnknown_082082F2
|
|
ldr r3, [sp, 0x28]
|
|
adds r0, r3, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
str r1, [sp]
|
|
cmp r1, 0x63
|
|
bls _0803E8D8
|
|
b _0803EE0A
|
|
_0803E8D8:
|
|
ldr r4, [sp, 0x20]
|
|
ldr r2, [sp, 0x24]
|
|
adds r0, r4, r2
|
|
ldrb r0, [r0]
|
|
adds r1, r0
|
|
cmp r1, 0x64
|
|
bls _0803E8F4
|
|
adds r0, 0x64
|
|
subs r4, r0, r1
|
|
b _0803E8F6
|
|
.align 2, 0
|
|
_0803E8EC: .4byte 0x000001fd
|
|
_0803E8F0: .4byte gUnknown_082082F2
|
|
_0803E8F4:
|
|
adds r4, r0, 0
|
|
_0803E8F6:
|
|
adds r1, r5, r4
|
|
movs r0, 0xFF
|
|
lsls r0, 1
|
|
cmp r1, r0
|
|
bls _0803E904
|
|
adds r0, r4, r0
|
|
subs r4, r0, r1
|
|
_0803E904:
|
|
ldr r0, [sp]
|
|
adds r0, r4
|
|
str r0, [sp]
|
|
ldr r0, _0803E930 @ =gUnknown_082082F2
|
|
ldr r3, [sp, 0x28]
|
|
adds r0, r3, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
mov r2, sp
|
|
bl SetMonData
|
|
mov r0, r8
|
|
bl CalculateMonStats
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
b _0803EE0A
|
|
.align 2, 0
|
|
_0803E930: .4byte gUnknown_082082F2
|
|
_0803E934:
|
|
movs r0, 0x10
|
|
mov r5, r10
|
|
ands r0, r5
|
|
cmp r0, 0
|
|
beq _0803E9F4
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _0803E954
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
b _0803EC9E
|
|
_0803E954:
|
|
ldr r0, _0803E99C @ =gMain
|
|
ldr r1, _0803E9A0 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r4, 0x2
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803EA0A
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _0803E9B4
|
|
ldr r2, _0803E9A4 @ =gAbsentBankFlags
|
|
ldr r1, _0803E9A8 @ =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, _0803E9AC @ =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, 0x34]
|
|
bl CopyPlayerPartyMonToBattleData
|
|
ldr r0, _0803E9B0 @ =gActiveBank
|
|
ldrb r0, [r0]
|
|
b _0803E9CC
|
|
.align 2, 0
|
|
_0803E99C: .4byte gMain
|
|
_0803E9A0: .4byte 0x0000043d
|
|
_0803E9A4: .4byte gAbsentBankFlags
|
|
_0803E9A8: .4byte gBitTable
|
|
_0803E9AC: .4byte gBattlePartyID
|
|
_0803E9B0: .4byte gActiveBank
|
|
_0803E9B4:
|
|
ldr r3, _0803E9E4 @ =gAbsentBankFlags
|
|
ldr r1, _0803E9E8 @ =gBitTable
|
|
ldr r2, _0803E9EC @ =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]
|
|
_0803E9CC:
|
|
bl GetBankSide
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803EA0A
|
|
ldr r1, _0803E9F0 @ =gBattleResults
|
|
ldrb r0, [r1, 0x4]
|
|
cmp r0, 0xFE
|
|
bhi _0803EA0A
|
|
adds r0, 0x1
|
|
strb r0, [r1, 0x4]
|
|
b _0803EA0A
|
|
.align 2, 0
|
|
_0803E9E4: .4byte gAbsentBankFlags
|
|
_0803E9E8: .4byte gBitTable
|
|
_0803E9EC: .4byte gActiveBank
|
|
_0803E9F0: .4byte gBattleResults
|
|
_0803E9F4:
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
bne _0803EA0A
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
b _0803EC9E
|
|
_0803EA0A:
|
|
ldr r1, [sp, 0x24]
|
|
adds r0, r1, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
ldr r4, [sp, 0x20]
|
|
adds r1, r4, r1
|
|
ldrb r1, [r1]
|
|
str r1, [sp]
|
|
adds r0, r1, 0
|
|
cmp r0, 0xFE
|
|
beq _0803EA4C
|
|
cmp r0, 0xFE
|
|
bhi _0803EA2C
|
|
cmp r0, 0xFD
|
|
beq _0803EA62
|
|
b _0803EA6C
|
|
_0803EA2C:
|
|
cmp r1, 0xFF
|
|
bne _0803EA6C
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
subs r4, r0
|
|
str r4, [sp]
|
|
b _0803EA6C
|
|
_0803EA4C:
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
lsrs r0, 1
|
|
str r0, [sp]
|
|
cmp r0, 0
|
|
bne _0803EA6C
|
|
movs r0, 0x1
|
|
b _0803EA6A
|
|
_0803EA62:
|
|
ldr r0, _0803EB24 @ =0x02000000
|
|
ldr r5, _0803EB28 @ =0x000160fa
|
|
adds r0, r5
|
|
ldrb r0, [r0]
|
|
_0803EA6A:
|
|
str r0, [sp]
|
|
_0803EA6C:
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r4, r0
|
|
beq _0803EB4C
|
|
ldr r0, [sp, 0x14]
|
|
cmp r0, 0
|
|
bne _0803EB40
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, [sp]
|
|
adds r0, r1
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
bls _0803EAB8
|
|
mov r0, r8
|
|
movs r1, 0x3A
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
_0803EAB8:
|
|
mov r0, r8
|
|
movs r1, 0x39
|
|
mov r2, sp
|
|
bl SetMonData
|
|
ldr r0, _0803EB2C @ =gMain
|
|
ldr r1, _0803EB30 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803EB48
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _0803EB48
|
|
ldr r1, _0803EB34 @ =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 _0803EB48
|
|
ldr r4, _0803EB38 @ =gActiveBank
|
|
ldrb r0, [r4]
|
|
bl GetBankSide
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _0803EB48
|
|
ldr r1, _0803EB3C @ =gBattleResults
|
|
ldrb r0, [r1, 0x3]
|
|
cmp r0, 0xFE
|
|
bhi _0803EB08
|
|
adds r0, 0x1
|
|
strb r0, [r1, 0x3]
|
|
_0803EB08:
|
|
ldrb r5, [r4]
|
|
add r0, sp, 0x34
|
|
ldrb r0, [r0]
|
|
strb r0, [r4]
|
|
movs r0, 0
|
|
movs r1, 0
|
|
movs r2, 0
|
|
bl EmitGetAttributes
|
|
ldrb r0, [r4]
|
|
bl MarkBufferBankForExecution
|
|
strb r5, [r4]
|
|
b _0803EB48
|
|
.align 2, 0
|
|
_0803EB24: .4byte 0x02000000
|
|
_0803EB28: .4byte 0x000160fa
|
|
_0803EB2C: .4byte gMain
|
|
_0803EB30: .4byte 0x0000043d
|
|
_0803EB34: .4byte gBattleMons
|
|
_0803EB38: .4byte gActiveBank
|
|
_0803EB3C: .4byte gBattleResults
|
|
_0803EB40:
|
|
ldr r1, _0803EB58 @ =gBattleMoveDamage
|
|
ldr r0, [sp]
|
|
negs r0, r0
|
|
str r0, [r1]
|
|
_0803EB48:
|
|
movs r1, 0
|
|
str r1, [sp, 0x1C]
|
|
_0803EB4C:
|
|
movs r0, 0xEF
|
|
mov r2, r10
|
|
ands r2, r0
|
|
mov r10, r2
|
|
b _0803EE0A
|
|
.align 2, 0
|
|
_0803EB58: .4byte gBattleMoveDamage
|
|
_0803EB5C:
|
|
movs r7, 0x2
|
|
mov r0, r10
|
|
ands r0, r7
|
|
cmp r0, 0
|
|
beq _0803EB68
|
|
b _0803ECB8
|
|
_0803EB68:
|
|
movs r5, 0
|
|
ldr r3, [sp, 0x24]
|
|
adds r3, 0x1
|
|
str r3, [sp, 0x38]
|
|
_0803EB70:
|
|
movs r4, 0x11
|
|
adds r4, r5
|
|
mov r9, r4
|
|
mov r0, r8
|
|
mov r1, r9
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
adds r7, r5, 0
|
|
adds r7, 0xD
|
|
mov r0, r8
|
|
adds r1, r7, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
lsls r0, r5, 24
|
|
lsrs r6, r0, 24
|
|
adds r0, r4, 0
|
|
adds r2, r6, 0
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
beq _0803EC92
|
|
ldr r2, [sp, 0x20]
|
|
ldr r3, [sp, 0x24]
|
|
adds r0, r2, r3
|
|
ldrb r0, [r0]
|
|
adds r0, r1, r0
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
adds r1, r7, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
adds r2, r6, 0
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
bls _0803EC28
|
|
mov r0, r8
|
|
adds r1, r7, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
adds r2, r6, 0
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp]
|
|
_0803EC28:
|
|
mov r0, r8
|
|
mov r1, r9
|
|
mov r2, sp
|
|
bl SetMonData
|
|
ldr r0, _0803ECA4 @ =gMain
|
|
ldr r4, _0803ECA8 @ =0x0000043d
|
|
adds r0, r4
|
|
ldrb r1, [r0]
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803EC8E
|
|
ldr r0, [sp, 0x34]
|
|
cmp r0, 0x4
|
|
beq _0803EC8E
|
|
ldr r4, _0803ECAC @ =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 _0803EC8E
|
|
ldr r1, _0803ECB0 @ =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, _0803ECB4 @ =gBitTable
|
|
lsls r0, r5, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _0803EC8E
|
|
adds r0, r5, r3
|
|
adds r1, r4, 0
|
|
adds r1, 0x24
|
|
adds r0, r1
|
|
ldr r1, [sp]
|
|
strb r1, [r0]
|
|
_0803EC8E:
|
|
movs r3, 0
|
|
str r3, [sp, 0x1C]
|
|
_0803EC92:
|
|
adds r5, 0x1
|
|
cmp r5, 0x3
|
|
bgt _0803EC9A
|
|
b _0803EB70
|
|
_0803EC9A:
|
|
ldr r4, [sp, 0x38]
|
|
lsls r0, r4, 24
|
|
_0803EC9E:
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
b _0803EE0A
|
|
.align 2, 0
|
|
_0803ECA4: .4byte gMain
|
|
_0803ECA8: .4byte 0x0000043d
|
|
_0803ECAC: .4byte gBattleMons
|
|
_0803ECB0: .4byte gDisableStructs
|
|
_0803ECB4: .4byte gBitTable
|
|
_0803ECB8:
|
|
ldr r6, [sp, 0x10]
|
|
adds r6, 0x11
|
|
mov r0, r8
|
|
adds r1, r6, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
ldr r5, [sp, 0x10]
|
|
adds r5, 0xD
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
ldr r2, [sp, 0x10]
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r2, [sp]
|
|
cmp r2, r0
|
|
bne _0803ED00
|
|
b _0803EE0A
|
|
_0803ED00:
|
|
ldr r1, [sp, 0x24]
|
|
adds r0, r1, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
ldr r0, [sp, 0x20]
|
|
adds r1, r0, r1
|
|
ldrb r0, [r1]
|
|
adds r0, r2, r0
|
|
str r0, [sp]
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
ldr r2, [sp, 0x10]
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
ldr r1, [sp]
|
|
cmp r1, r0
|
|
bls _0803ED74
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
ldr r2, [sp, 0x10]
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp]
|
|
_0803ED74:
|
|
mov r0, r8
|
|
adds r1, r6, 0
|
|
mov r2, sp
|
|
bl SetMonData
|
|
ldr r0, _0803EDE0 @ =gMain
|
|
ldr r1, _0803EDE4 @ =0x0000043d
|
|
adds r0, r1
|
|
ldrb r1, [r0]
|
|
adds r0, r7, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803EDD8
|
|
ldr r2, [sp, 0x34]
|
|
cmp r2, 0x4
|
|
beq _0803EDD8
|
|
ldr r4, _0803EDE8 @ =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 _0803EDD8
|
|
ldr r1, _0803EDEC @ =gDisableStructs
|
|
lsls r0, r2, 3
|
|
subs r0, r2
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldrb r1, [r0, 0x18]
|
|
lsrs r1, 4
|
|
ldr r2, _0803EDF0 @ =gBitTable
|
|
ldr r5, [sp, 0x10]
|
|
lsls r0, r5, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _0803EDD8
|
|
adds r0, r5, r3
|
|
adds r1, r4, 0
|
|
adds r1, 0x24
|
|
adds r0, r1
|
|
ldr r1, [sp]
|
|
strb r1, [r0]
|
|
_0803EDD8:
|
|
movs r0, 0
|
|
str r0, [sp, 0x1C]
|
|
b _0803EE0A
|
|
.align 2, 0
|
|
_0803EDE0: .4byte gMain
|
|
_0803EDE4: .4byte 0x0000043d
|
|
_0803EDE8: .4byte gBattleMons
|
|
_0803EDEC: .4byte gDisableStructs
|
|
_0803EDF0: .4byte gBitTable
|
|
_0803EDF4:
|
|
mov r0, r8
|
|
movs r1, 0x2
|
|
ldr r2, [sp, 0x8]
|
|
bl GetEvolutionTargetSpecies
|
|
lsls r0, 16
|
|
lsrs r1, r0, 16
|
|
cmp r1, 0
|
|
beq _0803EE0A
|
|
bl _0803E35C
|
|
_0803EE0A:
|
|
ldr r1, [sp, 0x28]
|
|
adds r1, 0x1
|
|
str r1, [sp, 0x28]
|
|
mov r2, r10
|
|
lsrs r2, 1
|
|
mov r10, r2
|
|
cmp r2, 0
|
|
beq _0803EE1C
|
|
b _0803E862
|
|
_0803EE1C:
|
|
b _0803F14C
|
|
_0803EE1E:
|
|
ldr r3, [sp, 0x20]
|
|
ldr r4, [sp, 0x18]
|
|
adds r0, r3, r4
|
|
ldrb r0, [r0]
|
|
mov r10, r0
|
|
movs r5, 0
|
|
str r5, [sp, 0x28]
|
|
cmp r0, 0
|
|
bne _0803EE32
|
|
b _0803F14C
|
|
_0803EE32:
|
|
movs r0, 0x1
|
|
mov r1, r10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803EE3E
|
|
b _0803F13A
|
|
_0803EE3E:
|
|
ldr r2, [sp, 0x28]
|
|
cmp r2, 0x7
|
|
bls _0803EE46
|
|
b _0803F13A
|
|
_0803EE46:
|
|
lsls r0, r2, 2
|
|
ldr r1, _0803EE50 @ =_0803EE54
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_0803EE50: .4byte _0803EE54
|
|
.align 2, 0
|
|
_0803EE54:
|
|
.4byte _0803EE74
|
|
.4byte _0803EE74
|
|
.4byte _0803EE74
|
|
.4byte _0803EE74
|
|
.4byte _0803EEF8
|
|
.4byte _0803EFCC
|
|
.4byte _0803F026
|
|
.4byte _0803F07C
|
|
_0803EE74:
|
|
mov r0, r8
|
|
bl GetMonEVCount
|
|
lsls r0, 16
|
|
lsrs r5, r0, 16
|
|
ldr r0, _0803EEBC @ =0x000001fd
|
|
cmp r5, r0
|
|
bls _0803EE88
|
|
bl _0803E36C
|
|
_0803EE88:
|
|
ldr r0, _0803EEC0 @ =gUnknown_082082F2
|
|
ldr r4, [sp, 0x28]
|
|
adds r4, 0x2
|
|
adds r0, r4, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
str r1, [sp]
|
|
adds r2, r4, 0
|
|
cmp r1, 0x63
|
|
bls _0803EEA6
|
|
b _0803F13A
|
|
_0803EEA6:
|
|
ldr r3, [sp, 0x20]
|
|
ldr r4, [sp, 0x24]
|
|
adds r0, r3, r4
|
|
ldrb r0, [r0]
|
|
adds r1, r0
|
|
cmp r1, 0x64
|
|
bls _0803EEC4
|
|
adds r0, 0x64
|
|
subs r4, r0, r1
|
|
b _0803EEC6
|
|
.align 2, 0
|
|
_0803EEBC: .4byte 0x000001fd
|
|
_0803EEC0: .4byte gUnknown_082082F2
|
|
_0803EEC4:
|
|
adds r4, r0, 0
|
|
_0803EEC6:
|
|
adds r1, r5, r4
|
|
movs r0, 0xFF
|
|
lsls r0, 1
|
|
cmp r1, r0
|
|
bls _0803EED4
|
|
adds r0, r4, r0
|
|
subs r4, r0, r1
|
|
_0803EED4:
|
|
ldr r0, [sp]
|
|
adds r0, r4
|
|
str r0, [sp]
|
|
ldr r0, _0803EEF4 @ =gUnknown_082082F2
|
|
adds r0, r2, r0
|
|
ldrb r1, [r0]
|
|
mov r0, r8
|
|
mov r2, sp
|
|
bl SetMonData
|
|
mov r0, r8
|
|
bl CalculateMonStats
|
|
movs r5, 0
|
|
str r5, [sp, 0x1C]
|
|
b _0803F130
|
|
.align 2, 0
|
|
_0803EEF4: .4byte gUnknown_082082F2
|
|
_0803EEF8:
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
ldr r1, _0803EFC0 @ =gUnknown_08208238
|
|
ldr r2, [sp, 0x10]
|
|
adds r1, r2, r1
|
|
ldrb r1, [r1]
|
|
ands r0, r1
|
|
lsls r1, r2, 1
|
|
lsrs r0, r1
|
|
str r0, [sp]
|
|
cmp r0, 0x2
|
|
bls _0803EF18
|
|
b _0803F13A
|
|
_0803EF18:
|
|
adds r5, r2, 0
|
|
adds r5, 0xD
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
lsls r4, 16
|
|
lsrs r4, 16
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r1, r0, 0
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
adds r0, r4, 0
|
|
ldr r2, [sp, 0x10]
|
|
bl CalculatePPWithBonus
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
movs r2, 0
|
|
bl GetMonData
|
|
str r0, [sp]
|
|
ldr r1, _0803EFC4 @ =gUnknown_0820823C
|
|
ldr r3, [sp, 0x10]
|
|
adds r1, r3, r1
|
|
ldrb r2, [r1]
|
|
ands r2, r0
|
|
str r2, [sp]
|
|
ldr r0, _0803EFC8 @ =gUnknown_08208240
|
|
adds r0, r3, r0
|
|
ldrb r1, [r0]
|
|
lsls r0, r1, 1
|
|
adds r0, r1
|
|
adds r2, r0
|
|
str r2, [sp]
|
|
mov r0, r8
|
|
movs r1, 0x15
|
|
mov r2, sp
|
|
bl SetMonData
|
|
mov r0, r8
|
|
adds r1, r5, 0
|
|
movs r2, 0
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
ldr r1, [sp]
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
ldr r2, [sp, 0x10]
|
|
bl 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 SetMonData
|
|
movs r4, 0
|
|
str r4, [sp, 0x1C]
|
|
b _0803F13A
|
|
.align 2, 0
|
|
_0803EFC0: .4byte gUnknown_08208238
|
|
_0803EFC4: .4byte gUnknown_0820823C
|
|
_0803EFC8: .4byte gUnknown_08208240
|
|
_0803EFCC:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x63
|
|
bls _0803EFDC
|
|
b _0803F130
|
|
_0803EFDC:
|
|
ldr r5, [sp, 0x1C]
|
|
cmp r5, 0
|
|
beq _0803EFE4
|
|
b _0803F130
|
|
_0803EFE4:
|
|
ldr r0, [sp, 0x2C]
|
|
cmp r0, 0
|
|
beq _0803EFEC
|
|
b _0803F130
|
|
_0803EFEC:
|
|
ldr r1, [sp, 0x20]
|
|
ldr r2, [sp, 0x24]
|
|
adds r0, r1, r2
|
|
ldrb r0, [r0]
|
|
str r0, [sp, 0x2C]
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r5, r0, 0
|
|
str r5, [sp, 0x4]
|
|
ldr r3, [sp, 0x2C]
|
|
lsls r4, r3, 24
|
|
asrs r1, r4, 24
|
|
cmp r1, 0
|
|
ble _0803F0D0
|
|
ldr r0, [sp, 0x30]
|
|
cmp r0, 0x1B
|
|
bne _0803F0D0
|
|
movs r0, 0x96
|
|
muls r0, r1
|
|
movs r1, 0x64
|
|
bl __divsi3
|
|
adds r0, r5, r0
|
|
str r0, [sp, 0x4]
|
|
adds r2, r4, 0
|
|
b _0803F0DC
|
|
_0803F026:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0x63
|
|
bls _0803F130
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xC7
|
|
bhi _0803F130
|
|
ldr r2, [sp, 0x1C]
|
|
cmp r2, 0
|
|
bne _0803F130
|
|
ldr r3, [sp, 0x2C]
|
|
cmp r3, 0
|
|
bne _0803F130
|
|
ldr r4, [sp, 0x20]
|
|
ldr r5, [sp, 0x24]
|
|
adds r0, r4, r5
|
|
ldrb r0, [r0]
|
|
str r0, [sp, 0x2C]
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
str r4, [sp, 0x4]
|
|
ldr r0, [sp, 0x2C]
|
|
lsls r5, r0, 24
|
|
asrs r1, r5, 24
|
|
cmp r1, 0
|
|
ble _0803F076
|
|
ldr r2, [sp, 0x30]
|
|
cmp r2, 0x1B
|
|
beq _0803F0BE
|
|
_0803F076:
|
|
ldr r3, [sp, 0x2C]
|
|
lsls r2, r3, 24
|
|
b _0803F0D4
|
|
_0803F07C:
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xC7
|
|
bls _0803F130
|
|
ldr r4, [sp, 0x1C]
|
|
cmp r4, 0
|
|
bne _0803F130
|
|
ldr r5, [sp, 0x2C]
|
|
cmp r5, 0
|
|
bne _0803F130
|
|
ldr r1, [sp, 0x20]
|
|
ldr r2, [sp, 0x24]
|
|
adds r0, r1, r2
|
|
ldrb r0, [r0]
|
|
str r0, [sp, 0x2C]
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
str r4, [sp, 0x4]
|
|
ldr r3, [sp, 0x2C]
|
|
lsls r5, r3, 24
|
|
asrs r1, r5, 24
|
|
cmp r1, 0
|
|
ble _0803F0D0
|
|
ldr r0, [sp, 0x30]
|
|
cmp r0, 0x1B
|
|
bne _0803F0D0
|
|
_0803F0BE:
|
|
movs r0, 0x96
|
|
muls r0, r1
|
|
movs r1, 0x64
|
|
bl __divsi3
|
|
adds r0, r4, r0
|
|
str r0, [sp, 0x4]
|
|
adds r2, r5, 0
|
|
b _0803F0DC
|
|
_0803F0D0:
|
|
ldr r1, [sp, 0x2C]
|
|
lsls r2, r1, 24
|
|
_0803F0D4:
|
|
asrs r1, r2, 24
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, r1
|
|
str r0, [sp, 0x4]
|
|
_0803F0DC:
|
|
cmp r2, 0
|
|
ble _0803F112
|
|
mov r0, r8
|
|
movs r1, 0x26
|
|
movs r2, 0
|
|
bl GetMonData
|
|
cmp r0, 0xB
|
|
bne _0803F0F4
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, 0x1
|
|
str r0, [sp, 0x4]
|
|
_0803F0F4:
|
|
mov r0, r8
|
|
movs r1, 0x23
|
|
movs r2, 0
|
|
bl GetMonData
|
|
adds r4, r0, 0
|
|
bl sav1_map_get_name
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
cmp r4, r0
|
|
bne _0803F112
|
|
ldr r0, [sp, 0x4]
|
|
adds r0, 0x1
|
|
str r0, [sp, 0x4]
|
|
_0803F112:
|
|
ldr r0, [sp, 0x4]
|
|
cmp r0, 0
|
|
bge _0803F11C
|
|
movs r0, 0
|
|
str r0, [sp, 0x4]
|
|
_0803F11C:
|
|
ldr r0, [sp, 0x4]
|
|
cmp r0, 0xFF
|
|
ble _0803F126
|
|
movs r0, 0xFF
|
|
str r0, [sp, 0x4]
|
|
_0803F126:
|
|
add r2, sp, 0x4
|
|
mov r0, r8
|
|
movs r1, 0x20
|
|
bl SetMonData
|
|
_0803F130:
|
|
ldr r0, [sp, 0x24]
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x24]
|
|
_0803F13A:
|
|
ldr r2, [sp, 0x28]
|
|
adds r2, 0x1
|
|
str r2, [sp, 0x28]
|
|
mov r3, r10
|
|
lsrs r3, 1
|
|
mov r10, r3
|
|
cmp r3, 0
|
|
beq _0803F14C
|
|
b _0803EE32
|
|
_0803F14C:
|
|
ldr r4, [sp, 0x18]
|
|
adds r4, 0x1
|
|
str r4, [sp, 0x18]
|
|
cmp r4, 0x5
|
|
bgt _0803F15A
|
|
bl _0803E378
|
|
_0803F15A:
|
|
ldr r0, [sp, 0x1C]
|
|
_0803F15C:
|
|
add sp, 0x3C
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803E1B0
|
|
|
|
.align 2, 0 @ Don't pad with nop.
|