Back to top

Game Development with Pico-8 #01: Tutorials

I've always wanted to make a game, and I found out about Pico-8 from my good friend and co-worker. It's a cool little console with built-in tools for drawing sprites and creating sound bytes. It has some pretty strict constraints, but that's intended to keep your scope small and your focus on creativity. Your games can be exported in a cartridge format that's easy to share.

To start, the creator offers this 'zine that's full of tutorials. So far, I've gone through the two main tutorials. The first walks you through making a flappy bird clone, and the second is a "lander" in which you control your ships thrusters in order to land on a landing pad. Now, I have 0 experience writing in Lua (and very little experience writing in html/css/js). So this was a little tough for me, some things went over my head and some things I was able to understand. But I persevered and learned a lot!

The pico-8 editor uses a pixel font to really emphasize that retro feel. But it can be a bit hard to read at times, and the editor is a fixed size so long lines become a pain. You can use an external code editor and import your files to make your life a bit easier. My friend that introduced me to pico-8 wrote a really easy to follow tutorial on how to set this up, check it out on his blog.

Here's the result of the first tutorial, my flappy bird clone

An 8-second GIF showing gameplay of a pixel graphic game titled Cave Spirit. The player is moving through a cave and hits a wall, causing the game to end.
Cave Spirit: A Flappy Bird clone

It's a really simple first game because there's only a few variables involved. Those being the player's up and down movement, their score, the walls and whether or not they've hit a wall. I had some fun changing my sprite from the tutorial sprite as well as the sound byte that plays when you win. You can give the game a try here.

And the result of the second tutorial, my space lander game

An 8-second GIF showing gameplay of a pixel graphic game. The player is controlling a spaceship, directing it to a landing pad on a planet.
Space Lander

My favorite part in this tutorial was learning more about player movement and the boundaries of the screen. Probably because it clicked for me easier than the other parts of it! The other cool thing I added that wasn't part of the tutorial are the win and loss messages on the game over screen. I made 2 tables (or arrays) that contain 3 win messages and 3 loss messages. Then, at the game over screen 1 of those messages randomly displays. I only got so far on that alone though, my original try at it cycled through the messages every frame! The text looked like a strobe light. Brad helped me figure out how to fix that, and it was smooth sailing after that. You can give this one a try here.

Aside from these 2 main tutorials, the free 'zine includes some advanced tutorials that cover particle systems and game states. I haven't gone through those yet, but once I do I'll be starting on my very game: A metroidvania platformer! The main character is going to be a lil' wizard dude. I'm planning to keep this really small in scope cause one thing I forgot to mention is that you have a limited amount of code you can write for a single pico-8 cartridge. Another intended limitation of the console. But, I've seen some large-scale games that are split into multiple carts. Reminds me of RPG's on older consoles like Final Fantasy 9 on the PS1, it had 4 discs!

Anyway, I'll be writing more posts about this after I get started on my own game. Thanks for reading 👋🏽