Hey Everyone! PICO-8 0.1.11d builds are now live on Lexaloffle and Humble! We are still working on CHIP / Pocket CHIP builds -- I'll update this thread when they are live. [Edit: they're live now with 0.1.11g]
Welcome to the Core
Despite the unassuming version number of 0.1.11, this update marks something of a milestone: The core of PICO-8 is now feature-complete, with API and specifications that are likely to remain fixed. Before it becomes entombed as a read-only blob of C code however, there is still some time before beta to address any issues that crop up. Let's see how 0.1.11 works out and what points of friction emerge.
One of the goals of PICO-8 is to create a stable, familiar medium in contrast to the shifting sands of modern software development. Instead of growing by changing the core of PICO-8 over time, I'm aiming to settle on a minimal, eternal component that can be built on top of (improved tools and bbs integration), extended sideways (extra ports / host platform support), built out from the inside (making useful snippets and carts!), and around (nicer BBS, cartverse, documentation, resources and community events).
v0.1.11 is also the point after which PICO-8 and Voxatron co-development start to part ways -- Voxatron's API and specification is a superset of PICO-8 v0.1.11's. The upcoming Voxatron update looks basically like a 3D PICO-8, with its own version of splore, png cart format, labels, and bbs integration. I messed up the Voxatron release plan partly because of committing to this -- but more on this later in a separate post. o(_ _)o
Many thanks to the numerous PICO-8 users who helped iron out bugs in the 0.1.11 release candidates. I snuck 0.1.11 out via twitter thinking it was pretty solid, but it took 3 more builds to get right. If you find any old carts that don't run or behave strangely, please ping me on twitter, or better still, post a bug report in the support forum. There will be another follow-up (0.1.12) to catch any left-over issues. After that it will be onwards to beta (0.2.0) \o/

| "After Miracle, Techno, and Shinobi, Alex has found yet another world to adventure in, and it wasn't easy! Cramming yourself into a world which only exists inside an 8192 token limit is no mean feat! But that's no problem for Alex's mean fist!" |

After I don't know how many months, this is finally "finished", bang on the token limit (that part was easy and fun), but staying under the compression limit was a literal impossibility, and I had to run it through PicoTool to get it under. For that reason, I've made the un-garbled code available in a Google doc at this link. But that is exactly at the token limit! No room for edits... so I've also provided this version, which gives you a bit of breathing room if you want to experiment, it's missing some tweaks that the final game has, which are bug fixes and extra minor features like the level intro.

Hello! Er... this is the first game i've ever made with Pico-8, so please forgive all the bugs you'll find in this little game.
This is my little homage to one of the games I used to play in my arcades back in the early eighties when I was a kid... a game with a trackball, many missiles and the almost impossible task to avoid a thermonuclear world war for as long as possible.
Yes, I know... that's not exactly a very cheerful theme, but it's also not worse than your average "zombie apocalypse" theme that you can find in many games today ;-)
THE STORY
In this game the final war that will annihilate the human race has just started. Your name is Dave Theurer, and unfortunately you're not a superhero. You can't stop all the missiles and you can't keep your loved ones and your city safe forever; but if you're brave and lucky enough you might be able to allow your fellow citizens to see the lights of another day.
Till the next night of bombings.
MOVEMENTS
Use your mouse or the directional keys to move the gun target. Push the Z button or click the left mouse button to shoot a single rocket, Keep pressed the X button or keep clicking the right mouse button for rapid fire.
Shoot the enemy missiles and avoid them falling on the buildings. When your last building falls, it's game over.

Hi all,
I bought Pico-8 awhile back (version 0.1.98) and recently tried to run a cartridge which told me 'Future Version please upgrade'. However, when I log into my Pico-8 account it says no products are registered to my account!
I don't think I bought it via Humble Bundle as it doesn't show in my HB account.
So basically, do I need to upgrade ...and how?
tobo

hey so i have started making a rogue like and i started with dungeon generation, i am doing this by using Binary Space Partitioning(BSP) but when i go to process my binary tree it only takes the left route and not the right! it appears that the right route is always nil and i cant figure out why and i hope you guys can figure it out.
All help is appreciated!
-- d&!d
-- by anton wolfarth
state = 1
player = {}
-- player.[up,down,left,right] = {still, anim1, anim2}
player.down = {1,2,3}
player.up = {8,9,10}
player.left = {4,5,4}
player.right = {6,7,6}
rooms = {}
err = ""
gold = 0
function aabb(x1,y1,w1,x2,y2,w2)
return
end
function _init()
end
function _update()
if(state == 1)then
generatemap()
state = 2
end
if(state == 2)then
end
end
function drawrooms(room)
print(room.x .. ", " .. room.y .. ". " .. room.width .. ", " .. room.height)
--rect(room.x, room.y, room.x+room.width, room.y, room.y+room.height, 2)
end
function _draw()
cls()
foreach(rooms, drawrooms)
print(err)
print(#rooms)
end
-->8
-- map generation
function generatemap()
-- parent, left, right, depth, x,y,w,h
tree = {parent = nil,
left = nil,
right = nil,
depth = 0,
x = 0,
y = 0,
width = 256,
height = 256
}
makechildren(5, tree)
makerooms(tree)
end
function makechildren(maxdepth,parent)
xy = flr(rnd(2))
box1 = {}
box2 = {}
if(xy == 0) then
-- split by x
box1.width = flr(rnd(parent.width / 3)+parent.width / 3)
box2.width = parent.width - box1.width
box1.height = parent.height
box2.height = parent.height
box1.x = parent.x
box2.x = parent.x + box1.width + 1
box1.y = parent.y
box2.y = parent.y
else
-- split by y
box1.height = flr(rnd(parent.height/3)+parent.height/3)
box2.height = parent.height - box1.height
box1.width = parent.width
box2.width = parent.width
box1.y = parent.y
box2.y = parent.y + box1.height + 1
box1.x = parent.x
box2.x = parent.x
end
box1.depth = parent.depth + 1
box2.depth = parent.depth + 1
parent.left = box1
parent.right = box2
box1.parent = parent
box2.parent = parent
if(
box1.depth < maxdepth and
box1.width > 5 and
box1.height > 5
)then
makechildren(maxdepth, box1)
else
parent.left = nil
end
if(
box2.depth < maxdepth and
box2.width > 5 and
box2.height > 5
)then
makechildren(maxdepth, box2)
else
parent.right = nil
end
end
function makerooms(tree)
err = err .. tree.depth .. ", "
if(tree.left != nil)then
makerooms(tree.left)
err = err .. "l"
end
if(tree.right != nil)then
makerooms(tree.right)
err = err .. "r"
end
if(tree.left == nil and tree.right == nil)then
generateroom(tree)
end
end
function generateroom(leaf)
add(rooms, {
x = leaf.x,
y = leaf.y,
width = leaf.width,
height = leaf.height
})
end
|

| Pico8 use 2 functions to update stuff at a regular basis. One _update() function called every 1/30s (or 1/60s since the 0.1.8 version) and one _draw() function that do the same thing. |
That allow, for a project use that use the second as a time unit, to not slow down that unit.
From manual: _draw() is normally called at 30fps, but if it can not complete in time, PICO-8 will attempt to run at 15ps and call _update() twice per visible frame to compensate.
e.g., If I decide to make a sprite move from A to B in exactly 1 second but have a render process slower than 1/30s. I can put the move process in the _update function and the rendering in the _draw() function. The animation will not be smooth but the sprite will move from A to B in exactly 1 second.
This is true if the _update() function do not take more than 1/30s to execute.
This simple separation is only used for that purpose.
For my shmup project (bullet hell/danmaku) project, it's different.
Hello Pico 8 fam,
Been working on a game that is something of a Final Fantasy clone and I am trying to implement different rooms for the player to enter. I am stumped with how to get this going and was wondering if there were any good resources available for me to dig into.
I need a blank slate each time I enter a room.

This game was made in a week with the purpose of distributing it to try to get as many plays as possible. We're currently in the phase where we're collecting plays, so your visit is much appreciated!
It's also on itch.io! https://t.co/l3ExIHaRuI
Alas, it looks like the old (albeit undocumented) TIME() function has either been broken or deliberately retired, as it now always returns 0.
No doubt coinciding with the addition of the cool new clock features of v0.1.11c, which are very cool.
Sadly, this means there are a few tweetjams/carts that no longer function :o(
(using TIME() was a sneaky way of getting a linear number change with few characters!)
*pores a bottle for our fallen tweetcarts *
#TimeIsDead #LongLiveTheTime

Hi,
I was absolutely ecstatic to see we can now run pico-8 headless. Working on that tiny canvas is really exciting for me to make some twitter bots or something!
The problem is, not really surprisingly, it isn't "truly" headless. That is to say running on a headless OS results in an expected SDL error.
I was wondering if anyone had any tricks to get it running headless. For my processing twitter bot I used... xvfb? That might work in this case but it's a bit of a faff and I was wondering if anyone has had any success using a different path to get headless headless mode.






50 comments












