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.

Galaga in AppGameKit

------------

Testers

  • Eric Akeson
  • Gábor Hársfalvi
  • Stepz


Updated 27 days ago
StatusReleased
PlatformsHTML5
Rating
(7)
AuthorArlasoft
GenreAction
TagsArcade, Commodore 64, galaga

Download

Download
galaga_v105.d64 170 kB

Development log

Comments

Log in with itch.io to leave a comment.

Viewing most recent comments 1 to 40 of 57 · Next page · Last page

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.

(1 edit)

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!!!

(2 edits)

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.

(8 edits)

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.

(1 edit)

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.

(3 edits)

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.

(1 edit)

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

(1 edit)

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 

(+1)

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. :)

(1 edit)

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.


(1 edit)

Whoooops, what happened there! I wonder if killing everything before it moves into phase 2 causes a lock up

(1 edit)

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.

(+1)

Your work on this conversion and all your other recent C64 games is greatly appreciated!

Thanks very much!

Great game, had alot fun to play it today. One strange thing i had while playing today, not sure if there is a little bug or whether if I really was mistaken in the course of the game (could also be possible).

The following happened. I played and had only one ship left, then i made it to the 20.000 and there the player gets the first extra-ship, right. Then i thought - okay, now i have two ships left again and i can have one of my ships captured by the enemies and then retrieve it and have double the shooting power. But in the moment, when i was captured, the Game Over message occurred, as if the game hadn't properly registered, that i had just been given an extra life some seconds before.

Have you ever had a situation like this in the course of a game?

I can confirm that you are right.

Christ. This is what happens when you do a bug fix at midnight while you're on hold with 111. Version 6,421 incoming.

I had the opposite - twice in one game I was showing 0 ships in reserve, got killed, and actually still had another life. (The number of ships was correct, it was the display that was wrong.) Haven't been able to reproduce it, though - I thought it might be if your Challenging Stage bonus took you through the extra-life threshold, but it isn't that.

(1 edit)

Great port of Galaga, the best one, but the scoring for killing enemies in initial entry waves is not fixed. 
If you kill enemies in initial entry waves, you get 50,80,150 pts. instead of 100, 160, 400 pts. 

Which is correct? I played the arcade and thought I'd matched it.

Damn, just checked the arcade...I had it right all along then and then changed it for some reason....

in 3.1 version preview, the score was correct.

Yeah, don't know why I got the idea in my head it needed to be changed. New version about to go up.

Excellent work in the result and open source spirit. The game goes straight to my C64 favs folder!

excellent - i love it - Thanks a lot !

No problem!

this is phenomenal!!!!! Fantastic job!!! Playing on Ultimate 64 works great!! With Tac-2 joystick of course!!

Good to hear it works well on the Ultimate!

Wow, just wow! This plays super smooth. Back in the day the C64 magazines would have renamed you as "conversion god". =D
First playtest yielded a score of 56920. I will always be bad at this game. XD But I love it. Thanks for doing this!

Haha yeah I'm not as good at this game as I remember. Struggled to get over 100K on a giant arcade Galaga a few weeks ago. 

Duuuude!  Fantastic port.  I a at a loss for words.

Cheers!

I was an Amstrad CPC player myself but I also really enjoy other system's good games such as this one. Well done!

(2 edits)

Haha, to be fair there's been some amazing ports for the CPC lately and it's certainly a machine I was always attracted to with those coloured keys and built-in tape deck.

very good

Thanks for your continued support

Bravo for this magnificent adaptation! This is quite simply the best Galaga on our beloved Commodore 64! You did a really good job

Thanks, much appreciated!

Awesome conversion so far.

A two-player simultan mode (like the melody-board supported Atari VCS-2600 version has for example) would also be fantastic by the way. But i can imagine, that this could cause some technical problems in the programming. Fantastic it would be definately, if the C64 version would have such a game-mode. Just a suggestion.

Yep - 2-player co-op mode will be in the release version!

Wow, sounds fantastic. Now i'm looking forward to the final version of the game even more.

Here is what I call a great Galaga version!

Great game! I really wait for the final release! :)

Great game so far!

I think I found a bug: In the first round, I got my fighter captured, and then the boss, in formation with one other fighter and my captured ship, swooped back down for another run. As it came down, I shot and missed the boss, but hit the fighter that was coming down with it (the alien, not my captured ship), and...I got my captured ship back, despite the fact that the boss was still alive! In fact, I was so thrown by this that the boss hit and killed my original ship, but I was able to continue play with the released ship. 

Weird stuff, but a great achievement otherwise. Thanks for all the hard work.

Thanks - fixed this bug yesterday!

Awesome work! I did notice that on one occasion my captured fighter was immediately returned to me as soon as the alien finished capturing it and taking it to the top of the screen. I didn't have to shoot him! Probably has something to do with the iffy collision detection. Hopefully you can nail the issue!

Just almost perfect, everything have a real feal from the arcade version, wish the Galaga player spacecraft looked a little more like the real deal, but hey it's just a 64 right?

I never thought I would see the day this come true

Thanks again for making such a great game, come to life on one of my favorite puters of all time

Yeah I've had a lot of attempts at that player sprite, the chunky pixels don't lend themselves to that particular shape. If there wasn't such a thing as dual fighters I could use a hi-res white sprite with a colour overlay, but two ships at the bottom would take up four sprites, leaving just four for bombs and diving enemies leaving the screen, massively increasing the flicker.

There's a new ship sprite in the final version, hopefully you'll find it more like the arcade sprite!

Just perfect so love it, thank you very much!

This now runs at out-of-control speed on the Retroarch port of VICE. Version 2 was fine. The only other game I've ever had this problem with was the recent Lady Pac. 

Hmm, sounds like something's up with their port, it works on VICE 3.5, whatever version they have in TheC64 and presumably, as I've had no reports to the contrary, real hardware and Ultimate 64. I'll ask the dev of Lady Pac if he's had any issues.

(1 edit)

Great port. I recognized two issues more in V3.1, which are not in the issue-list above.

First one is, that the game correctly saved my highscore, when i scored more than 30.000 points, but after a restart of the game, my higher score was not correctly displayed at the top of the screen, where the highscore can be seen. There still is the 30.000 score listed as the highscore, although the highscore-list shows my much larger score correctly at the top. So it works in the list, but not in the highscore-display on the screen.

Second thing i recognized is, that sometimes the game has it's little problems with sprite-collisions. I noticed a few times, that i actually hit an enemy with a shot, but maybe because i didn't hit the opponent exactly in the middle, he just kept on flying and ddidn't die. That cost me a few lives and that's not the case in the Arcade original or in the NES and Atari-7800 ports. The shot hit-query sometimes is not precise enough so far and this should be improved.

Then i also noticed some of the other issues mentioned in the list above. So there is still work to do, but from a gameplay point of view, it already looks and plays good. Looking forward to the finalised game.

Thanks for the bug reports. High score thing looks like an easy fix, and I am going to look at the collision detection, I'll strip it down to one enemy and one bullet and track it frame by frame.

Viewing most recent comments 1 to 40 of 57 · Next page · Last page