Period: October 29, 2025 Total Commits: 12
Daily Dev Update: Campaign Parity, Smarter Spawns, and Smoother Roads - October 29, 2025
Hey, here’s what we worked on today. Campaign got a bunch of usability upgrades, endless mode learned to spawn on its own, movement on road maps is smoother, and the flamethrower’s damage ticks are where they should be. We also cleaned up the map browser and shipped the level editor button into the main menu.
What’s New
Campaign interaction parity with multiplayer
Campaign now supports the same interactive UI you’re used to:
- Click any tower, minion, or spawn to see detailed stats in an info panel
- Range rings appear when selecting towers
- Upgrade/Sell for towers with proper gold checks
- Upgrade/Destroy for spawn points
- Quick controls: U to upgrade, Delete to sell/destroy
- Right-click or click elsewhere to deselect
This makes solo runs a lot less guessy and a lot more deliberate—especially when juggling upgrades mid-wave.
[screenshot: tower info panel and range ring in Campaign at fb0a39a]
Auto-spawn for Campaign Endless
Endless mode now has autonomous spawn zones that manage their own economy and make spawn/upgrade decisions every few seconds. The goal is a steady escalation without you micromanaging the enemy side:
- Independent gold/income per zone
- Deterministic behavior for consistent runs and replays
- Spawns continue at the wave interval even after the scripted waves end
It’s predictable in timing, not in composition, which keeps pressure consistent but varied.
Unified “Official Maps” browser
The level browser is simpler:
- One “Official Maps” list with clear sections for Campaigns and Individual Levels
- Individual levels get a subtle golden tint so they stand out
- Cleaner metadata, consistent thumbnails, and a “Levels” heading for clarity
- In the Reddit app, the type selector now reads “Official Maps” vs “Community Maps”
[screenshot: unified Official Maps list with campaign and level highlights at 4a69c48]
Level Editor in the main menu
There’s now a Level Editor button in the main menu. In dev it links to the local editor, in production it opens the deployed build. It’s styled differently so it’s easy to spot.
And if you share a level from the editor, it captures a 1200x675 screenshot and uploads it to Reddit’s CDN for the post background. If that fails for any reason, it falls back gracefully.
What Got Fixed
Road movement precision
Minions were occasionally “sticking” near waypoints on road maps due to tiny floating-point errors. We switched to a grid-friendly normalization method that avoids square roots and lands units exactly on their marks. Result:
- No micro-stalls near corners
- Smoother lines, fewer path recalcs on road maps
- Placement rules now respect “builds on path” flags correctly
[screenshot: minions pathing cleanly along roads at 990993b]
Flamethrower DPS correctness
The flamethrower was applying damage every frame instead of at its configured rate. It now ticks at the proper frequency:
- 6 hits per second (every ~0.1667s), not frame rate–dependent
- Continuous damage keeps accurate overflow timing between ticks
- Projectile timers reset correctly when reused
If you noticed it melting waves too fast before, this is why.
[screenshot: flamethrower ticked damage stream at 4556314]
Selection and action reliability in Campaign
- Fixed coordinate mismatches that sometimes broke tower upgrade/sell actions
- Bottom bar actions correctly clear selections now
- Selection callbacks wired up for towers/minions/spawns so deselect works consistently
Wave and timer consistency
- Campaign waves now wait for unit selection to finish before starting
- “Survived” timer freezes exactly when the match ends (no more ghost seconds)
Auto-spawn upgrades
Auto-spawn zones now upgrade their spawns correctly. They use their own gold pool and skip player gold checks, as intended.
Data sanity and loading
- Level metadata is more robust with sensible defaults
- File-based IDs improve cache consistency
- Fixed a couple of broken JSON files that were blocking loads
- Reddit app no longer loops on level loading and shows a proper loading state during context checks
Under the Hood
- Campaign simulation runs at 30 ticks per second; auto-spawn decision logic pulses roughly every 2 seconds
- Pathfinding exposes grid state so we can safely skip unnecessary path rebuilds on road maps
- Deterministic RNG seeded at match start for reproducible auto-spawn behavior
- Level cards show a clear game mode instead of vague tags
- Screenshot pipeline switched to Reddit’s free CDN hosting, reducing setup and cost while speeding up share flow
- Improved logging around captures and uploads: timings, blob sizes, progress, and clearer errors to help us track failures
That’s the day. Try the new Campaign interactions and watch how the endless auto-spawns scale pressure over time. If you see pathing hiccups on custom maps or damage-over-time acting oddly, send a repro—those reports help a ton.