shithub: pokecrystal

Download patch

ref: f750d4f4185529cfb440ac7825d202ebcf160766
parent: fe4377ce532d1fea1b28d2c52e4f62f0ca702a30
parent: d4025863cf56466b79827bace6d6b3e48ffd05e9
author: yenatch <[email protected]>
date: Wed Apr 4 17:18:15 EDT 2018

Merge pull request #505 from mid-kid/battlecommands

Battle command fixes

--- a/data/battle/effect_command_pointers.asm
+++ b/data/battle/effect_command_pointers.asm
@@ -14,10 +14,10 @@
 	dw BattleCommand_DamageVariation ; 34cfd
 	dw BattleCommand_CheckHit ; 34d32
 	dw BattleCommand_LowerSub ; 34eee
-	dw BattleCommand_HitTargetNoSub ; 34f60
+	dw BattleCommand_MoveAnimNoSub ; 34f60
 	dw BattleCommand_RaiseSub ; 35004
 	dw BattleCommand_FailureText ; 35023
-	dw BattleCommand_CheckFaint ; 3505e
+	dw BattleCommand_ApplyDamage ; 3505e
 	dw BattleCommand_CriticalText ; 35175
 	dw BattleCommand_SuperEffectiveText ; 351ad
 	dw BattleCommand_CheckDestinyBond ; 351c0
@@ -168,13 +168,13 @@
 	dw BattleCommand_RageDamage ; 3527b
 	dw BattleCommand_ResetTypeMatchup ; 34833
 	dw BattleCommand_AllStatsUp ; 36500
-	dw BattleCommanda5 ; 35165
+	dw BattleCommand_BideFailText ; 35165
 	dw BattleCommand_RaiseSubNoAnim ; 365af
 	dw BattleCommand_LowerSubNoAnim ; 365c3
-	dw BattleCommanda8 ; 355b5
+	dw BattleCommand_BeatUpFailText ; 355b5
 	dw BattleCommand_ClearMissDamage ; 355d5 - a9
 	dw BattleCommand_MoveDelay ; 37e80
-	dw BattleCommand_HitTarget ; 34f57
+	dw BattleCommand_MoveAnim ; 34f57
 	dw BattleCommand_TriStatusChance ; 3658f
 	dw BattleCommand_SuperEffectiveLoopText ; 351a5
 	dw BattleCommand_StartLoop ; 35197
--- a/data/moves/effects.asm
+++ b/data/moves/effects.asm
@@ -10,9 +10,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -40,9 +40,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -60,9 +60,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	draintarget
@@ -82,9 +82,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -103,9 +103,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -124,9 +124,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -145,9 +145,9 @@
 	damagevariation
 	checkhit
 	selfdestruct
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -165,9 +165,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	eatdream
@@ -544,9 +544,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -566,9 +566,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -589,9 +589,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -611,9 +611,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -633,9 +633,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -655,9 +655,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -677,9 +677,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -699,9 +699,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -721,9 +721,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -743,9 +743,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -763,9 +763,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	payday
@@ -796,9 +796,9 @@
 	unleashenergy
 	resettypematchup
 	checkhit
-	hittarget
-	effect0xa5
-	checkfaint
+	moveanim
+	bidefailtext
+	applydamage
 	checkdestinybond
 	buildopponentrage
 	kingsrock
@@ -817,9 +817,9 @@
 	stab
 	damagevariation
 	clearmissdamage
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -848,9 +848,9 @@
 	stab
 	damagevariation
 	clearmissdamage
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	cleartext
 	supereffectivelooptext
@@ -875,9 +875,9 @@
 	stab
 	damagevariation
 	clearmissdamage
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	cleartext
 	supereffectivelooptext
@@ -900,9 +900,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -916,9 +916,9 @@
 	doturn
 	stab
 	ohko
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -935,9 +935,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	recoil
@@ -980,9 +980,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1022,9 +1022,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1066,9 +1066,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1094,9 +1094,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	rechargenextturn
@@ -1115,10 +1115,10 @@
 	checkhit
 	ragedamage
 	damagevariation
-	hittarget
+	moveanim
 	failuretext
 	rage
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1176,9 +1176,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1198,10 +1198,10 @@
 	stab
 	damagevariation
 	checkhit
-	hittargetnosub
+	moveanimnosub
 	raisesub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1220,9 +1220,9 @@
 	stab
 	damagevariation
 	clearmissdamage
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1239,9 +1239,9 @@
 	constantdamage
 	checkhit
 	resettypematchup
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	checkdestinybond
 	buildopponentrage
 	kingsrock
@@ -1254,9 +1254,9 @@
 	constantdamage
 	stab
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	supereffectivetext
 	checkdestinybond
 	buildopponentrage
@@ -1268,9 +1268,9 @@
 	usedmovetext
 	doturn
 	counter
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	checkdestinybond
 	buildopponentrage
 	kingsrock
@@ -1304,9 +1304,9 @@
 	checkhit
 	effectchance
 	snore
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1378,9 +1378,9 @@
 	damagevariation
 	falseswipe
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1409,9 +1409,9 @@
 	stab
 	damagevariation
 	clearmissdamage
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	cleartext
 	supereffectivelooptext
@@ -1434,9 +1434,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	thief
@@ -1470,9 +1470,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	defrost
@@ -1543,9 +1543,9 @@
 	checkhit
 	rolloutpower
 	damagevariation
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1582,9 +1582,9 @@
 	checkhit
 	furycutter
 	damagevariation
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1611,9 +1611,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1634,7 +1634,7 @@
 	damagevariation
 	clearmissdamage
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1653,9 +1653,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1681,9 +1681,9 @@
 	damagevariation
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	defrost
@@ -1704,9 +1704,9 @@
 	damagevariation
 	checkhit
 	doubleundergrounddamage
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1732,9 +1732,9 @@
 	damagevariation
 	pursuit
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1752,9 +1752,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	clearhazards
@@ -1794,9 +1794,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1824,7 +1824,7 @@
 	doturn
 	checkhit
 	fakeout
-	hittarget
+	moveanim
 	failuretext
 	endmove
 
@@ -1847,9 +1847,9 @@
 	usedmovetext
 	doturn
 	mirrorcoat
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	checkdestinybond
 	buildopponentrage
 	kingsrock
@@ -1867,9 +1867,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1892,9 +1892,9 @@
 	doubleflyingdamage
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1914,9 +1914,9 @@
 	doubleundergrounddamage
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1933,9 +1933,9 @@
 	futuresight
 	damagevariation ; skip here if last turn
 	checkhit
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	checkdestinybond
 	buildopponentrage
 	endmove
@@ -1951,9 +1951,9 @@
 	damagevariation
 	doubleflyingdamage
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1972,9 +1972,9 @@
 	doubleminimizedamage
 	checkhit
 	effectchance
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -1995,9 +1995,9 @@
 	stab
 	damagevariation
 	checkhit
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -2017,9 +2017,9 @@
 	effectchance
 	stab
 	damagevariation
-	hittarget
+	moveanim
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	supereffectivetext
 	checkdestinybond
@@ -2047,9 +2047,9 @@
 	damagecalc
 	damagevariation
 	clearmissdamage
-	hittargetnosub
+	moveanimnosub
 	failuretext
-	checkfaint
+	applydamage
 	criticaltext
 	cleartext
 	supereffectivetext
@@ -2056,7 +2056,7 @@
 	checkdestinybond
 	buildopponentrage
 	endloop
-	effect0xa8
+	beatupfailtext
 	raisesub
 	kingsrock
 	endmove
--- a/docs/bugs_and_glitches.md
+++ b/docs/bugs_and_glitches.md
@@ -15,6 +15,8 @@
 - [A Pokémon that fainted from Pursuit will have its old status condition when revived](#a-pokémon-that-fainted-from-pursuit-will-have-its-old-status-condition-when-revived)
 - [Lock-On and Mind Reader don't always bypass Fly and Dig](#lock-on-and-mind-reader-dont-always-bypass-fly-and-dig)
 - [Beat Up can desynchronize link battles](#beat-up-can-desynchronize-link-battles)
+- [Beat Up may fail to raise substitute](#beat-up-may-fail-to-raise-substitute)
+- [Beat Up may trigger King's Rock even if it failed](#beat-up-may-trigger-kings-rock-even-if-it-failed)
 - [Present damage is incorrect in link battles](#present-damage-is-incorrect-in-link-battles)
 - ["Smart" AI encourages Mean Look if its own Pokémon is badly poisoned](#smart-ai-encourages-mean-look-if-its-own-pokémon-is-badly-poisoned)
 - [AI makes a false assumption about `CheckTypeMatchup`](#ai-makes-a-false-assumption-about-checktypematchup)
@@ -337,6 +339,82 @@
 ```
 
 **Fix:** Change `cp [hl]` to `cp c`.
+
+
+## Beat Up may fail to raise substitute
+
+*Fixing this bug will break compatibility with standard Pokémon Crystal for link battles.*  
+(Only the fixes denoted with "breaking" will actually break compatibility, the others just affect what's shown on the screen with the patched game)
+
+This is a bug in `BattleCommand_EndLoop` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm) that prevents the rest of the move's effect from being executed if the player or enemy only has one mon in their party while using Beat Up.
+
+It prevents the substitute from being raised and the King's Rock from working.
+
+```asm
+.only_one_beatup
+	ld a, BATTLE_VARS_SUBSTATUS3
+	call GetBattleVarAddr
+	res SUBSTATUS_IN_LOOP, [hl]
+	call BattleCommand_BeatUpFailText
+	jp EndMoveEffect
+```
+
+**Fix (breaking):** Replace the last two lines with `ret`.  
+**Fix (cosmetics):** Call `BattleCommand_RaiseSub` before the `jp`.
+
+There's a similar oversight in `BattleCommand_FailureText` in [engine/battle/effect_commands.asm](/engine/battle/effect_commands.asm) that will prevent the substitute from being raised if Beat Up is protected against.
+
+```asm
+	cp EFFECT_MULTI_HIT
+	jr z, .multihit
+	cp EFFECT_DOUBLE_HIT
+	jr z, .multihit
+	cp EFFECT_POISON_MULTI_HIT
+	jr z, .multihit
+	jp EndMoveEffect
+
+.multihit
+	call BattleCommand_RaiseSub
+	jp EndMoveEffect
+```
+
+**Fix:** Check for `EFFECT_BEAT_UP` as well.
+
+
+## Beat Up may trigger King's Rock even if it failed
+
+*Fixing this bug will break compatibility with standard Pokémon Crystal for link battles.*
+
+This is a bug in how `wAttackMissed` is never set by BeatUp, even when none of the 'mon have been able to attack (due to being fainted or having a status effect), the King's Rock may activate.
+
+This bug can be fixed in a plethora of ways, but the most straight-forward would be in `BattleCommand_BeatUpFailText` in [engine/battle/move_effects/beat_up.asm](/engine/battle/move_effects/beat_up.asm), as that's always ran before the king's rock effect.
+
+```asm
+BattleCommand_BeatUpFailText: ; 355b5
+; beatupfailtext
+
+	ld a, [wBeatUpHitAtLeastOnce]
+	and a
+	ret nz
+
+	jp PrintButItFailed
+```
+
+**Fix:**
+
+```asm
+BattleCommand_BeatUpFailText: ; 355b5
+; beatupfailtext
+
+	ld a, [wBeatUpHitAtLeastOnce]
+	and a
+	ret nz
+
+	inc a
+	ld [wAttackMissed], a
+
+	jp PrintButItFailed
+```
 
 
 ## Present damage is incorrect in link battles
--- a/engine/battle/effect_commands.asm
+++ b/engine/battle/effect_commands.asm
@@ -556,8 +556,8 @@
 	and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
 	call z, PlayFXAnimID
 
-	ld c, $1
-	call EnemyHurtItself
+	ld c, TRUE
+	call DoEnemyDamage
 	call BattleCommand_RaiseSub
 	call CantMove
 	jp EndTurn
@@ -676,8 +676,8 @@
 	call CallBattleCore
 	ld a, $1
 	ld [hBGMapMode], a
-	ld c, $1
-	call PlayerHurtItself
+	ld c, TRUE
+	call DoPlayerDamage
 	jp BattleCommand_RaiseSub
 
 ; 343db
@@ -2081,16 +2081,16 @@
 ; 34f57
 
 
-BattleCommand_HitTarget: ; 34f57
-; hittarget
+BattleCommand_MoveAnim: ; 34f57
+; moveanim
 	call BattleCommand_LowerSub
-	call BattleCommand_HitTargetNoSub
+	call BattleCommand_MoveAnimNoSub
 	jp BattleCommand_RaiseSub
 
 ; 34f60
 
 
-BattleCommand_HitTargetNoSub: ; 34f60
+BattleCommand_MoveAnimNoSub: ; 34f60
 	ld a, [wAttackMissed]
 	and a
 	jp nz, BattleCommand_MoveDelay
@@ -2274,44 +2274,47 @@
 ; 3505e
 
 
-BattleCommand_CheckFaint: ; 3505e
-; checkfaint
+BattleCommand_ApplyDamage: ; 3505e
+; applydamage
 
 	ld a, BATTLE_VARS_SUBSTATUS1_OPP
 	call GetBattleVar
 	bit SUBSTATUS_ENDURE, a
-	jr z, .not_enduring
+	jr z, .focus_band
+
 	call BattleCommand_FalseSwipe
-	ld b, $0
-	jr nc, .okay
-	ld b, $1
-	jr .okay
+	ld b, 0
+	jr nc, .damage
+	ld b, 1
+	jr .damage
 
-.not_enduring
+.focus_band
 	call GetOpponentItem
 	ld a, b
 	cp HELD_FOCUS_BAND
-	ld b, $0
-	jr nz, .okay
+	ld b, 0
+	jr nz, .damage
+
 	call BattleRandom
 	cp c
-	jr nc, .okay
+	jr nc, .damage
 	call BattleCommand_FalseSwipe
-	ld b, $0
-	jr nc, .okay
-	ld b, $2
-.okay
+	ld b, 0
+	jr nc, .damage
+	ld b, 2
+
+.damage
 	push bc
-	call .check_sub
-	ld c, $0
+	call .update_damage_taken
+	ld c, FALSE
 	ld a, [hBattleTurn]
 	and a
 	jr nz, .damage_player
-	call EnemyHurtItself
+	call DoEnemyDamage
 	jr .done_damage
 
 .damage_player
-	call PlayerHurtItself
+	call DoPlayerDamage
 
 .done_damage
 	pop bc
@@ -2318,21 +2321,21 @@
 	ld a, b
 	and a
 	ret z
+
 	dec a
-	jr nz, .not_enduring2
+	jr nz, .focus_band_text
 	ld hl, EnduredText
 	jp StdBattleTextBox
 
-.not_enduring2
+.focus_band_text
 	call GetOpponentItem
 	ld a, [hl]
 	ld [wNamedObjectIndexBuffer], a
 	call GetItemName
-
 	ld hl, HungOnText
 	jp StdBattleTextBox
 
-.check_sub
+.update_damage_taken
 	ld a, BATTLE_VARS_SUBSTATUS4_OPP
 	call GetBattleVar
 	bit SUBSTATUS_SUBSTITUTE, a
@@ -2341,10 +2344,10 @@
 	ld de, wPlayerDamageTaken + 1
 	ld a, [hBattleTurn]
 	and a
-	jr nz, .damage_taken
+	jr nz, .got_damage_taken
 	ld de, wEnemyDamageTaken + 1
 
-.damage_taken
+.got_damage_taken
 	ld a, [wCurDamage + 1]
 	ld b, a
 	ld a, [de]
@@ -2418,11 +2421,11 @@
 	ld a, $1
 	ld [wKickCounter], a
 	call LoadMoveAnim
-	ld c, $1
+	ld c, TRUE
 	ld a, [hBattleTurn]
 	and a
-	jp nz, EnemyHurtItself
-	jp PlayerHurtItself
+	jp nz, DoEnemyDamage
+	jp DoPlayerDamage
 
 FailText_CheckOpponentProtect: ; 35157
 	ld a, BATTLE_VARS_SUBSTATUS1_OPP
@@ -2437,7 +2440,7 @@
 ; 35165
 
 
-BattleCommanda5: ; 35165
+BattleCommand_BideFailText: ; 35165
 	ld a, [wAttackMissed]
 	and a
 	ret z
@@ -3620,15 +3623,13 @@
 
 	ld c, 3
 	call DelayFrames
-
 	callfar PlayBattleAnim
-
 	ret
 
 ; 35d1c
 
 
-EnemyHurtItself: ; 35d1c
+DoEnemyDamage: ; 35d1c
 	ld hl, wCurDamage
 	ld a, [hli]
 	ld b, a
@@ -3638,13 +3639,14 @@
 
 	ld a, c
 	and a
-	jr nz, .mimic_sub_check
-
+	jr nz, .ignore_substitute
 	ld a, [wEnemySubStatus4]
 	bit SUBSTATUS_SUBSTITUTE, a
-	jp nz, SelfInflictDamageToSubstitute
+	jp nz, DoSubstituteDamage
 
-.mimic_sub_check
+.ignore_substitute
+	; Substract wCurDamage from wEnemyMonHP.
+	;  store original HP in little endian wBuffer3/4
 	ld a, [hld]
 	ld b, a
 	ld a, [wEnemyMonHP + 1]
@@ -3657,19 +3659,18 @@
 	ld [wBuffer4], a
 	sbc b
 	ld [wEnemyMonHP], a
-	jr nc, .mimic_faint
+	jr nc, .no_underflow
 
 	ld a, [wBuffer4]
 	ld [hli], a
 	ld a, [wBuffer3]
 	ld [hl], a
-
 	xor a
 	ld hl, wEnemyMonHP
 	ld [hli], a
 	ld [hl], a
 
-.mimic_faint
+.no_underflow
 	ld hl, wEnemyMonMaxHP
 	ld a, [hli]
 	ld [wBuffer2], a
@@ -3680,6 +3681,7 @@
 	ld [wBuffer6], a
 	ld a, [hl]
 	ld [wBuffer5], a
+
 	hlcoord 2, 2
 	xor a
 	ld [wWhichHPBar], a
@@ -3690,7 +3692,7 @@
 ; 35d7e
 
 
-PlayerHurtItself: ; 35d7e
+DoPlayerDamage: ; 35d7e
 	ld hl, wCurDamage
 	ld a, [hli]
 	ld b, a
@@ -3700,12 +3702,15 @@
 
 	ld a, c
 	and a
-	jr nz, .mimic_sub_check
-
+	jr nz, .ignore_substitute
 	ld a, [wPlayerSubStatus4]
 	bit SUBSTATUS_SUBSTITUTE, a
-	jp nz, SelfInflictDamageToSubstitute
-.mimic_sub_check
+	jp nz, DoSubstituteDamage
+
+.ignore_substitute
+	; Substract wCurDamage from wBattleMonHP.
+	;  store original HP in little endian wBuffer3/4
+	;  store new HP in little endian wBuffer5/6
 	ld a, [hld]
 	ld b, a
 	ld a, [wBattleMonHP + 1]
@@ -3719,7 +3724,7 @@
 	sbc b
 	ld [wBattleMonHP], a
 	ld [wBuffer6], a
-	jr nc, .mimic_faint
+	jr nc, .no_underflow
 
 	ld a, [wBuffer4]
 	ld [hli], a
@@ -3726,7 +3731,6 @@
 	ld a, [wBuffer3]
 	ld [hl], a
 	xor a
-
 	ld hl, wBattleMonHP
 	ld [hli], a
 	ld [hl], a
@@ -3734,14 +3738,15 @@
 	ld [hli], a
 	ld [hl], a
 
-.mimic_faint
+.no_underflow
 	ld hl, wBattleMonMaxHP
 	ld a, [hli]
 	ld [wBuffer2], a
 	ld a, [hl]
 	ld [wBuffer1], a
+
 	hlcoord 10, 9
-	ld a, $1
+	ld a, 1
 	ld [wWhichHPBar], a
 	predef AnimateHPBar
 .did_no_damage
@@ -3750,8 +3755,7 @@
 ; 35de0
 
 
-SelfInflictDamageToSubstitute: ; 35de0
-
+DoSubstituteDamage: ; 35de0
 	ld hl, SubTookDamageText
 	call StdBattleTextBox
 
@@ -4136,6 +4140,7 @@
 
 
 SapHealth: ; 36011
+	; Divide damage by 2, store it in hDividend
 	ld hl, wCurDamage
 	ld a, [hli]
 	srl a
@@ -4145,10 +4150,11 @@
 	rr a
 	ld [hDividend + 1], a
 	or b
-	jr nz, .ok1
-	ld a, $1
+	jr nz, .at_least_one
+	ld a, 1
 	ld [hDividend + 1], a
-.ok1
+.at_least_one
+
 	ld hl, wBattleMonHP
 	ld de, wBattleMonMaxHP
 	ld a, [hBattleTurn]
@@ -4157,6 +4163,8 @@
 	ld hl, wEnemyMonHP
 	ld de, wEnemyMonMaxHP
 .battlemonhp
+
+	; Store current HP in little endian wBuffer3/4
 	ld bc, wBuffer4
 	ld a, [hli]
 	ld [bc], a
@@ -4163,6 +4171,8 @@
 	ld a, [hl]
 	dec bc
 	ld [bc], a
+
+	; Store max HP in little endian wBuffer1/2
 	ld a, [de]
 	dec bc
 	ld [bc], a
@@ -4170,6 +4180,8 @@
 	ld a, [de]
 	dec bc
 	ld [bc], a
+
+	; Add hDividend to current HP and copy it to little endian wBuffer5/6
 	ld a, [hDividend + 1]
 	ld b, [hl]
 	add b
@@ -4180,7 +4192,9 @@
 	adc b
 	ld [hli], a
 	ld [wBuffer6], a
-	jr c, .okay2
+	jr c, .max_hp
+
+	; Substract current HP from max HP (to see if we have more than max HP)
 	ld a, [hld]
 	ld b, a
 	ld a, [de]
@@ -4191,8 +4205,10 @@
 	ld a, [de]
 	inc de
 	sbc b
-	jr nc, .okay3
-.okay2
+	jr nc, .finish
+
+.max_hp
+	; Load max HP into current HP and copy it to little endian wBuffer5/6
 	ld a, [de]
 	ld [hld], a
 	ld [wBuffer5], a
@@ -4201,7 +4217,8 @@
 	ld [hli], a
 	ld [wBuffer6], a
 	inc de
-.okay3
+
+.finish
 	ld a, [hBattleTurn]
 	and a
 	hlcoord 10, 9
@@ -5638,7 +5655,7 @@
 BattleCommand_EndLoop: ; 369b6
 ; endloop
 
-; Loop back to the command before 'critical'.
+; Loop back to 'critical'.
 
 	ld de, wPlayerRolloutCount
 	ld bc, wPlayerDamageTaken
@@ -5701,7 +5718,7 @@
 	ld a, BATTLE_VARS_SUBSTATUS3
 	call GetBattleVarAddr
 	res SUBSTATUS_IN_LOOP, [hl]
-	call BattleCommanda8
+	call BattleCommand_BeatUpFailText
 	jp EndMoveEffect
 
 .not_triple_kick
@@ -5753,7 +5770,6 @@
 	ld [bc], a
 	ret
 
-; Loop back to the command before 'critical'.
 .loop_back_to_critical
 	ld a, [wBattleScriptBufferAddress + 1]
 	ld h, a
--- a/engine/battle/move_effects/beat_up.asm
+++ b/engine/battle/move_effects/beat_up.asm
@@ -5,9 +5,11 @@
 	ld a, [hBattleTurn]
 	and a
 	jp nz, .enemy_beats_up
+
 	ld a, [wPlayerSubStatus3]
 	bit SUBSTATUS_IN_LOOP, a
 	jr nz, .next_mon
+
 	ld c, 20
 	call DelayFrames
 	xor a
@@ -51,11 +53,13 @@
 	ld [wBeatUpHitAtLeastOnce], a
 	ld hl, BeatUpAttackText
 	call StdBattleTextBox
+
 	ld a, [wEnemyMonSpecies]
 	ld [wCurSpecies], a
 	call GetBaseData
 	ld a, [wBaseDefense]
 	ld c, a
+
 	push bc
 	ld a, MON_SPECIES
 	call GetBeatupMonLocation
@@ -65,6 +69,7 @@
 	ld a, [wBaseAttack]
 	pop bc
 	ld b, a
+
 	push bc
 	ld a, MON_LEVEL
 	call GetBeatupMonLocation
@@ -71,6 +76,7 @@
 	ld a, [hl]
 	ld e, a
 	pop bc
+
 	ld a, [wPlayerMoveStructPower]
 	ld d, a
 	ret
@@ -78,21 +84,22 @@
 .enemy_beats_up
 	ld a, [wEnemySubStatus3]
 	bit SUBSTATUS_IN_LOOP, a
-	jr nz, .not_first_enemy_beatup
+	jr nz, .enemy_next_mon
 
 	xor a
 	ld [wEnemyRolloutCount], a
 	ld [wd002], a
 	ld [wBeatUpHitAtLeastOnce], a
-	jr .enemy_continue
+	jr .enemy_got_mon
 
-.not_first_enemy_beatup
+.enemy_next_mon
 	ld a, [wEnemyRolloutCount]
 	ld b, a
 	ld a, [wOTPartyCount]
 	sub b
 	ld [wd002], a
-.enemy_continue
+
+.enemy_got_mon
 	ld a, [wBattleMode]
 	dec a
 	jr z, .wild
@@ -122,6 +129,7 @@
 	call AddNTimes
 	ld de, wStringBuffer1
 	call CopyBytes
+
 .got_enemy_nick
 	ld a, MON_HP
 	call GetBeatupMonLocation
@@ -128,6 +136,7 @@
 	ld a, [hli]
 	or [hl]
 	jp z, .beatup_fail
+
 	ld a, [wd002]
 	ld b, a
 	ld a, [wCurOTMon]
@@ -134,7 +143,6 @@
 	cp b
 	ld hl, wEnemyMonStatus
 	jr z, .active_enemy
-
 	ld a, MON_STATUS
 	call GetBeatupMonLocation
 .active_enemy
@@ -157,11 +165,13 @@
 .finish_beatup
 	ld hl, BeatUpAttackText
 	call StdBattleTextBox
+
 	ld a, [wBattleMonSpecies]
 	ld [wCurSpecies], a
 	call GetBaseData
 	ld a, [wBaseDefense]
 	ld c, a
+
 	push bc
 	ld a, MON_SPECIES
 	call GetBeatupMonLocation
@@ -171,6 +181,7 @@
 	ld a, [wBaseAttack]
 	pop bc
 	ld b, a
+
 	push bc
 	ld a, MON_LEVEL
 	call GetBeatupMonLocation
@@ -177,6 +188,7 @@
 	ld a, [hl]
 	ld e, a
 	pop bc
+
 	ld a, [wEnemyMoveStructPower]
 	ld d, a
 	ret
@@ -191,7 +203,9 @@
 ; 355b5
 
 
-BattleCommanda8: ; 355b5
+BattleCommand_BeatUpFailText: ; 355b5
+; beatupfailtext
+
 	ld a, [wBeatUpHitAtLeastOnce]
 	and a
 	ret nz
--- a/engine/battle/move_effects/false_swipe.asm
+++ b/engine/battle/move_effects/false_swipe.asm
@@ -1,6 +1,8 @@
 BattleCommand_FalseSwipe: ; 35c94
 ; falseswipe
 
+; Makes sure wCurDamage < MonHP
+
 	ld hl, wEnemyMonHP
 	ld a, [hBattleTurn]
 	and a
@@ -15,6 +17,7 @@
 	pop de
 	pop hl
 	jr c, .done
+
 	ld a, [hli]
 	ld [de], a
 	inc de
@@ -21,6 +24,7 @@
 	ld a, [hl]
 	dec a
 	ld [de], a
+
 	inc a
 	jr nz, .okay
 	dec de
@@ -28,11 +32,13 @@
 	dec a
 	ld [de], a
 .okay
+
 	ld a, [wCriticalHit]
 	cp 2
 	jr nz, .carry
 	xor a
 	ld [wCriticalHit], a
+
 .carry
 	scf
 	ret
--- a/macros/scripts/battle_commands.asm
+++ b/macros/scripts/battle_commands.asm
@@ -15,10 +15,10 @@
 	command damagevariation         ; 08
 	command checkhit                ; 09
 	command lowersub                ; 0a
-	command hittargetnosub          ; 0b
+	command moveanimnosub           ; 0b
 	command raisesub                ; 0c
 	command failuretext             ; 0d
-	command checkfaint              ; 0e
+	command applydamage             ; 0e
 	command criticaltext            ; 0f
 	command supereffectivetext      ; 10
 	command checkdestinybond        ; 11
@@ -169,13 +169,13 @@
 	command ragedamage              ; a2
 	command resettypematchup        ; a3
 	command allstatsup              ; a4
-	command effect0xa5              ; a5
+	command bidefailtext            ; a5
 	command raisesubnoanim          ; a6
 	command lowersubnoanim          ; a7
-	command effect0xa8              ; a8
+	command beatupfailtext          ; a8
 	command clearmissdamage         ; a9
 	command movedelay               ; aa
-	command hittarget               ; ab
+	command moveanim                ; ab
 	command tristatuschance         ; ac
 	command supereffectivelooptext  ; ad
 	command startloop               ; ae