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

An extra life adds a life or reserve character during play. These nine implementations tie awards to score, though settings can disable them, and schedules range from one award to recurring thresholds1,2,3,4,5,6,7,8,9.

  • OnceSpace Invaders (1978). One ship at 1,500 points, or 1,000 by DIP switch.1Galaxian (1979). One ship at 7,000 points, or 10,000, 12,000, or 20,000 by DIP switch.3Pac-Man (1980). One life at 10,000 points, or 15,000 or 20,000 by DIP switch.4Donkey Kong (1981). One life at 7,000 points, or 10,000, 15,000, or 20,000 by DIP switch.6
  • RepeatingAsteroids (1979). A ship every 10,000 points.2Defender (1981). A ship and a smart bomb every 10,000 points by default.5Galaga (1981). Fighters at two DIP-set scores, then at every multiple of the second, such as 20,000, 70,000, and every 70,000.7Contra (1987). At 20,000 points and every 30,000 after, up to 99 lives.8Super C (1990). At 30,000 points and every 20,000 after, up to 99 lives.9

#Award schedules

Space Invaders, Galaxian, Pac-Man, and Donkey Kong each award one extra life or ship at a single DIP-switch threshold. Each game’s flag blocks a second award for that player1,3,4,6.

Asteroids awards a ship whenever the score passes a multiple of every 10,000 points2,2. Defender awards a ship and a smart bomb at each replay level, which begins at the replay setting and increases by that setting; its default is a ship and a smart bomb every 10,000 points (default)5,5.

Galaga uses two DIP-selected award scores. Some settings repeat at each interval after the second score, using that second score as the interval; others stop after the second award, and one in each of its two tables disables awards7.

The US NES Contra and Super C each award a life at a first score threshold, then advance the next threshold by a fixed interval. Super C reverses Contra’s first threshold and interval, and both cap the life count at 998,8,9.

Games

GameYearHowNote
Space Invaders1978Onceone ship at 1,500 points, or 1,000 by DIP switch
Galaxian1979Onceone ship at 7,000 points, or 10,000, 12,000, or 20,000 by DIP switch
Pac-Man1980Onceone life at 10,000 points, or 15,000 or 20,000 by DIP switch
Donkey Kong1981Onceone life at 7,000 points, or 10,000, 15,000, or 20,000 by DIP switch
Asteroids1979Repeatinga ship every 10,000 points
Defender1981Repeatinga ship and a smart bomb every 10,000 points by default
Galaga1981Repeatingfighters at two DIP-set scores, then at every multiple of the second, such as 20,000, 70,000, and every 70,000
Contra1987Repeatingat 20,000 points and every 30,000 after, up to 99 lives
Super C1990Repeatingat 30,000 points and every 20,000 after, up to 99 lives
Super Mario Bros.: The Lost Levels1986Other conditiongrabbing the flagpole gives a life when the coin count's two digits match the timer's last digit
Super Mario Bros. 21988Other conditionthe slot machine's cherries and triples win lives
Sonic the Hedgehog1991Other condition100 rings earn a life
Sonic the Hedgehog 21992Other condition100 rings earn a life, and 200 another
Every claim about this mechanic, by game (10)
Space Invaders 1978Space Invaders awards one extra ship per player when the upper two digits of the score reach 15, or 10 with DIP switch bit 3 set: at 1,500 or 1,000 points. It then clears the player's award flag, so no second ship follows.Code
Asteroids 1979Asteroids gives a ship each time a player's score passes a multiple of 10,000: the score is two BCD bytes, and when an addition carries into the thousands byte and leaves its low digit 0, the player gains a ship.Code
Galaxian 1979Galaxian awards one extra ship, a "bonus galixip", when the score's top digits reach the DIP setting: 7,000, 10,000, 12,000, or 20,000 points. A per-player flag then blocks any further award.Code
Pac-Man 1980Pac-Man awards one extra life when the score reaches the DIP-switch setting: 10,000, 15,000, or 20,000 points, or never. The table holds BCD thousands (10, 15, 20, and $FF for none). After each score change the code compares the score's ten-thousands and thousands digits with the setting, and a flag bit stops a second award.Code
Defender 1981Defender gives an extra ship and an extra smart bomb at each replay level: the level starts at the replay setting and rises by it each time it is passed. The operator default is 10,000 points, with 3 ships to a game.Code
Donkey Kong 1981Donkey Kong awards one extra life when the score reaches the DIP-switch setting: 7,000, 10,000, 15,000, or 20,000 points. A flag set on the award stops any further one for that player.Code
Galaga 1981Galaga awards extra fighters at a first and a second score set by DIP switches, and with some settings again at every interval after the second, the interval being the second score: one setting gives 20,000, 70,000, and every 70,000 points. The three switches index one of two 8-entry tables, picked by bit 2 of the starting-fighter setting. In the first, five settings repeat, two award only the first two scores, and one awards none; in the second, every first score is 30,000, three settings repeat, four award at most the first two, and one awards none. The source reassembles MAME's galaga set, Namco rev. B.Code
Super Mario Bros.: The Lost Levels 1986Grabbing the flagpole gives an extra life in place of the height's points when the coin count's two digits are the same and match the timer's last digit (11 coins with the timer ending in 1, for example).Code
Contra 1987The US NES Contra awards its first extra life at 20,000 points and each later one 30,000 points past the last threshold, and caps lives at 99.Code
Super C 1990The US NES Super C awards its first extra life at 30,000 points and each later one 20,000 points past the last threshold, the reverse of Contra's 20,000 and 30,000, and caps lives at 99 as Contra does.Code

References

  1. ^ abcSpace Invaders awards one extra ship per player when the upper two digits of the score reach 15, or 10 with DIP switch bit 3 set: at 1,500 or 1,000 points. It then clears the player's award flag, so no second ship follows.CodeComputer Archeology, Space Invaders
    How we know
    1574; Award extra ship if score has reached ceiling
    15750935: CD 10 19        CALL    $1910               ; {code.CurPlyAlive} Get descriptor of sorts
    15760938: 2B              DEC     HL                  ; Back up ...
    15770939: 2B              DEC     HL                  ; ... two bytes
    1578093A: 7E              LD      A,(HL)              ; Has extra ship ...
    1579093B: A7              AND     A                   ; already been awarded?
    1580093C: C8              RET     Z                   ; Yes ... ignore
    1581093D: 06 15           LD      B,$15               ; Default 1500
    1582093F: DB 02           IN      A,($02)             ; {hard.INP2} Read DIP settings
    15830941: E6 08           AND     $08                 ; Extra ship at 1000 or 1500
    15840943: CA 48 09        JP      Z,$0948             ; {} 0=1500
    15850946: 06 10           LD      B,$10               ; Awarded at 1000
    ⋮
    
    content/Arcade/SpaceInvaders/Code.md lines 1574–1592 at 1adc2a7 · upstream ↗
    1606096B: CD 10 19        CALL    $1910               ; {code.CurPlyAlive} Get descriptor for active player of some sort
    1607096E: 2B              DEC     HL                  ; Back up ...
    1608096F: 2B              DEC     HL                  ; ... two bytes
    16090970: 36 00           LD      (HL),$00            ; Flag extra ship has been awarded
    
    content/Arcade/SpaceInvaders/Code.md lines 1606–1609 at 1adc2a7 · upstream ↗

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

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

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

    In the claim ledger

  2. ^ abcdAsteroids gives a ship each time a player's score passes a multiple of 10,000: the score is two BCD bytes, and when an addition carries into the thousands byte and leaves its low digit 0, the player gains a ship.CodeComputer Archeology, Asteroids
    How we know
    SED ; Set Decimal Mode ADC $52,X ; {ram.ply1ScoreTens} Add To Current Players Score, Tens STA $52,X ; {ram.ply1ScoreTens} BCC $73B0 ; {} Increase In Thousands?, No, Branch LDA $53,X ; {ram.ply1ScoreThous} Current Players Score, Thousands ADC #$00 ; Add In The Carry STA $53,X ; {ram.ply1ScoreThous} AND #$0F ; Will Be 0 If Another 10,000 Points Reached BNE $73B0 ; {} Branch If Not Enough Points For Bonus Ship … INC $57,X ; {ram.ply1CurShips} Award Bonus Ship
    content/Arcade/Asteroids/Code.md#L1430-L1444 · upstream ↗

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

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

    In the claim ledger

  3. ^ abcGalaxian awards one extra ship, a "bonus galixip", when the score's top digits reach the DIP setting: 7,000, 10,000, 12,000, or 20,000 points. A per-player flag then blocks any further award.CodeScottTunstall/Galaxianrevised
    How we know
    9070128: 3A 00 70      ld   a,($7000)           ; read state of dip switch 3,4,5,6
    908012B: E6 03         and  $03                 ; mask in state of dip switches 3 & 4
    909012D: 21 52 01      ld   hl,$0152
    9100130: E7            rst  $20                 ; call routine to fetch value @ HL + A 
    9110131: 32 AC 40      ld   ($40AC),a           ; write BONUS GALIXIP @ value  
    
    galaxian.asm lines 907–911 at a16b402 · upstream ↗
    9270152: 07 10 12 20 
    
    galaxian.asm line 927 at a16b402 · upstream ↗
    758621C2: 1B            dec  de                  ; point to 3rd and 4th digits of player score
    758721C3: 67            ld   h,a                 ; load H with first two digits of player score  
    758821C4: 1A            ld   a,(de)              
    758921C5: 6F            ld   l,a                 ; load L with 3rd and 4th digits of player score
    759021C6: 29            add  hl,hl
    759121C7: 29            add  hl,hl
    759221C8: 29            add  hl,hl
    759321C9: 29            add  hl,hl               ; multiply HL * 16, which shifts all bits left 4 places.  
    759421CA: 7C            ld   a,h
    759521CB: 21 AC 40      ld   hl,$40AC            ; read BONUS_GALIXIP_FOR value                
    759621CE: BE            cp   (hl)                    
    759721CF: D4 9C 22      call nc,$229C            ; call AWARD_EXTRA_LIFE if our score is higher
    
    galaxian.asm lines 7586–7597 at a16b402 · upstream ↗
    7809AWARD_EXTRA_LIFE:
    
    galaxian.asm lines 7809–7822 at a16b402 · upstream ↗

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

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

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

    In the claim ledger

  4. ^ abcPac-Man awards one extra life when the score reaches the DIP-switch setting: 10,000, 15,000, or 20,000 points, or never. The table holds BCD thousands (10, 15, 20, and $FF for none). After each score change the code compares the score's ten-thousands and thousands digits with the setting, and a flag bit stops a second award.Codemburkley/pacman-crevised
    How we know
    11383    BONUS_LIFE = BONUS_LIFE_DATA[DIP_SWITCH_BONUS];
    
    pacman.c line 11383 at 3277e56 · upstream ↗
    11419    /*  Bonus life data (in BCD: 10,000, 15,000, 20,000 or none */
    ⋮
    11423    // 2728  10 15 20 ff 68 00 7d 00
    
    pacman.c lines 11419–11423 at 3277e56 · upstream ↗
    35#define BONUS_LIFE_DATA (&ROM[0x2728])
    36#define DIFFICULTY_DATA ((uint16_t*)(&ROM[0x272c]))
    
    data.h lines 35–36 at 3277e56 · upstream ↗
    12361    uint16_t hl = (score[2] << 8) + score[1];
    ⋮
    12369    hl *= 16;
    ⋮
    12377    if (hl>>8 > BONUS_LIFE-1)
    12378        extraLife_2b33 (&score[2]);
    
    pacman.c lines 12359–12378 at 3277e56 · upstream ↗
    12637void extraLife_2b33 (uint8_t *score)
    ⋮
    12647    if ((score[1] & 1) != 0)
    12648        return;
    ⋮
    12655    score[1] |= 1;
    ⋮
    12665    P1_REAL_LIVES++;
    
    pacman.c lines 12637–12665 at 3277e56 · upstream ↗

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

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

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

    In the claim ledger

  5. ^ abcdDefender gives an extra ship and an extra smart bomb at each replay level: the level starts at the replay setting and rises by it each time it is passed. The operator default is 10,000 points, with 3 ships to a game.Codemwenge/defender
    How we know
    510*CHECK REPLAY
    511SCRX    LDD    REPLA            ;REPLAYS AVAILABLE
    512        BEQ    SCRXX            ;NO
    ⋮
    515        BSR    RCHK
    516        BLO    SCRXX            ;NO
    517        LDA    1,Y              ;GET NEXT LEVEL
    518        ADDA   REPLA+1
    ⋮
    525        INC    PLAS-1,X
    526        INC    PSBC-1,X
    
    src/defa7.src lines 510–526 at e740063 · upstream ↗
    1152        LDX    #REPLAY
    1153        JSR    RCMOSD
    1154        STD    REPLA
    1155        STD    P1RP
    
    src/defa7.src lines 1152–1156 at e740063 · upstream ↗
    801        FCB    $01,$00          ;REPLAY @10,000
    802        FCB    $03              ;NSHIP
    
    src/romc8.src lines 801–802 at e740063 · upstream ↗

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

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

    In the claim ledger

  6. ^ abcDonkey Kong awards one extra life when the score reaches the DIP-switch setting: 7,000, 10,000, 15,000, or 20,000 points. A flag set on the award stops any further one for that player.Codefurrykef/dkdasm
    How we know
    13490214  79        LD      A,C             ; load A with original value of dip switches
    13500215  0F        RRCA                    ;
    13510216  0F        RRCA                    ; rotate right twice
    13520217  E603      AND     #03             ; mask bits, now between 0 and 3
    13530219  47        LD      B,A             ; copy to B.  used in minisub below for loop counter
    1354021A  3E07      LD      A,#07           ; A := 7 = default score for extra life
    1355021C  CA2602    JP      Z,#0226         ; on zero, jump ahead and use 7
    ⋮
    1357021F  3E05      LD      A,#05           ; A : = 5
    ⋮
    13590221  C605      ADD     A,#05           ; add 5
    13600223  27        DAA                     ; decimal adjust
    13610224  10FB      DJNZ    #0221           ; loop until done
    ⋮
    13630226  77        LD      (HL),A          ; store the result in score for extra life
    
    dkong.asm lines 1348–1363 at 4d296c5 · upstream ↗
    bit 2 : / 00 = 7000 01 = 10000 10 = 15000 11 = 20000
    dkong.asm#L54 · upstream ↗
    16000350  3A2D62    LD      A,(#622D)       ; load A with high score indicator
    16010353  A7        AND     A               ; has this player already been awarded extra life?
    16020354  C0        RET     NZ              ; yes, return
    ⋮
    16110361  7E        LD      A,(HL)          ; load A with a byte of the player's score
    16120362  E6F0      AND     #F0             ; mask bits
    16130364  47        LD      B,A             ; copy to B
    16140365  23        INC     HL              ; next score byte
    16150366  7E        LD      A,(HL)          ; load A with byte of player's score
    16160367  E60F      AND     #0F             ; mask bits
    16170369  B0        OR      B               ; mix together the 2 score bytes
    ⋮
    1622036E  212160    LD      HL,ExtraLifeThreshold        ; load HL with score needed for extra life
    16230371  BE        CP      (HL)            ; compare player's score to high score.  is it greater?
    ⋮
    
    dkong.asm lines 1600–1629 at 4d296c5 · upstream ↗

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

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

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

    In the claim ledger

  7. ^ abcGalaga awards extra fighters at a first and a second score set by DIP switches, and with some settings again at every interval after the second, the interval being the second score: one setting gives 20,000, 70,000, and every 70,000 points. The three switches index one of two 8-entry tables, picked by bit 2 of the starting-fighter setting. In the first, five settings repeat, two award only the first two scores, and one awards none; in the second, every first score is 30,000, three settings repeat, four award at most the first two, and one awards none. The source reassembles MAME's galaga set, Namco rev. B.Codeneiderm/arcaderevised
    How we know
    1995; Bonus Ships Awarded (DSWB)
    ⋮
    1997; 0x20  20-60-60     ON  ON  OFF    1
    1998; 0x10  20-70-70     ON  OFF ON     2
    ⋮
    2002; 0x18  20-60        OFF OFF ON     6
    2003; 0x38  30-80        OFF OFF OFF    7
    2004; 0x00  None         ON  ON  ON     0
    2005; Bonus config displayed in following format:
    2006; 1ST BONUS  X0000 PTS
    2007; 2ND BONUS XX0000 PTS
    2008; AND EVERY XX0000 PTS
    
    galag/galagao_ASxxx/rom0/gg1-4.s lines 1995–2008 at 248be0d · upstream ↗
    2010l_38AB:
    2011       ld   hl,#_sfr_dsw4                         ; bonus levels
    ⋮
    2023       and  #0x07
    2024       jp   z,l_392D
    ⋮
    2026       ld   c,a
    2027       ld   a,(b_mchn_cfg_nships)                 ; Bonus levels depend upon number of fighters starting.
    2028       and  #0x04                                 ; note: num_ships = mchn_cfg_nships + 1
    2029       add  a,a
    2030       add  a,c                                   ; add dsw value
    2031       add  a,a                                   ; a:=a*2 ... use as offset into table
    2032       ld   hl,#str_3AA4                          ; bonus config data
    2033       rst  0x10                                  ; HL += A...A==2,C,4,6,E,8,A
    ⋮
    
    galag/galagao_ASxxx/rom0/gg1-4.s lines 2010–2036 at 248be0d · upstream ↗
    2529str_3AA4:
    2530       .db 0xFF,0xFF        ;; NO BONUS SHIPS GIVEN WITH THIS SETTING
    2531       .db 0x02,0x06
    2532       .db 0x02,0x07
    2533       .db 0x02,0x08
    2534       .db 0x03,0x0A
    2535       .db 0x03,0x0C
    2536       .db 0x02,0x06 + 0x80 ;; bit-7 means there's no 'and-every' bonus
    2537       .db 0x03,0x08 + 0x80 ;; bit-7 means there's no 'and-every' bonus
    ⋮
    2540str_3AB4:
    2541       .db 0xFF,0xFF,0x03,0x0A,0x03,0x0C,0x03,0x0F,0x03,0x8A,0x03,0x8C,0x03,0x8F,0x03,0xFF
    
    galag/galagao_ASxxx/rom0/gg1-4.s lines 2529–2541 at 248be0d · upstream ↗
    265; if bit 7 is set, the third bonus award does not apply
    
    galag/galagao_ASxxx/rom0/game_ctrl.s lines 265–267 at 248be0d · upstream ↗
    ; looks like a bonus may be awarded. … ; actv_plyr_state[0x1E] += mchn_cfg_bonus[1] … ; sound-fx count/enable registers, bonus ship awarded sound (set non-zero) … ; new spare ship added
    galag/galagao_ASxxx/rom0/game_ctrl.s#L1196-L1213 · upstream ↗
    The following binary files (Namco rev. B):
    README.md#L16 · upstream ↗

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

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

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

    In the claim ledger

  8. ^ abcdThe US NES Contra awards its first extra life at 20,000 points and each later one 30,000 points past the last threshold, and caps lives at 99.Codevermiceli/nes-contra-us
    How we know
    1177    lda #$c8                    ; set default high score. #$c8 is 200 decimal
    1178    sta EXTRA_LIFE_SCORE_LOW    ; starting score for extra life (20,000)
    
    src/bank7.asm lines 1177–1178 at 687d651 · upstream ↗
    1283; every time an extra life is obtained, #$12c is added to points required to get next extra life (300 decimal, 30,000 in game score)
    ⋮
    1291    lda #$2c                    ; a = #$2c (12c = 300 decimal) (high byte will be set to #$01 a few lines down)
    ⋮
    1294    adc EXTRA_LIFE_SCORE_LOW,y  ; add 300 decimal to low byte of score required to get extra life
    
    src/bank7.asm lines 1283–1294 at 687d651 · upstream ↗
    1310    inc P1_NUM_LIVES,x          ; if X is $01, then set P2 number of lives
    1311    lda P1_NUM_LIVES,x          ; load incremented number into memory
    1312    cmp #$63                    ; compare to #$63 (99 decimal)
    1313    bcc @set_num_lives          ; can't have more than 99 lives
    1314    lda #$63                    ; a = #$63 (63 = 99 decimal)
    
    src/bank7.asm lines 1310–1314 at 687d651 · 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

  9. ^ abcThe US NES Super C awards its first extra life at 30,000 points and each later one 20,000 points past the last threshold, the reverse of Contra's 20,000 and 30,000, and caps lives at 99 as Contra does.Codevermiceli/nes-super-c · vermiceli/nes-contra-us
    How we know
    1516    lda #$30
    1517    sta NEXT_1_UP_SCORE_MID,x
    1518    lda #$00
    1519    sta NEXT_1_UP_SCORE_HI,x  ; sets initial score to obtain to get an extra life to 0030000
    
    src/bank-f.asm lines 1516–1519 at be6ccce · upstream ↗
    1757@give_1_up:
    ⋮
    1759    ldx #$20
    1760    lda NEXT_1_UP_SCORE_MID,y
    1761    clc                       ; adding 0020000 to the required score to get the next 1-up
    
    src/bank-f.asm lines 1757–1763 at be6ccce · upstream ↗
    1777    lda PLAYER_NUM_LIVES,x
    1778    cmp #$63               ; see if at max number of lives (99 in decimal)
    1779    bcc @inc_num_lives
    1780    lda #$63
    1781    sta PLAYER_NUM_LIVES,x ; set number of lives to #$63 if #$63 or greater
    
    src/bank-f.asm lines 1777–1781 at be6ccce · upstream ↗
    1177    lda #$c8                    ; set default high score. #$c8 is 200 decimal
    1178    sta EXTRA_LIFE_SCORE_LOW    ; starting score for extra life (20,000)
    
    src/bank7.asm lines 1177–1178 at 687d651 · upstream ↗
    1283; every time an extra life is obtained, #$12c is added to points required to get next extra life (300 decimal, 30,000 in game score)
    ⋮
    1291    lda #$2c                    ; a = #$2c (12c = 300 decimal) (high byte will be set to #$01 a few lines down)
    ⋮
    1293@set_extra_life_inc_num_lives:
    1294    adc EXTRA_LIFE_SCORE_LOW,y  ; add 300 decimal to low byte of score required to get extra life
    1295    sta EXTRA_LIFE_SCORE_LOW,y  ; player score for extra life - low byte
    1296    lda #$01                    ; a = #$01
    
    src/bank7.asm lines 1283–1296 at 687d651 · upstream ↗
    1312    cmp #$63                    ; compare to #$63 (99 decimal)
    1313    bcc @set_num_lives          ; can't have more than 99 lives
    1314    lda #$63                    ; a = #$63 (63 = 99 decimal)
    
    src/bank7.asm lines 1312–1314 at 687d651 · upstream ↗

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

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

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

    In the claim ledger

Sources

Code