a simple metroidvania-style stealth game
X+C on keyboard or X+O on mobile to start
controls:
Left and Right - run
Up and Down - climb or drop from ledges
after getting the box, hold Down to hide inside
X - jump
after getting the sneakers, hold X to jump higher and tap it to jump lower
C/O - interact/attack
C/O while holding Left or Right - roll
Feedback is welcome!

You are seeing a scorching hot mist
Very educational postcart, I learned when acsessing screen memory in a loop I can go from 0x6000(24576) - 0x7fff(32767) !OR! (1/0 since the largest number is 32767 :o). If anyone could push the code further down please share even if it changes the original effect!
(127 chars)
r=rnd?"\^!5f100█🐱24" for i=24576,1/0,2do poke2(i,4660)end::_::for i=24704+r"4",1/0,r"4"+1do poke(i-65+r"2",@i)end flip()goto _ |

You are seeing a scorching hot vortex
(290 chars)
cls()p,r={},rnd?"\^!5f10▒🐱24☉8웃♥7"
::_::for i=24576+128+r"4",32767,r"4"+1do
poke(i-65+rnd"2",@i)end add(p,{x=r"128",y=r"64"+64})for o in all(p)do dx,dy=64-o.x,64-o.y a,n=atan2(dx,dy),3-sqrt(dx^2+dy^2)/30o.x+=cos(a+.25-r(.1))*2o.y-=cos(a-r".1")*2circfill(o.x,o.y,n,1+n*2.5)end flip()goto _
|
Hi I'm starting to move a project beyond a toy prototype. I've already developed a few external python scripts to help massage data (.obj files) into a packed format as userdata. For now those scripts just output some Lua code which I copy and paste into a .lua file in Picotron. I can then access this using import.
This works fine for messing around but realistically I don't want to load assets in this way. I was experimenting with store and fetch and looks like I can store tables and userdata "natively" which is very convenient for lazy loading things like levels and models. The only problem is it's not really convenient to produce the POD file type from a python script, which points me towards rewriting those scripts in Picotron. That's fine but leads me back to the question of the workflow from raw data on the host to something inside Picotron? And where does those raw files go? Ideally I don't want them to become part of the exported cartridges as they'd essentially duplicate data.

Finally started work on my long simmering dungeon crawler for PICO-8.

ALL SPRITES ARE PLACEHOLDERS FROM ARCANA FOR SNES YES I KNOW THEY LOOK AWESOME I WISH THEY WEREN'T PLACEHOLDERS :D
Goal is my own take on the classic Wizardry games, particularly the NES/Famicom ports. I've fallen in love with playing PICO-8 games on my RG Cube XX handheld so that's basically the target platform though of course it'll work anywhere.
Some technical details for the curious
- Ray-caster for dungeon exploration view
- Enemies are currently 32x48px. Using RLE compression I store around 16, many more if I use PX9.
- Textures are pseudo-procedurally generated. I use two 8x8 sprites tiled in a checkerboard pattern to build a base wall texture that is drawn at 32x32, with a noise-based detail texture tiled and rendered at 64x64 over that.
- I currently use two sprite sheets and one map. One sprite sheet is used for the exploration mode graphics and is loaded when a level is. The second sprite sheet is loaded from compressed data at the beginning of each combat with up to four enemy sprites. Sprites can be recolored as they're loaded to allow palette changes.
This is a brief yet atmospheric mini top-down adventure. A short story about a little volcanic ember who finds himself far from home. Forced to explore an unknown, cold, and harsh world, he must seek his own way. Use your unique abilities to survive, make new friends, and ultimately turn this freezing journey into a search for inner strength, warmth, and coziness.
Keep your flame alive!


Polyominoes stacking to aggregate a rubble dollop.
I hope you enjoy! I spent so long compressing it into the 300-char limit with force and barely had success, while also ensuring it looks free from bugs. I know they are all gray, but the beauty here is that I squeezed it into a postcart rather than the end result.
(300 chars)
memset(0,221,512)a={}r=rnd::ロ::cls()if#a==0do
x=r(16)\1*8y=-16for
i=1,6do add(a,{x,y})d=r{-8,0,8}if
r(2)<1do x+=d else y+=d end end
end for b in all(a)do
b[2]+=3y=b[2]spr(0,b[1],y)if
mget(b[1]\8,y\8+1)>0or y>119do
for c in all(a)do
del(a,c)mset(c[1]\8,(c[2]+3)\8,1)end
break end end
map()flip()goto ロ
|
Shoot the apples, spare the crows!
A tiny QTE arcade game in 3 colors.
Press X when the shrinking circle matches the static one.
HOW TO PLAY
- Hit an apple: +10
- Miss an apple: lose a life (3 lives total)
- Let a crow fly away: +15
- Shoot a crow: -25 (no life lost)
- Speed increases every 50 points; crows appear at 100 CONTROLS X / C - action button Features: 3-color palette, original music and SFX, saved high score.
Feedback is welcome!
A long-exposure shot of a lake at night.
(257 chars)
cls(1)::o::srand()a=t()/200for i=1
,500do r=rnd()^0.5*150a+=rnd()pset
(sin(a)*r+80,cos(a)*r+96,rnd{13,13
,13,6,6,7})end srand(4)y=64for x=0
,127do y+=rnd(6)-3rect(x,y,x,79,0)
end for y=0,3008,64do memcpy(32704
-y,26624.5+y+sin((y+t())/9),64)end
flip()goto o
|

I just found out PICO-8 has an undocumented way to stream PCM. so I decided to make an audio player that streams audio via serial. copy from the dropped file port (0x800) to PCM data port (0x808).
There's two versions, one which supports .avr (top most cart) and another which supports raw .u8 (bottom most cart).
Do be careful using the raw .u8 version, because there is no header for .u8. .u8 is a raw unsigned 8-bit PCM audio stream 5512.5Hz (as specified by the wiki and the undocumented way to stream PCM I mentioned previously).
These carts do have instructions baked in, but I'll put them above each cart for the ease of copying and pasting.
Conversion process for .avr version:
-
Download sox
https://sourceforge.net/projects/sox/
(or use your package manager if on Linux or *BSD) - Run a command like






12 comments







