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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
HealEffect_: ; 3b9ec (e:79ec)
ld a, [H_WHOSETURN]
and a
ld de, wBattleMonHP
ld hl, wBattleMonMaxHP
ld a, [wPlayerMoveNum]
jr z, .healEffect
ld de, wEnemyMonHP
ld hl, wEnemyMonMaxHP
ld a, [wEnemyMoveNum]
.healEffect
ld b, a
ld a, [de]
cp [hl] ; most significant bytes comparison is ignored
; causes the move to miss if max HP is 255 or 511 points higher than the current HP
inc de
inc hl
ld a, [de]
sbc [hl]
jp z, .failed ; no effect if user's HP is already at its maximum
ld a, b
cp REST
jr nz, .healHP
push hl
push de
push af
ld c, 50
call DelayFrames
ld hl, wBattleMonStatus
ld a, [H_WHOSETURN]
and a
jr z, .restEffect
ld hl, wEnemyMonStatus
.restEffect
ld a, [hl]
and a
ld [hl], 2 ; clear status and set number of turns asleep to 2
ld hl, StartedSleepingEffect ; if mon didn't have an status
jr z, .printRestText
ld hl, FellAsleepBecameHealthyText ; if mon had an status
.printRestText
call PrintText
pop af
pop de
pop hl
.healHP
ld a, [hld]
ld [wHPBarMaxHP], a
ld c, a
ld a, [hl]
ld [wHPBarMaxHP+1], a
ld b, a
jr z, .gotHPAmountToHeal
; Recover and Softboiled only heal for half the mon's max HP
srl b
rr c
.gotHPAmountToHeal
; update HP
ld a, [de]
ld [wHPBarOldHP], a
add c
ld [de], a
ld [wHPBarNewHP], a
dec de
ld a, [de]
ld [wHPBarOldHP+1], a
adc b
ld [de], a
ld [wHPBarNewHP+1], a
inc hl
inc de
ld a, [de]
dec de
sub [hl]
dec hl
ld a, [de]
sbc [hl]
jr c, .playAnim
; copy max HP to current HP if an overflow ocurred
ld a, [hli]
ld [de], a
ld [wHPBarNewHP+1], a
inc de
ld a, [hl]
ld [de], a
ld [wHPBarNewHP], a
.playAnim
ld hl, PlayCurrentMoveAnimation
call BankswitchEtoF
ld a, [H_WHOSETURN]
and a
coord hl, 10, 9
ld a, $1
jr z, .updateHPBar
coord hl, 2, 2
xor a
.updateHPBar
ld [wHPBarType], a
predef UpdateHPBar2
ld hl, DrawHUDsAndHPBars
call BankswitchEtoF
ld hl, RegainedHealthText
jp PrintText
.failed
ld c, 50
call DelayFrames
ld hl, PrintButItFailedText_
jp BankswitchEtoF
StartedSleepingEffect: ; 3baa2 (e:7aa2)
TX_FAR _StartedSleepingEffect
db "@"
FellAsleepBecameHealthyText: ; 3baa7 (e:7aa7)
TX_FAR _FellAsleepBecameHealthyText
db "@"
RegainedHealthText: ; 3baac (e:7aac)
TX_FAR _RegainedHealthText
db "@"
|