Period: October 27, 2025 Total Commits: 41
Daily Dev Update: Cleaner Boards, Smarter Bots, and a Wave Peek - October 27, 2025
Hey—here’s what we’ve been working on today. Most of the work landed around clarity and stability: better borders and ownership visuals in PvP, a new wave preview panel for campaign, a critical projectile pool fix that removes hitches, and the Reddit single‑player build is loading reliably again. Bots also got a pass so practice matches feel less flaky.
What’s New
Campaign wave preview
We added a compact panel that shows the next incoming wave in campaign mode. It groups by minion type and level, sorts by threat (higher level first), and uses readable icon stacks so you can plan without pausing.
- Grouped by type/level, shows count and level at a glance
- Scrollable for dense waves
- Only replaces the Team B panel in campaign; multiplayer keeps the standard HUD
[screenshot: campaign wave preview panel in HUD at 86598a4]
Clearer team territory and ownership
The edges of each multiplayer board now read cleaner and don’t cover gameplay.
- Team border: thin inner edge at the map boundary (0.075 tiles) with a soft outer glow (2 tiles) so you can spot sides instantly
- Renders behind gameplay so towers and minions are never obscured
- Ownership highlights are slightly smaller (0.96 x 0.96 tiles) to avoid bleeding into grid lines
[screenshot: multiplayer board with team-colored border glow at 82647ad]
Road‑building tower support
Path‑building towers (like spikes and wind) can be placed on roads where it makes sense. Ghost previews and validators match what you see, so placement is predictable.
[screenshot: spikes tower placed on road tile at 5a10f4c]
Fresher ground visuals, truer colors
We swapped the single grass texture for a randomized tile system (16 variants), removed tone mapping and exposure boosts, and aligned rendering to the actual map size. The result is more natural terrain and UI colors that match the editor.
- Maps now render at their real dimensions; the camera and grid follow suit
- Colors are closer to source art; no more over-bright sheen
[screenshot: varied grass tiles and truer colors at d83709d]
What Got Fixed
Projectile pool exhaustion (major)
There was a cleanup gap where some projectiles weren’t released if they were spawned and died in the same tick. That snowballed into pool exhaustion, fallback instance spam, and occasional renderer errors.
- Now releases dead projectiles immediately, which plays fine with interpolation and existing destruction delays
- Removes a bunch of console spam
- Fewer spikes during heavy projectile moments
Bots that actually show up (and stay connected)
Practice matches got much steadier:
- Corrected action timestamps to match the sim so tower placement no longer crashes
- Bots re-announce when games start so the worker marks them connected
- Server broadcasts now include connected and isBot flags, so UI reflects real status on reconnect
Placement and grid correctness
- Grid size now matches the real board (29 x 15), fixing stray crashes and weird edge behavior
- Campaign spawn width uses per‑map settings instead of a hardcoded value, so you can place where the map says you can
- Sim resets properly between games—no more lingering towers from your last run
UI/UX polish
- Campaign end buttons stack vertically, share width, and use consistent color logic (continue = green, retry = orange, exit = red)
- “New Game” vs “Singleplayer” labeling adjusts based on mode so menus are clearer
- Ownership glow and team borders align exactly to playable tiles
Stability in embedded/Reddit builds
- Asset paths are now absolute for web builds, which fixes nested route loads
- Navigation uses the router consistently (no window.location traps)
- Reddit build avoids inline scripts and respects CSP, so it loads without tripping platform restrictions
- Campaign level files are correctly packaged, including .tsm data
Under the Hood
- Analytics and session replay: Initialized once at startup with lightweight auto‑capture, then we update the user when a name’s available. Helps us debug UI flows without impacting CSP‑restricted environments.
- Renderer cleanups: Tone mapping removed for accuracy; border effects moved to the background layer; shader resources are cached and reused for cheap team swaps.
- Build and deploy sanity: Absolute asset base for the web, immutable cache headers for hashed files, output directories cleaned on server builds, and better copy steps so campaign levels don’t go missing.
- Less noise: A pass over verbose logs (projectiles, targeting, pathfinding) so your console—and our devtools—stay readable.
- Small safety nets: A few null checks and unique React keys to keep UI diffs clean and warnings quiet.
That’s the lot for today. As always, if you notice anything off—especially around projectile-heavy fights or reconnecting to ongoing games—let us know.