summaryrefslogtreecommitdiff
path: root/engine/battle/anim_hp_bar.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle/anim_hp_bar.asm')
-rwxr-xr-xengine/battle/anim_hp_bar.asm421
1 files changed, 421 insertions, 0 deletions
diff --git a/engine/battle/anim_hp_bar.asm b/engine/battle/anim_hp_bar.asm
new file mode 100755
index 00000000..561cba42
--- /dev/null
+++ b/engine/battle/anim_hp_bar.asm
@@ -0,0 +1,421 @@
+HP_BAR_MAX_PIXELS EQU $30
+
+AnimateHPBar_: ; d62d (3:562d)
+ call Functiond665
+ jr c, .asm_d64b
+ call Functiond676
+.asm_d635
+ push bc
+ push hl
+ call Functiond6e8
+ pop hl
+ pop bc
+ push af
+ push bc
+ push hl
+ call Functiond736
+ call Functiond7cf
+ pop hl
+ pop bc
+ pop af
+ jr nc, .asm_d635
+ ret
+
+.asm_d64b
+ call Functiond676
+.asm_d64e
+ push bc
+ push hl
+ call Functiond6fb
+ pop hl
+ pop bc
+ ret c
+ push af
+ push bc
+ push hl
+ call Functiond74f
+ call Functiond7cf
+ pop hl
+ pop bc
+ pop af
+ jr nc, .asm_d64e
+ ret
+
+Functiond665: ; d665 (3:5665)
+ ld a, [wCurHPAnimMaxHP + 1]
+ and a
+ jr nz, .asm_d674
+ ld a, [wCurHPAnimMaxHP]
+ cp HP_BAR_MAX_PIXELS
+ jr nc, .asm_d674
+ and a
+ ret
+
+.asm_d674
+ scf
+ ret
+
+Functiond676: ; d676 (3:5676)
+ push hl
+ ld hl, wCurHPAnimMaxHP
+ 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 [wCurHPBarPixels], a
+ ld a, [wCurHPAnimNewHP]
+ ld c, a
+ ld a, [wCurHPAnimNewHP + 1]
+ ld b, a
+ ld a, [wCurHPAnimMaxHP]
+ ld e, a
+ ld a, [wCurHPAnimMaxHP + 1]
+ ld d, a
+ call ComputeHPBarPixels
+ ld a, e
+ ld [wNewHPBarPixels], a
+ push hl
+ ld hl, wCurHPAnimOldHP
+ 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_d6c7
+ ld a, [wCurHPAnimOldHP]
+ ld [wCurHPAnimLowHP], a
+ ld a, [wCurHPAnimNewHP]
+ ld [wCurHPAnimHighHP], a
+ ld bc, $1
+ jr .asm_d6df
+
+.asm_d6c7
+ ld a, [wCurHPAnimOldHP]
+ ld [wCurHPAnimHighHP], a
+ ld a, [wCurHPAnimNewHP]
+ ld [wCurHPAnimLowHP], a
+ ld a, e
+ xor $ff
+ inc a
+ ld e, a
+ ld a, d
+ xor $ff
+ ld d, a
+ ld bc, rIE
+.asm_d6df
+ ld a, d
+ ld [wCurHPAnimDeltaHP], a
+ ld a, e
+ ld [wCurHPAnimDeltaHP + 1], a
+ ret
+
+Functiond6e8: ; d6e8 (3:56e8)
+ ld hl, wCurHPBarPixels
+ ld a, [wNewHPBarPixels]
+ cp [hl]
+ jr nz, .asm_d6f3
+ scf
+ ret
+
+.asm_d6f3
+ ld a, c
+ add [hl]
+ ld [hl], a
+ call Functiond83f
+ and a
+ ret
+
+Functiond6fb: ; d6fb (3:56fb)
+ ld hl, wCurHPAnimOldHP
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, e
+ cp [hl]
+ jr nz, .asm_d70d
+ inc hl
+ ld a, d
+ cp [hl]
+ jr nz, .asm_d70d
+ scf
+ ret
+
+.asm_d70d
+ ld l, e
+ ld h, d
+ add hl, bc
+ ld a, l
+ ld [wCurHPAnimOldHP], a
+ ld a, h
+ ld [wCurHPAnimOldHP + 1], a
+ push hl
+ push de
+ push bc
+ ld hl, wCurHPAnimMaxHP
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ; BUG: This routine is meant to make the HP bar move at
+ ; the same rate regardless of how many HP the Pokemon has.
+ ; In actuality, this causes Pokemon with more than 48 HP
+ ; to gain or lose HP at the rate of 1 HP per BGMap update
+ ; rather than 1 pixel on the HUD.
+ ; To fix, move the "ld a, e" above the "pop de".
+ call ComputeHPBarPixels ; returns to e
+ pop bc
+ pop de ; overloads e
+ pop hl
+ ld a, e ; expects result from ComputeHPBarPixels
+ ld hl, wCurHPBarPixels
+ cp [hl]
+ jr z, Functiond6fb
+ ld [hl], a
+ and a
+ ret
+
+Functiond736: ; d736 (3:5736)
+ call Functiond78a
+ ld d, $6
+ ld a, [wWhichHPBar]
+ and $1
+ ld b, a
+ ld a, [wCurHPBarPixels]
+ ld e, a
+ ld c, a
+ push de
+ call Functiond777
+ pop de
+ call Functiond7ba
+ ret
+
+Functiond74f: ; d74f (3:574f)
+ call Functiond78a
+ ld a, [wCurHPAnimOldHP]
+ ld c, a
+ ld a, [wCurHPAnimOldHP + 1]
+ ld b, a
+ ld a, [wCurHPAnimMaxHP]
+ ld e, a
+ ld a, [wCurHPAnimMaxHP + 1]
+ ld d, a
+ call ComputeHPBarPixels
+ ld c, e
+ ld d, $6
+ ld a, [wWhichHPBar]
+ and $1
+ ld b, a
+ push de
+ call Functiond777
+ pop de
+ call Functiond7ba
+ ret
+
+Functiond777: ; d777 (3:5777)
+ ld a, [wWhichHPBar]
+ cp $2
+ jr nz, .asm_d786
+ ld a, $28
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+.asm_d786
+ call DrawBattleHPBar
+ ret
+
+Functiond78a: ; d78a (3:578a)
+ ld a, [wWhichHPBar]
+ and a
+ ret z
+ cp $1
+ jr z, .asm_d798
+ ld de, $16
+ jr .asm_d79b
+
+.asm_d798
+ ld de, $15
+.asm_d79b
+ push hl
+ add hl, de
+ ld a, $7f
+ ld [hli], a
+ ld [hli], a
+ ld [hld], a
+ dec hl
+ ld a, [wCurHPAnimOldHP]
+ ld [wStringBuffer2 + 1], a
+ ld a, [wCurHPAnimOldHP + 1]
+ ld [wStringBuffer2], a
+ ld de, wStringBuffer2
+ lb bc, 2, 3
+ call PrintNum
+ pop hl
+ ret
+
+Functiond7ba: ; d7ba (3:57ba)
+ ldh a, [hCGB]
+ and a
+ ret z
+ ld hl, wCurHPAnimPal
+ call SetHPPal
+ ld a, [wCurHPAnimPal]
+ ld c, a
+ ld a, $2
+ ld hl, $520b
+ rst FarCall
+ ret
+
+Functiond7cf: ; d7cf (3:57cf)
+ ldh a, [hCGB]
+ and a
+ jr nz, .asm_d7db
+ call DelayFrame
+ call DelayFrame
+ ret
+
+.asm_d7db
+ ld a, [wWhichHPBar]
+ and a
+ jr z, .asm_d82f
+ cp $1
+ jr z, .asm_d833
+ ld a, [wCurPartyMon]
+ cp $3
+ jr nc, .asm_d7f0
+ ld c, $0
+ jr .asm_d7f2
+
+.asm_d7f0
+ ld c, $1
+.asm_d7f2
+ push af
+ cp $2
+ jr z, .asm_d805
+ cp $5
+ jr z, .asm_d805
+ ld a, $2
+ ldh [hBGMapMode], a
+ ld a, c
+ ldh [hBGMapThird], a
+ call DelayFrame
+.asm_d805
+ ld a, $1
+ ldh [hBGMapMode], a
+ ld a, c
+ ldh [hBGMapThird], a
+ call DelayFrame
+ pop af
+ cp $2
+ jr z, .asm_d819
+ cp $5
+ jr z, .asm_d819
+ ret
+
+.asm_d819
+ inc c
+ ld a, $2
+ ldh [hBGMapMode], a
+ ld a, c
+ ldh [hBGMapThird], a
+ call DelayFrame
+ ld a, $1
+ ldh [hBGMapMode], a
+ ld a, c
+ ldh [hBGMapThird], a
+ call DelayFrame
+ ret
+
+.asm_d82f
+ ld c, $0
+ jr .asm_d835
+
+.asm_d833
+ ld c, $1
+.asm_d835
+ call DelayFrame
+ ld a, c
+ ldh [hBGMapThird], a
+ call DelayFrame
+ ret
+
+Functiond83f: ; d83f (3:583f)
+ ld a, [wCurHPAnimMaxHP]
+ ld c, a
+ ld b, $0
+ ld hl, $0
+ ld a, [wCurHPBarPixels]
+ cp HP_BAR_MAX_PIXELS
+ jr nc, .asm_d88b
+ and a
+ jr z, .asm_d886
+ call AddNTimes
+ ld b, $0
+.asm_d857
+ ld a, l
+ sub HP_BAR_MAX_PIXELS % $100
+ ld l, a
+ ld a, h
+ sbc HP_BAR_MAX_PIXELS / $100
+ ld h, a
+ jr c, .asm_d864
+ inc b
+ jr .asm_d857
+
+.asm_d864
+ push bc
+ ld bc, $80
+ add hl, bc
+ pop bc
+ ld a, l
+ sub HP_BAR_MAX_PIXELS % $100
+ ld l, a
+ ld a, h
+ sbc HP_BAR_MAX_PIXELS / $100
+ ld h, a
+ jr c, .asm_d875
+ inc b
+.asm_d875
+ ld a, [wCurHPAnimLowHP]
+ cp b
+ jr nc, .asm_d882
+ ld a, [wCurHPAnimHighHP]
+ cp b
+ jr c, .asm_d882
+ ld a, b
+.asm_d882
+ ld [wCurHPAnimOldHP], a
+ ret
+
+.asm_d886
+ xor a
+ ld [wCurHPAnimOldHP], a
+ ret
+
+.asm_d88b
+ ld a, [wCurHPAnimMaxHP]
+ ld [wCurHPAnimOldHP], a
+ ret