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:
- "But wait!", you shout. "It's not actually 256 distinct color combos, because you have repeats of each color pair, e.g black-plus-white and white-plus-black! So it's actually more like, uh, uh, 128!" Fine, yes, you're very clever.
Photosensitivity warning: blinky as all fuck.
- A sense of control over the universe is illusory.
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.
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!
- 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
- 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.
About the game:
This is the third game in my Dune series (see also Shai Hulud and Thopter Escape); at its heart it's a clone of the classic game Robots, with a few tweaks to lend this more of a narrative progression and give it a beatable end-game goal instead of just Play Till You Die.
I was inspired to get to work on this by wstephenson's mechanically similar old-game-remake cart, Rhino, which is a nice piece of work that you should go play as well.
Because Robots is such a simple game at heart, I had meant for this one to be a really quick hack job (and the code structure unfortunately reveals that), but I ended up doing a lot of fiddling and polish on it over the last few days and am happy I did because it's a more complete game than I expected.
I had a lot of fun doing both the art and the music for this. For the art, I went with a multi-scale setup to grow the scale of the game from world to world, starting with big 12*12 sprites to clearly convey both the robots and Jehanne on small boards before moving to successively smaller sprites with vanishing details but larger boards with more robots.
For the music, I ditched the Lynch film soundtrack this time and wrote a bunch of my own stuff; there's four distinct level music compositions, each in three parts, of which you hear one, two, and then all three parts on levels X-1, X-2, and X-3 for each world, as well as a little title theme synced to the title animation and a nice ending theme if you manage to beat the game.
Dune fan notes:
Butlerian Jihad manages somehow to be even less canonical than the last two games; the actual lore from Frank Herbert's novels and from the fantastic Dune Encyclopedia is a lot more interesting and complicated than "literally go fight with robots". Jehanne is a really potent character, the unwilling, pacifist tactician leader of a revolt who in her untimely death both catalyzed and unleashed the violence of a galaxy-wide razing she herself had worked hard to keep within reason and control. The story of the Butlerian Jihad is less about the threat of machines than it is about the threat humanity poses to itself when violent ideology becomes militarized and stripped of restraint.
But I gather that the drecky Brian Herbert prequel stuff threw all of that out in favor of this dumb FIGHT THE ROBOTS schtick, so maybe that's what happened with the licensing on this one, in the alternate universe where these games got made.
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.
- 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.
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!
Reach the end of each map without crashing into the dunes below or being overtaken by the following sandstorm.
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.
The map was an interesting thing to work out; I had a few ideas for how to do sand storm stuff and how to create maps dynamically to get past the limited map sheet area, but ultimately decided to make do with a pretty conservative approach of just static directional-wind tiles on a pre-rendered 1*8 string of map screens. The method for reusing the same map for three increasingly windy levels was fun, though; if you look in the map memory on the cart, you'll see green, blue, and red arrows filling it up, and on each level I successively convert another one of those to actaul sand storm sprites as the level loads up.
Music is a straight-time rendition of a bit of the extremely Toto-y soundtrack of the Lynch film.
The "speech synthesis" is just a trio of sound effects played back together chunk by chunk in time with the words, using melodic rises and falls and rests to suggest speech. The way this is implemented is super duper hacky, and could be formalized a little into a function and a decent data structure if I wanted to use it as more than a one-off, but I'm not convinced it's worth the effort for such a silly effect.
1.01 - Tweaked starting configuration to be less brutal to someone who hasn't been playing this for several days while developing it.
1.0 - Release