Doug's Game Dev Log
One solo dev, several small games, and the bugs, upgrades, and questionable design decisions behind each one.
An Enemy That Blinks and a Road That Forks
Two more days on td-survivors: a teleporting enemy, a map that forks in two, pause and options screens, per-tower lifetime stats, and cards that mean it.
2026-08-08Now the Backlog Has Cards Too
Two days of small, satisfying fixes on td-survivors: the frost tower learned to chill a whole area, clicks fire on release so you can bail out of a misclick, co-op aim finally works, and the whole project moved onto a Trello board full of cards.
2026-08-07Everything Snapped to a Grid and Started Glowing
Two days of making td-survivors look like an actual game: a marching-squares auto-tiler that bends grass around the path, a rigid 1080p grid, snap-to-8px placement, tilted glowing buttons, and a candy-arcade post shader.
2026-08-07Two Numbers and a Straight Line
Every tower in td-survivors levels from 1 to 100. Instead of authoring 100 stat blocks, I author 2, level1 and level100, and let a straight line fill in the other 98. Then I deleted the old system that did it the hard way.
2026-08-05The Waves Went on a Diet
td-survivors used to describe every wave enemy-by-enemy, spawn-by-spawn, in giant JSON files. I replaced all of it with a handful of multipliers and deleted about 12,000 lines. The game did not notice.
2026-08-03The Server Stopped Repeating Itself
td-survivors co-op now streams field-level deltas instead of the whole world every tick: ~49% less bandwidth, lower CPU, and smoother play. Plus persistent players and enemy/tower tweaks.
2026-08-02Banish It Before You Even Start
td-survivors gets meta-progression: buy permanent upgrades with bronze coins, banish cards and towers before a run starts, plus new normie and speedy sprites.
2026-08-01One Simulation, Many Cursors: Bolting Online Co-op onto an ECS
How td-survivors got online co-op in a weekend: an authoritative headless Node server running the exact same ECS sim the browser does, no lockstep, no tears.
2026-07-21No Classes, No `this`, Just Arrays: bitECS + LittleJS
How td-survivors is built: a strict no-OOP ECS on bitECS 0.4 and LittleJS 1.18, with all game state in struct-of-arrays and pure logic kept testable.
2026-07-18Thirty Cards, Four Rarities, and a Stat Called Luck
How td-survivors' level-up card system gives each run its own identity, with four rarities, a Luck stat that reshapes the odds, and about 30 cards.
2026-07-16Eleven Maps, and Every One of Them Cheats
Eleven stages in td-survivors, and not one is just a prettier path: every single map bends a core rule of the game. Plus medals and how victory works.
2026-07-14Five Bosses, Five Ways to Tell You Your Build Is Bad
Each td-survivors boss is a deliberate check on one weakness of your defense: DPS, burst, placement, AoE, and single-target focus.
2026-07-12A Field Guide to Things That Want to Leak
The td-survivors bestiary: ~23 enemies, each a tiny lecture on a lazy strategy it exists to punish. Grunts, counters, status effects, and one dormant mimic.
2026-07-10A Tower for Every Occasion: 16 Ways to Ruin an Enemy's Day
How td-survivors ended up with 16 towers, and why each one is defined by behavior (chains, ramps, executes, hexes) instead of just bigger numbers.
2026-07-08Tower Defense Meets Vampire Survivors (and Everything Is a Placeholder)
Kicking off a new devlog: td-survivors, a pre-alpha mashup of Bloons-style tower defense and Vampire Survivors leveling, built on bitECS and LittleJS.
2026-06-14Sliders, Saves, and Remembering Where You Died
An Options menu with real-time volume sliders, and a tiny fix that remembers exactly which stage just ruined your run.
2026-06-11Ghosts, Radial Bullets, and the Curious Case of LIFETIME
MULTISHOT fires bullets in a perfect circle, dead enemies keep playing, and one upgrade refuses to do percentages like everyone else.
2026-06-08Trapped in a Cube: Why Memory Falling Into Place Runs on Excalibur
An introduction to Memory Falling Into Place — a bullet-hell roguelike about a ship stuck inside a cube — and the engine that makes it tick.