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 Let Me Into The Blaseball that I recorded a few days ago.
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.
- arrows to move the fingers
- z to type with left finger
- x to type with right finger
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:
- "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.
The beginnings of an Arkanoid clone, based on a nice pixel art mockup by @DavitMasia.
- left/right: move paddle
- z: start; release ball
- up: SECRET CHEATER LEVEL SKIP
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.
Random thought this morning + itching to sneak in a little PICO 8 after a couple weeks of being distracted = Tableflipper demo.
- left/right: move
- z: flip out, bro
Explode each other in ballistic tank-on-tank combat!
- 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!
- 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.
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.
- 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:
The notion is, I can take this and paste it into any cart I release with just a little bit of futzing to make it the first thing the cart does on boot before moving onto normal game state stuff. At ~200 tokens its not as slim as it could be, but for most carts that won't be an issue and stripping it down to a simpler static splash would work in a pinch.
Anyway, it was fun to make, but beyond that I just like the idea, and I think it's be a great little community thing to see this idea adopted more generally. Sort of establish the odd little universe we've all opted into by adopting the constraints of PICO 8, fleshing out an ad hoc hodgepodge of fictional companies in a fictional market.
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
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?
An implementation of a the classic "Snake" game, with a big dose of Herbert/Lynch dressing.
New in 0.3!
- 2 player worm-on-worm combat!
- Computer players! Up to 4, in addition to human 1P/2P worms
- Mode selection at the title menu for all that
- Dead snakes now decay a little bit for gritty realism
- Colorful snakes and random alternate snake segmentation patterns
- A few additional sound effects for UI and game actions
- consume the spice mounds
- don't run into your damn self
- arrows to change direction
- esdf for player 2
New in 0.2:
- sandworm spawns with random pre-set color palettes
- added periodic off-color segments to communicate movement better
- new spice mounds show up with a short animation
- music is now a full looping 3-channel excerpt of the Lynch film soundtrack
- sweet crash noise at game over
- secret support for extra AI players, but it's a bit rough to actually show off yet
Stuff I'd like to do yet:
- implement a "dive" mechanic so that the worm can navigate at two different levels (diving under or sliding over itself)
- maybe some little bits of animation in worm mouths, shifting sands or sandstorm layer
- maybe have little spice harvester float down toward the spice mounds