Game Development with PICO-8
I’ve started writing a video game! And this virtual console thing I’ve discovered is actually making that less hard than it sounds.
This week, I discovered PICO-8. It’s a virtual game console that’s designed to help you make your own games. The creator describes it like this:
PICO-8 is a fantasy console for making, sharing and playing tiny games and other computer programs. It feels like a regular console, but runs on Windows / Mac / Linux. When you turn it on, the machine greets you with a commandline, a suite of cartridge creation tools, and an online cartridge browser called SPLORE.
It’s designed to present you with a set of restrictions that emulate what writing games for a console back in the day must have felt like. The idea is that this will give the games a certain look and prevent you from massively over-spec’ing your project.
A fantasy console is like a regular console, but without the inconvenience of actual hardware. PICO-8 has everything else that makes a console a console: machine specifications and display format, development tools, design culture, distribution platform, community and playership. It is similar to a retro game emulator, but for a machine that never existed. PICO-8’s specifications and ecosystem are instead designed from scratch to produce something that has it’s own identity and feels real. Instead of physical cartridges, programs made for PICO-8 are distributed on .png images that look like cartridges, complete with labels and a fixed 32k data capacity.
That last part should really hammer home for you how genius this whole thing is. Games are distributed as PNG images! And those PNGs even look like an old school games cartridge:
You can download that PNG right there, put it into the carts
folder of your PICO-8 installation and then use the LOAD
command to play it. But that isn’t all. You can then also press ESC
to see and edit the cartridge code. Since you have access to the code of every available cartridge, you can learn very easily from how other people do things. And there are thousands of cartridges out there that you can browse from right within the SPLORE
interface you can bring up from the PICO-8 command line.
PICO-8 is about $15 via the Humble Store which is a genuine steal. But if you don’t have any intention of doing some programming of your own or you don’t want to run the virtual console on something like a Raspberry Pi, you can also just play all of the published cartridges totally for free on the web; that Sinking Ships game for example.
What does PICO-8 development look like?
Pretty cool, he? I just love the feel of this thing. You can also simply edit the cartridge code in an outside text editor of your choice, of course. I’ve never used Lua before, but given its prevalence in game development (especiall for scripting things) it seems to be a good choice and a nice skill to have.
I’ve never been much of a programmer but I’ve wanted to write a video game since I was about 12 and it looks like this is finally something I might be able to handle. Anyway, I’m a strong believer in the idea that tech journalists should always try to do some programming on the side to keep involved in the thing they’re writing about. It keeps you sharp and gives you more experience in the things you’re trying to understand. My very first editor-in-chief taught me this and to this day I think it’s one of the more valuable things bosses have ever said to me.
So I’ve decided to write a World War II submarine simulation for PICO-8. I call this game Subsim. Simple. Twenty-four hours into the project, here’s what I have so far:
As you can see, I have moving waves, a sub that can dive and surface based on button presses and some merchant ships and a torpedo that currently do nothing. If you’re interested in what the code for this looks like, you can find that on GitHub. Naturally, it’s open source.
I’m in love with this virtual console idea at the moment and writing code for it isn’t actually as hard as I had feared. It’s pretty cool. And maybe, just maybe, I can even make a finished game at some point. That would be an amazing feeling!