Log In  

In macOS (Big Sur but possibly others), there are a few bugs related to the selected system audio output device.

A) PICO-8 uses the audio output device selected by the OS at start-up time, and does not change when a different output device is selected while PICO-8 is running.


  1. Select an audio output device, such as the laptop speakers.
  2. Open PICO-8.
  3. Test that audio is played from the laptop speakers. (E.g. draw then play a sfx.)
  4. Change the audio output device, such as headphones, using System Preferences or the Audio taskbar menu.
  5. Retry the audio test.

Expected: Audio should be emitted out of the new output device (headphones) and not the original device (laptop speakers).

Actual: Audio continues to be emitted by the original device.

B) If the output device that PICO-8 detects during start-up is no longer available, audio stops working entirely. In the SFX editor, the note playback indicator is also affected, which might hint at a cause.


  1. In macOS, select a removable audio device, such as Bluetooth headphones.
  2. Open PICO-8, then open the SFX editor.
  3. Draw a sound and test playback with the spacebar. The sound plays and the note indicator moves.
  4. Disconnect the removable audio device, thereby changing the OS default output device.
  5. Press spacebar.

Expected: The sound plays as normal through the new audio output device.

Actual: No sound is played. The note indicator highlights the currently selected note, but does not move. Pressing the spacebar again to stop playback restores the note indicator back to the cursor. sfx(1) from the command prompt also does nothing after #3, but it does return.

Workaround for both issues: Save your work and restart PICO-8 after changing audio output devices.

PICO-8 0.2.1b, macOS Big Sur 11.0.1.

P#84777 2020-11-27 22:49

Harvard University's CS50 Games course has a free online version on edX. It's a great class for beginners with some coding experience, and uses Love2D and Lua. Nearly all of the concepts apply to PICO-8 development.


It's not too difficult to translate in-class code to PICO-8 equivalent code, but it might be easier to stick with Love2D for the course, then figure out PICO-8 equivalents later. In-class code uses Lua standard library features, all with PICO-8 equivalents. Spreading code across multiple files could be done with code tabs or "#include" instead of "require". They also use a simple third-party object-oriented class package to teach OO concepts. This could be ported to PICO-8 but hasn't been yet.

If there's interest, I'm sure we could pull together a set of support materials for bridging CS50 and PICO-8. For now I'm just recommending the course.

P#77450 2020-05-31 09:19

I'm noticing crackling or popping noises during music playback in the 0.2.0i web player, either on the BBS or standalone web. I cannot reproduce the noise for the same carts in PICO-8 native. For me this is noticeable and unpleasant, discovered in both the recent Pico Driller and Star Anise Chronicles.

Anyone else hearing this? I can try to record it if that helps.

Chrome 81.0.4044.138, macOS 10.15.4.

P#77025 2020-05-22 17:37

Please add volume controls.

This is actually two requests: volume controls for the PICO-8 native apps, and volume controls for the web player (exported and BBS). BBS games in particular are always at full volume, and I rely on web media players to give me a volume setting I can adjust on a per-player basis.

P#76963 2020-05-21 00:44

I'm seeing some new people picking up PICO-8 with the 0.2 release announcements (welcome!) and some discussion of the new visible tabs feature is giving the config.txt workflow some attention. People are tripping on the fact that PICO-8 overwrites config.txt on exit without testing for changes.

I'd like a smarter merge of in-memory and on-disk properties. The app should remember last loaded properties so it can calculate "dirty in memory" and "dirty on disk." DiM only? Update disk. DiD only? Update memory. Both DiM and DiD? Tricky, but maybe this is avoidable if PICO-8 always merges on every in-memory change.

I assume PICO-8 already has logic for preserving comments and resolving weird cases like a property appearing more than once, or not at all, in the file. :)

P#76275 2020-05-09 22:12

I like how I can indent/dedent a block selection with tab/shift-tab, and I like the behavior where it operates on every line with at least one character selected. I notice an edge case that should be addressed: if the first line is indented and I have the intend spaces selected, when I dedent the space goes away but my selection start moves up to the previous line. If I dedent further now the previous line is getting included in the dedent.

P#76273 2020-05-09 21:46 ( Edited 2020-05-09 21:46)

I like the new feature where shift-enter auto-indents. It also adds an "end" statement which is useful for closing blocks.

I'm wondering if it should always do this, or if it could do something more context sensitive. A full IDE would be running a full parser in the background which is probably overkill. A simpler behavior would just scan the current line for block starter keywords and only indent+end if it finds one.

I'd prefer this because I'm likely to get into the habit of shift+enter, enough to do it by accident, and if it always does what I want that'd be better than having to undo and try again.

P#76272 2020-05-09 21:40 ( Edited 2020-05-09 21:49)

Cart #snowysskatingadventure-0 | 2019-12-17 | Code ▽ | Embed ▽ | No License

Snowy has skates and wants to help his friend Bunny decorate his tree! Skate the lake to find five ornaments for the tree.

  • Hold X and a direction to accelerate.
  • Press Z ("O") while moving to jump.

Tip: Hold Z ("O") for longer before letting go to jump longer.

Tip: If you get stuck in water, try jumping your way out. Snowy isn't a strong swimmer, but he's a great jumper!

This is my and TimSwast's contribution to PICO-8 Advent 2019. Thanks to everyone who participated, and everyone who played!

P#71222 2019-12-19 19:29

I've thrown all my 32-bit games overboard and upgraded to macOS Catalina. I notice that the current PICO-8 binary (0.1.12c) asks for broad keyboard permissions (read keystrokes in all applications). I assume this permission isn't actually needed (I can deny it and everything seems to work) and this is a side effect of an older SDL macOS interaction. It'd be nice if the app can be configured to not ask for the permission.

If it is used for something I'd enjoy knowing what it is.

P#71199 2019-12-18 20:55 ( Edited 2019-12-18 20:56)

This is a bit obscure and possibly a limitation of SDL, but I notice as of 0.1.12c that if my default audio output device changes while PICO-8 is running, PICO-8 will continue to use whatever output device was the default when PICO-8 started for output, instead of switching to the new device.

For example, if I start PICO-8, then connect headphones, PICO-8 will continue to use the speakers. The rest of the system (at least for apps that don't have this issue) will use the headphones. To get PICO-8 to use the headphones in this case, I have to restart PICO-8.

P#71088 2019-12-17 07:01

The PICO-8 built-in editor supports up to 8 tabs. These are represented in the .p8 file as a single Lua code block delimited with -->8 comments. If I am editing the .p8 file with an external editor but still want to establish tabs for the internal editor, I add -->8 comments manually. If I add more tabs than the internal editor can handle (8 or more delimiters), code beyond the 8th tab is ignored.

It's a pretty edgy edge case to want both external editing and tabs for the internal editor, but I found this behavior surprising enough that I humbly request a tad more thought to it. I would agree that evaluating code that isn't displayed in the internal editor is not the right fix, nor is adding UI to support unlimited tabs. My preference would be to fail to load the file as if it didn't parse, with an explicit error message, or just consider everything beyond the 8th tab as part of the 8th tab.

P#71053 2019-12-16 04:26 ( Edited 2019-12-17 03:37)

The inline code syntax matcher is too greedy. A single instance runs past the closing backtick to the end of the paragraph:

One `two three` four five

One two three four five

Multiple instances in a paragraph help to illuminate what's happening: the styled span starts at the opening backtick but closes at the end of the paragraph, so multiple instances produces nested spans:

One `two` three `four` five

One two three four five

P#68357 2019-10-02 07:20

Chrome 76.0.3809.132, macOS 10.14.6. Cannot repro in Safari. Not sure when this started, but all of the web players on the BBS are blurry. Anyone else seeing this?

Web export from 0.1.12c still works fine, so I assume the BBS web player has an upgraded player with this regression.

P#67848 2019-09-18 07:13

Chrome 71 (December 2018) implements the new autoplay audio policy for the Web Audio API, which affects the Pico-8 web player. The BBS is OK because it implements a "curtain" that the user clicks on to start the player, which does the Web Audio enable interaction. But this breaks the exported web player as of Pico-8 0.1.11g: If I export a game to its own page then load the page, Pico-8 starts immediately and is disallowed sound. No interaction enables sound after this point.

One fix is for the exported web player to implement a curtain similar to the BBS. I don't know if that meets everyone's needs but would resolve the issue for the exported page. I assume we can work around this by implementing our own player curtain.

Interesting side note: This appears to affect stat() calls regarding sound as well. I have a cart that paused on stat(24) != 0, to wait for music to finish playing. The web export with sound disabled never gets past this point. I added a timeout for the pause to get around this, though I still don't have sound in this case.


P#59836 2018-12-08 21:55 ( Edited 2018-12-08 22:21)

I notice that the YouTube field of the BBS profile only accepts alphanumeric characters, and whatever is entered becomes a link of the form www.youtube.com/<alphanumericfield>. I'm mostly ignorant of how this part of YouTube works, but my understanding is that not everyone can reserve a youtube.com/<alphanumericfield> URL. You need a certain number of followers, have qualifying channel art, etc. Everyone gets a www.youtube.com/channel/<randomlyassignedalphanumeric> channel URL, but I can't enter that into my BBS profile and get a working link.

There's some history with G+ URLs that I've forgotten the details of. It looks like anyone can reserve a www.youtube.com/c/<alphanumericfield> URL. At least I have one, not sure how. But I can't enter that in either.

I think the YouTube profile field needs to accept more values and/or provide hints in the profile form on how to link a profile to a channel.

P#59831 2018-12-08 19:29

The BBS fails silently when I attempt to attach an image whose filename contains spaces. The upload appears to be successful, but it doesn't appear in the list of available images.

I remember this bug from the previous version of the BBS, so it's not new.

P#59657 2018-12-04 07:34

It appears that I have to sign in to the BBS on a daily basis. This does not appear to be intentional, and it's certainly annoying. I believe in the previous version of the BBS we had a one month sign-in expiration.

My cookies seem to be in reasonable shape for expiration dates:

PHPSESSID: when browsing session ends
pass: one month
user: one month

lexaloffle.com without the www also sets a cookie, __cfduid, but this doesn't seem related. I have tried clearing and recreating all of these cookies, with no change of behavior.

P#59656 2018-12-04 07:33

When playing a game in the web player, if I hold the z key ("o" button), I get the macOS diacritic editor. This interrupts play. I don't recall seeing this prior to the BBS/player update.

P#59653 2018-12-04 07:26 ( Edited 2018-12-04 07:28)

Cart #santapanic-0 | 2018-12-08 | Code ▽ | Embed ▽ | No License

Santa Panic! A gift wrapping arcade game for 1 or 2 players, by dddaaannn and TimSwast. This is game 9 of the PICO-8 Advent calendar 2018.

Get those presents wrapped and in the right spots, and get yourself back up the chimney, before you're found out!

  • Directional pad to move.
  • "O" button to pick up, then "O" again while not moving to drop, or while moving to throw.
  • Wrap a present by walking it to a wrapping station.
  • Pick up your sack and walk into the chimney to leave.

Two player co-op available! You could use the help, but make sure both of you get to the chimney in time!

P#59302 2018-11-23 22:10 ( Edited 2018-12-08 23:54)

ClockworkPi is having a "Black Friday" sale on GameShells, only $119 (40% off) today only!


This is the new version of the GameShell with more memory and microHDMI out. It runs Pico-8 and is my favorite Pico-8-capable handheld to date.

I am not affiliated with ClockworkPi, I'm just passing along the info. Enjoy!

P#59299 2018-11-23 12:20 ( Edited 2018-11-23 17:20)

View Older Posts
Follow Lexaloffle:        
Generated 2020-11-28 11:10 | 0.125s | 2097k | Q:93