summaryrefslogtreecommitdiff
path: root/engine/battle/move_effects/present.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle/move_effects/present.asm')
-rw-r--r--engine/battle/move_effects/present.asm75
1 files changed, 75 insertions, 0 deletions
diff --git a/engine/battle/move_effects/present.asm b/engine/battle/move_effects/present.asm
new file mode 100644
index 00000000..360a4172
--- /dev/null
+++ b/engine/battle/move_effects/present.asm
@@ -0,0 +1,75 @@
+BattleCommand_Present:
+; present
+
+ call BattleCommand_Stab
+ ld a, [wTypeMatchup]
+ and a
+ jp z, AnimateFailedMove
+ ld a, [wAttackMissed]
+ and a
+ jp nz, AnimateFailedMove
+
+ push bc
+ call BattleRandom
+ ld b, a
+ ld hl, PresentPower
+ ld c, 0
+.next
+ ld a, [hli]
+ cp -1
+ jr z, .heal_effect
+ cp b
+ jr nc, .got_power
+ inc c
+ inc hl
+ jr .next
+
+.got_power
+ ld a, c
+ ld [wPresentPower], a
+ call AnimateCurrentMoveEitherSide
+ ld d, [hl]
+ pop bc
+ ret
+
+.heal_effect
+ pop bc
+ ld a, 3
+ ld [wPresentPower], a
+ call AnimateCurrentMove
+ call BattleCommand_SwitchTurn
+ ld hl, AICheckPlayerMaxHP
+ ldh a, [hBattleTurn]
+ and a
+ jr z, .got_hp_fn_pointer
+ ld hl, AICheckEnemyMaxHP
+.got_hp_fn_pointer
+ ld a, BANK(AICheckPlayerMaxHP) ; aka BANK(AICheckEnemyMaxHP)
+ rst FarCall
+ jr c, .already_fully_healed
+
+ ld hl, GetQuarterMaxHP
+ call CallBattleCore
+ call BattleCommand_SwitchTurn
+ ld hl, RestoreHP
+ call CallBattleCore
+ call BattleCommand_SwitchTurn
+ ld hl, RegainedHealthText
+ call StdBattleTextbox
+ call BattleCommand_SwitchTurn
+ call UpdateOpponentInParty
+ jr .do_animation
+
+.already_fully_healed
+ call BattleCommand_SwitchTurn
+ ; check battle scene
+ ld a, [wOptions]
+ add a
+ jr nc, .do_animation
+ call AnimateFailedMove
+ ld hl, CantReceiveGiftText
+ call StdBattleTextbox
+.do_animation
+ jp EndMoveEffect
+
+INCLUDE "data/moves/present_power.asm"