summaryrefslogtreecommitdiff
path: root/engine/anim_hp_bar.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/anim_hp_bar.asm')
-rwxr-xr-xengine/anim_hp_bar.asm430
1 files changed, 430 insertions, 0 deletions
diff --git a/engine/anim_hp_bar.asm b/engine/anim_hp_bar.asm
new file mode 100755
index 000000000..c00a97921
--- /dev/null
+++ b/engine/anim_hp_bar.asm
@@ -0,0 +1,430 @@
+_AnimateHPBar: ; d627
+ call Functiond65f
+ jr c, .do_player
+ call Functiond670
+.enemy_loop
+ push bc
+ push hl
+ call Functiond6e2
+ pop hl
+ pop bc
+ push af
+ push bc
+ push hl
+ call Functiond730
+ call Functiond7c9
+ pop hl
+ pop bc
+ pop af
+ jr nc, .enemy_loop
+ ret
+
+.do_player
+ call Functiond670
+.player_loop
+ push bc
+ push hl
+ call Functiond6f5
+ pop hl
+ pop bc
+ ret c
+ push af
+ push bc
+ push hl
+ call Functiond749
+ call Functiond7c9
+ pop hl
+ pop bc
+ pop af
+ jr nc, .player_loop
+ ret
+; d65f
+
+Functiond65f: ; d65f
+ ld a, [Buffer2]
+ and a
+ jr nz, .player
+ ld a, [Buffer1]
+ cp 6 * 8
+ jr nc, .player
+ and a
+ ret
+
+.player
+ scf
+ ret
+; d670
+
+Functiond670: ; d670
+; Buffer1-2: Max HP
+; Buffer3-4: Old HP
+; Buffer5-6: New HP
+ push hl
+ ld hl, Buffer1
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ pop hl
+ call ComputeHPBarPixels
+ ld a, e
+ ld [wd1f1], a
+
+ ld a, [Buffer5]
+ ld c, a
+ ld a, [Buffer6]
+ ld b, a
+ ld a, [Buffer1]
+ ld e, a
+ ld a, [Buffer2]
+ ld d, a
+ call ComputeHPBarPixels
+ ld a, e
+ ld [wd1f2], a
+
+ push hl
+ ld hl, Buffer3
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ pop hl
+ ld a, e
+ sub c
+ ld e, a
+ ld a, d
+ sbc b
+ ld d, a
+ jr c, .asm_d6c1
+ ld a, [Buffer3]
+ ld [wd1f5], a
+ ld a, [Buffer5]
+ ld [wd1f6], a
+ ld bc, 1
+ jr .asm_d6d9
+
+.asm_d6c1
+ ld a, [Buffer3]
+ ld [wd1f6], a
+ ld a, [Buffer5]
+ ld [wd1f5], a
+ ld a, e
+ xor $ff
+ inc a
+ ld e, a
+ ld a, d
+ xor $ff
+ ld d, a
+ ld bc, rIE
+.asm_d6d9
+ ld a, d
+ ld [wd1f3], a
+ ld a, e
+ ld [wd1f4], a
+ ret
+; d6e2
+
+Functiond6e2: ; d6e2
+ ld hl, wd1f1
+ ld a, [wd1f2]
+ cp [hl]
+ jr nz, .asm_d6ed
+ scf
+ ret
+
+.asm_d6ed
+ ld a, c
+ add [hl]
+ ld [hl], a
+ call Functiond839
+ and a
+ ret
+; d6f5
+
+Functiond6f5: ; d6f5
+.asm_d6f5
+ ld hl, Buffer3
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, e
+ cp [hl]
+ jr nz, .asm_d707
+ inc hl
+ ld a, d
+ cp [hl]
+ jr nz, .asm_d707
+ scf
+ ret
+
+.asm_d707
+ ld l, e
+ ld h, d
+ add hl, bc
+ ld a, l
+ ld [Buffer3], a
+ ld a, h
+ ld [wd1ed], a
+ push hl
+ push de
+ push bc
+ ld hl, Buffer1
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ call ComputeHPBarPixels
+ pop bc
+ pop de
+ pop hl
+ ld a, e
+ ld hl, wd1f1
+ cp [hl]
+ jr z, .asm_d6f5
+ ld [hl], a
+ and a
+ ret
+; d730
+
+Functiond730: ; d730
+ call Functiond784
+ ld d, $6
+ ld a, [wWhichHPBar]
+ and $1
+ ld b, a
+ ld a, [wd1f1]
+ ld e, a
+ ld c, a
+ push de
+ call Functiond771
+ pop de
+ call Functiond7b4
+ ret
+; d749
+
+Functiond749: ; d749
+ call Functiond784
+ ld a, [Buffer3]
+ ld c, a
+ ld a, [wd1ed]
+ ld b, a
+ ld a, [Buffer1]
+ ld e, a
+ ld a, [Buffer2]
+ ld d, a
+ call ComputeHPBarPixels
+ ld c, e
+ ld d, $6
+ ld a, [wWhichHPBar]
+ and $1
+ ld b, a
+ push de
+ call Functiond771
+ pop de
+ call Functiond7b4
+ ret
+; d771
+
+Functiond771: ; d771
+ ld a, [wWhichHPBar]
+ cp $2
+ jr nz, .skip
+ ld a, $28
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+.skip
+ call DrawBattleHPBar
+ ret
+; d784
+
+Functiond784: ; d784
+ ld a, [wWhichHPBar]
+ and a
+ ret z
+ cp $1
+ jr z, .load_15
+ ld de, $16
+ jr .loaded_de
+
+.load_15
+ ld de, $15
+.loaded_de
+ push hl
+ add hl, de
+ ld a, " "
+rept 2
+ ld [hli], a
+endr
+ ld [hld], a
+ dec hl
+ ld a, [Buffer3]
+ ld [StringBuffer2 + 1], a
+ ld a, [wd1ed]
+ ld [StringBuffer2], a
+ ld de, StringBuffer2
+ lb bc, 2, 3
+ call PrintNum
+ pop hl
+ ret
+; d7b4
+
+Functiond7b4: ; d7b4
+ ld a, [hCGB]
+ and a
+ ret z
+ ld hl, wd1f0
+ call SetHPPal
+ ld a, [wd1f0]
+ ld c, a
+ callba ApplyHPBarPals
+ ret
+; d7c9
+
+Functiond7c9: ; d7c9
+ ld a, [hCGB]
+ and a
+ jr nz, .cgb
+ call DelayFrame
+ call DelayFrame
+ ret
+
+.cgb
+ ld a, [wWhichHPBar]
+ and a
+ jr z, .load_0
+ cp $1
+ jr z, .load_1
+ ld a, [CurPartyMon]
+ cp $3
+ jr nc, .c_is_1
+ ld c, $0
+ jr .c_is_0
+
+.c_is_1
+ ld c, $1
+.c_is_0
+ push af
+ cp $2
+ jr z, .skip_delay
+ cp $5
+ jr z, .skip_delay
+ ld a, $2
+ ld [hBGMapMode], a
+ ld a, c
+ ld [hBGMapThird], a
+ call DelayFrame
+.skip_delay
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, c
+ ld [hBGMapThird], a
+ call DelayFrame
+ pop af
+ cp $2
+ jr z, .two_frames
+ cp $5
+ jr z, .two_frames
+ ret
+
+.two_frames
+ inc c
+ ld a, $2
+ ld [hBGMapMode], a
+ ld a, c
+ ld [hBGMapThird], a
+ call DelayFrame
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, c
+ ld [hBGMapThird], a
+ call DelayFrame
+ ret
+
+.load_0
+ ld c, $0
+ jr .finish
+
+.load_1
+ ld c, $1
+.finish
+ call DelayFrame
+ ld a, c
+ ld [hBGMapThird], a
+ call DelayFrame
+ ret
+; d839
+
+Functiond839: ; d839
+ ld a, [Buffer1]
+ ld c, a
+ ld b, 0
+ ld hl, 0
+ ld a, [wd1f1]
+ cp 6 * 8
+ jr nc, .coppy_buffer
+ and a
+ jr z, .return_zero
+ call AddNTimes
+ ld b, 0
+.loop
+ ld a, l
+ sub 6 * 8
+ ld l, a
+ ld a, h
+ sbc $0
+ ld h, a
+ jr c, .done
+ inc b
+ jr .loop
+
+.done
+ push bc
+ ld bc, $80
+ add hl, bc
+ pop bc
+ ld a, l
+ sub 6 * 8
+ ld l, a
+ ld a, h
+ sbc $0
+ ld h, a
+ jr c, .no_carry
+ inc b
+.no_carry
+ ld a, [wd1f5]
+ cp b
+ jr nc, .finish
+ ld a, [wd1f6]
+ cp b
+ jr c, .finish
+ ld a, b
+.finish
+ ld [Buffer3], a
+ ret
+
+.return_zero
+ xor a
+ ld [Buffer3], a
+ ret
+
+.coppy_buffer
+ ld a, [Buffer1]
+ ld [Buffer3], a
+ ret
+; d88c