Hi all! Hobby programmer trying out PICO-8 for the first time. Get ready for some hot* lithosphere-on-aesthenosphere action!
I decided to port an old project of mine, a cellular-automaton-based tectonics simulator. It's based on the algorithm used in the 1990 Maxis software toy SimEarth, but has slowly departed from that.
Press Z to toggle map/globe. Press X to start/stop spinning. Left and right change map views to see what the magma is up to underneath, and down pauses the simulation.
Not sure if I'll do any more polishing on this or not, but I'm happy to implement optimizations if there are any that seem obvious to the initiated. I'm especially annoyed by the laggy controls -- any tips on how I should best fetch button state in a slow-running program like this?
![]() |
~ ~ ~ |
![]() |
~ ~ ~ |
![]() |
Royal Pain is a platformer game where you rescue the Princess and then need to escort her out of the castle using her abilities to help you get past enemies. For example, press X to tell the princess to do a hair whip attack when she can see a guard.
Our goal in this game is to make interesting NPC interactions and we will be adding more princesses with more abilities in future updates. Enjoy our WIP release of Royal Pain on Pico-8! Feedback is welcome.
Demo version 07
Friendly fire, more guards, and various bug fixes.
Also check out our latest princess rescue, Royal Pain: Glacia. Play it here https://www.lexaloffle.com/bbs/?tid=43461
Check out our Discord channel for more detailed updates at https://discord.com/invite/KMYjWz5ThH
-Rob and Ryan
Kraken Games



I can't see a way to disable the new "\#n" background-fill mode once it's been enabled. I've tried "0" for color 0, "G" for color 16, and "W" for color 32, but they just set the BG to black, and all other "0-Z" just repeat the palette. I've tried supplying a "-" for the color instead, I've tried repeating the "\#" code or just "#", I've tried various other symbols and the puny letters, and anything not in "0..Z" just sets it to black.
Is this a missing feature or is there supposed to be a way to do it? The manual says nothing of turning it off. Right now I have to start another print() to get back to no-BG mode and that seems... unintended?
I feel like it ought to be "\#-", based on the convention with the "\^" commands. Alternatively, "G" (or anything through "V") would technically make sense if you just consider bit #4 of the color to be a "transparency" bit.


Thank you
I really mean it <3
I wanted to thank everyone that have played and commented on my games over the years!
It means a lot to me and I am looking forward to creating even more content for you in the future!
And thank you Joseph White for creating PICO-8, such a lovely tool!
Stay awesome!
/ Sebastian Lind Twitter



I was recently informed of a new bug in my old game, sybil's tail. after doing some research into it, I discovered the cause. I had a global variable set up that could be set at any time to cause the screen to "flash" once, on the next frame. presumably to conserve tokens, I wrote it like this:
flash=flash and rectfill(0,24,128,104,7)
this line calls rectfill if flash is true, and assigns the result of rectfill to flash. as long as rectfill returns a falsy value, we're good.
now. I understand this line will send me to coding hell. but it seems, as of 0.2.2c, rectfill and rect return 0, which is not a falsy value. if this is an intentional feature, I will own up to my sins, patch the game, and move on-- I'm not going to demand the API honor such a silly corner case. but given that circ and circfill still return nil, I suspect it is in fact a bug
if I could get a confirmation whether rectfill returning 0 is intended behavior, that'd be much appreciated. I may still patch the game, but if the problem isn't going to go away, I'd probably opt to do it sooner rather than later



Made for a one-day hackathon with the goal of "use a language/tool you've never tried before"!
Hit a lot of hurdles and will likely tweak in the future, but learned a lot about Voxatron and had FUN!
- It's a "Pacman" clone
- Power pellets EXPLODE to kill ghosts
- Get all pellets to 'win' (and restart)
CONTROLS
- W/A/S/D to turn Hacman
- O and P to tilt the camera up and down
- 'X' to restart (when it asks for 'fire')



Create and manage your factory to build a space elevator!
Unsatisfactory is a retro demake of the game Satisfactory. Feel the satisfaction of creating and managing a large automated factory on Pico-8!
- Collect resources.
- Build a simple power grid.
- Construct an efficient system of conveyor belts connecting miners, smelters and more.
- Complete goals to build an elevator to space!
- About an hour of playtime, depending on how organized you are :)

The game includes tutorials/goals to guide you along, but here are some tips:
- Controls
- X - Menu/Select



I've always loved the "top down RPG" genre. I wanted to solve the problems that building these kinds of games face for myself by implementing a classic game. I learned a lot about the limits of the map and spritesheets from building this and already have a multi-cart solution that includes the main menu and then leads into the game.



I am making a puzzle game on a 6x6 grid at the moment. Every cell has two values: 1) The colour/type of cell 2) the variable of that cell
Thus every cell is two hexadecimal digits. I've made a level editer and all but I've run into a problem with level loading. Shortened to the problematic code, here is the problem:
levels={ "0000000000000000000000000000000000000000000000000011c0c07000000000000000", "0000000000000000000000000000000000000000000000000011c0c07000000000000000" } function loadlevel(n) local ltol=levels[n] powerlevel=0 for i=1,#ltol/2do local s1=1+(i-1)*2 local s2=s1+1 level[i]=sub(ltol,s1,s2) end end function _init() nl=2 go=false loadlevel(1) go=true end function _update() local nogo=false for i=1, 16do if level[i]!="00"then nogo=true end end if go and not nogo then loadlevel(nl) nl+=1 end end |


Hey everyone! (I don't know if this is the correct place to post this, in that case let me know and I'll change it).
I'm just starting coding on PICO-8 and checking the PICO-8 limitations popped out a question that the specs couldn't answer; Besides the cartridge limitations(that could be defined as ROM limitations of the PICO-8 machine(? ) is there a limitation about how much memory does PICO use when running a cart, i.e. RAM Memory? I mean, suppose that i have a cart that creates a lot of objects/tables, is there a restriction to the amount of objects that the RAM memory of PICO can use, or it can use the same amount memory of the host machine?
Cheers!


Before the most recent update, you could print anything below chr(32) and get an actual glyph in the output, aside from the obvious exceptions like \n and \t. For characters below chr(16) this is no longer possible, aside from chr(5), which I suspect is an oversight. In fact, that oversight is the "bug" that brought me here.
The thing is, this is a waste of 16 glyphs in the character set, and potentially up to 32 in the future if you add more control codes.
Can we get some kind of "raw" printing mode, where control character behaviors are completely ignored and their glyphs are simply printed?
Maybe turn the two oem/custom font selector characters into a single oem/custom toggle to free up chr(15), and use that as a raw-mode toggle, as in this pseudocode, where raw mode allows everything to be printed except the toggle itself, unless it is repeated:
fn print(s, ...) raw = false just_toggled_raw = false for each char c in s [ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=89089#p) |



It's a joke.
KUMAMINE(https://twitter.com/kumamine) created the original character Denwa Neko (電話猫)/Shigoto Neko (仕事猫).
It's been a couple years, and the mountain has changed
Madeline wants to climb the mountain once again, but the mountain is different now...
This is a hardcore mod I made in a couple of days for Celeste Classic
Every level is similar to the way it was before, just harder
There are 30 strawberries, one for each level, and though some may seem impossible at times (cough cough 500m cough cough) I have successfully obtained all of them, so I know they're possible
DISCLAIMER: MULTIPLE LEVELS AND STRAWBERRIES IN THIS MOD REQUIRE SPIKE CLIPPING, WHICH IS A GLITCH PERFORMED BY DASHING IN THE DIRECTION OF SPIKES WHEN YOU ARE CLOSE TO THEM
Play the original Celeste by Matt Thorson and Noel Berry








.jpeg)

Currently (v0.2.2c), manual states that:
pal c0 c1 [p] ... pal() resets to system defaults (including transparency values and fill pattern) |
This appears to work for draw palette (p=0) and display palette (p=1) but not secondary palette (p=2).
We can still keep track of previous state from each change and restore them manually.
But there is no quick way reset to system defaults.
Test cart:
As a side note, the manual entry also states:
pal() swaps colour c0 for c1 for one of two palette re-mappings (p defaults to 0): |
Shouldn't it be 'three palette re-mappings'?
