Period: November 10, 2025 Total Commits: 24
Daily Dev Update: Smarter Bots, Map-Driven Spawns, and Goldflow Clarity
Hey, here’s what we’ve been working on. Today was mostly about getting bots to make real, level-headed decisions, moving spawn definitions to maps where they belong, and making goldflow both smarter and easier to see. We also cleaned up a bunch of placement and rendering edge cases.
What’s New
Map-defined spawn areas (no more hardcoded fallbacks)
Spawn areas now come directly from map data. This removes hidden assumptions and keeps Battle/Campaign behavior consistent.
- Server requires spawn areas to be defined by the map
- Medium maps now use a 4‑tile spawn width by default
- Pathfinding and placement checks use the map’s actual width/height, not constants
- Initialization waits for map data so systems don’t boot with empty spawn zones
Why it matters: less mismatch between what you see in the editor and what happens in a match, and cleaner PvP balance on mid-sized maps.
Goldflow that follows real paths (and never goes negative)
Goldflow scoring is now tied to real minion paths (flow fields) and living castle targets. Towers and upgrades are evaluated where minions actually walk.
- Uses alive castles only and the closest target per spawn
- Scores tiles along actual paths, not approximations
- Net value is now max(0, minionGold − towerCoverage) to avoid negative traps
- If everything is zeroed out, we fall back to pure minion value so decisions keep moving
- Tower placement now sums ALL tiles inside a tower’s true circular range, not a tiny radius sample
Gameplay impact:
- Towers go where they cover the most valuable traffic, not just the nearest “hot pixel”
- Upgrades prioritize under-defended lanes instead of piling on already-safe areas
- Bots keep making productive choices even in overbuilt zones
[screenshot: goldflow overlay highlighting high-traffic lanes at bd87d1a]
Client side bots with upgrades
We ported the full strategic AI to the client and wired it into the new goldflow system. It’s more deliberate and less random.
- Shared decision engine across bots, calculated once per tick for performance
- Investment ratio shifts to 2:1 (towers:minions) for steadier defenses
- Generalist bots always include at least one tower and one minion in their picks
- Bots won’t place or upgrade towers until there are enemy spawns targeting their board
Gameplay impact: practice matches now play out closer to human tempo, with clear priorities and fewer wasted placements.
In-world Send Wave button
The campaign “Send Wave” control is now an in-world sprite anchored to the spawn area instead of a floating HTML element.
- Clickable sprite with a clean texture and proper world coordinates
- Stays put while you pan/zoom
- You can place towers before the first wave starts
[screenshot: in-world Send Wave button at f37f278]
Gold bounty popups (from the tower that earned it)
You’ll see gold pop from the tower that scores the last hit.
- ~600ms pop-and-drop animation, bright gold (#FFD700) with a black outline
- Scales by bounty size (0.4x–1.2x) with a quick 1.3x bounce at the start
- Renders above damage numbers
[screenshot: gold bounty popup on kill at ffde62d]
Placement and range clarity
- Ghost tower previews now show a proper range indicator immediately; selected towers have a smooth expanding effect
- Fixed selection glow and range indicator in multi‑board matches; they now render on the correct board UI layer
- Towers check range against a minion’s radius with a +0.25 tile buffer for targeting, so edge hits register without changing the visible circle
[screenshot: ghost tower with live range preview at d40005e]
Level editor: spawns that upgrade cleanly and render to size
- Placing the same minion at the same position in a later wave now replaces (upgrades) the earlier one
- The editor preserves spawn levels per wave and auto-selects the updated spawn
- Minions render at their configured sizes, not hardcoded tile size (e.g., land‑drone at 0.5 tiles), with per-minion shadow offsets
- All minions move about 50% faster, so waves run at a brisker pace
What Got Fixed
- Bots now respect road and water placement rules; no more dropping towers where they don’t belong
- Fixed tower placement desyncs:
- Bots track integer grid positions correctly
- Pending placements clear when towers appear in state
- Double-checks prevent occupied tile errors
- Upgrades now serialize actual tower levels and spawn levels properly; upgrade goals trigger only when meaningful
- Gold bounties on minions were corrected so rewards match what’s displayed
- Range/selection visuals now show up consistently in Campaign and Multiplayer
- Level editor changes propagate correctly:
- Spawn changes consider both minion ID and level
- Old icons are removed when levels change
Under the Hood
Shared simulation and per-tick updates
- One shared SimCore drives everyone (humans + bots), which avoids desyncs and cuts memory usage
- Bots operate on serialized snapshots and send actions through authenticated channels
- Per‑tick bot state updates replace polling for tighter feedback loops
Unified placement validation
We consolidated tower placement checks into a single validator used across input and rendering:
- Map bounds, spawn areas, castles, water, roads (only if the tower can build on paths), existing towers, and adjacency rules (Battle mode)
- Single source of truth means fewer “why did the client say yes but the game say no?” moments
That’s the day’s work. If you notice bots doing something odd, or tower placements that still feel off under heavy pressure, send us a note with the map and a short description—those reports help a lot. Thanks for all the playtesting and feedback.