Daily Dev Update: Smarter Targeting, Cleaner UI - November 7, 2025
Period: November 7, 2025
Total Commits: 5
Hey, here’s what we’ve been working on. Today’s changes are mostly about targeting logic, campaign polish, and a small but important lobby fix. Nothing flashy, just tightening screws where it matters.
What’s New
- Towers now prioritize minions closest to the castle
- Target selection uses remaining path distance along the route (Manhattan distance), not raw proximity to the tower.
- For AOE, when damage output is tied, the group closer to the castle gets the hit.
- Result: towers focus on the actual threat rather than whoever wanders closest.
This change makes defense lines feel smarter. You’ll notice less wasted fire on side stragglers and more attention on the lead runner. It also helps clarify why a tower switched targets mid-wave: the front minion is now objectively the priority.
[screenshot: towers focusing the lead minion on the path at 8e41ccb]
What Got Fixed
- Campaign tower range indicators
- Selection/range rings now persist correctly when switching boards in multi-board views.
- The UI cleanup keeps your selection meshes instead of clearing everything.
- Practical upshot: you can actually see ranges in campaign again and they don’t flicker away between renders.
[screenshot: campaign tower range rings persisting across board transitions at ae1636a]
-
Campaign income respects your level settings
- Income now follows a clear priority:
- Level’s initialState.income
- Game mode startingIncome
- Default 2 gold/second
- If you set income to 0 for a challenge map, it will actually be 0.
- Income now follows a clear priority:
-
Campaign tick progression
- Fixed currentTick so it advances with game time reliably. This stabilizes timing-dependent systems like targeting and AOE checks.
Under the Hood
- Unified map tiles
- Moved from separate arrays to a single tiles array with a type field (road | water | grass | tileset).
- Server generates it; client consumes it. Fewer edge cases and cleaner map logic across modes.
- Also removed a leftover debug plane that was showing a tileset texture in the middle of some maps.
[screenshot: updated campaign tiles rendering (roads, water, grass) at ae1636a]
- Targeting performance and clarity
- Added short-lived caching on remaining distance calculations so multiple towers don’t repeat the same work every tick.
- Batch targeting uses the same path-distance logic for consistency.
- Naming and tie-breakers updated to reflect the new “closest to castle” evaluation, which makes logs and debugging more readable.
That’s it for today. Small steps, cleaner behavior. If you notice towers making better calls or your campaign tests feeling more predictable, that’s what we were aiming for. If something feels off, let us know where and when it happened and we’ll dig in.