Hello! I knocked this up in a few hours and I hope it's useful to someone. It draws a bezier curve based on the positions of four points: a start and end point, and two bezier handles.
The user can move any of the four points around by using Z to cycle between them and the arrow keys to move.
I have wrapped up the bezier into a single object so hopefully it should be easy to re-purpose.
Background
This is my first PICO-8 game, I decided to make a version of the game called 'Achtung die kurve', or 'Curve fever'. Pas op, een curve means 'watch out, a curve'. This is a two-player version. The collision detection is based on detecting previously coloured pixels right in front of your curve. It has a bug where under some angle the detection fails sometimes (rarely). The game keeps track of your scores.

Controls
Blue player: 'z' and 'x'
Red player: left and right arrow keys
I currently couldn't test with a controller yet, but you are free to add support.
I hope someone will have fun with this.

This s a nifty, but small code snippit I made. Basically it takes the persistent cart data and forces it into your work-ram (starting from the range you specify in the sms_ram_start variable), so 256 values of your work ram will be used, but this is nice. You can save the specified ram storage to persistent data with the other function.
★smsave() - saves memory to cart persistent data
★smload() - loads persistent data into work ram
--smart save manager --save work-ram to pers --and load pers to --work ram ★sms_ram_start=0x4300 function ★smsave() for i=0,255 do local _rs=★sms_ram_start+i if _rs>0x5dff then break end poke(0x5e00+i, peek(_rs)) end end function ★smload() for i=0,255 do local _rs=★sms_ram_start+i poke(_rs, peek(0x5e00+i)) end end |
Why would you need this? idk, but I was bored and this was fun to make for what ever reason.

- call _init_debugger() in the init function.
-
call _draw_debugger() in the _draw function.
- to print a message, call the _debugger_print() method and as a parameter pass in a variable you want to print.
you can also print warnings with _debugger_warning() and errors with _debugger_error()
EX:
...
_debugger_print("Hello World")
_debugger_warning("Hello World")
_debugger_error("Hello World")
...



@krajzeg and I released Vol. 1 EXACTLY TWO years ago! Vol. 2 has been in the works for a while, so we're excited to finally have this finished.
If you're not familiar with Pico-8 Tunes, the idea was to fill a Pico-8 cart with music that devs can use in their games. Jakub coded some amazing doodles and animations to accompany the music and create a demoscene-like experience. We're also very happy that @castpixel contributed her amazing artwork to Vol. 2. Thanks Christina!

If you're making a Pico-8 game, please feel free to download this cart, use the music in your own games, and check out some of Jakub's wizardry. You can also download all the music from










Based on one of the most controversial games for the NES (warning: NSFW), Jayson Lowis Harwin (i.e. me) brings you: Magic Bubble!
Description
Playing "Magic Bubble" is easy. Bubbles of many colors come floating upward. You must fit the Bubble Clusters together so four or more Bubbles of the same color touch one another. When four or more of the same colored bubbles press together, the pressure inside the Bubbles increases causing them to pop.
Keep the bubbles bursting since in every space a Bubble gets stuck there is one less place to put the next Bubble Cluster, and they just keep coming. If you can't pop the Bubbles fast enough, the cave fulls up, and the game will end.







PicoVJ
A functional VJ framework for Pico8! It's very scoped but still should be usable in a real gig with a single controller (6 buttons).
Instructions
Beat manager
LEFT - A single tap resets BPM / Beat num. A next tap in the 4th next beat, will store the calculated BPM.
X + UP / DOWN - adjust BPM speed.
X + LEFT / RIGHT - fine tune BPM sync.
Scene manager
Z + UP - set a random scene.
Z + LEFT / RIGHT - previous / next scene (cycled).
FX manager
UP / DOWN - increase / decrease FXRAGE from 0 to 1.
RIGHT - cycle FXFLASH value from 0 to 5.
FXRAGE is the hype value of the application, and how it behaves depends on each scene implementation. A scene at FXRAGE = 0 would be simple, slow, but the same scene at FXRAGE = 1 would be much faster and frenzy.

This is just a small school project for the science class in my school, nothing too big.
If you find any of the code as bad you can feel free to comment on it, always happy for some constructive criticism.
Gameplaywise i recomemend holding down Z for maximized firepower and always being ready to move given the random enemy spawn positions.
Story: Its simple, the damn fascists have taken over all of Italys airspace. You, the one and only Porco-Rosso needs to save it.






0.1.11g, Linux x64. This will crash P8:
x={} function x:__gc() end while true do y={} setmetatable(y, x) end |
If I change the loop to _update(), it doesn't happen.
However, there's another issue: it seems runtime errors aren't caught inside __gc(). If you put var="abc"+5 in there, it'll keep running until it crashes. If I do that, it will crash even using _update().