How I wrote an open source video game for Open Jam in a weekend

I made a video game inspired by old-style Altair 8800 for this year's Open Jam.
3 readers like this.
5 arcade-style games for Linux

Cicada Strange on Flickr, CC BY-SA 2.0

Every year, Itch.io hosts Open Jam, a game jam where developers build an open source video game over a weekend. This year's Open Jam ran from October 28th to October 31st.

Open Jam is a friendly competition with no prizes, which makes it a great opportunity to try new things, experiment with a new game idea, or learn a new programming language. While projects don't necessarily need to be built with open source tools, the game submission needs to have an open source license. Entries in Open Jam get "karma" or bonus points for how open source the game is, such as how many open source tools were used to create it or running on an open source operating system.

Each Open Jam has a specific theme, and this year's theme was "Light in the Darkness." It's up to each developer to interpret how to apply that theme to their own game. I entered the Open Jam with a game called the Toy CPU, a simulation of a simple computer that you program using "switches and lights," similar to an old-style Altair 8800 or IMSAI 8080.

Image of a Toy CPU simulator.

(Jim Hall, CC BY-SA 4.0)

The Toy CPU did well in the competition, ranking second out of the six entries submitted to Open Jam. While voting was light this year, it was still pretty cool to see the game do so well.

Writing the game over a weekend for Open Jam was a lot of fun. Looking back on the experience, I wanted to share three lessons about how to write a game in such a short time. These lessons apply to developing any kind of program, not just games.

Manage the scope

A few days isn't a lot of time to write a new game. To be successful, you need to be realistic about how much you can really accomplish in that limited time. What features you can realistically implement will affect the design and goals of the game.

Keep things simple to manage the scope. A narrow focus will help you to complete the game by the deadline. Avoid the temptation to add new features until you've completed the original goals.

It takes planning

Open Jam doesn't announce the theme ahead of time so you need to wait until Open Jam starts before you can figure out what you want to do. But when the goals are made clear, take some time out to consider what you want to do, and what the goals should be.

This is the same for any project. Before you can map out a plan, you need to know where you're going. The goals of the project help define what you need to do to get there.

Experiment with prototypes

The Open Jam was not the first time I'd written the Toy CPU, although it was the first time I'd written a complete version of it. I have an interest in retrocomputing, and several months ago I wrote a prototype of a similar computer, although it lacked the ability to enter a program using the "lights and switches" model.

This rough prototype was enough to inform me how I might write a more complete Toy CPU — and in fact, I later updated the prototype to run on Linux using ncurses. This "version 2" prototype helped me to figure out how a user might interact with the Toy CPU to enter a program using the "lights and switches."

I planned to rewrite the Toy CPU as a graphics-mode FreeDOS program, but never found the time. When Open Jam announced the "Light in the Darkness" theme, I realized this was a perfect opportunity to rewrite a completely new version of the Toy CPU, building on what I'd learned during prototyping.

You can find the complete source code to the Toy CPU on my GitHub repository. The Toy CPU is open source software under the MIT license.

What to read next
Tags
photo of Jim Hall
Jim Hall is an open source software advocate and developer, best known for usability testing in GNOME and as the founder + project coordinator of FreeDOS.

Comments are closed.

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.