BSS
Welcome to my QA department.

I'm working on a ROM hack for Atari 2600 River Raid to make it more useful for quick play or competitive environments. Another chapter in the long list of things that I ambitiously start, but never finish. On the other hand, this seems to be coming together nicely and might really happen. To make up for it I've got some related follow-up projects that will definitely never go anywhere.

This is all done in the debugger that's built into Stella. You just press ` to go in and out. You can see and edit registers and memory. Also has a full disassembly of the loaded ROM that you can edit in machine code and save back out. Also for reference I have a text file of a commented disassembly to help me find where things happen.
It looks like this:
Untitled7.png 
The first problem you run into is that the 4K cartridge is basically full. So to be able to do anything useful you have to remove existing features from the game to make enough space to add features you want.

Here's what got the chop:
- Player 2. Whatever. You likely don't have to share with younger siblings these days. This gives back a whole bunch of RAM, and creates a bunch of strategically useful gaps in the program code.
- The copyright logo. Big bunch of sprite data that you don't see because of the timer display.

Next in line if I need more space is the screensaver. Anyway I think I broke this already.

Game 1: The plain unmodified game. I left this in because it's already there and hasn't yet hurt progress on the other game modes. Also if this ends up in a cartridge, you can throw away your original game because you won't need it any more!
Game 2: One life, no refueling. Ends up being a little over 30 seconds per game. Quickly blast as much as you can. So far this is the mode I like the most. There seems to be a decent amount of score variation given the short length. Still not sure of the best strategy (fast or methodical).
Game 3: Timed race to bridge 5. Speedrunning is cool isn't it? This adds a clock below the fuel gauge. Game ends when you destroy the 5th bridge. You have unlimited lives. It will also game-over when you roll the timer which is currently 99.9 seconds, but I'm working on getting another digit in there.
Game 4: Timed 5 minute game. Actually doesn't work right now and all it does it play with unlimited lives. Hope there's enough space left for me to fit this mode in.

Here's the ROM so far.
http://users.tpg.com.au/bss855/River%20Raid%20TE.a26

Feedback points:
- Not sure if I should remove the score from game 3. Does it confuse the goal? Or does it give a way to differentiate in case people get the same time? Also what bridge to end on? I chose this one because it's not too far into the game, and bridge 4 has a particular choke point that forces you to slow down.
- How worthwhile is game 4? How long should it be? Might be a struggle to fit it in once I add the extra digit to the timer. Though, if there's anything I've learned from playing games like TIS-100 and Shenzhen IO is that there's always room for optimisation when you're writing assembly code.

Also this is the NTSC version. I originally started this on PAL but got annoyed because it plays jerky in the emulator on a 60Hz display. When it's done I might either re-do the mods to the PAL ROM, or convert this to PAL. Whatever is easier.

Future things:
- Put it in a cartridge to play on a real system! This is the only reason I'm still thinking about PAL.
- How can you play it on a real system in these days without HDMI? Analogue RF is dead. Composite sucks and has too much latency when converted on an LCD display. I'm not aware of a native HDMI mod that exists, so I guess I'll have to make one.

First time I've tried something like this. Been quite interesting seeing inside an old game after learning about how primitive these early consoles were and the sort of gymnastics developers had to do to make them run games that were never imagined. You won't believe how much drama is involved in trying to print six numbers side-by-side all on the one line just to show your score. It's horrific. It's also funny the things I can notice about this game now, even though it's something I had played so much while growing up.

Inspirations:
Rob and I polaxing the River Raid comp at PAX three years in a row.
The Ultimate C64 Talk 
The Ultimate Atari 2600 Talk
TIS-100 and Shenzhen IO by Zachtronics.
Quote 2 0
Mar
This is really cool stuff. I'm hoping this will mean a return of River Raid at PAX! What do you think @Ausretrogamer ?

I like the sound of all of those game modes. I wonder though, is the 30 seconds in game 2 allowing enough room for variation? I know you said there's a good level of variation, but taking PAX as an example. Is there enough variation for say, 15 people battling away in that mode for an hour or three to have a clear winner at the end?

Perhaps - and keep in mind I don't know River Raid too well so take this with my limited experience in mind - it would be better to have something in the sweet spot between the 30 second game and the 5 minute game. Perhaps an unlimited lives mode that ends after 2 minutes?

Either way, it all sounds awesome. A cartridge and HDMI output as well... That could be ambitious but likely incredibly popular if you could get it up and running.
Quote 0 0
BSS
But how can I be forever reigning champion if they run more comps? Ethically I'm not sure I could compete in it.

I'll have to start logging my scores to test the game 2 outcomes properly, but I don't think I've had the same score twice yet. I do know what my best score is though. Now when I try I always seem to be far away from replicating it, and I forget how I did it. An optimal game 3 seems to be around 42 seconds. I'm a little more worried about this one having little variation at the moment.

Also I've got the 100s digit working for game 3 now. Updated ROM in the link above.
Quote 1 0
Mar
If game 2 is providing that good variance then that sounds perfect actually as a tournament game.

Also, if you're posting the ROM out in the public, I reckon that allows you to compete in any tournaments. The code is out there for everyone to see and make sure you aren't gaming the system (pardon the pun).
Quote 0 0
Hwaygo
Can I give it a try if i download the rom and a c64 emu?
[AOAGoN]
[KSy3fj]
[updolaabc99]
Quote 0 0
BSS
Yeah except this one is for the Atari. Stella is probably the best emulator. https://stella-emu.github.io/downloads.html
F1 changes game
F2 start/reset
Arrow keys and space to shoot.
Quote 0 0
BSS
OK Game 4 is added. It's 3 minutes at the moment.

...and with that, barring some minor tweaks, I think it's done. Updated the download link in the OP.

There's one quality-of-life thing that I wanted to add. When you're selecting game I'd like to make game 1 and 2 show the starting number of lives, similar to the way 3 and 4 show the starting timers. Just so you know what the game mode does before you start. Problem is that there would be tons of drama trying to fit it in. The length of the section that initialises all of the numbers you see on the screen is quite limited, and I had to do some dodgy things to make it fit as it is. So I think that will not happen.

I guess I'll start on the PAL version.
Quote 1 0
Mar
Will give it a bash on the Pie this weekend!
Quote 0 0
BSS
The PAL version ended up being quite easy to do. A little too easy, so I'm suspicious that it's wrong. I guess we'll find out soon enough.

Time for phase two:


AtariAge have a really awesome service where they produce a custom cartridge for you, but they don't accept ROM hacks.
https://atariage.com/store/index.php?l=product_detail&p=949

Next best thing are these Pixels Past boards:
http://www.grandideastudio.com/pixels-past/
Can't buy them direct any more, but these days there are a bunch of services where you can get any custom PCB manufactured and sent to you. So it's as easy as programming the ROM chip and populating the board.

Problem is that I have standards. For some reason every custom cartridge schematic I can find uses EPROMs. The type that you erase with UV light. Since this is the 21st century I'm not going to do that. EEPROMs are clearly better, and dammit I'm going to try and make this work.

So now I have a bunch of electronics parts on order, and have started building an EEPROM programmer on a breadboard using an Arduino compatible thingy.
Quote 2 0
Mar
This is the best. Hopefully you will provide some pics of the various contraptions as they get built?
Quote 0 0
Hwaygo

I've been giving it a go. Game 3 is fun because of the race aspect. My best is 51 seconds so far with 2 deaths i think.

I think that for the comp game 4 could work the best, but I think you should also make it 3 lives minimum. Its a comp and should be brutal imo.

Another idea is that you could take peoples rankings for both game 3 and 4 and add them together to get an overall rank. I think that would really throw a spanner in the works and challenge people.

[AOAGoN]
[KSy3fj]
[updolaabc99]
Quote 0 0
Hwaygo
47.9 secs!
[AOAGoN]
[KSy3fj]
[updolaabc99]
Quote 0 0
Hwaygo
45.2
[AOAGoN]
[KSy3fj]
[updolaabc99]
Quote 0 0
bakersnarkMDW
For those who aren’t familiar with River Raid (which I’m assuming is probably no one on here), contained in this Atari 2600 episode of Conan O’Brien’s Clueless Gamer is an excellent example of what not to do.



Please do not watch this if you may be offended by derogatory comments being made about the 2600 by the uninformed Clueless Gamer!
Random item from my Tabletop Games Collection
[image] 
See it & the rest here:
Quote 1 0
BSS
And now I know why it looks like that when he rips the cartridge out.

Here's my best on game 2:


The EEPROM arrived this week. Here's what the finished programmer looks like:
Untitled.png  Untitled2.png 
The microcontroller board is a Teensy 2.0. Same type as I used in my SID synthesiser project. The two chips in the middle are 74HC595 shift registers, and near the other end is a AT28C64 8K EEPROM. The design is adapted from the Ben Eater breadboard computer seen here:


His design requires you to type all of the data into the program code, which is not reasonable to do when you have 4K worth. So I made it programmable over the serial port via USB. This means you can use a terminal emulator like PuTTY to communicate with it.
Untitled4.png 
This has one issue, which took me a while to work around. Anything you send or receive is translated to its ASCII value where I need the original byte value. So rather than use PuTTY to program it, I ended up using some PowerShell commands. Should still be relatively multi-platform though.
Untitled6.png 
Here I pulled the chip out and connected the LEDs to show part of the writing process.

The random flashing is program code, but then you can see some graphics data. The sweeping patterns are the edges of the river, then it does the plane sprite, some explosions, then the other side of the river.

So I write everything to the EEPROM then read it back to check.
Untitled5.png 
I guess it worked. At least, I have to assume it's correct. If I've wired something wrong or got the bit order mixed up it will read back as if everything's fine.

Next task is the PCB. So far this looks like it will be a pain.
Quote 1 0