Doug's Game Dev Log
One solo dev, several small games, and the bugs, upgrades, and questionable design decisions behind each one.
The Game Left the Browser
TD Survivors now ships as a Windows and Linux desktop app, packaged by CI on every push to main and published at tds.doug.pt/downloads.
2026-08-28Every Screen Says What Is Happening
Victory and game over merged into one end screen with a full run summary, the pause and options screens grew up, and co-op guests stopped guessing.
2026-08-28Mines, Molotovs, and a Cooldown on Catching Fire
Two new towers, a Flame tower that stopped setting whole waves on fire, and status effects that now all share a duration and a per-enemy cooldown.
2026-08-27The Boss That Farms Your Kills
The Necrolord heals off damage you deal nearby, raises every third corpse as a zombie and cheats death twice. Zombie is now a reusable modifier on any enemy.
2026-08-26Enemies Come Apart Pixel by Pixel
Four takes on a death animation in one day, ending in a particle emitter that dissolves each enemy's own sprite. Plus graphics quality in three tiers.
2026-08-26Towers That Pick Targets Together
A new SMART aim mode scores targets by what the whole defense gains: bosses, damage-type matchups and enemies near the leak win, covered enemies lose.
2026-08-25Lightning That Lights the Whole Board
Nightfall's thunder now reveals the entire battlefield before the dark creeps back, towers light a fixed field of view, and scenery stops growing under towers.
2026-08-23The Level Only Moves Three Numbers
A tower's level now scales only damage, range and fire rate. Every other power lives in a separate file and grows only through upgrades. Plus electricity upgrades, a sandstorm stage, and a stage-select redo.
2026-08-21Damage Has a Type Now, and Some Enemies Care
Every hit in td-survivors is now tagged fire, frost, electric, poison and so on. Enemies carry resistance maps, and a dot-notation spawner lets any base enemy show up immune to whatever type you like.
2026-08-19Every Machine Agrees on the Same Frame
td-survivors got a deterministic fixed-timestep core: the sim runs in exact 20Hz ticks, decoupled from the display, and the same seed reproduces bit-for-bit anywhere. Then co-op got rebuilt on top of it.
2026-08-15Every Tower Grew a Face and the Worm Got a Name
Five days on td-survivors: dedicated art for towers and enemies, a Tesla that fires a star of bolts, a segmented boss worm called M. Nhoca, enemies that talk back, and a pile of quality-of-life.
2026-08-10An 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.