Posted by on Oct 31, 2016 in Blog | 0 comments

In January of 2016 I challenged myself to make 1 new game every month, for a year; 12 months- 12 games. This is one of those games.

Development Stats

  • Language: Lua
  • Engine: Pico-8 Fantasy Console
  • Platforms: Web/Pocket Chip


This month’s game started life as a small demo I made on the bus one morning (using Pico-8 on my PocketCHIP).

This short little program generates a sine wave, and clamps the Y position of a ball to that point on the wave. It also has some basic logic to launch the ball into the air, by turning the delta of the ball’s Y position, from frame to frame, into a Y Velocity. So if the player moves the ball up a steep hill, the ball will have a strong upward velocity, causing it to launch off the top of the wave.

Even this simple demo was fun to play with, and seemed to get people’s attention, so it seemed like a good jumping off point.

Around the same time, this year’s Game Boy Jam was kicking off, so I decided I would enter this game into that competition under the theme of a Wave Race 64 Demake.

Next step was to change that ball into a dude on a jet-ski, add an enemy, and replace the rainbow sine wave with a blue water wave.

pico-8_71 pico-8_73

The core mechanic, as already seen in the image above, is to launch yourself off a wave and land on the head of your opponent, knocking them off their jet-ski.

Originally I was planning on making this game an actual racing game: start, finish, lap times, etc. But given the short time frame for the GameBoy Jam, I decided to stick with a simple endless arcade mechanic. The goal was simply to knock-off as many opponents as possible before getting knocked-off yourself. I put that together along with the basic game flow (title, gameplay, gameover, repeat), and I had myself a game!

pico-8_79 pico-8_81

This mechanic turned out to be so simple and rewarding I kept it for the full game (not just the GBJAM); abandoning the idea of racing.

You can also start to see the AI taking shape. At this point they had just 2 rules: if player’s Y position is above me, move away from the player; if player’s position is below me, move towards the player. This turned out to be a little too difficult, so eventually I added some more randomness to it, but basically the goals of the AI remained the same through to the final version.

The GBJam was coming to a close now, so I quickly reduced the game to a GameBoy like color pallette (remember Pico-8 has a fixed set of 16 colors to choose from, none of which are really gameboy-like), and added some new art (with the help of dw817).

This is what it looked like when I submitted to GBJam mid-month:

pico-8_86 pico-8_87

The game was pretty flawed at this point; the most significant issue being that the AI was very easy. You could pretty much play forever, which isn’t really fun for this kind of game. You want short, challenging sessions.

So right away I spent some time improving the AI to find the right balance of challenge and fairness. The solution I landed on was only minor changes to the AI itself, and instead increase the number of AI spawned at a time. Now, every 5 waves an additional AI is spawned, naturally ramping up the difficulty.

pico-8_95 pico-8_97 pico-8_99 pico-8_101

You probably also noticed a bunch of other changes. The most obvious one is the color changes. After getting feedback that the lime-green was ugly, I added multiple color palettes and allowed the user to chose which one they want. Allowing the user to choose a palette would later be removed and instead pallet swaps would be used as an indicator of the player passing the 5-point thresholds which causes more AI to spawn (mentioned above).

I also spent a lot of time sprucing up the graphics, adding a big setting sun. The reflection in the water is just a series of tapering off lines, but with a subtle sine wave applied to them so that they move back and forth. On top of that, I added “speed lines” to help sell the illusion that you are moving forward, and a bright flash to help make stomping opponents feel more satisfying.

I also added a key part of these retro Arcade style games: a high-score saved to disk!

The challenge of the game still didn’t feel quite right, so I added a minor punishment when jetskis attempting to slam someone and missed. In those cases you would be plunged under water, and lose the ability to jump for a short period. This add a risk/reward mechanic to slams, as the player was left vulnerable in that state.


I also added a short tutorial at the start of the game, to help introduce the player the mechanics of the game. Thinking back now I really should have made that first enemy unable to jump so that the player has more time to learn.


The only significant gameplay change I made at this point was adding a combo system. If you slammed more than one opponent before hitting the water, the number of points you gain for each slam would increase. The first is always worth 1 point, the second worth 2, the third worth 3, and so on. This hopefully adds a bit more skill and strategy to game, taking it beyond just “survive as long as possible”.

All that was left to do now was some additional polish:

  • New Logo
  • New PocketCHIP friendly controls.
  • Added cool “floating text” to Press Start screen.
  • Replaced flashing lights when scoring a point with subtle camera shake.
  • Add water-splashing particle effects.

The final version of the game can be played in your browser via the link below. Remember to post your highscores in the thread below the game!

The png is both the visual representation of the game, and the actual game cart itself! All the code, art and sound are embedded in the metadata of the png!

The png is both the visual representation of the game, and the actual game cart itself! All the code, art and sound are embedded in the metadata of the png!

System Requirements