summaryrefslogtreecommitdiff
path: root/engine/battle
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-04 16:23:03 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-04 16:23:03 -0400
commit858f7a0b8a7aebe69df387654e3201051d348b9e (patch)
tree990a5c6dbd7e312b57a89298070cbff8e55293aa /engine/battle
parentfd35959d94c9487e74b2376e529302b32061af83 (diff)
Finish cleanup of bank 3.
Diffstat (limited to 'engine/battle')
-rwxr-xr-xengine/battle/anim_hp_bar.asm235
1 files changed, 119 insertions, 116 deletions
diff --git a/engine/battle/anim_hp_bar.asm b/engine/battle/anim_hp_bar.asm
index 561cba42..9248ad4f 100755
--- a/engine/battle/anim_hp_bar.asm
+++ b/engine/battle/anim_hp_bar.asm
@@ -1,61 +1,59 @@
-HP_BAR_MAX_PIXELS EQU $30
-
-AnimateHPBar_: ; d62d (3:562d)
- call Functiond665
- jr c, .asm_d64b
- call Functiond676
-.asm_d635
+_AnimateHPBar:
+ call .IsMaximumMoreThan48Pixels
+ jr c, .MoreThan48Pixels
+ call .ComputePixels
+.ShortAnimLoop:
push bc
push hl
- call Functiond6e8
+ call ShortAnim_UpdateVariables
pop hl
pop bc
push af
push bc
push hl
- call Functiond736
- call Functiond7cf
+ call ShortHPBarAnim_UpdateTiles
+ call HPBarAnim_BGMapUpdate
pop hl
pop bc
pop af
- jr nc, .asm_d635
+ jr nc, .ShortAnimLoop
ret
-.asm_d64b
- call Functiond676
-.asm_d64e
+.MoreThan48Pixels:
+ call .ComputePixels
+.LongAnimLoop:
push bc
push hl
- call Functiond6fb
+ call LongAnim_UpdateVariables
pop hl
pop bc
ret c
push af
push bc
push hl
- call Functiond74f
- call Functiond7cf
+ call LongHPBarAnim_UpdateTiles
+ call HPBarAnim_BGMapUpdate
pop hl
pop bc
pop af
- jr nc, .asm_d64e
+ jr nc, .LongAnimLoop
ret
-Functiond665: ; d665 (3:5665)
+.IsMaximumMoreThan48Pixels:
ld a, [wCurHPAnimMaxHP + 1]
and a
- jr nz, .asm_d674
+ jr nz, .player
ld a, [wCurHPAnimMaxHP]
- cp HP_BAR_MAX_PIXELS
- jr nc, .asm_d674
+ cp HP_BAR_LENGTH_PX
+ jr nc, .player
and a
ret
-.asm_d674
+.player
scf
ret
-Functiond676: ; d676 (3:5676)
+.ComputePixels:
push hl
ld hl, wCurHPAnimMaxHP
ld a, [hli]
@@ -70,6 +68,7 @@ Functiond676: ; d676 (3:5676)
call ComputeHPBarPixels
ld a, e
ld [wCurHPBarPixels], a
+
ld a, [wCurHPAnimNewHP]
ld c, a
ld a, [wCurHPAnimNewHP + 1]
@@ -81,6 +80,7 @@ Functiond676: ; d676 (3:5676)
call ComputeHPBarPixels
ld a, e
ld [wNewHPBarPixels], a
+
push hl
ld hl, wCurHPAnimOldHP
ld a, [hli]
@@ -98,15 +98,15 @@ Functiond676: ; d676 (3:5676)
ld a, d
sbc b
ld d, a
- jr c, .asm_d6c7
+ jr c, .negative
ld a, [wCurHPAnimOldHP]
ld [wCurHPAnimLowHP], a
ld a, [wCurHPAnimNewHP]
ld [wCurHPAnimHighHP], a
- ld bc, $1
- jr .asm_d6df
+ ld bc, 1
+ jr .got_direction
-.asm_d6c7
+.negative
ld a, [wCurHPAnimOldHP]
ld [wCurHPAnimHighHP], a
ld a, [wCurHPAnimNewHP]
@@ -118,31 +118,32 @@ Functiond676: ; d676 (3:5676)
ld a, d
xor $ff
ld d, a
- ld bc, rIE
-.asm_d6df
+ ld bc, -1
+.got_direction
ld a, d
ld [wCurHPAnimDeltaHP], a
ld a, e
ld [wCurHPAnimDeltaHP + 1], a
ret
-Functiond6e8: ; d6e8 (3:56e8)
+ShortAnim_UpdateVariables:
ld hl, wCurHPBarPixels
ld a, [wNewHPBarPixels]
cp [hl]
- jr nz, .asm_d6f3
+ jr nz, .not_finished
scf
ret
-.asm_d6f3
+.not_finished
ld a, c
add [hl]
ld [hl], a
- call Functiond83f
+ call ShortHPBar_CalcPixelFrame
and a
ret
-Functiond6fb: ; d6fb (3:56fb)
+LongAnim_UpdateVariables:
+.loop
ld hl, wCurHPAnimOldHP
ld a, [hli]
ld e, a
@@ -150,15 +151,15 @@ Functiond6fb: ; d6fb (3:56fb)
ld d, a
ld a, e
cp [hl]
- jr nz, .asm_d70d
+ jr nz, .next
inc hl
ld a, d
cp [hl]
- jr nz, .asm_d70d
+ jr nz, .next
scf
ret
-.asm_d70d
+.next
ld l, e
ld h, d
add hl, bc
@@ -178,27 +179,26 @@ Functiond6fb: ; d6fb (3:56fb)
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
+ ; This routine is buggy. The result from ComputeHPBarPixels is stored
+ ; in e. However, the pop de opcode deletes this result before it is even
+ ; used. The game then proceeds as though it never deleted that output.
+ ; To fix, uncomment the line below.
+ call ComputeHPBarPixels
+ ; ld a, e
pop bc
- pop de ; overloads e
+ pop de
pop hl
- ld a, e ; expects result from ComputeHPBarPixels
+ ld a, e ; Comment or delete this line to fix the above bug.
ld hl, wCurHPBarPixels
cp [hl]
- jr z, Functiond6fb
+ jr z, .loop
ld [hl], a
and a
ret
-Functiond736: ; d736 (3:5736)
- call Functiond78a
- ld d, $6
+ShortHPBarAnim_UpdateTiles:
+ call HPBarAnim_UpdateHPRemaining
+ ld d, HP_BAR_LENGTH
ld a, [wWhichHPBar]
and $1
ld b, a
@@ -206,13 +206,13 @@ Functiond736: ; d736 (3:5736)
ld e, a
ld c, a
push de
- call Functiond777
+ call HPBarAnim_RedrawHPBar
pop de
- call Functiond7ba
+ call HPBarAnim_PaletteUpdate
ret
-Functiond74f: ; d74f (3:574f)
- call Functiond78a
+LongHPBarAnim_UpdateTiles:
+ call HPBarAnim_UpdateHPRemaining
ld a, [wCurHPAnimOldHP]
ld c, a
ld a, [wCurHPAnimOldHP + 1]
@@ -223,45 +223,45 @@ Functiond74f: ; d74f (3:574f)
ld d, a
call ComputeHPBarPixels
ld c, e
- ld d, $6
+ ld d, HP_BAR_LENGTH
ld a, [wWhichHPBar]
and $1
ld b, a
push de
- call Functiond777
+ call HPBarAnim_RedrawHPBar
pop de
- call Functiond7ba
+ call HPBarAnim_PaletteUpdate
ret
-Functiond777: ; d777 (3:5777)
+HPBarAnim_RedrawHPBar:
ld a, [wWhichHPBar]
cp $2
- jr nz, .asm_d786
- ld a, $28
+ jr nz, .skip
+ ld a, 2 * SCREEN_WIDTH
add l
ld l, a
- ld a, $0
+ ld a, 0
adc h
ld h, a
-.asm_d786
+.skip
call DrawBattleHPBar
ret
-Functiond78a: ; d78a (3:578a)
+HPBarAnim_UpdateHPRemaining:
ld a, [wWhichHPBar]
and a
ret z
cp $1
- jr z, .asm_d798
- ld de, $16
- jr .asm_d79b
+ jr z, .load_15
+ ld de, SCREEN_WIDTH + 2
+ jr .loaded_de
-.asm_d798
- ld de, $15
-.asm_d79b
+.load_15
+ ld de, SCREEN_WIDTH + 1
+.loaded_de
push hl
add hl, de
- ld a, $7f
+ ld a, " "
ld [hli], a
ld [hli], a
ld [hld], a
@@ -276,7 +276,7 @@ Functiond78a: ; d78a (3:578a)
pop hl
ret
-Functiond7ba: ; d7ba (3:57ba)
+HPBarAnim_PaletteUpdate:
ldh a, [hCGB]
and a
ret z
@@ -284,45 +284,43 @@ Functiond7ba: ; d7ba (3:57ba)
call SetHPPal
ld a, [wCurHPAnimPal]
ld c, a
- ld a, $2
- ld hl, $520b
- rst FarCall
+ farcall ApplyHPBarPals
ret
-Functiond7cf: ; d7cf (3:57cf)
+HPBarAnim_BGMapUpdate:
ldh a, [hCGB]
and a
- jr nz, .asm_d7db
+ jr nz, .cgb
call DelayFrame
call DelayFrame
ret
-.asm_d7db
+.cgb
ld a, [wWhichHPBar]
and a
- jr z, .asm_d82f
+ jr z, .load_0
cp $1
- jr z, .asm_d833
+ jr z, .load_1
ld a, [wCurPartyMon]
cp $3
- jr nc, .asm_d7f0
+ jr nc, .bottom_half_of_screen
ld c, $0
- jr .asm_d7f2
+ jr .got_third
-.asm_d7f0
+.bottom_half_of_screen
ld c, $1
-.asm_d7f2
+.got_third
push af
cp $2
- jr z, .asm_d805
+ jr z, .skip_delay
cp $5
- jr z, .asm_d805
+ jr z, .skip_delay
ld a, $2
ldh [hBGMapMode], a
ld a, c
ldh [hBGMapThird], a
call DelayFrame
-.asm_d805
+.skip_delay
ld a, $1
ldh [hBGMapMode], a
ld a, c
@@ -330,12 +328,12 @@ Functiond7cf: ; d7cf (3:57cf)
call DelayFrame
pop af
cp $2
- jr z, .asm_d819
+ jr z, .two_frames
cp $5
- jr z, .asm_d819
+ jr z, .two_frames
ret
-.asm_d819
+.two_frames
inc c
ld a, $2
ldh [hBGMapMode], a
@@ -349,73 +347,78 @@ Functiond7cf: ; d7cf (3:57cf)
call DelayFrame
ret
-.asm_d82f
+.load_0
ld c, $0
- jr .asm_d835
+ jr .finish
-.asm_d833
+.load_1
ld c, $1
-.asm_d835
+.finish
call DelayFrame
ld a, c
ldh [hBGMapThird], a
call DelayFrame
ret
-Functiond83f: ; d83f (3:583f)
+ShortHPBar_CalcPixelFrame:
ld a, [wCurHPAnimMaxHP]
ld c, a
- ld b, $0
- ld hl, $0
+ ld b, 0
+ ld hl, 0
ld a, [wCurHPBarPixels]
- cp HP_BAR_MAX_PIXELS
- jr nc, .asm_d88b
+ cp HP_BAR_LENGTH_PX
+ jr nc, .return_max
and a
- jr z, .asm_d886
+ jr z, .return_zero
call AddNTimes
- ld b, $0
-.asm_d857
+
+ ld b, 0
+; This routine is buggy. If [wCurHPAnimMaxHP] * [wCurHPBarPixels] is
+; divisible by HP_BAR_LENGTH_PX, the loop runs one extra time.
+; To fix, uncomment the line below.
+.loop
ld a, l
- sub HP_BAR_MAX_PIXELS % $100
+ sub HP_BAR_LENGTH_PX
ld l, a
ld a, h
- sbc HP_BAR_MAX_PIXELS / $100
+ sbc $0
ld h, a
- jr c, .asm_d864
+ ; jr z, .done
+ jr c, .done
inc b
- jr .asm_d857
+ jr .loop
-.asm_d864
+.done
push bc
ld bc, $80
add hl, bc
pop bc
ld a, l
- sub HP_BAR_MAX_PIXELS % $100
+ sub HP_BAR_LENGTH_PX
ld l, a
ld a, h
- sbc HP_BAR_MAX_PIXELS / $100
+ sbc $0
ld h, a
- jr c, .asm_d875
+ jr c, .no_carry
inc b
-.asm_d875
+.no_carry
ld a, [wCurHPAnimLowHP]
cp b
- jr nc, .asm_d882
+ jr nc, .finish
ld a, [wCurHPAnimHighHP]
cp b
- jr c, .asm_d882
+ jr c, .finish
ld a, b
-.asm_d882
+.finish
ld [wCurHPAnimOldHP], a
ret
-.asm_d886
+.return_zero
xor a
ld [wCurHPAnimOldHP], a
ret
-.asm_d88b
+.return_max
ld a, [wCurHPAnimMaxHP]
ld [wCurHPAnimOldHP], a
ret