pokecrystal-board/engine/battle/move_effects/protect.asm

76 lines
960 B
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
BattleCommand_Protect:
; protect
call ProtectChance
ret c
ld a, BATTLE_VARS_SUBSTATUS1
call GetBattleVarAddr
set SUBSTATUS_PROTECT, [hl]
call AnimateCurrentMove
ld hl, ProtectedItselfText
2019-04-08 05:15:10 -07:00
jp StdBattleTextbox
2018-06-24 07:09:41 -07:00
ProtectChance:
2018-01-23 14:39:09 -08:00
ld de, wPlayerProtectCount
ldh a, [hBattleTurn]
and a
2020-10-04 16:43:28 -07:00
jr z, .got_count
2018-01-23 14:39:09 -08:00
ld de, wEnemyProtectCount
2020-10-04 16:43:28 -07:00
.got_count
2015-11-09 13:41:09 -08:00
call CheckOpponentWentFirst
jr nz, .failed
; Can't have a substitute.
ld a, BATTLE_VARS_SUBSTATUS4
call GetBattleVar
bit SUBSTATUS_SUBSTITUTE, a
jr nz, .failed
; Halve the chance of a successful Protect for each consecutive use.
ld b, $ff
ld a, [de]
ld c, a
.loop
ld a, c
and a
jr z, .done
dec c
srl b
ld a, b
and a
jr nz, .loop
jr .failed
.done
.rand
call BattleRandom
and a
jr z, .rand
dec a
cp b
jr nc, .failed
; Another consecutive Protect use.
ld a, [de]
inc a
ld [de], a
and a
ret
.failed
xor a
ld [de], a
call AnimateFailedMove
call PrintButItFailed
scf
ret