diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-25 06:53:22 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-08-25 06:53:22 +0800 |
commit | 41a7e6967dd4fd79eb01a45f4d77cf7c2ca11dc1 (patch) | |
tree | aceec00f83489b61f2eed7cb9c61f3b55370a2b2 | |
parent | 29d7ae94dea8e35d098b60a786368f391324221e (diff) |
thru atk14
-rw-r--r-- | asm/battle_script_commands.s | 5007 | ||||
-rw-r--r-- | include/battle.h | 3 | ||||
-rw-r--r-- | src/battle_script_commands.c | 1223 |
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; +} + |