1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
DrainHPEffect_: ; 783f (1:783f)
ld hl, W_DAMAGE
ld a, [hl]
srl a ; divide damage by 2
ld [hli], a
ld a, [hl]
rr a
ld [hld], a
or [hl] ; is damage 0?
jr nz, .getAttackerHP
; if damage is 0, increase to 1 so that the attacker gains at least 1 HP
inc hl
inc [hl]
.getAttackerHP
ld hl, wBattleMonHP
ld de, wBattleMonMaxHP
ld a, [H_WHOSETURN]
and a
jp z, .addDamageToAttackerHP
ld hl, wEnemyMonHP
ld de, wEnemyMonMaxHP
.addDamageToAttackerHP
ld bc, wHPBarOldHP+1
; copy current HP to wHPBarOldHP
ld a, [hli]
ld [bc], a
ld a, [hl]
dec bc
ld [bc], a
; copy max HP to wHPBarMaxHP
ld a, [de]
dec bc
ld [bc], a
inc de
ld a, [de]
dec bc
ld [bc], a
; add damage to attacker's HP and copy new HP to wHPBarNewHP
ld a, [W_DAMAGE + 1]
ld b, [hl]
add b
ld [hld], a
ld [wHPBarNewHP], a
ld a, [W_DAMAGE]
ld b, [hl]
adc b
ld [hli], a
ld [wHPBarNewHP+1], a
jr c, .capToMaxHP ; if HP > 65,535, cap to max HP
; compare HP with max HP
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
jr nc, .next
.capToMaxHP
ld a, [de]
ld [hld], a
ld [wHPBarNewHP], a
dec de
ld a, [de]
ld [hli], a
ld [wHPBarNewHP+1], a
inc de
.next
ld a, [H_WHOSETURN]
and a
coord hl, 10, 9
ld a, $1
jr z, .next2
coord hl, 2, 2
xor a
.next2
ld [wHPBarType], a
predef UpdateHPBar2
predef DrawPlayerHUDAndHPBar
predef DrawEnemyHUDAndHPBar
callab ReadPlayerMonCurHPAndStatus
ld hl, SuckedHealthText
ld a, [H_WHOSETURN]
and a
ld a, [W_PLAYERMOVEEFFECT]
jr z, .next3
ld a, [W_ENEMYMOVEEFFECT]
.next3
cp DREAM_EATER_EFFECT
jr nz, .printText
ld hl, DreamWasEatenText
.printText
jp PrintText
SuckedHealthText: ; 78dc (1:78dc)
TX_FAR _SuckedHealthText
db "@"
DreamWasEatenText: ; 78e1 (1:78e1)
TX_FAR _DreamWasEatenText
db "@"
|