Daily Dev Update: Desync Sleuthing, Clearer Combat Info, and Smoother Rounds - September 24, 2025
Period: September 24, 2025
Total Commits: 5
Hey, here’s what we’ve been working on. Today was mostly about stability: we tracked down a late-game desync, tightened up how the UI explains combat buffs/debuffs, and cut a chunk of garbage collection hitches. There are also a couple of small visual features to help you read fights at a glance.
What’s New
-
Minion level stars
- Minions now show 0–4 small gold stars beneath them based on level.
- Helps you quickly scan waves and prioritize targets without opening panels.
- Uses instanced rendering, so it’s one draw call and light on performance.
- [screenshot: minion level stars under a mixed wave at e70db87]
-
Castle health bars in-world
- Each castle has a health bar directly above it, color-shifting from green to red as it takes damage.
- We removed the redundant mini castle bars in the HUD to reduce clutter.
- Updates in real time and pairs nicely with endgame pushes.
- [screenshot: castle health bar shifting color during a base siege at 60f07fe]
-
Cleaner combat info in the Info Panel
- Shows only external modifiers now (auras, debuffs, global effects).
- Buffs use green text; debuffs use yellow/red for quicker reads.
- Keeps upgrade bonuses separate so you can tell what’s coming from where.
- [screenshot: Info Panel showing aura buffs and slow debuffs at 8f2d600]
What Got Fixed
-
Desync after resync
- Fixed a case where reconnecting could leave players with mismatched gold and level values.
- The action replay system now processes actions tick-by-tick instead of batching, so sequential level purchases register correctly.
-
Cross-client state mismatches
- State hashing now uses a single source of truth, and we removed volatile fields from the comparison.
- Result: if the game state matches, the hash matches—across players and bots.
-
Aura and modifier correctness
- Damage booster auras now apply properly to level 0 towers (this was a small indexing mistake).
- Castle bonus health reads from match config instead of a hardcoded value.
-
Placement feedback
- The tower placement “ghost” updates color correctly based on your current gold.
- Renderer tracks your gold in real time, so the afford/deny color is accurate.
- [screenshot: tower placement ghost showing correct afford/deny color at 91f08c7]
Under the Hood
-
Smoother frames, fewer spikes
- Reduced memory allocations in hot paths by caching entity lists and reusing meshes/materials.
- Moved hashing to a numeric path to avoid string churn.
- Net effect: fewer GC pauses during hectic waves and big fights.
-
Bot behavior and reliability
- Bots now get a clear success/fail signal when attempting to level up, and they stop chasing impossible goals sooner.
- Added more precise logging around resource tracking to pinpoint inconsistencies faster in practice matches.
-
Telemetry and stability
- Enabled analytics and error tracking on the client to help us spot crashes and UI errors quickly.
- Also updated dependencies and cleaned up some old content in the site layout.
Why These Changes Matter
-
Competitive clarity
- External modifiers separated from upgrades make it easier to understand why a tower or minion is performing the way it is. This helps with counterplay and streamlines decision-making mid-fight.
-
Reliable PvP rounds
- The desync fixes hit both replay and hashing consistency. Rejoins and late-game sync checks should behave properly now, which is key for fair matches.
-
Readable endgame
- Castle health bars and minion level stars are small, but they reduce UI scanning and let you focus on timing pushes, spending windows, and where to hold.
Thanks for the reports on resync issues and aura edge cases—those leads saved us time. If you notice any remaining UI inconsistencies or auras behaving strangely, send a clip and we’ll dig in.
[screenshot: late-game push with castle bar and minion stars visible at 60f07fe]