On this page
  1. Related
  2. Games
  3. References
  4. Sources

With a rolling HP meter, a hit doesn’t take a character’s HP away at once. It sets a target, and the meter counts down to it over time. In EarthBound the party’s meters move 1.0625 to 1.125 HP per update, and a character is knocked out only when the meter reaches 0; when the last enemy falls, meters still rolling stop where they are1. Its predecessor, EarthBound Beginnings, takes damage off HP in one subtraction2.

  • At onceEarthBound Beginnings (1989). Damage comes off HP at once.2
  • RollingEarthBound (1994). A party member's HP counts down to the damage at about 1 HP per update, and only the rolled value knocks them out.1

Games

GameYearHowNote
EarthBound1994Rollinga party member's HP counts down to the damage at about 1 HP per update, and only the rolled value knocks them out
Every claim about this mechanic, by game (2)

References

  1. ^ abIn EarthBound (US release), damage to a party member sets a target HP, and the HP shown counts toward it over time: each call moves one party slot (picked by the frame counter's low two bits) by 1.125, 1.094, or 1.0625 HP by the text speed setting. Healing rolls at 6.25 HP per update when a fastest flag or the flip-out mode is set; damage rolls at 6.25 only in the flip-out mode. A character falls only when that rolling HP reaches 0. When the last enemy falls, each meter still rolling down stops where it is, so mortal damage that hasn't finished rolling doesn't knock anyone out. Enemies and guest characters take damage at once.CodeHerringway/ebsrc · “EarthBound (USA)”revised
    How we know
    23	LDA a:battler::ally_or_enemy,X
    24	AND #$00FF
    25	BNE @UNKNOWN2
    26	LDA a:battler::npc_id,X
    27	AND #$00FF
    28	BNE @UNKNOWN1
    29	TYA
    30	STA a:battler::hp_target,X
    ⋮
    32	AND #$00FF
    ⋮
    37	TYA
    38	STA PARTY_CHARACTERS+char_struct::current_hp_target,X
    39	BRA @UNKNOWN3
    ⋮
    
    src/battle/set_hp.asm lines 23–64 at 68aec5c · upstream ↗
    12	LDA FRAME_COUNTER
    13	AND #$00FF
    14	AND #$0003
    ⋮
    22	LDA GAME_STATE + game_state::party_members,X
    
    src/misc/hp_pp_roller.asm lines 12–22 at 68aec5c · upstream ↗
    64	LDA FASTEST_HPPP_METER_SPEED
    65	AND #$00FF
    66	BNE @UNKNOWN5
    67	LDA HPPP_METER_FLIPOUT_MODE
    68	BEQ @UNKNOWN6
    69@UNKNOWN5:
    70	MOVE_INT_CONSTANT $00064000, @VIRTUAL06
    71	BRA @UNKNOWN7
    72@UNKNOWN6:
    73	JSR UNKNOWN_C20F58
    ⋮
    79	ADD_INT_ASSIGN @VIRTUAL06, @VIRTUAL0A
    
    src/misc/hp_pp_roller.asm lines 64–80 at 68aec5c · upstream ↗
    109@UNKNOWN10:
    ⋮
    116	LDA HPPP_METER_FLIPOUT_MODE
    117	BEQ @UNKNOWN11
    118	MOVE_INT_CONSTANT $00064000, @VIRTUAL06
    119	BRA @UNKNOWN12
    120@UNKNOWN11:
    121	JSR UNKNOWN_C20F58
    ⋮
    127	SUB_INT_ASSIGN @VIRTUAL06, @VIRTUAL0A
    
    src/misc/hp_pp_roller.asm lines 109–127 at 68aec5c · upstream ↗
    2HP_METER_SPEEDS:
    3	.WORD $2000, 1 ;1 + 4/32
    4	.WORD $1800, 1 ;1 + 3/32
    5	.WORD $1000, 1 ;1 + 2/32
    
    src/data/hp_meter_speeds.asm lines 2–5 at 68aec5c · upstream ↗

    In the cartridge (“EarthBound (USA)”): $C3:FB1F, the three 32-bit rates as the ROM has them. We don't reproduce the bytes.

    665	LDA GAME_STATE+game_state::text_speed
    ⋮
    670	LOADPTR HP_METER_SPEEDS, @VIRTUAL0A
    ⋮
    678	MOVE_INT @VIRTUAL06, HP_METER_SPEED
    
    src/intro/file_select_menu_loop.asm lines 665–678 at 68aec5c · upstream ↗
    43	LDA a:char_struct::current_hp,X
    44	LDX @LOCAL01
    45	STA __BSS_START__,X
    ⋮
    49	LDX @LOCAL01
    50	LDA __BSS_START__,X
    51	BNE @UNKNOWN4
    ⋮
    62	LDA #STATUS_0::UNCONSCIOUS
    63	STA a:battler::afflictions + STATUS_GROUP::PERSISTENT_EASYHEAL,X
    
    src/battle/check_dead_players.asm lines 43–63 at 68aec5c · upstream ↗
    3051@ALLIES_ARE_ALIVE:
    3052	LDA #1
    3053	JSL COUNT_CHARS
    3054	CMP #0
    3055	BNEL @UNKNOWN234
    3056@ENEMIES_ARE_DEAD:
    3057	STZ @LOCAL03
    3058	JSL RESET_HPPP_ROLLING
    
    src/battle/main_battle_routine.asm lines 3051–3058 at 68aec5c · upstream ↗
    37	LDA a:char_struct::current_hp_fraction,Y
    38	BEQ @UNKNOWN2
    39	LDA a:char_struct::current_hp,Y
    40	STA @LOCAL00
    ⋮
    43	ADC #char_struct::current_hp_target
    ⋮
    47	LDA @LOCAL00
    48	CMP @VIRTUAL04
    49	BLTEQ @UNKNOWN2
    50	STA __BSS_START__,X
    
    src/misc/reset_hppp_rolling.asm lines 37–50 at 68aec5c · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Revised after a check by a second AI model, 2026-10-21.

    In the claim ledger

  2. ^ abIn EarthBound Beginnings (English build), damage comes off the target's HP in one subtraction, and the target falls when it reaches 0 or below: there is no rolling meter.CodeNathan-R-Og/mother
    How we know
    4635; @UpdateHP Effect
    4636    ldy target_offset
    4637    sec
    4638    lda BATTLER_CURR_HP, y
    4639    sbc battle_wordvar60
    4640    sta BATTLER_CURR_HP, y
    4641    lda BATTLER_CURR_HP+1, y
    4642    sbc battle_wordvar60+1
    4643    sta BATTLER_CURR_HP+1, y
    4644    bcc @DeathEffect
    4645    ora BATTLER_CURR_HP, y
    4646    beq @DeathEffect
    
    src/global/prg/battle.asm lines 4635–4646 at e0b3e3f · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

Sources

Code