mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-02-22 07:02:17 +13:00
Add subdirectories to engine/ similar to pokecrystal
This commit is contained in:
parent
5559d51c86
commit
f275790aec
124 changed files with 342 additions and 346 deletions
270
engine/gfx/hp_bar.asm
Executable file
270
engine/gfx/hp_bar.asm
Executable file
|
|
@ -0,0 +1,270 @@
|
|||
HPBarLength:
|
||||
call GetPredefRegisters
|
||||
|
||||
; calculates bc * 48 / de, the number of pixels the HP bar has
|
||||
; the result is always at least 1
|
||||
GetHPBarLength:
|
||||
push hl
|
||||
xor a
|
||||
ld hl, H_MULTIPLICAND
|
||||
ld [hli], a
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
ld a, c
|
||||
ld [hli], a
|
||||
ld [hl], $30
|
||||
call Multiply ; 48 * bc (hp bar is 48 pixels long)
|
||||
ld a, d
|
||||
and a
|
||||
jr z, .maxHPSmaller256
|
||||
srl d ; make HP in de fit into 1 byte by dividing by 4
|
||||
rr e
|
||||
srl d
|
||||
rr e
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
ld b, a
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
srl b ; divide multiplication result as well
|
||||
rr a
|
||||
srl b
|
||||
rr a
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
ld a, b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
.maxHPSmaller256
|
||||
ld a, e
|
||||
ld [H_DIVISOR], a
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
ld e, a ; e = bc * 48 / de (num of pixels of HP bar)
|
||||
pop hl
|
||||
and a
|
||||
ret nz
|
||||
ld e, $1 ; make result at least 1
|
||||
ret
|
||||
|
||||
; predef $48
|
||||
UpdateHPBar:
|
||||
UpdateHPBar2:
|
||||
push hl
|
||||
ld hl, wHPBarOldHP
|
||||
ld a, [hli]
|
||||
ld c, a ; old HP into bc
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld e, a ; new HP into de
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
push de
|
||||
push bc
|
||||
call UpdateHPBar_CalcHPDifference
|
||||
ld a, e
|
||||
ld [wHPBarHPDifference+1], a
|
||||
ld a, d
|
||||
ld [wHPBarHPDifference], a
|
||||
pop bc
|
||||
pop de
|
||||
call UpdateHPBar_CompareNewHPToOldHP
|
||||
ret z
|
||||
ld a, $ff
|
||||
jr c, .HPdecrease
|
||||
ld a, $1
|
||||
.HPdecrease
|
||||
ld [wHPBarDelta], a
|
||||
call GetPredefRegisters
|
||||
ld a, [wHPBarNewHP]
|
||||
ld e, a
|
||||
ld a, [wHPBarNewHP+1]
|
||||
ld d, a
|
||||
.animateHPBarLoop
|
||||
push de
|
||||
ld a, [wHPBarOldHP]
|
||||
ld c, a
|
||||
ld a, [wHPBarOldHP+1]
|
||||
ld b, a
|
||||
call UpdateHPBar_CompareNewHPToOldHP
|
||||
jr z, .animateHPBarDone
|
||||
jr nc, .HPIncrease
|
||||
; HP decrease
|
||||
dec bc ; subtract 1 HP
|
||||
ld a, c
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, b
|
||||
ld [wHPBarNewHP+1], a
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld a, e
|
||||
sub d ; calc pixel difference
|
||||
jr .ok
|
||||
.HPIncrease
|
||||
inc bc ; add 1 HP
|
||||
ld a, c
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, b
|
||||
ld [wHPBarNewHP+1], a
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld a, d
|
||||
sub e ; calc pixel difference
|
||||
.ok
|
||||
call UpdateHPBar_PrintHPNumber
|
||||
and a
|
||||
jr z, .noPixelDifference
|
||||
call UpdateHPBar_AnimateHPBar
|
||||
.noPixelDifference
|
||||
ld a, [wHPBarNewHP]
|
||||
ld [wHPBarOldHP], a
|
||||
ld a, [wHPBarNewHP+1]
|
||||
ld [wHPBarOldHP+1], a
|
||||
pop de
|
||||
jr .animateHPBarLoop
|
||||
.animateHPBarDone
|
||||
pop de
|
||||
ld a, e
|
||||
ld [wHPBarOldHP], a
|
||||
ld a, d
|
||||
ld [wHPBarOldHP+1], a
|
||||
or e
|
||||
jr z, .monFainted
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld d, e
|
||||
.monFainted
|
||||
call UpdateHPBar_PrintHPNumber
|
||||
ld a, $1
|
||||
call UpdateHPBar_AnimateHPBar
|
||||
jp Delay3
|
||||
|
||||
; animates the HP bar going up or down for (a) ticks (two waiting frames each)
|
||||
; stops prematurely if bar is filled up
|
||||
; e: current health (in pixels) to start with
|
||||
UpdateHPBar_AnimateHPBar:
|
||||
push hl
|
||||
.barAnimationLoop
|
||||
push af
|
||||
push de
|
||||
ld d, $6
|
||||
call DrawHPBar
|
||||
ld c, 2
|
||||
call DelayFrames
|
||||
pop de
|
||||
ld a, [wHPBarDelta] ; +1 or -1
|
||||
add e
|
||||
cp $31
|
||||
jr nc, .barFilledUp
|
||||
ld e, a
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .barAnimationLoop
|
||||
pop hl
|
||||
ret
|
||||
.barFilledUp
|
||||
pop af
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; compares old HP and new HP and sets c and z flags accordingly
|
||||
UpdateHPBar_CompareNewHPToOldHP:
|
||||
ld a, d
|
||||
sub b
|
||||
ret nz
|
||||
ld a, e
|
||||
sub c
|
||||
ret
|
||||
|
||||
; calcs HP difference between bc and de (into de)
|
||||
UpdateHPBar_CalcHPDifference:
|
||||
ld a, d
|
||||
sub b
|
||||
jr c, .oldHPGreater
|
||||
jr z, .testLowerByte
|
||||
.newHPGreater
|
||||
ld a, e
|
||||
sub c
|
||||
ld e, a
|
||||
ld a, d
|
||||
sbc b
|
||||
ld d, a
|
||||
ret
|
||||
.oldHPGreater
|
||||
ld a, c
|
||||
sub e
|
||||
ld e, a
|
||||
ld a, b
|
||||
sbc d
|
||||
ld d, a
|
||||
ret
|
||||
.testLowerByte
|
||||
ld a, e
|
||||
sub c
|
||||
jr c, .oldHPGreater
|
||||
jr nz, .newHPGreater
|
||||
ld de, $0
|
||||
ret
|
||||
|
||||
UpdateHPBar_PrintHPNumber:
|
||||
push af
|
||||
push de
|
||||
ld a, [wHPBarType]
|
||||
and a
|
||||
jr z, .done ; don't print number in enemy HUD
|
||||
; convert from little-endian to big-endian for PrintNumber
|
||||
ld a, [wHPBarOldHP]
|
||||
ld [wHPBarTempHP + 1], a
|
||||
ld a, [wHPBarOldHP + 1]
|
||||
ld [wHPBarTempHP], a
|
||||
push hl
|
||||
ld a, [hFlags_0xFFF6]
|
||||
bit 0, a
|
||||
jr z, .asm_fb15
|
||||
ld de, $9
|
||||
jr .next
|
||||
.asm_fb15
|
||||
ld de, $15
|
||||
.next
|
||||
add hl, de
|
||||
push hl
|
||||
ld a, " "
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
pop hl
|
||||
ld de, wHPBarTempHP
|
||||
lb bc, 2, 3
|
||||
call PrintNumber
|
||||
call DelayFrame
|
||||
pop hl
|
||||
.done
|
||||
pop de
|
||||
pop af
|
||||
ret
|
||||
|
||||
; calcs number of HP bar pixels for old and new HP value
|
||||
; d: new pixels
|
||||
; e: old pixels
|
||||
UpdateHPBar_CalcOldNewHPBarPixels:
|
||||
push hl
|
||||
ld hl, wHPBarMaxHP
|
||||
ld a, [hli] ; max HP into de
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli] ; old HP into bc
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli] ; new HP into hl
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push hl
|
||||
push de
|
||||
call GetHPBarLength ; calc num pixels for old HP
|
||||
ld a, e
|
||||
pop de
|
||||
pop bc
|
||||
push af
|
||||
call GetHPBarLength ; calc num pixels for new HP
|
||||
pop af
|
||||
ld d, e
|
||||
ld e, a
|
||||
pop hl
|
||||
ret
|
||||
Loading…
Add table
Add a link
Reference in a new issue