Log In  

Hey Everyone! PICO-8 0.1.11d builds are now live on Lexaloffle and Humble! We are still working on CHIP / Pocket CHIP builds -- I'll update this thread when they are live. [Edit: they're live now with 0.1.11g]

Welcome to the Core

Despite the unassuming version number of 0.1.11, this update marks something of a milestone: The core of PICO-8 is now feature-complete, with API and specifications that are likely to remain fixed. Before it becomes entombed as a read-only blob of C code however, there is still some time before beta to address any issues that crop up. Let's see how 0.1.11 works out and what points of friction emerge.

One of the goals of PICO-8 is to create a stable, familiar medium in contrast to the shifting sands of modern software development. Instead of growing by changing the core of PICO-8 over time, I'm aiming to settle on a minimal, eternal component that can be built on top of (improved tools and bbs integration), extended sideways (extra ports / host platform support), built out from the inside (making useful snippets and carts!), and around (nicer BBS, cartverse, documentation, resources and community events).

v0.1.11 is also the point after which PICO-8 and Voxatron co-development start to part ways -- Voxatron's API and specification is a superset of PICO-8 v0.1.11's. The upcoming Voxatron update looks basically like a 3D PICO-8, with its own version of splore, png cart format, labels, and bbs integration. I messed up the Voxatron release plan partly because of committing to this -- but more on this later in a separate post. o(_ _)o

Many thanks to the numerous PICO-8 users who helped iron out bugs in the 0.1.11 release candidates. I snuck 0.1.11 out via twitter thinking it was pretty solid, but it took 3 more builds to get right. If you find any old carts that don't run or behave strangely, please ping me on twitter, or better still, post a bug report in the support forum. There will be another follow-up (0.1.12) to catch any left-over issues. After that it will be onwards to beta (0.2.0) \o/

Also special thanks to Gruber for help with the SFX editor, rez for helping shape fill patterns & cpu changes, and everyone who posted thoughts and suggestions on the BBS -- many of which I folded into this update. I haven't posted much this year due to going into blinkers-on just-make-the-thing mode, but I do read and appreciate every piece of feedback. I'll be re-visiting some older posts to update how things have turned out, and I'm also looking forward to joining the party and making some more carts too :D

New Features

Binary Exporters

PICO-8 can now generate stand-alone, distributable binary versions of carts and multicarts for Windows, MacOS and 64-bit Linux (dynamically linked with SDL2). Use the export command with a .BIN target, with the -I switch to choose an icon (or skip to use the cart label by default):


Multicarts can be created the same way as exporting HTML -- just add up to 15 .p8 or .p8.png filenames at the end of the EXPORT command. Bundled carts behave just the same as local files -- they can be RELOAD()ed, CSTORE()ed to, and chain loaded with LOAD(), using the new breadcrumb and parameter features explained below.

SFX Instruments

Until 0.1.10, each of the 32 notes in a SFX were internally described with 15 bits: 6 for pitch, 3 each for instrument, volume and effect. 0.1.11 adds one extra bit to round out the 2 bytes: "SFX instrument mode" that can be set by toggling the button to the right of the instruments list.

When it is set, the instrument buttons turn into indexes 0..7, and when placing notes you'll see the instrument index appear green instead of pink. Instead of playing the built-in instrument, these notes will trigger the SFX of that index. In other words, SFX 0..7 are acting as instrument definitions. Each note will advance at the same speed as the definition, with the pitch shifted (relative to C-2), the volume multiplied, and the effects layered on top of each other. This can be used to reach a greater range of pitches, create per-note changes in texture and tone, and set up detailed volume envelopes.

Here's a rundown of other new SFX editing features, and a quick introduction to SFX instruments by Gruber (check out the other tutorials too!):

Fill Patterns

Along with SFX instruments, fill patterns are a late addition to the PICO-8 spec. In both cases I was planning to keep them as secret features, but they turned out to be too much fun and I couldn't wait! From the manual:

fillp p

    The PICO-8 fill pattern is a 4x4 2-colour tiled pattern observed by:
        circ() circfill() rect() rectfill() pset() line()

    p is a bitfield in reading order starting from the highest bit. To calculate the value
    of p for a desired pattern, add the bit values together:

        |32768|16384| 8192| 4096|
        | 2048| 1024| 512 | 256 |
        | 128 |  64 |  32 |  16 |
        |  8  |  4  |  2  |  1  |

    For example, FILLP(4+8+64+128+  256+512+4096+8192) would create a checkerboard pattern.

    This can be more neatly expressed in binary: FILLP(0b0011001111001100)
    The default fill pattern is 0, which means a single solid colour is drawn.

    To specify a second colour for the pattern, use the high bits of any colour parameter:

        CIRCFILL(64,64,20, 0x4E) -- brown and pink

    An additional bit 0b0.1 can be set to indicate that the second colour is not drawn.

        FILLP(0b0011010101101000.1) -- checkboard with transparent squares

Code Tabs

You can now organise your code into numbered tabs. They are not separate files, but rather the same block of code chopped up with special markers (internally: "-->8"). Hovering over a tab number displays the first line of code if is commented, which can be used as a makeshift method of naming tabs. To remove the right-most tab, just delete all of the text in the tab and then move off it.

Editing operations like undo, search and selections apply per-tab. It isn't currently possible to search across tabs -- this will be added later along with improved error messages that span multiple tabs.

Commandline Scripts

The new -x parameter to PICO-8 can be used to run carts as part of commandline tool chains. For example, if you have a long-winded process for copying data around and generating large multicarts, you could automate the process by creating a single cart that does the job:


And then run PICO-8 from commandline:

$ pico8 -x build.p8
EXPORT /home/zep/pico8/carts/myproj/mygame.bin -i 1 level1.p8 level2.p8 level3.p8

This will execute each line of build.p8 as if it had been typed in from a fresh boot of PICO-8, but without ever opening a window. It isn't truely headless yet because it still requires SDL2 (along with the video/audio driver) -- e.g. you can still play sound from it. I'll look at improving this in the future for people who want to make twitter bots and whatnot.

HTML Templates / Plates

This is still a work in progress as I don't have any sample plates to offer yet! But the basic concept works: you can put html files in {app_data}/pico-8/plates, and use them as templates for the html exporter. The template should include a magic string ("##js_file##") in place of the accompany javascript file's name:

<script async type="text/javascript" src="##js_file##"></script>

The template (in this example, one_button.html) can then be used when exporting like so:


The P is for 'Plate'. I use this more general term because they can act both as templates (custom control schemes like single-button, or to add technical javascript features) and also as faceplates (custom graphics around the PICO-8 screen e.g. based on the theme of the game). When doing the next round of website updates, I'll look at creating a way to submit plates as a community resource.

It is also possible in 0.1.11 to export the .js file separately (EXPORT FOO.JS) so that it is easier to work on the accompanying .html in the same folder as the exported cart.

Splore Menu

An extra per-cart menu can be accessed from splore by pressing the menu button (X and O still immediately launch the cart as before). This menu allows you to open the cart's BBS thread, remove it from favourites, and open a minimal options menu. The options menu includes SHUTDOWN which allows PICO-8 to be used from start to finish with only a controller (in -splore mode).

Extra splore tip that I forgot to mention in the docs: instead of typing SPLORE, you can use just S.

API Changes

  • add() returns the value that was added
  • assert() can take an optional error message parameter
  • coresume() returns an error, making it useful to wrap with assert: assert(coresume(foo))
  • getmetatable()
  • sfx() takes a 4th parameter: number of notes to play

Time and Date

You can now grab the current local and GM time with stat():

        80..85  UTC time: year, month, day, hour, minute, second
        90..95  Local time

Check out the ClockJam!

Cart #45944 | 2017-11-06 | Code ▽ | Embed ▽ | No License

CPU Costs

There are many adjustments to the cost of calling api functions in 0.1.11. Some of them are due to fixing bugs including the ability to trick PICO-8 into giving back unlimited CPU cycles (!), some are to make costs feel more consistent with each other, to more accurately reflect the real world cost of the host machine (pffft -- like that matters), and finally to give a small bump to graphically intensive carts now that making 60fps carts is becoming more common.

I've tried to tread lightly on the heavy optimisation work done by cartridge authors. For example, kragzeg's technical articles on Dank Tomb rendering are still true. The general rule is that existing carts will run around the same speed as before, or a little faster depending on the operations they use. In a few rare cases they run slightly slower, and I am humbly offering low-cost pattern filling as compensation :P

  • Horizontal scan fills are now super-fast (rectfill, circfill)
  • sspr() is now the same speed as spr() per-pixel
  • line() is faster -- but better to use rectfill() if axis-aligned
  • bnot() and peek() cost 1 lua vm instruction more
  • Fixed cost calculation of clipped gfx operations

Cartverse Preparation

The PICO-8 cartverse is a collection of interconnected webs of PICO-8 cartridges that can (optionally) exist independently of the BBS, and in the future the BBS will provide entry points to the cartverse rather than being a container for it. This update includes some of of the features needed to achieve this, and the are also useful separately:

BBS Cart Loading

Use LOAD("#45481") to load a cartridge directly from the BBS. The number can (and normally should be) the containing post id, (not the id of the cart itself), in which case the most recent version of the cart is fetched. This can be called from a running cartridge, in which case the cartridge is immediately launched.


Breadcrumbs allows the user to return to previous carts, much like the back button on a web browser. When LOAD()ing a cart, a second parameter can be used to request that the launched cart inserts an option in the pause menu to get back. The value of the parameter is the label of that button:


Parameter Strings

The third parameter to LOAD() is an arbitrary string up to 1024 chars long that can be read by the receiving cart with STAT(6). When using a breadcrumb to get back to a cartridge, the parameter that cartridge was initially run with is restored.

The parameter string can also be set with RUN from the commandline: RUN BLAH DE BLAH

Custom BBS Functionality

This isn't a feature by itself but can implemented using these new features. Because the cartverse sits alongside the BBS, it will be (and maybe already is) a viable way to extend the functionality of the BBS. For example: when hosting a jam, instead of having customized web-based theme selection, cart listings and voting, we can do it all with carts. An invite cart could have a countdown clock + a link to a separate theme voting cart when it becomes available, and then afterwards a voting cart could link to all the entries and store results voting on itself. There isn't yet a tidy way to send data back to the jam host, but there will be later! I will try this out for P8JAM3

Cart #45507 | 2017-10-27 | Code ▽ | Embed ▽ | No License




    Fixed: time() always returns 0 when there is no _update function
    Fixed: (raspi) Keyboard stops responding after pressing CTRL-F, CTRL-Z
    Fixed: (raspi) Double keypresses in sound editor when entering notes
    Fixed: stat(6) pads parameter string with spaces


    Added: Local and UT time queries using stat()
    Added: host_framerate_control (config.txt) to improve performance on slower machines and web 
    Added: Control over cpu useage when running in background (-background_sleep_ms / config.txt)
    Added: Windows icon in exported exe
    Added: F11 to toggle fullscreen
    Added: export -c switch to indicate transparent icon colour 
    Added: show_backup_messages (config.txt) to turn off backup notifications
    Added: SFX instruments documentation in pico8.txt
    Added: Error message when trying to export carts with code size over the compressed limit
    Changed: If config.txt is not found, the same directory as the executable is searched
    Changed: If sdl_controllers.txt exists in the same directory as the executeable, it is processed first
    Changed: Shorthand if () statements must be written on a single line
    Fixed: reload() from bundled, non-primary cart in exported html multicart reads only original data
    Fixed: Exported binaries wrongly observe F7 (capture label)
    Fixed: Loading carts from earlier versions alters SFX data not intended for audio
    Fixed: Old version of fill patterns documentation near end of pico8.txt
    Fixed: 'backed up unsaved changes' message displayed during runtime for cstored() carts
    Fixed: PICO-8 runs too slowly when in background (new default background_sleep_ms: 20)
    Fixed: Saving screenshots and videos from exported binaries are named 0_*
    Fixed: Compressed size limit warning on save doesn't mention exported carts
    Fixed: btn(), btnp() don't work in infinite loops
    Fixed: btnp() timing inconsistent between 30fps / 60fps / during frame-skipping / with no _update
    Fixed: Can't move between channels while music is playing in song mode


    Fixed: Preprocessor bug regressions: "if (..) or", "a.b -= c - d"
    Fixed: Crash when pressing menu button on an empty favourites list


    Added: Binary exporters (Windows, Linux, Mac OSX)
    Added: Code tabs
    Added: Splore cart menu
    Added: Fill patterns
    Added: Custom sfx instruments
    Added: load("#1234") to load [and run] a BBS cart
    Added: -x switch // execute a cart headless, for making command-line tools
    Added: Compressed size display and limit warning lights in code editor
    Added: CTRL-L to jump to a line number in code editor
    Added: numbers can be written in binary: 0b10100010 
    Added: tostr(), tonum()
    Added: extcmd(): audio_rec, audio_end to record all audio output.
    Added: ls() returns a list of local files if called while running
    Added: getmetatable()
    Added: coroutine error reporting // wrap coresume() in assert()
    Added: sfx() can take a 4th parameter: number of notes to play
    Added: Live sfx and music editing + better navigation controls
    Added: Transpose selected sfx notes relative to C by entering a note w/ SHIFT held
    Added: Insert and delete sfx rows with enter and backspace
    Added: Hidden note data is shown in sfx editor when relevant (slide, arps)
    Added: Warning displayed when unsaved changes backed up
    Added: Separate animation for downloading vs. loading a cart
    Added: export -p switch to supply a customized html template 
    Added: Mousewheel when devkit mouse enabled: stat(36) // not supported in web
    Added: < > to change zoom level in gfx and map editors
    Changed: Rebalanced / fixed api cpu costs
    Changed: Screenshot and gif filenames based on current cart if available
    Changed: add() returns the added object
    Changed: removed global hpf on audio
    Changed: (sfx) can slide to volume 0
    Changed: removed master low pass filter
    Changed: assert() can take an optional error_message parameter
    Changed: ? (shorthand for print()) can be prefixed by whitespace 
    Changed: shl(), shr() return 0 if second parameter >= 32
    Changed: Automatically drop down to software blitting mode if opengl fails
    Changed: Lua memory limit set to 2MB (was 1MB)
    Changed: Some options (-width, -show_fps) apply only to the session; not saved to config.txt
    Updated: Internal game controller mappings from SDL_GameControllerDB
    Fixed: Pops & clicks in audio when switching between playing SFX
    Fixed: Crash in audio mixer because of bad locking
    Fixed: Crash when loading .p8 files with more than 64k of code
    Fixed: Indexing of sparse tables fails after removing n/2 elements
    Fixed: Calling stat() inside an infinite loop crashes
    Fixed: Resetting cartridge corrupts cartridge data in range 0x5e00..0x5eff
    Fixed: Can not recover from a cart error caused by glitchy data on resetting 
    Fixed: String->negative number conversion off by 0x0.0001 (-1 --> 0xffff0001)
    Fixed: Crash when running cart closed to 64k char limit
    Fixed: Cursor can't move to the right of last character in code editor
    Fixed: Missing highlighted keywords: in, add, del, menuitem
    Fixed: Preprocessor bugs: "a+=1+2\n*3", "a+=(1)ba=42", "a[(1)]+=1"
    Fixed: Preprocessor performs replacements inside a string printed with ?
    Fixed: Display freezes when terminating a program running at >100% cpu
    Fixed: Quick-running (CTRL-R) clobbers some editor state (e.g. current sprite page)
    Fixed: Loading a .p8 file with a future version reports a generic failure
    Fixed: alt-enter to toggle fullscreen also triggers pause menu
    Fixed: Splore scrolling jumps around when list gets too long

P#46039 2017-11-09 03:15 ( Edited 2017-11-09 08:15)

Whoa. When you put it all in this one post, what an incredible update. I love the direction PICO-8 is headed. Thank you, zep! :)

P#46040 2017-11-09 03:37 ( Edited 2017-11-09 08:37)

Woah, that is a lot of changes! Thank you for all! I really enjoy code tabs! Also, I'm really happy, that pico-8 will go into beta soon!

P#46041 2017-11-09 03:45 ( Edited 2017-11-09 08:45)

I'm already in love with the Code Tabs!

P#46042 2017-11-09 03:59 ( Edited 2017-11-09 08:59)


P#46043 2017-11-09 05:06 ( Edited 2017-11-09 10:06)

Yay, a new "release post" :D
Normally I love seeing these, if only for the cute characters, but this release... is special. Thank you for all your hard work Zep, much appreciated! :o)

With regards to the "Cartverse"; I'm glad you already coined a name for this, coz I've been wondering what to call the ideas I've been having...

I've been thinking for a while now that, with this functionality, we can essentially create mini "PICO-8 Internet", where each cart can be the entry point to other cart "pico-sites", which link to other cart/pico-sites... etc. etc.

Some carts could be like mini websites (info about a topic/yourself/etc. perhaps with code examples/tutorials/etc. all linked together by Post/Cart ID's.

I'm picturing something like a cross-between the old Teletext/Ceefax system that used to be on TV's (pre-internet) and kinda like a good ol' dial-up BBS system. Where you have a few linked carts that represent your mini-site and other people's carts (in this whole Cartverse) can offer up links to yours.

Either way... this is all very, VERY interesting times! :D

P#46044 2017-11-09 06:00 ( Edited 2017-11-09 11:00)

.★❤ \(#.#)/ ❤★.
I love it all so much

P#46048 2017-11-09 07:30 ( Edited 2017-11-09 12:32)


How long until 0.1.12?

P#46061 2017-11-09 12:19 ( Edited 2017-11-09 17:19)
P#46063 2017-11-09 13:02 ( Edited 2017-11-09 18:02)

whoaaa this cartverse concept is blowin my mind

what a great update! The API feels quite well-rounded now, with e.g. date/time access, the sfx length parameter, and that 1 remaining sfx bit used :D

P#46064 2017-11-09 13:20 ( Edited 2017-11-09 18:27)

I would trade my soul in for what Liquidream is describing.

Maybe it's even time to make a multicart OS, with browsers and all kinds of stuff!

P#46067 2017-11-09 14:00 ( Edited 2017-11-09 19:00)

kinda like a good ol' dial-up BBS system.

Someone needs to make a Tradewars client.

(I guess you'd need to use the GPIO pins and some javascript to handle the networking? It could be done.)

P#46068 2017-11-09 14:09 ( Edited 2017-11-09 19:09)

I haven't had much time for PICO-8 stuff lately but this really makes me want to get back to it :)

P#46070 2017-11-09 14:28 ( Edited 2017-11-09 19:28)

Just a heads up, there are two more stray bugs in 0.1.11d that I'll patch in 0.1.11e soon:

  • line numbers in error messages are broken for multiple tabs
  • btn() with no parameters returns the same as btnp() // doesn't affect many carts, but is very confusing!

A mini cart internet, yes! There is a lot to take from this analogy -- homepages, hyperlinks, webrings all transfer in cute ways. The parameter strings in this context act like everything after the '?' in web urls, which is why the they are restored when popping back up the stack of previously visited carts -- they are part of the locator.

Something that feels like door games (with or without the cartverse) is something I'm also indirectly aiming for. Expandable MUDs, board games, turned based strategy games. It would be great! The online scores scheme is designed to be abused in order to store small amounts of persistent world data so that we can make such things.

P#46338 2017-11-15 17:00 ( Edited 2017-11-15 22:00)


0.1.12 won't be a very big update -- likely sometime in December to scoop up leftover bugs, add some html templates and an in-game options menu.

P#46339 2017-11-15 17:03 ( Edited 2017-11-15 22:03)

All sounds good to me (& thx for the heads-up) :D

P#46354 2017-11-16 01:37 ( Edited 2017-11-16 06:37)

Any chance of a transpose argument to sfx(), now that that's available for instrument purposes? It'd be nice to be able to give pitch-based feedback (for, e.g., a vehicle engine noise) without using up a bunch of sfx for the purpose.

P#46358 2017-11-16 04:20 ( Edited 2017-11-16 09:20)


Please take a peek at this...?


If you think it has any merit, it would be better to consider it sooner rather than later before the current implementation gets too ingrained...

P#46360 2017-11-16 06:37 ( Edited 2017-11-16 11:37)

Yes! @zep Congrats on this update! Really excited about this.

P#46375 2017-11-16 13:44 ( Edited 2017-11-16 18:44)

btn() w/o parameters acting as btnp() is a problem in many of my carts. For example in tweetcarts I use


as a shorten syntax for setting player position when pressing left or right. Now it is suuuuper slow. :(
Same in other games where I just check if player press any arrow with

if band(btn(),15)>0 then

which is kinda broken now.
EDIT: oh, just saw it'd be part of next version bugfixes, cool then!

P#46469 2017-11-19 12:44 ( Edited 2017-11-19 18:08)

also btnp() bit 6 is gone (menu button). it could be used with poke(0x5f30,1) to enable a custom pause menu.
well, it wasn't documented, but I was hoping for it to be at some point...

P#46473 2017-11-19 13:11 ( Edited 2017-11-19 22:15)

The cartverse in a way solves the mutli-cart problem for BBS carts. Can't partially load data from another cartridge but can break up your game into multiple carts and and have one load the next when you complete the first one.

P#46532 2017-11-20 22:44 ( Edited 2017-11-21 03:44)

Please make the editor full-screen on PocketCHIP.
Or at least make the CHIP version load to the console.

We all love Pico-8 for its restrictions. But using it on a PocketCHIP is restrictive enough without being forced to use 128x128.

P#46546 2017-11-21 10:49 ( Edited 2017-11-21 16:07)

oh, no...I use the undocumented btnp() bit 6 [start button] + poke(0x5f30,1) for my Zelda game to bring up the map and inventory.

P#46568 2017-11-21 23:15 ( Edited 2017-11-22 04:15)

Are we getting a leaderboard system anytime soon? Like just a way to upload high scores to the BBS and download the back to the cart? Or some sort of really low-level networking would be cool too.

P#46581 2017-11-22 12:08 ( Edited 2017-11-22 17:08)

This is super cool, started playing with it on my retropie rig.

Being able to exit without using a keyboard or forcing a reboot over putty is AWESOME!!! It fits perfectly into my retropie now!

Unfortunately I'm having a weird bug with the audio where it just cuts out every 10-15 seconds. I don't remember this happening on the last version I used, so it may be new.

Thanks for the hard work, this cartverse stuff is going to be AMAZING.

P#46606 2017-11-22 23:44 ( Edited 2017-11-23 04:44)

Oh, I have to use parentheses and commas when using CLS and SPR now! That was a surprise!

P#46621 2017-11-23 07:56 ( Edited 2017-11-23 12:57)

What do you mean, Tinglar? Could you give before/after examples?

P#46653 2017-11-24 03:28 ( Edited 2017-11-24 08:28)

Assorted bugs I've noticed in 0.1.11d:

  • occasionally the editor will start interpreting the "X" key as a left-mouse click instead of a key press. When this happens, it's necessary to quit and restart the program. (Toggling the "keyboard cursor" option does nothing.)
  • two of my favorite older carts—Postcards from the Fringe and Endless Sky, both by @electricgryphon—are broken in 0.1.11. Both feature similar visual artifacts and Postcards from the Fringe will occasionally crash on load.

(I'm on a 2017 MacBook Pro / OS X Sierra)

P#46706 2017-11-25 18:10 ( Edited 2017-11-25 23:11)

I've seen similar behaviour with the x key on PC. Line keeps jumping to where my mouse is when I'm trying to do any maths involving co-ordinates.

P#46707 2017-11-25 19:37 ( Edited 2017-11-26 00:37)

Any update on a Pocket CHIP build?

P#47279 2017-12-11 06:30 ( Edited 2017-12-11 11:30)

nope :[

P#47280 2017-12-11 06:37 ( Edited 2017-12-11 11:37)


I mean that, before this update, I could write cls or spr x in my code and have them run. After this update, I have to use cls() and spr(x), instead.

P#47290 2017-12-11 16:21 ( Edited 2017-12-11 21:21)

How do I update? I Cant wait to make an OS. Something I wanted to do for so long!!

P#47291 2017-12-11 16:38 ( Edited 2017-12-11 21:38)


Oh, really? Lua wouldn't normally let you call a function without parentheses anyway. I suspect he fixed a bug. Bummer, though, it would have been nice to save the tokens.

P#47298 2017-12-11 18:13 ( Edited 2017-12-11 23:13)

It seems like the i386 version is actually x86-64. It would be nice to get a real i386 version. :-)

file pico-8/pico8
pico-8/pico8: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a589ada4e62f733db872d5a55494f1af37f66726, with debug_info, not stripped

P#47663 2017-12-24 09:33 ( Edited 2017-12-24 14:33)

yes, I got the same problem (the linux x86 is actually a 64bit binary). I want pico8 on my old atom based netbook and this is blocking me.

P#47675 2017-12-25 11:11 ( Edited 2017-12-25 16:11)

I really like the -x addition. I’ve used Pico-8 to draw some stuff and create maps for some c64 tests. It’s nice to be able to put the exporting into the build process.

I’ve only got my iPad here with me now. Does anyone know if -x and stat(6) work together? I.e. is it possible to give the cart parameters from the command line?

P#47736 2017-12-29 03:53 ( Edited 2017-12-29 08:53)


Oh, what a great idea. I have an old HP Mini-Note I should be using for Pico-8, silly me for not thinking of it.

But yeah, I'll need a true 32-bit build for it to run, since the thing runs on a Via Nano (atom-like x86) processor.

P#47741 2017-12-29 05:02 ( Edited 2017-12-29 10:40)

0.1.11g is now available at Lexaloffle and Humble.

More bug fixes, correct 32-bit Linux executeable this time, and I've included pico8_dyn in all 3 linux versions should you want to provide your own SDL.

Also, a NextThing build of 0.1.11g for PocketCHIP / CHIP is available! You can update by opening terminal and doing:

sudo apt update && sudo apt install chip-pico-8

(password is chip)

Alternatively, it's also included in the list of packages to update when upgrading:

sudo apt upgrade

Because of improved adaptive framerate handling introduced earlier in 0.1.11, there is much less slowdown on heavier carts running on the PocketCHIP.

There are a couple of features (content filter, cartverse id support) that aren't live yet, but will become operational after the next BBS update.

If there are no serious issues, this will be the last time the file version is bumped for a while, so we can get some future compatibility going again. But you'll need to update to this version in order to play any carts made in 0.1.11g.

Other fixes:


        Added: CTRL-C to copy contents of commandline
        Added: stat(100..102) for current breadcrumb label, bbs cart id, and hostname (web)
        Added: content_filter in config.txt
        Added: Cartverse cart id support (not live server-side yet though)
        Fixed: Tab preview does not show on mouseover
        Fixed: Can't paste uppercase characters into commandline
        Fixed: Preprocessor can't handle glyphs in form: "♥.x += 1"
        Fixed: Unsaved changes sometimes reported when filename is not set
        Fixed: Pause menu doesn't open inside infinite loop inside _draw
        Fixed: load() crashes when "parameter string" parameter is not a string
        Fixed: cstore(),reload() crash when external cart filename is not a string
        Fixed: printh(str, "@clip") fails for glyph characters in str
P#48085 2018-01-12 16:45 ( Edited 2018-01-12 21:55)

Wow, nice! Love, love, love the direction cartverse is headed. And the content filter? Awesome. That will be fantastic to have when working with kids. Thank you so, so much! :D

P#48086 2018-01-12 16:55 ( Edited 2018-01-12 21:55)

Hey zep, I have an issue. I think it's been around for quite a while, but since you're close to locking some stuff down, I think I should get it on your radar:

Background: if I run the app windowed, on Windows 7 x64 in my case, with my monitor set to a refresh rate of 60Hz, it holds vsync as steady as a rock. I can flip between red and green and get a uniform khaki color. No tearing, no dropping, just a little bit of blood from my eyes.

However, if I up the desktop refresh rate to 120Hz, which is becoming much more common among gamers, and which I would prefer to do all of the time, pico-8 starts tearing very badly and dropping frames all over the place. It's a real mess. My eyes have exploded so many times that I've had to ask our waste disposal company for an extra biomass container.

I'd expect it to handle an even multiple of 60 gracefully. I know 144Hz or 90Hz isn't going to work cleanly, but if the desktop is running at an even multiple of 60, it really ought to be able to work flawlessly.

If it helps, the FPS counter wibbles around the neighborhood of 110-115fps, but I've seen it go as low as 107 and as high as 120.

Also, this is irrespective of window size and scaling, and I'm running it on a very capable cpu with an extremely capable gpu.

Finally, this is the program I test with:

function _update60()

function _draw()

P#48103 2018-01-13 02:30 ( Edited 2018-01-13 14:21)

Also, this other bug persists in 0.1.11g:


P#48104 2018-01-13 02:48 ( Edited 2018-01-13 08:18)

PS: ♥LOVE♥ being able to copy the command line. :D

P#48105 2018-01-13 03:19 ( Edited 2018-01-13 08:20)

Thanks for the update so I can use assert(coresume( feels cleaner than the workaround I had been using before to printout errors from within coroutines!

P#50190 2018-03-10 11:17 ( Edited 2018-03-10 16:17)

Agreed, big thumbs up for that feature.

P#50192 2018-03-10 11:26 ( Edited 2018-03-10 16:26)

I'm very happy with this update.
Specially with the command line option -x.

This will open the way for tool making.

it still requires SDL2 (along with the video/audio driver) -- e.g. you can still play sound from it

I tried playing sounds with the -x option but it crashes :C.

I hope there will be a way to create a command line utility for playing music only carts.


Plays Music 0 All Channels

pico8 -m 0 music.p8

Plays Music 0 Channel 1

pico8 -m 0 -c 1 music.p8

Plays Music 0 Channels 1 2

pico8 -m 0 -c 1,2 music.p8

Thanks for all your efforts zep :)

P#52066 2018-04-27 10:01 ( Edited 2018-04-27 14:02)

Was messing around with 0.1.11G in the music editor and I noticed some oddities in SFX editing. Putting a value in the volume column automatically makes a note appear there (usually C1); and then trying to backspace that value or note would result in the entire lineup of notes being bumped up a space, without any noticable way to "insert" a blank note in its' place. The backspacing issue happens on existing notes now, too; so it's not limited to just that. But there doesn't seem to be a way to eliminate accidental note placements in ways that doesn't screw up the rest of the SFX's structure.

Unless I'm missing some new hotkeys now, which I might be. Good thing I had saved before that!

P#55768 2018-08-27 09:01 ( Edited 2018-08-27 13:01)

I think the key you are looking for to insert a blank note is Enter.

To delete without moving other notes, you can highlight some part of the note's row of numbers (using Shift + left/right) and then push either Backspace or Delete.

When entering notes and making a mistake, though, I usually just push Up (to go to the previous note) and and then retype the note, because entering new things overwrites whatever is under the cursor.

As for entering a volume value and making a note appear, keep in mind that the determining factor that indicates if a note is played or not is the volume being greater than 0, so when you set the volume to anything other than 0, you are declaring that there is a note there now :) (and in cases of arpeggiation, the pitch is actually still used in the arpeggio, even if that note has 0 volume, which is why such notes now show up as visible if they are within an arpeggio group)

P#55778 2018-08-27 14:51 ( Edited 2018-08-27 18:51)

Ahhh, okay. I was trying "Insert" which wasn't doing anything; and expecting Enter to do the same as the spacebar, to play/pause the section. Thank you!

P#55787 2018-08-27 17:44 ( Edited 2018-08-27 21:44)

[Please log in to post a comment]