function _init()
state="start"
putbacks={}
setup_game()
p={}
p.x=64
p.y=64
p.sp=1
p.atk_sp=3
p.is_attacking=false
p.atk_timer=0
p.atk_duration=10
end
function _update()
--thinking/logic/math--
if state=="play" then
move_player()
elseif state=="start" then
if btnp(❎) then
state="play"
end
elseif state=="win" then
if btnp(❎) then
setup_game()
state="start"
animate_walk()
start_attack()
end
end
end
function _draw()
--visuals--
cls()
local s=p.sp
if (p.is_attacking) s=p.atk_sp
if state=="play" then
map()
aniplr()
pickups()
draw_ui()
elseif state=="start" then
print("press ❎ to start",30,60)
elseif state=="win" then
print("your journey has come to end. now rest.",30,60)
end
---print(py)
end
function setup_game()
--sets up stuff
px=63
py=63
pf=1--player frame
flp=false --player flip
goal=1 --how many articats
init_ui()
for t in all(putbacks) do
mget(t.x,t.y,33)
end
table={x=10,y=23},{x=2,y=3},{}
putbacks={}
end
--animation--
function aniplr()
--animate stuff
if pf>2.95 then
pf=1
else
pf+=.05
end
spr(pf,px,py,1,1,flp)
camera(px-63,py-63)
if btnp(❎) and not p.is_attacking then
p.is_attacking=true
p.atk_timer=3
end
end
--pickups--
function pickups()
local ptx=(px+4)/8
local pty=(py+4)/8
spover=mget(ptx,pty)
if spover==30 then
mset(ptx,pty,17)
add(putbacks,{ptx,pty})
points+=1
if points>=goal then
state="win"
end
end
end
--points/ui--
function init_ui()
points=0
end
function draw_ui()
print("treasure: "..points,10,10,7)
color(10)
end
--player movement--
function move_player()
local lx=px
local ly=py
if btn(⬅️) then
px-=1
flp=false
elseif btn(➡️) then
px+=1
flp=true
elseif btn(⬆️) then
py-=1
elseif btn(⬇️) then
py+=1
end
local ptx=(px+4)/8
local pty=(py+4)/8
--is the player over a tile
--that has flag 0?
if fget(mget(ptx,pty),0)==true then
px=lx
py=ly
end
if btnp(❎) and not p.is_attacking then
p.is_attacking=true
p.atk_timer=0
end
if p.is_attacking then
p.atk_timer +=.25
if p.atk_timer >=p.atk_duration then
p.is_attacking=false
end
else
if (btn(0)) p.x -=1
if (btn(1)) p.x +=1
end
end
--attack systems
function start_attack()
player = {
x = 64,
y = 64,
atking = false,
atk_timer = 0
}
if btnp(4) and not player.atking then
player.atking = true
player.atk_timer = 10 -- attack lasts for 10 frames
end
-- handle attack timer logic
if player.atking then
player.atk_timer -= 3
if player.atk_timer <= 0 then
player.atking = false
end
else
-- move code goes here so player stops during attack
update_movement()
end
end

Goob Race!
Goob Race is a silly little racing/betting game I made as a gift for WhiskeyDing0 ♥
Choose your favorite Goob and good luck!
Notes:
- The song is 'Accumula Town' from Pokémon Black & White
- Goob is the mascot of the streamer WhiskeyDing0. Check out his channel!
UPDATES:
1.1
- Added a changelog panel
- Added a statistics panel
- Tweaked sprites and colors

I am unable to get Picotron to respond to my Ctrl keys. I am unable to cut or paste.
I am using a Lenovo ThinkPad T14s with Mint Linux. I have the same issue with Pico-8. Ctrl keys work fine on all other software.
Is there a way to check/modify the keymapping in either?
Any help is greatly appreciated, thank you!

Puzzle Puppies: match three, save the pups, repeat!
Watch the trailer here: https://youtu.be/JlAXqltkjnU
From DeusTex comes Puzzle Puppies: a chill little matching game with a serious strategic streak and pixel art that'll make you say "aww!"
Here's how it works: Tap a dog on the board, it hops into your tray. Get three of the same breed together (Corgis, Chihuahuas, Huskies, plain old Mutts... There's a whole pack of 'em) and they clear off for points. Catch is, your tray only fits 7 dogs at a time. Fill it up without making a match and... yeah. Game over.
The levels are all hand-built and don't let the cuteness fool you. The game gets surprisingly complex around level 11. Some of what you'll run into:

Simple Roulette table for fun.
Pick up Chips and place them on the table. More Chips can be added and they can be stacked on top of each other. Hovering over sections of the table reveals the name of the bet to be placed and the payout odds. Place your bets carefully because you can't pick up a chip once it's placed. When you are happy with your bets spin the wheel and sit back. Winnings PLUS the stake are added to your chips and the next round begins.
The number of plays are displayed at the top left and when you are out of money this will reset to zero so you can see how long you can last before going broke.
Controls
Usual Keys/Controls are used. Prompts are displayed on screen.

Rogue Loop is a looping arcade roguelite platformer where every stage wraps around from left to right and top to bottom. Each run builds a new world from handcrafted rooms filled with enemies, upgrades, hazards, locked doors, and boss fights.
Choose a character, explore the looping map, defeat every enemy to earn the key, then unlock the door and reach the exit flag to advance. Powerups can strengthen your weapon, change your movement, or alter how you fall, but you can only hold 10 at a time.
Every three levels, the Quadropus boss appears, and the world becomes more dangerous as you progress. Clear level 9 to beat the loop.
Characters
Each character starts with different health, weapon stats, speed, and jump feel.

===Update 05/24/26===
Significant updates this time! We now have:
- Functioning main menu/level music
- 2 types of enemies (blobs and ghosts)
- basic pathfinding AI for enemy mobs
- a death/game over state that sends the player back to the main menu
I'm hoping to soon be able to work more on level design. As I'm following along with LazyDevs' tutorial, I am looking forward to learning how to use procedural generation! More to come soon!!
=====atr8des=====

The summer Pico-8 arcade residency is coming up! The selected game will be featured on our custom 2P Pico-8 arcade cabinet from June 1 - September 1. Deadline to apply is May 24th at 11:59pm.
Send your game here:
https://www.wonderville.nyc/pico8-cabinet-application
Pictured above: TAD by Doriancey (Spring '26 resident)
https://doriencey.itch.io/tad
See a list of previous residencies here:
https://wondervilleprojects.org/programs/residencies
You are the boss.
A hero rises to end your reign. You cast him down. By the next round he's at your gates again, stronger.
So the question is yours: are you boss enough that he never gets through?
Controls
- arrows — point at the grid
- O / X — fire your two moves
The boss tracks the hero on its own. Just point and strike.
The rivalry
The hero is a single glowing letter, but he reads your tells and dodges. Beating him is a conversation: feint, threaten, commit, land before he reads you.
He learns. Every round he comes back smarter, harder to break. You grow with him too: every win sharpens a move you already own, and every so often you add a brand new one to the rack. Two opponents on the same ladder — only one reaches the top.

My first video game! I'm having fun.
Keyed Up
One Dumb Shmup
As the Master Key, it is your obligation to open all the things.
But can you unlock your nemesis?
Beat The Boss Lock to keep your score.
Try to beat your high score!
Keys
- Any keys that miss a target will lose points.
Locks
- Shoot the locks with keys.
- The higher up on the screen, the more points you'll get.
- The faster moving, the more points you get.
- Locks that pass off the screen lose points.
- The slower moving, the more points you lose.
Doors
- Shoot the doors with keys.
- The higher up and farther left on the screen, the more points you'll get.

This is an updated version of the previous snake game that I uploaded a while back. This version changes how scoring works,and adds obstacles.
Guide:
- Blue - This is your snake. It grows in length as you collect pellets.
- Yellow - These are pellets. Collect them.
- Red - These are obstacles. Touching them will cause a game over.
- Green - This is the gate. Drop your segments off here and build your score.
You want to collect the pellets and take them to the gate. You gain points for each pellet that you drop off, and your length will be reset to 1. Additionally, more obstacles will appear as you collect pellets. Pellets that are collected do not contribute to your score, you must take them to the gate!






3 comments

