pokefirered/asm/calculate_base_damage.s
2018-10-03 21:30:13 -04:00

1124 lines
18 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_803ECEC
sub_803ECEC: @ 803ECEC
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x2C
adds r6, r0, 0
str r1, [sp, 0x4]
str r2, [sp, 0x8]
ldr r0, [sp, 0x4C]
ldr r1, [sp, 0x50]
ldr r2, [sp, 0x54]
ldr r4, [sp, 0x58]
lsls r3, 16
lsrs r3, 16
str r3, [sp, 0xC]
lsls r0, 16
lsrs r3, r0, 16
lsls r1, 24
lsrs r7, r1, 24
lsls r2, 24
lsrs r2, 24
str r2, [sp, 0x10]
lsls r4, 24
lsrs r4, 24
movs r5, 0
cmp r3, 0
bne _0803ED40
ldr r2, _0803ED38 @ =gUnknown_2024020
ldr r1, _0803ED3C @ =gBattleMoves
ldr r3, [sp, 0x8]
lsls r0, r3, 1
adds r0, r3
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x1]
strh r0, [r2]
b _0803ED44
.align 2, 0
_0803ED38: .4byte gUnknown_2024020
_0803ED3C: .4byte gBattleMoves
_0803ED40:
ldr r0, _0803ED5C @ =gUnknown_2024020
strh r3, [r0]
_0803ED44:
cmp r7, 0
bne _0803ED64
ldr r1, _0803ED60 @ =gBattleMoves
ldr r7, [sp, 0x8]
lsls r0, r7, 1
adds r0, r7
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x2]
mov r9, r0
b _0803ED6E
.align 2, 0
_0803ED5C: .4byte gUnknown_2024020
_0803ED60: .4byte gBattleMoves
_0803ED64:
movs r0, 0x3F
mov r9, r0
mov r1, r9
ands r1, r7
mov r9, r1
_0803ED6E:
ldrh r7, [r6, 0x2]
ldr r2, [sp, 0x4]
ldrh r2, [r2, 0x4]
str r2, [sp, 0x14]
ldrh r3, [r6, 0x8]
mov r8, r3
ldr r0, [sp, 0x4]
ldrh r0, [r0, 0xA]
str r0, [sp, 0x18]
ldrh r0, [r6, 0x2E]
cmp r0, 0xAF
bne _0803EDA0
ldr r1, _0803ED9C @ =gUnknown_2023F54
ldr r2, [sp, 0x10]
lsls r0, r2, 3
subs r0, r2
lsls r0, 2
adds r0, r1
ldrb r3, [r0, 0x7]
mov r10, r3
ldrb r0, [r0, 0x1A]
b _0803EDB6
.align 2, 0
_0803ED9C: .4byte gUnknown_2023F54
_0803EDA0:
ldrh r0, [r6, 0x2E]
bl ItemId_GetHoldEffect
lsls r0, 24
lsrs r0, 24
mov r10, r0
ldrh r0, [r6, 0x2E]
bl ItemId_GetHoldEffectParam
lsls r0, 24
lsrs r0, 24
_0803EDB6:
str r0, [sp, 0x20]
ldr r1, [sp, 0x4]
ldrh r0, [r1, 0x2E]
cmp r0, 0xAF
bne _0803EDE6
ldr r1, _0803EDD0 @ =gUnknown_2023F54
lsls r0, r4, 3
subs r0, r4
lsls r0, 2
adds r0, r1
ldrb r0, [r0, 0x7]
str r0, [sp, 0x1C]
b _0803EDFC
.align 2, 0
_0803EDD0: .4byte gUnknown_2023F54
_0803EDD4:
ldr r0, [sp, 0x20]
adds r0, 0x64
muls r0, r7
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r7, r0, 16
b _0803EF44
_0803EDE6:
ldr r2, [sp, 0x4]
ldrh r0, [r2, 0x2E]
bl ItemId_GetHoldEffect
lsls r0, 24
lsrs r0, 24
str r0, [sp, 0x1C]
ldr r3, [sp, 0x4]
ldrh r0, [r3, 0x2E]
bl ItemId_GetHoldEffectParam
_0803EDFC:
adds r0, r6, 0
adds r0, 0x20
ldrb r1, [r0]
str r0, [sp, 0x24]
cmp r1, 0x25
beq _0803EE0C
cmp r1, 0x4A
bne _0803EE10
_0803EE0C:
lsls r0, r7, 17
lsrs r7, r0, 16
_0803EE10:
ldr r0, _0803EF28 @ =gBattleTypeFlags
ldr r0, [r0]
ldr r1, _0803EF2C @ =0x00000802
ands r0, r1
cmp r0, 0
bne _0803EEE8
movs r0, 0x82
lsls r0, 4
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _0803EE44
ldr r0, [sp, 0x10]
bl GetBankSide
lsls r0, 24
cmp r0, 0
bne _0803EE44
movs r0, 0x6E
muls r0, r7
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r7, r0, 16
_0803EE44:
ldr r0, _0803EF28 @ =gBattleTypeFlags
ldr r0, [r0]
ldr r1, _0803EF2C @ =0x00000802
ands r0, r1
cmp r0, 0
bne _0803EEE8
ldr r0, _0803EF30 @ =0x00000824
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _0803EE7A
adds r0, r4, 0
bl GetBankSide
lsls r0, 24
cmp r0, 0
bne _0803EE7A
movs r0, 0x6E
ldr r1, [sp, 0x14]
muls r0, r1
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x14]
_0803EE7A:
ldr r0, _0803EF28 @ =gBattleTypeFlags
ldr r0, [r0]
ldr r1, _0803EF2C @ =0x00000802
ands r0, r1
cmp r0, 0
bne _0803EEE8
ldr r0, _0803EF34 @ =0x00000826
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _0803EEB2
ldr r0, [sp, 0x10]
bl GetBankSide
lsls r0, 24
cmp r0, 0
bne _0803EEB2
movs r0, 0x6E
mov r2, r8
muls r2, r0
adds r0, r2, 0
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
mov r8, r0
_0803EEB2:
ldr r0, _0803EF28 @ =gBattleTypeFlags
ldr r0, [r0]
ldr r1, _0803EF2C @ =0x00000802
ands r0, r1
cmp r0, 0
bne _0803EEE8
ldr r0, _0803EF34 @ =0x00000826
bl FlagGet
lsls r0, 24
cmp r0, 0
beq _0803EEE8
adds r0, r4, 0
bl GetBankSide
lsls r0, 24
cmp r0, 0
bne _0803EEE8
movs r0, 0x6E
ldr r3, [sp, 0x18]
muls r0, r3
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x18]
_0803EEE8:
movs r2, 0
ldr r4, _0803EF38 @ =gUnknown_825DECC
ldr r0, [sp, 0x4]
adds r0, 0x20
str r0, [sp, 0x28]
adds r3, r4, 0
_0803EEF4:
lsls r1, r2, 1
ldrb r0, [r3]
cmp r10, r0
bne _0803EF3C
adds r0, r4, 0x1
adds r0, r1, r0
ldrb r0, [r0]
cmp r9, r0
bne _0803EF3C
mov r1, r9
cmp r1, 0x8
bhi _0803EF0E
b _0803EDD4
_0803EF0E:
ldr r0, [sp, 0x20]
adds r0, 0x64
mov r2, r8
muls r2, r0
adds r0, r2, 0
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
mov r8, r0
b _0803EF44
.align 2, 0
_0803EF28: .4byte gBattleTypeFlags
_0803EF2C: .4byte 0x00000802
_0803EF30: .4byte 0x00000824
_0803EF34: .4byte 0x00000826
_0803EF38: .4byte gUnknown_825DECC
_0803EF3C:
adds r3, 0x2
adds r2, 0x1
cmp r2, 0x10
bls _0803EEF4
_0803EF44:
mov r3, r10
cmp r3, 0x1D
bne _0803EF58
movs r0, 0x96
muls r0, r7
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r7, r0, 16
_0803EF58:
mov r0, r10
cmp r0, 0x22
bne _0803EF90
ldr r0, _0803F244 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x80
lsls r1, 1
ands r0, r1
cmp r0, 0
bne _0803EF90
ldr r1, _0803F248 @ =0xfffffe69
adds r0, r1, 0
ldrh r2, [r6]
adds r0, r2
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bhi _0803EF90
movs r0, 0x96
mov r3, r8
muls r3, r0
adds r0, r3, 0
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
mov r8, r0
_0803EF90:
ldr r0, [sp, 0x1C]
cmp r0, 0x22
bne _0803EFC8
ldr r0, _0803F244 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x80
lsls r1, 1
ands r0, r1
cmp r0, 0
bne _0803EFC8
ldr r1, _0803F248 @ =0xfffffe69
adds r0, r1, 0
ldr r2, [sp, 0x4]
ldrh r2, [r2]
adds r0, r2
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bhi _0803EFC8
movs r0, 0x96
ldr r3, [sp, 0x18]
muls r0, r3
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x18]
_0803EFC8:
mov r0, r10
cmp r0, 0x23
bne _0803EFDE
ldrh r1, [r6]
ldr r0, _0803F24C @ =0x00000175
cmp r1, r0
bne _0803EFDE
mov r1, r8
lsls r0, r1, 17
lsrs r0, 16
mov r8, r0
_0803EFDE:
ldr r2, [sp, 0x1C]
cmp r2, 0x24
bne _0803EFF6
ldr r3, [sp, 0x4]
ldrh r1, [r3]
ldr r0, _0803F24C @ =0x00000175
cmp r1, r0
bne _0803EFF6
ldr r1, [sp, 0x18]
lsls r0, r1, 17
lsrs r0, 16
str r0, [sp, 0x18]
_0803EFF6:
mov r2, r10
cmp r2, 0x2D
bne _0803F00A
ldrh r0, [r6]
cmp r0, 0x19
bne _0803F00A
mov r3, r8
lsls r0, r3, 17
lsrs r0, 16
mov r8, r0
_0803F00A:
ldr r0, [sp, 0x1C]
cmp r0, 0x40
bne _0803F020
ldr r1, [sp, 0x4]
ldrh r0, [r1]
cmp r0, 0x84
bne _0803F020
ldr r2, [sp, 0x14]
lsls r0, r2, 17
lsrs r0, 16
str r0, [sp, 0x14]
_0803F020:
mov r3, r10
cmp r3, 0x41
bne _0803F036
ldrh r0, [r6]
subs r0, 0x68
lsls r0, 16
lsrs r0, 16
cmp r0, 0x1
bhi _0803F036
lsls r0, r7, 17
lsrs r7, r0, 16
_0803F036:
ldr r1, [sp, 0x28]
ldrb r0, [r1]
cmp r0, 0x2F
bne _0803F04E
mov r2, r9
cmp r2, 0xA
beq _0803F048
cmp r2, 0xF
bne _0803F04E
_0803F048:
mov r3, r8
lsrs r3, 1
mov r8, r3
_0803F04E:
ldr r0, [sp, 0x24]
ldrb r4, [r0]
cmp r4, 0x37
bne _0803F064
movs r0, 0x96
muls r0, r7
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r7, r0, 16
_0803F064:
cmp r4, 0x39
bne _0803F092
movs r0, 0
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0x3A
movs r3, 0
bl sub_8019F18
lsls r0, 24
cmp r0, 0
beq _0803F092
movs r0, 0x96
mov r1, r8
muls r1, r0
adds r0, r1, 0
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
mov r8, r0
_0803F092:
ldr r2, [sp, 0x24]
ldrb r0, [r2]
cmp r0, 0x3A
bne _0803F0C4
movs r0, 0
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0x39
movs r3, 0
bl sub_8019F18
lsls r0, 24
cmp r0, 0
beq _0803F0C4
movs r0, 0x96
mov r3, r8
muls r3, r0
adds r0, r3, 0
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
mov r8, r0
_0803F0C4:
ldr r1, [sp, 0x24]
ldrb r0, [r1]
cmp r0, 0x3E
bne _0803F0E0
ldr r0, [r6, 0x4C]
cmp r0, 0
beq _0803F0E0
movs r0, 0x96
muls r0, r7
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r7, r0, 16
_0803F0E0:
ldr r2, [sp, 0x28]
ldrb r0, [r2]
cmp r0, 0x3F
bne _0803F102
ldr r3, [sp, 0x4]
ldr r0, [r3, 0x4C]
cmp r0, 0
beq _0803F102
movs r0, 0x96
ldr r1, [sp, 0x14]
muls r0, r1
movs r1, 0x64
bl __divsi3
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0x14]
_0803F102:
mov r2, r9
cmp r2, 0xD
bne _0803F126
movs r0, 0
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0
movs r3, 0xFD
bl sub_8019F18
lsls r0, 24
cmp r0, 0
beq _0803F126
ldr r1, _0803F250 @ =gUnknown_2024020
ldrh r0, [r1]
lsrs r0, 1
strh r0, [r1]
_0803F126:
mov r3, r9
cmp r3, 0xA
bne _0803F14A
movs r0, 0
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0
movs r3, 0xFE
bl sub_8019F18
lsls r0, 24
cmp r0, 0
beq _0803F14A
ldr r1, _0803F250 @ =gUnknown_2024020
ldrh r0, [r1]
lsrs r0, 1
strh r0, [r1]
_0803F14A:
mov r0, r9
cmp r0, 0xC
bne _0803F17A
ldr r1, [sp, 0x24]
ldrb r0, [r1]
cmp r0, 0x41
bne _0803F17A
ldrh r0, [r6, 0x2C]
movs r1, 0x3
bl __udivsi3
ldrh r1, [r6, 0x28]
lsls r0, 16
lsrs r0, 16
cmp r1, r0
bhi _0803F17A
ldr r4, _0803F250 @ =gUnknown_2024020
ldrh r1, [r4]
movs r0, 0x96
muls r0, r1
movs r1, 0x64
bl __divsi3
strh r0, [r4]
_0803F17A:
mov r2, r9
cmp r2, 0xA
bne _0803F1AA
ldr r3, [sp, 0x24]
ldrb r0, [r3]
cmp r0, 0x42
bne _0803F1AA
ldrh r0, [r6, 0x2C]
movs r1, 0x3
bl __udivsi3
ldrh r1, [r6, 0x28]
lsls r0, 16
lsrs r0, 16
cmp r1, r0
bhi _0803F1AA
ldr r4, _0803F250 @ =gUnknown_2024020
ldrh r1, [r4]
movs r0, 0x96
muls r0, r1
movs r1, 0x64
bl __divsi3
strh r0, [r4]
_0803F1AA:
mov r0, r9
cmp r0, 0xB
bne _0803F1DA
ldr r1, [sp, 0x24]
ldrb r0, [r1]
cmp r0, 0x43
bne _0803F1DA
ldrh r0, [r6, 0x2C]
movs r1, 0x3
bl __udivsi3
ldrh r1, [r6, 0x28]
lsls r0, 16
lsrs r0, 16
cmp r1, r0
bhi _0803F1DA
ldr r4, _0803F250 @ =gUnknown_2024020
ldrh r1, [r4]
movs r0, 0x96
muls r0, r1
movs r1, 0x64
bl __divsi3
strh r0, [r4]
_0803F1DA:
mov r2, r9
cmp r2, 0x6
bne _0803F20A
ldr r3, [sp, 0x24]
ldrb r0, [r3]
cmp r0, 0x44
bne _0803F20A
ldrh r0, [r6, 0x2C]
movs r1, 0x3
bl __udivsi3
ldrh r1, [r6, 0x28]
lsls r0, 16
lsrs r0, 16
cmp r1, r0
bhi _0803F20A
ldr r4, _0803F250 @ =gUnknown_2024020
ldrh r1, [r4]
movs r0, 0x96
muls r0, r1
movs r1, 0x64
bl __divsi3
strh r0, [r4]
_0803F20A:
ldr r2, _0803F254 @ =gBattleMoves
ldr r0, _0803F258 @ =gCurrentMove
ldrh r1, [r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
adds r0, r2
ldrb r0, [r0]
cmp r0, 0x7
bne _0803F224
ldr r0, [sp, 0x14]
lsrs r0, 1
str r0, [sp, 0x14]
_0803F224:
mov r1, r9
cmp r1, 0x8
bls _0803F22C
b _0803F38A
_0803F22C:
ldr r0, _0803F25C @ =gCritMultiplier
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0x2
bne _0803F268
movs r0, 0x19
ldrsb r0, [r6, r0]
cmp r0, 0x6
ble _0803F264
ldr r2, _0803F260 @ =gUnknown_825DEAD
b _0803F26E
.align 2, 0
_0803F244: .4byte gBattleTypeFlags
_0803F248: .4byte 0xfffffe69
_0803F24C: .4byte 0x00000175
_0803F250: .4byte gUnknown_2024020
_0803F254: .4byte gBattleMoves
_0803F258: .4byte gCurrentMove
_0803F25C: .4byte gCritMultiplier
_0803F260: .4byte gUnknown_825DEAD
_0803F264:
adds r5, r7, 0
b _0803F286
_0803F268:
ldr r2, _0803F2B8 @ =gUnknown_825DEAD
movs r0, 0x19
ldrsb r0, [r6, r0]
_0803F26E:
lsls r0, 1
adds r1, r0, r2
ldrb r1, [r1]
adds r5, r7, 0
muls r5, r1
adds r2, 0x1
adds r0, r2
ldrb r1, [r0]
adds r0, r5, 0
bl __divsi3
adds r5, r0, 0
_0803F286:
ldr r0, _0803F2BC @ =gUnknown_2024020
ldrh r0, [r0]
muls r5, r0
adds r0, r6, 0
adds r0, 0x2A
ldrb r0, [r0]
lsls r0, 1
movs r1, 0x5
bl __divsi3
adds r0, 0x2
muls r5, r0
ldrb r0, [r4]
cmp r0, 0x2
bne _0803F2C4
ldr r2, [sp, 0x4]
movs r0, 0x1A
ldrsb r0, [r2, r0]
cmp r0, 0x5
bgt _0803F2C0
ldr r2, _0803F2B8 @ =gUnknown_825DEAD
ldr r3, [sp, 0x4]
movs r0, 0x1A
ldrsb r0, [r3, r0]
b _0803F2CC
.align 2, 0
_0803F2B8: .4byte gUnknown_825DEAD
_0803F2BC: .4byte gUnknown_2024020
_0803F2C0:
ldr r3, [sp, 0x14]
b _0803F2E6
_0803F2C4:
ldr r2, _0803F344 @ =gUnknown_825DEAD
ldr r1, [sp, 0x4]
movs r0, 0x1A
ldrsb r0, [r1, r0]
_0803F2CC:
lsls r0, 1
adds r1, r0, r2
ldrb r1, [r1]
ldr r7, [sp, 0x14]
adds r3, r7, 0
muls r3, r1
adds r2, 0x1
adds r0, r2
ldrb r1, [r0]
adds r0, r3, 0
bl __divsi3
adds r3, r0, 0
_0803F2E6:
adds r0, r5, 0
adds r1, r3, 0
bl __divsi3
adds r5, r0, 0
movs r1, 0x32
bl __divsi3
adds r5, r0, 0
ldr r0, [r6, 0x4C]
movs r1, 0x10
ands r0, r1
cmp r0, 0
beq _0803F310
ldr r1, [sp, 0x24]
ldrb r0, [r1]
cmp r0, 0x3E
beq _0803F310
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F310:
movs r0, 0x1
ldr r2, [sp, 0xC]
ands r0, r2
cmp r0, 0
beq _0803F352
ldrb r1, [r4]
cmp r1, 0x1
bne _0803F352
ldr r0, _0803F348 @ =gBattleTypeFlags
ldr r0, [r0]
ands r0, r1
cmp r0, 0
beq _0803F34C
movs r0, 0x2
bl sub_803F5B4
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _0803F34C
adds r0, r5, 0
movs r1, 0x3
bl __divsi3
lsls r5, r0, 1
b _0803F352
.align 2, 0
_0803F344: .4byte gUnknown_825DEAD
_0803F348: .4byte gBattleTypeFlags
_0803F34C:
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F352:
ldr r0, _0803F3B0 @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x1
ands r0, r1
cmp r0, 0
beq _0803F384
ldr r0, _0803F3B4 @ =gBattleMoves
ldr r3, [sp, 0x8]
lsls r1, r3, 1
adds r1, r3
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x6]
cmp r0, 0x8
bne _0803F384
movs r0, 0x2
bl sub_803F5B4
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _0803F384
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F384:
cmp r5, 0
bne _0803F38A
movs r5, 0x1
_0803F38A:
mov r7, r9
cmp r7, 0x9
bne _0803F392
movs r5, 0
_0803F392:
mov r0, r9
cmp r0, 0x9
bhi _0803F39A
b _0803F59C
_0803F39A:
ldr r0, _0803F3B8 @ =gCritMultiplier
ldrb r1, [r0]
adds r4, r0, 0
cmp r1, 0x2
bne _0803F3C4
movs r0, 0x1C
ldrsb r0, [r6, r0]
cmp r0, 0x6
ble _0803F3C0
ldr r2, _0803F3BC @ =gUnknown_825DEAD
b _0803F3CA
.align 2, 0
_0803F3B0: .4byte gBattleTypeFlags
_0803F3B4: .4byte gBattleMoves
_0803F3B8: .4byte gCritMultiplier
_0803F3BC: .4byte gUnknown_825DEAD
_0803F3C0:
mov r5, r8
b _0803F3E2
_0803F3C4:
ldr r2, _0803F410 @ =gUnknown_825DEAD
movs r0, 0x1C
ldrsb r0, [r6, r0]
_0803F3CA:
lsls r0, 1
adds r1, r0, r2
ldrb r1, [r1]
mov r5, r8
muls r5, r1
adds r2, 0x1
adds r0, r2
ldrb r1, [r0]
adds r0, r5, 0
bl __divsi3
adds r5, r0, 0
_0803F3E2:
ldr r0, _0803F414 @ =gUnknown_2024020
ldrh r0, [r0]
muls r5, r0
adds r0, r6, 0
adds r0, 0x2A
ldrb r0, [r0]
lsls r0, 1
movs r1, 0x5
bl __divsi3
adds r0, 0x2
muls r5, r0
ldrb r0, [r4]
cmp r0, 0x2
bne _0803F41C
ldr r1, [sp, 0x4]
movs r0, 0x1D
ldrsb r0, [r1, r0]
cmp r0, 0x5
bgt _0803F418
ldr r2, _0803F410 @ =gUnknown_825DEAD
b _0803F424
.align 2, 0
_0803F410: .4byte gUnknown_825DEAD
_0803F414: .4byte gUnknown_2024020
_0803F418:
ldr r3, [sp, 0x18]
b _0803F43E
_0803F41C:
ldr r2, _0803F484 @ =gUnknown_825DEAD
ldr r7, [sp, 0x4]
movs r0, 0x1D
ldrsb r0, [r7, r0]
_0803F424:
lsls r0, 1
adds r1, r0, r2
ldrb r1, [r1]
ldr r6, [sp, 0x18]
adds r3, r6, 0
muls r3, r1
adds r2, 0x1
adds r0, r2
ldrb r1, [r0]
adds r0, r3, 0
bl __divsi3
adds r3, r0, 0
_0803F43E:
adds r0, r5, 0
adds r1, r3, 0
bl __divsi3
adds r5, r0, 0
movs r1, 0x32
bl __divsi3
adds r5, r0, 0
movs r0, 0x2
ldr r7, [sp, 0xC]
ands r0, r7
cmp r0, 0
beq _0803F492
ldrb r1, [r4]
cmp r1, 0x1
bne _0803F492
ldr r0, _0803F488 @ =gBattleTypeFlags
ldr r0, [r0]
ands r0, r1
cmp r0, 0
beq _0803F48C
movs r0, 0x2
bl sub_803F5B4
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _0803F48C
adds r0, r5, 0
movs r1, 0x3
bl __divsi3
lsls r5, r0, 1
b _0803F492
.align 2, 0
_0803F484: .4byte gUnknown_825DEAD
_0803F488: .4byte gBattleTypeFlags
_0803F48C:
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F492:
ldr r0, _0803F50C @ =gBattleTypeFlags
ldr r0, [r0]
movs r1, 0x1
ands r0, r1
cmp r0, 0
beq _0803F4C4
ldr r0, _0803F510 @ =gBattleMoves
ldr r2, [sp, 0x8]
lsls r1, r2, 1
adds r1, r2
lsls r1, 2
adds r1, r0
ldrb r0, [r1, 0x6]
cmp r0, 0x8
bne _0803F4C4
movs r0, 0x2
bl sub_803F5B4
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bne _0803F4C4
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F4C4:
movs r0, 0
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0xD
movs r3, 0
bl sub_8019F18
lsls r0, 24
lsrs r0, 24
cmp r0, 0
bne _0803F574
str r0, [sp]
movs r0, 0xE
movs r1, 0
movs r2, 0x4D
movs r3, 0
bl sub_8019F18
lsls r0, 24
cmp r0, 0
bne _0803F574
ldr r2, _0803F514 @ =gBattleWeather
ldrh r1, [r2]
movs r0, 0x1
ands r0, r1
adds r4, r2, 0
cmp r0, 0
beq _0803F52C
mov r3, r9
cmp r3, 0xA
beq _0803F518
cmp r3, 0xB
beq _0803F520
b _0803F52C
.align 2, 0
_0803F50C: .4byte gBattleTypeFlags
_0803F510: .4byte gBattleMoves
_0803F514: .4byte gBattleWeather
_0803F518:
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
b _0803F52C
_0803F520:
lsls r0, r5, 4
subs r0, r5
movs r1, 0xA
bl __divsi3
adds r5, r0, 0
_0803F52C:
ldrh r1, [r4]
movs r0, 0x9F
ands r0, r1
cmp r0, 0
beq _0803F544
ldr r0, _0803F55C @ =gCurrentMove
ldrh r0, [r0]
cmp r0, 0x4C
bne _0803F544
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F544:
ldrh r1, [r4]
movs r0, 0x60
ands r0, r1
cmp r0, 0
beq _0803F574
mov r6, r9
cmp r6, 0xA
beq _0803F560
cmp r6, 0xB
beq _0803F56E
b _0803F574
.align 2, 0
_0803F55C: .4byte gCurrentMove
_0803F560:
lsls r0, r5, 4
subs r0, r5
movs r1, 0xA
bl __divsi3
adds r5, r0, 0
b _0803F574
_0803F56E:
lsrs r0, r5, 31
adds r0, r5, r0
asrs r5, r0, 1
_0803F574:
ldr r0, _0803F5B0 @ =gBattleResources
ldr r0, [r0]
ldr r0, [r0, 0x4]
ldr r7, [sp, 0x10]
lsls r1, r7, 2
adds r0, r1
ldr r0, [r0]
movs r1, 0x1
ands r0, r1
cmp r0, 0
beq _0803F59C
mov r0, r9
cmp r0, 0xA
bne _0803F59C
lsls r0, r5, 4
subs r0, r5
movs r1, 0xA
bl __divsi3
adds r5, r0, 0
_0803F59C:
adds r0, r5, 0x2
add sp, 0x2C
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803F5B0: .4byte gBattleResources
thumb_func_end sub_803ECEC
.align 2, 0 @ Don't pad with nop.