Log In  
BBS > Lexaloffle Community Superblog
This is a combined feed of all Lexaloffle user blogs. For Lexaloffle-related news, see @zep's blog.

All | Following | PICO-8 | Voxatron | General | Off-site

Hey All! PICO-8 0.2.6b is up now up on lexaloffle, Humble, itch.io, and for PocketCHIP and web (Education Edition). Note: you'll need to update to 0.2.6b to play new carts and SFX snippets created in 0.2.6!

Inverted Draw Operations

Thanks to @p01 for nudging me about this one! Filled draw operations (circfill, ovalfill, rectfill) can now be drawn inside-out: every pixel outside the area is drawn instead of every inside pixel. This can be controlled in a way similar to setting the fill pattern per draw call: first poke(0x5f34,0x2) to enable inverted draws, and then set bits 0x1800 in the colour argument. Here is a snippet to blank out everything except a circle in the middle (that changes size):

circfill(64,64,50+cos(t()/4)*10,0 | 0x1800)

And a short program that draws a tunnel:

function _draw()


    -- hold ❎ to skip fill
    cc = circfill
    if (btn(❎)) cc = circ

    for z=7,1,-1 do
        local sx = cos(z/15+t()/4) * 50
        local sy = sin(z/15+t()/4) * 50
        cc(64+sx/z,64+sy/z,64/z, 7+z | 0x1800)

High Memory Video Mapping

Before 0.2.6, display memory and spritesheets could be mapped to each other (at 0x0000, and 0x6000). They can now also be mapped to one of the four high 2k sections at 0x8000, 0xa000, 0xc000, and 0xe000, as long as they don't overlap with the map mapping which takes precedence. There is a nominal cpu cost when a mapped region changes between graphics and map, but otherwise changing mappings is "free" apart from the poke() call overhead.

This was a previously rejected wishlist feature, but due to a bug discovered (and rightly abused!) by @StinkerB06, it seemed proper to offer this as a substitute before that bug is "fixed" in a future version. Well played!

Here's an example of moving the spritesheet to 0x8000 so that 0x0 can be used for something else. Just a reminder of a confusing gocha: remapping the spritesheet remaps the whole memory area 0x0..0x1fff. So once @0x5f54 is set to e.g. 0x80, even memory functions like memcpy, memset that operate on 0x0..0x1fff will be operate on 0x8000..0x9fff.

-- copy spritesheet to 0x8000
-- clear spritesheet at 0x0 to prove it is no longer used!
-- remap spritesheet to 0x8000
-- draw something to prove it worked
spr(1, 50,50)

Waveform Instruments

Waveform instruments work roughly the same as SFX instruments: they each take up one SFX slot worth of data (SFX 0..7), and can be triggered from a regular SFX. But instead of treating the 64 bytes of note data as a regular SFX, they are used to represent 64 8-bit samples of a short looping waveform. Click on the new toggle button at the top right of the SFX editor to draw a waveform, and optionally pitch it an octave down with the "bass" toggle button. Waveform instruments can be used from inside SFX instruments, and also observe the detune, reverb and dampen filters.

Here are a couple of short demos (excuse the new WIP player -- it needs an initial tap to load it for browser compatibility). The first pattern shows some custom bass and lead instruments that are quite different from the built-in waveforms. Patterns 2&3 are more subtle, but those two instruments are also quite tonally different from any of the standard ones.


I think that doodling custom waveforms is great fun and opens up a new world of possibilities, but of course that in itself does set off alarm bells in terms of fantasy console design. I've come to view them as a worthwhile source of complexity that feels playful rather than overwhelming, and without creating a discontinuous jump in the "PICO-8 sound". Having said that, I'm sure I'll look back one day at earlier PICO-8 music with nostalgia for its particular simple charms. Here's a fitting tune by @ridgek to send off the old version!

Cart #fairwellfairfriend-0 | 2023-11-20 | Code ▽ | Embed ▽ | No License

Music Scale Snapping

A low-key (ha!) feature of PICO-8 since very early on is that holding CTRL while drawing frequencies snaps each note to the C minor pentatonic scale. This is useful for both sound effects and music -- you can't really go wrong walking up and down (or jumping around) those 5 notes.

In 0.2.6, the scale that is snapped to while holding CTRL can now be customized in the music editor. There is a toggle button at the bottom right to switch between volume and scale snapping. Click on the keyboard to toggle scale selection mode. There are two buttons for transposing (<<, >>), 3 preset scales, and an invert button to get 3 more:

Dim   Diminished 7th    // invert to get a whole-half scale
Maj   Major scale       // invert to get pentatonic
Who   Whole tone scale  // invert to get.. the other whole tone scale

Changing the scale does nothing to alter the existing SFX -- it is applied only when holding CTRL and drawing frequencies.

A Little Music Theory

What is a scale anyway? Very roughly speaking, it is a selection of notes that are chosen to have a particular character or mood when used together. You might already be familiar with the scale formed by all of the white notes on a piano (or using keys qwertyu in PICO-8): C Major. Hit the Maj preset button to select this scale, and hold down CTRL to doodle a sound (spd:1) or melody (spd:16) in frequency mode.

Inverting the major scale (hit Inv) gives an Eb minor pentatonic scale, which is another name for all of the black notes. Try doodling some shapes again, and see how different that sounds. I think pentatonic scales are the most useful for starting out with melodies and sound effects, with its bright, resonant sound. To get from Eb minor pentatonic back to the default C minor pentatonic scale, hit << 3 times to transpose down 3 semitones. Examples of major and pentatonic scales are given in the first 2 patterns:


The other two scale presets also have their own distinctive character, with examples above in patterns 2..4. Who for a wholetone scale (every second semitone -- pattern 2), gives a floating ethereal feeling. Good for things like "falling down a hole" or "found a secret level". Dim for a 4-note diminished 7th scale (every third semitone -- pattern 3) gives something more unresolved ("entering a hidden chamber", or "a boss appears"). Inverting the diminished scale gives the whole-half diminished which has an even more mysterious quality that is more like "that lever triggered something but we don't know what it is yet".

These are oversimplified and silly examples, but I hope it gives you an idea of the kind of things you can explore with scales! If you'd like to know more, I highly recommend @Gruber's tutorial series that has a lot of handy music theory weaved in and also @bikibird's interactive music theory tutorials.

Handheld Improvements

With the rise of handheld devices like the RGB30 and Miyoo Mini Plus, there are many more handheld users of PICO-8 now (welcome aboard!). 0.2.6 has a few adjustments to make life easier:

Metadata Mending

When favouriting a bbs cart in 0.2.5g using the typical RGB30 / MM+ configuration, it was showing up as a local file with no metadata (blue cart icon instead of orange). Not a huge problem, but those carts can not show their full title, author and lose the ability to auto-update and find similar carts.

0.2.6 fixes that bug, and also deals with those carts by pinging the bbs for metadata when they are opened. So to "mend" such a bbs cartridge that has a blue label in the favourites list, just open it once while wifi is enabled.


This is an option in config.txt, that treats the first n controllers as if they were a single merged controller. This is useful in situations where you want to use the built-in buttons on a handheld device, but then later plug in a controller (e.g. when you connect it to a TV), but want that controller to also be used for the same player. To set up PICO-8 for such a system, use merge_joysticks 2 in config.txt.

Shutdown from Options

You can now close PICO-8 from the options menu while playing a game. This is handy for devices that do not have a 'kill app' option / button combination. Previously it was necessary to first exit to splore, then open a cartridge menu and use the options menu from there.


Mac Universal Binaries

PICO-8 now ships with native support for Apple silicon, as well as intel versions bundled as a universal binary. The exporters produce executables in that same universal format. To do this, I had to bump the minimum required MacOS to 10.8. I know there are still a few of you out there using PICO-8 on older Macs that will otherwise become doorstops. I don't have a good solution for this yet, but later on I'll look at setting up a legacy build system for such machines if there is sufficient demand.

Menuitem Button Filtering

By default, pause menu items creating using menuitem() respond to any button press, including left and right. This is handy in some situations (toggle buttons) but annoying or dangerous in others (clear game data). menuitem() can now take a bit mask in the high bits of the first parameter, indicating which button presses to ignore. Bits 0x100 and 0x200 mean LEFT and RIGHT, so if you can ignore those button presses with:

menuitem(0x301, "option 1", my_callback)

Improved Search

The search box in splore and on the bbs now returns more sensible results. Posts are sorted by number of stars, so if you type in "celeste", the first two results will be the original Celeste and Celeste 2. Imagine that! As a side-effect hack, you can search for " " and get an all-time highest starred cartridges list.

While working on search and scanning the BBS for preprocessor breakage, I made this collage of the 14 pages of featured cartridges that are now available (out of around 18k published carts). W00t! \o/

Preprocessor Removal

This is an internal change, but worth mentioning. 0.2.6 no longer uses a preprocessor at all (thanks to z8lua), so all of the code is running through a (modified) Lua 5.2 implementation as-is. Most of this happened in 0.2.5*, but there were a few leftover language features like short form print (using ?) and number parsing. 0.2.6 now also allows the use of "do" instead of "then" in if statements, which is something the preprocessor allowed (by accident!) and a number of early carts use it. There is a small amount of breakage of older carts that have things like unclosed or otherwise ill-formed comments that shouldn't be accepted. For those types of cases, I'm gradually working through older carts to make stealth fixes where needed. At this point the vast majority of existing carts should run as expected -- please do let me know if you see something weird that isn't a syntax error, which I can scan the BBS for automatically.


There are 2 new social usernames addable to your BBS profile: twitch.tv, and bluesky which is now open for signups without an invite. My social network of choice is still the fediverse / mastodon, but I think bluesky has the potential to coexist and be a nice place in the future ~ especially if they end up supporting gifs.

-> Add social handles to your profile

-> Find other lexaloffle users on bluesky / twitch



Added: 2 more players worth of mappable keyboard controls in config.txt (button_keys)
Changed: finished removing preprocessor; was causing e.g. "function --[[oops]]f() end"
Changed: "do" can be used instead of "then" // a bunch of older carts were able to do this via preprocessor
Changed: removed CTRL-O as a way to open the cpu profiler so that custom devkit carts can use it
Fixed: When bbs carts folder is inside root_path, opening favourite while offline clobbers item metadata
Fixed: Missing metadata for favourited carts; bbs is pinged to grab metadata and splore item is mended on play
Fixed: save() / export() called from headless script on existing file only overwrites every second file
Fixed: pasting music pattern data does not recreate sfx instruments that do not already exist in target cart
Fixed: Format string when exporting .wav is unstable / insecure
Fixed: bad block scope caused by nested short forms e.g. if (1)?"foo" // #dinkykong, /bbs/?tid=140066
Fixed: >><=, <<>= operators missing (from 0.2.5d)
Fixed: atan2(1, 0x8000) returns 0.25 (should be 0.75)
Fixed: audio crackling on Miyoo Mini Plus (regression in 0.2.6, but unreleased)


Added: Custom waveform instruments
Added: Configurable scales in music editor (for using ctrl to snap to scale)
Added: Inverted draw operations
Added: Video and spritesheet memory addresses can be mapped to 0x8000, 0xa000, 0xc000, or 0xe000
Added: stat(111): same as stat(109) except returns a higher value on web to overfill audio and reduce crackle
Added: menuitem(0x300|index, ...) ignores left and right button presses. 0x7000 to ignore X/O/MENU.
Added: config.txt "capture_timestamps 1" to use timestamps as suffix in screen/video capture filenames
Added: (Mac) Universal binaries, also generated when exporting
Added: (Mac) Updated to SDL2 2.28.5 (-> minimum MacOS version is now 10.7)
Added: config.txt:merge_joysticks to map n controllers to a player (e.g. to plug a gamepad into a handheld)
Added: config.txt:use_wget to use wget for downloads instead of libcurl (wget must be installed)
Added: SHUTDOWN PICO-8 from the options menu while running a cartridge in -splore mode
Added: Preserve window position and size when switching to and from fullscreen mode
Changed: ADD(TBL, X, NIL) now behaves the same as ADD(TBL, X) (used to produce an out of bounds error)
Improved: Moved internal globals out of top level to improve vm perf on carts with no _draw()
Improved: Boot time and memory usage reduced on low end machines
Fixed: 0x808 audio produces buzz on web browsers that mix at 48000MHz (ref: #rp8, #waterflakes)
Fixed: When bbs carts folder is inside root_path, favourited carts show up as local files without titles
Fixed: (from 0.2.5d) compound operators (a+=1) cost more than their expanded equivalents (a=a+1)
Fixed: cstore out of range when storing to self while running a bbs cart causes segfault
Fixed: tab complete on non-existant directory adds garbage to commandline
Fixed: can not navigate songs patterns with -/+ when pattern is empty
Fixed: backspace/del removing cart from favourites list even when inside the fold-out cartridge menu

That's all for now -- I'll catch you in a couple of weeks with a new machine!

P#142119 2024-02-28 13:33


My first post, how exciting! I'm creating a platformer with my friend, and the first publishable demo with movement is done.

Cart #mustapekka-0 | 2024-02-28 | Code ▽ | Embed ▽ | No License

We don't yet know what the game is going to be about. The code is based on the code of jelpi. Feedback is welcome!


P#142118 2024-02-28 13:31

Cart #boggle_zavale-0 | 2024-02-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


tool to play boggle (not a game) only Spanish supported for now

puzzle generation:
timer controls:


press shake to get a new board and start the timer
play and stop are obvious
press the timer itself to change the amount of time
there is an option in the pause menu to go back to the last board (used in case you shook the board by mistake)
(to be added in the future, option to switch languages, English is ready to be added, just need to add the option in the pause menu)


use the tool to play boggle however you want

Behind the Scenes

the shake first chooses randomly a place for every die and then chooses a random face for each one


we'll get someone for the music and sound fx soon,,
my sister made us addicted to this game when she bought one and then one day she went on vacation and took the board with her,
had to make a little tool to be able to keep playing


P#142116 2024-02-28 12:57 ( Edited 2024-02-28 12:58)

i have been working on a game for the past weeks in the education edition of pico 8 but i have only been using the ctrl s function instead of saving to my computer with "save ..." i refreshed the tab today and when i tried to load the file it said "could not load." for some reason i decided to save another empty file with the same name so now if it try and load it it comes up with a empty file. the last time i have actually saved it to my computer was a while ago and i have made lots of progress since. i am uncertain whether it can be retrieved but any help would be appreciated!


P#142103 2024-02-28 03:27

Cart #hearty-0 | 2024-02-28 | Code ▽ | Embed ▽ | No License

A B-Day gift for a little girly!

look at the little hearts...

In this game you mainly look at cute thing and click at emojis!
And for that you two modes, Arcade and Zen.

Arcade mode

Emojis will come flying around and you have to click on them before time runs out! Whenever you click at one, you regain a little time, but everything starts to go faster! Test your reflexes in this challenging mode.

Zen mode

The emojis are still flying around, but they are much more chill. Now there is no timer and each emoji will give you a little compliment. They have plenty to say about you!


The game is mostly played with clicks, so you can either play on the computer with a mouse, or on a phone!
Just note that if you want to restart the game, use the PICO-8 menu by clicking enter, or use the button on the screen.

Final Words

This silly game serves as a present, a little something to maybe get a smile out of you... And I hope it befits your own cuteness. ;3

P#142089 2024-02-28 02:41

I am a noob at Pico 8 and I really need help with map collisions. I tried using Nerdyteacher tutorials but they don't work. I tried using the simple collision function cartridge and it also does not work and I don't know what to do now.

P#142100 2024-02-28 02:08 ( Edited 2024-02-28 02:10)

Cart #idiots-5 | 2024-02-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

I don't know why I made this. I went in with no plan and it sure shows. I might update this at some point once I get any more ideas of dumb things I could do with it

P#142092 2024-02-28 00:03 ( Edited 2024-02-28 05:38)

Cart #tikiruhoko-1 | 2024-02-27 | Code ▽ | Embed ▽ | No License

GD-8 A Janky GD Demake that isn't even finished!

This is my first ever PICO-8 "game" and my first time ever making a game in general

P#142091 2024-02-27 23:28 ( Edited 2024-02-27 23:29)

Cart #pic0pop-4 | 2024-02-28 | Code ▽ | Embed ▽ | No License

Here's my bubbleshooter clone. Use L/R to aim and Z/O to launch. Ultimately you have to eliminate all bubbles to progress to next level, but there's the added challenge of trying to pop all the star bubbles in the level. You have to actually land adjacent to these to make them pop. Making them fall doesn't count.

I made a little level editor tool for myself to help in creating these levels and tweaking them later. I'll be honest. I didn't find designing these levels to be super interesting, but I tried to at least make them possible. I probably need to study a bit to find out designs that make these levels fun to play, but as far as mechanics I'm reasonably happy with this and willing to call it my "first" complete pico-8 game.

If people think it's fun or want to see more, then maybe I'll revisit this and continue to add levels and QOL to this project.

Edit: fixed the hard coded level. Should play them correctly now.

P#142086 2024-02-27 22:37 ( Edited 2024-02-28 10:37)

Cart #shoot_game-0 | 2024-02-27 | Embed ▽ | License: CC4-BY-NC-SA

i found this. we made it in 2019. happy times!

P#142083 2024-02-27 22:00

Cart #pescar-0 | 2024-02-27 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#142079 2024-02-27 21:51

Cart #an_adventure_game-1 | 2024-02-27 | Code ▽ | Embed ▽ | No License

P#142070 2024-02-27 20:08

the original sparkler

Cart #sparkler-0 | 2024-02-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

thanks to @Ummmm_ok ,we have another version which have a smoother line
Cart #sparkler_alt-1 | 2024-02-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


A tiny sparkler simulator, a game or a tool, or whatever you think.
Hope you enjoy:)


C or mouse left to fire
X or mouse right to take a new one
F9 whenever you want to save a gif of last 8 seconds(only for downloaded version)

P#142028 2024-02-27 05:07 ( Edited 2024-02-28 02:19)

Cart #ignorethis-0 | 2024-02-26 | Code ▽ | Embed ▽ | No License


P#142000 2024-02-26 15:55

Cart #grave_defence-0 | 2024-02-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Grave Defence is tower defence game, in which you control a ghost tasked with defending the souls resting in a mausoleum from the incoming hordes of skeletons!


  • Arrow keys to move the character
  • X key to place and pickup torches


Torches must be powered by near by Power Flames. Once powered they will shoot enemies within range.
Shooting torches will consume the energy of the flames they are linked to.

Power Flames can die out if over tapped so keep an eye out for their size.
However, Flames will recharge over time unless fully extinguished.

Torches can be relocated; the mausoleum must be protected and you will need to move around the map to do so!

Different Power Flames

Power flames come in three types represented by their colors:

  • Yellow flame: basic flame, the most balanced option.
  • Blue flame: weak flame, can power more torches than yellow flames.
  • Red flame: strongest flame, will cause the most damage, but is drained faster than other flames.


I have recently been getting into game development and learning to work with pico-8.
After the mandatory Lazy Devs tutorial I decided to challenge myself to develop a complete game in two weeks, that would include functioning mechanics, art and some basic music. Grave Defence is the end result!

Nerdy notes

The actual code is a bit of a mess; there are still chunks of code for mechanics that have been scrapped because they ended up being unintuitive and a hindrance to the fun.
These include an interaction system that would display a cursor based on the last movement direction of the player as well as collision system that initially would involve most sprites in the map, but in the final version only worked with the fire ashes (thanks to SpaceCat and this video for the collision logic).
I might get around to cleaning it up in the future, if a feel there is something interesting I would like to add to the game.

Credits and thanks

  • Developed by Elfamir, that's me.
  • QA Tested by my lovely partner ♥

Thanks to the Pico-8 community as a hole for all the great material and inspiration.

If you read all the way to here, congrats!
I would greatly appreciate any feedback on the gaming experience as I am looking to improve my game dev skills :)

P#141999 2024-02-26 15:50 ( Edited 2024-02-26 19:58)


Cart #gruniozerca_v1-0 | 2024-02-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


Use the arrows to run the guinea pigs, which catch vegetables in a rush. Press X to change the guinea pig to the right one.


Grunio (dark) and Dida (light) love to munch vegetables. But Grunio prefers carrots and Dida prefers parsley. Crunch the vegetables falling from the sky keeping in mind the guinea pigs' preferences and making sure the vegetables don't fall to the ground.

Behind the scenes

Gruniożerca is a series of games started in 2016 by Luke "dizzy9" Kura. At the time, he created a small arcade game for the NES/Pegasus console and donated its cartridges to the arhn.eu website's Gramytatywnie charity campaign. Starring: Grunio, the guinea pig™, the site's mascot. Grunio has become a small internet phenomenon and has lived to see two (internationally award-winning, seriously!) sequels in recent years. In 2017, Dizzy agreed to release the source code for the first part of the game online. That one is available here. With its simple gameplay and adorable mascot, Gruniozer has become a well-liked "entry-level project" for novice developers, and the task of porting it to all possible platforms a small challenge for homebrew developers.

Many thanks to the aren.eu team for their work <3



  • Powerups
  • Leaderboards
  • Music
P#141989 2024-02-26 08:09

Cart #dosadegofo-0 | 2024-02-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Aidez les moutons à traverser la rivière !
les moutons sont un peu retord, il faut parfois aboyer...

P#141961 2024-02-25 20:03 ( Edited 2024-02-25 20:04)

Read all steps before proceeding with the installation. Feedback is appreciated!

  • If you want to avoid the headache of Step 4, I recommend using a Pi or other Linux computer to write the installation image to the SD card! It can be the same Pi you use for the Lite installation, you just need to switch SD cards to change OSs.

Hello everyone,

I haven't seen any tutorials for doing exactly this so I thought it would be helpful if there was a guide for anyone who specifically just wants a little portable machine that launches PICO-8 after booting, and without using Retropie or a desktop environment. This installation won't have a super fast boot like PICOPi (https://github.com/keints/picopi) but it will have online functionality and will be a great starting point for a physical fantasy console project.

The whole process takes about 45 minutes to complete

Things you will need:

  • The latest PICO-8 for Raspberry Pi zip: https://www.lexaloffle.com/games.php?page=updates
  • Raspberry Pi (any model) setup with a display and keyboard
  • SD card or microSD card (depending on the model of Pi) at least 16GB
  • SD card reader
  • Windows/macOS/Linux computer with internet access (this can also be a Pi, in fact it can even be the same Pi if you have two SD cards!)

    • Optional: USB thumb drive to transfer files from your PC to the Pi
    • Optional: Second SD card to install a desktop version of Raspberry Pi OS to transfer files to your "Lite" installation

Step 1: Download & install the latest Raspberry Pi OS Lite image

You can get the latest Raspberry Pi OS installation images here: https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-32-bit

  • We'll use the "Lite" image, but this tutorial also works with the desktop versions if you change the boot option to the command line

Follow these instructions to write the "Lite" image to your SD card: https://www.raspberrypi.com/documentation/computers/getting-started.html#installing-the-operating-system

  • If you flashed the image with a Linux PC or a Raspberry Pi, the SD card should be automatically mounted. You can copy your PICO-8 zip to the rootfs partition's /home/pi/ directory now and skip Step 4 later!

Step 2: Setup Raspberry Pi OS

If you are using HDMI for your display, make sure your Pi is connected to your monitor before powering the Pi on!

When your new Raspberry Pi OS installation boots for the first time, it will generate SSH keys and then reboot shortly after. You will then be asked to select your keyboard layout. If you don't see yours, use the up and down arrow keys to select Other and press Enter. A complete list will be displayed. Select an option and press Enter.

  • If your keyboard has an English (US) layout, be sure NOT to pick the default English (UK) option or your keys will not be mapped correctly! This can be changed again later with the raspi-config tool.

Next you will be asked to create a username and password. After creating these credentials, the system will prompt you to log in. Once you've logged in, you should see the command prompt below


Type sudo raspi-config and press Enter. The screen will turn blue and a menu will be displayed.

(If you are using a wired internet connection, you can skip the following paragraph)

  • The option 1 System Options should be selected. Press Enter to confirm the selection. Now the option S1 Wireless LAN should be selected. Press Enter and use the up and down arrow keys to select your country. A dialog box will confirm your selection, and you will next need to enter your Wi-Fi SSID and password.

Once you are connected to your network, select 8 Update on the menu and press Enter.

After the raspi-config tool has been updated, you should be automatically returned to the first menu. Select 1 System Options again and then S5 Boot / Auto Login. Select B2 Console Autologin and press Enter.

  • This is also a good time to setup your locale and timezone should you choose to, but it isn't necessary for the purpose of this tutorial.

Press the right arrow key two times and Finish should now be highlighted orange at the bottom of the menu. Press Enter. If you are asked if you want to reboot the Pi, select No.

Step 3: Update Raspberry Pi OS and install PICO-8 dependencies

You should be back at a command prompt again that says


Type sudo apt update and press Enter. This command checks if there are any newer versions of your installed software packages. If any packages can be upgraded, you can use the command sudo apt upgrade to download and install them. Upgrading packages may take several minutes.

Once you've done that, type sudo apt install libsdl2-dev pulseaudio and press Enter. A big list of additional packages that must also be installed will be displayed. Press Enter again. This process will take several more minutes to complete.

When the command finishes, the prompt will return. Type reboot and press Enter.

  • If you are taking your SD card out of your Pi to transfer your zip to it in the next step, type shutdown now instead of reboot and wait for the flashing green light on your Pi to shut off completely before removing the card

Step 4: Copy and extract your PICO-8 zip to your Pi user's home directory

The zip goes in the directory /home/[username]/ on the rootfs partition of your SD card.

There are several ways you can go about completing this step. Here are three:

  • 1) SSH This is probably the most optimal way to copy your zip over if you don’t have a Linux computer or an additional Raspberry Pi OS Desktop installation, though it is a little more involved. You can find instructions for copying files to the Pi via SSH here: https://www.raspberrypi.com/documentation/computers/remote-access.html#ssh

    • The Pi is internet-connected at this point so ensure that your password can't be easily brute-forced! I recommend disabling SSH again after copying over the zip
  • 2) USB drive You can learn how to access a USB thumb drive via the command line here: https://www.raspberrypi-spy.co.uk/2014/05/how-to-mount-a-usb-flash-disk-on-the-raspberry-pi/

  • 3) Another Linux installation If you have a Linux OS with a desktop (or a second SD card for your Pi with Raspberry Pi OS Desktop), you can just insert your Raspberry Pi OS Lite SD card into a card reader and just click and drag the zip onto it using a file explorer.

You can use the unzip command on the Pi to extract the zip once you've transferred it.

Step 5: Create a startup script

Now that we have our PICO-8 zip extracted to our home directory, we can create a script that executes the appropriate binary after logging in, which should happen automatically after boot

At the familiar command prompt, type nano startpico8.sh and press Enter. This will launch a text editor called nano with a new file open called startpico8.sh. Add the following two lines:

echo "Starting PICO-8..."


  • Optionally, you can boot straight to SPLORE with this line instead:
    ./pico-8/pico8_dyn -splore

NOTE: On older Pi models, you may need to add a line that just says sleep 15 above the echo "Starting PICO-8..." line to allot time for startup processes to finish. This unfortunately adds 15 extra seconds to the startup, so only add the line if you can't get PICO-8 to launch correctly after login!

Press Ctrl+S and then Ctrl+X. You should be back at the command prompt.

Next type chmod +x startpico8.sh and press Enter. Then type ./startpico8.sh and press Enter again. If everything worked up to this point, PICO-8 should startup!

Press Ctrl+Q to shutdown PICO-8, then type nano .bashrc and press Enter. Press and hold the down arrow key until the cursor reaches the last line of the file. Press Enter to create a new line, then type ./startpico8.sh and press Enter. Now press Ctrl+S and then Ctrl+X.

Back at the command prompt, type reboot and press Enter. After the Pi boots, it should immediately login and launch PICO-8! :D


  • No sound
    If there is no sound, go back to the raspi-config tool and select System Options and then Audio and make sure audio is being routed to the correct output device.

  • The command line doesn't show the usual prompt or display PICO-8 after logging in
    Usually this is because PICO-8 starts and bash runs in the foreground. Try pressing Ctrl+C and wait to see if the command prompt appears after a few moments. I've found that adding the sleep 15 command to the first line of the startup script avoids this issue. If anyone knows what causes it any info would be appreciated!

  • A number of SDL-related errors are displayed, but no PICO-8
    Happens because PICO-8 starts too early after login. Press Ctrl+C to terminate the process and try adding the sleep 15 command before your echo "Starting PICO-8..." command in the startup script.

A few notes

  • While the goal is to effectively create a physical fantasy console, remember that the Raspberry Pi is still a real computer with an OS that is connected to the internet. It's good to upgrade packages every so often to fix issues and keep your system secure. If you've completed this tutorial, you should now know how to check for updated software packages and how to install them. If this sounds like a hassle, I would recommend considering keeping your installation offline. Or you can learn how to automate the process of keeping your system up to date. The world is your oyster!

Hope this was helpful! If this is your first experience with a Pi or Linux, I can promise you it isn't normally this much work to get an OS setup. You can always install the desktop version of Raspberry Pi OS (or any other OS) and use it just like you would use a Windows or macOS computer. I hope you'll continue to explore and learn how Linux works, maybe you can write a better guide than this one! See if you can figure out how to get the Pi to shutdown by itself after shutting down PICO-8 ;)

P#141946 2024-02-25 19:21 ( Edited 2024-02-28 14:29)


j'ai créé un jeu sur pico 8, et j'ai besoin de vos connaissances pour corriger des erreurs.

Lorsque l'on crée des sprites, nous avons plusieurs pages de sprites. 0, 1, 2 ,3.
J'ai rempli tous les sprites pour mon jeu et utilisé les 4 pages, mais dans mon jeu, la page de sprite 2 est générée automatiquement, au hasard, dans les emplacements vides. Cela fait un désordre dans les cases que je n'occupe pas dans mon jeu. Connaissez vous la solution svp ????

Je Vous le montre dans l'exemple ci dessous...

P#141960 2024-02-25 19:20

Cart #snake_psqnt-0 | 2024-02-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA


Another snake game but this time another snake spawns every 4 seconds and follows in your exact path. Gets very challenging!


arrow keys move the snake



P#141956 2024-02-25 18:44
View Older Posts
Follow Lexaloffle:          
Generated 2024-02-28 16:08:27 | 0.196s | Q:100