Period: October 19, 2025 Total Commits: 14
Hey, here’s what we’ve been working on. Today’s update leans hard into visual clarity and performance: cleaner particles, better depth sorting, and more readable towers and projectiles. We also chased down a couple of nasty VFX issues that were dragging frames down. It’s getting tighter.
What’s New
-
Dynamic tower scaling by level
- Towers now grow from 1.0x at level 1 up to 1.333x at max. Scaling is linear per upgrade, so size tracks power in a way that’s easy to read at a glance.
- We adjusted visual placement on a few towers (for example, the ice tower sits 8 pixels higher) so bases line up with tiles more cleanly.
- Bullet spawn offsets now scale with tower level too, keeping muzzle flashes, lightning, and trails properly aligned as towers grow.
- Why it matters: clearer board state in PvP, fewer “why did that shot come from there?” moments.
-
New projectile VFX pass
- Booster towers now fire procedural lightning bolts, color-coded by type (blue speed, gold gold, red damage). The electricity projectile itself is invisible; the bolt does the visual lifting.
- Arrow projectiles leave subtle grey smoke trails, ice projectiles keep their frosty trails, and shadow bolts now streak with purple smoke.
- Trails emit based on distance traveled rather than frame timing, so fast or slow frames still draw smooth lines.
- Why it matters: better feedback when you connect, and cleaner reads during busy fights.
[screenshot: booster towers firing colored lightning at 1f9b5e8] [screenshot: crossbow arrows leaving grey smoke trails at 9621077]
-
Visual polish and readability
- Switched sprites to linear filtering with mipmaps by default for smoother edges. Projectiles can still force “nearest” if they need that crisp pixel look.
- Added options for blend modes and smooth alpha on projectiles to remove harsh, pixelated edges on effects that should be soft.
- Depth sorting now respects Y-position, so units higher on the map render behind those lower down. Path towers (like spikes and wind) render on a dedicated layer to avoid occlusion weirdness.
[screenshot: minions walking behind path towers with proper depth at e747bc4]
-
Balance touch-ups (small but noticeable)
- Path tower ranges are fractional now. Spikes are at 0.6 and wind at 0.5.
- Corpse explosion only hits ground units. Air pathing stays cleaner.
What Got Fixed
-
Particle systems no longer leak or stack up
- Fixed a bug where empty batches piled up and tanked performance over time.
- Particle systems auto-clean when they’re finished, and we’re removing batches from the right parent now.
- Reused shared geometries/materials to cut down on allocation churn.
-
Cleaner projectile behavior
- Final-frame interpolation is back, so projectiles don’t “pop” out of existence right before impact.
- Removed position snapping that caused awkward jumps on the last step.
- Added a 0.5-tile hit radius for projectile collisions to make grazing hits consistent with what you see.
- Turret-laser offsets are centered properly, and general spawn offsets are using the correct scale.
-
Status effect cleanup
- Stun effects follow moving minions and actually clean up when the minion dies. No more flickering or orphaned stars hanging in space.
Under the Hood
-
Dedicated renderer for projectile effects
- Moved all projectile particle logic (ice trails, arrow smoke, lightning) into a single renderer class. The main renderer just calls one function now instead of juggling a pile of effect cases.
- Result: less code to maintain, fewer edge cases, easier to add new effects.
-
Particle system architecture and tools
- Integrated a particle system library and split our effect configs into focused modules (ice bullets, level-up glow, lightning, arrow smoke, stunned).
- Emission logic is modular and distance-based, which makes effects stable across frame spikes.
- Added better logging around particle lifecycles to catch issues early.
- Built a small visual particle editor to speed up iteration. It matches our in-game camera setup and exports/imports JSON configs we can drop straight into the client.
-
Rendering pipeline tweaks
- Introduced SRGB handling for non-instanced projectile textures so colors look correct.
- Expanded projectile config with filter type, blend mode, and alpha smoothing so each effect can pick the right look without special-case code.
Thanks for the bug reports and clips. The visual cleanup here came straight from player feedback about occlusion and noisy effects during big pushes. Keep sending those in; it helps us tighten the screws on PvP readability and performance.