No Start is Too Small: Making Piconoid

Reflections on building a tiny game in 128x128 pixels and 16 colors.

Games

By Whitney King · May 3, 2026

Background

I’ve been an aspiring game developer my whole life. Try telling that to my attention span, though. Getting one of my own projects off the ground has always been much harder than jumping in on someone else’s. In 2017, that finally changed when my partner, being the kind and generous human they are, gifted me a PICO‑8.

If you’ve never used it, PICO‑8 is a “fantasy console”. It’s a tiny game platform that lives inside your computer, capping out at a 128×128 display, 16 colors, and 8192 “tokens” of Lua. It’s the kind of environment that looks cute until you try to be ambitious. Perfect. This was just what I needed for something small enough I might actually finish.


Inspiration

I dove in and followed the tutorial for Pico-8 Hero: Breakout by Lazy Devs just long enough to be dangerous. This series of videos is extensive, and I admittedly peeled off to do my own thing about 1/3 of the way through. Starting with the tutorial helped me learn the basics of Lua, wrap my head around a game loop, and settle on Breakout.

There was something poetic about rebuilding an arcade classic inside a console that felt like a product of the same era. The chunky pixels. The limited palette. The chip tunes and tones. Every action, decision, and sprite mattered.


Technical & Design Vision

When you think of token usage in this era, you’re likely to first think of AI. PICO-8 was thinking about token limits before it was cool. In either context, here’s what a token limit actually does to you: it makes you rethink what information needs to live in code (or context) at all, versus what can be derived at runtime. The levels in Piconoid are a good example of this. Each one is a string, and every character in that string is a brick:

"xxfxxxxxfxx/xfpfxxxfpfx/xfpfxxxfpfx/xfffffffffx/xfgugfgugfx/sfgugfgugfs/xsfffffffsx/sfsfpppfsfs/xsfsfpfsfsx/xxsffuffsxx/xxffufuffxx/xxxfffffxxx"

That’s level 3, which renders as a cat face. The key:

  • / starts a new row
  • f is brown, p is pink, g is green
  • u is unbreakable

The u bricks sit in the eye positions and can’t be destroyed, so the ball bounces off them all game and you play around them.

Every brick on screen is rendered from a single white block that gets recolored at runtime using a simple character-to-color lookup. One block maps to eleven colors across all twelve levels. This pattern is an industry classic, tale as old as time when it comes to making games!

Twelve levels make up the full run, with ten hand-crafted levels and two boss encounters:

Level Type Description
1 Normal Sparse blue/violet/pink/tan checkerboard
2 Normal Diagonal blue/green weave
3 Normal Cat Face with unbreakable eyes
4 Normal Dog Face with unbreakable core
5 Normal American Flag
6 Boss Armored boss + minion waves
7 Normal Rainbow with Heart
8 Normal Tropical Island
9 Normal Concentric target rings
10 Normal Ornamental Star
11 Normal LGBTQ+ Pride Flag
12 Boss Final boss encounter

On top of the boss levels, not every brick goes down in one hit. Armored bricks take two hits. On the first hit they show a visible crack and stay put; only the second hit clears them. In the encoding, uppercase means armored. B is armored blue. V is armored violet.

Level 7 is a full heart encapsulated in rainbow, one color per row. Look at the encoding though:

"rxrxrxrxrxr/xoxoxoxoxox/yxyxyxyxyxy/xgxgxgxgxgx/BxBxBxBxBxB/xVxVxVxVxVx/pxpxpxpxpxp/xtxtxtxtxtx/wxwxwxwxwxw"

The hardest bricks in the rainbow are its center. Blue and violet, the two rows right in the middle of the spectrum, are the armored ones. You have to hit them twice before the color clears. It’s a small thing, but it makes the heart feel like it has a core worth protecting.


Execution

Because I can’t help myself, I started adding touches of whimsy. Since it was my game, I wanted it to make me smile while I worked on it… and I could do that. A randomly colored hot air balloon drifts across the background sky. A tiny airplane occasionally flies over, port and starboard lights blinking. When you push your hit combo to the max of 7×, sparkles trail the ball and the score text cycles through the rainbow. Touch the paddle with the ball and you’re back to 1×.

Half the fun of PICO‑8 is that you can find room to polish your ideas, but only if you’re willing to barter with the token count like it’s Khajit’s wares.

Almost as quickly as it started, the feeling of “done” had crept up on me. Piconoid 2.0 was born with 10 unique levels, 5 power-ups, a combo multiplier, and ambient life drifting in the background. It was the first game I could actually call finished, and I could call mine. Finishing a game, even something small and scrappy, made me proud. I published it on the Lexaloffle BBS (as a PNG image!), marveling at the ingenuity and simplicity of the community there. If you’ve never browsed that site, it’s like walking into an arcade built entirely out of imagination and nostalgia. Seeing my little cart sitting there among hundreds of others was, and still is, surreal in the best way. It saw its best month back in April 2023 with 19 plays. As of Spring 2026, it still gets a few plays per month!


Piconoid Revisited

As I recently learned, some games are never truly done.

Ball Physics

Inspired by the whim to write this blog, almost a decade later I came back to Piconoid with fresh eyes, real industry experience, and an actual design document this time around. Having replayed the game and come prepared with that document before revising the code made it easy to target real problems without digging around. The most obvious one off the bat was the original ball speed formula being additive and uncapped. By the later levels it was almost unbeatable. This was fixed with a much less stressful, simple speed up equation:

ball_spd = 0.7 + l * 0.05

Another structural change that opened everything else up was rebuilding the ball from a single bundle of variables into a table of independent objects. The physics loop now iterates over all of them, and adding a second ball mid-game is a single call the engine handles cleanly at 60fps. It could enable mayhem in the best possible way, but I’ve personally only gotten up to about 6 balls at once.

Power-Ups

The power-up system adds one more layer of decisions, and not always comfortable ones:

Power-Up Effect Points on Catch
Extra Life +1 life 250
Long Paddle Width → 32px 50
Short Paddle Width → 11px 500
Fast Paddle Speed → 5.0 100
Slow Paddle Speed → 1.0 500

The ones that hurt you score five to ten times more than the ones that help. A Short Paddle is 500 points or a much harder next thirty seconds, and that tradeoff lands every single time one drops.

Boss Encounters

Next, I added two new levels. Levels 6 and 12 are the boss encounters where the game becomes something different. The tile map background disappears, and is replaced by a navy sky and a scrolling starfield. An armored boss cluster drops in at the top of the playfield, with three connected segments sharing a single 20 HP pool. You don’t win by clearing the grid. Instead, you drain HP by hitting the boss blocks. Every three seconds a fresh wave of minion bricks spawns around the boss, and destroying them releases molten blobs that fall straight towards your paddle. Catch enough blobs and the paddle shrinks: 70%, then 40%, then gone, taking your ball with it. You’re managing a ball, dodging blobs, and watching your platform degrade underneath you while taking down the boss bricks. It felt like just the right amount of chaos for a final pass on this old project.


Closing Thoughts

If you find yourself inundated with little-big game ideas, look no further than PICO‑8 for a springboard. The constraints aren’t a limitation so much as a design framework: the token limit keeps you on track, the 16-color palette sharpens your eye, and the 128×128 display forces you to ask what actually matters on screen at any given moment. Lua is easy to pick up and has real adoption in the industry for things like modding.

When coming back to the game many years after making it, the thing that made Piconoid 2.1 meaningfully better than 2.0 wasn’t any single feature. It was writing down what I was building before I built it. That document existed so I could make intentional decisions, find problems early, and return to the project nine years later without reverse-engineering my own thinking. It turns out that’s worth doing even for a teeny-tiny game.

If you want to try Piconoid 2.1 yourself, you can play it here: https://www.lexaloffle.com/bbs/widget.php?pid=36758 Piconoid Cart PNG


Have your own thoughts on Lua, PICO-8, or retro games you’d like to talk about?

Do you run a conference you’re interested in booking me to speak at?

Reach out on LinkedIn!