Log In  

Hey All -- PICO-8 0.1.8 builds are now live on Lexaloffle and Humble! Note that there was no 0.1.7 release for Desktop; there were in-development versions of 0.1.7 released early for web and Pocket C.H.I.P. to resolve pressing issues, so I'm calling this 0.1.8 to keep version numbers in sync across platforms. New stuff:

60 FPS support

This breaks the 'every cart runs the same on all PICO-8s' rule of PICO-8's design philosophy a little bit, but I think it's worth it! On all of the desktop host platforms, it is now possible to make cartridges that display and update at 60 frames per second instead of 30. You don't get any more CPU though, so that means half the usual CPU allowance per frame. From the manual:

:: Running PICO-8 at 60fps

If _update60() is defined instead of _update(), PICO-8 will run in 60fps mode:
    - both _update60() and _draw() are called at 60fps
    - half the PICO-8 CPU is available per frame before dropping down to 30fps

** please note that not all PICO-8s support 60fps. On machines that do not support it, _update60() will instead be called twice per frame and _draw() at 30fps. You can check the behaviour of your program running at 30fps by adding the following snippet to the bottom of your code:

    u60=_update60 _update60=nil function _update() u60() u60() end

Button Glyphs

The two action buttons on the PICO-8 controller are called O (BTN(4)) and X (BTN(5)). To make it easier to print instruction in-game explaining the controls, you can now insert glyph characters directly into strings in your code with Shift - U D L R O X.

Long GIFs

Adjust the maximum GIF length in config.txt or by running PICO-8 with -gif_len n switch, where n is the number of seconds to record for (maximum: 120). The GIF output is not optimized, so you might want to run it through an optimizer to get smaller file sizes.

Custom Menu Items

It is now also possible to add your own items to the pause menu to trigger things like 'RESTART PUZZLE' or 'EXIT TO OVERWORLD'. Here's an example program:


function _draw()

function changecol()
  col = (col+1)

menuitem(1, "change colour", changecol)

The first parameter is the position (1-5) in the menu to insert the item, the second is the item's label, and the 3rd is a function to be called when the item is selected. I opted to keep this simple and quite rigid, so there's no way to have extra stuff going on in the background while the cart is paused, or to re-appropriate the pause button as an in-game button.

Music Exporter

To record a .wav of a PICO-8 tune, first navigate to the pattern you'd like to start from in the music editing mode, then press escape to enter the console and type:


If the song is looping, it will export around 4:30 that you can then manually trim in a [sound editing program](http s://sourceforge.net/projects/audacity/).

Pre-installed Games

There are now 5 BBS games that ship included with PICO-8, so that it's easy to get up and playing something more than the demo carts, even when internet access is not immediately available. To install them, use INSTALL_GAMES -- they will be accessible from your favourites list in SPLORE. The games are Celeste, Frog Home, Tower of Archeos, Hug Arena, and Dusk Child.

Linux Builds

I've included both statically and dynamically linked versions of the executables for i386, amd64 and Raspberry Pi. The RasPi build still depends on bcm, so it is tricky (impossible?) to get it up and running on Chromebooks.
I plan to look at better Chromebook support at some point, but it will probably have to be during beta. Pocket C.H.I.P. owners, and later on regular C.H.I.P. owners can expect updates too, of course --- but we are still sorting out details and it will take a while. o( )o

Next up, 0.1.9 will be mostly ongoing bugfixes, and improvements to the web player (optimization, fold-out touch controls for mobile, and controller instructions).

Full Changelog:


        Added: 60fps support
        Added: Music exporter
        Added: Custom GIF length (maximum 120 seconds)
        Added: -,+ to navigate sprite tabs, sfx, music patterns
        Added: sfx editor: navigate with home, end, pageup/down, mousewheel
        Added: <, > to modify sfx speed, or click and drag
        Added: Middle mouse button to pan around spritesheet / map
        Added: Shortcut command for splore: S
        Added: Pre-installed selection of BBS cart (use INSTALL_GAMES)
        Added: Warning when saving .p8.png with no label 
        Added: (OSX) logging to ~/Library/Logs (viewable with Console.app)
        Changed: Can not CTRL-S save over a loaded bbs cart
        Changed: Only .p8 files listed by dir() and by splore
        Changed: Command history increased to 256
        Changed: exit() / shutdown() have no effect while running cart
        Fixed: Memory useage (stat(0)) inconsistent across host platforms
        Fixed: Spinny disks shows when reloading current cart with load()
        Fixed: GIF saver does not respect 64x64 / mirrored modes
        Fixed: Miscellaneous multi-line comments / strings issues
        Fixed: Empty map cels cost cpu in mapdraw()
        Fixed: mapdraw() slowdown when drawing bottom half of map
        Fixed: preprocess changes semantics when += and : operators on same line
        Fixed: Identifiers starting with underscore counted as extra token
        Fixed: Saving .png exceeding compressed code limit fails silently
        Fixed: Right-clicking a sprite does not set the currently edited sprite
        Fixed: (Windows) extra space added to pasted lines
        Fixed: spr() expensive when drawn with low negative coordinates
        Fixed: pipe character identical to colon character
        Fixed: (Raspberry Pi) shift key appends a character when entering text
        Fixed: Editor mode buttons are still clickable during cart runtime
        Fixed: When loading a .p8.png file, label is reset and needs to be re-captured
        Fixed: export() does not report failure
        Fixed: mset()'d changes in shared memory not readable via peek() / sget()
        Fixed: cstore() saving edited code
        Fixed: audio pop between patterns during music playback


        Added: menuitem()
        Added: button glyphs in code (shift-L, R, U, D, X, O)
        Added: Customisable data directory (e.g. pico8 -home mydata)
        Added: Web gpio pins: read and write pico8_gpio[] in javscript 
        Fixed: SPLORE search doesn't reset
        Fixed: Splore skipping 33rd cart listing after loading more items
        Fixed: Crash when selecting a local binary file in splore
        Fixed: Semicolon can't be used as a list or statement separator 
        Fixed: Exported html can not cstore self

P#23669 2016-06-26 10:41 ( Edited 2016-08-01 19:29)

Any reason why update60 can't work on web? I've seen plenty HTML5 games running at 60fps... Same with games for RaspPi and other ARM-based systems.

P#23673 2016-06-26 13:03 ( Edited 2016-06-26 17:03)

Quick and dumb question: is 1.0 still the number we should try and stay below when using stat(1) to check cpu usage in 60 fps mode, or is it 0.5?

Also, is there any way to get flip() to run at 60 fps?

P#23678 2016-06-26 13:45 ( Edited 2016-06-26 17:45)

Thank you so much for this update Zep, it's awesome!!! All the new additions are amazing!! (and hell yeah for live-coding gifs!)

P#23682 2016-06-26 14:30 ( Edited 2016-06-26 18:30)

"I opted to keep this simple and quite rigid, so there's no way to have extra stuff going on in the background while the cart is paused, or to re-appropriate the pause button as an in-game button."
Funny you mention that. https://www.lexaloffle.com/bbs/?tid=3703
More particularly: https://www.lexaloffle.com/bbs/?pid=23648#p23648
poke(0x5f30,1) seems to disable the pause menu, can anyone confirm?
Here's an example :

function _update()
  if(btnp() == 64)then
    print("custom menu")

P#23686 2016-06-26 15:51 ( Edited 2016-06-26 19:51)

What happens if you define both _update60() and _update()?
I assume that it'd get locked into 60 fps mode

P#23697 2016-06-26 18:06 ( Edited 2016-06-26 22:06)

So wait...did someone say the 60fps won't work in the web version? So if I make a game using 60fps, it will run fine on the desktop client but not the web version? Hmmm...if so, that's a bummer...

Very cool to have the menu option though, will certainly be using that

P#23699 2016-06-26 18:30 ( Edited 2016-06-26 22:30)

I can feel the love you put on this little computer, thanks zep.

P#23719 2016-06-26 21:14 ( Edited 2016-06-27 01:14)

Wonderful update <3

@morningtoast seems like the html export currently ignores the _update60 altogether. makes sharing 60fps carts a bit harder hey

update: eh no works exactly like Zep described, it just renders my neat 60fps trickery useless :)

P#23729 2016-06-27 01:47 ( Edited 2016-06-27 05:50)

Hi there!!

_update60() works fine on Win10 but it doesn't work at all in Ubuntu64bits

hope this helps :)

P#23765 2016-06-27 18:22 ( Edited 2016-06-27 22:22)

Again, I can't see a reason why _update60 is desktop only, where there are many HTML5 games that run on 60hz flawlessly. Heck, some people wrote emulators in HTML5 for systems that naturally ran in 60hz refresh rate.

If there are no technical problems forbidding implementation of a feature without breaking "every pico behaves the same" concept, it should be done so, and in this case there isn't.

P#24471 2016-07-03 17:50 ( Edited 2016-07-03 21:51)

@zep as seen (loved & retweeted) on twitter, you are going to add a "JAM" entry in splore and here on the forum, which is really cool!

I'm not speaking for the next release, but do you have any plan to allow cart submission directly from Pico8? That would be really nice to have such a feature! Especially for JAM entries :D

P#24573 2016-07-04 17:17 ( Edited 2016-07-04 21:17)

Hello everybody
i had a look a little everywhere on the bbs, wiki etc but i have no clue how to start/install Pico-8 on raspberry pi :/
i just bough voxatron and wanted to give pico-8 a try on rpi.
if someone could hook me up i would be extremelly grateful :)
thanks a lot

P#24708 2016-07-06 09:14 ( Edited 2016-07-06 13:14)
P#24709 2016-07-06 11:15 ( Edited 2016-07-06 15:15)

thanks Matt,
i checked that page earlier and had a look at the sdl2 tutorial also. i think i will wait for my pocket c.h.i.p. to get in and until then just use pico on windows.
im just grafic design, not very skilled coder, thats already too much for me :)

P#24729 2016-07-06 14:03 ( Edited 2016-07-06 18:03)

Understood. I'll try to get a Pi soon to try installing it myself.

P#24744 2016-07-06 18:55 ( Edited 2016-07-06 22:55)


"Splore" needs a CLS upon escaping. I got confused and thought it was still running. OTT, pretty decent update! :D
EDIT: It's not just Splore. It's anything running when you hit Escape to back out of it, into the console screen.

Can _update60() and _update() both be used simultaneously? O.o

I hope the PocketCHIP version supports 60 FPS, but why wouldn't it?

P#24766 2016-07-06 22:52 ( Edited 2016-07-07 03:55)

EXCELLENT! Thank you so much for implementing this in the perfect way! This makes all the difference in the world on quite a few games!

P#25013 2016-07-09 21:35 ( Edited 2016-07-10 01:35)


The third (highest) octave of keyboard key inputs (I9O0P-[, IIRC?) don't seem to function in the SFX editor anymore. Am I missing something?

Also... couldn't you export music to .MID format? O.o

P#25347 2016-07-15 13:24 ( Edited 2016-07-15 17:26)

@zep, thanks for the update.

I just found out that you added logging to ~/Library/Logs on OSX. Unfortunately, I failed to find any logs in the directory, both using Console.app and the good old "ls" command.

Is there a new command to log (instead of printh)? Both print() and printh() do not seem to create any log file.

P#26097 2016-07-29 14:33 ( Edited 2016-07-29 18:33)

I guess it's broken?

meanwhile you can use the old command line workaround:

cd /Applications/PICO-8/PICO-8.app/Contents/MacOS
./pico8 >& ~/Library/Logs/pico8.log

then use printh()

See: https://twitter.com/gingerbeardman/status/735166333478961152

P#26161 2016-07-30 16:06 ( Edited 2016-08-02 16:00)

Thanks @matt!

P#26272 2016-08-01 15:29 ( Edited 2016-08-01 19:29)

[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2023-12-05 21:40:37 | 0.029s | Q:46