diff options
author | YamaArashi <shadow962@live.com> | 2016-12-30 23:51:48 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-12-30 23:55:03 -0800 |
commit | 35cbfc27c5896833e6b1d386841b4206b8f46e4d (patch) | |
tree | dab7e9b51e07aa6bd4a165830c0145931869023b | |
parent | 9f54b1951c95612d37fbf0212c8c09ab5948e5e2 (diff) |
nonmatching damage calc function
-rw-r--r-- | asm/calculate_base_damage.s | 1165 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/calculate_base_damage.c | 1482 |
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 |