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

A ball saver gives back a ball that drains soon after it starts. In Pokémon Pinball each new ball gets 20 seconds and two saves1, and Catch ‘Em mode adds a 60-second saver without a limit2.

  • TimedPokémon Pinball (1999). 20 seconds at each new ball, two saves; 60 seconds without limit during Catch 'Em mode.1,2

Games

GameYearHowNote
Pokémon Pinball1999Timed20 seconds at each new ball, two saves; 60 seconds without limit during Catch 'Em mode
Every claim about this mechanic, by game (1)

References

  1. ^ abEach table starts with a 20-second ball saver, and every ball lost for good starts a new one. While it runs, a drained ball is saved: the first save leaves the timer alone, and the second cuts it to 1 second and 1 frame. The timer counts down 60 frames a second, and not while the ball is at x 154 or more. Set to 20 seconds, it lasts 1,259 frames, about 21 seconds, if the ball stays left of x 154 throughout (computed). The slot cave can award 30, 60, or 90 seconds instead.Codepret/pokepinballrevised
    How we know
    1Start20SecondSaverTimer: ; 0xdbba
    ⋮
    6	ld a, 59
    7	ld [wBallSaverTimerFrames], a
    8	ld a, 20
    9	ld [wBallSaverTimerSeconds], a
    10	ld a, $2
    11	ld [wNumTimesBallSavedTextWillDisplay], a
    
    engine/pinball_game/ball_saver/ball_saver_20.asm lines 1–12 at 0a6f6dc · upstream ↗
    1HandleBallLossRedField: ; 0xdd76
    2	ld a, [wBallSaverTimerFrames]
    3	ld hl, wBallSaverTimerSeconds
    4	or [hl]
    5	jr z, .youLose
    6	ld a, [wNumTimesBallSavedTextWillDisplay]
    7	bit 7, a
    8	jr nz, .skip_save_text
    9	dec a
    10	ld [wNumTimesBallSavedTextWillDisplay], a
    ⋮
    15	jr nz, .skip_save_text
    16	ld a, $1
    ⋮
    
    engine/pinball_game/ball_loss/ball_loss_red_field.asm lines 1–31 at 0a6f6dc · upstream ↗
    54UpdateBallSaverState: ; 0x146a9
    55	ld a, [wBallSaverTimerFrames]
    56	ld hl, wBallSaverTimerSeconds
    57	or [hl] ;skip if timer ran out
    58	ret z
    59	ld a, [wBallXPos + 1]
    60	cp 154 ;if high? Byte of ball X pos is >= 154, don't update timers
    61	jr nc, .SkipSecondsOrFramesUpdate
    62	ld a, [wBallSaverTimerFrames]
    63	dec a
    64	ld [wBallSaverTimerFrames], a
    65	bit 7, a
    ⋮
    
    engine/pinball_game/object_collision/red_stage_resolve_collision.asm lines 53–75 at 0a6f6dc · upstream ↗
    43	callba Start20SecondSaverTimer
    
    engine/pinball_game/stage_init/init_red_field.asm line 43 at 0a6f6dc · upstream ↗
    161SlotRewards_CallTable: ; 0xeeca
    162	dw Start30SecondSaverTimer
    163	dw Start60SecondSaverTimer
    164	dw Start90SecondSaverTimer
    
    engine/pinball_game/slot.asm lines 161–164 at 0a6f6dc · upstream ↗

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

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

    In the claim ledger

  2. ^ abEvery Pokémon gets the same 2 minutes to be caught: all 151 entries of CatchEmTimerData are 0 seconds and 2 minutes. Starting the mode also starts a 60-second ball saver that saves without limit, and the saver from before is restored when the mode ends.Codepret/pokepinballrevised
    How we know
    1CatchEmTimerData: ; 0x12a22
    2; Each 2-byte entry represents the total time you have to catch a Pokemon.
    3; They're all exactly 2 minutes, 0 seconds, but they can be changed to make
    4; different pokemon have different times, in order to add difficulty.
    5; First byte  = seconds value
    6; Second byte = minutes value
    7	db $00, $02  ; BULBASAUR
    ⋮
    157	db $00, $02  ; MEW
    
    data/catchem_timer_values.asm lines 1–157 at 0a6f6dc · upstream ↗
    123	ld hl, CatchEmTimerData ;contains how long each mon stays on screen, all are 2 minutes by default
    ⋮
    129	callba StartTimer
    130	callba InitBallSaverForCatchEmMode
    
    engine/pinball_game/catchem_mode.asm lines 118–131 at 0a6f6dc · upstream ↗
    1InitBallSaverForCatchEmMode: ; 0xdbd4
    ⋮
    10	ld a, $ff
    ⋮
    14	ld a, 60
    15	ld [wBallSaverTimerSeconds], a
    16	ld a, $ff
    17	ld [wNumTimesBallSavedTextWillDisplay], a
    18	ret
    ⋮
    20RestoreBallSaverAfterCatchEmMode: ; 0xdc00
    ⋮
    24	ld [wBallSaverTimerSeconds], a
    ⋮
    26	ld [wNumTimesBallSavedTextWillDisplay], a
    
    engine/pinball_game/ball_saver/ball_saver_catchem_mode.asm lines 1–32 at 0a6f6dc · upstream ↗

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

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

    In the claim ledger

Sources

Code