Galaga C64
A downloadable game
Background
This is one of my all-time favourite games, if ever I've got 5 or 10 minutes spare for a game I will always choose Galaga. So I thought it would be nice to be able to play it on my favourite machine.
One obstacle of a decent Galaga port is the C64's aspect ratio, with the screen just 200 pixels tall compared to the Arcade's 288. However, the highly-rated NES conversion managed to squeeze it into 224 pixels, so all I needed to do was open up the top and bottom borders for sprites and use 12 or more pixels in each to make up the difference.
Another big hurdle is the sheer number of sprites. Having looked at the NES version more closely I noticed that the formation doesn't move smoothly like it does in the arcade. So I decided that if enemies were drawn using characters when in formation, and sprites used elsewhere, there would be plenty of sprites available using a slightly modified version of Shallan's multiplexor. I don't think it detracts from the gameplay too much, as the main action is concerned with spawning and diving enemies anyway.
-----------------------------------
2-Player Mode
As an added bonus you can now play Galaga in two-player co-op mode. Work together to clear the waves while competing for the best score. You have just three lives between you, however the final life can only be lost by the player who has the lowest score at the time.
-----------------------------------
NTSC
The game is NTSC-compatible, however there may be more flickering in later levels than on a PAL system by virtue of having significantly less CPU cycles per frame.
----------------------------------
Pause/Quit
Press restore to pause during play, then restore to unpause or fire to quit to the menu.
----------------------------------
Known issues/limitations
- Occasional mirroring of sprites into bottom or top border for a frame or two - unavoidable consequence of displaying sprites in the borders.
- Slight flicker during first few seconds of the first wave. £25 bounty for anyone who can figure that one out.....
- Occasional flicker when a lot of enemies/bombs are clustered in a row is an unavoidable hardware limitation.
- Sometimes part of an enemy in formation, or a bullet, may be left on screen. This is purely cosmetic and I'll continue to work to track the issue down.
-----------------------------------
Source Code
The game was written in KickAssembler, with the aid of Sublime Text, CharPad and SpritePad. It is available on Github here.
If you would like to support further C64 development, please check out my game Oyup which you can download for free with an option to donate.
This game must NOT be packaged and sold in any format.
Thanks to Stefan Wessels for sharing the code to his modern remake of the arcade version, which I have used as a reference for certain bits of the code, and also converted the wave pattern data to a C64-friendly format.
------------
Testers
- Eric Akeson
- Gábor Hársfalvi
- Stepz
Development log
- V1.06May 07, 2022
- Version 1.05Sep 28, 2021
- Version 1.04Sep 27, 2021
- Hotfix 3Sep 26, 2021
- Hotfix 2 - entry wave scoringSep 25, 2021
- Release V1Sep 25, 2021
Comments
Log in with itch.io to leave a comment.
I have a bugreport to V1.06. At the moment, this nice version of Galaga, is one of the games, that is being played intensively by several people, in a competition on the Forum64. A few of the players encountered two bugs in Galaga, that only occur relatively rarely, but are undoubtedly present. I will describe these briefly, so that they can possibly be fixed in a final V1.07 version.
(1) In rare cases, one million points are added to the current player-score, without a real reason.
(2) Also in rare cases, the game freezes, after a level and you are left, floating alone in space without a new level starting. At first it was assumed, that this bug only occurs, when a player has shot down all the enemies, before they can position themselves in the field. But this is not the case. It has been proven in the meanwhile (via screenshot), that it also sometimes occurs, when there are still enemies in the field. A screenshot was posted in Forum64, where two enemies at the top and the player's spaceship below, can be seen and the game froze (is no longer playable).
These are the two problems, that were discovered. Apart from that, this version is by far the best Galaga version on the C64. It would be great, if these two things could be fixed, so that you can use this game in competitions without any risk. At the moment, it's of course annoying, if you have a great score and then one of these two bugs occurs. They occur only rarely, but of course you never know, when.
Great version. If only we'd had this in the BBS days. Thank you.
Thanks very much, love the game cover :)
Very nice version. I’m impressed!
Great Game! But...
I can't move in 1.06 after completion of a level. Ship moes if new level is on. Using a real PAL C128. Anyway, in Arcade Galaga, you could move. Important for a challenging stage and such.
Continue the great work!
Very nice conversion with good playability. Our German-language review can be found in our recorded livestream starting at 01:21:30. Subscription to our YouTube or Twitch channel is welcome. 🙂
I've always loved Galaga and I have it on my NES emulator.
Looking at this, if it plays as good as it looks, I'm in heaven.
Anybody played the Donkey Kong Jr for the 64? Or Sonic (REU)?
Have fun! c
Very sweet conversion, update fixes previous niggles. Top job. Thank you!
Thanks for the update, Arlasoft. This is the final version of "Galaga" for me now! Game is great and now finally all problems are wiped out. Good work, much appreciated.
By the way. You also did alot good Atari-2600 conversions to the C64, i saw. If you ever have time and leisure for another one, a 1-to-1 port of the Atari-2600 version of "Phoenix" to the C64, would be an absolutely fantastic thing. I am a big big fan of this game since my childhood. I know it differs from the Arcade version of "Phoenix", but it is a fantastic game of it's own on the Atari-2600. Just a suggestion of course. :-)
Great update Arlasoft ! Congrats and thanks again !
Is there a programming reason, why this autofire-issue just isn't getting fixed for this game? So are there any problems that make this impossible, or what is the reason why V1.06 simply does not appear? Or is it a time problem, because other games are also being worked on?
No reason, just busy. I'm finishing a new game this week, so after that's done I can tie up a few loose ends before going back to Robotron.
Okay, understand.
By the way, because i read that you asked for suggestions and i also saw, that you already have made some good Atari-2600 ports. A 1-to-1 port of the Atari-2600 version of Phoenix would be absolutely superb to have on the C64. I totally love Phoenix and especially the Atari-2600 version, although i know, that this version is a bit different from the Arcade original. But i actually like the Atari-2600 Phoenix version the best. Nothing would have to be changed, it could be ported 1-to-1, no improvements needed, this version is ideal as it is.
I know that you have alot work at the moment, but this would be a suggestion for future projects.
V1.06, V1.06, V1.06, V1.06, we need V1.06, V1.06, V1.06, V1.06. :)
Greetings! Your Galaga and Galaxian ports are superbe!
You asked for suggestions: I (and others) would really
love proper versions of the terrible U.S. "Quicksilver"
ports of Data East arcade games such as KID NIKI.
The NES version is superior to the arcade and, like most
NES games, is 6502 that can easilly be disassembled.
Thanks for listening & keep up the excellent work!
Would really be appreciated if this Autofire-problem could finally be fixed in a V1.06. Since the problem does not occur in "Galaxian", it's known now, what the problem here in "Galaga" is, don't we?
do the high scores reset every day? i had 2 high scores over 20k yesterday.
On this page? The high scores don't save on the browser version.
The iconic GALAGA, another OUTSTANDING port from ARLASOFT! Check out my sample of the game play, and please subscribe to my channel if you feel so inclined! Thanks! :)
Just the best Galaga clone I saw on the Commodore 64. Period!
Is this version (v1.05) going to be the final version?
I hope and guess not. V1.05 still has some smaller problems that should be fixed, like for example the annoying autofire-problem.
I will hopefully get some time before Xmas and New Year to sort out a final update. I wanted to make some improvements to enemy movements but ended up breaking the whole game so had to revert back to v105.
Nice, sounds good. One question - did you read what I wrote a bit further down, when I mentioned "Phoenix (Atari VCS-2600)" and the one with "Tiny Galaga" on the Amiga-500 and it's color scheme, among other things?
So nice! So well done!
Great version. We play this game in the C64 HISCORE challenge this month :)
https://everythingc64.boards.net/thread/1347/cool-high-score-challenge-november
There seems to be a bug in two player though. Very cool otherwise, great unofficial port.
There are three ships shown and when one of the player ships gets hit, one of those three ships get removed, even though each player has three ships. A bit confusing.
Do you mean the lives count? You share three lives, although only the losing player can lose the final life.
Will there be a V1.06, that fixes the last remaining bugs? That would be great. Especially the thing with the Autofire, that goes on shooting by it's own, is a little bit strange sometimes in gameplay. Overall it's definately a good game, only a few teething problems should still be eliminated.
Yeah, with Galaxian being released in the next few minutes (spoiler), I'll hopefully have some time to tweak a few things on Galaga.
Can you try Galaxian and see if the auto fire is fixed on that? If so I can put that fix into Galaga too.
I tried your new Galaxian game and there this problem does not occur. I've tried it with two joysticks, both of which contain "rapidfire as long as the player holds the firebutton down" and whenever I leave the button in "Galaxian DX", the rapidfire stops immediately, like it should be. So there it works.
By the way - there in "Galaxian DX" a rapidfire (autofire) doesn't help much anyway, because a maximum of only one shot of the player can appear on the screen at the same time. But with "Galaga" it often helps, because more shots on the screen are possible there and you can shoot several enemies one after the other in Galaga with rapidfire. :-)
Your new "Galaxian DX" is really good, the next great C64 port of a classical Arcade-shooter. WOW!! You know what. If you don't know, what to port next to the C64, then I have a suggestion. The Atari VCS-2600 version of "Phoenix" is fantastic. A little different from the Arcade original of this game (because the VCS2600 couldn't implement it technically back then, i guess), but the Atari-2600 version of "Phoenix" has it's own charm and plays really great. My number-one game on this system since my childhood. To have this Atari-2600 version 1-to-1 on the C64 too, would be awesome! Nothing needs to be changed, "Phoenix" on the Atari-2600 is awesome as it is and exactly like this it should be ported. Maybe you will find time for that at some point in the future, that would be great!!!
Could you have a look at this thing in the meantime, now that it's clear since some weeks, that in "Galaxian DX" this problem with the Autofire don't occure? Then this could be fixed in Galaga too, like you mentioned.
And one question more. Somewhere here in the entries you wrote, that, when less colors would be used for the attacking enemies, technically more possibilities would be there, for improving other things to make Galaga, which is already good, even more closer to the Arcade version. And you also wrote, that you decided against it, because you wanted the sprites to have more colors. Just one question to this - how about a second version and then a selection-function for the player, in the beginning of the game, where he could choose, which version of the game he wanted to play. And then a second version would be created, with a similar look, when it comes to the colors, than for example the game "Tiny Galaga", that came out last year for the Amiga? Only two colors, but nevertheless, it looks and plays really good. Looks like a LCD game on older game&watch handhelds, when it comes to the colors. Everything could be the same like now in your C64 Galaga, just with less colors (two or three) but therefore with some improved other things? What do you think? Player then could choose everytime in the game-menue, which version to play and this version then reloads.
well, I have been waiting for this since forever, but you are not completely there yet... compared to the nes version graphics are gross. the music is not completely like the arcade one. and you cannot fire while being captured. A potential great game, but graphics and sound should improve.
The C64's hardware limitations make it impossible to improve the graphics in any meaningful way. You can either have hi-res characters, meaning you can define every pixel in a 8x8 character block or 24x21 sprite, but they can only be one colour, or you can have multi-colour meaning you can only define pairs of pixels but have three colours, two of which must be shared across all chars/sprites. I chose to go for more accurate colour over sharper sprites that are all one colour.
Contrast this with the NES that can have hi-res sprites with any three colours from a palette of 54.
Unfortunately some compromises are inevitable, if it was easy it would have been done in the 80s.
Same with the sound, it's as close I can get without the benefit of dedicated sound hardware built specifically to make Galaga's sounds that the arcade has.
I see that you can 'fire' when being captured on the arcade but this doesn't really add anything to the game, the bullets just fire off in random directions and I've never seen one hit anything. Because I'm drawing player bullets with characters, changing their X position in flight would take probably a couple of days to code, for very little benefit.
A potential great post but spelling and punctuation should improve.
I am reviewing this game right now for Zzap!, italian version (www.zzapmagazine.it). I know that the hardware (ie: commodore 64) has its own limitations. But Galencia is doing a better job graphics-wise.
Firing when captured is a plus: you can shoot enemies while being captured, and you could even free yourself (killing the capturer) if you are playing your last life. :-)
I appreciate what you are doing, don't get me wrong. I love that game too.
and please, forgive me when I type using my phone: I make many mistakes using a virtual keyboard. I guess you see my point, anyway.
It's a good game, but it could improve and it could become a great one!
Galencia's sprites are much bigger, so you can obviously add more detail. The smallest sprite in Galaga is half the size of a Galencia sprite.
But at that point they take up so much room compared to the overall dimensions of the screen it's no longer Galaga. In Galencia the swarm is virtually on top of you, it might look more like a zoomed-in Galaga, but it can't possibly play like it.
There are also less sprites so they don't need to use chars, and they have the advantage of not having to look like anything that came before so can be designed with double-wide pixels and the available colours in mind.
As I say, I'm no artist but I can't really see how you can make Galaga on the C64 look significantly better without compromising on gameplay.
If I were making a brand new IP like Galencia, built specifically for a 320 x 200 landscape screen as opposed to 224 x 288 portrait one, absolutely the graphics wouldn't be good enough. And I agree there are definitely elements from the arcade gameplay that I haven't quite captured yet. That's why for Galaxian I am porting directly the arcade code.
The choice is really down to chunky, less detailed sprites or no game at all. And there's no way I'm doing hi-res single colour enemies, this isn't a Spectrum ;)
contact me and I will provide you the review when the magazine has been printed (contatti at zzapmagazine dot it or davide at davidecorrado dot eu). As I said, good work, being galaga one of my favorites, I am very picky with it. if you could, add fire while being captured :-)
Finally I had some time to test this version (1.05). It looks and feels awesome, but I encountered two bugs: the first was already stated before. When I use a joystick with auto fire, that requires me to hold the button down for firing, it continues to fire even when I stop pressing the button or disable the auto fire altogether. It stops however, when I press the button without using auto fire (tested with competition pro and QuickShot QS-137F). The second bug is, that the datasette, that is usually plugged in, turns on when I start the game (I hear the motor). That's a little annoying. Maybe you find some time to look into these problems.
The routines SaveKernalZP and SaveGameZP both write to $00 and $01 (STA $02,x writes to $01 if x=$FF). I think this is not intended but switches the datasette motor on and might cause other side effects.
Yeah you're right, there's another bug where I copy what ever is in GameZP to the actual ZP upon launch, when I intended to just back up the Kernal ZP at that point. It just happens it doesn't crash this game but it did the next project. Will fix!
Lovely version of the game. Nice job!
If you are still interested in fixing bugs, I have a couple for you for v1.05:
1. After shooting the enemy that had previously captured my ship, the ship doesn't fall down but instead behaves like the enemy alien that captured it (including swooping down to attack).
2. As I lose a life but before I respaw,n an enemy ship comes down to try and capture it in its beam. When I do respawn the enemy ship reappears as if it actually did capture my ship.
I have video footage of these if you're interested.
Thanks
Thanks! No 1 is not a bug, if you shoot the boss in formation, your ship flies out of the level and rejoins as the last enemy in the next normal level. This happens in the arcade too.
Number 2 sounds like it might be though, video would be great.
Today i found another strange thing in the game while playing.
It was the first time today, that i played the game with a joystick, that has Rapidfire. And normally on this controller, the Rapidfire only shoots faster, when i hold one of the firebuttons, this controller don't has a real Autofire, which you turn on and then it shoots by itself until you turn it off again.
But while playing Galaga for a while and when i took my finger off the firebutton, i recognized, that the rapidfire suddenly continues to shoot quickly by itself. How can this be? It was then, as if this joystick had a real Autofire, a fire, that shoots quickly by itself, which this controller does not have. And this is reproducable also in the game, at least in the emulators it is, i will try this also on my real C64 tomorrow, but i guess, that this will happen there too.
I then tried this joystick with other games, if i can reproduce this behaviour, but i can't. Only in Galaga this happens.
I had the same issue with my setup (real C64 and two different joysticks). When I use a joystick with "real" auto fire however, I don't have any problems, even when I turn auto fire off.
Fantastic! One of my retro-dreams come true! Finally I'm able to enjoy Galaga in my favorite computer of all time! It runs flawlessly on my Ultimate 64 Elite, I noticed only a small glitch in the score table when adding my initials, garbled characters appear when I move the joystick up/down, but it seems to fix itself. Congratulations!
Had you seen my feedback about the FC3 fix, because in v1.05 this problem is still there?
And i wanted to mention another thing, that i recognized. When i get a new d64-File, i usually look into this file with the d64-editor first, before using it. And since two versions of Galaga, this tool always reports me a "Galaga is crosslinked with galage at blocks nr..." message, when i open the Galaga.d64 file. Also the tool shows not completely deleted files on this disk, which are still visible as scratched "scr" files and here seems to be the reason for this crosslinked-message.
Seems like you used a d64, on which an older version of the game was saved and this version was not fully deleted. The reason, why i mention this is, that this crosslinked blocks possibly could cause problems, for example with the score-saver and so on. Not a must, but could be. Better would be, to completely delete older versions of the game on this disk, or to use an empty and fresh d64, when a new version appears.
I only got to talk to the Freaky Fish dev this afternoon. He worked out that there is a bug in Final Cart 3, when it saves files it switches the C64 to VIC bank 0, then doesn't switch it back to what it was. Therefore the game is still technically functioning but displaying graphics from the wrong area of memory.
I've uploaded a new v105 that should fix this and is also a brand new .d64.
The FC3 problem is fixed in the newer v1.05, good work, thanks for that. Yes, i also reported this bug in the "Freaky Fish DX" comments yesterday and it was solved there too now. But you've already saw my comment below here, with the "extended zeropage to default..." answer, how to fix this problem, right? I guess, it's a similar way or maybe the same way, to fix this problem?
The thing that "czayas" reported above, about the garbled characters while typing in the name for the highscore-list, i also had several times today in the newer v1.05. Wanted to report it, but then saw, that another person already did this. One time today, and this was very strange, even the score of the first place in the highscore-list, changed to a much higher-score and this, while i typed in my name and moved the joystick. LOL Seems like the controller-movements caused this, but i am not sure.
just noticed that if I let my last fighter get captured, I get a free fighter? I don’t think that happened in the original! I thought it would just go straight to game over after being captured…
Also I seem to keep hearing extra lives sounds without actually getting one.
Which version are you playing? That bug should be fixed.
And I think the sound you're referring might be the 'transform alert' when an enemy is about to spawn three transform enemies. It does sound similar to the extra life effect.
You're right. my mistake
It's the latest 1.04. I guess the bug isn't totally fixed. When I have no lives in the tank, I shouldn't be getting a free life!
I just repeated that bug it twice in the same game. The second time I got a free life, and then I immediately got myself killed again and it then gave me another free life!
Should we expect that bug fixed in v1.05?
I'll check it out today.
Using WinVice got to Stage 10, and it seemed to get stuck there once the enemies were defeated? I Used v103
I've uploaded V1.04 which fixes this issue, apologies!
Great. Thank you for your quick reply & Fix :)
Gameplay is good now in V1.04, but i found a little hardware compatibility problem. Alot of users have a FC3 modul on their C64, especially in combination with a SD2IEC this works great because of the modul-fastloader that also works with the SD2IEC.
I found out, when Galaga is played while a FC3 is activ and then the player makes a score, that is enough for the highscore-table, then there is a graphic-problem, after the highscore is saved. The graphics are destroyed then and the player must make a reset, before he can play again.
The only thing to prevent this problem when a FC3 is plugged on the C64 is, that the player uses the "kill" command in the BASIC screen to turn the FC3 off, before starting the game. Bad thing is, that then the game can not be loaded directly over the filebrowser on the SD2IEC, but must be loaded from BASIC instead.
Maybe this incompatibility of the score-saving to the FC3 modul can be fixed? This thing is a known problem, because Galaga is not the first game i had, that has this problem with the score-saving when a FC3 is activ. I can remember that the game "Freaky Fish DX" had a similar problem in the original version. The FC3 is a part of the problem here, but i also know, that this can be fixed. So if you can not locate this problem, i would know, which person i could ask, that knows this problem and how to fix it without much effort. Then i could give this information to you, if you want.
Would be great if you could find that out, one of my testers had the same issue but I don't have that hardware to test with so have no idea where to start. I'll put a note for now that people with the Final Cartridge 3 need to disable it.
I ask this person, how to fix this and then come back to you. By the way, if you have no real FC3, you can also recreate this in one of the known C64 emulators, by inserting an FC3 image there. Then the same problem occurs.
Okay, i have the answer now, how to fix this FC3-incompatibility. He wrote, it should actually be quite simple. The saver routine in the FC3 modul causes this error here in the game. To fix it, you have to set the save-address in the extended zeropage to default.
LDA#<$F5ED
STA$0332
LDA#>$F5ED
STA$0333
The code can be anywhere in the game, but it must be before JSR$FFD8.
That's all he wrote. To check, whether the fix works, you don't need a real FC3. You can also take an emulator and insert an image of the FC3 there, the behaviour will be the same. That's a good way to check, even if you don't own a real fc3 yourself.
Apologies for the bugs everyone, we thought we had done thorough testing but obviously not! I hope it hasn't spoiled your enjoyment of the game too much.
And just like that 2021 is super slick! legendary!
Thank you for adding 2 player, my kid and me, there's no stopping, now the best game ever, just got even better, I only have praise to say for this game, making it more addicting than ever
Thanks, yeah I put that in so I could play with my little one. Brought up on touch or mouse control she really can't her head around the joystick though!
Amazing conversion. Love how you have coaxed the SID to output very arcade accurate effects.
Happy to purchase when you guys fix that bug on level 13. ;)
Thanks very much, hopefully (!) V1.04 sorts out that bug.
Thank you, my wife and I love that we can play Co-op.
The game plays very well on the MiSTer FPGA C64 core.
Brilliant, thanks for making the video - glad you're enjoying the 2-player mode!
Awesome. I need to get into c64 development 4sure
I always recommend Shallan's Youtube series 'Let's Make A C64 Game'. The first six episodes were enough for me to start making my first game.
just reached level 13 - there is a bug
Well that sounds easy to fix. Find 'bug', delete 'bug'.
Lol. Good one. :)
bigpsycho, can you specify, what exactly the bug is, in this level?
spaceships where no longer coming but seems working now
Great port game ! One question, the high score we can reach is 73,100 ?? Thanks in advance Arlasoft.
Whoooops, what happened there! I wonder if killing everything before it moves into phase 2 causes a lock up
Smashing port, maybe a little easy but very nicely done.
A little tip for anyone playing on Retropie via lr-VICE: switch Options>Automatic Load Warp to OFF or the whole game will run at about 20x speed - for some reason the warp doesn't switch off after loading as it does with most games. You can still set a manual warp key to speed up the loading.
Your work on this conversion and all your other recent C64 games is greatly appreciated!
Thanks very much!