pokered/engine/battle/moveEffects/substitute_effect.asm
2015-08-30 21:38:41 -05:00

77 lines
1.8 KiB
NASM

SubstituteEffect_: ; 17dad (5:7dad)
ld c, 50
call DelayFrames
ld hl, wBattleMonMaxHP
ld de, wPlayerSubstituteHP
ld bc, wPlayerBattleStatus2
ld a, [H_WHOSETURN]
and a
jr z, .notEnemy
ld hl, wEnemyMonMaxHP
ld de, wEnemySubstituteHP
ld bc, wEnemyBattleStatus2
.notEnemy
ld a, [bc]
bit HasSubstituteUp, a ; user already has substitute?
jr nz, .alreadyHasSubstitute
; quarter health to remove from user
; assumes max HP is 1023 or lower
push bc
ld a, [hli]
ld b, [hl]
srl a
rr b
srl a
rr b ; max hp / 4
push de
ld de, wBattleMonHP - wBattleMonMaxHP
add hl, de ; point hl to current HP low byte
pop de
ld a, b
ld [de], a ; save copy of HP to subtract in ccd7/ccd8 [how much HP substitute has]
ld a, [hld]
; subtract [max hp / 4] to current HP
sub b
ld d, a
ld a, [hl]
sbc 0
pop bc
jr c, .notEnoughHP ; underflow means user would be left with negative health
; bug: since it only brances on carry, it will possibly leave user with 0 HP
.userHasZeroOrMoreHP
ldi [hl], a ; save resulting HP after substraction into current HP
ld [hl], d
ld h, b
ld l, c
set HasSubstituteUp, [hl]
ld a, [wOptions]
bit 7, a ; battle animation is enabled?
ld hl, PlayCurrentMoveAnimation
ld b, BANK(PlayCurrentMoveAnimation)
jr z, .animationEnabled
ld hl, AnimationSubstitute
ld b, BANK(AnimationSubstitute)
.animationEnabled
call Bankswitch ; jump to routine depending on animation setting
ld hl, SubstituteText
call PrintText
jpab DrawHUDsAndHPBars
.alreadyHasSubstitute
ld hl, HasSubstituteText
jr .printText
.notEnoughHP
ld hl, TooWeakSubstituteText
.printText
jp PrintText
SubstituteText: ; 17e1d (5:7e1d)
TX_FAR _SubstituteText
db "@"
HasSubstituteText: ; 17e22 (5:7e22)
TX_FAR _HasSubstituteText
db "@"
TooWeakSubstituteText: ; 17e27 (5:7e27)
TX_FAR _TooWeakSubstituteText
db "@"