summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/calculate_base_damage.s1165
-rw-r--r--ld_script.txt2
-rw-r--r--src/calculate_base_damage.c1482
3 files changed, 1483 insertions, 1166 deletions
diff --git a/asm/calculate_base_damage.s b/asm/calculate_base_damage.s
deleted file mode 100644
index 54f53f1a2..000000000
--- a/asm/calculate_base_damage.s
+++ /dev/null
@@ -1,1165 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CalculateBaseDamage
-CalculateBaseDamage: @ 803BA2C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- adds r7, 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 r6, 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 _0803BA80
- ldr r2, _0803BA78 @ =gBattleMovePower
- ldr r1, _0803BA7C @ =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 _0803BA84
- .align 2, 0
-_0803BA78: .4byte gBattleMovePower
-_0803BA7C: .4byte gBattleMoves
-_0803BA80:
- ldr r0, _0803BA9C @ =gBattleMovePower
- strh r3, [r0]
-_0803BA84:
- cmp r6, 0
- bne _0803BAA4
- ldr r1, _0803BAA0 @ =gBattleMoves
- ldr r6, [sp, 0x8]
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- mov r9, r0
- b _0803BAAE
- .align 2, 0
-_0803BA9C: .4byte gBattleMovePower
-_0803BAA0: .4byte gBattleMoves
-_0803BAA4:
- movs r0, 0x3F
- mov r9, r0
- mov r1, r9
- ands r1, r6
- mov r9, r1
-_0803BAAE:
- ldrh r6, [r7, 0x2]
- ldr r2, [sp, 0x4]
- ldrh r2, [r2, 0x4]
- str r2, [sp, 0x14]
- ldrh r3, [r7, 0x8]
- mov r8, r3
- ldr r0, [sp, 0x4]
- ldrh r0, [r0, 0xA]
- str r0, [sp, 0x18]
- ldrh r0, [r7, 0x2E]
- cmp r0, 0xAF
- bne _0803BAE0
- ldr r1, _0803BADC @ =gEnigmaBerries
- 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 _0803BAF6
- .align 2, 0
-_0803BADC: .4byte gEnigmaBerries
-_0803BAE0:
- ldrh r0, [r7, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldrh r0, [r7, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r0, 24
-_0803BAF6:
- str r0, [sp, 0x20]
- ldr r1, [sp, 0x4]
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0803BB26
- ldr r1, _0803BB10 @ =gEnigmaBerries
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x7]
- str r0, [sp, 0x1C]
- b _0803BB3C
- .align 2, 0
-_0803BB10: .4byte gEnigmaBerries
-_0803BB14:
- ldr r0, [sp, 0x20]
- adds r0, 0x64
- muls r0, r6
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
- b _0803BCDC
-_0803BB26:
- 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
-_0803BB3C:
- adds r0, r7, 0
- adds r0, 0x20
- ldrb r1, [r0]
- str r0, [sp, 0x24]
- cmp r1, 0x25
- beq _0803BB4C
- cmp r1, 0x4A
- bne _0803BB50
-_0803BB4C:
- lsls r0, r6, 17
- lsrs r6, r0, 16
-_0803BB50:
- ldr r0, _0803BCB8 @ =gUnknown_020239F8
- ldrh r1, [r0]
- ldr r0, _0803BCBC @ =0x00000902
- ands r0, r1
- cmp r0, 0
- beq _0803BB5E
- b _0803BC78
-_0803BB5E:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803BB98
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0803BB98
- ldr r0, _0803BCC4 @ =0x00000807
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0803BB98
- ldr r0, [sp, 0x10]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _0803BB98
- movs r0, 0x6E
- muls r0, r6
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
-_0803BB98:
- ldr r0, _0803BCB8 @ =gUnknown_020239F8
- ldrh r1, [r0]
- ldr r0, _0803BCBC @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0803BC78
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803BBE2
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0803BBE2
- ldr r0, _0803BCC8 @ =0x0000080b
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0803BBE2
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _0803BBE2
- 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]
-_0803BBE2:
- ldr r0, _0803BCB8 @ =gUnknown_020239F8
- ldrh r1, [r0]
- ldr r0, _0803BCBC @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0803BC78
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803BC2E
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0803BC2E
- ldr r0, _0803BCCC @ =0x0000080d
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0803BC2E
- ldr r0, [sp, 0x10]
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _0803BC2E
- 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
-_0803BC2E:
- ldr r0, _0803BCB8 @ =gUnknown_020239F8
- ldrh r1, [r0]
- ldr r0, _0803BCBC @ =0x00000902
- ands r0, r1
- cmp r0, 0
- bne _0803BC78
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0803BC78
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 3
- cmp r1, r0
- beq _0803BC78
- ldr r0, _0803BCCC @ =0x0000080d
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0803BC78
- adds r0, r4, 0
- bl battle_side_get_owner
- lsls r0, 24
- cmp r0, 0
- bne _0803BC78
- 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]
-_0803BC78:
- movs r2, 0
- ldr r4, _0803BCD0 @ =gHoldEffectToType
- ldr r0, [sp, 0x4]
- adds r0, 0x20
- str r0, [sp, 0x28]
- adds r3, r4, 0
-_0803BC84:
- lsls r1, r2, 1
- ldrb r0, [r3]
- cmp r10, r0
- bne _0803BCD4
- adds r0, r4, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r9, r0
- bne _0803BCD4
- mov r1, r9
- cmp r1, 0x8
- bhi _0803BC9E
- b _0803BB14
-_0803BC9E:
- 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 _0803BCDC
- .align 2, 0
-_0803BCB8: .4byte gUnknown_020239F8
-_0803BCBC: .4byte 0x00000902
-_0803BCC0: .4byte gTrainerBattleOpponent
-_0803BCC4: .4byte 0x00000807
-_0803BCC8: .4byte 0x0000080b
-_0803BCCC: .4byte 0x0000080d
-_0803BCD0: .4byte gHoldEffectToType
-_0803BCD4:
- adds r3, 0x2
- adds r2, 0x1
- cmp r2, 0x10
- bls _0803BC84
-_0803BCDC:
- mov r3, r10
- cmp r3, 0x1D
- bne _0803BCF0
- movs r0, 0x96
- muls r0, r6
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
-_0803BCF0:
- mov r0, r10
- cmp r0, 0x22
- bne _0803BD28
- ldr r0, _0803BFDC @ =gUnknown_020239F8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- bne _0803BD28
- ldr r1, _0803BFE0 @ =0xfffffe69
- adds r0, r1, 0
- ldrh r2, [r7]
- adds r0, r2
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0803BD28
- 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
-_0803BD28:
- ldr r0, [sp, 0x1C]
- cmp r0, 0x22
- bne _0803BD60
- ldr r0, _0803BFDC @ =gUnknown_020239F8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- bne _0803BD60
- ldr r1, _0803BFE0 @ =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 _0803BD60
- 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]
-_0803BD60:
- mov r0, r10
- cmp r0, 0x23
- bne _0803BD76
- ldrh r1, [r7]
- ldr r0, _0803BFE4 @ =0x00000175
- cmp r1, r0
- bne _0803BD76
- mov r1, r8
- lsls r0, r1, 17
- lsrs r0, 16
- mov r8, r0
-_0803BD76:
- ldr r2, [sp, 0x1C]
- cmp r2, 0x24
- bne _0803BD8E
- ldr r3, [sp, 0x4]
- ldrh r1, [r3]
- ldr r0, _0803BFE4 @ =0x00000175
- cmp r1, r0
- bne _0803BD8E
- ldr r1, [sp, 0x18]
- lsls r0, r1, 17
- lsrs r0, 16
- str r0, [sp, 0x18]
-_0803BD8E:
- mov r2, r10
- cmp r2, 0x2D
- bne _0803BDA2
- ldrh r0, [r7]
- cmp r0, 0x19
- bne _0803BDA2
- mov r3, r8
- lsls r0, r3, 17
- lsrs r0, 16
- mov r8, r0
-_0803BDA2:
- ldr r0, [sp, 0x1C]
- cmp r0, 0x40
- bne _0803BDB8
- ldr r1, [sp, 0x4]
- ldrh r0, [r1]
- cmp r0, 0x84
- bne _0803BDB8
- ldr r2, [sp, 0x14]
- lsls r0, r2, 17
- lsrs r0, 16
- str r0, [sp, 0x14]
-_0803BDB8:
- mov r3, r10
- cmp r3, 0x41
- bne _0803BDCE
- ldrh r0, [r7]
- subs r0, 0x68
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0803BDCE
- lsls r0, r6, 17
- lsrs r6, r0, 16
-_0803BDCE:
- ldr r1, [sp, 0x28]
- ldrb r0, [r1]
- cmp r0, 0x2F
- bne _0803BDE6
- mov r2, r9
- cmp r2, 0xA
- beq _0803BDE0
- cmp r2, 0xF
- bne _0803BDE6
-_0803BDE0:
- mov r3, r8
- lsrs r3, 1
- mov r8, r3
-_0803BDE6:
- ldr r0, [sp, 0x24]
- ldrb r4, [r0]
- cmp r4, 0x37
- bne _0803BDFC
- movs r0, 0x96
- muls r0, r6
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
-_0803BDFC:
- cmp r4, 0x39
- bne _0803BE2A
- movs r0, 0
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0x3A
- movs r3, 0
- bl sub_8018324
- lsls r0, 24
- cmp r0, 0
- beq _0803BE2A
- 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
-_0803BE2A:
- ldr r2, [sp, 0x24]
- ldrb r0, [r2]
- cmp r0, 0x3A
- bne _0803BE5C
- movs r0, 0
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0x39
- movs r3, 0
- bl sub_8018324
- lsls r0, 24
- cmp r0, 0
- beq _0803BE5C
- 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
-_0803BE5C:
- ldr r1, [sp, 0x24]
- ldrb r0, [r1]
- cmp r0, 0x3E
- bne _0803BE78
- ldr r0, [r7, 0x4C]
- cmp r0, 0
- beq _0803BE78
- movs r0, 0x96
- muls r0, r6
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r6, r0, 16
-_0803BE78:
- ldr r2, [sp, 0x28]
- ldrb r0, [r2]
- cmp r0, 0x3F
- bne _0803BE9A
- ldr r3, [sp, 0x4]
- ldr r0, [r3, 0x4C]
- cmp r0, 0
- beq _0803BE9A
- 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]
-_0803BE9A:
- mov r2, r9
- cmp r2, 0xD
- bne _0803BEBE
- movs r0, 0
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0
- movs r3, 0xFD
- bl sub_8018324
- lsls r0, 24
- cmp r0, 0
- beq _0803BEBE
- ldr r1, _0803BFE8 @ =gBattleMovePower
- ldrh r0, [r1]
- lsrs r0, 1
- strh r0, [r1]
-_0803BEBE:
- mov r3, r9
- cmp r3, 0xA
- bne _0803BEE2
- movs r0, 0
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0
- movs r3, 0xFE
- bl sub_8018324
- lsls r0, 24
- cmp r0, 0
- beq _0803BEE2
- ldr r1, _0803BFE8 @ =gBattleMovePower
- ldrh r0, [r1]
- lsrs r0, 1
- strh r0, [r1]
-_0803BEE2:
- mov r0, r9
- cmp r0, 0xC
- bne _0803BF12
- ldr r1, [sp, 0x24]
- ldrb r0, [r1]
- cmp r0, 0x41
- bne _0803BF12
- ldrh r0, [r7, 0x2C]
- movs r1, 0x3
- bl __udivsi3
- ldrh r1, [r7, 0x28]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0803BF12
- ldr r4, _0803BFE8 @ =gBattleMovePower
- ldrh r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- strh r0, [r4]
-_0803BF12:
- mov r2, r9
- cmp r2, 0xA
- bne _0803BF42
- ldr r3, [sp, 0x24]
- ldrb r0, [r3]
- cmp r0, 0x42
- bne _0803BF42
- ldrh r0, [r7, 0x2C]
- movs r1, 0x3
- bl __udivsi3
- ldrh r1, [r7, 0x28]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0803BF42
- ldr r4, _0803BFE8 @ =gBattleMovePower
- ldrh r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- strh r0, [r4]
-_0803BF42:
- mov r0, r9
- cmp r0, 0xB
- bne _0803BF72
- ldr r1, [sp, 0x24]
- ldrb r0, [r1]
- cmp r0, 0x43
- bne _0803BF72
- ldrh r0, [r7, 0x2C]
- movs r1, 0x3
- bl __udivsi3
- ldrh r1, [r7, 0x28]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0803BF72
- ldr r4, _0803BFE8 @ =gBattleMovePower
- ldrh r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- strh r0, [r4]
-_0803BF72:
- mov r2, r9
- cmp r2, 0x6
- bne _0803BFA2
- ldr r3, [sp, 0x24]
- ldrb r0, [r3]
- cmp r0, 0x44
- bne _0803BFA2
- ldrh r0, [r7, 0x2C]
- movs r1, 0x3
- bl __udivsi3
- ldrh r1, [r7, 0x28]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bhi _0803BFA2
- ldr r4, _0803BFE8 @ =gBattleMovePower
- ldrh r1, [r4]
- movs r0, 0x96
- muls r0, r1
- movs r1, 0x64
- bl __divsi3
- strh r0, [r4]
-_0803BFA2:
- ldr r2, _0803BFEC @ =gBattleMoves
- ldr r0, _0803BFF0 @ =gUnknown_02024BE6
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _0803BFBC
- ldr r0, [sp, 0x14]
- lsrs r0, 1
- str r0, [sp, 0x14]
-_0803BFBC:
- mov r1, r9
- cmp r1, 0x8
- bls _0803BFC4
- b _0803C122
-_0803BFC4:
- ldr r0, _0803BFF4 @ =gCritMultiplier
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0x2
- bne _0803C000
- movs r0, 0x19
- ldrsb r0, [r7, r0]
- cmp r0, 0x6
- ble _0803BFFC
- ldr r2, _0803BFF8 @ =gStatStageRatios
- b _0803C006
- .align 2, 0
-_0803BFDC: .4byte gUnknown_020239F8
-_0803BFE0: .4byte 0xfffffe69
-_0803BFE4: .4byte 0x00000175
-_0803BFE8: .4byte gBattleMovePower
-_0803BFEC: .4byte gBattleMoves
-_0803BFF0: .4byte gUnknown_02024BE6
-_0803BFF4: .4byte gCritMultiplier
-_0803BFF8: .4byte gStatStageRatios
-_0803BFFC:
- adds r5, r6, 0
- b _0803C01E
-_0803C000:
- ldr r2, _0803C050 @ =gStatStageRatios
- movs r0, 0x19
- ldrsb r0, [r7, r0]
-_0803C006:
- lsls r0, 1
- adds r1, r0, r2
- ldrb r1, [r1]
- adds r5, r6, 0
- muls r5, r1
- adds r2, 0x1
- adds r0, r2
- ldrb r1, [r0]
- adds r0, r5, 0
- bl __divsi3
- adds r5, r0, 0
-_0803C01E:
- ldr r0, _0803C054 @ =gBattleMovePower
- ldrh r0, [r0]
- muls r5, r0
- adds r0, r7, 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 _0803C05C
- ldr r2, [sp, 0x4]
- movs r0, 0x1A
- ldrsb r0, [r2, r0]
- cmp r0, 0x5
- bgt _0803C058
- ldr r2, _0803C050 @ =gStatStageRatios
- ldr r3, [sp, 0x4]
- movs r0, 0x1A
- ldrsb r0, [r3, r0]
- b _0803C064
- .align 2, 0
-_0803C050: .4byte gStatStageRatios
-_0803C054: .4byte gBattleMovePower
-_0803C058:
- ldr r3, [sp, 0x14]
- b _0803C07E
-_0803C05C:
- ldr r2, _0803C0DC @ =gStatStageRatios
- ldr r1, [sp, 0x4]
- movs r0, 0x1A
- ldrsb r0, [r1, r0]
-_0803C064:
- lsls r0, 1
- adds r1, r0, r2
- ldrb r1, [r1]
- ldr r6, [sp, 0x14]
- 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
-_0803C07E:
- 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, [r7, 0x4C]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0803C0A8
- ldr r1, [sp, 0x24]
- ldrb r0, [r1]
- cmp r0, 0x3E
- beq _0803C0A8
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C0A8:
- movs r0, 0x1
- ldr r2, [sp, 0xC]
- ands r0, r2
- cmp r0, 0
- beq _0803C0EA
- ldrb r1, [r4]
- cmp r1, 0x1
- bne _0803C0EA
- ldr r0, _0803C0E0 @ =gUnknown_020239F8
- ldrh r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0803C0E4
- movs r0, 0x2
- bl sub_803C348
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0803C0E4
- adds r0, r5, 0
- movs r1, 0x3
- bl __divsi3
- lsls r5, r0, 1
- b _0803C0EA
- .align 2, 0
-_0803C0DC: .4byte gStatStageRatios
-_0803C0E0: .4byte gUnknown_020239F8
-_0803C0E4:
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C0EA:
- ldr r0, _0803C148 @ =gUnknown_020239F8
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0803C11C
- ldr r0, _0803C14C @ =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 _0803C11C
- movs r0, 0x2
- bl sub_803C348
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0803C11C
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C11C:
- cmp r5, 0
- bne _0803C122
- movs r5, 0x1
-_0803C122:
- mov r6, r9
- cmp r6, 0x9
- bne _0803C12A
- movs r5, 0
-_0803C12A:
- mov r0, r9
- cmp r0, 0x9
- bhi _0803C132
- b _0803C330
-_0803C132:
- ldr r0, _0803C150 @ =gCritMultiplier
- ldrb r1, [r0]
- adds r4, r0, 0
- cmp r1, 0x2
- bne _0803C15C
- movs r0, 0x1C
- ldrsb r0, [r7, r0]
- cmp r0, 0x6
- ble _0803C158
- ldr r2, _0803C154 @ =gStatStageRatios
- b _0803C162
- .align 2, 0
-_0803C148: .4byte gUnknown_020239F8
-_0803C14C: .4byte gBattleMoves
-_0803C150: .4byte gCritMultiplier
-_0803C154: .4byte gStatStageRatios
-_0803C158:
- mov r5, r8
- b _0803C17A
-_0803C15C:
- ldr r2, _0803C1A8 @ =gStatStageRatios
- movs r0, 0x1C
- ldrsb r0, [r7, r0]
-_0803C162:
- 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
-_0803C17A:
- ldr r0, _0803C1AC @ =gBattleMovePower
- ldrh r0, [r0]
- muls r5, r0
- adds r0, r7, 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 _0803C1B4
- ldr r1, [sp, 0x4]
- movs r0, 0x1D
- ldrsb r0, [r1, r0]
- cmp r0, 0x5
- bgt _0803C1B0
- ldr r2, _0803C1A8 @ =gStatStageRatios
- b _0803C1BC
- .align 2, 0
-_0803C1A8: .4byte gStatStageRatios
-_0803C1AC: .4byte gBattleMovePower
-_0803C1B0:
- ldr r3, [sp, 0x18]
- b _0803C1D6
-_0803C1B4:
- ldr r2, _0803C21C @ =gStatStageRatios
- ldr r1, [sp, 0x4]
- movs r0, 0x1D
- ldrsb r0, [r1, r0]
-_0803C1BC:
- 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
-_0803C1D6:
- 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 r1, [sp, 0xC]
- ands r0, r1
- cmp r0, 0
- beq _0803C22A
- ldrb r1, [r4]
- cmp r1, 0x1
- bne _0803C22A
- ldr r0, _0803C220 @ =gUnknown_020239F8
- ldrh r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0803C224
- movs r0, 0x2
- bl sub_803C348
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0803C224
- adds r0, r5, 0
- movs r1, 0x3
- bl __divsi3
- lsls r5, r0, 1
- b _0803C22A
- .align 2, 0
-_0803C21C: .4byte gStatStageRatios
-_0803C220: .4byte gUnknown_020239F8
-_0803C224:
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C22A:
- ldr r0, _0803C2A4 @ =gUnknown_020239F8
- ldrh r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0803C25C
- ldr r0, _0803C2A8 @ =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 _0803C25C
- movs r0, 0x2
- bl sub_803C348
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0803C25C
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C25C:
- movs r0, 0
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl sub_8018324
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0803C30C
- str r0, [sp]
- movs r0, 0xE
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl sub_8018324
- lsls r0, 24
- cmp r0, 0
- bne _0803C30C
- ldr r2, _0803C2AC @ =word_2024DB8
- ldrh r1, [r2]
- movs r0, 0x1
- ands r0, r1
- adds r4, r2, 0
- cmp r0, 0
- beq _0803C2C4
- mov r3, r9
- cmp r3, 0xA
- beq _0803C2B0
- cmp r3, 0xB
- beq _0803C2B8
- b _0803C2C4
- .align 2, 0
-_0803C2A4: .4byte gUnknown_020239F8
-_0803C2A8: .4byte gBattleMoves
-_0803C2AC: .4byte word_2024DB8
-_0803C2B0:
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
- b _0803C2C4
-_0803C2B8:
- lsls r0, r5, 4
- subs r0, r5
- movs r1, 0xA
- bl __divsi3
- adds r5, r0, 0
-_0803C2C4:
- ldrh r1, [r4]
- movs r0, 0x9F
- ands r0, r1
- cmp r0, 0
- beq _0803C2DC
- ldr r0, _0803C2F4 @ =gUnknown_02024BE6
- ldrh r0, [r0]
- cmp r0, 0x4C
- bne _0803C2DC
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C2DC:
- ldrh r1, [r4]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0803C30C
- mov r6, r9
- cmp r6, 0xA
- beq _0803C2F8
- cmp r6, 0xB
- beq _0803C306
- b _0803C30C
- .align 2, 0
-_0803C2F4: .4byte gUnknown_02024BE6
-_0803C2F8:
- lsls r0, r5, 4
- subs r0, r5
- movs r1, 0xA
- bl __divsi3
- adds r5, r0, 0
- b _0803C30C
-_0803C306:
- lsrs r0, r5, 31
- adds r0, r5, r0
- asrs r5, r0, 1
-_0803C30C:
- ldr r1, _0803C344 @ =0x02017100
- ldr r2, [sp, 0x10]
- lsls r0, r2, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0803C330
- mov r3, r9
- cmp r3, 0xA
- bne _0803C330
- lsls r0, r5, 4
- subs r0, r5
- movs r1, 0xA
- bl __divsi3
- adds r5, r0, 0
-_0803C330:
- 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
-_0803C344: .4byte 0x02017100
- thumb_func_end CalculateBaseDamage
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 88bdae3bc..be014136c 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -50,7 +50,7 @@ SECTIONS {
src/decompress.o(.text);
asm/rom_800D42C.o(.text);
src/pokemon_1.o(.text);
- asm/calculate_base_damage.o(.text);
+ src/calculate_base_damage.o(.text);
src/pokemon_2.o(.text);
asm/pokemon_item_effect.o(.text);
src/pokemon_3.o(.text);
diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c
new file mode 100644
index 000000000..37fc15414
--- /dev/null
+++ b/src/calculate_base_damage.c
@@ -0,0 +1,1482 @@
+#include "global.h"
+#include "text.h"
+#include "string_util.h"
+#include "pokemon.h"
+#include "species.h"
+#include "main.h"
+#include "sprite.h"
+#include "berry.h"
+#include "item.h"
+
+extern u8 gPlayerPartyCount;
+extern struct Pokemon gPlayerParty[6];
+extern u8 gEnemyPartyCount;
+extern struct Pokemon gEnemyParty[6];
+
+extern u16 unk_20160BC[];
+extern struct SecretBaseRecord gSecretBaseRecord;
+extern u32 dword_2017100[];
+extern u16 gUnknown_020239F8;
+extern struct BattlePokemon gBattleMons[4];
+extern u16 gUnknown_02024BE6;
+extern u8 byte_2024C06;
+extern u8 gCritMultiplier;
+extern u16 word_2024DB8;
+extern struct BattleEnigmaBerry gEnigmaBerries[];
+extern u16 gBattleMovePower;
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u16 gTrainerBattleOpponent;
+extern struct PokemonStorage gPokemonStorage;
+
+extern u8 gBadEggNickname[];
+extern u8 gEggNickname[];
+extern u32 gBitTable[];
+extern struct BaseStats gBaseStats[];
+extern u8 gSpeciesNames[][11];
+extern struct BattleMove gBattleMoves[];
+extern struct SpriteTemplate gSpriteTemplate_8208288[];
+extern union AmimCmd *gSpriteAnimTable_81E7C64[];
+extern union AnimCmd **gUnknown_081EC2A4[];
+extern union AnimCmd **gUnknown_081ECACC[];
+extern u8 gTrainerClassToPicIndex[];
+extern u8 gTrainerClassToNameIndex[];
+extern u8 gSecretBaseTrainerClasses[];
+extern u8 gUnknown_08208238[];
+extern u8 gUnknown_0820823C[];
+extern u8 gStatStageRatios[];
+extern u8 gHoldEffectToType[][2];
+
+extern u8 battle_side_get_owner(u8);
+extern u8 FlagGet(u16);
+extern u8 sub_8018324(u8, u8, u8, u8, u16);
+extern u8 sub_803C348(u8);
+
+#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
+{ \
+ (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)] * 2]; \
+ (var) /= (gStatStageRatios + 1)[(mon)->statStages[(statIndex)] * 2]; \
+}
+
+#ifdef NONMATCHING
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u8 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8)
+{
+ s32 i;
+ s32 damage = 0;
+ u8 type;
+ u16 attack, defense;
+ u16 spAttack, spDefense;
+ u8 defenderHoldEffect;
+ u8 defenderHoldEffectParam;
+ u8 attackerHoldEffect;
+ u8 attackerHoldEffectParam;
+ s32 a, b;
+
+ if (!powerOverride)
+ gBattleMovePower = gBattleMoves[move].power;
+ else
+ gBattleMovePower = powerOverride;
+
+ if (!typeOverride)
+ type = gBattleMoves[move].type;
+ else
+ type = typeOverride & 0x3F;
+
+ attack = attacker->attack;
+ defense = defender->defense;
+ spAttack = attacker->spAttack;
+ spDefense = defender->spDefense;
+
+ if (attacker->item == 175)
+ {
+ attackerHoldEffect = gEnigmaBerries[a7].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam;
+ }
+ else
+ {
+ attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
+ attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
+ }
+
+ if (defender->item == 175)
+ {
+ defenderHoldEffect = gEnigmaBerries[a8].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam;
+ }
+ else
+ {
+ defenderHoldEffect = ItemId_GetHoldEffect(defender->item);
+ defenderHoldEffectParam = ItemId_GetHoldEffectParam(defender->item);
+ }
+
+ if (attacker->ability == 37 || attacker->ability == 74)
+ attack *= 2;
+
+ if (!(gUnknown_020239F8 & 0x902))
+ {
+ if ((gUnknown_020239F8 & 8)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(2055)
+ && !battle_side_get_owner(a7))
+ attack = (110 * attack) / 100;
+
+ if (!(gUnknown_020239F8 & 0x902))
+ {
+ if ((gUnknown_020239F8 & 8)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(2059)
+ && !battle_side_get_owner(a8))
+ defense = (110 * defense) / 100;
+
+ if (!(gUnknown_020239F8 & 0x902))
+ {
+ if ((gUnknown_020239F8 & 8)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(2061)
+ && !battle_side_get_owner(a7))
+ spAttack = (110 * spAttack) / 100;
+
+ if (!(gUnknown_020239F8 & 0x902))
+ {
+ if ((gUnknown_020239F8 & 8)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(2061)
+ && !battle_side_get_owner(a8))
+ spDefense = (110 * spDefense) / 100;
+ }
+ }
+ }
+ }
+
+ for (i = 0; i < 17; i++)
+ {
+ if (attackerHoldEffect == gHoldEffectToType[i][0]
+ && type == gHoldEffectToType[i][1])
+ {
+ if (type <= 8)
+ attack = (attack * (attackerHoldEffectParam + 100)) / 100;
+ else
+ spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
+ break;
+ }
+ }
+
+ if (attackerHoldEffect == 29)
+ attack = (150 * attack) / 100;
+ if (attackerHoldEffect == 34 && !(gUnknown_020239F8 & 0x100) && (attacker->species == SPECIES_LATIAS || attacker->species == SPECIES_LATIOS))
+ spAttack = (150 * spAttack) / 100;
+ if (defenderHoldEffect == 34 && !(gUnknown_020239F8 & 0x100) && (defender->species == SPECIES_LATIAS || defender->species == SPECIES_LATIOS))
+ spDefense = (150 * spDefense) / 100;
+ if (attackerHoldEffect == 35 && attacker->species == 373)
+ spAttack *= 2;
+ if (defenderHoldEffect == 36 && defender->species == 373)
+ spDefense *= 2;
+ if (attackerHoldEffect == 45 && attacker->species == 25)
+ spAttack *= 2;
+ if (defenderHoldEffect == 64 && defender->species == 132)
+ defense *= 2;
+ if (attackerHoldEffect == 65 && (attacker->species == SPECIES_CUBONE || attacker->species == SPECIES_MAROWAK))
+ attack *= 2;
+ if (defender->ability == 47 && (type == 10 || type == 15))
+ spAttack /= 2;
+ if (attacker->ability == 55)
+ attack = (150 * attack) / 100;
+ if (attacker->ability == 57 && sub_8018324(0xE, 0, 0x3A, 0, 0))
+ spAttack = (150 * spAttack) / 100;
+ if (attacker->ability == 58 && sub_8018324(0xE, 0, 0x39, 0, 0))
+ spAttack = (150 * spAttack) / 100;
+ if (attacker->ability == 62 && attacker->status1)
+ attack = (150 * attack) / 100;
+ if (defender->ability == 63 && defender->status1)
+ defense = (150 * defense) / 100;
+ if (type == 13 && sub_8018324(0xE, 0, 0, 0xFD, 0))
+ gBattleMovePower /= 2;
+ if (type == 10 && sub_8018324(0xE, 0, 0, 0xFE, 0))
+ gBattleMovePower /= 2;
+ if (type == 12 && attacker->ability == 65 && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == 10 && attacker->ability == 66 && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == 11 && attacker->ability == 67 && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (type == 6 && attacker->ability == 68 && attacker->hp <= (attacker->maxHP / 3))
+ gBattleMovePower = (150 * gBattleMovePower) / 100;
+ if (gBattleMoves[gUnknown_02024BE6].effect == 7)
+ defense /= 2;
+
+ if (type <= 8)
+ {
+ if (gCritMultiplier == 2)
+ {
+ if (attacker->statStages[1] > 6)
+ APPLY_STAT_MOD(a, attacker, attack, 1)
+ else
+ a = attack;
+ }
+ else
+ APPLY_STAT_MOD(a, attacker, attack, 1)
+
+ a = a * gBattleMovePower * (2 * attacker->level / 5 + 2);
+
+ if (gCritMultiplier == 2)
+ {
+ if (defender->statStages[2] < 6)
+ APPLY_STAT_MOD(b, defender, defense, 2)
+ else
+ b = defense;
+ }
+ else
+ APPLY_STAT_MOD(b, defender, defense, 2)
+
+ damage = (a / b) / 50;
+
+ if ((attacker->status1 & 0x10) && attacker->ability != 62)
+ damage /= 2;
+
+ if ((a4 & 1) && gCritMultiplier == 1)
+ {
+ if ((gUnknown_020239F8 & 1) && sub_803C348(2) == 2)
+ damage = 2 * (damage / 3);
+ else
+ damage /= 2;
+ }
+
+ if ((gUnknown_020239F8 & 1) && gBattleMoves[move].target == 8 && sub_803C348(2) == 2)
+ damage /= 2;
+
+ if (damage == 0)
+ damage = 1;
+ }
+
+ if (type == 9)
+ damage = 0;
+
+ if (type > 9)
+ {
+ if (gCritMultiplier == 2)
+ {
+ if (attacker->statStages[4] > 6)
+ APPLY_STAT_MOD(a, attacker, spAttack, 4)
+ else
+ a = spAttack;
+ }
+ else
+ APPLY_STAT_MOD(a, attacker, spAttack, 4)
+
+ a = a * gBattleMovePower * (2 * attacker->level / 5 + 2);
+
+ if (gCritMultiplier == 2)
+ {
+ if (defender->statStages[5] < 6)
+ APPLY_STAT_MOD(b, defender, spDefense, 5)
+ else
+ b = spDefense;
+ }
+ else
+ APPLY_STAT_MOD(b, defender, spDefense, 5)
+
+ damage = (a / b) / 50;
+
+ if ((a4 & 2) && gCritMultiplier == 1)
+ {
+ if ((gUnknown_020239F8 & 1) && sub_803C348(2) == 2)
+ damage = 2 * (damage / 3);
+ else
+ damage /= 2;
+ }
+
+ if ((gUnknown_020239F8 & 1) && gBattleMoves[move].target == 8 && sub_803C348(2u) == 2)
+ damage /= 2;
+
+ if (!sub_8018324(0xE, 0, 0xD, 0, 0) && !sub_8018324(0xE, 0, 0x4D, 0, 0))
+ {
+ if (word_2024DB8 & 1)
+ {
+ if (type == 10)
+ {
+ damage /= 2;
+ }
+ else if (type == 11)
+ {
+ damage = (15 * damage) / 10;
+ }
+ }
+ if ((word_2024DB8 & 0x9F) && gUnknown_02024BE6 == 76)
+ damage /= 2;
+ if (word_2024DB8 & 0x60)
+ {
+ if (type == 10)
+ {
+ damage = (15 * damage) / 10;
+ }
+ else if (type == 11)
+ {
+ damage /= 2;
+ }
+ }
+ }
+ if ((dword_2017100[a7] & 1) && type == 10)
+ damage = (15 * damage) / 10;
+ }
+
+ return damage + 2;
+}
+#else
+__attribute__((naked))
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u8 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ adds r7, r0, 0\n\
+ str r1, [sp, 0x4]\n\
+ str r2, [sp, 0x8]\n\
+ ldr r0, [sp, 0x4C]\n\
+ ldr r1, [sp, 0x50]\n\
+ ldr r2, [sp, 0x54]\n\
+ ldr r4, [sp, 0x58]\n\
+ lsls r3, 16\n\
+ lsrs r3, 16\n\
+ str r3, [sp, 0xC]\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ lsls r1, 24\n\
+ lsrs r6, r1, 24\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x10]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ movs r5, 0\n\
+ cmp r3, 0\n\
+ bne _0803BA80\n\
+ ldr r2, _0803BA78 @ =gBattleMovePower\n\
+ ldr r1, _0803BA7C @ =gBattleMoves\n\
+ ldr r3, [sp, 0x8]\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x1]\n\
+ strh r0, [r2]\n\
+ b _0803BA84\n\
+ .align 2, 0\n\
+_0803BA78: .4byte gBattleMovePower\n\
+_0803BA7C: .4byte gBattleMoves\n\
+_0803BA80:\n\
+ ldr r0, _0803BA9C @ =gBattleMovePower\n\
+ strh r3, [r0]\n\
+_0803BA84:\n\
+ cmp r6, 0\n\
+ bne _0803BAA4\n\
+ ldr r1, _0803BAA0 @ =gBattleMoves\n\
+ ldr r6, [sp, 0x8]\n\
+ lsls r0, r6, 1\n\
+ adds r0, r6\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ mov r9, r0\n\
+ b _0803BAAE\n\
+ .align 2, 0\n\
+_0803BA9C: .4byte gBattleMovePower\n\
+_0803BAA0: .4byte gBattleMoves\n\
+_0803BAA4:\n\
+ movs r0, 0x3F\n\
+ mov r9, r0\n\
+ mov r1, r9\n\
+ ands r1, r6\n\
+ mov r9, r1\n\
+_0803BAAE:\n\
+ ldrh r6, [r7, 0x2]\n\
+ ldr r2, [sp, 0x4]\n\
+ ldrh r2, [r2, 0x4]\n\
+ str r2, [sp, 0x14]\n\
+ ldrh r3, [r7, 0x8]\n\
+ mov r8, r3\n\
+ ldr r0, [sp, 0x4]\n\
+ ldrh r0, [r0, 0xA]\n\
+ str r0, [sp, 0x18]\n\
+ ldrh r0, [r7, 0x2E]\n\
+ cmp r0, 0xAF\n\
+ bne _0803BAE0\n\
+ ldr r1, _0803BADC @ =gEnigmaBerries\n\
+ ldr r2, [sp, 0x10]\n\
+ lsls r0, r2, 3\n\
+ subs r0, r2\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r3, [r0, 0x7]\n\
+ mov r10, r3\n\
+ ldrb r0, [r0, 0x1A]\n\
+ b _0803BAF6\n\
+ .align 2, 0\n\
+_0803BADC: .4byte gEnigmaBerries\n\
+_0803BAE0:\n\
+ ldrh r0, [r7, 0x2E]\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldrh r0, [r7, 0x2E]\n\
+ bl ItemId_GetHoldEffectParam\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+_0803BAF6:\n\
+ str r0, [sp, 0x20]\n\
+ ldr r1, [sp, 0x4]\n\
+ ldrh r0, [r1, 0x2E]\n\
+ cmp r0, 0xAF\n\
+ bne _0803BB26\n\
+ ldr r1, _0803BB10 @ =gEnigmaBerries\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x7]\n\
+ str r0, [sp, 0x1C]\n\
+ b _0803BB3C\n\
+ .align 2, 0\n\
+_0803BB10: .4byte gEnigmaBerries\n\
+_0803BB14:\n\
+ ldr r0, [sp, 0x20]\n\
+ adds r0, 0x64\n\
+ muls r0, r6\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ b _0803BCDC\n\
+_0803BB26:\n\
+ ldr r2, [sp, 0x4]\n\
+ ldrh r0, [r2, 0x2E]\n\
+ bl ItemId_GetHoldEffect\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x1C]\n\
+ ldr r3, [sp, 0x4]\n\
+ ldrh r0, [r3, 0x2E]\n\
+ bl ItemId_GetHoldEffectParam\n\
+_0803BB3C:\n\
+ adds r0, r7, 0\n\
+ adds r0, 0x20\n\
+ ldrb r1, [r0]\n\
+ str r0, [sp, 0x24]\n\
+ cmp r1, 0x25\n\
+ beq _0803BB4C\n\
+ cmp r1, 0x4A\n\
+ bne _0803BB50\n\
+_0803BB4C:\n\
+ lsls r0, r6, 17\n\
+ lsrs r6, r0, 16\n\
+_0803BB50:\n\
+ ldr r0, _0803BCB8 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0803BCBC @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803BB5E\n\
+ b _0803BC78\n\
+_0803BB5E:\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803BB98\n\
+ ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0803BB98\n\
+ ldr r0, _0803BCC4 @ =0x00000807\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BB98\n\
+ ldr r0, [sp, 0x10]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803BB98\n\
+ movs r0, 0x6E\n\
+ muls r0, r6\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_0803BB98:\n\
+ ldr r0, _0803BCB8 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0803BCBC @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803BC78\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803BBE2\n\
+ ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0803BBE2\n\
+ ldr r0, _0803BCC8 @ =0x0000080b\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BBE2\n\
+ adds r0, r4, 0\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803BBE2\n\
+ movs r0, 0x6E\n\
+ ldr r1, [sp, 0x14]\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x14]\n\
+_0803BBE2:\n\
+ ldr r0, _0803BCB8 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0803BCBC @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803BC78\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803BC2E\n\
+ ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0803BC2E\n\
+ ldr r0, _0803BCCC @ =0x0000080d\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BC2E\n\
+ ldr r0, [sp, 0x10]\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803BC2E\n\
+ movs r0, 0x6E\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BC2E:\n\
+ ldr r0, _0803BCB8 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _0803BCBC @ =0x00000902\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803BC78\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803BC78\n\
+ ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r1, r0\n\
+ beq _0803BC78\n\
+ ldr r0, _0803BCCC @ =0x0000080d\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BC78\n\
+ adds r0, r4, 0\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803BC78\n\
+ movs r0, 0x6E\n\
+ ldr r3, [sp, 0x18]\n\
+ muls r0, r3\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x18]\n\
+_0803BC78:\n\
+ movs r2, 0\n\
+ ldr r4, _0803BCD0 @ =gHoldEffectToType\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, 0x20\n\
+ str r0, [sp, 0x28]\n\
+ adds r3, r4, 0\n\
+_0803BC84:\n\
+ lsls r1, r2, 1\n\
+ ldrb r0, [r3]\n\
+ cmp r10, r0\n\
+ bne _0803BCD4\n\
+ adds r0, r4, 0x1\n\
+ adds r0, r1, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r9, r0\n\
+ bne _0803BCD4\n\
+ mov r1, r9\n\
+ cmp r1, 0x8\n\
+ bhi _0803BC9E\n\
+ b _0803BB14\n\
+_0803BC9E:\n\
+ ldr r0, [sp, 0x20]\n\
+ adds r0, 0x64\n\
+ mov r2, r8\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ b _0803BCDC\n\
+ .align 2, 0\n\
+_0803BCB8: .4byte gUnknown_020239F8\n\
+_0803BCBC: .4byte 0x00000902\n\
+_0803BCC0: .4byte gTrainerBattleOpponent\n\
+_0803BCC4: .4byte 0x00000807\n\
+_0803BCC8: .4byte 0x0000080b\n\
+_0803BCCC: .4byte 0x0000080d\n\
+_0803BCD0: .4byte gHoldEffectToType\n\
+_0803BCD4:\n\
+ adds r3, 0x2\n\
+ adds r2, 0x1\n\
+ cmp r2, 0x10\n\
+ bls _0803BC84\n\
+_0803BCDC:\n\
+ mov r3, r10\n\
+ cmp r3, 0x1D\n\
+ bne _0803BCF0\n\
+ movs r0, 0x96\n\
+ muls r0, r6\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_0803BCF0:\n\
+ mov r0, r10\n\
+ cmp r0, 0x22\n\
+ bne _0803BD28\n\
+ ldr r0, _0803BFDC @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803BD28\n\
+ ldr r1, _0803BFE0 @ =0xfffffe69\n\
+ adds r0, r1, 0\n\
+ ldrh r2, [r7]\n\
+ adds r0, r2\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _0803BD28\n\
+ movs r0, 0x96\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BD28:\n\
+ ldr r0, [sp, 0x1C]\n\
+ cmp r0, 0x22\n\
+ bne _0803BD60\n\
+ ldr r0, _0803BFDC @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0803BD60\n\
+ ldr r1, _0803BFE0 @ =0xfffffe69\n\
+ adds r0, r1, 0\n\
+ ldr r2, [sp, 0x4]\n\
+ ldrh r2, [r2]\n\
+ adds r0, r2\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _0803BD60\n\
+ movs r0, 0x96\n\
+ ldr r3, [sp, 0x18]\n\
+ muls r0, r3\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x18]\n\
+_0803BD60:\n\
+ mov r0, r10\n\
+ cmp r0, 0x23\n\
+ bne _0803BD76\n\
+ ldrh r1, [r7]\n\
+ ldr r0, _0803BFE4 @ =0x00000175\n\
+ cmp r1, r0\n\
+ bne _0803BD76\n\
+ mov r1, r8\n\
+ lsls r0, r1, 17\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BD76:\n\
+ ldr r2, [sp, 0x1C]\n\
+ cmp r2, 0x24\n\
+ bne _0803BD8E\n\
+ ldr r3, [sp, 0x4]\n\
+ ldrh r1, [r3]\n\
+ ldr r0, _0803BFE4 @ =0x00000175\n\
+ cmp r1, r0\n\
+ bne _0803BD8E\n\
+ ldr r1, [sp, 0x18]\n\
+ lsls r0, r1, 17\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x18]\n\
+_0803BD8E:\n\
+ mov r2, r10\n\
+ cmp r2, 0x2D\n\
+ bne _0803BDA2\n\
+ ldrh r0, [r7]\n\
+ cmp r0, 0x19\n\
+ bne _0803BDA2\n\
+ mov r3, r8\n\
+ lsls r0, r3, 17\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BDA2:\n\
+ ldr r0, [sp, 0x1C]\n\
+ cmp r0, 0x40\n\
+ bne _0803BDB8\n\
+ ldr r1, [sp, 0x4]\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0x84\n\
+ bne _0803BDB8\n\
+ ldr r2, [sp, 0x14]\n\
+ lsls r0, r2, 17\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x14]\n\
+_0803BDB8:\n\
+ mov r3, r10\n\
+ cmp r3, 0x41\n\
+ bne _0803BDCE\n\
+ ldrh r0, [r7]\n\
+ subs r0, 0x68\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _0803BDCE\n\
+ lsls r0, r6, 17\n\
+ lsrs r6, r0, 16\n\
+_0803BDCE:\n\
+ ldr r1, [sp, 0x28]\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x2F\n\
+ bne _0803BDE6\n\
+ mov r2, r9\n\
+ cmp r2, 0xA\n\
+ beq _0803BDE0\n\
+ cmp r2, 0xF\n\
+ bne _0803BDE6\n\
+_0803BDE0:\n\
+ mov r3, r8\n\
+ lsrs r3, 1\n\
+ mov r8, r3\n\
+_0803BDE6:\n\
+ ldr r0, [sp, 0x24]\n\
+ ldrb r4, [r0]\n\
+ cmp r4, 0x37\n\
+ bne _0803BDFC\n\
+ movs r0, 0x96\n\
+ muls r0, r6\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_0803BDFC:\n\
+ cmp r4, 0x39\n\
+ bne _0803BE2A\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0x3A\n\
+ movs r3, 0\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BE2A\n\
+ movs r0, 0x96\n\
+ mov r1, r8\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BE2A:\n\
+ ldr r2, [sp, 0x24]\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0x3A\n\
+ bne _0803BE5C\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0x39\n\
+ movs r3, 0\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BE5C\n\
+ movs r0, 0x96\n\
+ mov r3, r8\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+_0803BE5C:\n\
+ ldr r1, [sp, 0x24]\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x3E\n\
+ bne _0803BE78\n\
+ ldr r0, [r7, 0x4C]\n\
+ cmp r0, 0\n\
+ beq _0803BE78\n\
+ movs r0, 0x96\n\
+ muls r0, r6\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+_0803BE78:\n\
+ ldr r2, [sp, 0x28]\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0x3F\n\
+ bne _0803BE9A\n\
+ ldr r3, [sp, 0x4]\n\
+ ldr r0, [r3, 0x4C]\n\
+ cmp r0, 0\n\
+ beq _0803BE9A\n\
+ movs r0, 0x96\n\
+ ldr r1, [sp, 0x14]\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x14]\n\
+_0803BE9A:\n\
+ mov r2, r9\n\
+ cmp r2, 0xD\n\
+ bne _0803BEBE\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ movs r3, 0xFD\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BEBE\n\
+ ldr r1, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r0, [r1]\n\
+ lsrs r0, 1\n\
+ strh r0, [r1]\n\
+_0803BEBE:\n\
+ mov r3, r9\n\
+ cmp r3, 0xA\n\
+ bne _0803BEE2\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0\n\
+ movs r3, 0xFE\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0803BEE2\n\
+ ldr r1, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r0, [r1]\n\
+ lsrs r0, 1\n\
+ strh r0, [r1]\n\
+_0803BEE2:\n\
+ mov r0, r9\n\
+ cmp r0, 0xC\n\
+ bne _0803BF12\n\
+ ldr r1, [sp, 0x24]\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x41\n\
+ bne _0803BF12\n\
+ ldrh r0, [r7, 0x2C]\n\
+ movs r1, 0x3\n\
+ bl __udivsi3\n\
+ ldrh r1, [r7, 0x28]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r1, r0\n\
+ bhi _0803BF12\n\
+ ldr r4, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ strh r0, [r4]\n\
+_0803BF12:\n\
+ mov r2, r9\n\
+ cmp r2, 0xA\n\
+ bne _0803BF42\n\
+ ldr r3, [sp, 0x24]\n\
+ ldrb r0, [r3]\n\
+ cmp r0, 0x42\n\
+ bne _0803BF42\n\
+ ldrh r0, [r7, 0x2C]\n\
+ movs r1, 0x3\n\
+ bl __udivsi3\n\
+ ldrh r1, [r7, 0x28]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r1, r0\n\
+ bhi _0803BF42\n\
+ ldr r4, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ strh r0, [r4]\n\
+_0803BF42:\n\
+ mov r0, r9\n\
+ cmp r0, 0xB\n\
+ bne _0803BF72\n\
+ ldr r1, [sp, 0x24]\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x43\n\
+ bne _0803BF72\n\
+ ldrh r0, [r7, 0x2C]\n\
+ movs r1, 0x3\n\
+ bl __udivsi3\n\
+ ldrh r1, [r7, 0x28]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r1, r0\n\
+ bhi _0803BF72\n\
+ ldr r4, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ strh r0, [r4]\n\
+_0803BF72:\n\
+ mov r2, r9\n\
+ cmp r2, 0x6\n\
+ bne _0803BFA2\n\
+ ldr r3, [sp, 0x24]\n\
+ ldrb r0, [r3]\n\
+ cmp r0, 0x44\n\
+ bne _0803BFA2\n\
+ ldrh r0, [r7, 0x2C]\n\
+ movs r1, 0x3\n\
+ bl __udivsi3\n\
+ ldrh r1, [r7, 0x28]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r1, r0\n\
+ bhi _0803BFA2\n\
+ ldr r4, _0803BFE8 @ =gBattleMovePower\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x96\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ strh r0, [r4]\n\
+_0803BFA2:\n\
+ ldr r2, _0803BFEC @ =gBattleMoves\n\
+ ldr r0, _0803BFF0 @ =gUnknown_02024BE6\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x7\n\
+ bne _0803BFBC\n\
+ ldr r0, [sp, 0x14]\n\
+ lsrs r0, 1\n\
+ str r0, [sp, 0x14]\n\
+_0803BFBC:\n\
+ mov r1, r9\n\
+ cmp r1, 0x8\n\
+ bls _0803BFC4\n\
+ b _0803C122\n\
+_0803BFC4:\n\
+ ldr r0, _0803BFF4 @ =gCritMultiplier\n\
+ ldrb r1, [r0]\n\
+ adds r4, r0, 0\n\
+ cmp r1, 0x2\n\
+ bne _0803C000\n\
+ movs r0, 0x19\n\
+ ldrsb r0, [r7, r0]\n\
+ cmp r0, 0x6\n\
+ ble _0803BFFC\n\
+ ldr r2, _0803BFF8 @ =gStatStageRatios\n\
+ b _0803C006\n\
+ .align 2, 0\n\
+_0803BFDC: .4byte gUnknown_020239F8\n\
+_0803BFE0: .4byte 0xfffffe69\n\
+_0803BFE4: .4byte 0x00000175\n\
+_0803BFE8: .4byte gBattleMovePower\n\
+_0803BFEC: .4byte gBattleMoves\n\
+_0803BFF0: .4byte gUnknown_02024BE6\n\
+_0803BFF4: .4byte gCritMultiplier\n\
+_0803BFF8: .4byte gStatStageRatios\n\
+_0803BFFC:\n\
+ adds r5, r6, 0\n\
+ b _0803C01E\n\
+_0803C000:\n\
+ ldr r2, _0803C050 @ =gStatStageRatios\n\
+ movs r0, 0x19\n\
+ ldrsb r0, [r7, r0]\n\
+_0803C006:\n\
+ lsls r0, 1\n\
+ adds r1, r0, r2\n\
+ ldrb r1, [r1]\n\
+ adds r5, r6, 0\n\
+ muls r5, r1\n\
+ adds r2, 0x1\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+_0803C01E:\n\
+ ldr r0, _0803C054 @ =gBattleMovePower\n\
+ ldrh r0, [r0]\n\
+ muls r5, r0\n\
+ adds r0, r7, 0\n\
+ adds r0, 0x2A\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 1\n\
+ movs r1, 0x5\n\
+ bl __divsi3\n\
+ adds r0, 0x2\n\
+ muls r5, r0\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0x2\n\
+ bne _0803C05C\n\
+ ldr r2, [sp, 0x4]\n\
+ movs r0, 0x1A\n\
+ ldrsb r0, [r2, r0]\n\
+ cmp r0, 0x5\n\
+ bgt _0803C058\n\
+ ldr r2, _0803C050 @ =gStatStageRatios\n\
+ ldr r3, [sp, 0x4]\n\
+ movs r0, 0x1A\n\
+ ldrsb r0, [r3, r0]\n\
+ b _0803C064\n\
+ .align 2, 0\n\
+_0803C050: .4byte gStatStageRatios\n\
+_0803C054: .4byte gBattleMovePower\n\
+_0803C058:\n\
+ ldr r3, [sp, 0x14]\n\
+ b _0803C07E\n\
+_0803C05C:\n\
+ ldr r2, _0803C0DC @ =gStatStageRatios\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r0, 0x1A\n\
+ ldrsb r0, [r1, r0]\n\
+_0803C064:\n\
+ lsls r0, 1\n\
+ adds r1, r0, r2\n\
+ ldrb r1, [r1]\n\
+ ldr r6, [sp, 0x14]\n\
+ adds r3, r6, 0\n\
+ muls r3, r1\n\
+ adds r2, 0x1\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ adds r0, r3, 0\n\
+ bl __divsi3\n\
+ adds r3, r0, 0\n\
+_0803C07E:\n\
+ adds r0, r5, 0\n\
+ adds r1, r3, 0\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ movs r1, 0x32\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ ldr r0, [r7, 0x4C]\n\
+ movs r1, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C0A8\n\
+ ldr r1, [sp, 0x24]\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x3E\n\
+ beq _0803C0A8\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C0A8:\n\
+ movs r0, 0x1\n\
+ ldr r2, [sp, 0xC]\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0803C0EA\n\
+ ldrb r1, [r4]\n\
+ cmp r1, 0x1\n\
+ bne _0803C0EA\n\
+ ldr r0, _0803C0E0 @ =gUnknown_020239F8\n\
+ ldrh r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _0803C0E4\n\
+ movs r0, 0x2\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bne _0803C0E4\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x3\n\
+ bl __divsi3\n\
+ lsls r5, r0, 1\n\
+ b _0803C0EA\n\
+ .align 2, 0\n\
+_0803C0DC: .4byte gStatStageRatios\n\
+_0803C0E0: .4byte gUnknown_020239F8\n\
+_0803C0E4:\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C0EA:\n\
+ ldr r0, _0803C148 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C11C\n\
+ ldr r0, _0803C14C @ =gBattleMoves\n\
+ ldr r3, [sp, 0x8]\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x6]\n\
+ cmp r0, 0x8\n\
+ bne _0803C11C\n\
+ movs r0, 0x2\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bne _0803C11C\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C11C:\n\
+ cmp r5, 0\n\
+ bne _0803C122\n\
+ movs r5, 0x1\n\
+_0803C122:\n\
+ mov r6, r9\n\
+ cmp r6, 0x9\n\
+ bne _0803C12A\n\
+ movs r5, 0\n\
+_0803C12A:\n\
+ mov r0, r9\n\
+ cmp r0, 0x9\n\
+ bhi _0803C132\n\
+ b _0803C330\n\
+_0803C132:\n\
+ ldr r0, _0803C150 @ =gCritMultiplier\n\
+ ldrb r1, [r0]\n\
+ adds r4, r0, 0\n\
+ cmp r1, 0x2\n\
+ bne _0803C15C\n\
+ movs r0, 0x1C\n\
+ ldrsb r0, [r7, r0]\n\
+ cmp r0, 0x6\n\
+ ble _0803C158\n\
+ ldr r2, _0803C154 @ =gStatStageRatios\n\
+ b _0803C162\n\
+ .align 2, 0\n\
+_0803C148: .4byte gUnknown_020239F8\n\
+_0803C14C: .4byte gBattleMoves\n\
+_0803C150: .4byte gCritMultiplier\n\
+_0803C154: .4byte gStatStageRatios\n\
+_0803C158:\n\
+ mov r5, r8\n\
+ b _0803C17A\n\
+_0803C15C:\n\
+ ldr r2, _0803C1A8 @ =gStatStageRatios\n\
+ movs r0, 0x1C\n\
+ ldrsb r0, [r7, r0]\n\
+_0803C162:\n\
+ lsls r0, 1\n\
+ adds r1, r0, r2\n\
+ ldrb r1, [r1]\n\
+ mov r5, r8\n\
+ muls r5, r1\n\
+ adds r2, 0x1\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ adds r0, r5, 0\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+_0803C17A:\n\
+ ldr r0, _0803C1AC @ =gBattleMovePower\n\
+ ldrh r0, [r0]\n\
+ muls r5, r0\n\
+ adds r0, r7, 0\n\
+ adds r0, 0x2A\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 1\n\
+ movs r1, 0x5\n\
+ bl __divsi3\n\
+ adds r0, 0x2\n\
+ muls r5, r0\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0x2\n\
+ bne _0803C1B4\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r0, 0x1D\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, 0x5\n\
+ bgt _0803C1B0\n\
+ ldr r2, _0803C1A8 @ =gStatStageRatios\n\
+ b _0803C1BC\n\
+ .align 2, 0\n\
+_0803C1A8: .4byte gStatStageRatios\n\
+_0803C1AC: .4byte gBattleMovePower\n\
+_0803C1B0:\n\
+ ldr r3, [sp, 0x18]\n\
+ b _0803C1D6\n\
+_0803C1B4:\n\
+ ldr r2, _0803C21C @ =gStatStageRatios\n\
+ ldr r1, [sp, 0x4]\n\
+ movs r0, 0x1D\n\
+ ldrsb r0, [r1, r0]\n\
+_0803C1BC:\n\
+ lsls r0, 1\n\
+ adds r1, r0, r2\n\
+ ldrb r1, [r1]\n\
+ ldr r6, [sp, 0x18]\n\
+ adds r3, r6, 0\n\
+ muls r3, r1\n\
+ adds r2, 0x1\n\
+ adds r0, r2\n\
+ ldrb r1, [r0]\n\
+ adds r0, r3, 0\n\
+ bl __divsi3\n\
+ adds r3, r0, 0\n\
+_0803C1D6:\n\
+ adds r0, r5, 0\n\
+ adds r1, r3, 0\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ movs r1, 0x32\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ movs r0, 0x2\n\
+ ldr r1, [sp, 0xC]\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C22A\n\
+ ldrb r1, [r4]\n\
+ cmp r1, 0x1\n\
+ bne _0803C22A\n\
+ ldr r0, _0803C220 @ =gUnknown_020239F8\n\
+ ldrh r0, [r0]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ beq _0803C224\n\
+ movs r0, 0x2\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bne _0803C224\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x3\n\
+ bl __divsi3\n\
+ lsls r5, r0, 1\n\
+ b _0803C22A\n\
+ .align 2, 0\n\
+_0803C21C: .4byte gStatStageRatios\n\
+_0803C220: .4byte gUnknown_020239F8\n\
+_0803C224:\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C22A:\n\
+ ldr r0, _0803C2A4 @ =gUnknown_020239F8\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C25C\n\
+ ldr r0, _0803C2A8 @ =gBattleMoves\n\
+ ldr r2, [sp, 0x8]\n\
+ lsls r1, r2, 1\n\
+ adds r1, r2\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x6]\n\
+ cmp r0, 0x8\n\
+ bne _0803C25C\n\
+ movs r0, 0x2\n\
+ bl sub_803C348\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bne _0803C25C\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C25C:\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0xD\n\
+ movs r3, 0\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803C30C\n\
+ str r0, [sp]\n\
+ movs r0, 0xE\n\
+ movs r1, 0\n\
+ movs r2, 0x4D\n\
+ movs r3, 0\n\
+ bl sub_8018324\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _0803C30C\n\
+ ldr r2, _0803C2AC @ =word_2024DB8\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ adds r4, r2, 0\n\
+ cmp r0, 0\n\
+ beq _0803C2C4\n\
+ mov r3, r9\n\
+ cmp r3, 0xA\n\
+ beq _0803C2B0\n\
+ cmp r3, 0xB\n\
+ beq _0803C2B8\n\
+ b _0803C2C4\n\
+ .align 2, 0\n\
+_0803C2A4: .4byte gUnknown_020239F8\n\
+_0803C2A8: .4byte gBattleMoves\n\
+_0803C2AC: .4byte word_2024DB8\n\
+_0803C2B0:\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+ b _0803C2C4\n\
+_0803C2B8:\n\
+ lsls r0, r5, 4\n\
+ subs r0, r5\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+_0803C2C4:\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x9F\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C2DC\n\
+ ldr r0, _0803C2F4 @ =gUnknown_02024BE6\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0x4C\n\
+ bne _0803C2DC\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C2DC:\n\
+ ldrh r1, [r4]\n\
+ movs r0, 0x60\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C30C\n\
+ mov r6, r9\n\
+ cmp r6, 0xA\n\
+ beq _0803C2F8\n\
+ cmp r6, 0xB\n\
+ beq _0803C306\n\
+ b _0803C30C\n\
+ .align 2, 0\n\
+_0803C2F4: .4byte gUnknown_02024BE6\n\
+_0803C2F8:\n\
+ lsls r0, r5, 4\n\
+ subs r0, r5\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ b _0803C30C\n\
+_0803C306:\n\
+ lsrs r0, r5, 31\n\
+ adds r0, r5, r0\n\
+ asrs r5, r0, 1\n\
+_0803C30C:\n\
+ ldr r1, _0803C344 @ =0x02017100\n\
+ ldr r2, [sp, 0x10]\n\
+ lsls r0, r2, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0803C330\n\
+ mov r3, r9\n\
+ cmp r3, 0xA\n\
+ bne _0803C330\n\
+ lsls r0, r5, 4\n\
+ subs r0, r5\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+_0803C330:\n\
+ adds r0, r5, 0x2\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_0803C344: .4byte 0x02017100\n\
+ .syntax divided");
+}
+#endif