Josh Millard, cortex at Metafilter, creative internet person, the NES was my life as a kid and as an adult I can never quite get out of the aesthetic orbit of those formative years. Am really excited about playing with PICO-8; the specific sensibility of constraint in it is just about perfect for how my brain copes with developmental scope.
Blaseball is the greatest sport in the multiverse, and Gunther O'Brian is the greatest player in Blaseball.
He's not good AT blaseball, mind you. He's really terrible at it. He doesn't know what it is. He's just a penguin. But he's the best penguin, and he's doing great, and whatever happens, IT'S OK.
But you can help Gunther try to be a good pitcher for the Charleston Shoe Thieves, with Gunther O'Brian's Pitching Simulator. Do your best to hit the arrow keys in the right order as fast as possible so Gunther can get a good windup and throw the ball in possibly the correct direction.
You're doing great, Gunther!
--
If you'd like to sing along with the music, it's a tune called








An homage to the classic Bonnie Tyler song Total Eclipse of the Heart, and its goofy, gonzo, drama-rama music video.
Now very slightly interactive: press x to...turn aroooooooound.
Other than that, just the music looping and a few thematic animations I hacked together. The arrangement is a rough -- there's a bunch of expression tweaking especially in the first half I haven't bothered with, and it has room for another channel worth of instrumentation on most patterns -- but I've already spent more time on it today than I had meant to, so I'm gonna stop here and share.








(Ooh, this cart clipboard thing is new since I last posted!)
Typing Sim RPG! Very early work in progress, but I've resolved to start posting works in progress to the BBS more because it's fun to share and I should let folks play with the things I post gifs of on twitter.
CONTROLS:
- arrows to move the fingers
- z to type with left finger
- x to type with right finger
GOAL:
Right now all you can do is type. This is the, uh, open-world part of the game.
WHAT'S THE BIG IDEA THOUGH:
I want to turn this into a proper RPG. You'll start with a character creator where you name your fingers, select skin tone, nail polish, finger size, etc. You'll select starting stats that affect things like finger dexterity, shakiness, precision.
And as you complete typing quests, you'll earn XP you'll be able to boost those stats to improve your ability to translate dpad/button input into accurate typing. You'll maybe find magical equipment (probably mostly rings given the context) that'll help out your typing in various ways. And so on.
BUT DOES IT SUPPORT DVORAK:
Yes, and also Colemak. But for now those are only accessible by going in and tweaking the code a little.







Note: web player doesn't currently support 60 FPS rendering, so this is just going to look like a static palette unless you download it.
Hat tip to ilkke for the inspiration.
This is a simple palette vs. palette demo to show off the idea of color interlacing in a very simple way: it uses the new 60 FPS function to render very quickly alternating images of 1. a single large tile version of the pico 8 palette and then 2. a 4*4 matrix of palettes, one lined up perfectly with each of the large color squares.
The result, when viewed, is a flickery implication of 256 separate colors*, one for each combination of two colors from the pico 8 palette. As laid out in this example, that shows up as a series of variously tinted versions of the palette itself.
It'd be interesting to lay out the color combos in a more gradient-centric way, but this was far simpler to throw together as a first experiment.
Here's a rendered approximation of the interlaced effect as a smooth static image, though of course the visual effect in practice has a kind of restless volatility that this doesn't capture:





Photosensitivity warning: blinky as all fuck.
This is a hacky little Sierpinksi Carpet fractal implementation, with oscillating zooming and panning and random color changing, with a hacky shot at a Shepard Tone for the soundtrack.
Controls:
- A sense of control over the universe is illusory.


The beginnings of an Arkanoid clone, based on a nice pixel art mockup by @DavitMasia.
Controls:
- left/right: move paddle
- z: start; release ball
- up: SECRET CHEATER LEVEL SKIP
Details:
This first version has the basic game loop -- break tiles with the ball, clearing the board will move to the next level -- but is missing just about everything else so far. No powerups, no enemies, no actual endgame (if you beat the last level, current #7, it just loops back to #1), no proper title screen, etc. Musical bits are dredged up from childhood memory and so are probably not spot on.
I hope to keep cracking away at it, get more of that added, but if anyone wants to have a go at doing so themselves they're welcome to it as well.







Just a little love note to the wonderful weekend I had at XOXO 2015. This is a riff on the great interstitial background animation by designer Craig Winslow, plus a little triumphant chiptune thing I wrote up.


Explode each other in ballistic tank-on-tank combat!
Controls:
- arrows to aim turret, move tank, and select weapons
- x to change mode between aim/move/select
- z to fire when in aim mode
About the game:
I've spent the last two days working up something I've wanted to do for a long time: a little homage to the greatest competitive ballistics PC game ever made, Scorched Earth.
And so: Scorched 8!
Right now the basic game stuff is there: random terrain, gravity, wind, a variety of munitions, murdering your friends, bleep bloop sound effects, etc.
There's a lot more that could go in -- terrain style selection, tank shields, gravity for dirt, weapon buying at round/game start, war/death cries, etc -- but I'm pretty happy with this as a skeleton. There's enough there blow each other up with already, at least.



Got to thinking about Populous today; played the hell out of the game on my Amiga 500 when I was a kid.
This is a first crack at a terrain manipulation demo in that style. There's no game here yet, just a small map you can terraform and a little dude running around willy nilly on it and seeming rather distressed when he's in the water. I may try and build a little game out of it, though just sort of working out how to handle the isometric sprites in a basic way has been the rewarding bit I was aiming for.
A neat discovery in all this was that I could get all of the terrain drawn using 7 distinct sprite shapes, thanks to careful use of horizontal and vertical flipping and palette swaps (and if I wanted to trade a little more code I could get rid of one of those by compositing two others). Was a little bit of a note-taking headache to make that work, but really satisfying once I got it.
Right now the map is just fixed in size (I threw in a little camera movement to follow the cursor around), but an obvious next step tech-wise would be to dynamically scroll through a larger map only showing a chunk of it in the viewport.
Hat tip to YellowAfterlife for their slick isometric demo last week, which put me on to the idea of giving this a shot.








Take on the role of humanitarian rebel Jehanne Butler in an all-out war against the intelligent machines that seek to mold and ennslave their organic creators! Armed only with a slow-charging Holtzman shield/displacement belt, use your wits to pit the robots against one another and defeat the machine-mind scourge!
Controls:
- arrows + z to move to an adjacent tile
- z to wait (and activate shield if in danger)
- x to displace to a random tile on the board
Instructions:
- Clear each board of robots by tricking them into colliding with one another or with the remains of already-destroyed machines.
- Watch your shield power! It's invaluable but scarce, and an emergency shield after teleporting will drain power more quickly than using it when standing still.








I was thinking, what if there was an underpowered handheld spinoff console from the makers of the PICO 8? Sure, it's not as beefy as the original console, but oh the portability!
So this is a really rough prototype: I've built up the PICO JR console as the core game loop of the cartridge, processing input into thumb movement and some really sketchily modeled instinctive controller swerving, with the bulk of the code stuck down below and the actual code for the little in-game game up top in the cart.
My gut take on the specs for this:
- 48*48 pixel four-tone greyscale graphics (so, colors 0, 5, 6, and 7 in the PICO 8 palette)
- 2 channel sound
- dpad and one button (other button could be reserved for meta-game/menu stuff)
- 1 page of sprite sheet
- standard sprite size of 6x6 pixels
- dodgy slow-refresh LCD screen (could simulate this by checking screen buffer every frame and only allowing pixels to move one shade of grey toward whatever the target is)
Right now the tiny little Jump Guy game is just implemented for the screen and palette and sound limitations by me keeping myself honest, but I think the right way to go to do this right would be to write wrapper functions for all the standard PICO 8 calls that do appropriate constraining and sanity checks on the PICO JR specs. (So e.g. pj_sfx() and pj_music() would only accept as valid channels 0 and 1, spr() would only read off the allowed sprite page and would count by 6*6 blocks, etc.)










Spend some time with a depressed, laconic Luigi as he chain smokes and wanders through a crumbling Mushroom Kingdom, ruminating on ontology, ethics, family, identity, and the mistakes he and his brother have made.
Controls:
- left/right: walk around
- up: ruminate
- down: smoke
About the game:
This is a shot at a collection of ideas I had a few years ago, about looking critically at the universe of Super Mario Bros. in light of the total lack of explicit narrative in the original game in particular. Who are these strange men? What motivates them? By what right do they wreak the havoc they do on this strange place? What do they feel about where they are and what they're doing?
And so, this is one lens through which to look at all that, with Luigi, the second brother, the also-ran, as a complicit onlooker, wandering now through some fractured, rotting liminal place in this strange world, reflecting on it all in scattered fragments.










So I've made a few carts now, and am enjoying the hell out of it. Primarily for the joy of just building things, but also for the implicit little bit of roleplaying involved: I'm not just programming a game, I'm programming a game for a fictional console from another universe, from another time. I'm not just me, really; I'm the company that would have existed to be producing these things. I'm some scrappy no-budget third-party game dev concern from alternate universe 198X.
And a game company needs a brand identity.
And so: I came up with a name and drew a logo, and wrote up a little basically self-contained function to do a quick splash screen render, using a single 2*2 sprite:










Quick little bit of silliness, inspired by the awkward little grand piano minigame/toy in that spooky mansion in Final Fantasy VII.
Use Z to toggle right hand, X to toggle higher chords/notes, arrow keys to play a chord or note.
Question: the thing I'd like to do with this is check to see if a sound is already playing on a given channel before I play another, so that e.g. btnp() doesn't keep retriggering a given note or chord every 4 frames if the player holds the button down instead of tapping. I'm guessing I'd have to peek() at a specific bit of memory, but I have no idea where!







A game about flying a damaged ornithopter through a sand storm on Arrakis. 3 levels of windy action! Fake speech synthesis!
Instructions:
Reach the end of each map without crashing into the dunes below or being overtaken by the following sandstorm.
Controls:
left: tilt thopter upward (less speed, more lift)
right: tilt thopter downward (more speed, less lift)
x: fire jet (more speed, fuel recovers over time)
z: air brake (cuts speed, gain a little altitude)
About the game
This is my second PICO-8 game, following on the Dune theme of Shai Hulud; I wanted to make a little flying game about surviving the sand storms of Arrakis as an excuse to experiment with flight model stuff, screen scrolling, and collision detection. I did that stuff and also played with a few other goofy "what if" ideas, and so the code is in places a mess of hacks, which I'm trying to embrace as an okay way to go with experimental P8 games.






Per this thread, I wanted to figure out a method for pixel-perfect collision for a project I'm working on, and snaggled the in-project attempt so badly that I decided to start from scratch in a separate cart. This is the result, a little demo that shows pixel (and basic box) collision feedback in real-time on a couple of sprites.
As far as I can tell, the collision test is accurate under the assumptions this cart makes: each sprite is an 8x8 sprite referenced directly off the sprite sheet by sprite number, and any non-0 pixel is considered solid. But beyond that I am making no assumptions about it: I'm sure there are cleaner/faster/neater implementations of the same idea, and I'd encourage anyone who feels like taking a shot at cleaning it up to go for it.
This should also in principle be generalizable to arbitrary rectangles of sprite sheet info for e.g. larger multi-tile player sprites, and in fact I made some progress last night trying to generalize it, but that hasn't totally come together. Anyone who feels like tackling that, go for it.


I've only ever done really minimal/logical collision stuff in games, so more general collision strategies are still sort of mystery meat to me. I'm working on a little test idea with a ship flying near uneven terrain that the player will need to avoid colliding with, and I'm trying to work out a good approach to doing that per-update collision test between the ship and nearby terrain.
If I've got a ship sprite, and a given nearby sprite of map where only a portion of the sprite is solid ground (say, a diagonal chunk of hill), how might I approach writing a collision detection routine for the two? Something using pget for the ship and terrain sprites and appropriate x/y offsets to check for any case where both pixels are non-transparent?






