Robo-Frenzy for the Vic-20

The Concept

As a child, my first experience with a computer was the Commodore Vic-20. It used a popular processor, the Motorola 6502, and could display in color! Programs could be loaded from cassette or cartridge, or manually entered in the built-in BASIC interpreter/shell.

While developing Robo-Frenzy, I started thinking about the Vic-20, and acquired and repaired one with which to experiment.

Once I had my fill of playing old favorite games, I decided to learn how to program in 6502 assembler.

This gives the programmer the most speed and flexibility, as they are bound by the raw hardware specifications of the computer and not the implementation of a higher level language like BASIC.

The hardware limitations on the Vic-20 are quite strict. There is only 3.5K of usable RAM total, which means that conservation and clever reuse of memory space are key.

The Execution

Having only ever dabbled in 6502 assembler previously, I wanted to review a good sample game to understand some of the nuance - how does one handle display and audio routines without slowing down the main game loop? Would it be possible to automatically convert between NTSC and PAL systems?

I found a reference in Davide Bucci's "Alien Invaders". This is an open source project implementing a version of "Space Invaders" for the Vic-20.

I began the work of removing all the things that made "Alien Invaders" its own work - graphics, audio, and controls, as well as game flow, game over conditions, and scoring.

Next, I started branching and adding my own routines to handle things like player display, tentacle movement, collision detection, and more.

The Gameplay

Unlike Robo-Frenzy, this is a single player game. The player can use the keyboard or a joystick. Pressing "M" will enable/disable music. The Vic doesn't have a traditional set of cursor movement keys, so [Z] moves left, and [X] moves right.

The player's score is displayed at the top of the screen. The player moves down the screen in one of eight positions. At the bottom of the screen, the player picks up a gear, which they try to bring back to the top of the screen. Once a gear arrives at the top of the screen, 1/6th of a robot will appear. Point values are quite a bit higher than the value used in the electro-mechanical version of the game. Building an arm or leg scores 100 points, the torso 200 points, and completing the robot by adding the head scores 500 points before allowing the player to progress to the next level.

While the player is moving up and down this hill, a large robotic octopus attempts to stop them. Its tentacles move in and out in predefined patterns. These patterns increase in speed as the player returns gears or progresses through levels.

When a player is touched by a tentacle, they drop the gear, which returns to the lowest position on screen, and are stunned briefly. Play continues for 2 minutes.

The Release

After completing the datasette version of the intro and game, I worked to manufacture cartridges that would work with the VIC-20. I had compatible cartridge PCBs manufactured, and burned the cartridge ROM. I printed some cartridge housings, made cartridge stickers, and manufactured, tested, and boxed a run of physical carts.

I commissioned co-designer of Robo-Frenzy, Ryan Claytor, to create VIC-20 cartridge box artwork, wrote a short manual, and created dielines for the box's interior tray.

The source code for all three programs is available at this Github page.

Special thanks to Don Walton, Ryan Claytor, Jon Chad, and Davide Bucci.

Contact Me

For Amusement Only Games, LLC. Logo