summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-25 06:53:22 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-08-25 06:53:22 +0800
commit41a7e6967dd4fd79eb01a45f4d77cf7c2ca11dc1 (patch)
treeaceec00f83489b61f2eed7cb9c61f3b55370a2b2
parent29d7ae94dea8e35d098b60a786368f391324221e (diff)
thru atk14
-rw-r--r--asm/battle_script_commands.s5007
-rw-r--r--include/battle.h3
-rw-r--r--src/battle_script_commands.c1223
3 files changed, 1226 insertions, 5007 deletions
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
index 6d797fe69..f1d80c4fc 100644
--- a/asm/battle_script_commands.s
+++ b/asm/battle_script_commands.s
@@ -5,5013 +5,6 @@
.text
- thumb_func_start atk00_attackcanceler
-atk00_attackcanceler: @ 801D760
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- ldr r0, _0801D77C @ =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0
- beq _0801D784
- ldr r1, _0801D780 @ =gCurrentActionFuncId
- movs r0, 0xC
- strb r0, [r1]
- b _0801DAFC
- .align 2, 0
-_0801D77C: .4byte gBattleOutcome
-_0801D780: .4byte gCurrentActionFuncId
-_0801D784:
- ldr r2, _0801D7B4 @ =gBattleMons
- ldr r0, _0801D7B8 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x28]
- cmp r0, 0
- bne _0801D7C8
- ldr r2, _0801D7BC @ =gHitMarker
- ldr r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0801D7C8
- movs r0, 0x80
- lsls r0, 12
- orrs r1, r0
- str r1, [r2]
- ldr r1, _0801D7C0 @ =gBattlescriptCurrInstr
- ldr r0, _0801D7C4 @ =BattleScript_MoveEnd
- b _0801DAFA
- .align 2, 0
-_0801D7B4: .4byte gBattleMons
-_0801D7B8: .4byte gBattlerAttacker
-_0801D7BC: .4byte gHitMarker
-_0801D7C0: .4byte gBattlescriptCurrInstr
-_0801D7C4: .4byte BattleScript_MoveEnd
-_0801D7C8:
- bl AtkCanceller_UnableToUseMove
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801D7D6
- b _0801DAFC
-_0801D7D6:
- ldr r0, _0801D844 @ =gBattlerTarget
- ldrb r1, [r0]
- str r2, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- beq _0801D7EE
- b _0801DAFC
-_0801D7EE:
- ldr r4, _0801D848 @ =gBattleMons
- ldr r0, _0801D84C @ =gCurrMovePos
- ldrb r1, [r0]
- ldr r3, _0801D850 @ =gBattlerAttacker
- ldrb r2, [r3]
- movs r0, 0x58
- muls r2, r0
- adds r1, r2
- adds r0, r4, 0
- adds r0, 0x24
- adds r1, r0
- ldrb r0, [r1]
- ldr r5, _0801D854 @ =gHitMarker
- cmp r0, 0
- bne _0801D86C
- ldr r0, _0801D858 @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xA5
- beq _0801D86C
- ldr r0, [r5]
- ldr r1, _0801D85C @ =0x00800200
- ands r0, r1
- cmp r0, 0
- bne _0801D86C
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r2, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801D86C
- ldr r1, _0801D860 @ =gBattlescriptCurrInstr
- ldr r0, _0801D864 @ =BattleScript_NoPPForMove
- str r0, [r1]
- ldr r2, _0801D868 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- b _0801DAFC
- .align 2, 0
-_0801D844: .4byte gBattlerTarget
-_0801D848: .4byte gBattleMons
-_0801D84C: .4byte gCurrMovePos
-_0801D850: .4byte gBattlerAttacker
-_0801D854: .4byte gHitMarker
-_0801D858: .4byte gCurrentMove
-_0801D85C: .4byte 0x00800200
-_0801D860: .4byte gBattlescriptCurrInstr
-_0801D864: .4byte BattleScript_NoPPForMove
-_0801D868: .4byte gMoveResultFlags
-_0801D86C:
- ldr r0, [r5]
- ldr r1, _0801D8B0 @ =0xff7fffff
- ands r0, r1
- str r0, [r5]
- movs r6, 0x80
- lsls r6, 18
- ands r0, r6
- cmp r0, 0
- bne _0801D8C4
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r1, r4, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- bne _0801D8C4
- bl IsMonDisobedient
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _0801D8C4
- cmp r2, 0x2
- bne _0801D8B4
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- b _0801DAFC
- .align 2, 0
-_0801D8B0: .4byte 0xff7fffff
-_0801D8B4:
- ldr r0, _0801D8C0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801DAFC
- .align 2, 0
-_0801D8C0: .4byte gMoveResultFlags
-_0801D8C4:
- ldr r2, _0801D928 @ =gHitMarker
- ldr r0, [r2]
- movs r1, 0x80
- lsls r1, 18
- orrs r0, r1
- str r0, [r2]
- ldr r2, _0801D92C @ =gProtectStructs
- ldr r1, _0801D930 @ =gBattlerTarget
- ldrb r3, [r1]
- lsls r0, r3, 4
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 27
- mov r8, r1
- mov r9, r2
- cmp r0, 0
- bge _0801D94C
- ldr r2, _0801D934 @ =gBattleMoves
- ldr r0, _0801D938 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801D94C
- ldr r0, _0801D93C @ =gBattlerAttacker
- ldrb r0, [r0]
- ldr r2, _0801D940 @ =0x00000115
- adds r1, r3, 0
- bl PressurePPLose
- mov r0, r8
- ldrb r1, [r0]
- lsls r1, 4
- add r1, r9
- ldrb r2, [r1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- bl BattleScriptPushCursor
- ldr r1, _0801D944 @ =gBattlescriptCurrInstr
- ldr r0, _0801D948 @ =BattleScript_MagicCoatBounce
- b _0801DAFA
- .align 2, 0
-_0801D928: .4byte gHitMarker
-_0801D92C: .4byte gProtectStructs
-_0801D930: .4byte gBattlerTarget
-_0801D934: .4byte gBattleMoves
-_0801D938: .4byte gCurrentMove
-_0801D93C: .4byte gBattlerAttacker
-_0801D940: .4byte 0x00000115
-_0801D944: .4byte gBattlescriptCurrInstr
-_0801D948: .4byte BattleScript_MagicCoatBounce
-_0801D94C:
- movs r2, 0
- ldr r0, _0801D9C8 @ =gBattlersCount
- ldrb r0, [r0]
- cmp r2, r0
- bge _0801D98E
- ldr r6, _0801D9CC @ =gProtectStructs
- ldr r1, _0801D9D0 @ =gBattleMoves
- mov r12, r1
- adds r5, r0, 0
- ldr r7, _0801D9D4 @ =gBattlerByTurnOrder
-_0801D960:
- adds r4, r2, r7
- ldrb r3, [r4]
- lsls r0, r3, 4
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _0801D988
- ldr r0, _0801D9D8 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r1, [r0, 0x8]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801D988
- b _0801DAB4
-_0801D988:
- adds r2, 0x1
- cmp r2, r5
- blt _0801D960
-_0801D98E:
- ldr r0, _0801D9DC @ =gSpecialStatuses
- mov r1, r8
- ldrb r2, [r1]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r3, [r1]
- lsls r0, r3, 30
- cmp r0, 0
- bge _0801D9EC
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- strb r0, [r1]
- ldr r4, _0801D9E0 @ =gLastUsedAbility
- movs r0, 0x1F
- strb r0, [r4]
- bl BattleScriptPushCursor
- ldr r1, _0801D9E4 @ =gBattlescriptCurrInstr
- ldr r0, _0801D9E8 @ =BattleScript_TookAttack
- str r0, [r1]
- mov r1, r8
- ldrb r0, [r1]
- ldrb r1, [r4]
- bl RecordAbilityBattle
- b _0801DAFC
- .align 2, 0
-_0801D9C8: .4byte gBattlersCount
-_0801D9CC: .4byte gProtectStructs
-_0801D9D0: .4byte gBattleMoves
-_0801D9D4: .4byte gBattlerByTurnOrder
-_0801D9D8: .4byte gCurrentMove
-_0801D9DC: .4byte gSpecialStatuses
-_0801D9E0: .4byte gLastUsedAbility
-_0801D9E4: .4byte gBattlescriptCurrInstr
-_0801D9E8: .4byte BattleScript_TookAttack
-_0801D9EC:
- lsls r0, r2, 4
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0801D9FA
- b _0801DAF4
-_0801D9FA:
- ldr r1, _0801DA90 @ =gBattleMoves
- ldr r2, _0801DA94 @ =gCurrentMove
- ldrh r3, [r2]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- adds r4, r2, 0
- cmp r0, 0
- beq _0801DAF4
- cmp r3, 0xAE
- bne _0801DA38
- ldr r2, _0801DA98 @ =gBattleMons
- ldr r0, _0801DA9C @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x7
- beq _0801DA38
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, 0x7
- bne _0801DAF4
-_0801DA38:
- ldrh r0, [r4]
- bl IsTwoTurnsMove
- lsls r0, 24
- cmp r0, 0
- beq _0801DA5E
- ldr r1, _0801DA98 @ =gBattleMons
- ldr r0, _0801DA9C @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 5
- ands r0, r1
- cmp r0, 0
- beq _0801DAF4
-_0801DA5E:
- ldr r0, _0801DA9C @ =gBattlerAttacker
- ldrb r0, [r0]
- bl CancelMultiTurnMoves
- ldr r2, _0801DAA0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801DAA4 @ =gLastLandedMoves
- ldr r3, _0801DAA8 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801DAAC @ =gLastHitByType
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801DAB0 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801DAF4
- .align 2, 0
-_0801DA90: .4byte gBattleMoves
-_0801DA94: .4byte gCurrentMove
-_0801DA98: .4byte gBattleMons
-_0801DA9C: .4byte gBattlerAttacker
-_0801DAA0: .4byte gMoveResultFlags
-_0801DAA4: .4byte gLastLandedMoves
-_0801DAA8: .4byte gBattlerTarget
-_0801DAAC: .4byte gLastHitByType
-_0801DAB0: .4byte gBattleCommunication
-_0801DAB4:
- ldr r0, _0801DAE0 @ =gBattlerAttacker
- ldrb r0, [r0]
- ldr r2, _0801DAE4 @ =0x00000121
- adds r1, r3, 0
- bl PressurePPLose
- ldrb r1, [r4]
- lsls r1, 4
- adds r1, r6
- ldrb r2, [r1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, _0801DAE8 @ =gBattleScripting
- ldrb r0, [r4]
- strb r0, [r1, 0x17]
- bl BattleScriptPushCursor
- ldr r1, _0801DAEC @ =gBattlescriptCurrInstr
- ldr r0, _0801DAF0 @ =BattleScript_SnatchedMove
- b _0801DAFA
- .align 2, 0
-_0801DAE0: .4byte gBattlerAttacker
-_0801DAE4: .4byte 0x00000121
-_0801DAE8: .4byte gBattleScripting
-_0801DAEC: .4byte gBattlescriptCurrInstr
-_0801DAF0: .4byte BattleScript_SnatchedMove
-_0801DAF4:
- ldr r1, _0801DB0C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0801DAFA:
- str r0, [r1]
-_0801DAFC:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DB0C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk00_attackcanceler
-
- thumb_func_start JumpIfMoveFailed
-JumpIfMoveFailed: @ 801DB10
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r1, _0801DB5C @ =gBattlescriptCurrInstr
- ldr r5, [r1]
- adds r4, r5, r0
- ldr r0, _0801DB60 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801DB70
- ldr r1, _0801DB64 @ =gLastLandedMoves
- ldr r3, _0801DB68 @ =gBattlerTarget
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801DB6C @ =gLastHitByType
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldrb r4, [r5, 0x1]
- ldrb r0, [r5, 0x2]
- lsls r0, 8
- orrs r4, r0
- ldrb r0, [r5, 0x3]
- lsls r0, 16
- orrs r4, r0
- ldrb r0, [r5, 0x4]
- lsls r0, 24
- orrs r4, r0
- b _0801DB8A
- .align 2, 0
-_0801DB5C: .4byte gBattlescriptCurrInstr
-_0801DB60: .4byte gMoveResultFlags
-_0801DB64: .4byte gLastLandedMoves
-_0801DB68: .4byte gBattlerTarget
-_0801DB6C: .4byte gLastHitByType
-_0801DB70:
- bl TrySetDestinyBondToHappen
- ldr r0, _0801DB98 @ =gBattlerTarget
- ldrb r1, [r0]
- str r6, [sp]
- movs r0, 0x3
- movs r2, 0
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801DB8E
-_0801DB8A:
- ldr r0, _0801DB9C @ =gBattlescriptCurrInstr
- str r4, [r0]
-_0801DB8E:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801DB98: .4byte gBattlerTarget
-_0801DB9C: .4byte gBattlescriptCurrInstr
- thumb_func_end JumpIfMoveFailed
-
- thumb_func_start atk40_jumpifaffectedbyprotect
-atk40_jumpifaffectedbyprotect: @ 801DBA0
- push {lr}
- ldr r1, _0801DBE8 @ =gProtectStructs
- ldr r0, _0801DBEC @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801DC00
- ldr r2, _0801DBF0 @ =gBattleMoves
- ldr r0, _0801DBF4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801DC00
- ldr r2, _0801DBF8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x5
- movs r1, 0
- bl JumpIfMoveFailed
- ldr r1, _0801DBFC @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- b _0801DC08
- .align 2, 0
-_0801DBE8: .4byte gProtectStructs
-_0801DBEC: .4byte gBattlerTarget
-_0801DBF0: .4byte gBattleMoves
-_0801DBF4: .4byte gCurrentMove
-_0801DBF8: .4byte gMoveResultFlags
-_0801DBFC: .4byte gBattleCommunication
-_0801DC00:
- ldr r1, _0801DC0C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x5
- str r0, [r1]
-_0801DC08:
- pop {r0}
- bx r0
- .align 2, 0
-_0801DC0C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk40_jumpifaffectedbyprotect
-
- thumb_func_start JumpIfMoveAffectedByProtect
-JumpIfMoveAffectedByProtect: @ 801DC10
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r4, 0
- ldr r1, _0801DC64 @ =gProtectStructs
- ldr r0, _0801DC68 @ =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0801DC5C
- ldr r2, _0801DC6C @ =gBattleMoves
- ldr r0, _0801DC70 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x8]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801DC5C
- ldr r2, _0801DC74 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x7
- adds r1, r3, 0
- bl JumpIfMoveFailed
- ldr r1, _0801DC78 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x6]
- movs r4, 0x1
-_0801DC5C:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801DC64: .4byte gProtectStructs
-_0801DC68: .4byte gBattlerTarget
-_0801DC6C: .4byte gBattleMoves
-_0801DC70: .4byte gCurrentMove
-_0801DC74: .4byte gMoveResultFlags
-_0801DC78: .4byte gBattleCommunication
- thumb_func_end JumpIfMoveAffectedByProtect
-
- thumb_func_start AccuracyCalcHelper
-AccuracyCalcHelper: @ 801DC7C
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r2, _0801DCDC @ =gStatuses3
- ldr r3, _0801DCE0 @ =gBattlerTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- adds r6, r2, 0
- cmp r1, 0
- beq _0801DCAE
- ldr r1, _0801DCE4 @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801DCE8 @ =gBattlerAttacker
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801DD98
-_0801DCAE:
- ldr r0, _0801DCEC @ =gHitMarker
- ldr r1, [r0]
- movs r2, 0x80
- lsls r2, 9
- ands r1, r2
- adds r2, r0, 0
- cmp r1, 0
- bne _0801DCF4
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0801DCF4
-_0801DCCE:
- ldr r0, _0801DCF0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0]
- b _0801DD98
- .align 2, 0
-_0801DCDC: .4byte gStatuses3
-_0801DCE0: .4byte gBattlerTarget
-_0801DCE4: .4byte gDisableStructs
-_0801DCE8: .4byte gBattlerAttacker
-_0801DCEC: .4byte gHitMarker
-_0801DCF0: .4byte gMoveResultFlags
-_0801DCF4:
- ldr r0, [r2]
- ldr r1, _0801DDA4 @ =0xfffeffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 10
- ands r0, r1
- cmp r0, 0
- bne _0801DD16
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0801DCCE
-_0801DD16:
- ldr r0, [r2]
- ldr r1, _0801DDA8 @ =0xfffdffff
- ands r0, r1
- str r0, [r2]
- movs r1, 0x80
- lsls r1, 11
- ands r0, r1
- cmp r0, 0
- bne _0801DD36
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r6
- ldr r0, [r0]
- ands r0, r1
- cmp r0, 0
- bne _0801DCCE
-_0801DD36:
- ldr r0, [r2]
- ldr r1, _0801DDAC @ =0xfffbffff
- ands r0, r1
- str r0, [r2]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r5, 1
- cmp r0, 0
- bne _0801DD86
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801DD86
- ldr r0, _0801DDB0 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0801DD86
- ldr r0, _0801DDB4 @ =gBattleMoves
- adds r1, r4, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x98
- beq _0801DD98
-_0801DD86:
- ldr r1, _0801DDB4 @ =gBattleMoves
- adds r0, r4, r5
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x11
- beq _0801DD98
- cmp r0, 0x4E
- bne _0801DDB8
-_0801DD98:
- movs r0, 0x7
- adds r1, r5, 0
- bl JumpIfMoveFailed
- movs r0, 0x1
- b _0801DDBA
- .align 2, 0
-_0801DDA4: .4byte 0xfffeffff
-_0801DDA8: .4byte 0xfffdffff
-_0801DDAC: .4byte 0xfffbffff
-_0801DDB0: .4byte gBattleWeather
-_0801DDB4: .4byte gBattleMoves
-_0801DDB8:
- movs r0, 0
-_0801DDBA:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end AccuracyCalcHelper
-
- thumb_func_start atk01_accuracycheck
-atk01_accuracycheck: @ 801DDC4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _0801DE60 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r6, [r0, 0x5]
- ldrb r0, [r0, 0x6]
- lsls r0, 8
- orrs r6, r0
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801DE48
- movs r0, 0x1
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _0801DE12
- ldr r0, _0801DE68 @ =gBattleMoves
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801DE12
- ldr r0, _0801DE6C @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0801DE56
-_0801DE12:
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801DE48
- movs r0, 0x2
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- bne _0801DE48
- ldr r0, _0801DE68 @ =gBattleMoves
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801DE48
- ldr r0, _0801DE6C @ =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _0801DE56
-_0801DE48:
- ldr r0, _0801DE64 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- beq _0801DE70
-_0801DE56:
- movs r0, 0x7
- adds r1, r6, 0
- bl JumpIfMoveFailed
- b _0801E1C2
- .align 2, 0
-_0801DE60: .4byte gBattlescriptCurrInstr
-_0801DE64: .4byte gBattleTypeFlags
-_0801DE68: .4byte gBattleMoves
-_0801DE6C: .4byte gBattlerAttacker
-_0801DE70:
- adds r0, r6, 0x2
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0801DF0C
- ldr r2, _0801DED4 @ =gStatuses3
- ldr r3, _0801DED8 @ =gBattlerTarget
- ldrb r4, [r3]
- lsls r0, r4, 2
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x18
- ands r1, r0
- cmp r1, 0
- beq _0801DEA8
- ldr r0, _0801DEDC @ =0x0000ffff
- cmp r6, r0
- bne _0801DEA8
- ldr r1, _0801DEE0 @ =gDisableStructs
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- ldr r1, _0801DEE4 @ =gBattlerAttacker
- ldrb r0, [r0, 0x15]
- ldrb r1, [r1]
- cmp r0, r1
- beq _0801DEFE
-_0801DEA8:
- ldrb r0, [r3]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldr r1, _0801DEE8 @ =0x000400c0
- ands r0, r1
- cmp r0, 0
- beq _0801DEF0
- ldr r3, _0801DEEC @ =gBattlescriptCurrInstr
- ldr r2, [r3]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- str r1, [r3]
- b _0801E1C2
- .align 2, 0
-_0801DED4: .4byte gStatuses3
-_0801DED8: .4byte gBattlerTarget
-_0801DEDC: .4byte 0x0000ffff
-_0801DEE0: .4byte gDisableStructs
-_0801DEE4: .4byte gBattlerAttacker
-_0801DEE8: .4byte 0x000400c0
-_0801DEEC: .4byte gBattlescriptCurrInstr
-_0801DEF0:
- movs r0, 0
- bl JumpIfMoveAffectedByProtect
- lsls r0, 24
- cmp r0, 0
- beq _0801DEFE
- b _0801E1C2
-_0801DEFE:
- ldr r1, _0801DF08 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x7
- str r0, [r1]
- b _0801E1C2
- .align 2, 0
-_0801DF08: .4byte gBattlescriptCurrInstr
-_0801DF0C:
- cmp r6, 0
- bne _0801DF14
- ldr r0, _0801DF2C @ =gCurrentMove
- ldrh r6, [r0]
-_0801DF14:
- ldr r0, _0801DF30 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801DF34
- movs r1, 0x3F
- mov r10, r1
- mov r2, r10
- ands r2, r0
- mov r10, r2
- b _0801DF42
- .align 2, 0
-_0801DF2C: .4byte gCurrentMove
-_0801DF30: .4byte gBattleStruct
-_0801DF34:
- ldr r1, _0801DF88 @ =gBattleMoves
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- mov r10, r0
-_0801DF42:
- adds r0, r6, 0
- bl JumpIfMoveAffectedByProtect
- lsls r0, 24
- cmp r0, 0
- beq _0801DF50
- b _0801E1C2
-_0801DF50:
- adds r0, r6, 0
- bl AccuracyCalcHelper
- lsls r0, 24
- cmp r0, 0
- beq _0801DF5E
- b _0801E1C2
-_0801DF5E:
- ldr r3, _0801DF8C @ =gBattleMons
- ldr r0, _0801DF90 @ =gBattlerTarget
- ldrb r0, [r0]
- movs r2, 0x58
- adds r4, r0, 0
- muls r4, r2
- adds r0, r3, 0
- adds r0, 0x50
- adds r0, r4, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801DF98
- ldr r0, _0801DF94 @ =gBattlerAttacker
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r5, [r0, 0x1E]
- b _0801DFAE
- .align 2, 0
-_0801DF88: .4byte gBattleMoves
-_0801DF8C: .4byte gBattleMons
-_0801DF90: .4byte gBattlerTarget
-_0801DF94: .4byte gBattlerAttacker
-_0801DF98:
- ldr r0, _0801E0FC @ =gBattlerAttacker
- ldrb r0, [r0]
- muls r0, r2
- adds r0, r3
- ldrb r0, [r0, 0x1E]
- adds r0, 0x6
- adds r1, r4, r3
- ldrb r1, [r1, 0x1F]
- subs r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
-_0801DFAE:
- lsls r0, r5, 24
- cmp r0, 0
- bge _0801DFB6
- movs r5, 0
-_0801DFB6:
- lsls r0, r5, 24
- asrs r0, 24
- cmp r0, 0xC
- ble _0801DFC0
- movs r5, 0xC
-_0801DFC0:
- ldr r1, _0801E100 @ =gBattleMoves
- lsls r4, r6, 1
- adds r0, r4, r6
- lsls r0, 2
- adds r7, r0, r1
- ldrb r3, [r7, 0x3]
- mov r8, r3
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp, 0x4]
- cmp r0, 0
- bne _0801E012
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801E012
- ldr r0, _0801E104 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- beq _0801E012
- ldrb r0, [r7]
- cmp r0, 0x98
- bne _0801E012
- movs r0, 0x32
- mov r8, r0
-_0801E012:
- ldr r1, _0801E108 @ =sAccuracyStageRatios
- lsls r0, r5, 24
- asrs r0, 22
- adds r0, r1
- ldrb r1, [r0]
- mov r4, r8
- muls r4, r1
- ldrb r1, [r0, 0x1]
- adds r0, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r7, _0801E10C @ =gBattleMons
- ldr r0, _0801E0FC @ =gBattlerAttacker
- ldrb r0, [r0]
- movs r5, 0x58
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0xE
- bne _0801E050
- lsls r0, r4, 6
- adds r0, r4
- lsls r0, 1
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E050:
- movs r0, 0
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0xD
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0801E0A8
- str r0, [sp]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x4D
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- cmp r0, 0
- bne _0801E0A8
- ldr r0, _0801E110 @ =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r5
- adds r0, r7
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _0801E0A8
- ldr r0, _0801E104 @ =gBattleWeather
- ldrh r1, [r0]
- movs r0, 0x18
- ands r0, r1
- cmp r0, 0
- beq _0801E0A8
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E0A8:
- ldr r2, _0801E10C @ =gBattleMons
- ldr r0, _0801E0FC @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- mov r9, r2
- cmp r0, 0x37
- bne _0801E0D4
- mov r1, r10
- cmp r1, 0x8
- bhi _0801E0D4
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E0D4:
- ldr r2, _0801E110 @ =gBattlerTarget
- mov r8, r2
- ldrb r2, [r2]
- movs r7, 0x58
- adds r0, r2, 0
- muls r0, r7
- mov r3, r9
- adds r1, r0, r3
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801E118
- ldr r1, _0801E114 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r5, [r0, 0x7]
- ldrb r2, [r0, 0x1A]
- b _0801E134
- .align 2, 0
-_0801E0FC: .4byte gBattlerAttacker
-_0801E100: .4byte gBattleMoves
-_0801E104: .4byte gBattleWeather
-_0801E108: .4byte sAccuracyStageRatios
-_0801E10C: .4byte gBattleMons
-_0801E110: .4byte gBattlerTarget
-_0801E114: .4byte gEnigmaBerries
-_0801E118:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r5, r0, 24
- mov r1, r8
- ldrb r0, [r1]
- muls r0, r7
- add r0, r9
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r2, r0, 24
-_0801E134:
- ldr r0, _0801E198 @ =gPotentialItemEffectBattler
- ldr r1, _0801E19C @ =gBattlerTarget
- ldrb r1, [r1]
- strb r1, [r0]
- cmp r5, 0x16
- bne _0801E150
- movs r0, 0x64
- subs r0, r2
- muls r0, r4
- movs r1, 0x64
- bl __divsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_0801E150:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, 0x1
- cmp r0, r4
- ble _0801E1BA
- ldr r2, _0801E1A0 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _0801E1A4 @ =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801E1B0
- ldr r1, _0801E1A8 @ =gBattleMoves
- ldr r2, [sp, 0x4]
- adds r0, r2, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x6]
- cmp r0, 0x8
- beq _0801E192
- cmp r0, 0x20
- bne _0801E1B0
-_0801E192:
- ldr r1, _0801E1AC @ =gBattleCommunication
- movs r0, 0x2
- b _0801E1B4
- .align 2, 0
-_0801E198: .4byte gPotentialItemEffectBattler
-_0801E19C: .4byte gBattlerTarget
-_0801E1A0: .4byte gMoveResultFlags
-_0801E1A4: .4byte gBattleTypeFlags
-_0801E1A8: .4byte gBattleMoves
-_0801E1AC: .4byte gBattleCommunication
-_0801E1B0:
- ldr r1, _0801E1D4 @ =gBattleCommunication
- movs r0, 0
-_0801E1B4:
- strb r0, [r1, 0x6]
- bl CheckWonderGuardAndLevitate
-_0801E1BA:
- movs r0, 0x7
- adds r1, r6, 0
- bl JumpIfMoveFailed
-_0801E1C2:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E1D4: .4byte gBattleCommunication
- thumb_func_end atk01_accuracycheck
-
- thumb_func_start atk02_attackstring
-atk02_attackstring: @ 801E1D8
- push {r4,r5,lr}
- ldr r0, _0801E218 @ =gBattleControllerExecFlags
- ldr r5, [r0]
- cmp r5, 0
- bne _0801E210
- ldr r4, _0801E21C @ =gHitMarker
- ldr r0, [r4]
- movs r1, 0xC0
- lsls r1, 3
- ands r0, r1
- cmp r0, 0
- bne _0801E204
- ldr r0, _0801E220 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x4
- bl PrepareStringBattle
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 3
- orrs r0, r1
- str r0, [r4]
-_0801E204:
- ldr r0, _0801E224 @ =gBattlescriptCurrInstr
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- ldr r0, _0801E228 @ =gBattleCommunication
- strb r5, [r0, 0x7]
-_0801E210:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E218: .4byte gBattleControllerExecFlags
-_0801E21C: .4byte gHitMarker
-_0801E220: .4byte gBattlerAttacker
-_0801E224: .4byte gBattlescriptCurrInstr
-_0801E228: .4byte gBattleCommunication
- thumb_func_end atk02_attackstring
-
- thumb_func_start atk03_ppreduce
-atk03_ppreduce: @ 801E22C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r6, 0x1
- ldr r0, _0801E27C @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _0801E244
- b _0801E3DE
-_0801E244:
- ldr r1, _0801E280 @ =gSpecialStatuses
- ldr r2, _0801E284 @ =gBattlerAttacker
- ldrb r3, [r2]
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r4, r0, 31
- mov r9, r2
- cmp r4, 0
- bne _0801E2E6
- ldr r2, _0801E288 @ =gBattleMoves
- ldr r0, _0801E28C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x6]
- cmp r0, 0x20
- beq _0801E296
- cmp r0, 0x20
- bgt _0801E290
- cmp r0, 0x8
- beq _0801E2AC
- b _0801E2C6
- .align 2, 0
-_0801E27C: .4byte gBattleControllerExecFlags
-_0801E280: .4byte gSpecialStatuses
-_0801E284: .4byte gBattlerAttacker
-_0801E288: .4byte gBattleMoves
-_0801E28C: .4byte gCurrentMove
-_0801E290:
- cmp r0, 0x40
- beq _0801E2AC
- b _0801E2C6
-_0801E296:
- str r4, [sp]
- movs r0, 0x12
- adds r1, r3, 0
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0x1
- b _0801E2E6
-_0801E2AC:
- mov r0, r9
- ldrb r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x10
- movs r2, 0x2E
- movs r3, 0
- bl AbilityBattleEffects
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0
- b _0801E2E6
-_0801E2C6:
- ldr r1, _0801E348 @ =gBattlerTarget
- mov r2, r9
- ldrb r0, [r2]
- ldrb r7, [r1]
- cmp r0, r7
- beq _0801E2E6
- ldr r2, _0801E34C @ =gBattleMons
- ldrb r1, [r1]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x2E
- bne _0801E2E6
- adds r6, 0x1
-_0801E2E6:
- ldr r0, _0801E350 @ =gHitMarker
- ldr r4, [r0]
- movs r0, 0xA0
- lsls r0, 4
- ands r4, r0
- cmp r4, 0
- bne _0801E3CC
- ldr r2, _0801E34C @ =gBattleMons
- ldr r3, _0801E354 @ =gCurrMovePos
- ldr r1, _0801E358 @ =gBattlerAttacker
- ldrb r5, [r1]
- movs r0, 0x58
- mov r8, r0
- mov r0, r8
- muls r0, r5
- ldrb r7, [r3]
- adds r0, r7
- movs r7, 0x24
- adds r7, r2
- mov r12, r7
- add r0, r12
- ldrb r0, [r0]
- mov r9, r1
- mov r10, r2
- adds r7, r3, 0
- cmp r0, 0
- beq _0801E3CC
- ldr r0, _0801E35C @ =gProtectStructs
- lsls r1, r5, 4
- adds r1, r0
- ldrb r0, [r1, 0x2]
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x2]
- mov r1, r9
- ldrb r0, [r1]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- ldrb r1, [r7]
- adds r0, r1
- mov r1, r12
- adds r2, r0, r1
- ldrb r0, [r2]
- cmp r0, r6
- ble _0801E360
- subs r0, r6
- strb r0, [r2]
- b _0801E362
- .align 2, 0
-_0801E348: .4byte gBattlerTarget
-_0801E34C: .4byte gBattleMons
-_0801E350: .4byte gHitMarker
-_0801E354: .4byte gCurrMovePos
-_0801E358: .4byte gBattlerAttacker
-_0801E35C: .4byte gProtectStructs
-_0801E360:
- strb r4, [r2]
-_0801E362:
- mov r2, r9
- ldrb r3, [r2]
- movs r4, 0x58
- adds r0, r3, 0
- muls r0, r4
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- bne _0801E3CC
- ldr r1, _0801E3F0 @ =gDisableStructs
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x18]
- lsrs r1, 4
- ldr r2, _0801E3F4 @ =gBitTable
- ldrb r0, [r7]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0801E3CC
- ldr r0, _0801E3F8 @ =gActiveBattler
- strb r3, [r0]
- ldrb r1, [r7]
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- mov r2, r9
- ldrb r0, [r2]
- muls r0, r4
- mov r2, r10
- adds r2, 0x24
- adds r0, r2
- ldrb r7, [r7]
- adds r0, r7
- str r0, [sp]
- movs r0, 0
- movs r2, 0
- movs r3, 0x1
- bl BtlController_EmitSetMonData
- mov r7, r9
- ldrb r0, [r7]
- bl MarkBattlerForControllerExec
-_0801E3CC:
- ldr r2, _0801E3FC @ =gHitMarker
- ldr r0, [r2]
- ldr r1, _0801E400 @ =0xfffff7ff
- ands r0, r1
- str r0, [r2]
- ldr r1, _0801E404 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801E3DE:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E3F0: .4byte gDisableStructs
-_0801E3F4: .4byte gBitTable
-_0801E3F8: .4byte gActiveBattler
-_0801E3FC: .4byte gHitMarker
-_0801E400: .4byte 0xfffff7ff
-_0801E404: .4byte gBattlescriptCurrInstr
- thumb_func_end atk03_ppreduce
-
- thumb_func_start atk04_critcalc
-atk04_critcalc: @ 801E408
- push {r4-r7,lr}
- ldr r1, _0801E42C @ =gBattleMons
- ldr r0, _0801E430 @ =gBattlerAttacker
- ldrb r2, [r0]
- movs r0, 0x58
- muls r0, r2
- adds r0, r1
- ldrh r0, [r0, 0x2E]
- cmp r0, 0xAF
- bne _0801E438
- ldr r1, _0801E434 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r6, [r0, 0x7]
- b _0801E440
- .align 2, 0
-_0801E42C: .4byte gBattleMons
-_0801E430: .4byte gBattlerAttacker
-_0801E434: .4byte gEnigmaBerries
-_0801E438:
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r6, r0, 24
-_0801E440:
- ldr r1, _0801E4CC @ =gPotentialItemEffectBattler
- ldr r3, _0801E4D0 @ =gBattlerAttacker
- ldrb r0, [r3]
- strb r0, [r1]
- ldr r4, _0801E4D4 @ =gBattleMons
- ldrb r1, [r3]
- movs r0, 0x58
- adds r7, r1, 0
- muls r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r7, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- negs r0, r0
- asrs r5, r0, 31
- movs r0, 0x2
- ands r5, r0
- ldr r2, _0801E4D8 @ =gBattleMoves
- ldr r0, _0801E4DC @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- mov r12, r3
- cmp r1, 0x2B
- bne _0801E480
- adds r5, 0x1
-_0801E480:
- adds r0, r5, 0
- cmp r1, 0x4B
- bne _0801E488
- adds r0, 0x1
-_0801E488:
- cmp r1, 0xC8
- bne _0801E48E
- adds r0, 0x1
-_0801E48E:
- adds r2, r0, 0
- cmp r1, 0xD1
- bne _0801E496
- adds r2, 0x1
-_0801E496:
- movs r1, 0
- cmp r6, 0x3F
- bne _0801E4A6
- adds r0, r7, r4
- ldrh r0, [r0]
- cmp r0, 0x71
- bne _0801E4A6
- movs r1, 0x1
-_0801E4A6:
- lsls r5, r1, 1
- movs r3, 0
- cmp r6, 0x42
- bne _0801E4C0
- mov r0, r12
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0x53
- bne _0801E4C0
- movs r3, 0x1
-_0801E4C0:
- lsls r1, r3, 1
- cmp r6, 0x29
- bne _0801E4E0
- adds r0, r5, 0x1
- adds r0, r2, r0
- b _0801E4E2
- .align 2, 0
-_0801E4CC: .4byte gPotentialItemEffectBattler
-_0801E4D0: .4byte gBattlerAttacker
-_0801E4D4: .4byte gBattleMons
-_0801E4D8: .4byte gBattleMoves
-_0801E4DC: .4byte gCurrentMove
-_0801E4E0:
- adds r0, r2, r5
-_0801E4E2:
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- cmp r5, 0x4
- bls _0801E4F0
- movs r5, 0x4
-_0801E4F0:
- ldr r0, _0801E56C @ =gBattlerTarget
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x4
- beq _0801E580
- cmp r4, 0x4B
- beq _0801E580
- ldr r1, _0801E570 @ =gStatuses3
- mov r2, r12
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- ldr r4, _0801E574 @ =gBattleTypeFlags
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- bl Random
- ldr r2, _0801E578 @ =sCriticalHitChance
- lsls r1, r5, 1
- adds r1, r2
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1]
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _0801E580
- ldr r0, [r4]
- movs r1, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0801E55A
- movs r0, 0x1
- bl sub_80EB2E0
- lsls r0, 24
- cmp r0, 0
- beq _0801E580
-_0801E55A:
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 9
- ands r0, r1
- cmp r0, 0
- bne _0801E580
- ldr r1, _0801E57C @ =gCritMultiplier
- movs r0, 0x2
- b _0801E584
- .align 2, 0
-_0801E56C: .4byte gBattlerTarget
-_0801E570: .4byte gStatuses3
-_0801E574: .4byte gBattleTypeFlags
-_0801E578: .4byte sCriticalHitChance
-_0801E57C: .4byte gCritMultiplier
-_0801E580:
- ldr r1, _0801E594 @ =gCritMultiplier
- movs r0, 0x1
-_0801E584:
- strb r0, [r1]
- ldr r1, _0801E598 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E594: .4byte gCritMultiplier
-_0801E598: .4byte gBattlescriptCurrInstr
- thumb_func_end atk04_critcalc
-
- thumb_func_start atk05_damagecalc
-atk05_damagecalc: @ 801E59C
- push {r4-r7,lr}
- sub sp, 0x10
- ldr r4, _0801E654 @ =gSideStatuses
- ldr r5, _0801E658 @ =gBattlerTarget
- ldrb r0, [r5]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r6, _0801E65C @ =gBattlerAttacker
- ldrb r0, [r6]
- movs r4, 0x58
- muls r0, r4
- ldr r2, _0801E660 @ =gBattleMons
- adds r0, r2
- ldrb r1, [r5]
- muls r1, r4
- adds r1, r2
- ldr r7, _0801E664 @ =gCurrentMove
- ldrh r2, [r7]
- ldr r4, _0801E668 @ =gDynamicBasePower
- ldrh r4, [r4]
- str r4, [sp]
- ldr r4, _0801E66C @ =gBattleStruct
- ldr r4, [r4]
- ldrb r4, [r4, 0x13]
- str r4, [sp, 0x4]
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- ldrb r4, [r5]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801E670 @ =gBattleMoveDamage
- ldr r1, _0801E674 @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801E678 @ =gBattleScripting
- ldrb r0, [r0, 0xE]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801E67C @ =gStatuses3
- ldrb r0, [r6]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801E620
- ldr r2, _0801E680 @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801E620
- lsls r0, r3, 1
- str r0, [r4]
-_0801E620:
- ldr r1, _0801E684 @ =gProtectStructs
- ldr r0, _0801E65C @ =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 28
- cmp r0, 0
- bge _0801E642
- ldr r4, _0801E670 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801E642:
- ldr r1, _0801E688 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x10
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E654: .4byte gSideStatuses
-_0801E658: .4byte gBattlerTarget
-_0801E65C: .4byte gBattlerAttacker
-_0801E660: .4byte gBattleMons
-_0801E664: .4byte gCurrentMove
-_0801E668: .4byte gDynamicBasePower
-_0801E66C: .4byte gBattleStruct
-_0801E670: .4byte gBattleMoveDamage
-_0801E674: .4byte gCritMultiplier
-_0801E678: .4byte gBattleScripting
-_0801E67C: .4byte gStatuses3
-_0801E680: .4byte gBattleMoves
-_0801E684: .4byte gProtectStructs
-_0801E688: .4byte gBattlescriptCurrInstr
- thumb_func_end atk05_damagecalc
-
- thumb_func_start AI_CalcDmg
-AI_CalcDmg: @ 801E68C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r5, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _0801E744 @ =gSideStatuses
- adds r0, r5, 0
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- movs r1, 0x58
- adds r0, r7, 0
- muls r0, r1
- ldr r2, _0801E748 @ =gBattleMons
- adds r0, r2
- muls r1, r5
- adds r1, r2
- ldr r2, _0801E74C @ =gCurrentMove
- mov r8, r2
- ldrh r2, [r2]
- ldr r6, _0801E750 @ =gDynamicBasePower
- ldrh r4, [r6]
- str r4, [sp]
- ldr r4, _0801E754 @ =gBattleStruct
- ldr r4, [r4]
- ldrb r4, [r4, 0x13]
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- str r5, [sp, 0xC]
- bl CalculateBaseDamage
- ldr r4, _0801E758 @ =gBattleMoveDamage
- movs r1, 0
- strh r1, [r6]
- ldr r1, _0801E75C @ =gCritMultiplier
- ldrb r1, [r1]
- muls r1, r0
- ldr r0, _0801E760 @ =gBattleScripting
- ldrb r0, [r0, 0xE]
- adds r3, r1, 0
- muls r3, r0
- str r3, [r4]
- ldr r1, _0801E764 @ =gStatuses3
- lsls r0, r7, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0801E71A
- ldr r2, _0801E768 @ =gBattleMoves
- mov r0, r8
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0801E71A
- lsls r0, r3, 1
- str r0, [r4]
-_0801E71A:
- ldr r0, _0801E76C @ =gProtectStructs
- lsls r1, r7, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0801E738
- ldr r4, _0801E758 @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801E738:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801E744: .4byte gSideStatuses
-_0801E748: .4byte gBattleMons
-_0801E74C: .4byte gCurrentMove
-_0801E750: .4byte gDynamicBasePower
-_0801E754: .4byte gBattleStruct
-_0801E758: .4byte gBattleMoveDamage
-_0801E75C: .4byte gCritMultiplier
-_0801E760: .4byte gBattleScripting
-_0801E764: .4byte gStatuses3
-_0801E768: .4byte gBattleMoves
-_0801E76C: .4byte gProtectStructs
- thumb_func_end AI_CalcDmg
-
- thumb_func_start ModulateDmgByType
-ModulateDmgByType: @ 801E770
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r5, _0801E7A0 @ =gBattleMoveDamage
- ldr r0, [r5]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r5]
- cmp r0, 0
- bne _0801E790
- cmp r4, 0
- beq _0801E790
- movs r0, 0x1
- str r0, [r5]
-_0801E790:
- cmp r4, 0x5
- beq _0801E7C0
- cmp r4, 0x5
- bgt _0801E7A4
- cmp r4, 0
- beq _0801E7AA
- b _0801E842
- .align 2, 0
-_0801E7A0: .4byte gBattleMoveDamage
-_0801E7A4:
- cmp r4, 0x14
- beq _0801E800
- b _0801E842
-_0801E7AA:
- ldr r2, _0801E7BC @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E7BC: .4byte gMoveResultFlags
-_0801E7C0:
- ldr r2, _0801E7F0 @ =gBattleMoves
- ldr r0, _0801E7F4 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801E842
- ldr r2, _0801E7F8 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801E842
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801E7FC
- movs r0, 0xFD
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E7F0: .4byte gBattleMoves
-_0801E7F4: .4byte gCurrentMove
-_0801E7F8: .4byte gMoveResultFlags
-_0801E7FC:
- movs r0, 0x4
- b _0801E83E
-_0801E800:
- ldr r2, _0801E830 @ =gBattleMoves
- ldr r0, _0801E834 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801E842
- ldr r2, _0801E838 @ =gMoveResultFlags
- ldrb r1, [r2]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801E842
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801E83C
- movs r0, 0xFB
- ands r0, r1
- b _0801E840
- .align 2, 0
-_0801E830: .4byte gBattleMoves
-_0801E834: .4byte gCurrentMove
-_0801E838: .4byte gMoveResultFlags
-_0801E83C:
- movs r0, 0x2
-_0801E83E:
- orrs r0, r1
-_0801E840:
- strb r0, [r2]
-_0801E842:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end ModulateDmgByType
-
- thumb_func_start atk06_typecalc
-atk06_typecalc: @ 801E848
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0
- ldr r1, _0801E870 @ =gCurrentMove
- ldrh r0, [r1]
- cmp r0, 0xA5
- bne _0801E85C
- b _0801EA70
-_0801E85C:
- ldr r0, _0801E874 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801E878
- movs r1, 0x3F
- mov r8, r1
- ands r1, r0
- mov r8, r1
- b _0801E888
- .align 2, 0
-_0801E870: .4byte gCurrentMove
-_0801E874: .4byte gBattleStruct
-_0801E878:
- ldr r2, _0801E910 @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r8, r0
-_0801E888:
- ldr r2, _0801E914 @ =gBattleMons
- ldr r0, _0801E918 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x21
- ldrb r0, [r0]
- adds r5, r2, 0
- cmp r0, r8
- beq _0801E8AA
- adds r0, r1, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801E8C0
-_0801E8AA:
- ldr r4, _0801E91C @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- str r3, [sp, 0x4]
- bl __divsi3
- str r0, [r4]
- ldr r3, [sp, 0x4]
-_0801E8C0:
- ldr r2, _0801E920 @ =gBattlerTarget
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- adds r4, r2, 0
- cmp r0, 0x1A
- bne _0801E938
- mov r1, r8
- cmp r1, 0x4
- bne _0801E938
- ldr r3, _0801E924 @ =gLastUsedAbility
- strb r0, [r3]
- ldr r2, _0801E928 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x9
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801E92C @ =gLastLandedMoves
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801E930 @ =gLastHitByType
- ldrb r0, [r4]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r0, _0801E934 @ =gBattleCommunication
- mov r1, r8
- strb r1, [r0, 0x6]
- ldrb r0, [r4]
- ldrb r1, [r3]
- bl RecordAbilityBattle
- b _0801E9D4
- .align 2, 0
-_0801E910: .4byte gBattleMoves
-_0801E914: .4byte gBattleMons
-_0801E918: .4byte gBattlerAttacker
-_0801E91C: .4byte gBattleMoveDamage
-_0801E920: .4byte gBattlerTarget
-_0801E924: .4byte gLastUsedAbility
-_0801E928: .4byte gMoveResultFlags
-_0801E92C: .4byte gLastLandedMoves
-_0801E930: .4byte gLastHitByType
-_0801E934: .4byte gBattleCommunication
-_0801E938:
- ldr r1, _0801E944 @ =gTypeEffectiveness
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- b _0801E9B4
- .align 2, 0
-_0801E944: .4byte gTypeEffectiveness
-_0801E948:
- adds r3, 0x3
- b _0801E9B0
-_0801E94C:
- ldr r5, _0801EA84 @ =gTypeEffectiveness
- adds r0, r3, r5
- ldrb r0, [r0]
- cmp r0, r8
- bne _0801E9A8
- adds r1, r3, 0x1
- adds r1, r5
- ldr r2, _0801EA88 @ =gBattleMons
- ldr r7, _0801EA8C @ =gBattlerTarget
- ldrb r0, [r7]
- movs r6, 0x58
- muls r0, r6
- adds r0, r2
- adds r0, 0x21
- ldrb r4, [r1]
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801E982
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r2, [sp]
- str r3, [sp, 0x4]
- bl ModulateDmgByType
- ldr r3, [sp, 0x4]
- ldr r2, [sp]
-_0801E982:
- ldrb r0, [r7]
- muls r0, r6
- adds r0, r2
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r1, [r1]
- cmp r4, r1
- bne _0801E9A8
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r4
- beq _0801E9A8
- adds r0, r3, 0x2
- adds r0, r5
- ldrb r0, [r0]
- str r3, [sp, 0x4]
- bl ModulateDmgByType
- ldr r3, [sp, 0x4]
-_0801E9A8:
- adds r3, 0x3
- ldr r5, _0801EA88 @ =gBattleMons
- ldr r4, _0801EA8C @ =gBattlerTarget
- ldr r2, _0801EA84 @ =gTypeEffectiveness
-_0801E9B0:
- adds r0, r3, r2
- ldrb r0, [r0]
-_0801E9B4:
- cmp r0, 0xFF
- beq _0801E9D4
- cmp r0, 0xFE
- bne _0801E94C
- ldrb r1, [r4]
- movs r0, 0x58
- muls r0, r1
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801E948
-_0801E9D4:
- ldr r2, _0801EA88 @ =gBattleMons
- ldr r5, _0801EA8C @ =gBattlerTarget
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r6, [r0]
- cmp r6, 0x19
- bne _0801EA52
- ldr r0, _0801EA90 @ =gBattlerAttacker
- ldrb r0, [r0]
- ldr r7, _0801EA94 @ =gCurrentMove
- ldrh r1, [r7]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801EA52
- ldr r1, _0801EA98 @ =gMoveResultFlags
- mov r8, r1
- ldrb r4, [r1]
- ands r0, r4
- cmp r0, 0
- beq _0801EA10
- movs r0, 0x6
- ands r0, r4
- cmp r0, 0x6
- bne _0801EA52
-_0801EA10:
- ldr r2, _0801EA9C @ =gBattleMoves
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801EA52
- ldr r3, _0801EAA0 @ =gLastUsedAbility
- strb r6, [r3]
- movs r0, 0x1
- orrs r0, r4
- mov r1, r8
- strb r0, [r1]
- ldr r1, _0801EAA4 @ =gLastLandedMoves
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- movs r2, 0
- strh r2, [r0]
- ldr r1, _0801EAA8 @ =gLastHitByType
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r1
- strh r2, [r0]
- ldr r1, _0801EAAC @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- ldrb r0, [r5]
- ldrb r1, [r3]
- bl RecordAbilityBattle
-_0801EA52:
- ldr r0, _0801EA98 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0801EA70
- ldr r2, _0801EAB0 @ =gProtectStructs
- ldr r0, _0801EA90 @ =gBattlerAttacker
- ldrb r1, [r0]
- lsls r1, 4
- adds r1, r2
- ldrb r0, [r1, 0x1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1, 0x1]
-_0801EA70:
- ldr r1, _0801EAB4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801EA84: .4byte gTypeEffectiveness
-_0801EA88: .4byte gBattleMons
-_0801EA8C: .4byte gBattlerTarget
-_0801EA90: .4byte gBattlerAttacker
-_0801EA94: .4byte gCurrentMove
-_0801EA98: .4byte gMoveResultFlags
-_0801EA9C: .4byte gBattleMoves
-_0801EAA0: .4byte gLastUsedAbility
-_0801EAA4: .4byte gLastLandedMoves
-_0801EAA8: .4byte gLastHitByType
-_0801EAAC: .4byte gBattleCommunication
-_0801EAB0: .4byte gProtectStructs
-_0801EAB4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk06_typecalc
-
- thumb_func_start CheckWonderGuardAndLevitate
-CheckWonderGuardAndLevitate: @ 801EAB8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r6, 0
- movs r5, 0
- ldr r0, _0801EAF8 @ =gCurrentMove
- ldrh r1, [r0]
- mov r9, r0
- cmp r1, 0xA5
- bne _0801EAD0
- b _0801ED18
-_0801EAD0:
- ldr r2, _0801EAFC @ =gBattleMoves
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- bne _0801EAE2
- b _0801ED18
-_0801EAE2:
- ldr r0, _0801EB00 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _0801EB04
- movs r1, 0x3F
- mov r12, r1
- mov r2, r12
- ands r2, r0
- mov r12, r2
- b _0801EB08
- .align 2, 0
-_0801EAF8: .4byte gCurrentMove
-_0801EAFC: .4byte gBattleMoves
-_0801EB00: .4byte gBattleStruct
-_0801EB04:
- ldrb r1, [r1, 0x2]
- mov r12, r1
-_0801EB08:
- ldr r2, _0801EB3C @ =gBattleMons
- ldr r3, _0801EB40 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x20
- ldrb r1, [r0]
- adds r7, r2, 0
- mov r8, r3
- cmp r1, 0x1A
- bne _0801EB4C
- mov r0, r12
- cmp r0, 0x4
- bne _0801EB4C
- ldr r0, _0801EB44 @ =gLastUsedAbility
- strb r1, [r0]
- ldr r0, _0801EB48 @ =gBattleCommunication
- mov r1, r12
- strb r1, [r0, 0x6]
- ldrb r0, [r3]
- movs r1, 0x1A
- bl RecordAbilityBattle
- b _0801ED18
- .align 2, 0
-_0801EB3C: .4byte gBattleMons
-_0801EB40: .4byte gBattlerTarget
-_0801EB44: .4byte gLastUsedAbility
-_0801EB48: .4byte gBattleCommunication
-_0801EB4C:
- ldr r1, _0801EB58 @ =gTypeEffectiveness
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r4, r1, 0
- b _0801EC9E
- .align 2, 0
-_0801EB58: .4byte gTypeEffectiveness
-_0801EB5C:
- adds r0, r5, r4
- ldrb r0, [r0]
- cmp r0, r12
- beq _0801EB66
- b _0801EC98
-_0801EB66:
- adds r2, r5, 0x1
- adds r3, r2, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r3]
- adds r3, r2, 0
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EBA6
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801EBA6
- ldr r2, _0801ED24 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801ED28 @ =gProtectStructs
- ldr r0, _0801ED2C @ =gBattlerAttacker
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801EBA6:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EBEC
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EBEC
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _0801EBEC
- ldr r2, _0801ED24 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801ED28 @ =gProtectStructs
- ldr r0, _0801ED2C @ =gBattlerAttacker
- ldrb r2, [r0]
- lsls r2, 4
- adds r2, r1
- ldrb r0, [r2, 0x1]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2, 0x1]
-_0801EBEC:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EC10
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801EC10
- movs r0, 0x1
- orrs r6, r0
-_0801EC10:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EC3E
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EC3E
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x14
- bne _0801EC3E
- movs r0, 0x1
- orrs r6, r0
-_0801EC3E:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x21
- ldrb r1, [r2]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0801EC66
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801EC66
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801EC66:
- adds r2, r3, r4
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r1, r0, 0
- adds r1, 0x22
- ldrb r2, [r2]
- ldrb r1, [r1]
- cmp r2, r1
- bne _0801EC98
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, r2
- beq _0801EC98
- adds r0, r5, 0x2
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x5
- bne _0801EC98
- movs r0, 0x2
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_0801EC98:
- adds r5, 0x3
- adds r0, r5, r4
- ldrb r0, [r0]
-_0801EC9E:
- cmp r0, 0xFF
- beq _0801ECC2
- cmp r0, 0xFE
- beq _0801ECA8
- b _0801EB5C
-_0801ECA8:
- mov r2, r8
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- adds r1, r7, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801EC98
-_0801ECC2:
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r7
- adds r0, 0x20
- ldrb r4, [r0]
- cmp r4, 0x19
- bne _0801ED18
- ldr r0, _0801ED2C @ =gBattlerAttacker
- ldrb r0, [r0]
- mov r2, r9
- ldrh r1, [r2]
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0801ED18
- movs r0, 0x3
- ands r6, r0
- cmp r6, 0x1
- beq _0801ED18
- ldr r2, _0801ED30 @ =gBattleMoves
- mov r0, r9
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0801ED18
- ldr r0, _0801ED34 @ =gLastUsedAbility
- strb r4, [r0]
- ldr r1, _0801ED38 @ =gBattleCommunication
- movs r0, 0x3
- strb r0, [r1, 0x6]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x19
- bl RecordAbilityBattle
-_0801ED18:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801ED24: .4byte gMoveResultFlags
-_0801ED28: .4byte gProtectStructs
-_0801ED2C: .4byte gBattlerAttacker
-_0801ED30: .4byte gBattleMoves
-_0801ED34: .4byte gLastUsedAbility
-_0801ED38: .4byte gBattleCommunication
- thumb_func_end CheckWonderGuardAndLevitate
-
- thumb_func_start ModulateDmgByType2
-ModulateDmgByType2: @ 801ED3C
- push {r4-r7,lr}
- adds r6, r2, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r7, _0801ED70 @ =gBattleMoveDamage
- ldr r0, [r7]
- muls r0, r4
- movs r1, 0xA
- bl __divsi3
- str r0, [r7]
- cmp r0, 0
- bne _0801ED62
- cmp r4, 0
- beq _0801ED62
- movs r0, 0x1
- str r0, [r7]
-_0801ED62:
- cmp r4, 0x5
- beq _0801ED8A
- cmp r4, 0x5
- bgt _0801ED74
- cmp r4, 0
- beq _0801ED7A
- b _0801EDEE
- .align 2, 0
-_0801ED70: .4byte gBattleMoveDamage
-_0801ED74:
- cmp r4, 0x14
- beq _0801EDBC
- b _0801EDEE
-_0801ED7A:
- ldrb r0, [r6]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0xFB
- ands r0, r1
- movs r1, 0xFD
- ands r0, r1
- b _0801EDEC
-_0801ED8A:
- ldr r0, _0801EDB4 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EDEE
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801EDEE
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801EDB8
- movs r0, 0xFD
- ands r0, r1
- b _0801EDEC
- .align 2, 0
-_0801EDB4: .4byte gBattleMoves
-_0801EDB8:
- movs r0, 0x4
- b _0801EDEA
-_0801EDBC:
- ldr r0, _0801EDE4 @ =gBattleMoves
- lsls r1, r5, 1
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EDEE
- ldrb r1, [r6]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801EDEE
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801EDE8
- movs r0, 0xFB
- ands r0, r1
- b _0801EDEC
- .align 2, 0
-_0801EDE4: .4byte gBattleMoves
-_0801EDE8:
- movs r0, 0x2
-_0801EDEA:
- orrs r0, r1
-_0801EDEC:
- strb r0, [r6]
-_0801EDEE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ModulateDmgByType2
-
- thumb_func_start TypeCalc
-TypeCalc: @ 801EDF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp, 0x4]
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- movs r0, 0
- mov r8, r0
- mov r0, sp
- mov r1, r8
- strb r1, [r0]
- mov r2, r10
- cmp r2, 0xA5
- bne _0801EE26
- movs r0, 0
- b _0801EFAE
-_0801EE26:
- ldr r1, _0801EE94 @ =gBattleMoves
- mov r3, r10
- lsls r2, r3, 1
- adds r0, r2, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x2]
- str r0, [sp, 0x8]
- ldr r1, _0801EE98 @ =gBattleMons
- movs r0, 0x58
- ldr r3, [sp, 0x4]
- muls r0, r3
- adds r3, r0, r1
- adds r0, r3, 0
- adds r0, 0x21
- ldrb r0, [r0]
- str r2, [sp, 0xC]
- adds r5, r1, 0
- ldr r1, [sp, 0x8]
- cmp r0, r1
- beq _0801EE5A
- adds r0, r3, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r0, r1
- bne _0801EE6C
-_0801EE5A:
- ldr r4, _0801EE9C @ =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- str r0, [r4]
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0801EE6C:
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x1A
- bne _0801EEA0
- ldr r3, [sp, 0x8]
- cmp r3, 0x4
- bne _0801EEA0
- movs r1, 0x9
- mov r0, sp
- ldrb r0, [r0]
- orrs r0, r1
- mov r1, sp
- strb r0, [r1]
- b _0801EF50
- .align 2, 0
-_0801EE94: .4byte gBattleMoves
-_0801EE98: .4byte gBattleMons
-_0801EE9C: .4byte gBattleMoveDamage
-_0801EEA0:
- ldr r1, _0801EEBC @ =gTypeEffectiveness
- mov r2, r8
- adds r0, r2, r1
- ldrb r0, [r0]
- adds r2, r1, 0
- cmp r0, 0xFF
- beq _0801EF50
- cmp r0, 0xFE
- bne _0801EEC6
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- b _0801EF3E
- .align 2, 0
-_0801EEBC: .4byte gTypeEffectiveness
-_0801EEC0:
- movs r0, 0x3
- add r8, r0
- b _0801EF28
-_0801EEC6:
- ldr r7, _0801EFC0 @ =gTypeEffectiveness
- mov r1, r8
- adds r0, r1, r7
- ldrb r0, [r0]
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _0801EF20
- adds r1, 0x1
- adds r1, r7
- ldr r2, _0801EFC4 @ =gBattleMons
- movs r0, 0x58
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- adds r5, r0, r2
- adds r6, r5, 0
- adds r6, 0x21
- ldrb r4, [r1]
- ldrb r0, [r6]
- cmp r4, r0
- bne _0801EF00
- mov r0, r8
- adds r0, 0x2
- adds r0, r7
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- bl ModulateDmgByType2
-_0801EF00:
- adds r0, r5, 0
- adds r0, 0x22
- ldrb r0, [r0]
- cmp r4, r0
- bne _0801EF20
- ldrb r0, [r6]
- cmp r0, r4
- beq _0801EF20
- mov r0, r8
- adds r0, 0x2
- adds r0, r7
- ldrb r0, [r0]
- mov r1, r10
- mov r2, sp
- bl ModulateDmgByType2
-_0801EF20:
- movs r1, 0x3
- add r8, r1
- ldr r5, _0801EFC4 @ =gBattleMons
- ldr r2, _0801EFC0 @ =gTypeEffectiveness
-_0801EF28:
- mov r3, r8
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _0801EF50
- cmp r0, 0xFE
- bne _0801EEC6
- movs r0, 0x58
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
-_0801EF3E:
- adds r1, r5, 0
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 22
- ands r0, r1
- cmp r0, 0
- beq _0801EEC0
-_0801EF50:
- movs r0, 0x58
- mov r2, r9
- muls r2, r0
- adds r0, r2, 0
- adds r0, r5
- adds r0, 0x20
- ldrb r0, [r0]
- cmp r0, 0x19
- bne _0801EFAA
- mov r0, sp
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0801EFAA
- ldr r0, [sp, 0x4]
- mov r1, r10
- bl AttacksThisTurn
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x2
- bne _0801EFAA
- mov r0, sp
- ldrb r3, [r0]
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0801EF92
- movs r0, 0x6
- ands r0, r3
- cmp r0, 0x6
- bne _0801EFAA
-_0801EF92:
- ldr r0, _0801EFC8 @ =gBattleMoves
- ldr r1, [sp, 0xC]
- add r1, r10
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801EFAA
- mov r0, sp
- movs r1, 0x1
- orrs r1, r3
- strb r1, [r0]
-_0801EFAA:
- mov r0, sp
- ldrb r0, [r0]
-_0801EFAE:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801EFC0: .4byte gTypeEffectiveness
-_0801EFC4: .4byte gBattleMons
-_0801EFC8: .4byte gBattleMoves
- thumb_func_end TypeCalc
-
- thumb_func_start AI_TypeCalc
-AI_TypeCalc: @ 801EFCC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x4]
- movs r7, 0
- mov r0, sp
- strb r7, [r0]
- ldr r2, _0801F008 @ =gBaseStats
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- mov r9, r1
- ldrb r0, [r0, 0x7]
- mov r8, r0
- cmp r6, 0xA5
- bne _0801F00C
- movs r0, 0
- b _0801F0B0
- .align 2, 0
-_0801F008: .4byte gBaseStats
-_0801F00C:
- ldr r2, _0801F030 @ =gBattleMoves
- lsls r1, r6, 1
- adds r0, r1, r6
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- mov r10, r0
- str r1, [sp, 0x8]
- ldr r3, [sp, 0x4]
- cmp r3, 0x1A
- bne _0801F034
- cmp r0, 0x4
- bne _0801F034
- movs r1, 0x9
- mov r0, sp
- strb r1, [r0]
- b _0801F07A
- .align 2, 0
-_0801F030: .4byte gBattleMoves
-_0801F034:
- ldr r0, _0801F0C0 @ =gTypeEffectiveness
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0801F07A
- adds r4, r1, 0
-_0801F040:
- ldrb r0, [r4]
- cmp r0, 0xFE
- beq _0801F06C
- cmp r0, r10
- bne _0801F06C
- ldrb r5, [r4, 0x1]
- cmp r5, r9
- bne _0801F05A
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl ModulateDmgByType2
-_0801F05A:
- cmp r5, r8
- bne _0801F06C
- cmp r9, r8
- beq _0801F06C
- ldrb r0, [r4, 0x2]
- adds r1, r6, 0
- mov r2, sp
- bl ModulateDmgByType2
-_0801F06C:
- adds r4, 0x3
- adds r7, 0x3
- ldr r1, _0801F0C0 @ =gTypeEffectiveness
- adds r0, r7, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0801F040
-_0801F07A:
- ldr r3, [sp, 0x4]
- cmp r3, 0x19
- bne _0801F0AC
- mov r0, sp
- ldrb r2, [r0]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0801F094
- movs r0, 0x6
- ands r0, r2
- cmp r0, 0x6
- bne _0801F0AC
-_0801F094:
- ldr r0, _0801F0C4 @ =gBattleMoves
- ldr r3, [sp, 0x8]
- adds r1, r3, r6
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0x1]
- cmp r0, 0
- beq _0801F0AC
- mov r0, sp
- movs r1, 0x8
- orrs r1, r2
- strb r1, [r0]
-_0801F0AC:
- mov r0, sp
- ldrb r0, [r0]
-_0801F0B0:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0801F0C0: .4byte gTypeEffectiveness
-_0801F0C4: .4byte gBattleMoves
- thumb_func_end AI_TypeCalc
-
- thumb_func_start Unused_ApplyRandomDmgMultiplier
-Unused_ApplyRandomDmgMultiplier: @ 801F0C8
- push {r4,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F100 @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F0FA
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F0FA
- movs r0, 0x1
- str r0, [r4]
-_0801F0FA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F100: .4byte gBattleMoveDamage
- thumb_func_end Unused_ApplyRandomDmgMultiplier
-
- thumb_func_start atk07_adjustnormaldamage
-atk07_adjustnormaldamage: @ 801F104
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F15C @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F136
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F136
- movs r0, 0x1
- str r0, [r4]
-_0801F136:
- ldr r7, _0801F160 @ =gBattleMons
- ldr r6, _0801F164 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801F16C
- ldr r1, _0801F168 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801F186
- .align 2, 0
-_0801F15C: .4byte gBattleMoveDamage
-_0801F160: .4byte gBattleMons
-_0801F164: .4byte gBattlerTarget
-_0801F168: .4byte gEnigmaBerries
-_0801F16C:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801F186:
- ldr r1, _0801F248 @ =gPotentialItemEffectBattler
- ldr r5, _0801F24C @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801F1C4
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801F1C4
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemEffectBattle
- ldr r2, _0801F250 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801F1C4:
- ldr r2, _0801F254 @ =gBattleMons
- ldr r3, _0801F24C @ =gBattlerTarget
- ldrb r4, [r3]
- movs r0, 0x58
- muls r0, r4
- adds r1, r2, 0
- adds r1, 0x50
- adds r0, r1
- ldr r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- ands r1, r0
- adds r5, r2, 0
- cmp r1, 0
- bne _0801F294
- ldr r2, _0801F258 @ =gBattleMoves
- ldr r0, _0801F25C @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x65
- beq _0801F216
- ldr r0, _0801F260 @ =gProtectStructs
- lsls r1, r4, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0801F216
- ldr r0, _0801F250 @ =gSpecialStatuses
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F294
-_0801F216:
- ldrb r0, [r3]
- movs r4, 0x58
- muls r0, r4
- adds r0, r5
- ldrh r1, [r0, 0x28]
- ldr r2, _0801F264 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801F294
- subs r0, r1, 0x1
- str r0, [r2]
- ldr r1, _0801F260 @ =gProtectStructs
- ldrb r3, [r3]
- lsls r0, r3, 4
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801F26C
- ldr r0, _0801F268 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801F294
- .align 2, 0
-_0801F248: .4byte gPotentialItemEffectBattler
-_0801F24C: .4byte gBattlerTarget
-_0801F250: .4byte gSpecialStatuses
-_0801F254: .4byte gBattleMons
-_0801F258: .4byte gBattleMoves
-_0801F25C: .4byte gCurrentMove
-_0801F260: .4byte gProtectStructs
-_0801F264: .4byte gBattleMoveDamage
-_0801F268: .4byte gMoveResultFlags
-_0801F26C:
- ldr r0, _0801F2A4 @ =gSpecialStatuses
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F294
- ldr r2, _0801F2A8 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801F2AC @ =gLastUsedItem
- adds r0, r3, 0
- muls r0, r4
- adds r0, r5
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801F294:
- ldr r1, _0801F2B0 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F2A4: .4byte gSpecialStatuses
-_0801F2A8: .4byte gMoveResultFlags
-_0801F2AC: .4byte gLastUsedItem
-_0801F2B0: .4byte gBattlescriptCurrInstr
- thumb_func_end atk07_adjustnormaldamage
-
- thumb_func_start atk08_adjustnormaldamage2
-atk08_adjustnormaldamage2: @ 801F2B4
- push {r4-r7,lr}
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x64
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, _0801F30C @ =gBattleMoveDamage
- ldr r0, [r4]
- cmp r0, 0
- beq _0801F2E6
- muls r0, r1
- str r0, [r4]
- movs r1, 0x64
- bl __divsi3
- str r0, [r4]
- cmp r0, 0
- bne _0801F2E6
- movs r0, 0x1
- str r0, [r4]
-_0801F2E6:
- ldr r7, _0801F310 @ =gBattleMons
- ldr r6, _0801F314 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r5, 0x58
- adds r0, r2, 0
- muls r0, r5
- adds r1, r0, r7
- ldrh r0, [r1, 0x2E]
- cmp r0, 0xAF
- bne _0801F31C
- ldr r1, _0801F318 @ =gEnigmaBerries
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x7]
- ldrb r6, [r0, 0x1A]
- b _0801F336
- .align 2, 0
-_0801F30C: .4byte gBattleMoveDamage
-_0801F310: .4byte gBattleMons
-_0801F314: .4byte gBattlerTarget
-_0801F318: .4byte gEnigmaBerries
-_0801F31C:
- ldrh r0, [r1, 0x2E]
- bl ItemId_GetHoldEffect
- lsls r0, 24
- lsrs r4, r0, 24
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r7
- ldrh r0, [r0, 0x2E]
- bl ItemId_GetHoldEffectParam
- lsls r0, 24
- lsrs r6, r0, 24
-_0801F336:
- ldr r1, _0801F3DC @ =gPotentialItemEffectBattler
- ldr r5, _0801F3E0 @ =gBattlerTarget
- ldrb r0, [r5]
- strb r0, [r1]
- cmp r4, 0x27
- bne _0801F374
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bcs _0801F374
- ldrb r0, [r5]
- movs r1, 0x27
- bl RecordItemEffectBattle
- ldr r2, _0801F3E4 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
-_0801F374:
- ldr r4, _0801F3E8 @ =gBattleMons
- ldr r6, _0801F3E0 @ =gBattlerTarget
- ldrb r2, [r6]
- movs r7, 0x58
- adds r3, r2, 0
- muls r3, r7
- adds r0, r4, 0
- adds r0, 0x50
- adds r0, r3, r0
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- bne _0801F420
- ldr r5, _0801F3EC @ =gProtectStructs
- lsls r0, r2, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- blt _0801F3B2
- ldr r0, _0801F3E4 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F420
-_0801F3B2:
- adds r0, r3, r4
- ldrh r1, [r0, 0x28]
- ldr r2, _0801F3F0 @ =gBattleMoveDamage
- ldr r0, [r2]
- cmp r1, r0
- bgt _0801F420
- subs r0, r1, 0x1
- str r0, [r2]
- ldrb r3, [r6]
- lsls r0, r3, 4
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 30
- cmp r0, 0
- bge _0801F3F8
- ldr r0, _0801F3F4 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- b _0801F420
- .align 2, 0
-_0801F3DC: .4byte gPotentialItemEffectBattler
-_0801F3E0: .4byte gBattlerTarget
-_0801F3E4: .4byte gSpecialStatuses
-_0801F3E8: .4byte gBattleMons
-_0801F3EC: .4byte gProtectStructs
-_0801F3F0: .4byte gBattleMoveDamage
-_0801F3F4: .4byte gMoveResultFlags
-_0801F3F8:
- ldr r0, _0801F430 @ =gSpecialStatuses
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsrs r0, 7
- cmp r0, 0
- beq _0801F420
- ldr r2, _0801F434 @ =gMoveResultFlags
- ldrb r0, [r2]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
- ldr r1, _0801F438 @ =gLastUsedItem
- adds r0, r3, 0
- muls r0, r7
- adds r0, r4
- ldrh r0, [r0, 0x2E]
- strh r0, [r1]
-_0801F420:
- ldr r1, _0801F43C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F430: .4byte gSpecialStatuses
-_0801F434: .4byte gMoveResultFlags
-_0801F438: .4byte gLastUsedItem
-_0801F43C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk08_adjustnormaldamage2
-
- thumb_func_start atk09_attackanimation
-atk09_attackanimation: @ 801F440
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- ldr r0, _0801F488 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _0801F452
- b _0801F572
-_0801F452:
- ldr r0, _0801F48C @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- ands r0, r1
- ldr r3, _0801F490 @ =gCurrentMove
- cmp r0, 0
- beq _0801F4A0
- ldrh r0, [r3]
- cmp r0, 0x90
- beq _0801F4A0
- cmp r0, 0xA4
- beq _0801F4A0
- ldr r4, _0801F494 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _0801F498 @ =BattleScript_Pausex20
- str r0, [r4]
- ldr r1, _0801F49C @ =gBattleScripting
- ldrb r0, [r1, 0x18]
- adds r0, 0x1
- strb r0, [r1, 0x18]
- ldrb r0, [r1, 0x19]
- adds r0, 0x1
- strb r0, [r1, 0x19]
- b _0801F572
- .align 2, 0
-_0801F488: .4byte gBattleControllerExecFlags
-_0801F48C: .4byte gHitMarker
-_0801F490: .4byte gCurrentMove
-_0801F494: .4byte gBattlescriptCurrInstr
-_0801F498: .4byte BattleScript_Pausex20
-_0801F49C: .4byte gBattleScripting
-_0801F4A0:
- ldr r2, _0801F53C @ =gBattleMoves
- ldrh r1, [r3]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x6]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0801F4C6
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0801F4C6
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0801F4CE
-_0801F4C6:
- ldr r0, _0801F540 @ =gBattleScripting
- ldrb r0, [r0, 0x19]
- cmp r0, 0
- bne _0801F530
-_0801F4CE:
- ldr r0, _0801F544 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F564
- ldr r1, _0801F548 @ =gActiveBattler
- ldr r0, _0801F54C @ =gBattlerAttacker
- mov r8, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrh r1, [r3]
- ldr r6, _0801F540 @ =gBattleScripting
- ldrb r2, [r6, 0x18]
- ldr r0, _0801F550 @ =gBattleMovePower
- ldrh r3, [r0]
- ldr r0, _0801F554 @ =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [sp]
- ldr r5, _0801F558 @ =gBattleMons
- mov r0, r8
- ldrb r4, [r0]
- movs r0, 0x58
- muls r0, r4
- adds r0, r5
- adds r0, 0x2B
- ldrb r0, [r0]
- str r0, [sp, 0x4]
- mov r0, r8
- ldrb r4, [r0]
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r4, _0801F55C @ =gDisableStructs
- adds r0, r4
- str r0, [sp, 0x8]
- movs r0, 0
- bl BtlController_EmitMoveAnimation
- ldrb r0, [r6, 0x18]
- adds r0, 0x1
- strb r0, [r6, 0x18]
- ldrb r0, [r6, 0x19]
- adds r0, 0x1
- strb r0, [r6, 0x19]
- mov r1, r8
- ldrb r0, [r1]
- bl MarkBattlerForControllerExec
-_0801F530:
- ldr r1, _0801F560 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- b _0801F572
- .align 2, 0
-_0801F53C: .4byte gBattleMoves
-_0801F540: .4byte gBattleScripting
-_0801F544: .4byte gMoveResultFlags
-_0801F548: .4byte gActiveBattler
-_0801F54C: .4byte gBattlerAttacker
-_0801F550: .4byte gBattleMovePower
-_0801F554: .4byte gBattleMoveDamage
-_0801F558: .4byte gBattleMons
-_0801F55C: .4byte gDisableStructs
-_0801F560: .4byte gBattlescriptCurrInstr
-_0801F564:
- ldr r4, _0801F580 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x1
- bl BattleScriptPush
- ldr r0, _0801F584 @ =BattleScript_Pausex20
- str r0, [r4]
-_0801F572:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F580: .4byte gBattlescriptCurrInstr
-_0801F584: .4byte BattleScript_Pausex20
- thumb_func_end atk09_attackanimation
-
- thumb_func_start atk0A_waitanimation
-atk0A_waitanimation: @ 801F588
- push {lr}
- ldr r0, _0801F5A0 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801F59A
- ldr r1, _0801F5A4 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801F59A:
- pop {r0}
- bx r0
- .align 2, 0
-_0801F5A0: .4byte gBattleControllerExecFlags
-_0801F5A4: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0A_waitanimation
-
- thumb_func_start atk0B_healthbarupdate
-atk0B_healthbarupdate: @ 801F5A8
- push {r4,lr}
- ldr r0, _0801F60C @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801F66A
- ldr r0, _0801F610 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801F662
- ldr r0, _0801F614 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r2, _0801F618 @ =gActiveBattler
- strb r0, [r2]
- ldr r1, _0801F61C @ =gBattleMons
- ldrb r2, [r2]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801F628
- ldr r0, _0801F620 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1, 0xA]
- cmp r0, 0
- beq _0801F628
- ldr r0, _0801F624 @ =gHitMarker
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- cmp r0, 0
- bne _0801F628
- movs r0, 0x80
- adds r1, r2, 0
- bl PrepareStringBattle
- b _0801F662
- .align 2, 0
-_0801F60C: .4byte gBattleControllerExecFlags
-_0801F610: .4byte gMoveResultFlags
-_0801F614: .4byte gBattlescriptCurrInstr
-_0801F618: .4byte gActiveBattler
-_0801F61C: .4byte gBattleMons
-_0801F620: .4byte gDisableStructs
-_0801F624: .4byte gHitMarker
-_0801F628:
- ldr r0, _0801F670 @ =gBattleMoveDamage
- ldr r0, [r0]
- ldr r1, _0801F674 @ =0x00002710
- cmp r0, r1
- bgt _0801F636
- lsls r0, 16
- lsrs r1, r0, 16
-_0801F636:
- movs r0, 0
- bl BtlController_EmitHealthBarUpdate
- ldr r4, _0801F678 @ =gActiveBattler
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- bne _0801F662
- ldr r0, _0801F670 @ =gBattleMoveDamage
- ldr r0, [r0]
- cmp r0, 0
- ble _0801F662
- ldr r0, _0801F67C @ =gBattleResults
- ldrb r1, [r0, 0x5]
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x5]
-_0801F662:
- ldr r1, _0801F680 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801F66A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801F670: .4byte gBattleMoveDamage
-_0801F674: .4byte 0x00002710
-_0801F678: .4byte gActiveBattler
-_0801F67C: .4byte gBattleResults
-_0801F680: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0B_healthbarupdate
-
- thumb_func_start atk0C_datahpupdate
-atk0C_datahpupdate: @ 801F684
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r0, _0801F6AC @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _0801F692
- b _0801FA62
-_0801F692:
- ldr r0, _0801F6B0 @ =gBattleStruct
- ldr r0, [r0]
- ldrb r1, [r0, 0x13]
- cmp r1, 0
- beq _0801F6B4
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0801F6B4
- movs r6, 0x3F
- ands r6, r1
- b _0801F6C4
- .align 2, 0
-_0801F6AC: .4byte gBattleControllerExecFlags
-_0801F6B0: .4byte gBattleStruct
-_0801F6B4:
- ldr r2, _0801F750 @ =gBattleMoves
- ldr r0, _0801F754 @ =gCurrentMove
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r6, [r0, 0x2]
-_0801F6C4:
- ldr r0, _0801F758 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- beq _0801F6D2
- b _0801FA34
-_0801F6D2:
- ldr r0, _0801F75C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r7, _0801F760 @ =gActiveBattler
- strb r0, [r7]
- ldr r1, _0801F764 @ =gBattleMons
- ldrb r2, [r7]
- movs r0, 0x58
- muls r0, r2
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 17
- ands r0, r1
- cmp r0, 0
- beq _0801F7E8
- ldr r0, _0801F768 @ =gDisableStructs
- lsls r1, r2, 3
- subs r1, r2
- lsls r1, 2
- adds r4, r1, r0
- ldrb r1, [r4, 0xA]
- mov r12, r0
- cmp r1, 0
- beq _0801F7E8
- ldr r0, _0801F76C @ =gHitMarker
- ldr r3, [r0]
- movs r0, 0x80
- lsls r0, 1
- ands r3, r0
- cmp r3, 0
- bne _0801F7E8
- adds r5, r1, 0
- ldr r6, _0801F770 @ =gBattleMoveDamage
- ldr r4, [r6]
- cmp r5, r4
- blt _0801F77C
- ldr r0, _0801F774 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801F736
- str r4, [r1]
-_0801F736:
- ldrb r0, [r7]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- add r1, r12
- ldr r2, [r6]
- ldrb r0, [r1, 0xA]
- subs r0, r2
- strb r0, [r1, 0xA]
- ldr r1, _0801F778 @ =gHpDealt
- ldr r0, [r6]
- str r0, [r1]
- b _0801F7AC
- .align 2, 0
-_0801F750: .4byte gBattleMoves
-_0801F754: .4byte gCurrentMove
-_0801F758: .4byte gMoveResultFlags
-_0801F75C: .4byte gBattlescriptCurrInstr
-_0801F760: .4byte gActiveBattler
-_0801F764: .4byte gBattleMons
-_0801F768: .4byte gDisableStructs
-_0801F76C: .4byte gHitMarker
-_0801F770: .4byte gBattleMoveDamage
-_0801F774: .4byte gSpecialStatuses
-_0801F778: .4byte gHpDealt
-_0801F77C:
- ldr r0, _0801F7D4 @ =gSpecialStatuses
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 2
- adds r0, 0x4
- adds r1, r0
- ldr r0, [r1]
- cmp r0, 0
- bne _0801F790
- str r5, [r1]
-_0801F790:
- ldr r2, _0801F7D8 @ =gHpDealt
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- str r0, [r2]
- ldrb r1, [r7]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- strb r3, [r0, 0xA]
-_0801F7AC:
- ldr r0, _0801F7DC @ =gActiveBattler
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r12
- ldrb r0, [r0, 0xA]
- cmp r0, 0
- beq _0801F7C0
- b _0801FA5A
-_0801F7C0:
- ldr r4, _0801F7E0 @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- adds r0, 0x2
- str r0, [r4]
- bl BattleScriptPushCursor
- ldr r0, _0801F7E4 @ =BattleScript_SubstituteFade
- str r0, [r4]
- b _0801FA62
- .align 2, 0
-_0801F7D4: .4byte gSpecialStatuses
-_0801F7D8: .4byte gHpDealt
-_0801F7DC: .4byte gActiveBattler
-_0801F7E0: .4byte gBattlescriptCurrInstr
-_0801F7E4: .4byte BattleScript_SubstituteFade
-_0801F7E8:
- ldr r0, _0801F828 @ =gHitMarker
- ldr r2, [r0]
- ldr r1, _0801F82C @ =0xfffffeff
- ands r2, r1
- str r2, [r0]
- ldr r1, _0801F830 @ =gBattleMoveDamage
- ldr r5, [r1]
- mov r12, r0
- adds r7, r1, 0
- cmp r5, 0
- bge _0801F83C
- ldr r4, _0801F834 @ =gBattleMons
- ldr r2, _0801F838 @ =gActiveBattler
- ldrb r0, [r2]
- movs r3, 0x58
- adds r1, r0, 0
- muls r1, r3
- adds r1, r4
- ldrh r0, [r1, 0x28]
- subs r0, r5
- strh r0, [r1, 0x28]
- ldrb r0, [r2]
- muls r0, r3
- adds r1, r0, r4
- ldrh r3, [r1, 0x2C]
- ldrh r0, [r1, 0x28]
- adds r5, r2, 0
- cmp r0, r3
- bhi _0801F824
- b _0801F9FA
-_0801F824:
- strh r3, [r1, 0x28]
- b _0801F9FA
- .align 2, 0
-_0801F828: .4byte gHitMarker
-_0801F82C: .4byte 0xfffffeff
-_0801F830: .4byte gBattleMoveDamage
-_0801F834: .4byte gBattleMons
-_0801F838: .4byte gActiveBattler
-_0801F83C:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _0801F858
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- mov r0, r12
- str r2, [r0]
- ldr r5, _0801F854 @ =gActiveBattler
- b _0801F8A0
- .align 2, 0
-_0801F854: .4byte gActiveBattler
-_0801F858:
- ldr r0, _0801F880 @ =gTakenDmg
- ldr r2, _0801F884 @ =gActiveBattler
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- adds r0, r5
- str r0, [r1]
- ldr r0, _0801F888 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- adds r5, r2, 0
- cmp r0, 0
- bne _0801F894
- ldr r1, _0801F88C @ =gTakenDmgByBattler
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801F890 @ =gBattlerAttacker
- b _0801F89C
- .align 2, 0
-_0801F880: .4byte gTakenDmg
-_0801F884: .4byte gActiveBattler
-_0801F888: .4byte gBattlescriptCurrInstr
-_0801F88C: .4byte gTakenDmgByBattler
-_0801F890: .4byte gBattlerAttacker
-_0801F894:
- ldr r1, _0801F8C0 @ =gTakenDmgByBattler
- ldrb r0, [r5]
- adds r0, r1
- ldr r1, _0801F8C4 @ =gBattlerTarget
-_0801F89C:
- ldrb r1, [r1]
- strb r1, [r0]
-_0801F8A0:
- ldr r4, _0801F8C8 @ =gBattleMons
- ldrb r0, [r5]
- movs r3, 0x58
- muls r0, r3
- adds r2, r0, r4
- ldrh r0, [r2, 0x28]
- ldr r1, [r7]
- cmp r0, r1
- ble _0801F8D0
- subs r0, r1
- strh r0, [r2, 0x28]
- ldr r0, _0801F8CC @ =gHpDealt
- str r1, [r0]
- adds r7, r0, 0
- b _0801F8E0
- .align 2, 0
-_0801F8C0: .4byte gTakenDmgByBattler
-_0801F8C4: .4byte gBattlerTarget
-_0801F8C8: .4byte gBattleMons
-_0801F8CC: .4byte gHpDealt
-_0801F8D0:
- ldr r2, _0801F954 @ =gHpDealt
- str r0, [r2]
- ldrb r0, [r5]
- muls r0, r3
- adds r0, r4
- movs r1, 0
- strh r1, [r0, 0x28]
- adds r7, r2, 0
-_0801F8E0:
- ldr r2, _0801F958 @ =gSpecialStatuses
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0x4
- adds r3, r0, r1
- ldr r0, [r3]
- adds r4, r2, 0
- cmp r0, 0
- bne _0801F908
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F908
- ldr r0, [r7]
- str r0, [r3]
-_0801F908:
- cmp r6, 0x8
- bhi _0801F990
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F98C
- ldr r0, _0801F95C @ =gCurrentMove
- ldrh r0, [r0]
- cmp r0, 0xDC
- beq _0801F98C
- ldr r3, _0801F960 @ =gProtectStructs
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0x4
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x8
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801F964 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801F96C
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F968 @ =gBattlerAttacker
- b _0801F974
- .align 2, 0
-_0801F954: .4byte gHpDealt
-_0801F958: .4byte gSpecialStatuses
-_0801F95C: .4byte gCurrentMove
-_0801F960: .4byte gProtectStructs
-_0801F964: .4byte gBattlescriptCurrInstr
-_0801F968: .4byte gBattlerAttacker
-_0801F96C:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F988 @ =gBattlerTarget
-_0801F974:
- ldrb r1, [r2]
- strb r1, [r0, 0xC]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x10]
- b _0801F9FA
- .align 2, 0
-_0801F988: .4byte gBattlerTarget
-_0801F98C:
- cmp r6, 0x8
- bls _0801F9FA
-_0801F990:
- mov r1, r12
- ldr r0, [r1]
- movs r1, 0x80
- lsls r1, 13
- ands r0, r1
- cmp r0, 0
- bne _0801F9FA
- ldr r3, _0801F9D4 @ =gProtectStructs
- ldrb r0, [r5]
- lsls r0, 4
- adds r1, r3, 0
- adds r1, 0x8
- adds r0, r1
- ldr r2, [r7]
- str r2, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0xC
- adds r0, r1
- str r2, [r0]
- ldr r0, _0801F9D8 @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- bne _0801F9E0
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801F9DC @ =gBattlerAttacker
- b _0801F9E8
- .align 2, 0
-_0801F9D4: .4byte gProtectStructs
-_0801F9D8: .4byte gBattlescriptCurrInstr
-_0801F9DC: .4byte gBattlerAttacker
-_0801F9E0:
- ldrb r0, [r5]
- lsls r0, 4
- adds r0, r3
- ldr r2, _0801FA28 @ =gBattlerTarget
-_0801F9E8:
- ldrb r1, [r2]
- strb r1, [r0, 0xD]
- ldrb r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r2]
- strb r1, [r0, 0x11]
-_0801F9FA:
- mov r1, r12
- ldr r0, [r1]
- ldr r1, _0801FA2C @ =0xffefffff
- ands r0, r1
- mov r1, r12
- str r0, [r1]
- ldrb r1, [r5]
- movs r0, 0x58
- muls r0, r1
- ldr r1, _0801FA30 @ =gUnknown_2023C0C
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- movs r1, 0x2A
- movs r2, 0
- movs r3, 0x2
- bl BtlController_EmitSetMonData
- ldrb r0, [r5]
- bl MarkBattlerForControllerExec
- b _0801FA5A
- .align 2, 0
-_0801FA28: .4byte gBattlerTarget
-_0801FA2C: .4byte 0xffefffff
-_0801FA30: .4byte gUnknown_2023C0C
-_0801FA34:
- ldr r0, _0801FA6C @ =gBattlescriptCurrInstr
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- bl GetBattlerForBattleScript
- ldr r1, _0801FA70 @ =gActiveBattler
- strb r0, [r1]
- ldr r2, _0801FA74 @ =gSpecialStatuses
- ldrb r1, [r1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r1, r0, r2
- ldr r0, [r1]
- cmp r0, 0
- bne _0801FA5A
- ldr r0, _0801FA78 @ =0x0000ffff
- str r0, [r1]
-_0801FA5A:
- ldr r1, _0801FA6C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x2
- str r0, [r1]
-_0801FA62:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FA6C: .4byte gBattlescriptCurrInstr
-_0801FA70: .4byte gActiveBattler
-_0801FA74: .4byte gSpecialStatuses
-_0801FA78: .4byte 0x0000ffff
- thumb_func_end atk0C_datahpupdate
-
- thumb_func_start atk0D_critmessage
-atk0D_critmessage: @ 801FA7C
- push {lr}
- ldr r0, _0801FAB8 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FAB2
- ldr r0, _0801FABC @ =gCritMultiplier
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0801FAAA
- ldr r0, _0801FAC0 @ =gMoveResultFlags
- ldrb r1, [r0]
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0801FAAA
- ldr r0, _0801FAC4 @ =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0xD9
- bl PrepareStringBattle
- ldr r1, _0801FAC8 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801FAAA:
- ldr r1, _0801FACC @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801FAB2:
- pop {r0}
- bx r0
- .align 2, 0
-_0801FAB8: .4byte gBattleControllerExecFlags
-_0801FABC: .4byte gCritMultiplier
-_0801FAC0: .4byte gMoveResultFlags
-_0801FAC4: .4byte gBattlerAttacker
-_0801FAC8: .4byte gBattleCommunication
-_0801FACC: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0D_critmessage
-
- thumb_func_start atk0E_effectivenesssound
-atk0E_effectivenesssound: @ 801FAD0
- push {r4,lr}
- ldr r0, _0801FB08 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FB90
- ldr r4, _0801FB0C @ =gActiveBattler
- ldr r0, _0801FB10 @ =gBattlerTarget
- ldrb r0, [r0]
- strb r0, [r4]
- ldr r1, _0801FB14 @ =gMoveResultFlags
- ldrb r2, [r1]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0801FB88
- movs r0, 0xFE
- ands r0, r2
- cmp r0, 0x10
- beq _0801FB42
- cmp r0, 0x10
- bgt _0801FB1E
- cmp r0, 0x4
- beq _0801FB32
- cmp r0, 0x4
- bgt _0801FB18
- cmp r0, 0x2
- beq _0801FB2C
- b _0801FB42
- .align 2, 0
-_0801FB08: .4byte gBattleControllerExecFlags
-_0801FB0C: .4byte gActiveBattler
-_0801FB10: .4byte gBattlerTarget
-_0801FB14: .4byte gMoveResultFlags
-_0801FB18:
- cmp r0, 0x8
- beq _0801FB88
- b _0801FB42
-_0801FB1E:
- cmp r0, 0x40
- beq _0801FB42
- cmp r0, 0x40
- bgt _0801FB42
- cmp r0, 0x20
- beq _0801FB88
- b _0801FB42
-_0801FB2C:
- movs r0, 0
- movs r1, 0xE
- b _0801FB36
-_0801FB32:
- movs r0, 0
- movs r1, 0xC
-_0801FB36:
- bl BtlController_EmitPlaySE
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- b _0801FB88
-_0801FB42:
- ldrb r1, [r1]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0801FB52
- movs r0, 0
- movs r1, 0xE
- b _0801FB5E
-_0801FB52:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0801FB70
- movs r0, 0
- movs r1, 0xC
-_0801FB5E:
- bl BtlController_EmitPlaySE
- ldr r0, _0801FB6C @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
- b _0801FB88
- .align 2, 0
-_0801FB6C: .4byte gActiveBattler
-_0801FB70:
- movs r0, 0x28
- ands r0, r1
- cmp r0, 0
- bne _0801FB88
- movs r0, 0
- movs r1, 0xD
- bl BtlController_EmitPlaySE
- ldr r0, _0801FB98 @ =gActiveBattler
- ldrb r0, [r0]
- bl MarkBattlerForControllerExec
-_0801FB88:
- ldr r1, _0801FB9C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
-_0801FB90:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FB98: .4byte gActiveBattler
-_0801FB9C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0E_effectivenesssound
-
- thumb_func_start atk0F_resultmessage
-atk0F_resultmessage: @ 801FBA0
- push {r4-r7,lr}
- movs r3, 0
- ldr r0, _0801FBDC @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- beq _0801FBAE
- b _0801FD40
-_0801FBAE:
- ldr r1, _0801FBE0 @ =gMoveResultFlags
- ldrb r2, [r1]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r2
- adds r6, r1, 0
- ldr r7, _0801FBE4 @ =gBattleCommunication
- cmp r0, 0
- beq _0801FBEC
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _0801FBCE
- ldrb r0, [r7, 0x6]
- cmp r0, 0x2
- bls _0801FBEC
-_0801FBCE:
- ldr r1, _0801FBE8 @ =gMissStringIds
- ldrb r0, [r7, 0x6]
- lsls r0, 1
- adds r0, r1
- ldrh r3, [r0]
- strb r4, [r7, 0x7]
- b _0801FD2A
- .align 2, 0
-_0801FBDC: .4byte gBattleControllerExecFlags
-_0801FBE0: .4byte gMoveResultFlags
-_0801FBE4: .4byte gBattleCommunication
-_0801FBE8: .4byte gMissStringIds
-_0801FBEC:
- movs r0, 0x1
- strb r0, [r7, 0x7]
- ldrb r5, [r6]
- movs r0, 0xFE
- ands r0, r5
- cmp r0, 0x10
- beq _0801FC30
- cmp r0, 0x10
- bgt _0801FC12
- cmp r0, 0x4
- beq _0801FC2C
- cmp r0, 0x4
- bgt _0801FC0C
- cmp r0, 0x2
- beq _0801FC28
- b _0801FC78
-_0801FC0C:
- cmp r0, 0x8
- beq _0801FC84
- b _0801FC78
-_0801FC12:
- cmp r0, 0x40
- beq _0801FC34
- cmp r0, 0x40
- bgt _0801FC22
- cmp r0, 0x20
- bne _0801FC20
- b _0801FD24
-_0801FC20:
- b _0801FC78
-_0801FC22:
- cmp r0, 0x80
- beq _0801FC38
- b _0801FC78
-_0801FC28:
- movs r3, 0xDE
- b _0801FD2E
-_0801FC2C:
- movs r3, 0xDD
- b _0801FD2E
-_0801FC30:
- movs r3, 0xDA
- b _0801FD2E
-_0801FC34:
- movs r3, 0x99
- b _0801FD2E
-_0801FC38:
- ldr r4, _0801FC60 @ =gLastUsedItem
- ldr r2, _0801FC64 @ =gBattleMons
- ldr r3, _0801FC68 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801FC6C @ =gPotentialItemEffectBattler
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl BattleScriptPushCursor
- ldr r1, _0801FC70 @ =gBattlescriptCurrInstr
- ldr r0, _0801FC74 @ =BattleScript_HangedOnMsg
- b _0801FD3E
- .align 2, 0
-_0801FC60: .4byte gLastUsedItem
-_0801FC64: .4byte gBattleMons
-_0801FC68: .4byte gBattlerTarget
-_0801FC6C: .4byte gPotentialItemEffectBattler
-_0801FC70: .4byte gBattlescriptCurrInstr
-_0801FC74: .4byte BattleScript_HangedOnMsg
-_0801FC78:
- adds r2, r6, 0
- ldrb r5, [r2]
- movs r0, 0x8
- ands r0, r5
- cmp r0, 0
- beq _0801FC88
-_0801FC84:
- movs r3, 0x1B
- b _0801FD2E
-_0801FC88:
- movs r0, 0x10
- ands r0, r5
- cmp r0, 0
- beq _0801FCB0
- movs r0, 0xEF
- ands r0, r5
- movs r1, 0xFD
- ands r0, r1
- movs r1, 0xFB
- ands r0, r1
- strb r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801FCA8 @ =gBattlescriptCurrInstr
- ldr r0, _0801FCAC @ =BattleScript_OneHitKOMsg
- b _0801FD3E
- .align 2, 0
-_0801FCA8: .4byte gBattlescriptCurrInstr
-_0801FCAC: .4byte BattleScript_OneHitKOMsg
-_0801FCB0:
- movs r0, 0x40
- ands r0, r5
- cmp r0, 0
- beq _0801FCD0
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r2]
- bl BattleScriptPushCursor
- ldr r1, _0801FCC8 @ =gBattlescriptCurrInstr
- ldr r0, _0801FCCC @ =BattleScript_EnduredMsg
- b _0801FD3E
- .align 2, 0
-_0801FCC8: .4byte gBattlescriptCurrInstr
-_0801FCCC: .4byte BattleScript_EnduredMsg
-_0801FCD0:
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- beq _0801FD18
- ldr r4, _0801FD00 @ =gLastUsedItem
- ldr r2, _0801FD04 @ =gBattleMons
- ldr r3, _0801FD08 @ =gBattlerTarget
- ldrb r1, [r3]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- ldrh r0, [r0, 0x2E]
- strh r0, [r4]
- ldr r1, _0801FD0C @ =gPotentialItemEffectBattler
- ldrb r0, [r3]
- strb r0, [r1]
- movs r0, 0x3F
- ands r0, r5
- strb r0, [r6]
- bl BattleScriptPushCursor
- ldr r1, _0801FD10 @ =gBattlescriptCurrInstr
- ldr r0, _0801FD14 @ =BattleScript_HangedOnMsg
- b _0801FD3E
- .align 2, 0
-_0801FD00: .4byte gLastUsedItem
-_0801FD04: .4byte gBattleMons
-_0801FD08: .4byte gBattlerTarget
-_0801FD0C: .4byte gPotentialItemEffectBattler
-_0801FD10: .4byte gBattlescriptCurrInstr
-_0801FD14: .4byte BattleScript_HangedOnMsg
-_0801FD18:
- movs r0, 0x20
- ands r0, r5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _0801FD28
-_0801FD24:
- movs r3, 0xE5
- b _0801FD2E
-_0801FD28:
- strb r0, [r7, 0x7]
-_0801FD2A:
- cmp r3, 0
- beq _0801FD38
-_0801FD2E:
- adds r0, r3, 0
- ldr r1, _0801FD48 @ =gBattlerAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
-_0801FD38:
- ldr r1, _0801FD4C @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x1
-_0801FD3E:
- str r0, [r1]
-_0801FD40:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FD48: .4byte gBattlerAttacker
-_0801FD4C: .4byte gBattlescriptCurrInstr
- thumb_func_end atk0F_resultmessage
-
- thumb_func_start atk10_printstring
-atk10_printstring: @ 801FD50
- push {r4,lr}
- ldr r0, _0801FD80 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FD7A
- ldr r4, _0801FD84 @ =gBattlescriptCurrInstr
- ldr r1, [r4]
- ldrb r0, [r1, 0x1]
- ldrb r1, [r1, 0x2]
- lsls r1, 8
- orrs r0, r1
- ldr r1, _0801FD88 @ =gBattlerAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801FD8C @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
-_0801FD7A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FD80: .4byte gBattleControllerExecFlags
-_0801FD84: .4byte gBattlescriptCurrInstr
-_0801FD88: .4byte gBattlerAttacker
-_0801FD8C: .4byte gBattleCommunication
- thumb_func_end atk10_printstring
-
- thumb_func_start atk11_printselectionstring
-atk11_printselectionstring: @ 801FD90
- push {r4,r5,lr}
- ldr r5, _0801FDC4 @ =gActiveBattler
- ldr r0, _0801FDC8 @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r5]
- ldr r4, _0801FDCC @ =gBattlescriptCurrInstr
- ldr r0, [r4]
- ldrb r1, [r0, 0x1]
- ldrb r0, [r0, 0x2]
- lsls r0, 8
- orrs r1, r0
- movs r0, 0
- bl BtlController_EmitPrintSelectionString
- ldrb r0, [r5]
- bl MarkBattlerForControllerExec
- ldr r0, [r4]
- adds r0, 0x3
- str r0, [r4]
- ldr r1, _0801FDD0 @ =gBattleCommunication
- movs r0, 0x1
- strb r0, [r1, 0x7]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FDC4: .4byte gActiveBattler
-_0801FDC8: .4byte gBattlerAttacker
-_0801FDCC: .4byte gBattlescriptCurrInstr
-_0801FDD0: .4byte gBattleCommunication
- thumb_func_end atk11_printselectionstring
-
- thumb_func_start atk12_waitmessage
-atk12_waitmessage: @ 801FDD4
- push {r4-r6,lr}
- ldr r0, _0801FDF0 @ =gBattleControllerExecFlags
- ldr r4, [r0]
- cmp r4, 0
- bne _0801FE22
- ldr r6, _0801FDF4 @ =gBattleCommunication
- ldrb r0, [r6, 0x7]
- cmp r0, 0
- bne _0801FDFC
- ldr r1, _0801FDF8 @ =gBattlescriptCurrInstr
- ldr r0, [r1]
- adds r0, 0x3
- str r0, [r1]
- b _0801FE22
- .align 2, 0
-_0801FDF0: .4byte gBattleControllerExecFlags
-_0801FDF4: .4byte gBattleCommunication
-_0801FDF8: .4byte gBattlescriptCurrInstr
-_0801FDFC:
- ldr r5, _0801FE28 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldr r3, _0801FE2C @ =gPauseCounterBattle
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r1
- bcc _0801FE22
- movs r1, 0
- strh r4, [r3]
- adds r0, r2, 0x3
- str r0, [r5]
- strb r1, [r6, 0x7]
-_0801FE22:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FE28: .4byte gBattlescriptCurrInstr
-_0801FE2C: .4byte gPauseCounterBattle
- thumb_func_end atk12_waitmessage
-
- thumb_func_start atk13_printfromtable
-atk13_printfromtable: @ 801FE30
- push {r4,r5,lr}
- ldr r0, _0801FE74 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FE6E
- ldr r4, _0801FE78 @ =gBattlescriptCurrInstr
- ldr r2, [r4]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- ldr r5, _0801FE7C @ =gBattleCommunication
- ldrb r0, [r5, 0x5]
- lsls r0, 1
- adds r1, r0
- ldrh r0, [r1]
- ldr r1, _0801FE80 @ =gBattlerAttacker
- ldrb r1, [r1]
- bl PrepareStringBattle
- ldr r0, [r4]
- adds r0, 0x5
- str r0, [r4]
- movs r0, 0x1
- strb r0, [r5, 0x7]
-_0801FE6E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FE74: .4byte gBattleControllerExecFlags
-_0801FE78: .4byte gBattlescriptCurrInstr
-_0801FE7C: .4byte gBattleCommunication
-_0801FE80: .4byte gBattlerAttacker
- thumb_func_end atk13_printfromtable
-
- thumb_func_start atk14_printselectionstringfromtable
-atk14_printselectionstringfromtable: @ 801FE84
- push {r4-r6,lr}
- ldr r0, _0801FED4 @ =gBattleControllerExecFlags
- ldr r0, [r0]
- cmp r0, 0
- bne _0801FECE
- ldr r5, _0801FED8 @ =gBattlescriptCurrInstr
- ldr r2, [r5]
- ldrb r1, [r2, 0x1]
- ldrb r0, [r2, 0x2]
- lsls r0, 8
- orrs r1, r0
- ldrb r0, [r2, 0x3]
- lsls r0, 16
- orrs r1, r0
- ldrb r0, [r2, 0x4]
- lsls r0, 24
- orrs r1, r0
- ldr r6, _0801FEDC @ =gBattleCommunication
- ldrb r0, [r6, 0x5]
- lsls r0, 1
- adds r1, r0
- ldr r4, _0801FEE0 @ =gActiveBattler
- ldr r0, _0801FEE4 @ =gBattlerAttacker
- ldrb r0, [r0]
- strb r0, [r4]
- ldrh r1, [r1]
- movs r0, 0
- bl BtlController_EmitPrintSelectionString
- ldrb r0, [r4]
- bl MarkBattlerForControllerExec
- ldr r0, [r5]
- adds r0, 0x5
- str r0, [r5]
- movs r0, 0x1
- strb r0, [r6, 0x7]
-_0801FECE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0801FED4: .4byte gBattleControllerExecFlags
-_0801FED8: .4byte gBattlescriptCurrInstr
-_0801FEDC: .4byte gBattleCommunication
-_0801FEE0: .4byte gActiveBattler
-_0801FEE4: .4byte gBattlerAttacker
- thumb_func_end atk14_printselectionstringfromtable
-
- thumb_func_start GetBattlerTurnOrderNum
-GetBattlerTurnOrderNum: @ 801FEE8
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r0, _0801FF18 @ =gBattlersCount
- ldrb r3, [r0]
- cmp r1, r3
- bge _0801FF0E
- ldr r4, _0801FF1C @ =gBattlerByTurnOrder
- ldrb r0, [r4]
- cmp r0, r2
- beq _0801FF0E
-_0801FF00:
- adds r1, 0x1
- cmp r1, r3
- bge _0801FF0E
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r2
- bne _0801FF00
-_0801FF0E:
- lsls r0, r1, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0801FF18: .4byte gBattlersCount
-_0801FF1C: .4byte gBattlerByTurnOrder
- thumb_func_end GetBattlerTurnOrderNum
-
thumb_func_start SetMoveEffect
SetMoveEffect: @ 801FF20
push {r4-r7,lr}
diff --git a/include/battle.h b/include/battle.h
index e922cc241..dc5a5ef00 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -982,5 +982,8 @@ extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
extern u8 gMultiUsePlayerCursor;
extern u8 gNumberOfMovesToChoose;
+extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
+extern s32 gHpDealt;
+extern u16 gPauseCounterBattle;
#endif // GUARD_BATTLE_H
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 01ecae958..688f9e4a2 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -29,6 +29,7 @@
#include "battle_setup.h"
#include "battle_ai_script_commands.h"
#include "battle_scripts.h"
+#include "battle_string_ids.h"
#include "reshow_battle_screen.h"
#include "battle_controllers.h"
#include "battle_interface.h"
@@ -41,6 +42,7 @@
#include "constants/species.h"
#include "constants/moves.h"
#include "constants/abilities.h"
+#include "constants/pokemon.h"
#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
@@ -865,3 +867,1224 @@ const u8 sBallCatchBonuses[] =
};
const u32 gUnknown_8250898 = 0xFF7EAE60;
+
+void atk00_attackcanceler(void)
+{
+ s32 i;
+
+ if (gBattleOutcome)
+ {
+ gCurrentActionFuncId = B_ACTION_FINISHED;
+ return;
+ }
+ if (gBattleMons[gBattlerAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ {
+ gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
+ gBattlescriptCurrInstr = BattleScript_MoveEnd;
+ return;
+ }
+ if (AtkCanceller_UnableToUseMove())
+ return;
+ if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBattlerTarget, 0, 0, 0))
+ return;
+ if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & (HITMARKER_x800000 | HITMARKER_NO_ATTACKSTRING))
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ gBattlescriptCurrInstr = BattleScript_NoPPForMove;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ return;
+ }
+ gHitMarker &= ~(HITMARKER_x800000);
+ if (!(gHitMarker & HITMARKER_OBEYS)
+ && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
+ {
+ i = IsMonDisobedient();
+ switch (i)
+ {
+ case 0:
+ break;
+ case 2:
+ gHitMarker |= HITMARKER_OBEYS;
+ return;
+ default:
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ return;
+ }
+ }
+ gHitMarker |= HITMARKER_OBEYS;
+ if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED)
+ {
+ PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT);
+ gProtectStructs[gBattlerTarget].bounceMove = FALSE;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_MagicCoatBounce;
+ return;
+ }
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
+ {
+ PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH);
+ gProtectStructs[gBattlerByTurnOrder[i]].stealMove = FALSE;
+ gBattleScripting.battler = gBattlerByTurnOrder[i];
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SnatchedMove;
+ return;
+ }
+ }
+ if (gSpecialStatuses[gBattlerTarget].lightningRodRedirected)
+ {
+ gSpecialStatuses[gBattlerTarget].lightningRodRedirected = FALSE;
+ gLastUsedAbility = ABILITY_LIGHTNING_ROD;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TookAttack;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else if (DEFENDER_IS_PROTECTED
+ && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
+ && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
+ {
+ CancelMultiTurnMoves(gBattlerAttacker);
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 1;
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void JumpIfMoveFailed(u8 adder, u16 move)
+{
+ const u8 *BS_ptr = gBattlescriptCurrInstr + adder;
+
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ {
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ }
+ else
+ {
+ TrySetDestinyBondToHappen();
+ if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, move))
+ return;
+ }
+ gBattlescriptCurrInstr = BS_ptr;
+}
+
+void atk40_jumpifaffectedbyprotect(void)
+{
+ if (DEFENDER_IS_PROTECTED)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(5, 0);
+ gBattleCommunication[6] = 1;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 5;
+ }
+}
+
+bool8 JumpIfMoveAffectedByProtect(u16 move)
+{
+ bool8 affected = FALSE;
+
+ if (DEFENDER_IS_PROTECTED)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ gBattleCommunication[6] = 1;
+ affected = TRUE;
+ }
+ return affected;
+}
+
+bool8 AccuracyCalcHelper(u16 move)
+{
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ if (!(gHitMarker & HITMARKER_IGNORE_ON_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_ON_AIR;
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND;
+ if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER;
+ if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER)
+ || (gBattleMoves[move].effect == EFFECT_ALWAYS_HIT || gBattleMoves[move].effect == EFFECT_VITAL_THROW))
+ {
+ JumpIfMoveFailed(7, move);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void atk01_accuracycheck(void)
+{
+ u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
+ && !sub_80EB2E0(1)
+ && gBattleMoves[move].power != 0
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ || (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE
+ && !sub_80EB2E0(2)
+ && gBattleMoves[move].power == 0
+ && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
+ || (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
+ {
+ JumpIfMoveFailed(7, move);
+ return;
+ }
+ if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON)
+ {
+ if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
+ gBattlescriptCurrInstr += 7;
+ else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ else if (!JumpIfMoveAffectedByProtect(0))
+ gBattlescriptCurrInstr += 7;
+ }
+ else
+ {
+ u8 type, moveAcc, holdEffect, param;
+ s8 buff;
+ u16 calc;
+
+ if (move == 0)
+ move = gCurrentMove;
+ GET_MOVE_TYPE(move, type);
+ if (JumpIfMoveAffectedByProtect(move) || AccuracyCalcHelper(move))
+ return;
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ {
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
+
+ buff = acc;
+ }
+ else
+ {
+ u8 acc = gBattleMons[gBattlerAttacker].statStages[STAT_ACC];
+
+ buff = acc + 6 - gBattleMons[gBattlerTarget].statStages[STAT_EVASION];
+ }
+ if (buff < 0)
+ buff = 0;
+ if (buff > 0xC)
+ buff = 0xC;
+ moveAcc = gBattleMoves[move].accuracy;
+ // check Thunder on sunny weather
+ if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER)
+ moveAcc = 50;
+ calc = sAccuracyStageRatios[buff].dividend * moveAcc;
+ calc /= sAccuracyStageRatios[buff].divisor;
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_COMPOUND_EYES)
+ calc = (calc * 130) / 100; // 1.3 compound eyes boost
+ if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
+ calc = (calc * 80) / 100; // 1.2 sand veil loss
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type))
+ calc = (calc * 80) / 100; // 1.2 hustle loss
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+
+ if (holdEffect == HOLD_EFFECT_EVASION_UP)
+ calc = (calc * (100 - param)) / 100;
+ // final calculation
+ if ((Random() % 100 + 1) > calc)
+ {
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && (gBattleMoves[move].target == MOVE_TARGET_BOTH || gBattleMoves[move].target == MOVE_TARGET_FOES_AND_ALLY))
+ gBattleCommunication[6] = 2;
+ else
+ gBattleCommunication[6] = 0;
+ CheckWonderGuardAndLevitate();
+ }
+ JumpIfMoveFailed(7, move);
+ }
+}
+
+void atk02_attackstring(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!(gHitMarker & (HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED)))
+ {
+ PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker);
+ gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED;
+ }
+ ++gBattlescriptCurrInstr;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+}
+
+ void atk03_ppreduce(void)
+{
+ s32 ppToDeduct = 1;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (!gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure)
+ {
+ switch (gBattleMoves[gCurrentMove].target)
+ {
+ case MOVE_TARGET_FOES_AND_ALLY:
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ case MOVE_TARGET_BOTH:
+ case MOVE_TARGET_OPPONENTS_FIELD:
+ ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_PRESSURE, 0, 0);
+ break;
+ default:
+ if (gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].ability == ABILITY_PRESSURE)
+ ++ppToDeduct;
+ break;
+ }
+ }
+ if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBattlerAttacker].pp[gCurrMovePos])
+ {
+ gProtectStructs[gBattlerAttacker].notFirstStrike = 1;
+
+ if (gBattleMons[gBattlerAttacker].pp[gCurrMovePos] > ppToDeduct)
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] -= ppToDeduct;
+ else
+ gBattleMons[gBattlerAttacker].pp[gCurrMovePos] = 0;
+
+ if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)
+ && !((gDisableStructs[gBattlerAttacker].mimickedMoves) & gBitTable[gCurrMovePos]))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBattlerAttacker].pp[gCurrMovePos]);
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ }
+ }
+ gHitMarker &= ~(HITMARKER_NO_PPDEDUCT);
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atk04_critcalc(void)
+{
+ u8 holdEffect;
+ u16 item, critChance;
+
+ item = gBattleMons[gBattlerAttacker].item;
+ if (item == ITEM_ENIGMA_BERRY)
+ holdEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
+ else
+ holdEffect = ItemId_GetHoldEffect(item);
+ gPotentialItemEffectBattler = gBattlerAttacker;
+ critChance = 2 * ((gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK)
+ + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL)
+ + (holdEffect == HOLD_EFFECT_SCOPE_LENS)
+ + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY)
+ + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBattlerAttacker].species == SPECIES_FARFETCHD);
+ if (critChance >= NELEMS(sCriticalHitChance))
+ critChance = NELEMS(sCriticalHitChance) - 1;
+ if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR)
+ && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT)
+ && !(gBattleTypeFlags & BATTLE_TYPE_OLDMAN_TUTORIAL)
+ && !(Random() % sCriticalHitChance[critChance])
+ && (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || sub_80EB2E0(1))
+ && !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE))
+ gCritMultiplier = 2;
+ else
+ gCritMultiplier = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+void atk05_damagecalc(void)
+{
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
+
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker],
+ &gBattleMons[gBattlerTarget],
+ gCurrentMove,
+ sideStatus,
+ gDynamicBasePower,
+ gBattleStruct->dynamicMoveType,
+ gBattlerAttacker,
+ gBattlerTarget);
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
+ if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+ ++gBattlescriptCurrInstr;
+}
+
+void AI_CalcDmg(u8 attacker, u8 defender)
+{
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(defender)];
+
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[attacker],
+ &gBattleMons[defender],
+ gCurrentMove,
+ sideStatus,
+ gDynamicBasePower,
+ gBattleStruct->dynamicMoveType,
+ attacker,
+ defender);
+ gDynamicBasePower = 0;
+ gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleScripting.dmgMultiplier;
+ if (gStatuses3[attacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[attacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+}
+
+void ModulateDmgByType(u8 multiplier)
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier)
+ gBattleMoveDamage = 1;
+ switch (multiplier)
+ {
+ case TYPE_MUL_NO_EFFECT:
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ break;
+ case TYPE_MUL_NOT_EFFECTIVE:
+ if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ gMoveResultFlags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ else
+ gMoveResultFlags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ break;
+ case TYPE_MUL_SUPER_EFFECTIVE:
+ if (gBattleMoves[gCurrentMove].power && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ gMoveResultFlags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ else
+ gMoveResultFlags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ break;
+ }
+}
+
+void atk06_typecalc(void)
+{
+ s32 i = 0;
+ u8 moveType;
+
+ if (gCurrentMove == MOVE_STRUGGLE)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ // check stab
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
+ gMoveResultFlags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+ else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1)
+ ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
+ gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2)
+ ModulateDmgByType(TYPE_EFFECT_MULTIPLIER(i));
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2
+ && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gMoveResultFlags |= MOVE_RESULT_MISSED;
+ gLastLandedMoves[gBattlerTarget] = 0;
+ gLastHitByType[gBattlerTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
+ }
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ ++gBattlescriptCurrInstr;
+}
+
+void CheckWonderGuardAndLevitate(void)
+{
+ u8 flags = 0;
+ s32 i = 0;
+ u8 moveType;
+
+ if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power)
+ return;
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ gLastUsedAbility = ABILITY_LEVITATE;
+ gBattleCommunication[6] = moveType;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_LEVITATE);
+ return;
+ }
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBattlerTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check no effect
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ }
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2 &&
+ gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2 &&
+ TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NO_EFFECT)
+ {
+ gMoveResultFlags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ gProtectStructs[gBattlerAttacker].targetNotAffected = 1;
+ }
+ // check super effective
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 20)
+ flags |= 1;
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE)
+ flags |= 1;
+ // check not very effective
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type1 && TYPE_EFFECT_MULTIPLIER(i) == 5)
+ flags |= 2;
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[gBattlerTarget].type2
+ && gBattleMons[gBattlerTarget].type1 != gBattleMons[gBattlerTarget].type2
+ && TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_NOT_EFFECTIVE)
+ flags |= 2;
+ }
+ i += 3;
+ }
+ if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBattlerAttacker, gCurrentMove) == 2)
+ {
+ if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBattlerTarget, ABILITY_WONDER_GUARD);
+ }
+ }
+}
+
+// same as ModulateDmgByType except different arguments
+void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags)
+{
+ gBattleMoveDamage = gBattleMoveDamage * multiplier / 10;
+ if (gBattleMoveDamage == 0 && multiplier != 0)
+ gBattleMoveDamage = 1;
+ switch (multiplier)
+ {
+ case TYPE_MUL_NO_EFFECT:
+ *flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ break;
+ case TYPE_MUL_NOT_EFFECTIVE:
+ if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (*flags & MOVE_RESULT_SUPER_EFFECTIVE)
+ *flags &= ~MOVE_RESULT_SUPER_EFFECTIVE;
+ else
+ *flags |= MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ }
+ break;
+ case TYPE_MUL_SUPER_EFFECTIVE:
+ if (gBattleMoves[move].power && !(*flags & MOVE_RESULT_NO_EFFECT))
+ {
+ if (*flags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ *flags &= ~MOVE_RESULT_NOT_VERY_EFFECTIVE;
+ else
+ *flags |= MOVE_RESULT_SUPER_EFFECTIVE;
+ }
+ break;
+ }
+}
+
+u8 TypeCalc(u16 move, u8 attacker, u8 defender)
+{
+ s32 i = 0;
+ u8 flags = 0;
+ u8 moveType;
+
+ if (move == MOVE_STRUGGLE)
+ return 0;
+ moveType = gBattleMoves[move].type;
+ // check stab
+ if (IS_BATTLER_OF_TYPE(attacker, moveType))
+ {
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
+
+ if (gBattleMons[defender].ability == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ flags |= (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE);
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[defender].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+
+ else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type1)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == gBattleMons[defender].type2 &&
+ gBattleMons[defender].type1 != gBattleMons[defender].type2)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ }
+ i += 3;
+ }
+ }
+ if (gBattleMons[defender].ability == ABILITY_WONDER_GUARD
+ && !(flags & MOVE_RESULT_MISSED)
+ && AttacksThisTurn(attacker, move) == 2
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[move].power)
+ flags |= MOVE_RESULT_MISSED;
+ return flags;
+}
+
+u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility)
+{
+ s32 i = 0;
+ u8 flags = 0;
+ u8 type1 = gBaseStats[targetSpecies].type1, type2 = gBaseStats[targetSpecies].type2;
+ u8 moveType;
+
+ if (move == MOVE_STRUGGLE)
+ return 0;
+ moveType = gBattleMoves[move].type;
+ if (targetAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND)
+ {
+ flags = MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE;
+ }
+ else
+ {
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
+ {
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
+ {
+ i += 3;
+ continue;
+ }
+ if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
+ {
+ // check type1
+ if (TYPE_EFFECT_DEF_TYPE(i) == type1)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ // check type2
+ if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2)
+ ModulateDmgByType2(TYPE_EFFECT_MULTIPLIER(i), move, &flags);
+ }
+ i += 3;
+ }
+ }
+ if (targetAbility == ABILITY_WONDER_GUARD
+ && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)))
+ && gBattleMoves[move].power)
+ flags |= MOVE_RESULT_DOESNT_AFFECT_FOE;
+ return flags;
+}
+
+static inline void ApplyRandomDmgMultiplier(void)
+{
+ u16 rand = Random();
+ u16 randPercent = 100 - (rand % 16);
+
+ if (gBattleMoveDamage != 0)
+ {
+ gBattleMoveDamage *= randPercent;
+ gBattleMoveDamage /= 100;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ }
+}
+
+void Unused_ApplyRandomDmgMultiplier(void)
+{
+ ApplyRandomDmgMultiplier();
+}
+
+void atk07_adjustnormaldamage(void)
+{
+ u8 holdEffect, param;
+
+ ApplyRandomDmgMultiplier();
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+// The same as 0x7 except it doesn't check for false swipe move effect.
+void atk08_adjustnormaldamage2(void)
+{
+ u8 holdEffect, param;
+
+ ApplyRandomDmgMultiplier();
+ if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
+ {
+ holdEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
+ param = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ }
+ else
+ {
+ holdEffect = ItemId_GetHoldEffect(gBattleMons[gBattlerTarget].item);
+ param = ItemId_GetHoldEffectParam(gBattleMons[gBattlerTarget].item);
+ }
+ gPotentialItemEffectBattler = gBattlerTarget;
+ if (holdEffect == HOLD_EFFECT_FOCUS_BAND && (Random() % 100) < param)
+ {
+ RecordItemEffectBattle(gBattlerTarget, holdEffect);
+ gSpecialStatuses[gBattlerTarget].focusBanded = 1;
+ }
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
+ {
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+}
+
+void atk09_attackanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE))
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ ++gBattleScripting.animTurn;
+ ++gBattleScripting.animTargetsHit;
+ }
+ else
+ {
+ if ((gBattleMoves[gCurrentMove].target & MOVE_TARGET_BOTH
+ || gBattleMoves[gCurrentMove].target & MOVE_TARGET_FOES_AND_ALLY
+ || gBattleMoves[gCurrentMove].target & MOVE_TARGET_DEPENDS)
+ && gBattleScripting.animTargetsHit)
+ {
+ ++gBattlescriptCurrInstr;
+ return;
+ }
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitMoveAnimation(0, gCurrentMove, gBattleScripting.animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBattlerAttacker].friendship, &gDisableStructs[gBattlerAttacker]);
+ ++gBattleScripting.animTurn;
+ ++gBattleScripting.animTargetsHit;
+ MarkBattlerForControllerExec(gBattlerAttacker);
+ ++gBattlescriptCurrInstr;
+ }
+ else
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_Pausex20;
+ }
+ }
+ }
+}
+
+void atk0A_waitanimation(void)
+{
+ if (!gBattleControllerExecFlags)
+ ++gBattlescriptCurrInstr;
+}
+
+void atk0B_healthbarupdate(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ PrepareStringBattle(STRINGID_SUBSTITUTEDAMAGED, gActiveBattler);
+ }
+ else
+ {
+ s16 healthValue;
+ s32 currDmg = gBattleMoveDamage;
+ s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign
+
+ if (currDmg <= maxPossibleDmgValue)
+ healthValue = currDmg;
+ else
+ healthValue = maxPossibleDmgValue;
+ BtlController_EmitHealthBarUpdate(0, healthValue);
+ MarkBattlerForControllerExec(gActiveBattler);
+ if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleMoveDamage > 0)
+ gBattleResults.playerMonWasDamaged = TRUE;
+ }
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+void atk0C_datahpupdate(void)
+{
+ u32 moveType;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (gBattleStruct->dynamicMoveType == 0)
+ moveType = gBattleMoves[gCurrentMove].type;
+ else if (!(gBattleStruct->dynamicMoveType & 0x40))
+ moveType = gBattleStruct->dynamicMoveType & 0x3F;
+ else
+ moveType = gBattleMoves[gCurrentMove].type;
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE))
+ {
+ if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage)
+ {
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gBattleMoveDamage;
+ gDisableStructs[gActiveBattler].substituteHP -= gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
+ }
+ else
+ {
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = gDisableStructs[gActiveBattler].substituteHP;
+ gHpDealt = gDisableStructs[gActiveBattler].substituteHP;
+ gDisableStructs[gActiveBattler].substituteHP = 0;
+ }
+ // check substitute fading
+ if (gDisableStructs[gActiveBattler].substituteHP == 0)
+ {
+ gBattlescriptCurrInstr += 2;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_SubstituteFade;
+ return;
+ }
+ }
+ else
+ {
+ gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE);
+ if (gBattleMoveDamage < 0) // hp goes up
+ {
+ gBattleMons[gActiveBattler].hp -= gBattleMoveDamage;
+ if (gBattleMons[gActiveBattler].hp > gBattleMons[gActiveBattler].maxHP)
+ gBattleMons[gActiveBattler].hp = gBattleMons[gActiveBattler].maxHP;
+
+ }
+ else // hp goes down
+ {
+ if (gHitMarker & HITMARKER_x20)
+ {
+ gHitMarker &= ~(HITMARKER_x20);
+ }
+ else
+ {
+ gTakenDmg[gActiveBattler] += gBattleMoveDamage;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker;
+ else
+ gTakenDmgByBattler[gActiveBattler] = gBattlerTarget;
+ }
+
+ if (gBattleMons[gActiveBattler].hp > gBattleMoveDamage)
+ {
+ gBattleMons[gActiveBattler].hp -= gBattleMoveDamage;
+ gHpDealt = gBattleMoveDamage;
+ }
+ else
+ {
+ gHpDealt = gBattleMons[gActiveBattler].hp;
+ gBattleMons[gActiveBattler].hp = 0;
+ }
+ if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000))
+ gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
+ if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ {
+ gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
+ gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ {
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
+ }
+ }
+ else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
+ {
+ gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
+ gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
+ if (gBattlescriptCurrInstr[1] == BS_TARGET)
+ {
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerAttacker;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerAttacker;
+ }
+ else
+ {
+ gProtectStructs[gActiveBattler].specialBattlerId = gBattlerTarget;
+ gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerTarget;
+ }
+ }
+ }
+ gHitMarker &= ~(HITMARKER_x100000);
+ BtlController_EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBattler].hp);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ }
+ else
+ {
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
+ if (gSpecialStatuses[gActiveBattler].dmg == 0)
+ gSpecialStatuses[gActiveBattler].dmg = 0xFFFF;
+ }
+ gBattlescriptCurrInstr += 2;
+ }
+}
+
+void atk0D_critmessage(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (gCritMultiplier == 2 && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
+ {
+ PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker);
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atk0E_effectivenesssound(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ gActiveBattler = gBattlerTarget;
+ if (!(gMoveResultFlags & MOVE_RESULT_MISSED))
+ {
+ switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED)))
+ {
+ case MOVE_RESULT_SUPER_EFFECTIVE:
+ BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case MOVE_RESULT_NOT_VERY_EFFECTIVE:
+ BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ MarkBattlerForControllerExec(gActiveBattler);
+ break;
+ case MOVE_RESULT_DOESNT_AFFECT_FOE:
+ case MOVE_RESULT_FAILED:
+ // no sound
+ break;
+ case MOVE_RESULT_FOE_ENDURED:
+ case MOVE_RESULT_ONE_HIT_KO:
+ case MOVE_RESULT_FOE_HUNG_ON:
+ default:
+ if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_H);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_L);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ else if (!(gMoveResultFlags & (MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)))
+ {
+ BtlController_EmitPlaySE(0, SE_KOUKA_M);
+ MarkBattlerForControllerExec(gActiveBattler);
+ }
+ break;
+ }
+ }
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atk0F_resultmessage(void)
+{
+ u32 stringId = 0;
+
+ if (!gBattleControllerExecFlags)
+ {
+ if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[6] > 2))
+ {
+ stringId = gMissStringIds[gBattleCommunication[6]];
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+ else
+ {
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ switch (gMoveResultFlags & (u8)(~(MOVE_RESULT_MISSED)))
+ {
+ case MOVE_RESULT_SUPER_EFFECTIVE:
+ stringId = STRINGID_SUPEREFFECTIVE;
+ break;
+ case MOVE_RESULT_NOT_VERY_EFFECTIVE:
+ stringId = STRINGID_NOTVERYEFFECTIVE;
+ break;
+ case MOVE_RESULT_ONE_HIT_KO:
+ stringId = STRINGID_ONEHITKO;
+ break;
+ case MOVE_RESULT_FOE_ENDURED:
+ stringId = STRINGID_PKMNENDUREDHIT;
+ break;
+ case MOVE_RESULT_FAILED:
+ stringId = STRINGID_BUTITFAILED;
+ break;
+ case MOVE_RESULT_DOESNT_AFFECT_FOE:
+ stringId = STRINGID_ITDOESNTAFFECT;
+ break;
+ case MOVE_RESULT_FOE_HUNG_ON:
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gPotentialItemEffectBattler = gBattlerTarget;
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
+ return;
+ default:
+ if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
+ {
+ stringId = STRINGID_ITDOESNTAFFECT;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_ONE_HIT_KO)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_ONE_HIT_KO);
+ gMoveResultFlags &= ~(MOVE_RESULT_SUPER_EFFECTIVE);
+ gMoveResultFlags &= ~(MOVE_RESULT_NOT_VERY_EFFECTIVE);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_OneHitKOMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FOE_ENDURED)
+ {
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_EnduredMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FOE_HUNG_ON)
+ {
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gPotentialItemEffectBattler = gBattlerTarget;
+ gMoveResultFlags &= ~(MOVE_RESULT_FOE_ENDURED | MOVE_RESULT_FOE_HUNG_ON);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_HangedOnMsg;
+ return;
+ }
+ else if (gMoveResultFlags & MOVE_RESULT_FAILED)
+ {
+ stringId = STRINGID_BUTITFAILED;
+ }
+ else
+ {
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+ }
+ if (stringId)
+ PrepareStringBattle(stringId, gBattlerAttacker);
+ ++gBattlescriptCurrInstr;
+ }
+}
+
+void atk10_printstring(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ u16 var = T2_READ_16(gBattlescriptCurrInstr + 1);
+ PrepareStringBattle(var, gBattlerAttacker);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+void atk11_printselectionstring(void)
+{
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1));
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+}
+
+void atk12_waitmessage(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ if (!gBattleCommunication[MSG_DISPLAY])
+ {
+ gBattlescriptCurrInstr += 3;
+ }
+ else
+ {
+ u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1);
+ if (++gPauseCounterBattle >= toWait)
+ {
+ gPauseCounterBattle = 0;
+ gBattlescriptCurrInstr += 3;
+ gBattleCommunication[MSG_DISPLAY] = 0;
+ }
+ }
+ }
+}
+
+void atk13_printfromtable(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ ptr += gBattleCommunication[MULTISTRING_CHOOSER];
+ PrepareStringBattle(*ptr, gBattlerAttacker);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+void atk14_printselectionstringfromtable(void)
+{
+ if (!gBattleControllerExecFlags)
+ {
+ const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1);
+
+ ptr += gBattleCommunication[MULTISTRING_CHOOSER];
+ gActiveBattler = gBattlerAttacker;
+ BtlController_EmitPrintSelectionString(0, *ptr);
+ MarkBattlerForControllerExec(gActiveBattler);
+ gBattlescriptCurrInstr += 5;
+ gBattleCommunication[MSG_DISPLAY] = 1;
+ }
+}
+
+u8 GetBattlerTurnOrderNum(u8 battlerId)
+{
+ s32 i;
+
+ for (i = 0; i < gBattlersCount && gBattlerByTurnOrder[i] != battlerId; ++i);
+ return i;
+}
+