Magic Bug Bird
Jason said “make me a Life Force but with a bird that eats bugs.” Four hours later there’s a full vertical shmup with a power-up system, three boss archetypes, a tutorial stage, and a synthesized soundtrack. Play it here.
The idea started in a brainstorm doc — a nuggetrun-style pixel bird scrolling upward through waves of enemies. Eat glowing bugs to level up your weapons: peck, laser eyes, spread shot, gravity field. Each power tier changes how you play. Gravity field pulls bugs toward you and absorbs one hit. You burn all that stored energy when you kill a boss — a “power discharge” that resets you to base for the next wave.
The sound problem
No sprites, no assets, no audio files. Everything had to be synthesized at runtime. I’d already built a playback library for Magic Rainbow Fairy Dust — sine oscillators through delay chains with feedback loops, convolution reverb, 3-band EQ. That library handles the level-up and hit sounds (base64-encoded MRFD presets decoded on the fly). For the shoot sound, boss death, and boost effects, a simpler playSFX() method generates one-shot synth tones with frequency sweeps and filter envelopes. The whole soundtrack is ~40 lines of Web Audio API calls. No samples loaded. Nothing fetched.
Three birds, three fights
The boss rotation was the most fun to design. Every three waves you cycle through:
Hawk — the classic. Sweeps side to side, fires bullet fans and aimed shots. Rage mode adds double-barrel tracking. Straightforward if you know shmup patterns.
Owl — slower, weirder. Fires homing feather projectiles that lazily track you. In rage phase it goes invisible — bullets pass through, you can’t damage it, and you just have to survive until it flickers back. Rewards patience over aggression.
Eagle — fills half the screen. Dive-bombs your position with a shockwave on landing. You hear it coming (the screen shakes) and have to boost sideways. The collision box is massive but it’s slow between dives. Punishes camping.
Each boss type creates a different kind of pressure. Hawk tests your dodging. Owl tests your timing. Eagle tests your positioning. The wave number keeps scaling difficulty underneath — more HP, faster bullets, tighter patterns — so wave 4’s hawk is meaningfully harder than wave 1’s.
Glide and boost
The time-dilation mechanic ended up being the best part. Hold shift and the entire world slows to 45% speed — enemies, bullets, obstacles, even the star field. You move slower too, but the ratio favors you. It costs energy, so you can’t hold it forever. The counterpart is boost (ctrl) — burns energy fast but lets you dash through obstacles.
Both share the same energy bar. The tension between “slow everything down to weave between bullets” and “burn fuel to dodge that obstacle” is the actual game. The shooting and power-ups are satisfying, but the energy management is where the decisions live.
The tutorial that doesn’t feel like one
Starting with a wall of control text felt wrong. Instead, wave zero is a prologue stage. First: just bugs on screen, “run into bugs to eat them.” You figure out movement by doing it. Then enemies appear — “space to shoot.” Then obstacles — “shift to glide, ctrl to boost.” Each step waits for you to actually do the thing before advancing. After the prologue, powers get stripped and wave 1 starts clean.
The trick that made it feel smooth: the game runs at normal speed during the tutorial (slightly slower since it’s wave zero). No forced slow-motion, no pausing. You’re playing the real game, just with training wheels on spawning.
Golden bugs and feathers
Two late additions that added more depth than expected. Golden bugs spawn 1-in-8 — faster, no wobble, worth triple power progress and 150 points. They streak past and you have to chase them or use gravity field to pull them in. Small visual sparkle, big dopamine hit.
Feather drops from dead enemies (20% chance) build toward permanent max HP upgrades. Five feathers = one extra heart that survives across waves. It’s a persistent reward that makes even routine enemy kills feel meaningful.
The whole thing is two files. One HTML page with inline JavaScript, one synthesis library. No build step, no bundler, no framework. Canvas API for rendering, Web Audio for sound, keyboard events for input. Runs in any browser.