Chuck: A Stealth Platformer in 600 Kilobytes
Chuck is a free stealth platformer up the inside of a sealed tower. Every pixel and every sound is generated by code, so the game fits in 600 kilobytes.
The second of my two new games is Chuck, a 2D stealth platformer about one man going up the inside of a forty-storey tower that twelve armed men have sealed from within. His wife is somewhere above him, nobody else is coming, and the clock is running.
Chuck is free and playable right in your browser on itch.io. It also runs on Windows, macOS and Linux, with keyboard or any gamepad. Its tagline sums it up: forty floors, one way up, and thirty-eight minutes.
The Night
Ellen Ross wrote the access system for Kessler Tower and works nights as its duty controller. At 00:12 she is three blocks from work with a coffee in her hand, her husband Chuck twenty metres behind her, when an SUV comes up the kerb lane with its lights off. Two men in maintenance coveralls put her in it. Nobody comes, because eight minutes earlier every police unit in the city was sent somewhere else.
Chuck follows them and watches them walk her in through the tower's own front door at 00:22. He goes in after them. What is happening inside is not a kidnapping. The crew has been working in the building for months as its night maintenance contractor, and the hostage demand they broadcast is pure theatre - it put every unit in the city on a cordon around the building and nobody at all inside it. The real target is the sub-vault, and its last lock needs the building's duty controller, alive and present. At 01:00 the bonds leave the roof.
If one man, one tower, one night, a crew of twelve and 640 million in bearer bonds sounds familiar, it's supposed to. Chuck is my homage to a certain action classic from 1988. I set myself one rule for it, though: the game pays tribute by describing the films, never by naming them. Anyone who recognises the shape of the night is meant to.
How It Plays
The game opens with a short prologue - including a top-down night car chase across the city - and then becomes a side-scrolling platformer. Seventeen sectors stand between the lobby and the roof. Each one is a small infiltration route: find the key card or hack the security terminal that opens the way deeper in, and decide floor by floor when to fight, when to sneak past, and when to let the building do the work for you.
The guards are what make it a stealth game rather than a shooter:
- They see - Through a forward vision cone that walls, floors and crates block, so they can spot you diagonally or fire straight down a ladder shaft
- They listen - Gunfire draws the nearest of them over to investigate
- They remember - The fallen stay where they drop, and a guard who finds a body often sprints for the alarm switch
- They talk - Twelve men run this night like a shift, and if you stand close enough, their radio chatter appears on screen with the speaker's callsign. Most of the story is told this way, without stopping the game
Against them, Chuck has a quiet way through. A knife takes a guard down in one stroke from behind, as long as nobody has seen you. A pocketful of bolts that never runs out lets you make a noise somewhere else, and calm guards walk towards the noise instead of you. And a body can be dragged out of the room it fell in - slowly, with no ladders and no jumping - because where you leave it is a decision as real as where you fought.
When things go wrong, an alarm doesn't end the level. It changes it: red light, every guard moving, a sweep around where you were last seen. A flash charge blinds everyone nearby for a few seconds without killing anyone. It doesn't solve the encounter - it buys you seconds, and the seconds are for leaving.
Five of the sectors aren't walked at all. The stair door is welded shut, the way on is an open window, and Chuck climbs the outside of the building across the brickwork, dodging wind gusts, birds and men throwing things out of windows.
Difficult, But Never Unfair
Chuck is a difficult game, but I wanted it to be one you never quit out of frustration. Progress inside a floor is banked, so a death resumes at the last key card, hack or door, not at the stairs. Running out of lives always offers the same sector again - the game never sends you back to the lobby. Even the car chase in the prologue can't block you: after a couple of failed attempts it simply lets you skip ahead, because a curtain-raiser must never be the wall someone quits the game on.
The options let everyone tune the game to how they want to play it:
- Assists - More hearts, slower guards, or deaths that never cost a life. Nothing is locked behind finishing the game
- Veteran mode - The same lever the other way: a faster crew, one life, no continues
- Reduced motion - No screen shake and no strobing warning lights
- Fully rebindable controls - On keyboard and gamepad. The game even asks each gamepad what letters are printed on its buttons, so "A" is always the button marked A
The Clock on the Wall Is the Score
Here's one of my favourite details. The story says Ellen is walked into the building at 00:22 and the bonds leave the roof at 01:00. That's thirty-eight minutes - and the game takes that number literally.
The night is divided evenly between the seventeen sectors, which gives each floor about 134 seconds. A clock hangs on the wall of every interior sector, showing the time of the night at that point of the story. And those same 134 seconds are the par time the score measures you against: every second you hand back is paid in points. The clock on the wall and the time bonus are the same number, derived from one constant in the code, and a test makes sure they can never drift apart.
This consistency also caught a bug that had nothing to do with code. One of the outdoor climbs used to be lit by a beautiful sunrise - warm stone, birds, the sun coming up behind the building. But that climb sits at 00:44, between a wall clock reading 00:42 and another reading 00:46. Players would have watched the sun rise and set within five minutes. The sunrise became a moonrise, and the scene kept its composition - just in the middle of the night, where it belongs.
A Whole Game in 600 Kilobytes
The other thing that makes Chuck special is under the hood. The whole game is a single binary with no asset files at all. There is no sprite sheet, no tileset, no audio folder. Every pixel is drawn procedurally at runtime, the levels are compiled into the executable, and every sound effect and every piece of music is synthesized when the game starts.
The audio is generated from the same few building blocks as old sound chips: sine, square, triangle and sawtooth oscillators shaped by envelopes. Even here there are small decisions that matter. A mathematically perfect square wave has an infinite series of harsh harmonics that sounds brittle and tiring in a digital mixer, so Chuck's square wave is built from just three of them - enough to keep the retro colour, without the fatiguing top end.
Chuck is written in C17 against SDL3, and the browser version is the very same code compiled to WebAssembly. Because there are no assets to download, the whole web build is about 600 kilobytes and starts in about a second - smaller than many of the hero images on modern websites. For comparison, my other new game, Breakup, also draws all of its graphics in code, but ships with a recorded soundtrack, and that alone makes it around 20 MB.
It's a nice illustration of how cheap code is compared to content. Around 68,000 lines of C - guards with vision cones, a car chase, cutscenes, an illustrated field manual and a whole procedural soundtrack - take up less space than a single track of Breakup's soundtrack.
Play Chuck
Chuck is completely free, and there's nothing to install if you play it in the browser. A full campaign takes a few hours, and the game remembers your furthest floor, your best score and your fastest time in every sector, so you can play it in short sessions.
I'd be really happy if you gave Chuck a try on itch.io - and if you make it to the roof before 01:00, let me know. The source code is on GitHub under the MIT license, including the game's own level editor.
Final Thoughts
Chuck started as a simple idea - one man, one building, one way up - and grew into a game with guards that see, hear and remember, a car chase, cutscenes and a crew that talks on the radio. A surprising amount of the work wasn't about code at all, but about consistency: making sure the clock on the wall, the chatter on the radio and the score at the end of a floor all tell the same story.
Building it entirely in code, without a single image or sound file, turned out to be the right fit. When the art is code, it can follow the same rules as everything else in the game - and be tested like everything else too.
Thank you for reading, and good luck up there!