2014-05-22 22:13:20 +00:00
|
|
|
DrainHPEffect_: ; 783f (1:783f)
|
2015-06-11 22:41:33 +00:00
|
|
|
ld hl, W_DAMAGE
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, [hl]
|
|
|
|
srl a ; divide damage by 2
|
|
|
|
ld [hli], a
|
|
|
|
ld a, [hl]
|
|
|
|
rr a
|
|
|
|
ld [hld], a
|
2015-02-07 21:40:14 +00:00
|
|
|
or [hl] ; is damage 0?
|
|
|
|
jr nz, .getAttackerHP
|
|
|
|
; if damage is 0, increase to 1 so that the attacker gains at least 1 HP
|
2014-05-22 22:13:20 +00:00
|
|
|
inc hl
|
|
|
|
inc [hl]
|
2015-02-07 21:40:14 +00:00
|
|
|
.getAttackerHP
|
|
|
|
ld hl, wBattleMonHP
|
|
|
|
ld de, wBattleMonMaxHP
|
|
|
|
ld a, [H_WHOSETURN]
|
2014-05-22 22:13:20 +00:00
|
|
|
and a
|
2015-02-07 21:40:14 +00:00
|
|
|
jp z, .addDamageToAttackerHP
|
2015-06-11 22:41:33 +00:00
|
|
|
ld hl, wEnemyMonHP
|
|
|
|
ld de, wEnemyMonMaxHP
|
2015-02-07 21:40:14 +00:00
|
|
|
.addDamageToAttackerHP
|
2014-05-22 22:13:20 +00:00
|
|
|
ld bc, wHPBarOldHP+1
|
2015-02-07 21:40:14 +00:00
|
|
|
; copy current HP to wHPBarOldHP
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, [hli]
|
|
|
|
ld [bc], a
|
|
|
|
ld a, [hl]
|
|
|
|
dec bc
|
|
|
|
ld [bc], a
|
2015-02-07 21:40:14 +00:00
|
|
|
; copy max HP to wHPBarMaxHP
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, [de]
|
|
|
|
dec bc
|
|
|
|
ld [bc], a
|
|
|
|
inc de
|
|
|
|
ld a, [de]
|
|
|
|
dec bc
|
|
|
|
ld [bc], a
|
2015-02-07 21:40:14 +00:00
|
|
|
; add damage to attacker's HP and copy new HP to wHPBarNewHP
|
|
|
|
ld a, [W_DAMAGE + 1]
|
2014-05-22 22:13:20 +00:00
|
|
|
ld b, [hl]
|
|
|
|
add b
|
|
|
|
ld [hld], a
|
|
|
|
ld [wHPBarNewHP], a
|
2015-06-11 22:41:33 +00:00
|
|
|
ld a, [W_DAMAGE]
|
2014-05-22 22:13:20 +00:00
|
|
|
ld b, [hl]
|
|
|
|
adc b
|
|
|
|
ld [hli], a
|
|
|
|
ld [wHPBarNewHP+1], a
|
2015-02-07 21:40:14 +00:00
|
|
|
jr c, .capToMaxHP ; if HP > 65,535, cap to max HP
|
|
|
|
; compare HP with max HP
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, [hld]
|
|
|
|
ld b, a
|
|
|
|
ld a, [de]
|
|
|
|
dec de
|
|
|
|
sub b
|
|
|
|
ld a, [hli]
|
|
|
|
ld b, a
|
|
|
|
ld a, [de]
|
|
|
|
inc de
|
|
|
|
sbc b
|
2015-02-07 21:40:14 +00:00
|
|
|
jr nc, .next
|
|
|
|
.capToMaxHP
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, [de]
|
|
|
|
ld [hld], a
|
|
|
|
ld [wHPBarNewHP], a
|
|
|
|
dec de
|
|
|
|
ld a, [de]
|
|
|
|
ld [hli], a
|
|
|
|
ld [wHPBarNewHP+1], a
|
|
|
|
inc de
|
2015-02-07 21:40:14 +00:00
|
|
|
.next
|
|
|
|
ld a, [H_WHOSETURN]
|
2014-05-22 22:13:20 +00:00
|
|
|
and a
|
2015-07-18 20:52:03 +00:00
|
|
|
coord hl, 10, 9
|
2014-05-22 22:13:20 +00:00
|
|
|
ld a, $1
|
2015-02-07 21:40:14 +00:00
|
|
|
jr z, .next2
|
2015-07-18 20:52:03 +00:00
|
|
|
coord hl, 2, 2
|
2014-05-22 22:13:20 +00:00
|
|
|
xor a
|
2015-02-07 21:40:14 +00:00
|
|
|
.next2
|
2015-02-08 06:18:42 +00:00
|
|
|
ld [wHPBarType], a
|
2014-06-16 20:57:26 +00:00
|
|
|
predef UpdateHPBar2
|
2014-08-09 05:39:13 +00:00
|
|
|
predef DrawPlayerHUDAndHPBar
|
|
|
|
predef DrawEnemyHUDAndHPBar
|
2014-05-22 22:13:20 +00:00
|
|
|
callab ReadPlayerMonCurHPAndStatus
|
2015-02-07 21:40:14 +00:00
|
|
|
ld hl, SuckedHealthText
|
|
|
|
ld a, [H_WHOSETURN]
|
2014-05-22 22:13:20 +00:00
|
|
|
and a
|
2015-02-07 21:40:14 +00:00
|
|
|
ld a, [W_PLAYERMOVEEFFECT]
|
|
|
|
jr z, .next3
|
2015-06-11 22:41:33 +00:00
|
|
|
ld a, [W_ENEMYMOVEEFFECT]
|
2015-02-07 21:40:14 +00:00
|
|
|
.next3
|
2014-05-22 22:13:20 +00:00
|
|
|
cp DREAM_EATER_EFFECT
|
2015-02-07 21:40:14 +00:00
|
|
|
jr nz, .printText
|
2014-05-22 22:13:20 +00:00
|
|
|
ld hl, DreamWasEatenText
|
2015-02-07 21:40:14 +00:00
|
|
|
.printText
|
2014-05-22 22:13:20 +00:00
|
|
|
jp PrintText
|
|
|
|
|
|
|
|
SuckedHealthText: ; 78dc (1:78dc)
|
|
|
|
TX_FAR _SuckedHealthText
|
|
|
|
db "@"
|
|
|
|
|
|
|
|
DreamWasEatenText: ; 78e1 (1:78e1)
|
|
|
|
TX_FAR _DreamWasEatenText
|
|
|
|
db "@"
|