| Tags: game development post-mortems

PICO Payun is a small, retro shoot'em up game I made with PICO-8. This article is a post mortem of the development, so I'd recommend you play the game first (you can do it directly in your browser).

A level of PICO Payun

Scope of the project

The idea for the game came up due to this tutorial series. While I quickly diverged in the codebase it is a good tutorial in terms of which features to implement. It also put a lot of emphasis in visual effects and feedback to the user (a concept often referred as juiciness in game design), which is something I never put too much attention in PICO-8. So I decided to take the gist of each video, implement it my way, and add / remove stuff as I saw fit.

In the end, PICO Payun features:

If you're not familiar with PICO-8, it's a "fantasy console" with limitations that force you to think out of the box and keep your games small. The most relevant restrictions are:

Code

Nothing too complicated in this regard. Half of the codebase relates to the enemies and levels, and the code ended up being quite messy until I started to put some "order" in the new stuff I was implementing (I did not refactor previous code).

In total, the codebase takes 7300+ tokens, which is near the limit of PICO-8's 8192 tokens. I didn't optimize for this and have a lot of auxiliary functions that make the code more readable, but with more tokens.

Development

The game was implemented over a span of ~2 months. I didn't work on it every day, and when I was up to the task it was usually in small chunks of time (20-60 mins at a time).

I ended up consuming most of the tokens and a lot of the space in the sprite banks (but I didn't bother to optimize for any of this, so I guess I could have added a few more enemies, power-up's or weapons…)

I tweeted the whole process (you can follow the thread here), which was good for morale and also for getting feedback. I even published a playable release at the middle of the development for people to try out! I got good feedback (and bugs!) and the game was definitely fun to play, so that gave me the energy to push forward and finish.

Art

I wanted the game to be cute and colorful. This can get tricky with PICO-8's small color palette, but I think I ended up achieving it.

Most of the animations are just 2 or 3 frames long. For instance, the main ship is just a 3-frame 8x8 sprite (one frame for staying still, and then two different ones for each direction). The animation for the engine thrust is a separate sprite, and keeping it separate gives the illusion of a more complex sprite.

Spritesheet for the player's ship

Animated ship

For the enemies I chose them to be "organic", kind of like alien monsters. That helped to be cohesive and to differentiate them from the player's ship —which is "mechanic".

All of the enemies —including the bosses— feature a 2-frame animation that is a squash and stretch. They shrink and squash agains a virtual surface, and then they "rebound" and stretch to their original size. Again, this helps with coherence (and also with production!). It's seen most clearly with the slime alien:

Slime alien

Most special visual effects are based on drawing filled or unfilled circles. There's a primitive (due to the fact that PICO-8 doesn't allow for transparency or blending mode) particle system in place, that is used for explosions, weapons, etc. Example:

Audio

Sound effects are core to this "juiciness" we were referring to, and the game features different sound effects for shooting, impacts, pick-up's, etc.

The most lacking aspect is background music, in which I struggled a lot to compose something that made sense and that did not occupy all the audio channels (PICO-8 only has 4) to leave space for the sound effects to be played.

The main track for the game ended up more cheerful that I intented, but I didn't want to spend a lot of time on this task, so I went with it anyway.

Lessons learned

What went well

What went wrong

To try next time