Character Select for a C64 game

Carl-Henrik Skårstedt
5 min readDec 28, 2017

Here is the character select screen for my side project

Character Select is one of the menu screens in a C64 side project I’m working on.

So what is the significance of single a menu screen?

This screen handles all setup for player control and character options, so it connects to most of the gameplay code in one way or another.

The game supports four players in any configuration of keyboard and joysticks. When playing the game with joysticks you should be able to play the game without touching the keyboard. This should hopefully make it work well with emulator boxes that ship without a keyboard.

It is also important that this screen is user friendly which means showing which keys does what and how to start the game.

Work on this screen started about 20 days ago with reading the joysticks, which is very simple and supports the four player user port adapter. But simply knowing which controller switches are set is a pretty minor part as each gameplay screen treats the input slightly differently.

Originally I built the controls for keyboard with the intention of adding
joystick later. Four keys indicate direction and one key represents a selection when playing a turn (one player sets up land lots etc.), and two keys for up/down and selection per player on other screens.

The first issue was that each joystick has its own select key and shouldn’t select when pushing up/down like keyboard players, so the player input needed to be a bit more advanced. This also required going through all screens and make sure joysticks works as expected which isn’t hard but somewhat time consuming.

Another issue is that each joystick port shouldn’t be hard coded to a player index unlike keyboard control. In the character select menu you can simply push sideways to select another player slot when using a joystick.

The Commodore 64 keyboard was not intended to be used at the same time as a joystick in port 1, the keyboard is scanned into 8 bytes where each bit represents a key press, but port 1 consumes 5 bits of all those bytes so that leaves 3/8ths of all available keys. Joystick port 2 uses another byte so there is no conflict when playing games with keyboard and a joystick in port 2.

Having four players using the same keyboard is quite cramped, and limiting that to the remaining keys doesn’t improve personal space. In order to improve that there are two keyboard layouts, one for more space between keys and one that supports a joystick in port 1. To play four players with two joysticks and two keyboard players the best setup is probably using keyboard for player 1 and 4 and joystick for player 2 and 3 with the smaller key set.

During the turn (when a player has exclusive control and sets up land lots etc.) all joysticks can be used so even with only one joystick all players can use it.

In addition to all that technical stuff another goal is to make the character select screen look good. With all the information needed to make a selection that’s not so simple.

You never see the faces of the character you play as in the game but there is an opportunity to do that here so I made an attempt at drawing some faces. By exploiting a bug I had originally I could even represent the player color as clothing in the portraits!

I’ve worked on a few four player character select screens in the past. Fighting games like Samurai Shodown and Fatal Fury Special are following a well defined pattern for fighting games, but there is a lot of room with two player screens. NBA Hangtime had a pretty interesting screen where you can also add a name and a pin to your guy to load prior progress, this combo also activated player cheats.

Character Select for Playstation all-stars Battle Royale was a massive mess both in development and delivery, that screen ended up using all controller buttons with almost no context. Most players don’t understand how to configure options for the game without going online. That’s not an experience I want to repeat :)

I think the best four player user experience I worked on was Shrek 2 where simply pressing the start button during gameplay would assign an available character to play without an additional setup screen. This made the game logic quite complex having to deal with switching characters run-time and controllers disconnecting for various reasons. It would require too much memory to support something like that for this game.

All this complexity unfortunately comes with quite a bit of code which takes some time to load, even with a turbo loader. Here’s how the game is starting right now:

  • 5.5s Load the loader (load “*”,8)
  • 28s Load into title / menus (also loads a loading screen)
  • at this point you select some game options and planet to land on
  • 5s Load data constants and character select
  • each player selects input device, character, color
  • 40s Load into game

during the game there is an occasional 5s load into a random production event or player turn event. The game is currently using 193 blocks and at this rate will probably fill one disk.

So how does this hold up to modern games? This is what I experience when loading the latest Uncharted game from a PS4 pro hard drive (after reboot):

  • 30s Select game PS4 pro to menus
  • select game type
  • 50s Start game from menu

So in comparison with modern games I’m doing fairly well! Of course if I get the game on cartridge the load times goes down to significantly less than a second for each. I have not looked into that yet :)

In case you’re looking at this game project for the first time or missed an update, here’s a recent trailer. It is just a cut up single season of a game so it can fit into about one minute:

The music was created by Stein Pedersen who is helping me with audio code and content!

This project is a tribute to a 1983 game created by Ozark Software called M.U.L.E., a four player strategy game that have both turn based and realtime elements.

So what’s left to do?

At this point the game can be played by zero to four human players while AI takes on the remaining slots as the game is always four players.

The game is complete and can be played fine, but there are a number of things that are needed to complete the experience, such as at least one ending, more events throughout the game, land assessment, and the audio is not integrated. A cartridge version would be great too!

I kind of would like help with the player animations, I’m not great at those.. Also if it is not clear from the image at the top I only have three options so far. I’m also open to help with all the art as I’m really more of a programmer! In addition to the art there is also need for setting up game constants for the landing locations, basically setting up store prices and land distribution / item production for each playable scenario.

The next thing I’m focusing on will be fixing a few bugs and glitches so I can send off the first QA build! And decide on a name for the game :) After that probably improve the tools for contributing art and design.

--

--