Log In  

BBS > Superblog
Posts: All | Following    GIFs: All | Postcarts    Off-site: Accounts

I'm working on this little proof of concept/practice cartridge to learn how to make a cutscene and I'm stuck. I tried to follow this cutscenes and coroutines article but it's still not working. I can't seem to get it to animate past the first frame of the rainbow.

Cart #sawuriyuyo-0 | 2026-04-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

1
2 comments


Cart #heavy_ball_battle_v0_2-0 | 2026-04-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

What's new...?

Added more bugs to fix later :P...

Nothing else :P...

[41x38]

[27x8]

5
3 comments


Cart #downscaleclubsdemo-0 | 2026-04-17 | Code ▽ | Embed ▽ | No License
1

1
0 comments


Cart #tihokimadi-2 | 2026-04-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

1
0 comments


Any games pinned on my profile is the ones I finished. Feel free to recommend some pico cartridges to complete alongside other things.

1
1 comment


Made in light of recent events regarding certain scoresub exploits and shortcomings, this code snippet will retrieve the current, accurate to the second time stamp from a remote trusted authority in a way that can be directly compared against stat(86).

As this protocol requires raw UDP access, it will not work for web players. Which I suppose functionally makes it useless.

local NTP_TO_UNIX_OFFSET=-2208988800
local LOCAL_TIME_ADJUST
local authority="time.nist.gov"
local timeout=10

function fetch_time()
	if LOCAL_TIME_ADJUST~=nil then
		--use cached time offset
		return stat(86)+LOCAL_TIME_ADJUST
	end
	local udp=socket("udp://"..authority..":123")
	assert(udp:status()=="ready","Failed to open raw UDP socket.")
	local request=string.pack(">B"..string.rep("x",47),0x23)
	local out,err=udp:write(request)
	assert(out,err)

[ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=188020#p)
1
0 comments


I think including an epoch timestamp in the scoresub() entries, provided by the server itself would help prevent os time exploits. Rather than relying on the users os time, a timestamp could be attached to the scoresub data when a highscore is uploaded.

The timestamp could be the same format as seen in stat(86)

So the scoresub entry could look like so:

{
   user_id = user_id,
   username = username,
   icon = icon,
   score = score,
   timestamp = timestamp,
}
8
2 comments


Very simple rspr animation for a "loading" gui widget. It does a half turn every half second, then stops. Very readable and clean. Please make use of it.

Make sure your tquad uses flags 0x300 in its calls to tline3d for best results.

Script

local logo=--[[pod_type="gfx"]]unpod("b64:bHo0ADkAAAA_AAAA8QtweHUAQyAQEATREAG3ARABtzHXEdcxXBceFwUAQRFXHFcEAFEXHhdcMQUAACAAgLcBEAG3ARDR")

local icon=container:attach{
	x=0,y=0,width=24,height=24,
	justify="center",vjustify="center",
}

function icon:draw(msg)
	local c=t()%1
	if c<.5 then
		rspr(logo,12,12,1,1,c)
	else
		spr(logo,4,4)
	end
end

Example

1
0 comments


Cart #podweb_markdown_demo-1 | 2026-04-19 | Embed ▽ | License: CC4-BY-NC-SA
5

This is a small demo for the podweb markdown I am currently using in my podweb browser. This project should allow users to make use of podweb markdown in other projects

5
1 comment


Hello,

I know I can create my own palette on the fly with the pal() command. I also know about the OKpal tool which I find a bit hard to use.

What I'm wondering is, can I not just build my own hex palette as a list, fetch it and poke it into memory? Or is OKpal the only way to do that currently.
context: I want to use the colours from 32 onwards. I'd also like to see the colours in the sprite editor.

Thanks

9 comments


Cart #hehe-0 | 2026-04-17 | Code ▽ | Embed ▽ | No License

1 comment


Hey there!

To everyone who enjoyed "NUMBAKO," thank you so much!
Right now, I'm working on a spin-off featuring the characters from NUMBAKO!

NUMBAKO, the puzzle game I made earlier, was actually something I put together
quickly — partly as a practice project.
I just wanted to see what kind of game I could create within the limitations of PICO-8.

So this time, I'm planning to make a cool action game — something I'm really good at!
My current vision is a quarter-view survivor action game.
It'll be a game where Riko and Yanagi, as the protagonists, take on mischievous yokai.

The reason Megumi and Saika are shown here is that I started by testing how far I could
go with minimalist pixel art for them and animating those sprites.
…Of course, I plan to include them in the game too!

[ Continue Reading.. ]

4
8 comments


Cart #buttsmash2-4 | 2026-04-17 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
10

Butt Smash

The incredible button-smashing experience!

Feel productive while wasting time in this riveting D-pad experience! Try to keep up, as each screen cleared shortens your time on the fuse. Be kind to the lil bombs and do NOT blow them up. Good luck, and share your high scores!

Development

I started this as a practice for juicing up simple mechanics. I was inspired by a game featured in a SpaceCat video, made by Josh Fouts, plus the Helldivers 2 stratagem codes.
I used the #palbrite function for the fade to black -- thanks to @dw817! Everything else was, for better or worse, made by me! Thanks for playing.

10
2 comments


Cart #elliotsgame-2 | 2026-04-19 | Code ▽ | Embed ▽ | No License
2

This is our first game, made by Brett and Elliot!

2
1 comment


Cart #weranifosu-0 | 2026-04-16 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

Rowan Fart Survival is an innovative experience designed spectacularly in just 2 days
You play as a smelly individual, Rowan, who is dodging sanitation products trying to attack you.
FEAR NOT! As you, Rowan, have the miraculous ability to fart using the X button!
Furthermore, power ups will spontaneously spawn on the map

  • Chocolate regenerates you fart cooldown
  • Poop grants temporary invincibility

The sanitation products chasing you are scary, but no match for Rowan!

  • Soap are average attackers
  • Water droplets typically move faster than soap
  • Deodorant will temporarily slow you if they catch you, but are very slow

This game was created out of pure hatred for a despicable, stinky man in my cybersecurity class.
Funnily enough, the majority of this game was created during my cybersecurity class

  • Every time I got demotivated, I motivated myself through my pure hatred for this man
4
0 comments


Cart #podnet_browser-31 | 2026-05-13 | Embed ▽ | License: CC4-BY-NC-SA
31

Podweb is a simple browser for the podnet — Picotron's built-in per-user cloud storage. It lets you browse a small cozy web of pages created and hosted by other Picotron users, connected by links and explored through this cart.
Pages support headings, paragraphs, code blocks, images , links and EVEN a comment section making use of picotrons highscore system. That's it. No ads, no tracking, no dark patterns — just text, pictures and your friendly neighbours comments on podnet.
Fire it up and it will take you straight to the Podweb home page, which explains everything you need to know about

[ Continue Reading.. ]

31
50 comments


I'm using fletch_pico's rspr function to rotate my sprites, but I had a question to hopefully optimize the drawing of these. Since they don't rotate constantly, I was wondering if there was a way to store the output of these, draw those, and only use rspr() when the angle changes. Any help is appreciated!

function code:

function rspr(sprite,cx,cy,sx,sy,rot)
	sx = sx and sx or 1
	sy = sy and sy or 1
	rot = rot and rot or 0
	local tex = get_spr(sprite)
	local dx,dy = tex:width()*sx,tex:height()*sy
	local quad = {
		{x=0, y=0, u=0, v=0},
		{x=dx, y=0, u=tex:width()-0.001, v=0},
		{x=dx, y=dy, u=tex:width()-0.001, v=tex:height()-0.001},
		{x=0, y=dy, u=0, v=tex:height()-0.001},
	}
	local c,s = cos(rot),-sin(rot)
	local w,h = (dx-1)/2, (dy-1)/2
	for _,v in pairs(quad) do
		local x,y = v.x-w,v.y-h
		v.x = c*x-s*y
		v.y = s*x+c*y	
	end
	tquad(quad, tex, cx, cy)
end

function tquad(coords,tex,dx,dy)
	local screen_max = get_display():height()-1
	local p0,spans = coords[#coords],{}
	local x0,y0,u0,v0=p0.x+dx,p0.y+dy,p0.u,p0.v
	for i=1,#coords do
		local p1 = coords[i]
		local x1,y1,u1,v1=p1.x+dx,p1.y+dy,p1.u,p1.v
		local _x1,_y1,_u1,_v1=x1,y1,u1,v1
		if(y0>y1) x0,y0,x1,y1,u0,v0,u1,v1=x1,y1,x0,y0,u1,v1,u0,v0
		local dy=y1-y0
		local dx,du,dv=(x1-x0)/dy,(u1-u0)/dy,(v1-v0)/dy
		if(y0<0) x0-=y0*dx u0-=y0*du v0-=y0*dv y0=0
		local cy0=ceil(y0)
		local sy=cy0-y0
		x0+=sy*dx
		u0+=sy*du
		v0+=sy*dv
		for y=cy0,min(ceil(y1)-1,screen_max) do
			local span=spans[y]
			if span then tline3d(tex,span.x,y,x0,y,span.u,span.v,u0,v0)
			else spans[y]={x=x0,u=u0,v=v0} end
			x0+=dx
			u0+=du
			v0+=dv
		end
		x0,y0,u0,v0=_x1,_y1,_u1,_v1
	end
end

1
2 comments


Cart #homunculus_run-3 | 2026-04-21 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
5

Jump to avoid the wizards' fireballs for as long as you can!

Controls:
Arrows to move L/R
Z/X to jump.

This is my first cart. Working with PICO-8 was so fun and I'm looking forward to starting a more involved project!

5
1 comment


Cart #flying_toasters-0 | 2026-04-16 | Embed ▽ | License: CC4-BY-NC-SA
1

A wallpaper and screensaver based to the Flying Toasters After Dark screensaver.

When set as the system's wallpaper, or run with the --wallpaper argument, the background color matches the system theme.

Run with the --window argument to view the Flying Toasters in a window instead of full-screen.

1
0 comments


I thought making a Lexaloffle BBS browser for Picotron might be neat.

It doesn't actually attempt to fully parse and understand the HTML, this is just a "vaguely try to find the important parts of the post and display those" kind of a thing that will probably break completely the moment zep changes literally anything in the page layout.

Working on this is reminding me how bad Lua's "RegEx at home" pattern matching is. ...

5
5 comments




Top    Load More Posts ->