I didn't submit this to the 3cjam because 1) it wasn't done then and 2) it's not spoopy.
It's still not spoopy, but at least it's done. It's really more of a tech demo or proof of concept, just me seeing if I could do something in the limits of 3-colors-on-screen-at-once.
Not sure how well this will work in browser... probably not very. It should work, uh, well enough, in the client if your client can hold 60fps steady, though.
3cjam
Note: you can slow down the strobe with down on the dpad to confirm that I do, in fact, only use 3 colors at any one time.
Also note: there's some debug code in the source that I didn't bother to delete. Oh, well. :)




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.


