Log In  
[ :: Read More :: ]

Cart #splat_lines-0 | 2023-02-21 | Code ▽ | Embed ▽ | No License

Just a random effect.

P#126122 2023-02-21 18:27 ( Edited 2023-02-21 18:28)

[ :: Read More :: ]

I don't have any reproduction steps, however one of the featured carts crashed on me earlier today.

The error message that it produced makes me think this is coming from the internals of pico-8 unfortunatly the text is truncated.

I DO NOT have any replication steps. Others have suggested that this error occurs when an error happens with a coroutine.

I did check the code of the cart and the word HEADER didn't appear in it.

P#125904 2023-02-15 18:55

[ :: Read More :: ]

Cart #shmup_show_launch-5 | 2022-10-01 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is just a cart to launch the games I've been given premission to launch from the basic shump showcase jam.

This jam was run by @Krystman to go along with his video series. https://www.youtube.com/watch?v=81WM_cjp9fo&list=PLea8cjCua_P3Sfq4XJqNVbd1vsWnh7LZd

I asked for permission from people to add their carts here. And I have done so. I'd like more entries and also would love if they would provide me with a 24x24px image to represent their cart.

If anyone else has a cart that they would like added from the shmup showcase then please let me know and I'll add it.

If any aspiring musician wants to write a bit of background music for this then please feel free.

Navigate using up and down press X to launch cart. If you want to return to the launcher then this can be done from the pause menu of the games.


  • Added Galaxis, Cross Gunr, Eye of Yox and shmdown.


  • Added icon for Simple Shooter Bullet barrage.
  • Added Dart-07
  • Added Nightly Air Patrol


  • Added Fulmosago


  • Added Dauntless Dog


  • Added Starsucker
P#118135 2022-09-28 22:42 ( Edited 2022-10-01 22:24)

[ :: Read More :: ]

Cart #spline-2 | 2022-10-01 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

This is a tool for creating and editing splines within your game. I used this initally for a shmup i was working on where I wanted to create an intresting enemy flight pattern.

The black area represents a 128x128 screen.

Just click in the points you want then press CTRL+C to copy to clipboard This will copy all points to the clipboard as a string.

This string can be then used within your game.

This is what I use it for.

You can test out pasting of splines here. Also this cart has code for handling the splines.

Cart #spline_demo-0 | 2022-10-01 | Code ▽ | Embed ▽ | No License

How to use

Reading code

copy the following code to your cart (this can also be read from tab 2 of the demo cart)

--distance vunerable to overflow
function pdist(p1,p2) 
    return ((p2.x-p1.x)^2+(p2.y-p1.y)^2)^0.5

--cubic bezier single dimension
function cub_b_p(a,b,c,d,t)
    local tm=1-t
    return tm*tm*tm*a+

--cubic bezier x&y
function cub_bez(p1,p2,p3,p4,t)
    return {x=cub_b_p(p1.x,

--read splines
--expected table with multiple
--of 8 entries.
function read_spline(points)
    local curves,dists,td={},{},0
    local limits={0}
    for i=1,#points,8 do
        local pts={}
        for j=i,i+8,2 do
            add(pts, {
        local function c(t)
            return cub_bez(
        local d=0
        for j=0x0.1,1,0x0.1 do

    local l=0
    for d in all(dists) do


    local function spl(t)
        if t==1 then 
            return curves[#curves](1)

        local i,l=1,0
        while t>=l do
            l=limits[i] or 1
        local ol=limits[i-1]
        local fact=1/(l-ol)
        local t2=(t-ol)*fact
        return curves[i-1](t2)
    --return curves
    return spl

2 Generating curves

Generate curves using the main cart that represent how you would like your mobs to move. Just click different points into place. Note that the black area represents a whole screen of 128x128 pixels.

You can click and drag points around, press delete to delete the last point. When you are happy with your curve press CTRL+C to copy a string to the clipboard.

NOTE: Sometimes the string doesn't copy correctly in the web player, if this happens from pico-8 you can load #spline and run the cart locally. The copy seems far more reliable when running in pico-8

Paste the following into your _init() function.

path=read_spline(split(*your pasted string*))

Then whenever you want a point along the path you just call path using the decimal of what portion of the path you want covered.


local point = path(0) Will give you the start point of the path
local point = path(0.25) Will give you a point 1/4 the way through the path.
local point = path(1) Will give you a point at the end of the path.

 local point = path(0.5) --half way
 spr(1, point.x, point.y) --draw sprite 1 at this point.

Feel free to look at the demo cart for code that uses a sprite.


Now cart accepts pasting of splines not just upload.
Now curves are more round by default


Thanks to @pancelor for the idea about the splines.
Thanks to @Heracleum for assistance writing up how to use the cart.

P#117952 2022-09-25 17:35 ( Edited 2022-10-01 22:09)

[ :: Read More :: ]

Cart #stripe_print-0 | 2022-07-14 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Hi All,

This is just a quick util method for printing in multiple colours per line of pixel. Its probably been done many time before but this is just my take on it.

The function in question is 41 tokens:

function stripe(txt, x, y, cols)
    local w = print(txt,x,y,0)
    for i=1,#cols do

cols is an array of colours which should be at least as large as the height of the text being printed. For normal text this will be 5 values, but if split into multiple lines or you print bigger text then you need more values.

In the cart I've demonstrated some uses of it including a scrolling table that could be used as an effect.

P#114291 2022-07-14 09:59

[ :: Read More :: ]

According to the manual

> Additionally, when X, Y are not specified, printing text below 122 causes the console to scroll. This can be disabled during runtime with POKE(0x5f36,0x40).

However I've got a cart that has a performance issue as soon as the print leaves the screen.

Cart #gejegufku-0 | 2022-07-07 | Code ▽ | Embed ▽ | No License

Adding in

poke(0x5f36,0x40) to the cart fixes the issue so the performance issue is to do with screen scrolling.

To see in the above cart press X to start the game and wait for the ship to leave the bottom of the screen

P#114042 2022-07-07 22:42 ( Edited 2022-07-07 22:44)

[ :: Read More :: ]

Following lazy devs tutorial sort of at https://www.youtube.com/watch?v=81WM_cjp9fo&list=PLea8cjCua_P3Sfq4XJqNVbd1vsWnh7LZd
29th Jan 2023

Cart #shootinator-6 | 2023-01-29 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

I think this just has some music changes and small tweaks to the previous version.

Music by LokiStriker https://lokistriker.itch.io/

I'm so happy with the music.

Cart #shootinator-5 | 2023-01-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Below is the beginnings of level2 I've uploaded as a separate cart but its just uncomment some code to run this level.

Cart #shootinator_l2-0 | 2023-01-22 | Code ▽ | Embed ▽ | No License

Added title text and level intro.
Changed life display from the hearts to ships as comments seemed to be confused when all hearts were empty why wasn't the game over.
Tweaked shooting speed.


Cart #shootinator-3 | 2022-10-12 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Nearly a game now. This is what what submitted to the basic shmup showcase.


I've more or less run out of steam.


Some gameplay added still very much a work in progress.

Cart #shootinator-1 | 2022-07-21 | Code ▽ | Embed ▽ | No License

Cart #shootinator-0 | 2022-07-03 | Code ▽ | Embed ▽ | No License

So far this is what I've got no gameplay as of yet.

P#113933 2022-07-03 17:17 ( Edited 2023-01-29 22:22)

[ :: Read More :: ]

Hi All,

I've a suggestion that I believe has some value to people making tooling chains is the ability to store metadata within the text version of a cart cart.

This would allow for saving anything that an external editor of a p8 file would want to save and restore upon loading a cart.

For example storing custom pallets or even palette transitions means that they could draw their sprites and see how they look in a fade/palette swap. If they had a fade that they liked they could work in the sprites in an external tool. Anyone else using the same tool could see the settings that were applied.

Pico8 could also store its own metadata there, like the undo history. so if someone reloaded or switched platform they could pick up where they left off.

"save the .p8 on your desktop, move it over to your handheld while you travel, and then back to desktop, and there's no need to get back in the groove manually each time you load up the file" - this is what someone suggested on discord, I'm not naming them in case they don't want to have their name associated with this post.

Even something as simple as linter settings would be useful for people who work together.

How I imagine it would work.

the p8 file is already made of blocks like __lua__ __sfx__ etc. I suggest that another block is put in that pico8 doesn't read but does keep on save. You would be free to specify any limit in size that tools have to agree too.

This could be in any format you like. Raw text, json, a hex byte array similar to the binary blocks we have at the moment.

In this way a tool could use the extra space, but I wouldn't expect this data to be retained when in PNG or any of the other binary formats. It can't be abused to get extra space in the cart as it would not be visible to the user code running within pico8.

I just thought you may appreciate the suggestion as it seems pico8 and picotron are both going down the external tooling path.

P#108983 2022-03-21 21:54 ( Edited 2022-03-22 19:00)

[ :: Read More :: ]

Cart #oath30second-4 | 2021-08-12 | Code ▽ | Embed ▽ | No License

12th Aug

Changed how drifty the main character is. Made the hitboxes more forgiving.

Okay there is no way I'm finishing this in time for the jam.

Most of the time has been just working on the Character's mechanics and nothing else.


Dr Evil Lulzs has just killed your master you vow to get your revenge in 30 seconds. This gives you thirty seconds to reach Dr Evil Lulzs and attack or you will explode violently.

01 Aug

Cart #oath30second-1 | 2021-08-01 | Code ▽ | Embed ▽ | No License

Managed to get some actual gameplay in. Added title screen/intro. Added actual level that can be played through but not completed. Death implemented, music (not mine added) one type of trap entity added.

Got the attack mostly implemented but nothing to attack at the moment :( (it does give you a speed boost however)

27th July

At the moment you can jump, roll, run left/right and nothing much else.


Still to do wall sliding/jumping

  • Attacking
  • unjank the roll,
  • change the hitbox for the roll.
  • Enemy AI
  • Death
  • Level design
  • Trap code
  • Intro sequence
  • Cart Label
  • Optional tutorial section
  • Lame jokes.
  • A game

Intended mechanics

Rolling is slower than running but its good for avoiding things.
Attacking will give you a slight speed boost.
Air friction will be less than ground friction, (so chaining attack and jump should give you more speed)
Intend to do an optional tutorial level where your master trains you.

Tutorial ideas.

Screen one.

Your master is sitting out of reach on the top of the screen.
you: "Why am I wearing red. I thought ninjas should be stealthy"
master: "Ninja secret. Red allows you wall jump"
you: ".."

Wall jump your way to a flag.

Screen two.

Flag on right of screen. low gap with spikes in middle.
master: "Roll past spikes, young tardigrade"
you: "why put spikes in training"

Screen three.

Large gap to jump across:

master: "Attack makes you faster, young sushi"
you: "That makes no sense"

when you attack and jump you can jump over gap
you: "Where did that sword come from"

Screen four

master "you have done well young snotrag"
you: "could you learn my name"
master: ".."
master: "Now for the secret of eternal life"
master: "All you need is ..."
master hit by a flying syringe

you "NOOO Dr Evil LULZS"
you "You killed my master"
you "I will kill you in 30 seconds"

cut to main game.

previous version

Cart #oath30second-0 | 2021-07-27 | Code ▽ | Embed ▽ | No License

P#95330 2021-07-27 08:43 ( Edited 2021-08-12 16:41)

[ :: Read More :: ]

I was told that this may not be too helpful but I thought I'd upload anyway.

Cart #particle_exploder-0 | 2021-07-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Its basically some code to turn an area of the sprite-sheet into an explosion. I haven't referenced other peoples work on this so if there is a better implementation I apologise.

Feel free to reuse any or all parts.

P#95271 2021-07-25 16:29 ( Edited 2021-07-25 16:30)

[ :: Read More :: ]

Hi all,

This is a question I asked on discord, but I thought to get some feedback on here.

Stupid question maybe. I'm editing in vscode. I've put rulers at 32 chars to match the in built editor. How the heck do you all make your code fit inside a pico8 editor horizontally.

I don't mind going over every so often but 32 chars is very very little.

ico_zoom_in = create_icon(0x3844.92ba, 0x9244.3a01, 100, 40)

comes to 62 chars.
even if I rename to be

zi = ci(0x3844.92ba, 0x9244.3a01, 100, 40)

it comes to 44 chars but zi is a horrible name for zoom in icon. and ci is a horrible name for create icon.

maybe something like this.

    local top = 0x3844.92ba
    local btm = 0x9244.3a01
    local x,y = 100, 40

That fits but need to lift a lot of variables out and still c_ico isn't very clear name.

Do you all even consider this?

I find I just can't work with 32 chars.

If people download the carts its hard to read carts in splore. I honestly think we need more resolution in the code editor.

If pixels in the editor were half width It would be a lot easier to fit into the in built editor 64 chars is still difficult to fit, but I think I could make the majority of lines fit into that.

What do you all think? I feel like having code not fit in the editor could be off putting for well basically anyone who uses the internal editor but especially for new people trying to learn.

P#93753 2021-06-19 22:17

[ :: Read More :: ]

Cart #saziwepaju-0 | 2020-12-27 | Code ▽ | Embed ▽ | No License

Not really fun, but I'm uploading to see.

Anyone have any idea how handling should work for a track of approximately this width.

No collision detection.

x to accelerate.

Sprite rotation using a function supplied by @freds72

P#85829 2020-12-27 19:55 ( Edited 2021-01-01 18:31)

[ :: Read More :: ]

Cart #map_zoom-0 | 2020-12-05 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Do you want to zoom in our out of your map during the game this may be for you.

Simple cart to show off the zoom function.

Cursor keys to scroll x/z to zoom in and out.

actual function is as follows

--prints the map zoomed
-- zoom is the zoom factor 2 for twice as big
-- 0.5 for half as big
-- mx = the pixel cordiante of the map to start
-- my = the pixel cordiante of the map to start
-- sx = screen offset x
-- sy = screen offset y
function zmap(zoom,mx,my,sx,sy)
 zoom = zoom or 1
 mx= mx or 0
 my= my or 0
 sx= sx or 0
 sy= sy or 0
    for i=0, 127 do
        tline(0,i,127, i, mx, my+i/8/zoom, 1/8/zoom)

Please feel free to adapt for your own projects.
A better version of this could use a screen clipping rectangle but I wasn't sure if it was necessary or not

P#85076 2020-12-05 17:41 ( Edited 2020-12-05 22:13)

[ :: Read More :: ]

Cart #loca_conda-1 | 2020-11-15 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Inspired by a game on Amstrad CPC this is my attempt make a game in the snake category. This is my first ever pico8 game.

15 Levels
2 Types of enemy, CPU controlled snakes and the vicious seeker.
3 Types of bonus
S to make your snake short
L to gain a new life
Ghost gain one new life every three levels.

I hope you all enjoy this as much as I enjoyed playing the original.

Level music by @SmellyFishstiks

Update v1.1
Minor update to allow input buffering as suggested.

P#83869 2020-11-06 19:00 ( Edited 2020-11-15 21:06)

[ :: Read More :: ]

Cart #pohedoruto-0 | 2020-10-18 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

I wasn't going for a 3d effect, but it looks 3d to me. Feel free to copy/ change

P#83066 2020-10-18 11:43 ( Edited 2020-10-18 11:50)

[ :: Read More :: ]

Cart #tepigiyaga-1 | 2020-10-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

new version adds enemies, 10 levels to complete.

Cart #sehofebari-0 | 2020-10-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Cart #tepigiyaga-0 | 2020-10-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

previous version

This is a unfinished version to see the finished version see: https://www.lexaloffle.com/bbs/?tid=40244

Hi this is my first attempt at making a game. I'm feeling mixed opinions. I was hoping to do a clone of a snakes game called Crazy Snakes from the Amstrad CPC (by Fraggle and Duck). However I feel like the 128x128 grouping is just too small for this type of game, especially if I use 8x8 sprites.

What would you do to improve the gameplay. I've only done three levels so far. I wanted to add in enemy snakes and one other type of enemy like the game I'm emulating. I've also not added in any of the bonus items such as extra lives, or a snake shortener.

So first impressions of pico8. Love the music editor, its not your fault I'm crap with that. Love the map editor, and the sprite editor. Little disappointed in the fixed palette but It isn't too bad and makes me more creative.

But I am disappointed in the 128x128 resolution. It just seems too much of a restriction. When using 8 bit computers in the past the resolution I had available was 320x200 which is a huge amount more.

What do you think? Is this just me not using screen estate effectively?

Okay it was me not using the screen estate well.

Okay I tried a version with 5x5 sprites and I'm a lot happier with it.

This leaves that I can have more speed and more complicated setups, and more length. Though for the early levels the big version was better.

P#82800 2020-10-11 14:47 ( Edited 2020-11-07 22:30)

Follow Lexaloffle:          
Generated 2024-04-20 01:32:00 | 0.174s | Q:88