Chamber Escape
My latest Pico-8 game is now available to play! It's a single screen platformer with 24 levels to play through. It's quite short - you can beat it in under 5 minutes if you're good enough. Can you beat it in under 5 minutes?
Also available on itch.io:
https://niall-chandler.itch.io/chamber-escape
It'd be really intuitive and helpful if the select() function also detected a boolean value for the first argument, and returned the first arg if true and the second arg if not.
A lot of us write our own ternary function that does this anyway, because it can work around some gotchas with the cond and tval or fval structure, so this would obviate the need for it while extending the existing API in a very intuitive way.
e.g.
-- this works as you'd expect a C/C++/JS-style "cond? nil : that" ternary op to work this = select( cond, nil, that ) -- this doesn't, it returns 'that' regardless of 'cond' this = cond and nil or that |
Plus I think this would evaluate faster on the host.
Should probably also treat nil as false, btw, for maximal usefulness and congruence with Lua's concept of conditions.
Hi guys!
I am not sure if I am in the right place to ask this. Feel free to move the thread if convenient.
I just built a small handheld to play pico-8 games, but after using it on a plane I realize how convenient would it be to bulk download all cartridges, in order to "splore" them later while being off-line.
Is there a way to do this? I already tried to find an answer.
Thank you!
p.s.: This is the device
GRVRBBR
By: Superheavyduty
[superheavyduty.itch.io]
(MOUSE REQUIRED TO PLAY)
Context:
As a necromancer, your most valuable asset is a large collection of bones. Unfortunately you need to source these bones yourself, but the ghosts who owned them won't let you escape their final resting place alive!
Use your mage hand to send them to the next plane and return to the entrance of the tomb to claim your collection!
The tools at your disposal:
-
Mage Hand [Left click/hold]:
A powerful focus spell that can send spirits to the next plane of existence. - Lingering Platform [Right click]:
A friendly entity will form a platform to help you navigate the crypts.
Play Now:
I'm not 100% sure but I think I found a bug related to PAL and sprite fill patterns. The manual says
PAL() resets to system defaults (including transparency values and fill pattern) |
However, the following cart shows that PAL does not clear out the fill pattern applied to sprites.
Here's the code for that cart. Note that you have to uncomment fillp() in order to reset the fill pattern.
function _draw() cls() pal() --fillp() sspr(8,0,8,8,10,10,24,24) sspr(16,0,8,8,10,40,24,24) fillp(0b1111111111111111.01) sspr(8,0,8,8,70,10,24,24) sspr(16,0,8,8,70,40,24,24) end |
Please let me know if I'm misunderstanding something! It could be that this is expected behavior and I just misread the docs.
There's a strange issue happening when i try to edit the bottom two visible rows of the map using the new "fullscreen" map editor mode (shift+tab). Basically, the bottom two rows are uneditable; I assume pico8 is mistakenly trying to prevent me from editing the area underneath the red chrome that shows up in nonfullscreen mode
It seems to fix itself if you pan around in the normal map editor?
Hi! I wrote this little cheat code function and decided to share it here if anyone wants to put cheat codes on their games, here's how it works:
paste all code labeled as requiered onto your cart, this includes:
- chsys={}
- all code on the _update function
- the add_chsys function
then, to call a cheat code, write it down on a table like this:
konami_code={⬆️,⬆️,⬇️,⬇️,⬅️,➡️,⬅️,➡️}
and then call the add_chsys function once (if you call it on an update function/every frame you'll chug the system):
add_chsys(name_of_your_cheatcode_table,function_to_load_if_it_succeeds)
So for example if I wanted to make the game stop when the Konami code was detected then I'd put this on my _init function (or any function that only acts once):
Gumdrop
Gumdrop is a bright, colorful, and lo-fi match-3 tile swapping game. It features both a Time Attack and Endless mode. Create massive chain reactions and try to beat your High Score.
Controls
Use arrow keys to move cursor around board.
Use Z,N, or C to select gumdrop to swap.
Use arrow keys to move cursor to second gumdrop
Use Z,N, or C key to swap gumdrops
Use X,M, or V key to deselect gumdrop.
Gamepad is also supported.
Special Candies
Clears all gumdrops in same row when matched. Created when 4 tiles matched horizontally.
Clears all gumdrops in same column when matched. Created when 4 tiles matched vertically.
context
Earlier today, I learned that pressing ctrl+p while running a cart brings up a performance monitor (and something else I learned on accident: pressing ctrl+p in the commandline/text editor lets you use the tiny characters; this isn't documented in the pico-8 fandom wiki but is on pico-8's changelog in the manual.)
I booted up one of my carts and opened the performance monitor. (It runs at a smooth 60fps, it's not very complicated at all). For fun, I changed the cls(1) to print("\^c1"). To my great surprise, the performance monitor indicated that it did this ever so slightly quicker than cls(1). So I made a new cartridge (function _update60()for _=1,1000do print("\^c1") end) and it ran smoothly, never going over the virtual processor limit. I switched the print() to the respective cls() and it was almost 2 times more resource intensive, constantly over the virtual limit, and running at an extremely choppy ~1fps.
conclusion
I'm not sure how this would be useful unless you're calling cls() an awful lot of times, as it takes quite a few extra characters. Even with the minor improvement of using ? rather than print() is small, as you still need a newline on either side. If you really wanted to, you could just redefine cls() to simply be something like this:
"Hitting The Slopes"
280 characters
t=0n=0m=64z=128::_::if(n%9<1)then cls(1)n=1for i=0,z*2 do line(32,m,i-m,z,7)line(z,50,i-m,z,7)end end if(t<1)r=rnd(z)s=32-rnd(m)n+=1 for i=0,z do ?"$",i*6,z-i%4*i,3 for j=0,z do if(pget(i,j)>7)pset(i,j,6)end end x=r+s*sin(t/m)y=t+5if(pget(x,y)>1)pset(x,y,8) flip()t+=.5t%=z goto _ |
Jumpit-8
A small 3d platformer for PICO-8
This is just a small, simple project I have made in 2 days. It isn't much outside of the 3d engine, and even then, the 3d is pretty basic. I used the tutorial provided here to create the 3d engine, except I have adapted it for use in PICO-8. This engine mostly works, except for camera rotation.
Play the game using your arrow keys, and guide the blue cube to the green tile for each level. Avoid falling off as well as the red tiles. You may encounter several other types of tiles which will help you reach the goal for each level. If you do not know how to complete a level, the level's name will usually give you a hint.