pokegold/engine/anim_hp_bar.asm
2016-06-22 10:50:25 -04:00

422 lines
5.6 KiB
NASM
Executable File

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, [wd007]
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, [wd007]
and $1
ld b, a
push de
call Functiond777
pop de
call Functiond7ba
ret
Functiond777: ; d777 (3:5777)
ld a, [wd007]
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, [wd007]
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)
ld 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)
ld a, [hCGB]
and a
jr nz, .asm_d7db
call DelayFrame
call DelayFrame
ret
.asm_d7db
ld a, [wd007]
and a
jr z, .asm_d82f
cp $1
jr z, .asm_d833
ld a, [wd005]
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
ld [hBGMapMode], a
ld a, c
ld [hBGMapThird], a
call DelayFrame
.asm_d805
ld a, $1
ld [hBGMapMode], a
ld a, c
ld [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
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
.asm_d82f
ld c, $0
jr .asm_d835
.asm_d833
ld c, $1
.asm_d835
call DelayFrame
ld a, c
ld [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