Do you want to play PICO-8 games online with others? Yes? Then Martian Dice might be the game for you.
It is an online multi-player dice game. It lets you:
- Play with your friends
- Play with strangers or
- Play against a bot
This is a reproduction of the physical dice game Martian Dice.
Nothing really. If you have any last-minute requests or find any bugs, please let me know.
This PICO-8 game really evolved by accident. After playing Martian Dice with friends I wondered what the optimal play was and how much points you can expect to score each turn. So I built a bot in Python that maximises the expected score each turn. Next I figured it would be a good vehicle for me to try out WebSockets. As I also wanted some experience with React, I first built a React client. Then I started dabbling with sprites for the die faces and realized it's a good fit for PICO-8. And here we are...
Version 0.9.3 - 16 May 2021
- Allow player to resign game
- Let player win immediately after all other players have left the game
- Let other client take on host role when host does not trigger bot moves
- Suppress play reminders when playing against a bot
- Recover from network problems by handling WebSocket disconnects
- Fix: Also show winning bot avatar when observer joined
- Fix: Stop die roll sounds when exiting room
- Fix: Room label was not always showing correctly
- Fix: Occasional wrong room join message was shown
- Fix: Rejoin room with ghost client fails
- Fix: Ranking fails when number of clients is one
Version 0.9.2 - 9 May 2021
- Improved color palette (by using colours from the secret palette)
- Various minor UI improvements
- Fancier celebration animation
Version 0.9.1 - 2 May 2021
- Handle unresponsive/slow players. Options: Wait/Skip/Remove
- Track results of players in room and show ranking
- Fancier text editing and chat selection
- Add dialogs
- Improve stability
Version 0.9 - 27 Apr 2021
- Initial release
For those interested, all source code is available on github. This includes:
- The PICO-8 game
- The server-side Python code, which runs as a lambda service on AWS
- The AWS CDK script for deploying the service stack
- The earlier HTML client built using ReactJS
On Firefox and Safari, the PICO-8 screen can go beyond the bottom boundary of the div that encloses it. When this happens, the bottom part of the PICO-8 screen can be masked/covered by elements below the player. On Chrome it always renders okay.
This screenshot shows what goes wrong:
This is the HTML template as exported by PICO-8 (0.2.0e). I only changed it to add some text below the player, and changed the background color of the "p8_frame_0" div to red.
The page is accessible here for anyone who wants to quickly try and reproduce it. Whether or not the problem occurs depends on the size of the view port. You may have to resize your browser window.
I'd just like to share that I implemented a tracker for the Gamebuino inspired on PICO-8's tracker. It is a bit more primitive, as the Gamebuino console only supports 10-bit audio. Furthermore to keep CPU load acceptable, some pragmatic choices had to be made in generating the audio samples. For example, all calculations are integer-based and only 8-bit multiplications are used. Custom instruments are also not fully supported. In particular, you cannot layer effects, e.g. apply a Vibrato effect on top of a Slide, or vice versa.
However, my tracker supports all instruments and effects available in PICO-8. With that, it is able to reproduce most PICO-8 songs. At least, I successfully managed to render all the songs that I tried to port.
In particular, I want to thank the following PICO-8 users for sharing their carts/music under a Creative Commons license:
- @Domarius: Alex Kidd
- @Gruber: For his music in The Lair and Winter Golf
- @jobe: Rock for Metal and Techno Utopian Edict
- @Krystman: porklike and Mai-Chan's Sweet Buns
- @lucatron: Neon
- @pahammond: Bubble Bobble
Your music has been used to test the tracker and to show off its capabilities in a Music Demo:
For those interested, the source of my tracker can be found on github
Bumble Bots Re-Pair is a difficult action puzzle game. In the game you need to re-unite (re-pair) bots by fixing the paths they traverse. Can you complete all ten levels?
The idea for this game was created during this year's Global Game Jam, where the theme was "repair". It's a spin-off of the Robo Re-Pair game that we created during the jam.
The tiles that you are offered are randomly selected. However, you will always be offered tiles that fit somewhere on the grid. Furthermore, the tiles on offer will be unique. The order in which you place tiles and where you place them therefore matters. Exploit this to increase the odds that you get favourable tiles.
It helps to hedge your bets. Have a fallback plan in case you do not get tiles that match your perfect route.
At the start you may want to keep many open ends, so you can place "undesired" tiles somewhere. Towards the end you may want to reduce the number of open ends, to increase the probability that you are offered the tiles that you still need to complete your route.
23 May 2020 - Version 1.0
- Added two new levels
- Added hi-score tracking
- Fancier title screen
- Fancier Help screen
- Penalty points for open ends
- Enable toggling music on/off
- More juicy animations
18 Feb 2020
- Added two new levels, both with two pairs of bots
- Score remaining lives at end of game
- Improved title screen
- Improved pair animation
16 Feb 2020
- Added three new levels
- On completing a level gain a life
- Added tiny bots to title screen
No points for originality here, but it's a fun programming exercise. I plan to port this to my Gamebuino device next.
- Solved celebration
- "Reset" menu option
- "New puzzle" menu option
- Fancier graphics
The basic functionality is all there:
- Generation of random puzzles
- Ability to solve it
- Final touches
- "Hint" menu option
- Difficulty indication
Less is more!
Here's a low resolution version of my Bumble Bots game. Fewer pixels, but a better game.
When porting the game to Gamebuino I had to reduce the resolution. Doing so forced me to remove some screen clutter as every pixel counts at 80x64. Also, I had to zoom into the levels. On the one hand, this made the game play slightly harder, as you cannot always see all enemies. On the other hand, it made the game play more immersive. In the original game, more than half of screen was black pixels. I actually liked the game better at the lower resolution, so decided to revamp the original PICO-8 version. This is the result.
- Sixteen levels, with a lot of variation!
- Isometric 3D views
- Wave animations
- Pick-ups, boxes, teleports and gaps
- Tracking of level progress, hi-score and level hi-scores
- Level selection menu
- Four musical tracks (by my brother)
- Supports touch controls (see Bumble Bots for touch devices)
Changes in v2.1
- Added support for custom touch controls
- On game completion score remaining lives
- Simplified title screen
- Bug fix: Restored last level (v2.0 included a debugging variant)
Changes in v2.0
- Changed resolution to 64x64
- Smoother bot movement
- More immersive gaming experience:
- Zoomed-in-view with camera following player
- Replaced message boxes with fancier text
- Added more sound effects
- New title screen
- New end screen
Recently I have been busy porting my PICO-8 Bumble Bots game to the Gamebuino game console. Gamebuino resembles PICO-8 in that it is also a console for making and playing retro-games with the emphasis on making them. Unlike PICO-8, the Gamebuino is a physical console based on an Arduino board. Here is a picture of a Gamebuino featuring my Bumble Bots game. (Btw, I "shopped" the picture to increase the brightness of the screen, but it's not a mock-up. This is a picture of the game actually running).
Porting my game has been a fun project. So far, I have ported all the game-play elements, and re-created nine of the sixteen levels. The coding is effectively done. The main work pending is porting the last seven levels. I am sharing my experiences here, as I hope that some of you find them interesting.
Gamebuino's resource limitations follow from its physical implementation and are mostly more tight than PICO-8's artificial limitations. The screen resolution of the Gamebuino is 80x64. Although it also supports 160x128, this resolution is not recommended. The details would be too small and drawing to the screen would require more CPU. CPU speed is anyhow a limiting factor. Just drawing an empty screen of 80x64 pixels at 25 FPS loads the CPU for 50%. On the PICO-8 I had no problem achieving 30 FPS, but realizing 25 FPS on the Gamebuino (with a more limited resolution) required a few optimizations. Also, unlike PICO-8, RAM-memory is scarce and you cannot really dynamically allocate memory. You are effectively restricted to global variables and the stack. This requires you to be more conscious of memory usage while you develop. Similar to the PICO-8, there are also limits to the size of the program, but Gamebuino games can be a bit larger. My game is near PICO-8's token limit, but will be less than 50% of the maximum size on the Gamebuino.
I found it very useful to first have created the game on the PICO-8 and then port it to the Gamebuino. For prototyping the PICO-8 is a much more friendly environment. PICO-8's code-run-debug cycle is faster. Lua is also a friendlier language than C/C++ which you need for the Gamebuino. A silly mistake in the C/C++ code can easily lead to a crash or (undetected) memory corruption. Also PICO-8's built-in sprite, sound and music editors make it easy and quick to create and adapt graphics and sounds. Creating images and sounds on the Gamebuino is more cumbersome. Fortunately, it was quite easy to port PICO-8 images to the Gamebuino. I was also able to port the sound effects I created, although this required a bit more work as Gamebuino's sound effect support is a bit more primitive.
In short, I found PICO-8 and Gamebuino to nicely complement each other. PICO-8 is an excellent environment to quickly prototype and evolve a game idea, and to get it out on the web. However, after that, it's great to port it to a physical device that you can hold in your hands and hand-over to friends to let them try it out.
See my post on the Gamebuino site for more details about the porting process.
Bumble Bots is a difficult puzzle action game. It features sixteen levels, ranging from pure action to challenging puzzles and anything in between.
The game is self-explanatory. You will encounter new elements and learn new tricks as you go along.
Be warned, this is a tough game. I expect only few players to reach the end. Are you one of them?
- Complete all 16 levels
- Beat the hi-score
- Beat the virtual hi-score
- Complete all 16 levels in one go
Did you reach the end? If so, feel free to share a screenshot of the end screen to proof it.
After wetting my toes in the Pico-8 pool with my Tile Swap game, I figured I should try a bigger game. It's still a WIP, but playable already, so I thought I'd share it.
The game is called Bumble Bots. The idea of the game is "stolen" from the Rolmops game developed by the team that I was part of in this year's Global Game Jam. The Jam's theme was "waves".
v0.1: The game is still basic. Each level has an identical, tiny map. I am planning to add much larger levels, with other building blocks and enemies. Nevertheless, the game is quite fun to play already. I especially like the emergent dynamics of the game that follow from the waves in combination with the enemy AI. Even though the level looks fully symmetrical, as you start to play, you will notice that one of the four spheres is much harder to pick up than the others. Level two with only two enemies is already tricky. I have not managed to finish the levels with three or more enemies. Are you able to?
- Support large tile height differences: improved rendering and player/enemy move logic accordingly
- Define levels from maps
- Created various different tiles including: bridge, pillar and tower
- Added level 2, "Pillar Maze" (now: "Barsaman")
- Added level 3, "Bridge and Channel" (now: "Gutter and Stage")
- Made level start, player death, and level end fancier
- Let pick-ups block enemy movement
- Added teleports
- Added Level 4, "Telerium"
- Added score and high score
- Added name for each level
- Improved title screen and label
- Added support for large maps, with auto-scroll
- Bug fix: Fixed possible null-pointer exception when falling of the map
- Minor improvements to tile rendering
- Added Level 5, "The Race"
- Added movable boxes
- Added fillable gaps
- Added Level 6, "Mind the Gap"
- Added (fancy) level menu so you can start at any level you have reached
- Storing high score and level reached in cart data
- Added three new levels, each revolving around a new game mechanic:
- Added Level 7, "Beam me Up"
- Added Level 8, "Tea Party"
- Added Level 9, "Besieged"
- Added fall interactions: a box or enemy is now destroyed if something falls on top of it
- Improved player control by adding instant retreat
- Improved "Drop in gap" animation
- Improved "Caught" interaction. Enemy needs to be at similar height as player
- Improved Enemy AI to avoid it getting stuck
- Improved level resume. Allow restart at new levels after upgrade
- Added hard reset for levels where continuing does not make sense
- Fixed isoline-based drawing code
- Added new box type and associated level-ending condition
- Added three new levels, with some fancy new tiles:
- Added Level "Down the River"
- Added Level "Boxing Day"
- Added Level "IC Trouble"
- Pimped message box
- Added Auto-Destruct menu item
I'd like to share my first PICO-8 project. It's a puzzle game of my own design. You need to restore the puzzle by swapping pairs of tiles. The difficulty is that not all tiles can be swapped. It's up to you to discover which tiles can be swapped. Figuring this out is only the first step. The real challenge has then only just begun!
v0.2 After solving the puzzle (within a reasonable amount of moves) you now get a solve key, which grants you entry into the game's Hall of Fame. Capture it. You can reply to this thread with the screen capture. The keys are unique, so don't "re-use" the key of someone else. Furthermore, you really need to solve the puzzle. You cannot cheat by inspecting the source code either.
v0.1 This cart was hacked together in a weekend. It's already playable and quite polished at places, but is not yet finished.
Still on my TO DO list:
- A celebration tune after solving the puzzle. This will be tough, given that my musical skills are quite limited. I may need to call in the help of my brother here.