A game with no engine
There is no game engine under STRIKE. The map is a single giant deep-zoom image, around 150 megapixels, served through OpenSeadragon, the same viewer the map devlog ends on, and the whole trick was to stop treating that viewer as a picture frame and start treating it as a camera. Everything in the world is measured in image pixels. A small function takes a point on the map and asks the viewer where that pixel currently sits on your screen, so the game can draw onto a clear canvas laid over the image and have its drawings track the city as you pan and zoom.
The whole game lives on that one overlay. The light rattle of a screen shake just jostles that overlay, but the heavy hits had to be done the viewer's way. A big blast nearby shoves the whole OpenSeadragon camera away from the impact and lets it drift back, so it's the diorama itself that flinches when something goes off next to you.
You can't paint enemies into a painting
The map is finished art. I was not going to repaint the city every time a tank moved, so nothing in the game is baked into the picture. Every enemy, fuel can, and ground target is a little sprite prop sitting in a list and drawn on the overlay, the way the old Desert Strike games dropped units onto a fixed backdrop. Blow something up and you don't get a hole in the city, you get a scorch decal and a column of smoke layered on top.
The very first bug I had to fix was the unglamorous kind. Dead props were never being removed from their list, so the city slowly filled with invisible corpses until the frame rate sagged for no visible reason.
A villain, and a holy grease
A shooter needs someone to shoot. The story I gave it is pure St. Louis. Bad Man Stan is a tech baron paving the city into one endless data center, server farms over the Arch and cooling towers on the Hill. You play the Carpet Queen, the city's flying-carpet folk hero, and the one thing that shorts out Stan's machines is the holiest, greasiest thing the Lou ever fried: toasted ravioli.
So you ride a Persian rug over a toy-model St. Louis and machine-gun breaded pasta at server racks. Beat Stan and the game tells you the city stays gloriously analog. I did not overthink the premise.
Drawing a hundred sprites with a slot machine
The sprites, the carpet and the ravioli and the enemy gunships and the bosses, are all drawn by Google's Gemini image model, the same family that styled the map. Asking it for a clean cutout is a negotiation. It loves to plant the subject on a solid card no matter how plainly you ask for a transparent background, so the working move is to demand a violently bright magenta backdrop and then key that one color out myself afterward.
That habit nearly cost me the hero. The Carpet Queen rides a deep red rug, and my first color key decided red was close enough to magenta to delete, punching see-through holes straight through the carpet. The fix was a fussier rule that removes only true magenta by leaning on the blue channel, since magenta is bright blue and red is not, so the rug survives while the background still goes. None of this art is load-bearing, though. Every sprite has a hand-drawn fallback in code, so if an image fails to load the game quietly paints a stainless, Arch-curved flyer with its own two hands and keeps going. You could strip out every art file and STRIKE would still play.
One more quirk of working with painted sprites: you cannot spin them to aim. Rotate a tank drawn at a three-quarter angle so it faces away and it renders treads-up, like a beetle on its back. So only the aircraft turn to their heading. The ground units just flip left or right and keep their treads on the dirt.
Making it fair
An arcade shooter is only fun if losing feels earned. The first thing testing exposed was a cheap exploit: you could outrun everything and fire over your shoulder, because the carpet was faster than every threat in the sky. So the gun grew a forward cone that narrows the faster you fly, which means running away now costs you your aim.
Then enemy fire got honest. Every shooter winds up for about a third of a second and draws a dashed red line showing exactly where the shot is going, corrected for your speed, so a hit is always something you saw coming and failed to dodge. That telegraph caught me lying once. The jets drew their warning line toward me but actually fired along their own heading, so the line pointed one way and the bullet went another. I redrew the warning along the real shot path and made the jet visibly bank to commit to it. Bullets also step along their path a few pixels at a time instead of jumping a whole frame at once, because a fast shot was tunneling clean through a hitbox without ever registering a touch.
THE CLOUD
Every few sectors the normal enemies stop coming and the sky darkens for a dreadnought blimp called THE CLOUD, Stan's flying mainframe. It's the one fight I was most worried about breaking, so I built it to be impossible to break in the worst way. The boss is a single value off on its own, kept deliberately out of the regular enemy list so a stray explosion can't kill it early and a budget counter can't lose track of it.
Its phase changes are pure theater, with no invulnerability windows and no damage gates. The moment a boss has a now you can't hurt me state, one missed line of code turns it unkillable, and nothing in the tests would catch that. It still gets three telegraphed attacks: a bomb-bay barrage, a slow rotating spiral of flak with a gap you can always thread, and a scramble of escort drones capped so the screen never tips into a bullet-hell mess.
A meditation app, strapped to a war
The strangest decision in the whole project is the soundtrack. STRIKE is a game about machine-gunning pasta at a billionaire, and it is scored like a float-tank session. The music is built live in your browser out of a soft pad tuned to 432 hertz, a low drone with its two channels detuned by the exact interval people use for binaural relaxation, a pulse set at about a resting heart rate, and a trickle of notes arranged so the melody never repeats, the same no-loop idea behind that "most relaxing song ever" track.
It's the calmest bed I could synthesize, bolted onto a firefight on purpose. It started as a placeholder I was asked to keep, and proper combat-reactive music is a job for later, but the contrast grew on me enough that I'm in no hurry.
The bugs that fought back
Plenty did, and the good ones were never where I looked first. A jet that flew off the edge of the map could die without ever playing its death animation, which meant the cleanup that removes dead things never ran, so the jet lingered as an invisible zombie spraying broken math across the simulation until the whole frame went haywire. A high score I had just wired up to save between sessions quietly did nothing, because a leftover variable of the same name was eating the value before it could ever reach storage.
The most humbling report came from a bot I wrote to play the game for me. It could not win. Not rarely won: a competent autopilot never once cleared the opening sector, which told me the early game was mathematically too hard long before any person would have complained. Tuning it back down from impossible became its own small science, run as repeatable experiments instead of by feel, until the bot could reliably fight its way out of the first neighborhood.
The game that built itself overnight
Here is the part I still find a little uncanny. I did not build most of this in one sitting. I set up a loop that woke itself every twenty minutes or so, read a running status file to see where things stood, planned the next improvement, wrote it, ran the result through a suite of automated browser tests, handed it to a panel of reviewer agents to tear apart, fixed what they flagged, committed, and went back to sleep.
It ran nine of those cycles across six themed batches: stop the bleeding, turn the sandbox into a real run, make it fair, add the juice, build the boss, polish for phones. When a final review judged the game genuinely shippable, the loop deleted its own alarm and stopped. Every behavior that mattered was pinned by a named test, which is the only reason a process like that can keep changing a game without quietly breaking the parts that already worked.
Saving the Lou, and where it goes next
Beat Bad Man Stan and you get a gold screen reading THE LOU IS SAVED, the city left gloriously analog, and the option to keep flying an endless assault. That's the game that's live right now: twelve named neighborhoods, five kinds of enemy, four cursed St. Louis mid-bosses, the blimp, the final stand, and a fistful of food-themed power-ups, from a Ted Drewes deep-freeze to a Provel cheese shield.
That next chapter is no longer hypothetical. There is a full story mode being playtested on a private build now, and it goes somewhere genuinely strange. It opens on a cutscene: Bad Man Stan stands on the lawn of a quiet brick house at 8435 Roanoke Drive, the actual St. Louis house from the 1949 exorcism that inspired the movie, and decides it would make a fine spot for a data center to power his sports teams. He paves the most haunted address in town into a server farm, the machine wakes something old and furious, and that is where every cursed enemy in the game has been coming from all along. His possessed AI even blows the Gateway Arch off the riverfront.
The campaign threads four rescue missions through the city, each a small story of its own. You bomb a rooftop data center at the City Museum and free Bob Cassilly, who forges you a heavier weapon and rebuilds the Arch he watched fall. You free Chuck Berry at Blueberry Hill and he joins your wing, strafing servers with flung guitar notes. You break John Hartford loose from his caged steamboat on the river, and he and Chuck tear into a rock-out that doubles your fire. You spring Raja the elephant from the zoo and a whole herd stampedes for the Lou. By the time you reach Stan, the fight is not a damage race. It is a run of timed prompts, where hitting the right button on the right beat drops a freed legend's power on him like a hammer, and missing means you wear the blow instead.
The uncanny part repeats. Most of that arc was built the same way the rest was, by a loop that woke itself, read the plan, wrote one mission, ran it through the test suite, and committed, mission after mission, with a person stepping in only to play it and say what felt wrong. None of it is on the public build yet, because it still has to survive being played. But the bones were built to grow, which was the whole point, same as the map underneath it.
