Doug's Game Dev Log
About

Doug's Game Dev Log

One solo dev, several small games, and the bugs, upgrades, and questionable design decisions behind each one.

2026-08-29

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-28

Every 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-28

Mines, 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-27

The 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-26

Enemies 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-26

Towers 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-25

Lightning 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-23

The 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-21

Damage 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-19

Every 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-15

Every 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-10

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-08

Now 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-07

Everything 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-07

Two 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-05

The 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-03

The 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-02

Banish 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-01

One 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-21

No 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-18

Thirty 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-16

Eleven 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-14

Five 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-12

A 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-10

A 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-08

Tower 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-14

Sliders, 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-11

Ghosts, 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-08

Trapped 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.