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

The atlas reads Galaxian through Scott Tunstall’s annotated disassembly of the Namco ROM1. Labels and comments cited here are his.

The swarm keeps its formation, and aliens leave it to attack: a flagship with up to two escorts, or single aliens, at most 7 in flight2. How many single attackers fly at once grows with a difficulty that rises both per level and with time spent in the level3. When 3 or fewer aliens remain in the swarm, attackers other than flagships stop returning to it1.

Mechanics

MechanicKindHow
Enemy formationBreak-offthe swarm holds formation while single aliens and escorted flagships dive out of it
Remaining-enemy speed-upThresholdwith 3 or fewer aliens in the swarm, attackers other than flagships stop returning to it
Difficulty rampLevel and timea base that rises per level plus an extra part that rises with time in the level
Extra lifeOnceone ship at 7,000 points, or 10,000, 12,000, or 20,000 by DIP switch
Every claim about this game, by concept (4)
Difficulty rampGalaxian's difficulty has two parts. A base value rises by 1 with each level cleared, up to 7. An extra value starts each level at 0 and rises by 1 each time two nested counters run out, up to 7. The counters reload to 60 and 20, so once running they step it every 1,200 passes of the game logic, but the cited code doesn't reset them when a level starts, so a level's first step can come sooner. They hold while the player is not in play or after a flagship in flight is shot. The two values set how many single attackers may fly at once and how many attack counters tick.Code
Enemy formationGalaxian's swarm holds its formation while aliens break off from it to attack. An array of 8 in-flight slots holds them: slot 1 for a flagship, slots 2 and 3 for its escorts, of which there are at most 2, and slots 4 to 7 for single attackers, so at most 7 aliens fly at once. No attack uses slot 0, which the disassembly's comment says is kept for other uses such as explosions. A single attack scans only min⁡(⌊(b+e)/2⌋,3)+1 of the last four slots, where b and e are the two difficulty values, so 1 to 4 single attackers can fly at once.Code
Extra lifeGalaxian 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
Remaining-enemy speed-upGalaxian counts the aliens still in the swarm, leaving out those in flight, and sets HAVE_AGGRESSIVE_ALIENS when 3 or fewer remain. With the flag set, an attacking alien other than a flagship that reaches the bottom of the screen reappears at the top and attacks again instead of rejoining the swarm, once the player has spawned; before that, it rejoins. Flagships take a separate routine. The disassembly reads the Namco ROM, MAME's galaxian set.Code

References

  1. ^ abGalaxian counts the aliens still in the swarm, leaving out those in flight, and sets HAVE_AGGRESSIVE_ALIENS when 3 or fewer remain. With the flag set, an attacking alien other than a flagship that reaches the bottom of the screen reappears at the top and attacks again instead of rejoining the swarm, once the player has spawned; before that, it rejoins. Flagships take a separate routine. The disassembly reads the Namco ROM, MAME's galaxian set.CodeScottTunstall/Galaxianrevised
    How we know
    5058INIT_INFLIGHT_ALIEN:
    5059145C: 36 00         ld   (hl),$00            ; clear flag in ALIEN_SWARM_FLAGS - effectively removing it from swarm            
    
    galaxian.asm lines 5058–5059 at a16b402 · upstream ↗
    5615HANDLE_ALIEN_AGGRESSIVENESS:
    ⋮
    561916BD: 21 23 41      ld   hl,$4123            ; load HL with address of first alien (bottom rightmost) in ALIEN_SWARM_FLAGS
    562016C0: 11 06 00      ld   de,$0006            ; DE is an offset to add to HL after processing a row of aliens
    562116C3: 4B            ld   c,e                 ; Conveniently, E is also number of rows of aliens in swarm! (6) 
    562216C4: 3E 01         ld   a,$01               ; A is going to be used to total the number of aliens in the swarm 
    562316C6: 06 0A         ld   b,$0A               ; 10 aliens maximum per row
    562416C8: 86            add  a,(hl)              
    ⋮
    563316D4: 06 03         ld   b,$03               ; number of ports to write to maximum 
    563416D6: 3D            dec  a                   ; decrement total by 1 
    563516D7: 28 14         jr   z,$16ED             ; if total is zero, goto $16ED 
    ⋮
    564016DC: 10 F8         djnz $16D6
    ⋮
    564216DE: FE 02         cp   $02                 ;                  
    ⋮
    
    galaxian.asm lines 5615–5658 at a16b402 · upstream ↗
    3747INFLIGHT_ALIEN_REACHED_BOTTOM_OF_SCREEN:
    ⋮
    3758;if the player has not spawned, the alien will return to the swarm.
    ⋮
    3772; alien reappears at top of screen and will keep attacking - it will not return to swarm. 
    
    galaxian.asm lines 3747–3772 at a16b402 · upstream ↗
    the manual above is not correct with the Namco Galaxian ROM
    galaxian.asm#L167-L168 · 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

  2. ^Galaxian's swarm holds its formation while aliens break off from it to attack. An array of 8 in-flight slots holds them: slot 1 for a flagship, slots 2 and 3 for its escorts, of which there are at most 2, and slots 4 to 7 for single attackers, so at most 7 aliens fly at once. No attack uses slot 0, which the disassembly's comment says is kept for other uses such as explosions. A single attack scans only min⁡(⌊(b+e)/2⌋,3)+1 of the last four slots, where b and e are the two difficulty values, so 1 to 4 single attackers can fly at once.CodeScottTunstall/Galaxianrevised
    How we know
    50791472: DD 21 D0 42   ld   ix,$42D0            ; pointer to INFLIGHT_ALIENS_START+sizeof(INFLIGHT_ALIEN)
    50801476: CD 5C 14      call $145C               ; call INIT_INFLIGHT_ALIEN to make flagship take flight and leave the swarm 
    ⋮
    5084147D: FD 21 F0 42   ld   iy,$42F0            ; pointer to INFLIGHT_ALIENS_START+(sizeof(INFLIGHT_ALIEN) * 2)
    50851481: 06 03         ld   b,$03               ; we're scanning 3 entries in red aliens row max             
    50861483: 0E 02         ld   c,$02               ; But we only want 2 red aliens as an escort.  
    ⋮
    5094148E: CD 9B 14      call $149B               ; call TRY_INIT_ESCORT_INFLIGHT_ALIEN
    50951491: 11 20 00      ld   de,$0020            ; sizeof(INFLIGHT_ALIEN)
    50961494: FD 19         add  iy,de               ; bump IY to point to next member of INFLIGHT_ALIENS array
    50971496: 0D            dec  c                   ; reduce count of red aliens left to check for use as escort
    50981497: C0            ret  nz                  ; return if we have all the escort we need
    50991498: 06 01         ld   b,$01
    
    galaxian.asm lines 5079–5100 at a16b402 · upstream ↗
    FLAGSHIP_ESCORT_COUNT EQU $422A ; Number of red aliens escorting the flagship. Max value of 2.
    galaxian.asm#L517 · upstream ↗
    47841352: 2A 1A 42      ld   hl,($421A)          ; load H with DIFFICULTY_BASE_VALUE and L with DIFFICULTY_EXTRA_VALUE
    47851355: 7C            ld   a,h                 ; 
    47861356: 85            add  a,l                 ; add DIFFICULTY_EXTRA_VALUE to DIFFICULTY_BASE_VALUE 
    47871357: 1F            rra                      ; divide by 2.
    47881358: FE 04         cp   $04                 ; is result < 4?
    4789135A: 38 02         jr   c,$135E             ; yes, goto $135E.
    4790135C: 3E 03         ld   a,$03               ; Clamp maximum number of INFLIGHT_ALIEN slots to scan to 3.
    4791135E: 3C            inc  a                   ; ensure that slots to scan is in range of 1..4
    ⋮
    4796135F: 47            ld   b,a                  ; save number of slots to scan in B
    47971360: 21 91 43      ld   hl,$4391             ; point HL to last INFLIGHT_ALIEN.IsDying flag in INFLIGHT_ALIENS array
    47981363: 11 E1 FF      ld   de,$FFE1             ; load DE with -31, which is sizeof(INFLIGHT_ALIEN)-1
    
    galaxian.asm lines 4784–4800 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

  3. ^Galaxian's difficulty has two parts. A base value rises by 1 with each level cleared, up to 7. An extra value starts each level at 0 and rises by 1 each time two nested counters run out, up to 7. The counters reload to 60 and 20, so once running they step it every 1,200 passes of the game logic, but the cited code doesn't reset them when a level starts, so a level's first step can come sooner. They hold while the player is not in play or after a flagship in flight is shot. The two values set how many single attackers may fly at once and how many attack counters tick.CodeScottTunstall/Galaxianrevised
    How we know
    493; These 2 counters are used to gradually increase the DIFFICULTY_EXTRA_VALUE over time. See $14F3 for algorithm details.
    ⋮
    497; These values determine how often aliens attack (see $1524 and $1583), and how many can attack at one time (see $1352). 
    498DIFFICULTY_EXTRA_VALUE              EQU $421A         ; DIFFICULTY_EXTRA_VALUE is incremented during the level. Maximum value of 7. See $1509.  
    499DIFFICULTY_BASE_VALUE               EQU $421B         ; DIFFICULTY_BASE_VALUE is incremented when you complete a level. Maximum value of 7. See $1656.
    
    galaxian.asm lines 493–499 at a16b402 · upstream ↗
    5183HANDLE_LEVEL_DIFFICULTY:
    518414F3: 3A 00 42      ld   a,($4200)           ; read HAS_PLAYER_SPAWNED
    518514F6: 0F            rrca                     ; move flag into carry
    518614F7: D0            ret  nc                  ; return if player has not spawned
    518714F8: 3A 2B 42      ld   a,($422B)           ; read IS_FLAGSHIP_HIT
    518814FB: 0F            rrca                     ; move flag into carry
    518914FC: D8            ret  c                   ; return if flagship has been hit
    ⋮
    519214FD: 21 18 42      ld   hl,$4218            ; load HL with address of DIFFICULTY_COUNTER_1
    51931500: 35            dec  (hl)                ; decrement counter
    51941501: C0            ret  nz
    51951502: 36 3C         ld   (hl),$3C            ; reset counter
    ⋮
    51981504: 23            inc  hl                  ; bump HL to DIFFICULTY_COUNTER_2
    ⋮
    
    galaxian.asm lines 5183–5214 at a16b402 · upstream ↗
    55041649: AF            xor  a
    5505164A: 32 1A 42      ld   ($421A),a           ; reset DIFFICULTY_EXTRA_VALUE
    ⋮
    55111656: 2A 1B 42      ld   hl,($421B)          ; load H with PLAYER_LEVEL and L with DIFFICULTY_BASE_VALUE
    55121659: 24            inc  h                   ; increment player level 
    5513165A: 7D            ld   a,l                 ; load A with DIFFICULTY_BASE_VALUE
    5514165B: FE 07         cp   $07                 ; are we at max difficulty?
    5515165D: 28 03         jr   z,$1662             ; yes, goto $1662
    ⋮
    55171661: 3C            inc  a                   ; otherwise, increment DIFFICULTY_BASE_VALUE
    55181662: 6F            ld   l,a
    55191663: 22 1B 42      ld   ($421B),hl          ; update PLAYER_LEVEL and DIFFICULTY_BASE_VALUE
    
    galaxian.asm lines 5504–5519 at a16b402 · upstream ↗
    2040HANDLE_MAIN_GAME_LOGIC:
    
    galaxian.asm lines 2040–2055 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

Sources

Code