diff options
| author | entrpntr <entrpntr@gmail.com> | 2020-05-04 16:23:03 -0400 |
|---|---|---|
| committer | entrpntr <entrpntr@gmail.com> | 2020-05-04 16:23:03 -0400 |
| commit | 858f7a0b8a7aebe69df387654e3201051d348b9e (patch) | |
| tree | 990a5c6dbd7e312b57a89298070cbff8e55293aa /engine/battle | |
| parent | fd35959d94c9487e74b2376e529302b32061af83 (diff) | |
Finish cleanup of bank 3.
Diffstat (limited to 'engine/battle')
| -rwxr-xr-x | engine/battle/anim_hp_bar.asm | 235 |
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 |
