diff options
Diffstat (limited to 'engine/battle/move_effects/present.asm')
-rw-r--r-- | engine/battle/move_effects/present.asm | 75 |
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" |