Log In  

I make short games because I want you to go play outside!

Hey all!

A while ago I started working on a little platformer with a portal/hole mechanic. The idea was that you could toggle a hole through a level that would let you move through a parallel level and solve puzzles. I was working with a "modern" game engine and getting that to work was a breeze; I started thinking about how to nail that effect on pico-8 about a week ago but didn't begin writing it until last weekend. Turns out by using tline and some help from the pico-8 discord it took a couple of hours. Now I'm working on finishing it and releasing the game by the end of the month.

This is what it currently looks like:

If you have any suggestions, I'd love to hear them!

- Gabe

P#87105 2021-02-02 00:10

Hey all!

I'm working on a platformer right now and I've been kicking around the idea of custom masks. Essentially, I want to draw a map, and a map on top of that; a circle would then reveal (punch a hole through) the map that was drawn first through the foreground map.

This effect can be done through a simple clip() call between drawing both maps, but that only gives me a rectangle (and only one at that). I'd like that effect, but with a circular shape (or an arbitrary shape ideally).

A solution I've been messing with is saving the background map to memory (at the sprite data or general purpose address), then drawing the foreground map normally with map(). The game would then get the pixels within the shape, get the corresponding data from memory that would match the pixel location, and draw the correct pixels on top of the map, which would look like a "hole" punched through the map.

Thing is: I'm shit at memory stuff.

So, while I read through how memory works and how I can read would-be pixels from a memory address and draw them individually while keeping 60 fps sigh I would much appreciate any help with this. If you think my idea won't work, please let me know; if you have a better idea, PLEASE let me know; if you've done this before, I would be eternally grateful for the help.

That's all for now, I guess I will keep posting as I slowly work my way through this?

Thanks for the help,


- Gabe

P#86970 2021-01-30 17:38

Cart #pollock-1 | 2019-10-28 | Code ▽ | Embed ▽ | No License

This is the PICO-8 version of a game I wanted to make about 3 years ago. I figured I should make a smol version of it and actually finish.

The final game will be a one-screen maze game with moving enemies, and hopefully something interesting with the painting mechanic. I also want people to make their own levels for it, so I made a separate level editor (not in PICO-8) that spits out a table that the game reads as a leves; super user f r i e n d l y .

Anyways, that's what this is. I hope I have something more interesting

P#69420 2019-10-28 22:21 ( Edited 2019-10-30 21:49)

Hell Hole: Final Release

Cart #hellhole-10 | 2020-05-21 | Code ▽ | Embed ▽ | No License



  • Movement: up,down,left,right
  • Attack: Hold X or Z

How To Play:

  • Move your avatar around the screen to avoid getting hit by demons and saw-blades.
  • Hold the attack buttons to shoot your soul out and control it to hit demons.
  • You can't move your body while using your soul. Your body is still vulnerable.
  • Let go of the attack button to return your soul to your body.
  • You can't damage saw-blades.
  • Survive 66 seconds...



  • Original concept, design, programming, art: Gabe Duarte
  • Aditional art: Liam McAlinden

Downloadable Version

You can download a build of this game over at Itch.io.

P#65844 2019-07-14 21:32 ( Edited 2020-05-21 01:41)

Cart #hellhole-1 | 2019-06-29 | Code ▽ | Embed ▽ | No License


A while ago I decided to port a game I made to PICO-8, and I'm finally almost done :D All that's missing is SFXs and a dope title image/cart cover. I'm posting this here because I'd love to playtest it here and get your opinions on it so don't hesitate to tell me if something sucks!

Also, don't look into the code too much, I'm not a great programmer...

P#65472 2019-06-29 21:01 ( Edited 2019-06-29 21:12)

Wow. PICO-8 is extremely fun to work with, and I'm so happy I stuck around to learn how to use it!

Right now I'm learning how to work with tables and 'objects' to sort of port a game I'm currently developing called HellHole. It's a top-down shooter where you choose between controlling your body or the bullet (which is your soul).

So far, I've managed to not slow down the game with a shit ton of instances and that makes me happy!

I'll leave you with a gif of the latest bit of progress: A spawner, soul particles, and screen-shake.

P#60209 2018-12-21 15:17

Hi! I'm developing a short little game in PICO-8 and plan to export it as an executable. The problem is, I would like the game to close itself after something happens. I've tried using the 'shutdown', 'exit' and 'stop' functions but none of them closes the window at the end of the game.

Is there even a way to do this? Or perhaps I'm using the previously mentioned functions in a wrong way?

Thanks for the help!

P#60083 2018-12-18 18:47

Cart #43187 | 2017-08-12 | Code ▽ | Embed ▽ | No License

A game made in 1 hour for the 1 hour game jam.

Shoot the blue thing 100 times.

P#43188 2017-08-12 17:24 ( Edited 2017-08-12 21:29)

Hi! I just started using PICO-8 and I'm having a little trouble with my collision code.

It works fine when colliding against walls, but colliding against corners (the red tiles) breaks it.

Here is the collision part of the code:

function placeMeeting(x, y, f)
    local tilesize = 8
    local tilex = flr(x/8)
    local tiley = flr(y/8)
    local s = mget(tilex, tiley)
    return (fget(s, f))

And this is the movement part:

        if (btn(0)) then
            if (not placeMeeting(p.x-1, p.y, solidtile)) then
                p.x -= p.speed
            p.mirror = true
        elseif (btn(1)) then
            if (not placeMeeting(p.x+p.bbox_w+1, p.y, solidtile)) then
                p.x += p.speed
            p.mirror = false

        if (btn(2)) then
            if (not placeMeeting(p.x, p.y-1, solidtile)) then
                p.y -= p.speed
        elseif (btn(3)) then
            if (not placeMeeting(p.x, p.y+p.bbox_h+1, solidtile)) then
                p.y += p.speed

Thanks for the help :D

P#43143 2017-08-09 00:52 ( Edited 2017-08-09 19:02)

Follow Lexaloffle:        
Generated 2021-04-23 02:41 | 0.086s | 2097k | Q:27 (54/74)