How To Play

  • The aim is to clear each swarm of aliens while maximising your score, dodging bombs and diving enemies in order to stay alive. You can only fire one bullet at a time so make them count, if you miss you'll have to wait until the bullet leaves the top of the screen to fire again. 
  • Joystick in Port 2. On web version above, left/right arrows to move, Z to fire.
  • Player 2 uses Joystick in Port 1. Two player not supported on web version.




  • The swarm moves from side to side, shooting enemies in formation is the easiest way to clear enemies but also scores a lot less points than hitting a diving enemy. Unlike Galaga, the swarm is able to sense incoming shots that they would otherwise move into and stop until they have passed.
  • As time goes on and the swarm is cleared, the enemies will dive at a faster rate and more will attack at once. When a stage is completed the next stage will begin with a faster diving rate and higher number of simultaneous attacks/bombs than the last. 



  •  Blue enemies move the slowest and have less sweeping movements making them easily avoidable, but are nonetheless dangerous when attacking in groups or if you get trapped on one side of the screen. Enemies from the middle row move slightly quicker.
  •  Purple enemies move the fastest and have wide, sweeping movements, allowing them to target you from the opposite side of the screen.
  •   Red enemies will generally attack alongside a flagship, mimicking the flagship's movements and protecting it. However when they attack on their own their speed is faster than blue but slower than purple.



  • The yellow flagships are the key to both scoring large amounts of points, and to calming the swarm. As time passes and more enemies are killed, enemies attack in greater numbers and can drop more bombs. However, killing a flagship calms the swarm for a period, allowing you to pick them off in formation while they recover.
  • To score maximum points from a flagship you must take out the red escort aliens first, and then the flagship. Taking out two escorts then the flagship will net 800 points, a large amount in a low-scoring and tricky game like Galaxian. However depending on their angle of attack it might be wise to allow the flagship and convoy to pass and wait for a better opportunity.
  • Aliens that fly past you off the bottom of the screen (or abandon their attack off the side of the screen) will rejoin the swarm from the top. However an unaccompanied flagship will leave the stage and fill a gap in the top row on the next, meaning there could be up to four flagships at the start of a stage.



  • When the swarm is almost clear they will switch to ultra-aggressive mode and continually attack with erratic movements and loop-the-loops. 


Co-op Mode

  • In two-player mode you play at the same time, sharing the three lives. You both work as a team to clear the level while competing for points. The last life can only be lost by the player who is losing at the time. 



  • Attempt to clear the first stage in the fastest time possible. Current record is 50.22 seconds by Eric Akeson.



After finishing Galaga I intended to work on Robotron 2064 and Funfair Inc, however a post on the C64 Facebook group about Galaxian got me thinking whether it would be easy to convert Galaga to play like its older brother and improve on the existing, jerky character-based Atarisoft port.

It took just a couple of hours to getting it looking like Galaxian, but in playing the arcade version I realised the enemy movement is very different to Galaga. They have smooth sweeping movements that gradually change speed and direction, and are slightly different with each attack. The only way I could see to reproduce this authentically was to port the arcade code for enemy movements and timings directly.

Fortunately there is an excellent reverse-engineered disassembly of the Z80 arcade code by Scott Tunstall to work from. I don't much Z80 but I was able to learn just enough to convert it to 6502 for the C64. The algorithm that controls the main enemy attacks is a short but ingenious routine that Scott himself admits to not fully understanding (neither do I), but it results in varied and smooth attacks. In order for the PAL version to run at the same speed, parts of the game loop run at 60fps.

I also thought that as the formation does not spread out in Galaga, it might be possible to move them smoothly across the screen instead of in 8-pixel chunks. It turned out it was but it's pretty expensive in terms of CPU time, therefore the NTSC version will have a greatly reduced starfield to free up cycles. 

With the skeleton code from Galaga to build around it's taken only two weeks to go from concept to the first release version, including several improvements borrowed from Galaga such as a high-score table, shot stats and the 2-player co-op mode.

With the help of testers Jay Bell, Eric Akeson and Stepz, I think we've got something that is pretty close to the arcade experience, arguably even more so than Galaga. I hadn't played much of Galaxian before the project but have really come to appreciate it. It's certainly a much harder game and requires patience, learning the right moments to attack or stay away from trouble.

Obviously this game is available for free, but if you want to support my C64 development in general you can name your own price for my game Oyup!


C64 limitations

  • Sprites are being displayed in the top and bottom borders to give the same playable vertical space as the arcade. However this means enemies leaving the screen will pop out rather than fade smoothly once their Y position wraps around to 0.
  • A sprite multiplexor is used to display a larger number of diving enemies and bombs. On occasion there will be unavoidable flicker when a large amount are within a small area on screen.
  • The smooth swarm movement takes up a lot more CPU cycles than Galaga, therefore on NTSC there may be more sprite flicker, as well as fewer stars that will only be animated on a frame if there are cycles available to do so.
  • C64 multicolour characters and sprites are limited to 'double-wide' horizontal pixels, and three of the four sprite colours must be shared between all, therefore it is not possible to achieve the same sprite detail as the arcade or some other ports. I chose to go for colourful, chunky sprites rather than hi-res in a single colour. 



  • Jay Bell
  • Eric Akeson
  • Stepz

Arcade Z80 commented disassembly

C64 Source Code

Rated 5.0 out of 5 stars
(13 total ratings)
TagsArcade, Commodore 64, Cult Classic, Retro


galaxian_FH.d64 170 kB


Log in with to leave a comment.

This is a great bit of work, sir.

very good

Here's just a sample game play video of Galaxian DX.  Check it out and subscribe to my channel if you're so inclined!  Thanks!

What an incredible effort with this insanely good port, Galaxian -DX-!  Galaxian has always been a super difficult game... the original arcade version sucked quarters out of this guy back in the day as fast as I could pump them into the coin slot... lol!  This version includes a "SPEED RUN" mode that is super fun!  It allows you to compete against yourself in a mini-game style that doesn't require a lot of commitment of time.  My record so far is 37.64 seconds which included a 98% hit rate!  Great work ARLASOFT!


It's a good port.

Nice port !

Is it just me recognizing a short hick-up/stop in enemy wave movement when is continously shoot at the enemies? Maybe sometihng cycle related? Tested on real PAL HW and Vice 3.2.

Do you mean when they all just stop moving for a moment? They are able to sense an incoming bullet and will stop if continuing to move would have put them in its path, until the bullet has reached the top of the screen.

Oh, it's a feature. Now I get it. thanks for clarification. This port is indeed an excellent piece of code. Keep the ball rollin!!

just a curiosity.

Original arcade game score:

Flagship: 60 points in formation, 150 points in flight
Flagship: 200 points in flight with one escort

You get 300 pts. if you kill Flagship in flyght alone and 300 pts. if you hit flagship in flight with one escort. 

Or am I wrong?

(1 edit)

Great port. It plays well and looks nice. Good work!

Whoah! This is excellent. Thank you for porting on of my fave arcade games.

Also, thanks for sharing source code too.

Another winner from you!

I have seen a few ports of Galaxian on the C64. Although quite good, none of those matched the quality and performance of this port. Well done. This is one of the best ports of Galaxian I have ever seen on a Commodore 64.

WOW! Great port of Galaxian. Next arcade port? Gaplus?

There's already a very good port of Gaplus done back in the day, not sure I could improve it dramatically. Got a number of potential projects on the go....not decided which to focus on yet.

Yes, Gaplus was ported to the Commodore 64 back in 1988/1989 and was released as a budget game by Mastertronic. I have the tape original which the start of this video features the loading bitmap and Rob Hubbard's awesome tape loading music. 

This port of Gaplus to my general opinion is absolutely brilliant. The coders did a marvelous job porting the game to the much loved 8-bit computer. 

I guess the next step up would be a more faithful port of 1942! That would really test out a sprite multiplexer! That said, the larger sprites and attack pattern data would make it a tough challenge.


OMG you did it again you are just mu GOD !!!!!!!!!!!!!!!!! Thank you so much, you rock man !!!!!!!!!!!!!!!!

(1 edit)

Amazing port! Plays very faithfully!

The highscore saver will crash the program before it starts if you didn't load the game from a diskdrive though... although in such cases it's just best to disable highscore saving/loading if the last load device is less than 8 (should be able to handle tape loads and cartridge DMA loads then!)

(5 edits)

Checks current device. If device is below device #$08, it detects as a tape drive and skips saver. I use this for my C64 projects, when catering for both .D64 and .TAP versions of my games :) I hope this helps.

ldx $ba
cpx #$08 ;Device should be #$08+ in order to save
bcc skips ;Device below #$08
... do disk drive load / save code
rts ;Or jump to main program

(3 edits)

It's amazing how many high-score savers actually don't cater for this problem and can't gracefully handle disk errors... but the scene doesn't want to know about anything other than drive 8, expect it to always be there, and to never fail. But this is a simple fix, so why not if the game is a one-filer?

A superb port of the classic arcade game finally comes to the 64! Galaxian fans will not be disappointed!