Behind the scenes

Making Alpha Chase

A vector arcade game that grew from one late-night question to version 2.16 in twelve days. Joe directed and play-tested; Claude wrote the code (and this page).

The Alpha Chase start screen: the neon ALPHA CHASE logo with swept wings above a glowing PRESS START button, the attract-mode game playing dimly behind it.
12days, Oct 20–31
219git commits
12,733lines, one HTML file
42test suites

Wave 1October 20, 9:13 pmThe first build

It started with a question

I remember an old VIC‑20 game… Would it be possible to have that be a game in a web browser?

Joe

Joe asked that in the middle of a session about something else entirely. The game he remembered was a 1982 VIC‑20 cartridge: you fly a ship round a walled track with a box in the middle, enemies circle the track, and your shots bounce off the walls.

Claude offered two looks: glowing arcade vector lines, or the VIC‑20's chunky pixels. Joe wanted both, with a switch between them. Eleven minutes later there was a playable game in a single HTML file with no downloads, no plugins and no sound files. Every sound is made by the browser as it plays. Joe gave it its name.

The first Alpha Chase title screen: the name in blue vector type, PRESS FIRE in a box, and a points table of six enemy shapes.
The first title screen, with the points table. Rendered fresh from the earliest saved copy.
Early gameplay: a white arrow ship near the centre score box, enemy shapes exploding into line pieces above it.
Day one in play: wave 1, a combo of hits already scoring.

Nine minutes later Joe asked what would make it better. Claude listed ten ideas. Joe's answer was I like all these suggestions, and they all went in that night:

  • Shots that bank off the walls
  • A slingshot boost off a fast wall hit
  • A combo multiplier up to ×4
  • A bonus saucer worth 5,000
  • Gamepad support
  • A top-10 table with three initials
  • A heartbeat that speeds up as a wave thins out
  • VIC‑20 sound-chip imitation
  • A CRT glass effect and screen shake
  • A VIC‑20 boot and tape-loading screen

Wave 2October 24–25Two games in one

A faithful copy and a spinoff

After a few days away, Joe came back with Can you think of any improvements to level up Alpha Chase? That brought music, rising difficulty, power-ups, the first boss, a daily challenge, medals and a new laser look with its own sound.

I think we can branch into two games. One that's faithful to the vic20, and another that's our own spinoff with advanced features.

Joe, October 25

A few minutes later he refined it: both should live in one game. Pressing V ends your current game and starts a fresh one in the other style. The VIC‑20 side became a careful copy of the 1982 cartridge, with its rules, its white-on-black look and its sounds. Joe asked to keep the tape-loading intro.

For the sound, Claude measured a recording of the original cartridge. The bass loop is four notes, G, G♯, G and F, about 0.4 seconds each. The laser is a sweep of 16 pitch steps, one every sixtieth of a second, from 1,583 Hz down to 97 Hz. Alpha Chase's version matches it within about 1%.

A VIC-20 start-up screen: blue text on white reading READY, LOAD, PRESS PLAY ON TAPE, SEARCHING, FOUND ALPHA CHASE, LOADING, with the border striped in colour bands.
The tape-load intro. The striped border changes at most three times a second, a safety limit for flashing that the game keeps everywhere.
VIC-20 style gameplay: white pixel sprites of droids circling below a plain white score box on black.
VIC‑20 style in play: pixel sprites taken from the cartridge, and the original score box.

PRESS V TO SWITCH STYLES · THE GAME STARTS FRESH

The arcade side took the opposite road. A seven-stage build that morning added controls and settings, new enemies and a boss rotation, cabinet art, lifetime stats, unlockable ships, an offline app and an online leaderboard. Then came a full code, security and performance review, fixed in eight commits. Joe had one condition for anything online: Make sure that this will still work with Cloudflare's free plan.

Side questOctober 24, lateNever built

The heavy-metal detour

In the middle of the laser work, Joe asked for a screenshot of the game in an 80s heavy-metal style. A separate agent built it as a working mockup: chrome rivets, flaming skulls, lightning instead of lasers. A full Metal mode was estimated at a day or more of work, and Joe left it as a concept.

A heavy-metal version of the arena: chrome-riveted walls glowing red, purple lightning bolts, flaming skulls as enemies, and a fiery explosion over silhouetted mountains.
The Metal concept. It's one of the few looks that didn't ship.

Wave 3October 27v1.0 · v1.1 · v1.4

Live on the web

On the morning of the 27th the game got its own home at play.joeraasch.com/alpha-chase, served by a Cloudflare Worker on the free plan. The leaderboard went live the same afternoon. From then on every publish bumped a version number on the title screen.

The rest of that day added eight ships that each trade a strength for a weakness, each with its own special weapon. Also new: a fourth boss called the Carrier, with hangar bays that open and launch droids, plus a one-minute guided tutorial, voice callouts and phone haptics. By late evening the enemies had become turning 3D wireframe war machines.

Version 1.1 gameplay over a purple nebula: a BANK SHOT ×2 bonus pops up near the top wall, and the centre box shows COMBO ×2.
v1.1: a bank shot off the top wall pays double. The sky behind the arena came from the new cabinet-art pass.

Wave 4October 28v1.5 → v2.1

Seven versions in one day

The 28th was the busiest day of the build. Work was split into parallel branches, one each for combat, modes, foes, the arena, look, effects and sound, and then merged back. The repository has 41 merge commits, most of them from this day and the next.

Arena twists arrived: walls that close in, a gravity well that bends every shot, and a centre console that changes shape. Bosses got death sequences and name cards as they fly in. Then came an attract-mode demo that plays itself, a 16:9 wide arena option and a new sky for every wave.

Version 1.5: a swirling gravity well in the lower right of the arena, with the banner GRAVITY WELL: IT BENDS EVERY SHOT.
v1.5: the gravity well.
Version 2.0 at wave 8: the arena edge glows yellow and a MEDAL: FULL CHAIN badge appears at the bottom.
v2.0: a medal earned mid-wave.
The Track Worm boss: a long chain of green hexagons with a red head crawling along the bottom lane, its health bar across the top.
The Track Worm, the first boss you meet.

Wave 5October 29v2.2 → v2.5

A logo from Joe's sketch

The opening logo went through three versions that morning. The first two were neon takes on a classic arcade marquee. Then Joe supplied his own design: block letters with ALPHA over CHASE, and wings that sweep out from the legs of the A. The intro draws it line by line, the way a vector monitor would.

Intro frame: a single bright horizontal line across a black screen, like a monitor powering on.
Power on
Intro frame: the arena border appears and a small ship flies in from the left.
The ship flies in
Intro frame: ALPHA with its swept wings is drawn in white outline.
ALPHA is drawn
Intro frame: the finished logo, ALPHA in white over CHASE in yellow outline.
CHASE lands on the beat

The same day brought a frame-rate governor that steps the effects down on slow machines. Ships were rebalanced with fire-rate, power and brake stats, and the game got a brake, a reverse thruster.

Wave 6October 30v2.7 → v2.12

Neon pixels

A new game type, Classic, plays the cartridge's rules tick for tick, but in the arcade's glowing look. That raised a design question: what does a 1982 pixel sprite look like as a neon tube? Claude drew every enemy six ways, keeping the cartridge's exact pixels and changing only how the outline is lit. Joe picked A2, rounded, like bent glass tubing.

A comparison sheet: the VIC-20 droid and command ship sprites in white pixels, then six neon versions of each in orange and pink: tube, rounded, chamfered, double line, LED and lit panel.
The Neon Pixel sheet. The first tile in each row is the cartridge's sprite; A2 (rounded) became the Classic look.

Wave 7October 30–31v2.13

The design review

With the gameplay in place, every menu and non-game screen got a full design review. A capture script photographed every screen at four sizes, from desktop to phone landscape. Mockups were made two ways: as HTML pages, and as images from GPT Image 2.5 through Kie.ai. Joe approved the whole report, and it was built in ten ranked steps overnight.

Each built screen was checked against its mockup in a side-by-side image. Joe also trimmed the game list. Casual, Weekly and Hard were cut, leaving Arcade, Classic, Endless, Daily and Boss Rush.

An AI-generated mockup of a high-score entry screen: NEW HIGH SCORE #3 in orange, with the third row highlighted in a pink frame with sparks.
The mood: a GPT Image mockup of the high-score entry.
Two stacked high-score tables: the HTML mockup above, the built game screen below, nearly identical, with letter slots for the player's initials.
High-score entry: HTML mockup above, built screen below.
The ship hangar, mockup above and built version below: a large outline drawing of the selected ship, six stat bars, and a row of eight ship thumbnails.
The hangar, mockup above and built below. The built one adds the ship's special and its paint jobs.

The app icon went the same way. Eight neon candidates were painted, and Joe picked E, the ship running the top lane round the console.

Eight neon icon candidates in two grids: ships, arenas, a bank shot and an orbit.
The candidates. E is the first one in the right-hand grid.
The final Alpha Chase app icon: a white ship trailing a pink line along the top of a blue arena with a small centre box.
The icon that shipped.

Wave 8October 31v2.14 → v2.16

The front door

I would like the beginning to be impressive. I have a few credits on Kie.ai. Would having a cool song intro on the main page be nice?

Joe, October 31

The game's opening had been left out of the redesign. Now a visit opens on PRESS START over the demo game. Pressing it powers up the monitor and draws the logo in time with music, then shows the title.

The music started from the game's own synthesized overture, built from the wave-clear tune. Kie.ai's music model turned that into five takes: synthwave, arcade rock and the original synth. Joe picked B2. The animation runs on the track's own clock, so the logo lands on the beat even if the file starts late. If the track can't play, the synth version plays instead.

The synth overture

Made in code by the browser. Still the fallback.

Take B2 Joe's pick

The Kie.ai synthwave take that ships with the game.

The intro with its music, recorded from the live build. Press play for sound.
Version 1.1 title: a typed opening story above a small PRESS FIRE box, over a purple nebula.
v1.1
Version 2.0 title: the story text above a box of nine small game tabs.
v2.0
Version 2.13 title: the story text, and an ARCADE picker with page dots and PRESS FIRE.
v2.13
Version 2.16 title: ALPHA CHASE in large blue type, a HIGH score box, and a rail of five portrait game cards.
v2.16, today

Bonus roundAll twelve daysHow it was made

The working method

Joe directs

Every feature started with a request, a reaction or a pick from a set of options. Claude worked on its own between check-ins and logged every decision.

Tests, not eyeballs

42 test suites drive the game in headless browsers. A golden test keeps the VIC‑20 style pixel-identical unless a change is meant for it.

Review, then ship

A code and security review ran before every publish. Nothing went live until Joe said "deploy".

Fair dailies

All gameplay randomness comes from a seed set by the date and wave, so the Daily challenge is the same run for everyone.

Free-plan hosting

The game, the leaderboard and its database run on Cloudflare's free plan, with no paid services.

A written trail

Every change has a changelog entry. The changelog is now about 300 KB of notes.

Bug reportsFrom the pilot's seatFound by playing

What only a human could catch

The tests checked the rules. Joe checked how it felt, on his own phone and browsers. A few of his reports:

I think the game still plays when the power up cards are there… I hit a mine and I died.The world now freezes while you choose an upgrade.
The ship in 'classic' mode is always showing it's thruster animation, even if it's not active.The attract demo's autopilot had left a flag on.
If I use Safari, it works fine. If I save it to my home screen, it's the synth version.The intro track is now loaded whole and played through Web Audio, which works in the iPhone home-screen app.
The opening screen, it's hard to read the logo with the game behind it.A soft dark pool now sits behind the logo and PRESS START.

Fly a lap

Wave 6, recorded from v2.16.

Alpha Chase is free and runs in any modern browser, on a phone too. It works with a keyboard, a touch pad or a gamepad.

PRESS START