Log In  

I like making retro games.

Star Beasts 1.3
Vandermonde (exploration/puzzle/action game)
[ :: Read More :: ]

Cart #dredds_billabong_ttj9-0 | 2024-05-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is my entry to TweetTweetJam 9, a game jam where games had to be written with at most 500 characters of code. I ended up using 484 characters.

Billabong is a two player strategy game. Players take turns to flood the maze with coloured liquid. One player fills the maze with red liquid, the other with blue. The player who fills the most of the screen with their colour wins.

To start flooding a channel, tap the screen if playing on a mobile device, or click with the mouse if playing on a desktop machine. The game works best on a mobile device so that the players don't have to share a single mouse.

The stats display at the bottom of the screen shows the players' scores and who has the next turn.

When a game is complete, reset the cart to play again with another random maze.

Because this was written for TweetTweetJam, some niceties had to be dropped to fit into 500 characters. There's no title screen, music or sound, and the game doesn't detect the end of the game and display the winner. Also, there wasn't room for a safety check to ensure that the flood-fill algorithm doesn't exhaust Pico-8's available memory, but this doesn't seem to cause a problem in practice.

Tip: you don't have to wait for the flooding to stop to take your turn. If you're quick (and don't get confused by the maze) you can use your liquid to block your opponent's flood.

The entire source code of the game is:

k(24365,3)k(24405)cls(13)for y=1,122,5do
for x=1,122,6do?rnd{"β—œ","◝"},x,y,2
rect(0,0,127,121,6)k(24405,96)f={}s={0,0}p=1::_::px=t(32)py=t(33)if(btnp(5)and py<120and g(px,py)==13)a(f,{p,px,py})p=3-p
q,x,y=unpack(deli(f))if g(x,y)==13then
flip()goto _
P#148544 2024-05-17 15:45 ( Edited 2024-05-18 19:34)

[ :: Read More :: ]

Cart #dredds_piffle-11 | 2022-10-16 | Code ▽ | Embed ▽ | No License

My family like the online word game Waffle but wanted to play more than once a day. So I wrote them this version in Pico-8. Along the way I reimagined it as an 8-bit console title with sound effects, music, particles, multiple levels, ramping difficulty, and a final “boss battle” that you unlock by completing all the preceding levels.

How to Play

Scrambled words are arranged in a grid. Unscramble all the words by swapping pairs of letters. You have a limited number of swaps to complete each level. Run out of swaps and you have to try again. Complete the level with swaps left over to score points.

Can you solve all the levels with five swaps remaining to win the title of Piffle Champion?

Play level 1 for an introduction to the controls. Playing through this level unlocks the rest of the game.

When playing a level, the pause menu gives you options to restart the level or return to the level selector. If you have difficulty interpreting the tile colors, you can enable graphical indicators on the tiles by toggling the "color blind" option on the pause menu with the left and right buttons.

Note: the game uses British English spellings, not American English spellings.


The music is by J.S. Bach, converted from a free MIDI file by the Denote tool.


1.7: the in-game tutorial explains the blank spaces, now that the cursor does not skip over them

1.6: usability improvements:

  • the cursor changes to show whether a tile can be swapped
  • the cursor does not skip over the blank spaces, which makes navigating more predictable
  • on completion of a level with maximum score, the title screen moves the cursor to the next incomplete level, not the next level, to be more convenient when you are trying to complete all levels and achieve Piffle Champion status

1.5: the game starts with the next unplayed level selected, so you can start playing with a single button

1.4: usability improvements: custom pause menu items behave like the standard ones

1.3: bug fix in end of game condition (you must now complete all levels with score of 5); added a small animation on title screen when you beat a level with score of 5 to show that the cursor has been moved to the next level

1.2: particle effect on title screen when the player has unlocked the final level

1.1: small bug fixes

1.0: first release

P#102351 2022-09-25 22:33 ( Edited 2022-10-16 17:48)

[ :: Read More :: ]

The built-in help for the dset and dget functions states that the persistent memory starts at address 0x5f00. But correct adddress is 0x5e00.

P#117091 2022-09-08 22:14

[ :: Read More :: ]

Does anyone know how to change the keyboard bindings in the HTML export?

I want to change the default key controls so that the keys are more natural for my game than the defaults for one and two-player play. Is that supported? In which file are the key bindings specified?

P#107846 2022-02-28 22:13 ( Edited 2022-02-28 22:14)

[ :: Read More :: ]

Cart #dredds_squishd-3 | 2022-09-07 | Code ▽ | Embed ▽ | No License


A collect-em-up action game for one to four players.

Escape the maze, eat tomatoes, collect treasure, don't fall in the water, and don't get squishd by the side of the screen.


  • One-player or same-screen multiplayer for up to four players
  • Five different zones in one huge scrolling map
  • Persistent hiscores
  • Team and individual hiscores
  • "Coop-etetive" multiplayer gameplay: you have to work with the other players to have a chance of getting the individual hiscore


The players control "tetrapods", trapped in a maze. The view scrolls randomly, and you must stay on screen to survive.

The maze contains tomatoes and treasure. Collect them to score points.

After two minutes in the first zone, you will enter the second zone. There are five zones in all, each with different challenges. The scrolling gets faster as you progress through the zones, and the time in each zone gets shorter. After the fifth zone, you will reach the exit. Move onto the exit to escape the maze. In a multiplayer game, all players must escape the maze to win the game, and players earn a bonus if they escape the maze before other players.

You lose a life by being squishd by the side of the screen or by falling into water. Each player has three lives. The game ends if any player loses all their lives.

Extra lives are awarded to a player when they score 500 points, then 1000 points, 2000 points, and so on. There are a few collectible extra life items in the maze, but they are hard to reach. Will you risk trying to grab them?


Tomato: 1 point
Silver coin: 5 points
Gold coin: 10 points
Gemstone: 50 points when the gem is the same colour as your character, otherwise 20 points
Escaping the maze (multiplayer games only): Bonus, calculated as the average score of all players who have not yet escaped.

Hiscores are recorded separately for one-player, two-player, three-player and four-player games.

In multiplayer games, the entire team earns a score, calculated as the average of the players' scores. You can win two hiscores: the team hiscore and the individual hiscore. The individual hiscore can only be won when the team has won the team hiscore. Until the team has achieved the team hiscore, players must cooperate to push up the average score. When the team has the team hiscore, a flashing star is displayed at the top of the screen. At this point, players no longer need to cooperate and can go all out to win the individual hiscore.


On the title screen:

  • Each player: press πŸ…ΎοΈ on their controller to join or leave the team.
  • All players: having joined the team, hold down ❎ to start the game.

In the game:

  • Use the direction buttons to move your character.
  • By default your character runs while you hold down a direction button.
  • Hold the πŸ…ΎοΈ or ❎ button to "creep" slowly by a single step for each press of the direction button. This is useful when negotiating tight passages or making risky manoeuvres near the edge of the screen.

On the game over screen:

  • All players: hold down ❎ to return to the title screen.

The pause menu has options to:

  • turn the music on and off
  • clear all recorded hiscores
  • abandon the current game and return to the title screen


Squishd! is inspired by the classic 8-bit game Splat!, but is not a remake.


3: Make compatible with Pico-8 0.25

2: Fix wrong sfx played when collecting own gem

1: 1.0 Release

  • show bonuses earned for collecting gems and exiting maze
  • make the lives display in HUD easier to read
  • nicer animation when exiting the maze

0: Beta Release

P#107276 2022-02-19 23:47 ( Edited 2022-09-07 21:00)

[ :: Read More :: ]

Hi. The W and S keys are close together and I find I often hit Control-W (quit) by accident when I mean to hit Control-S (save), and therefore lose unsaved work.

Could Pico-8 prompt before quitting if there is unsaved work? Similar to how it prompts to overwrite files when you save or export?

P#104099 2022-01-02 10:47

[ :: Read More :: ]

Cart #star_beasts-4 | 2021-12-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Your ship has stopped in deep space to perform repairs. The crew are on a spacewalk when suddenly predators warp in from hyperspace. Save the crew!

Frantic shoot-em-up action inspired by 8-bit classics such as Uridium, Defender, Robotron, Asteroids and Thrust.

The controls are explained on the title screen.

You'll get a higher score the more risky your play:

  • fly fast to get a score multiplier for each kill
  • the bogies evolve to more dangerous forms that are worth more points
  • you can earn big points by rescuing crew members far from the ship

There are four different ships. You'll encounter new challenges on later missions, and need to adapt your tactics.

You can also speedrun each level – your time is shown in the level complete screen.

The music is by @Gruber.

How high can you score?

Gameplay Tips

The bogies warp in near your ship in waves and follow fixed paths around the ship scouting for prey.

If you learn the patterns of waves and paths you can pick off the bogies with ease while they are scouting. It won't get you high scores, but you can speedrun the levels that way.

The faster you are travelling when you fire a shot, the more points you earn if the shot hits a bogey. But be careful. On higher levels, you can collide with the ship's superstructure. While your pod is pretty robust and bounces off at low speeds, at high speed collisions damage your pod.

Collisions with bogeys also damage your pod. You don't get any points for colliding with bogeys.

The "turret lock" lets you strafe the bogeys at high speed with less chance of collision.

If a bogey reaches the end of its path, it starts hunting the crew. It's body flashes between yellow and green, and it moves faster. You earn more points for taking out a bogey when it is hunting than when it is scouting.

When a bogey reaches the crew member it is hunting, it abducts the crew member. It then flies away from the player. It moves quite slowly when carrying an abducted crew member. Bogey's carrying an abducted crew member are highlighted as red blips on your pod's radar.

You can free the crew by shooting the bogey. Your shot propels the crew member in the same direction. Shoot from the right angle, and your shot will propel them back onto the deck of the ship.

If you shoot them in the wrong direction, they will float off into space to their doom.

Your only hope then is that another bogey will abduct them before they run out of air.

They can only land on the deck of the ship, not on the machinery and piping.

When a crew member lands on the deck, you get bonus points. The further they travel, the more points you get. One method to earn high scores is to let aliens carry your crew members far from the ship before freeing them. But leaving it too long is risky -- it's harder to direct the astronaut back to the ship, the alien might merge with the human before you shoot it and mutate into a more dangerous form, the freed crew member might run out of air before reaching the ship, or another alien might abduct the freed crew member again while they are floating in space. And in the meantime, other aliens are attacking the crew members still on the ship.

You've got to walk a tightrope between risk and reward to earn top scores without the whole situation collapsing into chaos.

Version History

1.0 - first public release
1.2 - Fixed colours of cart image in splore browser
1.3 - Improved appearance of ship in response to player feedback

P#102381 2021-12-11 10:16 ( Edited 2021-12-22 22:28)

[ :: Read More :: ]

The export command and the -export command line option do not flatten #includes when exporting a .p8.png file. A cartridge exported from a .p8 program that uses #includes cannot be run.

P#102348 2021-12-11 00:19 ( Edited 2021-12-11 08:00)

[ :: Read More :: ]

On the Mac, when Pico 8 is running when the Mac hibernates, after I un-hibernate the Mac Pico-8 no longer plays sounds. I have to restart Pico 8 to get audio working again.

I'm using MacOS Catalina 10.15.7 and Pico 8 0.2.3

P#100980 2021-11-29 09:59

[ :: Read More :: ]

Does anyone have a code snippet that can turn a number into a decimal string, treating the bit pattern as a 32-bit unsigned integer instead of 16.16 bit fixed point?

P#77975 2020-06-12 08:59

[ :: Read More :: ]

Cart #pinchpoint-0 | 2020-05-11 | Code ▽ | Embed ▽ | No License

My entry for the TweetTweetJam 4 game jam -- a game that fits into two tweets. The code for this game is 559 characters.


  • Avoid the green meanie.
  • Shoot it to score points.
  • If you miss, the walls close in.


  • Move: arrow keys
  • Shoot: X while moving

What's the highest score you can reach?

P#76355 2020-05-11 08:06 ( Edited 2020-05-11 17:19)

[ :: Read More :: ]

Cart #vandermonde-9 | 2020-04-08 | Code ▽ | Embed ▽ | No License

Escape from Vandermonde by finding your way through the passages to the teleporter. Avoid the robots that patrol the passages or program them to help you.

There are 14 levels of exploring, puzzle solving and action, all intertwined on the one large map.

Gameplay is introduced within the game. You can choose any level to play at the title screen. However, to beat the game you have to play all the way through from level 1.

P#74276 2020-03-28 17:24 ( Edited 2020-04-08 14:48)

[ :: Read More :: ]

Cart #dredds_caracol-5 | 2020-04-06 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

A physics-based puzzle game with fifteen levels.

Guide the ball around obstacles, to the target.

On the title screen, use the arrow buttons to select a level and O or X button to start play. You can quit a level and return to the level select screen from the pause menu. Gameplay is explained by in-game instructions.

Scoring is like golf: the fewer shots required to hit the target the better. Best scores and times are persisted.

Levels can be played in any order. However, earlier levels introduce game elements used by later levels.

If you're interested in designing levels, let me know in the comments and I'll write up how to activate and use the level design mode.

P#72423 2020-01-29 16:37 ( Edited 2020-04-06 22:09)

[ :: Read More :: ]

Cart #holes-7 | 2019-09-18 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

A board game.

The goal is to trap the other player on a single square.

On each turn, the player can move their piece one square, causing a hole to appear beside their opponent, or jump their piece two squares (possibly over a hole), leaving a hole where their piece was.

There are different options for play:

  • two player, one controller (pass the controller back and forth between turns)
  • two player, two controllers (each player has their own controller)
  • one player, easy AI
  • one player, challenging AI

You can choose from a number of board layouts. If you download the cart is easy to add your own board layouts with the sprite editor.

In the menu, use the direction buttons to move between menu entries, and the X and O buttons to cycle through the options of menu entry, or perform a menu action.

In the game, use the direction buttons to move your piece, or hold down the X or O buttons and use the direction buttons to jump your piece. Use the pause menu if you want to abandon a game and return to the title menu.

Gameplay screen shots:

Drawing a board layout in the sprite editor:

P#66445 2019-08-07 21:27 ( Edited 2019-09-18 04:56)

[ :: Read More :: ]

I'm loving coroutines -- they make it so easy to write complex animations and user interactions. But without error stacktraces, debugging them is a nightmare. What's the plan around this? Can we expect a new version of Pico-8 with better error reporting from coroutines?

P#65592 2019-07-05 09:33 ( Edited 2019-07-05 09:34)

[ :: Read More :: ]

Cart #rocket_rivals-8 | 2020-04-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Rocket Rivals, a one-button multiplayer game of brinkmanship.

Each player has a single control button that controls their thrust. Players earn points by flying higher than the other players, but lose everything if they hit the laser beam top of the screen.

Each match lasts one minute.

You can choose active players and their characters on the title screen (at the moment only controller 1 navigates the menu).


P#65247 2019-06-17 23:08 ( Edited 2020-04-07 18:39)

[ :: Read More :: ]

Cart #colour_illusion-1 | 2019-06-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Each ball is drawn in the same colour (brown) but it appears red, green or blue depending on which colour stripes are drawn over it.

Inspired by an image shared on twitter. (See https://twitter.com/testingham/status/1139558284631789568)

I thought i'd see if pico-8 can create the illusion even with its limited palette. The answer is: yes it can! :-)

And unlike an image, in pico-8 you can read the source code to confirm the illusion acts as stated.

P#65215 2019-06-15 08:52 ( Edited 2019-06-17 07:05)

[ :: Read More :: ]

I’m trying to print text centred around a point.

At the moment my code offsets the x coordinate by half the width
of a string in pixels, calculated as (4* #s)-1.

This works fine for
alphanumeric text but is wrong when the text contains glyphs.

Is there a built in function to help achieve this?

Or do I need to examine every character when computing the pixel width of the text?

P#65194 2019-06-14 15:12 ( Edited 2019-06-14 15:12)

[ :: Read More :: ]

Cart #divisibubbles-1 | 2019-06-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Cart #divisibubbles-0 | 2019-06-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

An arcade/puzzle game that will challenge your reactions and your wits.

Tap the bubbles that contain a divisor of the number shown at the top-left corner of the screen. When you've tapped them all, the number will increase and more bubbles will appear.

But time is running out. A wrong tap will cost some time. A successful tap will gain some time. Can you get to 100?

This game uses Pico-8's mouse/touch input.

P#65064 2019-06-07 23:55 ( Edited 2019-06-14 12:45)