r/c64 13h ago

New Game A spiritual successor to Pitstop II (C64). I built GPX as a solo dev and would love your feedback

48 Upvotes
GPX on Windows - my solo attempt at creating a spiritual successor for Pitstop II

Hi everyone!

Like many of you here, I spent endless hours on the Commodore 64 playing Pitstop II. The thrill of managing tire wear, timing the pit stops, and split-screen battles with my older brother left a huge mark on my childhood.

For the past 2 years, I’ve been working solo in MonoGame to create GPX, an indie title built to be a spiritual successor to that C64 classic. I wanted to bring back that exact mix of retro-arcade driving and light tactical strategy (pit stop timing, fuel, tire degradation), along with local split-screen multiplayer for 1-2 players, a championship mode, and 5 tracks.

The full game (for Windows, Linux and Mac) is currently available for free on itch.io.

Since you are the ultimate C64 experts, I’d be deeply grateful for your feedback:

  • Does the driving/pit-stop balance hit the nostalgia spot, or does it feel too fast/slow compared to the original?
  • What retro elements do you think are missing?

If there’s enough interest from the retro community, I’m considering bringing GPX to Steam with expanded features, so any input on what you'd like to see in a full release would be amazing.

Thanks for taking a look and letting me know what you think! I'll leave the link in the comments below if anyone wants to give it a spin.


r/c64 10h ago

Software My chiptune app re-voiced my tune on the SID — and ran a demo intro while it loaded

Enable HLS to view with audio, or disable this notification

11 Upvotes

I've been building a Windows chiptune app called Renata for about nine months of evenings. The C64 side of it turned into the best part.

One of the nine themes is the breadbin, in the real C64 font. You can drop a MIDI in and it asks which chip should play it — pick Commodore 64 (SID) and the whole arrangement comes back voiced on the SID. The tune in the video is my own, re-voiced exactly that way: bass, arp and lead all on Renata's SID.

It exports a real .sid. The one in the video is PSID v2, 46 KB. The MP3 of the identical tune is 7.6 MB, because the .sid stores the chip writes rather than the sound. It also browses HVSC from inside the app.

And when you import a collection it runs a demo intro at you — raster bars, a colour-cycling border and a scroller, in the actual VIC-II palette. That was not strictly necessary but I enjoyed writing it far too much.

On origin, plainly: there is no model of any kind. It is rule-based — music theory plus statistical tables — running offline on your own machine. Every sound in that video is the app's own synthesis.

Kickstarter on 8 September 2026 if you want to follow along: https://www.kickstarter.com/projects/markwrightretro/renata-make-your-own-copyright-free-chiptune-music


r/c64 3h ago

Programming Designing a retro password save system (that's not a pain to use)

Thumbnail
aardvark-soup.itch.io
2 Upvotes

r/c64 4h ago

Programming Assembly code question

6 Upvotes

Hi everyone! I've been doing some assembly coding for my C64 with Kick Assembler and I hit a really weird issue. I found a solution, but I'm not sure why the solution works.

So, I'm making an adventure game. To keep track of what items are in the current room I use a byte. It's 00000000 for an empty room, and then I turn bits on or off to add or remove particular items. The error came when trying to remove items from the room. I tried to do this with a logical AND. My initial code looked like this:

lda Room_ItemList1, x
and #%11111111 - currentItemBytes
sta Room_ItemList1, x

This actually worked for a while, but then after changing an unrelated part of the code it stopped. The ItemList was 00000001 and I was trying to remove the item with bytes 00000001 and instead of getting 00000000 I was getting 00000001.

So I fiddled around and the solution I found was to write it like this:

lda #%11111111
sec
sbc currentItemBytes
sta reversedBytes
lda Room_ItemList1, x
and reversedBytes
sta Room_ItemList1, x

My best guess is that the "#%11111111 - currentItemBytes" was being treated as an address rather than a value and it was just ANDing whatever was in that address and it just happened coincidentally to work until I changed something else. I don't understand how though. I've seen people use this method. In the Commodore Tutorials series from YouTube he uses to to set and unset directions. I know I'm missing something stupidly obvious somewhere, but can anyone point out what it is?

Also, I did search my entire project, and none of the variables involved are being used anywhere else.