summaryrefslogtreecommitdiff
path: root/engine/battle/move_effects/present.asm
blob: ad13c0a9d7ad85c875c1a8029acd3b58d2d08bc9 (plain)
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
BattleCommand_Present:
; present

	call BattleCommand_Stab
	ld a, [wTypeMatchup]
	and a
	jp z, AnimateFailedMove
	ld a, [wAttackMissed]
	and a
	jp nz, AnimateFailedMove

	push bc
	call BattleRandom
	ld b, a
	ld hl, PresentPower
	ld c, 0
.next
	ld a, [hli]
	cp -1
	jr z, .heal_effect
	cp b
	jr nc, .got_power
	inc c
	inc hl
	jr .next

.got_power
	ld a, c
	ld [wBattleAnimParam], a
	call AnimateCurrentMoveEitherSide
	ld d, [hl]
	pop bc
	ret

.heal_effect
	pop bc
	ld a, $3 ; heal animation
	ld [wBattleAnimParam], a
	call AnimateCurrentMove
	call BattleCommand_SwitchTurn
	ld hl, AICheckPlayerMaxHP
	ldh a, [hBattleTurn]
	and a
	jr z, .got_hp_fn_pointer
	ld hl, AICheckEnemyMaxHP
.got_hp_fn_pointer
	ld a, BANK(AICheckPlayerMaxHP) ; aka BANK(AICheckEnemyMaxHP)
	rst FarCall
	jr c, .already_fully_healed

	ld hl, GetQuarterMaxHP
	call CallBattleCore
	call BattleCommand_SwitchTurn
	ld hl, RestoreHP
	call CallBattleCore
	call BattleCommand_SwitchTurn
	ld hl, RegainedHealthText
	call StdBattleTextbox
	call BattleCommand_SwitchTurn
	call UpdateOpponentInParty
	jr .do_animation

.already_fully_healed
	call BattleCommand_SwitchTurn
	; check battle scene
	ld a, [wOptions]
	add a
	jr nc, .do_animation
	call AnimateFailedMove
	ld hl, PresentFailedText
	call StdBattleTextbox
.do_animation
	jp EndMoveEffect

INCLUDE "data/moves/present_power.asm"