From 0ddae2eac07d890bad3bfe79fa9e59cb9d214040 Mon Sep 17 00:00:00 2001 From: Pokeglitch Date: Sat, 16 Jun 2018 15:44:10 -0400 Subject: More field moves, need to clean up names and constants --- engine/pokemon/health.asm | 222 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 220 insertions(+), 2 deletions(-) (limited to 'engine/pokemon') diff --git a/engine/pokemon/health.asm b/engine/pokemon/health.asm index 59ec4db..96616ae 100755 --- a/engine/pokemon/health.asm +++ b/engine/pokemon/health.asm @@ -95,7 +95,7 @@ HealParty: ; 03:4d6f jr nz, .pp_up ret -SECTION "ComputeHPBarPixels", ROMX[$4e3c], BANK[$03] +SECTION "HP Bar", ROMX[$4e3c], BANK[$03] ComputeHPBarPixels: ; 03:4e3c push hl @@ -138,4 +138,222 @@ ComputeHPBarPixels: ; 03:4e3c and a ret nz ld e, 1 - ret \ No newline at end of file + ret + +UpdateHPBar: ; 03:4e7c + ld a, [wHPBarOldHP] + ld c, a + ld a, [wHPBarOldHP + 1] + ld b, a + ld a, [wHPBarNewHP] + ld e, a + ld a, [wHPBarNewHP + 1] + ld d, a + 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, -1 + jr c, .hp_decrease + ld a, 1 +.hp_decrease + ld [wHPBarDelta], a + ld a, [wHPBarNewHP] + ld e, a + ld a, [wHPBarNewHP + 1] + ld d, a +.animate_hp_bar_loop + push de + ld a, [wHPBarOldHP] + ld c, a + ld a, [wHPBarOldHP + 1] + ld b, a + call UpdateHPBar_CompareNewHPToOldHP + jr z, .animate_hp_bar_done + jr nc, .hp_increase + +;hp_decrease + dec bc + ld a, c + ld [wHPBarNewHP], a + ld a, b + ld [wHPBarNewHP + 1], a + call UpdateHPBar_CalcOldNewHPBarPixels + ld a, e + sub d + jr .apply +.hp_increase + inc bc + ld a, c + ld [wHPBarNewHP], a + ld a, b + ld [wHPBarNewHP + 1], a + call UpdateHPBar_CalcOldNewHPBarPixels + ld a, d + sub e +.apply + call UpdateHPBar_PrintHPNumber + and a + jr z, .no_pixel_difference + call UpdateHPBar_AnimateHPBar +.no_pixel_difference + ld a, [wHPBarNewHP] + ld [wHPBarOldHP], a + ld a, [wHPBarNewHP + 1] + ld [wHPBarOldHP + 1], a + pop de + jr .animate_hp_bar_loop +.animate_hp_bar_done + pop de + ld a, e + ld [wHPBarOldHP], a + ld a, d + ld [wHPBarOldHP + 1], a + or e + jr z, .mon_fainted + call UpdateHPBar_CalcOldNewHPBarPixels + ld d, e +.mon_fainted + call UpdateHPBar_PrintHPNumber + ld a, 1 ; TODO - Constant + call UpdateHPBar_AnimateHPBar + jp WaitBGMap + +; 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: ; 03:4F11 + push hl + +.bar_animation_loop + push af + push de + ld d, 6 ; TODO - constant + ld a, [wHPBarType] + and $01 ; TODO - what mask is this? + ld b, a + call DrawBattleHPBar + ld c, 2 + call DelayFrames + pop de + ld a, [wHPBarDelta] + add e + cp $31 ; TODO - constant + jr nc, .bar_filled_up + ld e, a + pop af + dec a + jr nz, .bar_animation_loop + pop hl + ret +.bar_filled_up + pop af + pop hl + ret + +; compares old HP and new HP and sets c and z flags accordingly +UpdateHPBar_CompareNewHPToOldHP: ; 03:4F37 + ld a, d + sub b + ret nz + ld a, e + sub c + ret + +; calcs HP difference between bc and de (into de) +UpdateHPBar_CalcHPDifference: ; 03:4F3D + ld a, d + sub b + jr c, .old_hp_greater + jr z, .test_lower_byte +.new_hp_greater + ld a, e + sub c + ld e, a + ld a, d + sbc b + ld d, a + ret +.old_hp_greater + ld a, c + sub e + ld e, a + ld a, b + sbc d + ld d, a + ret +.test_lower_byte + ld a, e + sub c + jr c, .old_hp_greater + jr nz, .new_hp_greater + ld de, 0 + ret + +UpdateHPBar_PrintHPNumber: ; 03:4F5B + push af + push de + ld a, [wHPBarType] + and a + jr z, .done + ld a, [wHPBarOldHP] + ld [wHPBarTempHP + 1], a + ld a, [wHPBarOldHP + 1] + ld [wHPBarTempHP], a + push hl + ld de, $15 ; TODO - Constant + 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: ; 03:4F8B + push hl + ld hl, wHPBarMaxHP + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld c, a + ld a, [hli] + ld b, a + ld a, [hli] + ld h, [hl] + ld l, a + push hl + push de + call ComputeHPBarPixels + ld a, e + pop de + pop bc + push af + call ComputeHPBarPixels + pop af + ld d, e + ld e, a + pop hl + ret + -- cgit v1.2.3