mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-06 13:47:12 -05:00
2655 lines
42 KiB
ArmAsm
2655 lines
42 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "constants/constants.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start ShouldSwitchIfPerishSong
|
|
ShouldSwitchIfPerishSong: @ 8039188
|
|
push {lr}
|
|
ldr r1, _080391D4 @ =gStatuses3
|
|
ldr r0, _080391D8 @ =gActiveBattler
|
|
ldrb r2, [r0]
|
|
lsls r0, r2, 2
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x20
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _080391E4
|
|
ldr r0, _080391DC @ =gDisableStructs
|
|
lsls r1, r2, 3
|
|
subs r1, r2
|
|
lsls r1, 2
|
|
adds r1, r0
|
|
ldrb r0, [r1, 0xF]
|
|
lsls r0, 28
|
|
cmp r0, 0
|
|
bne _080391E4
|
|
adds r0, r2, 0
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _080391E0 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
movs r1, 0x6
|
|
strb r1, [r0]
|
|
movs r0, 0x1
|
|
movs r1, 0x2
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
movs r0, 0x1
|
|
b _080391E6
|
|
.align 2, 0
|
|
_080391D4: .4byte gStatuses3
|
|
_080391D8: .4byte gActiveBattler
|
|
_080391DC: .4byte gDisableStructs
|
|
_080391E0: .4byte gBattleStruct
|
|
_080391E4:
|
|
movs r0, 0
|
|
_080391E6:
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end ShouldSwitchIfPerishSong
|
|
|
|
thumb_func_start sub_80391EC
|
|
sub_80391EC: @ 80391EC
|
|
push {r4-r7,lr}
|
|
mov r7, r9
|
|
mov r6, r8
|
|
push {r6,r7}
|
|
ldr r0, _08039204 @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039234
|
|
b _0803935C
|
|
.align 2, 0
|
|
_08039204: .4byte gBattleTypeFlags
|
|
_08039208:
|
|
ldr r0, _0803922C @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _08039230 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
strb r6, [r0]
|
|
movs r0, 0x1
|
|
movs r1, 0x2
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
movs r0, 0x1
|
|
b _0803935E
|
|
.align 2, 0
|
|
_0803922C: .4byte gActiveBattler
|
|
_08039230: .4byte gBattleStruct
|
|
_08039234:
|
|
ldr r4, _0803936C @ =gBattleMons
|
|
movs r0, 0
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
movs r1, 0x58
|
|
muls r0, r1
|
|
adds r0, r4
|
|
adds r0, 0x20
|
|
ldrb r0, [r0]
|
|
cmp r0, 0x19
|
|
beq _08039250
|
|
b _0803935C
|
|
_08039250:
|
|
movs r0, 0
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r2, r0, 24
|
|
movs r6, 0
|
|
adds r7, r4, 0
|
|
movs r5, 0x58
|
|
adds r0, r2, 0
|
|
muls r0, r5
|
|
adds r4, r0, r7
|
|
movs r0, 0x20
|
|
adds r0, r4
|
|
mov r8, r0
|
|
_0803926C:
|
|
lsls r1, r6, 1
|
|
ldr r0, _08039370 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
muls r0, r5
|
|
adds r1, r0
|
|
adds r0, r7, 0
|
|
adds r0, 0xC
|
|
adds r1, r0
|
|
ldrh r0, [r1]
|
|
cmp r0, 0
|
|
beq _08039298
|
|
ldrh r1, [r4]
|
|
mov r3, r8
|
|
ldrb r2, [r3]
|
|
bl AI_TypeCalc
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
movs r0, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _0803935C
|
|
_08039298:
|
|
adds r6, 0x1
|
|
cmp r6, 0x3
|
|
ble _0803926C
|
|
movs r6, 0
|
|
ldr r0, _08039374 @ =gEnemyParty
|
|
mov r9, r0
|
|
_080392A4:
|
|
movs r0, 0x64
|
|
adds r5, r6, 0
|
|
muls r5, r0
|
|
mov r3, r9
|
|
adds r4, r5, r3
|
|
adds r0, r4, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039356
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039356
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
movs r1, 0xCE
|
|
lsls r1, 1
|
|
cmp r0, r1
|
|
beq _08039356
|
|
ldr r1, _08039378 @ =gBattlerPartyIndexes
|
|
ldr r0, _08039370 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
lsls r0, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r6, r0
|
|
beq _08039356
|
|
adds r0, r4, 0
|
|
movs r1, 0xB
|
|
bl GetMonData
|
|
adds r0, r4, 0
|
|
movs r1, 0x2E
|
|
bl GetMonData
|
|
movs r0, 0
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r2, r0, 24
|
|
movs r4, 0
|
|
mov r8, r5
|
|
ldr r1, _0803936C @ =gBattleMons
|
|
movs r0, 0x58
|
|
muls r0, r2
|
|
adds r5, r0, r1
|
|
adds r7, r5, 0
|
|
adds r7, 0x20
|
|
_08039310:
|
|
adds r1, r4, 0
|
|
adds r1, 0xD
|
|
mov r0, r8
|
|
add r0, r9
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0
|
|
beq _08039350
|
|
ldrh r1, [r5]
|
|
ldrb r2, [r7]
|
|
bl AI_TypeCalc
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
movs r0, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039350
|
|
bl Random
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
movs r1, 0x3
|
|
bl __umodsi3
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0x1
|
|
bhi _08039350
|
|
b _08039208
|
|
_08039350:
|
|
adds r4, 0x1
|
|
cmp r4, 0x3
|
|
ble _08039310
|
|
_08039356:
|
|
adds r6, 0x1
|
|
cmp r6, 0x5
|
|
ble _080392A4
|
|
_0803935C:
|
|
movs r0, 0
|
|
_0803935E:
|
|
pop {r3,r4}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_0803936C: .4byte gBattleMons
|
|
_08039370: .4byte gActiveBattler
|
|
_08039374: .4byte gEnemyParty
|
|
_08039378: .4byte gBattlerPartyIndexes
|
|
thumb_func_end sub_80391EC
|
|
|
|
thumb_func_start sub_803937C
|
|
sub_803937C: @ 803937C
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
movs r0, 0x1
|
|
bl ai_has_super_effective_move_on_field
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _080393A8
|
|
bl Random
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
movs r1, 0x3
|
|
bl __umodsi3
|
|
lsls r0, 16
|
|
cmp r0, 0
|
|
beq _080393A8
|
|
b _08039588
|
|
_080393A8:
|
|
ldr r1, _08039410 @ =gUnknown_2023DA0
|
|
ldr r5, _08039414 @ =gActiveBattler
|
|
ldrb r3, [r5]
|
|
lsls r0, r3, 1
|
|
adds r4, r0, r1
|
|
ldrh r1, [r4]
|
|
cmp r1, 0
|
|
bne _080393BA
|
|
b _08039588
|
|
_080393BA:
|
|
ldr r0, _08039418 @ =0x0000ffff
|
|
cmp r1, r0
|
|
bne _080393C2
|
|
b _08039588
|
|
_080393C2:
|
|
ldr r2, _0803941C @ =gBattleMoves
|
|
ldrh r1, [r4]
|
|
lsls r0, r1, 1
|
|
adds r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x1]
|
|
cmp r0, 0
|
|
bne _080393D6
|
|
b _08039588
|
|
_080393D6:
|
|
ldr r0, _08039420 @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039442
|
|
mov r8, r3
|
|
mov r0, r8
|
|
bl GetBattlerPosition
|
|
movs r4, 0x2
|
|
eors r0, r4
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
ldr r1, _08039424 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r1]
|
|
ldr r2, _08039428 @ =gBitTable
|
|
lsls r0, 24
|
|
lsrs r0, 22
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _0803942C
|
|
ldrb r7, [r5]
|
|
b _08039446
|
|
.align 2, 0
|
|
_08039410: .4byte gUnknown_2023DA0
|
|
_08039414: .4byte gActiveBattler
|
|
_08039418: .4byte 0x0000ffff
|
|
_0803941C: .4byte gBattleMoves
|
|
_08039420: .4byte gBattleTypeFlags
|
|
_08039424: .4byte gAbsentBattlerFlags
|
|
_08039428: .4byte gBitTable
|
|
_0803942C:
|
|
ldrb r0, [r5]
|
|
bl GetBattlerPosition
|
|
eors r0, r4
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r7, r0, 24
|
|
b _08039446
|
|
_08039442:
|
|
adds r7, r3, 0
|
|
mov r8, r7
|
|
_08039446:
|
|
ldr r3, _08039468 @ =gBattleMoves
|
|
ldr r1, _0803946C @ =gUnknown_2023DA0
|
|
ldr r2, _08039470 @ =gActiveBattler
|
|
ldrb r0, [r2]
|
|
lsls r0, 1
|
|
adds r0, r1
|
|
ldrh r1, [r0]
|
|
lsls r0, r1, 1
|
|
adds r0, r1
|
|
lsls r0, 2
|
|
adds r0, r3
|
|
ldrb r0, [r0, 0x2]
|
|
adds r1, r2, 0
|
|
cmp r0, 0xA
|
|
bne _08039474
|
|
movs r0, 0x12
|
|
b _08039486
|
|
.align 2, 0
|
|
_08039468: .4byte gBattleMoves
|
|
_0803946C: .4byte gUnknown_2023DA0
|
|
_08039470: .4byte gActiveBattler
|
|
_08039474:
|
|
cmp r0, 0xB
|
|
bne _0803947E
|
|
movs r2, 0xB
|
|
mov r10, r2
|
|
b _08039488
|
|
_0803947E:
|
|
cmp r0, 0xD
|
|
beq _08039484
|
|
b _08039588
|
|
_08039484:
|
|
movs r0, 0xA
|
|
_08039486:
|
|
mov r10, r0
|
|
_08039488:
|
|
ldr r2, _0803949C @ =gBattleMons
|
|
ldrb r1, [r1]
|
|
movs r0, 0x58
|
|
muls r0, r1
|
|
adds r0, r2
|
|
adds r0, 0x20
|
|
ldrb r0, [r0]
|
|
cmp r0, r10
|
|
bne _080394CC
|
|
b _08039588
|
|
.align 2, 0
|
|
_0803949C: .4byte gBattleMons
|
|
_080394A0:
|
|
ldr r0, _080394C4 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _080394C8 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
strb r6, [r0]
|
|
movs r0, 0x1
|
|
movs r1, 0x2
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
movs r0, 0x1
|
|
b _0803958A
|
|
.align 2, 0
|
|
_080394C4: .4byte gActiveBattler
|
|
_080394C8: .4byte gBattleStruct
|
|
_080394CC:
|
|
movs r6, 0
|
|
ldr r2, _08039558 @ =gBaseStats
|
|
mov r9, r2
|
|
_080394D2:
|
|
movs r0, 0x64
|
|
adds r1, r6, 0
|
|
muls r1, r0
|
|
ldr r0, _0803955C @ =gEnemyParty
|
|
adds r5, r1, r0
|
|
adds r0, r5, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039582
|
|
adds r0, r5, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039582
|
|
adds r0, r5, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
movs r1, 0xCE
|
|
lsls r1, 1
|
|
cmp r0, r1
|
|
beq _08039582
|
|
ldr r1, _08039560 @ =gBattlerPartyIndexes
|
|
mov r2, r8
|
|
lsls r0, r2, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r6, r0
|
|
beq _08039582
|
|
lsls r0, r7, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r6, r0
|
|
beq _08039582
|
|
ldr r0, _08039564 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
adds r0, r2, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r6, r0
|
|
beq _08039582
|
|
adds r0, r7, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r6, r0
|
|
beq _08039582
|
|
adds r0, r5, 0
|
|
movs r1, 0xB
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r4, r0, 16
|
|
adds r0, r5, 0
|
|
movs r1, 0x2E
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039568
|
|
lsls r0, r4, 3
|
|
subs r0, r4
|
|
lsls r0, 2
|
|
add r0, r9
|
|
ldrb r0, [r0, 0x17]
|
|
b _08039572
|
|
.align 2, 0
|
|
_08039558: .4byte gBaseStats
|
|
_0803955C: .4byte gEnemyParty
|
|
_08039560: .4byte gBattlerPartyIndexes
|
|
_08039564: .4byte gBattleStruct
|
|
_08039568:
|
|
lsls r0, r4, 3
|
|
subs r0, r4
|
|
lsls r0, 2
|
|
add r0, r9
|
|
ldrb r0, [r0, 0x16]
|
|
_08039572:
|
|
cmp r10, r0
|
|
bne _08039582
|
|
bl Random
|
|
movs r1, 0x1
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _080394A0
|
|
_08039582:
|
|
adds r6, 0x1
|
|
cmp r6, 0x5
|
|
ble _080394D2
|
|
_08039588:
|
|
movs r0, 0
|
|
_0803958A:
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803937C
|
|
|
|
thumb_func_start sub_8039598
|
|
sub_8039598: @ 8039598
|
|
push {r4,r5,lr}
|
|
ldr r3, _080395F0 @ =gBattleMons
|
|
ldr r5, _080395F4 @ =gActiveBattler
|
|
ldrb r4, [r5]
|
|
movs r0, 0x58
|
|
adds r2, r4, 0
|
|
muls r2, r0
|
|
adds r0, r3, 0
|
|
adds r0, 0x4C
|
|
adds r0, r2, r0
|
|
ldr r0, [r0]
|
|
movs r1, 0x7
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039660
|
|
adds r1, r2, r3
|
|
adds r0, r1, 0
|
|
adds r0, 0x20
|
|
ldrb r0, [r0]
|
|
cmp r0, 0x1E
|
|
bne _08039660
|
|
ldrh r0, [r1, 0x2C]
|
|
ldrh r1, [r1, 0x28]
|
|
lsrs r0, 1
|
|
cmp r1, r0
|
|
bcc _08039660
|
|
ldr r1, _080395F8 @ =gUnknown_2023DA0
|
|
lsls r0, r4, 1
|
|
adds r0, r1
|
|
ldrh r1, [r0]
|
|
cmp r1, 0
|
|
beq _080395DE
|
|
ldr r0, _080395FC @ =0x0000ffff
|
|
cmp r1, r0
|
|
bne _08039600
|
|
_080395DE:
|
|
bl Random
|
|
movs r1, 0x1
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039600
|
|
ldrb r0, [r5]
|
|
b _08039668
|
|
.align 2, 0
|
|
_080395F0: .4byte gBattleMons
|
|
_080395F4: .4byte gActiveBattler
|
|
_080395F8: .4byte gUnknown_2023DA0
|
|
_080395FC: .4byte 0x0000ffff
|
|
_08039600:
|
|
ldr r2, _0803962C @ =gBattleMoves
|
|
ldr r1, _08039630 @ =gUnknown_2023DA0
|
|
ldr r4, _08039634 @ =gActiveBattler
|
|
ldrb r0, [r4]
|
|
lsls r0, 1
|
|
adds r0, r1
|
|
ldrh r1, [r0]
|
|
lsls r0, r1, 1
|
|
adds r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x1]
|
|
cmp r0, 0
|
|
bne _08039638
|
|
bl Random
|
|
movs r1, 0x1
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039638
|
|
ldrb r0, [r4]
|
|
b _08039668
|
|
.align 2, 0
|
|
_0803962C: .4byte gBattleMoves
|
|
_08039630: .4byte gUnknown_2023DA0
|
|
_08039634: .4byte gActiveBattler
|
|
_08039638:
|
|
movs r0, 0x8
|
|
movs r1, 0x1
|
|
bl sub_8039828
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039686
|
|
movs r0, 0x4
|
|
movs r1, 0x1
|
|
bl sub_8039828
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039686
|
|
bl Random
|
|
movs r1, 0x1
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _08039664
|
|
_08039660:
|
|
movs r0, 0
|
|
b _08039688
|
|
_08039664:
|
|
ldr r0, _08039690 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
_08039668:
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _08039694 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
movs r1, 0x6
|
|
strb r1, [r0]
|
|
movs r0, 0x1
|
|
movs r1, 0x2
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
_08039686:
|
|
movs r0, 0x1
|
|
_08039688:
|
|
pop {r4,r5}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08039690: .4byte gActiveBattler
|
|
_08039694: .4byte gBattleStruct
|
|
thumb_func_end sub_8039598
|
|
|
|
thumb_func_start ai_has_super_effective_move_on_field
|
|
ai_has_super_effective_move_on_field: @ 8039698
|
|
push {r4-r7,lr}
|
|
mov r7, r9
|
|
mov r6, r8
|
|
push {r6,r7}
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
mov r8, r0
|
|
movs r0, 0
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r3, r0, 24
|
|
ldr r0, _08039730 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r0]
|
|
ldr r2, _08039734 @ =gBitTable
|
|
lsls r0, r3, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _08039720
|
|
movs r4, 0
|
|
ldr r6, _08039738 @ =gBattleMons
|
|
movs r7, 0x58
|
|
adds r0, r3, 0
|
|
muls r0, r7
|
|
adds r5, r0, r6
|
|
movs r0, 0x20
|
|
adds r0, r5
|
|
mov r9, r0
|
|
_080396D4:
|
|
lsls r1, r4, 1
|
|
ldr r0, _0803973C @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
muls r0, r7
|
|
adds r1, r0
|
|
adds r0, r6, 0
|
|
adds r0, 0xC
|
|
adds r1, r0
|
|
ldrh r0, [r1]
|
|
cmp r0, 0
|
|
beq _0803971A
|
|
ldrh r1, [r5]
|
|
mov r3, r9
|
|
ldrb r2, [r3]
|
|
bl AI_TypeCalc
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
movs r0, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _0803971A
|
|
mov r0, r8
|
|
cmp r0, 0
|
|
bne _08039744
|
|
bl Random
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
movs r1, 0xA
|
|
bl __umodsi3
|
|
lsls r0, 16
|
|
cmp r0, 0
|
|
bne _08039744
|
|
_0803971A:
|
|
adds r4, 0x1
|
|
cmp r4, 0x3
|
|
ble _080396D4
|
|
_08039720:
|
|
ldr r0, _08039740 @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08039748
|
|
b _080397C2
|
|
.align 2, 0
|
|
_08039730: .4byte gAbsentBattlerFlags
|
|
_08039734: .4byte gBitTable
|
|
_08039738: .4byte gBattleMons
|
|
_0803973C: .4byte gActiveBattler
|
|
_08039740: .4byte gBattleTypeFlags
|
|
_08039744:
|
|
movs r0, 0x1
|
|
b _080397C4
|
|
_08039748:
|
|
movs r0, 0x2
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r3, r0, 24
|
|
ldr r0, _080397D0 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r0]
|
|
ldr r2, _080397D4 @ =gBitTable
|
|
lsls r0, r3, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _080397C2
|
|
movs r4, 0
|
|
ldr r6, _080397D8 @ =gBattleMons
|
|
movs r7, 0x58
|
|
adds r0, r3, 0
|
|
muls r0, r7
|
|
adds r5, r0, r6
|
|
movs r3, 0x20
|
|
adds r3, r5
|
|
mov r9, r3
|
|
_08039776:
|
|
lsls r1, r4, 1
|
|
ldr r0, _080397DC @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
muls r0, r7
|
|
adds r1, r0
|
|
adds r0, r6, 0
|
|
adds r0, 0xC
|
|
adds r1, r0
|
|
ldrh r0, [r1]
|
|
cmp r0, 0
|
|
beq _080397BC
|
|
ldrh r1, [r5]
|
|
mov r3, r9
|
|
ldrb r2, [r3]
|
|
bl AI_TypeCalc
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
movs r0, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _080397BC
|
|
mov r0, r8
|
|
cmp r0, 0
|
|
bne _08039744
|
|
bl Random
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
movs r1, 0xA
|
|
bl __umodsi3
|
|
lsls r0, 16
|
|
cmp r0, 0
|
|
bne _08039744
|
|
_080397BC:
|
|
adds r4, 0x1
|
|
cmp r4, 0x3
|
|
ble _08039776
|
|
_080397C2:
|
|
movs r0, 0
|
|
_080397C4:
|
|
pop {r3,r4}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_080397D0: .4byte gAbsentBattlerFlags
|
|
_080397D4: .4byte gBitTable
|
|
_080397D8: .4byte gBattleMons
|
|
_080397DC: .4byte gActiveBattler
|
|
thumb_func_end ai_has_super_effective_move_on_field
|
|
|
|
thumb_func_start AI_AreStatsRaised
|
|
AI_AreStatsRaised: @ 80397E0
|
|
push {r4,lr}
|
|
movs r4, 0
|
|
ldr r1, _08039820 @ =gBattleMons
|
|
ldr r0, _08039824 @ =gActiveBattler
|
|
ldrb r2, [r0]
|
|
movs r0, 0x58
|
|
muls r0, r2
|
|
adds r1, 0x18
|
|
adds r2, r0, r1
|
|
movs r3, 0x7
|
|
_080397F4:
|
|
ldrb r1, [r2]
|
|
movs r0, 0
|
|
ldrsb r0, [r2, r0]
|
|
cmp r0, 0x6
|
|
ble _0803980A
|
|
subs r1, 0x6
|
|
lsls r0, r4, 24
|
|
asrs r0, 24
|
|
adds r0, r1
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
_0803980A:
|
|
adds r2, 0x1
|
|
subs r3, 0x1
|
|
cmp r3, 0
|
|
bge _080397F4
|
|
movs r0, 0
|
|
cmp r4, 0x3
|
|
bls _0803981A
|
|
movs r0, 0x1
|
|
_0803981A:
|
|
pop {r4}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08039820: .4byte gBattleMons
|
|
_08039824: .4byte gActiveBattler
|
|
thumb_func_end AI_AreStatsRaised
|
|
|
|
thumb_func_start sub_8039828
|
|
sub_8039828: @ 8039828
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
sub sp, 0x8
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp]
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
str r1, [sp, 0x4]
|
|
ldr r1, _080398B4 @ =gUnknown_2023DA0
|
|
ldr r5, _080398B8 @ =gActiveBattler
|
|
ldrb r3, [r5]
|
|
lsls r0, r3, 1
|
|
adds r4, r0, r1
|
|
ldrh r1, [r4]
|
|
cmp r1, 0
|
|
bne _08039852
|
|
b _08039A54
|
|
_08039852:
|
|
ldr r0, _080398BC @ =0x0000ffff
|
|
cmp r1, r0
|
|
bne _0803985A
|
|
b _08039A54
|
|
_0803985A:
|
|
ldr r0, _080398C0 @ =gUnknown_2023DC0
|
|
adds r0, r3, r0
|
|
ldrb r0, [r0]
|
|
cmp r0, 0xFF
|
|
bne _08039866
|
|
b _08039A54
|
|
_08039866:
|
|
ldr r2, _080398C4 @ =gBattleMoves
|
|
ldrh r1, [r4]
|
|
lsls r0, r1, 1
|
|
adds r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x1]
|
|
cmp r0, 0
|
|
bne _0803987A
|
|
b _08039A54
|
|
_0803987A:
|
|
ldr r0, _080398C8 @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039918
|
|
mov r9, r3
|
|
mov r0, r9
|
|
bl GetBattlerPosition
|
|
movs r4, 0x2
|
|
eors r0, r4
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
ldr r1, _080398CC @ =gAbsentBattlerFlags
|
|
ldrb r1, [r1]
|
|
ldr r2, _080398D0 @ =gBitTable
|
|
lsls r0, 24
|
|
lsrs r0, 22
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _080398D4
|
|
ldrb r5, [r5]
|
|
mov r10, r5
|
|
b _0803991C
|
|
.align 2, 0
|
|
_080398B4: .4byte gUnknown_2023DA0
|
|
_080398B8: .4byte gActiveBattler
|
|
_080398BC: .4byte 0x0000ffff
|
|
_080398C0: .4byte gUnknown_2023DC0
|
|
_080398C4: .4byte gBattleMoves
|
|
_080398C8: .4byte gBattleTypeFlags
|
|
_080398CC: .4byte gAbsentBattlerFlags
|
|
_080398D0: .4byte gBitTable
|
|
_080398D4:
|
|
ldrb r0, [r5]
|
|
bl GetBattlerPosition
|
|
eors r0, r4
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
mov r10, r0
|
|
b _0803991C
|
|
_080398EC:
|
|
ldr r0, _08039910 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _08039914 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
strb r7, [r0]
|
|
movs r0, 0x1
|
|
movs r1, 0x2
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
movs r0, 0x1
|
|
b _08039A56
|
|
.align 2, 0
|
|
_08039910: .4byte gActiveBattler
|
|
_08039914: .4byte gBattleStruct
|
|
_08039918:
|
|
mov r9, r3
|
|
mov r10, r9
|
|
_0803991C:
|
|
movs r7, 0
|
|
_0803991E:
|
|
movs r0, 0x64
|
|
adds r1, r7, 0
|
|
muls r1, r0
|
|
ldr r0, _080399B0 @ =gEnemyParty
|
|
adds r5, r1, r0
|
|
adds r0, r5, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
bne _08039936
|
|
b _08039A4C
|
|
_08039936:
|
|
adds r0, r5, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
bne _08039944
|
|
b _08039A4C
|
|
_08039944:
|
|
adds r0, r5, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
movs r1, 0xCE
|
|
lsls r1, 1
|
|
cmp r0, r1
|
|
beq _08039A4C
|
|
ldr r1, _080399B4 @ =gBattlerPartyIndexes
|
|
mov r2, r9
|
|
lsls r0, r2, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039A4C
|
|
mov r2, r10
|
|
lsls r0, r2, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039A4C
|
|
ldr r0, _080399B8 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
mov r2, r9
|
|
adds r0, r2, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039A4C
|
|
mov r2, r10
|
|
adds r0, r2, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039A4C
|
|
adds r0, r5, 0
|
|
movs r1, 0xB
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r4, r0, 16
|
|
adds r0, r5, 0
|
|
movs r1, 0x2E
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _080399C0
|
|
lsls r0, r4, 3
|
|
subs r0, r4
|
|
lsls r0, 2
|
|
ldr r1, _080399BC @ =gBaseStats
|
|
adds r0, r1
|
|
ldrb r2, [r0, 0x17]
|
|
b _080399CC
|
|
.align 2, 0
|
|
_080399B0: .4byte gEnemyParty
|
|
_080399B4: .4byte gBattlerPartyIndexes
|
|
_080399B8: .4byte gBattleStruct
|
|
_080399BC: .4byte gBaseStats
|
|
_080399C0:
|
|
lsls r0, r4, 3
|
|
subs r0, r4
|
|
lsls r0, 2
|
|
ldr r2, _08039A68 @ =gBaseStats
|
|
adds r0, r2
|
|
ldrb r2, [r0, 0x16]
|
|
_080399CC:
|
|
ldr r1, _08039A6C @ =gUnknown_2023DA0
|
|
ldr r5, _08039A70 @ =gActiveBattler
|
|
ldrb r0, [r5]
|
|
lsls r0, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
adds r1, r4, 0
|
|
bl AI_TypeCalc
|
|
ldr r1, [sp]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039A4C
|
|
ldr r1, _08039A74 @ =gUnknown_2023DC0
|
|
ldrb r0, [r5]
|
|
adds r0, r1
|
|
ldrb r0, [r0]
|
|
mov r9, r0
|
|
movs r4, 0
|
|
movs r0, 0x64
|
|
adds r1, r7, 0
|
|
muls r1, r0
|
|
mov r8, r1
|
|
ldr r1, _08039A78 @ =gBattleMons
|
|
movs r0, 0x58
|
|
mov r2, r9
|
|
muls r2, r0
|
|
adds r0, r2, 0
|
|
adds r5, r0, r1
|
|
adds r6, r5, 0
|
|
adds r6, 0x20
|
|
_08039A0A:
|
|
ldr r0, _08039A7C @ =gEnemyParty
|
|
adds r1, r4, 0
|
|
adds r1, 0xD
|
|
add r0, r8
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
cmp r0, 0
|
|
beq _08039A46
|
|
ldrh r1, [r5]
|
|
ldrb r2, [r6]
|
|
bl AI_TypeCalc
|
|
lsls r0, 24
|
|
lsrs r1, r0, 24
|
|
movs r0, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039A46
|
|
bl Random
|
|
lsls r0, 16
|
|
lsrs r0, 16
|
|
ldr r1, [sp, 0x4]
|
|
bl __modsi3
|
|
cmp r0, 0
|
|
bne _08039A46
|
|
b _080398EC
|
|
_08039A46:
|
|
adds r4, 0x1
|
|
cmp r4, 0x3
|
|
ble _08039A0A
|
|
_08039A4C:
|
|
adds r7, 0x1
|
|
cmp r7, 0x5
|
|
bgt _08039A54
|
|
b _0803991E
|
|
_08039A54:
|
|
movs r0, 0
|
|
_08039A56:
|
|
add sp, 0x8
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_08039A68: .4byte gBaseStats
|
|
_08039A6C: .4byte gUnknown_2023DA0
|
|
_08039A70: .4byte gActiveBattler
|
|
_08039A74: .4byte gUnknown_2023DC0
|
|
_08039A78: .4byte gBattleMons
|
|
_08039A7C: .4byte gEnemyParty
|
|
thumb_func_end sub_8039828
|
|
|
|
thumb_func_start sub_8039A80
|
|
sub_8039A80: @ 8039A80
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
sub sp, 0x4
|
|
ldr r6, _08039B5C @ =gBattleMons
|
|
ldr r4, _08039B60 @ =gActiveBattler
|
|
ldrb r2, [r4]
|
|
movs r5, 0x58
|
|
adds r0, r2, 0
|
|
muls r0, r5
|
|
adds r1, r6, 0
|
|
adds r1, 0x50
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
ldr r1, _08039B64 @ =0x0400e000
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039AA6
|
|
b _08039C74
|
|
_08039AA6:
|
|
ldr r0, _08039B68 @ =gStatuses3
|
|
lsls r1, r2, 2
|
|
adds r1, r0
|
|
ldr r1, [r1]
|
|
movs r0, 0x80
|
|
lsls r0, 3
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039ABA
|
|
b _08039C74
|
|
_08039ABA:
|
|
str r1, [sp]
|
|
movs r0, 0xC
|
|
adds r1, r2, 0
|
|
movs r2, 0x17
|
|
movs r3, 0
|
|
bl AbilityBattleEffects
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
cmp r0, 0
|
|
beq _08039AD2
|
|
b _08039C74
|
|
_08039AD2:
|
|
ldrb r1, [r4]
|
|
str r0, [sp]
|
|
movs r0, 0xC
|
|
movs r2, 0x47
|
|
movs r3, 0
|
|
bl AbilityBattleEffects
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
cmp r0, 0
|
|
beq _08039AEA
|
|
b _08039C74
|
|
_08039AEA:
|
|
str r0, [sp]
|
|
movs r0, 0xE
|
|
movs r1, 0
|
|
movs r2, 0x2A
|
|
movs r3, 0
|
|
bl AbilityBattleEffects
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _08039B1C
|
|
ldrb r0, [r4]
|
|
muls r0, r5
|
|
adds r1, r0, r6
|
|
adds r0, r1, 0
|
|
adds r0, 0x21
|
|
ldrb r0, [r0]
|
|
cmp r0, 0x8
|
|
bne _08039B10
|
|
b _08039C74
|
|
_08039B10:
|
|
adds r0, r1, 0
|
|
adds r0, 0x22
|
|
ldrb r0, [r0]
|
|
cmp r0, 0x8
|
|
bne _08039B1C
|
|
b _08039C74
|
|
_08039B1C:
|
|
movs r0, 0
|
|
mov r8, r0
|
|
ldr r0, _08039B6C @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039B8E
|
|
ldr r4, _08039B60 @ =gActiveBattler
|
|
ldrb r7, [r4]
|
|
adds r0, r7, 0
|
|
bl GetBattlerPosition
|
|
movs r5, 0x2
|
|
eors r0, r5
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
ldr r1, _08039B70 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r1]
|
|
ldr r2, _08039B74 @ =gBitTable
|
|
lsls r0, 24
|
|
lsrs r0, 22
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039B78
|
|
ldrb r6, [r4]
|
|
b _08039B94
|
|
.align 2, 0
|
|
_08039B5C: .4byte gBattleMons
|
|
_08039B60: .4byte gActiveBattler
|
|
_08039B64: .4byte 0x0400e000
|
|
_08039B68: .4byte gStatuses3
|
|
_08039B6C: .4byte gBattleTypeFlags
|
|
_08039B70: .4byte gAbsentBattlerFlags
|
|
_08039B74: .4byte gBitTable
|
|
_08039B78:
|
|
ldrb r0, [r4]
|
|
bl GetBattlerPosition
|
|
eors r0, r5
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r6, r0, 24
|
|
b _08039B94
|
|
_08039B8E:
|
|
ldr r0, _08039C64 @ =gActiveBattler
|
|
ldrb r6, [r0]
|
|
adds r7, r6, 0
|
|
_08039B94:
|
|
movs r5, 0
|
|
_08039B96:
|
|
movs r0, 0x64
|
|
adds r1, r5, 0
|
|
muls r1, r0
|
|
ldr r0, _08039C68 @ =gEnemyParty
|
|
adds r4, r1, r0
|
|
adds r0, r4, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039BFA
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039BFA
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
movs r1, 0xCE
|
|
lsls r1, 1
|
|
cmp r0, r1
|
|
beq _08039BFA
|
|
ldr r1, _08039C6C @ =gBattlerPartyIndexes
|
|
lsls r0, r7, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r5, r0
|
|
beq _08039BFA
|
|
lsls r0, r6, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r5, r0
|
|
beq _08039BFA
|
|
ldr r0, _08039C70 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
adds r0, r7, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r5, r0
|
|
beq _08039BFA
|
|
adds r0, r6, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r5, r0
|
|
beq _08039BFA
|
|
movs r0, 0x1
|
|
add r8, r0
|
|
_08039BFA:
|
|
adds r5, 0x1
|
|
cmp r5, 0x5
|
|
ble _08039B96
|
|
mov r0, r8
|
|
cmp r0, 0
|
|
beq _08039C74
|
|
bl ShouldSwitchIfPerishSong
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C60
|
|
bl sub_80391EC
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C60
|
|
bl sub_803937C
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C60
|
|
bl sub_8039598
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C60
|
|
movs r0, 0
|
|
bl ai_has_super_effective_move_on_field
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C74
|
|
bl AI_AreStatsRaised
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C74
|
|
movs r0, 0x8
|
|
movs r1, 0x2
|
|
bl sub_8039828
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039C60
|
|
movs r0, 0x4
|
|
movs r1, 0x3
|
|
bl sub_8039828
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _08039C74
|
|
_08039C60:
|
|
movs r0, 0x1
|
|
b _08039C76
|
|
.align 2, 0
|
|
_08039C64: .4byte gActiveBattler
|
|
_08039C68: .4byte gEnemyParty
|
|
_08039C6C: .4byte gBattlerPartyIndexes
|
|
_08039C70: .4byte gBattleStruct
|
|
_08039C74:
|
|
movs r0, 0
|
|
_08039C76:
|
|
add sp, 0x4
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_8039A80
|
|
|
|
thumb_func_start sub_8039C84
|
|
sub_8039C84: @ 8039C84
|
|
push {r4-r6,lr}
|
|
ldr r5, _08039CDC @ =gBattleTypeFlags
|
|
ldr r0, [r5]
|
|
movs r1, 0x8
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08039C94
|
|
b _08039D96
|
|
_08039C94:
|
|
bl sub_8039A80
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
beq _08039D8C
|
|
ldr r0, _08039CE0 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _08039CE4 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
ldrb r0, [r0]
|
|
cmp r0, 0x6
|
|
bne _08039D5A
|
|
bl sub_8039E3C
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
cmp r4, 0x6
|
|
bne _08039D44
|
|
ldr r0, [r5]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _08039CE8
|
|
movs r0, 0x1
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r5, r0, 24
|
|
adds r6, r5, 0
|
|
b _08039CFC
|
|
.align 2, 0
|
|
_08039CDC: .4byte gBattleTypeFlags
|
|
_08039CE0: .4byte gActiveBattler
|
|
_08039CE4: .4byte gBattleStruct
|
|
_08039CE8:
|
|
movs r0, 0x1
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r6, r0, 24
|
|
movs r0, 0x3
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r5, r0, 24
|
|
_08039CFC:
|
|
movs r4, 0
|
|
_08039CFE:
|
|
movs r0, 0x64
|
|
muls r0, r4
|
|
ldr r1, _08039D7C @ =gEnemyParty
|
|
adds r0, r1
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039D3E
|
|
ldr r1, _08039D80 @ =gBattlerPartyIndexes
|
|
lsls r0, r6, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r4, r0
|
|
beq _08039D3E
|
|
lsls r0, r5, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r4, r0
|
|
beq _08039D3E
|
|
ldr r0, _08039D84 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
adds r0, r6, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r4, r0
|
|
beq _08039D3E
|
|
adds r0, r5, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r4, r0
|
|
bne _08039D44
|
|
_08039D3E:
|
|
adds r4, 0x1
|
|
cmp r4, 0x5
|
|
ble _08039CFE
|
|
_08039D44:
|
|
ldr r0, _08039D88 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
bl GetBattlerPosition
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
ldr r1, _08039D84 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
strb r4, [r0]
|
|
_08039D5A:
|
|
ldr r4, _08039D88 @ =gActiveBattler
|
|
ldrb r0, [r4]
|
|
bl GetBattlerPosition
|
|
ldrb r2, [r4]
|
|
ldr r1, _08039D84 @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
adds r2, r1
|
|
adds r2, 0x5C
|
|
lsls r0, 24
|
|
lsrs r0, 25
|
|
adds r0, r1
|
|
adds r0, 0x92
|
|
ldrb r0, [r0]
|
|
strb r0, [r2]
|
|
b _08039DA8
|
|
.align 2, 0
|
|
_08039D7C: .4byte gEnemyParty
|
|
_08039D80: .4byte gBattlerPartyIndexes
|
|
_08039D84: .4byte gBattleStruct
|
|
_08039D88: .4byte gActiveBattler
|
|
_08039D8C:
|
|
bl sub_803A1F4
|
|
lsls r0, 24
|
|
cmp r0, 0
|
|
bne _08039DA8
|
|
_08039D96:
|
|
ldr r0, _08039DB0 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
movs r2, 0x1
|
|
eors r2, r0
|
|
lsls r2, 8
|
|
movs r0, 0x1
|
|
movs r1, 0
|
|
bl EmitTwoReturnValues
|
|
_08039DA8:
|
|
pop {r4-r6}
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_08039DB0: .4byte gActiveBattler
|
|
thumb_func_end sub_8039C84
|
|
|
|
thumb_func_start sub_8039DB4
|
|
sub_8039DB4: @ 8039DB4
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
sub sp, 0x4
|
|
adds r6, r3, 0
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp]
|
|
lsls r1, 24
|
|
lsrs r1, 24
|
|
mov r9, r1
|
|
lsls r2, 24
|
|
lsrs r2, 24
|
|
mov r8, r2
|
|
movs r7, 0
|
|
ldr r0, _08039E38 @ =gUnknown_824F050
|
|
mov r10, r0
|
|
ldrb r0, [r0]
|
|
cmp r0, 0xFF
|
|
beq _08039E26
|
|
mov r5, r10
|
|
_08039DE2:
|
|
ldrb r0, [r5]
|
|
cmp r0, 0xFE
|
|
beq _08039E18
|
|
ldr r1, [sp]
|
|
cmp r0, r1
|
|
bne _08039E18
|
|
ldrb r4, [r5, 0x1]
|
|
cmp r4, r9
|
|
bne _08039E02
|
|
ldrb r1, [r6]
|
|
ldrb r0, [r5, 0x2]
|
|
muls r0, r1
|
|
movs r1, 0xA
|
|
bl __divsi3
|
|
strb r0, [r6]
|
|
_08039E02:
|
|
cmp r4, r8
|
|
bne _08039E18
|
|
cmp r9, r8
|
|
beq _08039E18
|
|
ldrb r1, [r6]
|
|
ldrb r0, [r5, 0x2]
|
|
muls r0, r1
|
|
movs r1, 0xA
|
|
bl __divsi3
|
|
strb r0, [r6]
|
|
_08039E18:
|
|
adds r5, 0x3
|
|
adds r7, 0x3
|
|
mov r1, r10
|
|
adds r0, r7, r1
|
|
ldrb r0, [r0]
|
|
cmp r0, 0xFF
|
|
bne _08039DE2
|
|
_08039E26:
|
|
add sp, 0x4
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r0}
|
|
bx r0
|
|
.align 2, 0
|
|
_08039E38: .4byte gUnknown_824F050
|
|
thumb_func_end sub_8039DB4
|
|
|
|
thumb_func_start sub_8039E3C
|
|
sub_8039E3C: @ 8039E3C
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
sub sp, 0x1C
|
|
ldr r4, _08039E98 @ =gActiveBattler
|
|
ldrb r2, [r4]
|
|
ldr r0, _08039E9C @ =gBattleStruct
|
|
ldr r0, [r0]
|
|
adds r0, r2, r0
|
|
adds r1, r0, 0
|
|
adds r1, 0x5C
|
|
ldrb r0, [r1]
|
|
cmp r0, 0x6
|
|
beq _08039E5E
|
|
b _0803A160
|
|
_08039E5E:
|
|
ldr r0, _08039EA0 @ =gBattleTypeFlags
|
|
ldr r0, [r0]
|
|
movs r1, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _08039EF8
|
|
str r2, [sp, 0xC]
|
|
adds r0, r2, 0
|
|
bl GetBattlerPosition
|
|
movs r5, 0x2
|
|
eors r0, r5
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
ldr r1, _08039EA4 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r1]
|
|
ldr r2, _08039EA8 @ =gBitTable
|
|
lsls r0, 24
|
|
lsrs r0, 22
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039EAC
|
|
ldrb r4, [r4]
|
|
str r4, [sp, 0x10]
|
|
b _08039EC2
|
|
.align 2, 0
|
|
_08039E98: .4byte gActiveBattler
|
|
_08039E9C: .4byte gBattleStruct
|
|
_08039EA0: .4byte gBattleTypeFlags
|
|
_08039EA4: .4byte gAbsentBattlerFlags
|
|
_08039EA8: .4byte gBitTable
|
|
_08039EAC:
|
|
ldrb r0, [r4]
|
|
bl GetBattlerPosition
|
|
eors r0, r5
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x10]
|
|
_08039EC2:
|
|
bl Random
|
|
movs r3, 0x2
|
|
ands r0, r3
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
mov r10, r0
|
|
ldr r0, _08039EF0 @ =gAbsentBattlerFlags
|
|
ldrb r1, [r0]
|
|
ldr r2, _08039EF4 @ =gBitTable
|
|
mov r4, r10
|
|
lsls r0, r4, 2
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _08039F0A
|
|
eors r4, r3
|
|
lsls r0, r4, 24
|
|
lsrs r0, 24
|
|
mov r10, r0
|
|
b _08039F0A
|
|
.align 2, 0
|
|
_08039EF0: .4byte gAbsentBattlerFlags
|
|
_08039EF4: .4byte gBitTable
|
|
_08039EF8:
|
|
movs r0, 0
|
|
bl GetBattlerAtPosition
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
mov r10, r0
|
|
ldrb r4, [r4]
|
|
str r4, [sp, 0x10]
|
|
str r4, [sp, 0xC]
|
|
_08039F0A:
|
|
movs r0, 0
|
|
mov r9, r0
|
|
mov r1, sp
|
|
str r1, [sp, 0x14]
|
|
_08039F12:
|
|
movs r2, 0
|
|
str r2, [sp, 0x4]
|
|
movs r4, 0x6
|
|
str r4, [sp, 0x8]
|
|
movs r7, 0
|
|
ldr r0, _08039FD8 @ =gBitTable
|
|
mov r8, r0
|
|
_08039F20:
|
|
movs r0, 0x64
|
|
adds r1, r7, 0
|
|
muls r1, r0
|
|
ldr r0, _08039FDC @ =gEnemyParty
|
|
adds r4, r1, r0
|
|
adds r0, r4, 0
|
|
movs r1, 0xB
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r5, r0, 16
|
|
cmp r5, 0
|
|
beq _08039FF0
|
|
adds r0, r4, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _08039FF0
|
|
mov r1, r8
|
|
ldr r0, [r1]
|
|
mov r2, r9
|
|
ands r0, r2
|
|
cmp r0, 0
|
|
bne _08039FF0
|
|
ldr r1, _08039FE0 @ =gBattlerPartyIndexes
|
|
ldr r4, [sp, 0xC]
|
|
lsls r0, r4, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r0, r7
|
|
beq _08039FF0
|
|
ldr r2, [sp, 0x10]
|
|
lsls r0, r2, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r0, r7
|
|
beq _08039FF0
|
|
ldr r0, _08039FE4 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
adds r0, r4, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039FF0
|
|
adds r0, r2, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _08039FF0
|
|
ldr r1, _08039FE8 @ =gBaseStats
|
|
lsls r0, r5, 3
|
|
subs r0, r5
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldrb r5, [r0, 0x6]
|
|
ldrb r6, [r0, 0x7]
|
|
movs r0, 0xA
|
|
ldr r4, [sp, 0x14]
|
|
strb r0, [r4]
|
|
movs r0, 0x58
|
|
mov r4, r10
|
|
muls r4, r0
|
|
ldr r0, _08039FEC @ =gBattleMons
|
|
adds r4, r0
|
|
adds r0, r4, 0
|
|
adds r0, 0x21
|
|
ldrb r0, [r0]
|
|
adds r1, r5, 0
|
|
adds r2, r6, 0
|
|
mov r3, sp
|
|
bl sub_8039DB4
|
|
adds r4, 0x22
|
|
ldrb r0, [r4]
|
|
adds r1, r5, 0
|
|
adds r2, r6, 0
|
|
mov r3, sp
|
|
bl sub_8039DB4
|
|
ldr r2, [sp, 0x4]
|
|
ldr r1, [sp, 0x14]
|
|
ldrb r1, [r1]
|
|
cmp r2, r1
|
|
bcs _08039FFE
|
|
ldr r2, [sp, 0x14]
|
|
ldrb r2, [r2]
|
|
str r2, [sp, 0x4]
|
|
lsls r0, r7, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x8]
|
|
b _08039FFE
|
|
.align 2, 0
|
|
_08039FD8: .4byte gBitTable
|
|
_08039FDC: .4byte gEnemyParty
|
|
_08039FE0: .4byte gBattlerPartyIndexes
|
|
_08039FE4: .4byte gBattleStruct
|
|
_08039FE8: .4byte gBaseStats
|
|
_08039FEC: .4byte gBattleMons
|
|
_08039FF0:
|
|
mov r4, r8
|
|
ldr r0, [r4]
|
|
mov r1, r9
|
|
orrs r1, r0
|
|
lsls r0, r1, 24
|
|
lsrs r0, 24
|
|
mov r9, r0
|
|
_08039FFE:
|
|
movs r2, 0x4
|
|
add r8, r2
|
|
adds r7, 0x1
|
|
cmp r7, 0x5
|
|
ble _08039F20
|
|
ldr r4, [sp, 0x8]
|
|
cmp r4, 0x6
|
|
beq _0803A06C
|
|
movs r7, 0
|
|
movs r0, 0x64
|
|
adds r5, r4, 0
|
|
muls r5, r0
|
|
ldr r6, _0803A060 @ =gEnemyParty
|
|
_0803A018:
|
|
adds r1, r7, 0
|
|
adds r1, 0xD
|
|
adds r0, r5, r6
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r4, r0, 16
|
|
cmp r4, 0
|
|
beq _0803A03E
|
|
ldr r0, _0803A064 @ =gActiveBattler
|
|
ldrb r1, [r0]
|
|
adds r0, r4, 0
|
|
mov r2, r10
|
|
bl TypeCalc
|
|
movs r1, 0x2
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
bne _0803A044
|
|
_0803A03E:
|
|
adds r7, 0x1
|
|
cmp r7, 0x3
|
|
ble _0803A018
|
|
_0803A044:
|
|
cmp r7, 0x4
|
|
beq _0803A04A
|
|
b _0803A15E
|
|
_0803A04A:
|
|
ldr r1, [sp, 0x8]
|
|
lsls r0, r1, 2
|
|
ldr r2, _0803A068 @ =gBitTable
|
|
adds r0, r2
|
|
ldr r0, [r0]
|
|
mov r4, r9
|
|
orrs r4, r0
|
|
lsls r0, r4, 24
|
|
lsrs r0, 24
|
|
b _0803A06E
|
|
.align 2, 0
|
|
_0803A060: .4byte gEnemyParty
|
|
_0803A064: .4byte gActiveBattler
|
|
_0803A068: .4byte gBitTable
|
|
_0803A06C:
|
|
movs r0, 0x3F
|
|
_0803A06E:
|
|
mov r9, r0
|
|
mov r1, r9
|
|
cmp r1, 0x3F
|
|
beq _0803A078
|
|
b _08039F12
|
|
_0803A078:
|
|
ldr r0, _0803A170 @ =gDynamicBasePower
|
|
movs r1, 0
|
|
strh r1, [r0]
|
|
ldr r0, _0803A174 @ =gBattleStruct
|
|
ldr r0, [r0]
|
|
strb r1, [r0, 0x13]
|
|
ldr r0, _0803A178 @ =gBattleScripting
|
|
movs r2, 0x1
|
|
strb r2, [r0, 0xE]
|
|
ldr r0, _0803A17C @ =gMoveResultFlags
|
|
strb r1, [r0]
|
|
ldr r0, _0803A180 @ =gCritMultiplier
|
|
strb r2, [r0]
|
|
movs r2, 0
|
|
str r2, [sp, 0x4]
|
|
movs r4, 0x6
|
|
str r4, [sp, 0x8]
|
|
movs r7, 0
|
|
_0803A09C:
|
|
movs r0, 0x64
|
|
adds r6, r7, 0
|
|
muls r6, r0
|
|
ldr r0, _0803A184 @ =gEnemyParty
|
|
adds r4, r6, r0
|
|
adds r0, r4, 0
|
|
movs r1, 0xB
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
adds r1, r7, 0x1
|
|
str r1, [sp, 0x18]
|
|
cmp r0, 0
|
|
beq _0803A158
|
|
adds r0, r4, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _0803A158
|
|
ldr r1, _0803A188 @ =gBattlerPartyIndexes
|
|
ldr r2, [sp, 0xC]
|
|
lsls r0, r2, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r0, r7
|
|
beq _0803A158
|
|
ldr r4, [sp, 0x10]
|
|
lsls r0, r4, 1
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
cmp r0, r7
|
|
beq _0803A158
|
|
ldr r0, _0803A174 @ =gBattleStruct
|
|
ldr r1, [r0]
|
|
adds r0, r2, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _0803A158
|
|
adds r0, r4, r1
|
|
adds r0, 0x5C
|
|
ldrb r0, [r0]
|
|
cmp r7, r0
|
|
beq _0803A158
|
|
movs r5, 0
|
|
mov r9, r6
|
|
ldr r0, _0803A18C @ =gBattleMoveDamage
|
|
mov r8, r0
|
|
ldr r6, _0803A190 @ =gActiveBattler
|
|
_0803A100:
|
|
adds r1, r5, 0
|
|
adds r1, 0xD
|
|
ldr r0, _0803A184 @ =gEnemyParty
|
|
add r0, r9
|
|
bl GetMonData
|
|
lsls r0, 16
|
|
lsrs r4, r0, 16
|
|
movs r0, 0
|
|
mov r1, r8
|
|
str r0, [r1]
|
|
cmp r4, 0
|
|
beq _0803A13C
|
|
ldr r0, _0803A194 @ =gBattleMoves
|
|
lsls r1, r4, 1
|
|
adds r1, r4
|
|
lsls r1, 2
|
|
adds r1, r0
|
|
ldrb r0, [r1, 0x1]
|
|
cmp r0, 0x1
|
|
beq _0803A13C
|
|
ldrb r0, [r6]
|
|
mov r1, r10
|
|
bl AI_CalcDmg
|
|
ldrb r1, [r6]
|
|
adds r0, r4, 0
|
|
mov r2, r10
|
|
bl TypeCalc
|
|
_0803A13C:
|
|
mov r2, r8
|
|
ldr r0, [r2]
|
|
ldr r4, [sp, 0x4]
|
|
cmp r4, r0
|
|
bge _0803A152
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x4]
|
|
lsls r0, r7, 24
|
|
lsrs r0, 24
|
|
str r0, [sp, 0x8]
|
|
_0803A152:
|
|
adds r5, 0x1
|
|
cmp r5, 0x3
|
|
ble _0803A100
|
|
_0803A158:
|
|
ldr r7, [sp, 0x18]
|
|
cmp r7, 0x5
|
|
ble _0803A09C
|
|
_0803A15E:
|
|
ldr r0, [sp, 0x8]
|
|
_0803A160:
|
|
add sp, 0x1C
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
.align 2, 0
|
|
_0803A170: .4byte gDynamicBasePower
|
|
_0803A174: .4byte gBattleStruct
|
|
_0803A178: .4byte gBattleScripting
|
|
_0803A17C: .4byte gMoveResultFlags
|
|
_0803A180: .4byte gCritMultiplier
|
|
_0803A184: .4byte gEnemyParty
|
|
_0803A188: .4byte gBattlerPartyIndexes
|
|
_0803A18C: .4byte gBattleMoveDamage
|
|
_0803A190: .4byte gActiveBattler
|
|
_0803A194: .4byte gBattleMoves
|
|
thumb_func_end sub_8039E3C
|
|
|
|
thumb_func_start sub_803A198
|
|
sub_803A198: @ 803A198
|
|
push {r4,lr}
|
|
adds r2, r1, 0
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
cmp r0, 0x13
|
|
bne _0803A1A8
|
|
movs r0, 0x1
|
|
b _0803A1EE
|
|
_0803A1A8:
|
|
ldrb r1, [r2, 0x4]
|
|
movs r0, 0x4
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A1B6
|
|
movs r0, 0x2
|
|
b _0803A1EE
|
|
_0803A1B6:
|
|
ldrb r4, [r2, 0x3]
|
|
movs r3, 0x3F
|
|
adds r0, r3, 0
|
|
ands r0, r4
|
|
cmp r0, 0
|
|
beq _0803A1C6
|
|
movs r0, 0x3
|
|
b _0803A1EE
|
|
_0803A1C6:
|
|
ldrb r1, [r2]
|
|
adds r0, r3, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803A1DC
|
|
ldrb r0, [r2, 0x1]
|
|
cmp r0, 0
|
|
bne _0803A1DC
|
|
ldrb r0, [r2, 0x2]
|
|
cmp r0, 0
|
|
beq _0803A1E0
|
|
_0803A1DC:
|
|
movs r0, 0x4
|
|
b _0803A1EE
|
|
_0803A1E0:
|
|
movs r0, 0x80
|
|
ands r0, r4
|
|
cmp r0, 0
|
|
bne _0803A1EC
|
|
movs r0, 0x6
|
|
b _0803A1EE
|
|
_0803A1EC:
|
|
movs r0, 0x5
|
|
_0803A1EE:
|
|
pop {r4}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803A198
|
|
|
|
thumb_func_start sub_803A1F4
|
|
sub_803A1F4: @ 803A1F4
|
|
push {r4-r7,lr}
|
|
mov r7, r10
|
|
mov r6, r9
|
|
mov r5, r8
|
|
push {r5-r7}
|
|
sub sp, 0x4
|
|
movs r0, 0
|
|
mov r10, r0
|
|
movs r7, 0
|
|
movs r1, 0
|
|
mov r8, r1
|
|
_0803A20A:
|
|
movs r0, 0x64
|
|
mov r1, r8
|
|
muls r1, r0
|
|
ldr r0, _0803A2A8 @ =gEnemyParty
|
|
adds r4, r1, r0
|
|
adds r0, r4, 0
|
|
movs r1, 0x39
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _0803A246
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
cmp r0, 0
|
|
beq _0803A246
|
|
adds r0, r4, 0
|
|
movs r1, 0x41
|
|
bl GetMonData
|
|
movs r1, 0xCE
|
|
lsls r1, 1
|
|
cmp r0, r1
|
|
beq _0803A246
|
|
mov r0, r10
|
|
adds r0, 0x1
|
|
lsls r0, 24
|
|
lsrs r0, 24
|
|
mov r10, r0
|
|
_0803A246:
|
|
movs r2, 0x1
|
|
add r8, r2
|
|
mov r0, r8
|
|
cmp r0, 0x5
|
|
ble _0803A20A
|
|
movs r1, 0
|
|
mov r8, r1
|
|
_0803A254:
|
|
ldr r1, _0803A2AC @ =gBattleResources
|
|
mov r2, r8
|
|
cmp r2, 0
|
|
beq _0803A26E
|
|
ldr r0, [r1]
|
|
ldr r0, [r0, 0x18]
|
|
adds r0, 0x2C
|
|
ldrb r0, [r0]
|
|
subs r0, r2
|
|
adds r0, 0x1
|
|
cmp r10, r0
|
|
ble _0803A26E
|
|
b _0803A644
|
|
_0803A26E:
|
|
ldr r0, [r1]
|
|
ldr r0, [r0, 0x18]
|
|
mov r2, r8
|
|
lsls r1, r2, 1
|
|
adds r0, 0x24
|
|
adds r0, r1
|
|
ldrh r0, [r0]
|
|
mov r9, r0
|
|
str r1, [sp]
|
|
cmp r0, 0
|
|
bne _0803A286
|
|
b _0803A644
|
|
_0803A286:
|
|
ldr r1, _0803A2B0 @ =gItemEffectTable
|
|
subs r0, 0xD
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldr r1, [r0]
|
|
cmp r1, 0
|
|
bne _0803A296
|
|
b _0803A644
|
|
_0803A296:
|
|
mov r0, r9
|
|
cmp r0, 0xAF
|
|
bne _0803A2BC
|
|
ldr r0, _0803A2B4 @ =gSaveBlock1Ptr
|
|
ldr r0, [r0]
|
|
ldr r1, _0803A2B8 @ =0x00003108
|
|
adds r5, r0, r1
|
|
b _0803A2BE
|
|
.align 2, 0
|
|
_0803A2A8: .4byte gEnemyParty
|
|
_0803A2AC: .4byte gBattleResources
|
|
_0803A2B0: .4byte gItemEffectTable
|
|
_0803A2B4: .4byte gSaveBlock1Ptr
|
|
_0803A2B8: .4byte 0x00003108
|
|
_0803A2BC:
|
|
adds r5, r1, 0
|
|
_0803A2BE:
|
|
mov r2, r9
|
|
lsls r0, r2, 24
|
|
lsrs r0, 24
|
|
adds r1, r5, 0
|
|
bl sub_803A198
|
|
ldr r4, _0803A2F8 @ =gActiveBattler
|
|
ldrb r1, [r4]
|
|
lsrs r1, 1
|
|
ldr r3, _0803A2FC @ =gBattleStruct
|
|
ldr r2, [r3]
|
|
adds r1, r2
|
|
adds r1, 0xC4
|
|
strb r0, [r1]
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC4
|
|
ldrb r0, [r0]
|
|
subs r0, 0x1
|
|
cmp r0, 0x5
|
|
bls _0803A2EE
|
|
b _0803A5F8
|
|
_0803A2EE:
|
|
lsls r0, 2
|
|
ldr r1, _0803A300 @ =_0803A304
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
mov pc, r0
|
|
.align 2, 0
|
|
_0803A2F8: .4byte gActiveBattler
|
|
_0803A2FC: .4byte gBattleStruct
|
|
_0803A300: .4byte _0803A304
|
|
.align 2, 0
|
|
_0803A304:
|
|
.4byte _0803A31C
|
|
.4byte _0803A348
|
|
.4byte _0803A390
|
|
.4byte _0803A4E8
|
|
.4byte _0803A5C8
|
|
.4byte _0803A650
|
|
_0803A31C:
|
|
ldr r2, _0803A340 @ =gBattleMons
|
|
ldr r0, _0803A344 @ =gActiveBattler
|
|
ldrb r1, [r0]
|
|
movs r0, 0x58
|
|
muls r0, r1
|
|
adds r0, r2
|
|
ldrh r1, [r0, 0x2C]
|
|
ldrh r0, [r0, 0x28]
|
|
lsrs r1, 2
|
|
cmp r0, r1
|
|
bcc _0803A334
|
|
b _0803A5F8
|
|
_0803A334:
|
|
cmp r0, 0
|
|
bne _0803A33A
|
|
b _0803A5F8
|
|
_0803A33A:
|
|
movs r7, 0x1
|
|
b _0803A5FC
|
|
.align 2, 0
|
|
_0803A340: .4byte gBattleMons
|
|
_0803A344: .4byte gActiveBattler
|
|
_0803A348:
|
|
mov r0, r9
|
|
movs r1, 0x4
|
|
movs r2, 0x4
|
|
bl GetItemEffectParamOffset
|
|
lsls r0, 24
|
|
lsrs r4, r0, 24
|
|
cmp r4, 0
|
|
bne _0803A35C
|
|
b _0803A5F8
|
|
_0803A35C:
|
|
ldr r2, _0803A388 @ =gBattleMons
|
|
ldr r0, _0803A38C @ =gActiveBattler
|
|
ldrb r1, [r0]
|
|
movs r0, 0x58
|
|
muls r0, r1
|
|
adds r1, r0, r2
|
|
ldrh r2, [r1, 0x28]
|
|
cmp r2, 0
|
|
bne _0803A370
|
|
b _0803A5F8
|
|
_0803A370:
|
|
ldrh r3, [r1, 0x2C]
|
|
lsrs r0, r3, 2
|
|
cmp r2, r0
|
|
bcc _0803A33A
|
|
adds r0, r2, 0
|
|
subs r0, r3, r0
|
|
adds r1, r5, r4
|
|
ldrb r1, [r1]
|
|
cmp r0, r1
|
|
bgt _0803A386
|
|
b _0803A5F8
|
|
_0803A386:
|
|
b _0803A33A
|
|
.align 2, 0
|
|
_0803A388: .4byte gBattleMons
|
|
_0803A38C: .4byte gActiveBattler
|
|
_0803A390:
|
|
ldr r3, _0803A4DC @ =gActiveBattler
|
|
ldrb r0, [r3]
|
|
lsrs r0, 1
|
|
ldr r2, _0803A4E0 @ =gBattleStruct
|
|
ldr r1, [r2]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
movs r1, 0
|
|
strb r1, [r0]
|
|
ldrb r1, [r5, 0x3]
|
|
movs r6, 0x20
|
|
movs r0, 0x20
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A3D4
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r4, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r4
|
|
adds r1, 0x4C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x7
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A3D4
|
|
lsrs r1, r4, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r6
|
|
strb r0, [r1]
|
|
movs r7, 0x1
|
|
_0803A3D4:
|
|
ldrb r1, [r5, 0x3]
|
|
movs r6, 0x10
|
|
movs r0, 0x10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A40E
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r4, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r4
|
|
adds r1, 0x4C
|
|
adds r0, r1
|
|
ldr r1, [r0]
|
|
movs r0, 0x8
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803A3FE
|
|
movs r0, 0x80
|
|
ands r1, r0
|
|
cmp r1, 0
|
|
beq _0803A40E
|
|
_0803A3FE:
|
|
lsrs r1, r4, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r6
|
|
strb r0, [r1]
|
|
movs r7, 0x1
|
|
_0803A40E:
|
|
ldrb r1, [r5, 0x3]
|
|
movs r6, 0x8
|
|
movs r0, 0x8
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A440
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r4, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r4
|
|
adds r1, 0x4C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x10
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A440
|
|
lsrs r1, r4, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r6
|
|
strb r0, [r1]
|
|
movs r7, 0x1
|
|
_0803A440:
|
|
ldrb r1, [r5, 0x3]
|
|
movs r6, 0x4
|
|
movs r0, 0x4
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A472
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r4, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r4
|
|
adds r1, 0x4C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x20
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A472
|
|
lsrs r1, r4, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r6
|
|
strb r0, [r1]
|
|
movs r7, 0x1
|
|
_0803A472:
|
|
ldrb r1, [r5, 0x3]
|
|
movs r6, 0x2
|
|
movs r0, 0x2
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A4A4
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r4, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r4
|
|
adds r1, 0x4C
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x40
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A4A4
|
|
lsrs r1, r4, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r6
|
|
strb r0, [r1]
|
|
movs r7, 0x1
|
|
_0803A4A4:
|
|
ldrb r1, [r5, 0x3]
|
|
movs r4, 0x1
|
|
movs r0, 0x1
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803A4B2
|
|
b _0803A5F8
|
|
_0803A4B2:
|
|
ldr r1, _0803A4E4 @ =gBattleMons
|
|
ldrb r3, [r3]
|
|
movs r0, 0x58
|
|
muls r0, r3
|
|
adds r1, 0x50
|
|
adds r0, r1
|
|
ldr r0, [r0]
|
|
movs r1, 0x7
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803A4CA
|
|
b _0803A5F8
|
|
_0803A4CA:
|
|
lsrs r1, r3, 1
|
|
ldr r0, [r2]
|
|
adds r1, r0
|
|
adds r1, 0xC6
|
|
ldrb r0, [r1]
|
|
orrs r0, r4
|
|
strb r0, [r1]
|
|
b _0803A33A
|
|
.align 2, 0
|
|
_0803A4DC: .4byte gActiveBattler
|
|
_0803A4E0: .4byte gBattleStruct
|
|
_0803A4E4: .4byte gBattleMons
|
|
_0803A4E8:
|
|
ldr r4, _0803A5BC @ =gActiveBattler
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r3, _0803A5C0 @ =gBattleStruct
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
movs r1, 0
|
|
strb r1, [r0]
|
|
ldr r1, _0803A5C4 @ =gDisableStructs
|
|
ldrb r2, [r4]
|
|
lsls r0, r2, 3
|
|
subs r0, r2
|
|
lsls r0, 2
|
|
adds r0, r1
|
|
ldrb r0, [r0, 0x16]
|
|
cmp r0, 0
|
|
beq _0803A5F8
|
|
ldrb r1, [r5]
|
|
movs r6, 0xF
|
|
adds r0, r6, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A528
|
|
lsrs r2, 1
|
|
ldr r0, [r3]
|
|
adds r2, r0
|
|
adds r2, 0xC6
|
|
ldrb r0, [r2]
|
|
movs r1, 0x1
|
|
orrs r0, r1
|
|
strb r0, [r2]
|
|
_0803A528:
|
|
ldrb r1, [r5, 0x1]
|
|
movs r7, 0xF0
|
|
adds r0, r7, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A546
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
ldrb r1, [r0]
|
|
movs r2, 0x2
|
|
orrs r1, r2
|
|
strb r1, [r0]
|
|
_0803A546:
|
|
ldrb r1, [r5, 0x1]
|
|
adds r0, r6, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A562
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
ldrb r1, [r0]
|
|
movs r2, 0x4
|
|
orrs r1, r2
|
|
strb r1, [r0]
|
|
_0803A562:
|
|
ldrb r1, [r5, 0x2]
|
|
adds r0, r6, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A57E
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
ldrb r1, [r0]
|
|
movs r2, 0x8
|
|
orrs r1, r2
|
|
strb r1, [r0]
|
|
_0803A57E:
|
|
ldrb r1, [r5, 0x2]
|
|
adds r0, r7, 0
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
beq _0803A59A
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
ldrb r1, [r0]
|
|
movs r2, 0x20
|
|
orrs r1, r2
|
|
strb r1, [r0]
|
|
_0803A59A:
|
|
ldrb r1, [r5]
|
|
movs r0, 0x30
|
|
ands r0, r1
|
|
cmp r0, 0
|
|
bne _0803A5A6
|
|
b _0803A33A
|
|
_0803A5A6:
|
|
ldrb r0, [r4]
|
|
lsrs r0, 1
|
|
ldr r1, [r3]
|
|
adds r0, r1
|
|
adds r0, 0xC6
|
|
ldrb r1, [r0]
|
|
movs r2, 0x80
|
|
orrs r1, r2
|
|
strb r1, [r0]
|
|
b _0803A33A
|
|
.align 2, 0
|
|
_0803A5BC: .4byte gActiveBattler
|
|
_0803A5C0: .4byte gBattleStruct
|
|
_0803A5C4: .4byte gDisableStructs
|
|
_0803A5C8:
|
|
ldr r4, _0803A630 @ =gActiveBattler
|
|
ldrb r0, [r4]
|
|
bl GetBattlerSide
|
|
lsls r0, 24
|
|
lsrs r3, r0, 24
|
|
ldr r2, _0803A634 @ =gDisableStructs
|
|
ldrb r1, [r4]
|
|
lsls r0, r1, 3
|
|
subs r0, r1
|
|
lsls r0, 2
|
|
adds r0, r2
|
|
ldrb r0, [r0, 0x16]
|
|
cmp r0, 0
|
|
beq _0803A5F8
|
|
ldr r0, _0803A638 @ =gSideTimers
|
|
lsls r1, r3, 1
|
|
adds r1, r3
|
|
lsls r1, 2
|
|
adds r1, r0
|
|
ldrb r0, [r1, 0x4]
|
|
cmp r0, 0
|
|
bne _0803A5F8
|
|
b _0803A33A
|
|
_0803A5F8:
|
|
cmp r7, 0
|
|
beq _0803A644
|
|
_0803A5FC:
|
|
movs r0, 0x1
|
|
movs r1, 0x1
|
|
movs r2, 0
|
|
bl EmitTwoReturnValues
|
|
ldr r0, _0803A630 @ =gActiveBattler
|
|
ldrb r0, [r0]
|
|
lsrs r0, 1
|
|
ldr r1, _0803A63C @ =gBattleStruct
|
|
ldr r1, [r1]
|
|
lsls r0, 1
|
|
adds r0, r1
|
|
adds r0, 0xC0
|
|
mov r1, r9
|
|
strb r1, [r0]
|
|
ldr r0, _0803A640 @ =gBattleResources
|
|
ldr r0, [r0]
|
|
ldr r0, [r0, 0x18]
|
|
adds r0, 0x24
|
|
ldr r2, [sp]
|
|
adds r0, r2
|
|
movs r1, 0
|
|
strh r1, [r0]
|
|
adds r0, r7, 0
|
|
b _0803A652
|
|
.align 2, 0
|
|
_0803A630: .4byte gActiveBattler
|
|
_0803A634: .4byte gDisableStructs
|
|
_0803A638: .4byte gSideTimers
|
|
_0803A63C: .4byte gBattleStruct
|
|
_0803A640: .4byte gBattleResources
|
|
_0803A644:
|
|
movs r0, 0x1
|
|
add r8, r0
|
|
mov r1, r8
|
|
cmp r1, 0x3
|
|
bgt _0803A650
|
|
b _0803A254
|
|
_0803A650:
|
|
movs r0, 0
|
|
_0803A652:
|
|
add sp, 0x4
|
|
pop {r3-r5}
|
|
mov r8, r3
|
|
mov r9, r4
|
|
mov r10, r5
|
|
pop {r4-r7}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end sub_803A1F4
|
|
|
|
.align 2, 0 @ Don't pad with nop.
|