DEVLOG #6

Threat Recognition — Unique visual identities deployed across 14 enemy types. Five Canvas render optimizations targeting 120 FPS. Titan facing corrected. Grenade Launcher rebalanced.

DEVLOG #6  ·  30 AUG 2026  ·  MARCO HOL · BLITZ COMMAND
ENEMY VISUALS PERFORMANCE 120 FPS TITAN FIX BALANCE GRENADE LAUNCHER

Three systems updated in this dispatch. First: 14 enemy types have received unique visual identities — each one now communicates its role, state, and threat level at a glance. Second: five surgical render optimizations bring the renderer within reach of stable 120 FPS on capable hardware. Third: two field-reported issues are resolved — the Titan facing direction bug and an oversized Grenade Launcher blast radius.

14 THREATS. UNIQUE IDENTITIES.

Until now, most regular enemies were distinguishable only by their sprite and size. In a dense wave with 30+ enemies on screen, reading the battlefield required memorising which model does what. That gap has been closed. Every threat now broadcasts its role visually — through auras, trails, arcs, and charge indicators that are active in the renderer at all times.

All visual effects gate their shadow rendering behind the existing Performance Mode toggle — enabling it removes shadowBlur calls and keeps the same shapes with reduced GPU cost. Enemy readability is preserved regardless of the setting.
BERSERKER — RAGE STATE
When HP drops below 50%, a red plasma corona pulses around the body and six fracture lines crack outward. The berserker hits at 1.8× damage and 2.5× speed in this state — the visual is a hard warning, not decoration.
GHOST — PHASE IMMUNITY
Two expanding white-blue rings radiate outward while the ghost is phasing. The rings signal one thing: stop shooting. Damage dealt during phase immunity is wasted. Read the rings, hold fire, wait for the return.
SHIELDER — ENERGY DOME
A translucent blue dome pulses around the shielder while its shield is intact. The dome disappears when the shield breaks. Players targeting shielders from the wrong angle will now see exactly why their shots are absorbed.
BOMBER — COUNTDOWN SPARKS
Five yellow-orange spark lines radiate at high frequency the moment a bomber's fuse lights. The closer it gets, the more visible the sparks. Existing hit-flash extended with directional countdown indicators.
JUGGERNAUT — ARMOR ARC
A steel-blue arc marks the front-facing armored sector. The juggernaut's frontal armor reduces incoming damage significantly. The arc makes the correct flanking angle visible — approach from the rear or side.
PYRO — FIRE AURA
Four bezier fire tongues orbit the pyro's body, matching the orange of the fire patches it drops. The pyro is now visually consistent with its hazard — it looks like a walking incendiary before you step on what it left behind.
COMMANDER — AURA RING
A dashed blue-purple ring marks the commander's buff radius. Any enemy inside this ring moves faster and hits harder. The ring is always active — the commander is always buffing. Prioritise it accordingly.
SUMMONER — PORTAL CHARGE
A magenta arc builds around the summoner in the 1.2 seconds before it calls reinforcements. The arc sweeps to a full circle on summon. Track this — a summoner at full charge is about to make the wave significantly harder.
MEDIC — HEAL CROSS
A green cross pulses above the medic's head at all times. The medic is a support unit that keeps other enemies alive. The cross makes it immediately identifiable even in dense formations — prioritise it, or watch the enemies around it recover.
KAMIKAZE — THRUSTER TRAIL
Twin red-orange exhaust jets burn behind the kamikaze as it accelerates. The kamikaze is a fast suicide unit — the trail gives readable motion prediction for operators trying to intercept before impact.
SNIPER — TARGETING LINE
A faint pink laser sight extends in the sniper's facing direction at all times. Operators in the sniper's direct line of sight have less than a second to move. The dot at the end of the line is where the round lands.
DISRUPTOR — EMP CRACKLE
Three jagged magenta arc bursts radiate from the disruptor continuously. The disruptor disrupts operator weapons on hit — the EMP crackle makes it distinct from standard ranged units and signals its electronic-warfare role.
RUNNER — SPEED STREAKS
Three yellow exhaust streaks trail behind the runner's movement direction. The fastest melee unit in the standard roster, the runner previously looked identical to slower enemies at a glance. The streaks confirm the speed read before contact.
SWARM — MOTION BLUR
A single bright-green micro streak trails behind the swarm unit. Swarm units move at 260 speed — the fastest non-boss unit in the game. The blur streak is subtle relative to the runner, reflecting the unit's small size and mass-spawn nature.
BOSS EFFECTS UNAFFECTED
Bosses already carry complex visual systems built in previous dispatches. This update targets the regular and specialist roster — the units that fill every wave between boss encounters. Boss-specific effects remain unchanged.

FIVE OPTIMIZATIONS. TARGET: 120 FPS.

The renderer runs on vanilla HTML5 Canvas 2D — no WebGL, no framework. Every frame is a hand-drawn imperative sequence. At high wave counts with 30+ enemies and 250+ pooled projectiles, per-frame draw call volume compounds fast. These five optimizations address the five heaviest recurring costs.

GRID PATTERN CACHE — 68 STROKES → 1 FILL
The arena background grid was redrawn every frame using 68 individual stroke calls. Replaced with a createPattern('repeat') system: the grid tile is rendered once to an offscreen canvas per map, stored in a module-level cache, and tiled in a single fillRect per frame. Camera offset is applied via setTransform with a reused DOMMatrix — no heap allocation per frame. A tile clipping fix ensures the major grid lines render at their full 1px width.
PROJECTILE SHADOWBLUR GATE
Projectile rendering issued shadowBlur draw calls on every active round regardless of settings. All projectile shadow operations — flame (30px), sniper (22px), critical hit (18px), and size-threshold glow (8px) — are now gated behind SETTINGS.performanceMode. At 250 active projectiles, this eliminates hundreds of GPU shadow-blur evaluations per frame when Performance Mode is enabled.
LEVIATHAN GRADIENT CACHE
The Leviathan's two heat-distortion gradients were created via createRadialGradient on every draw call — a heap allocation at 60 FPS for the duration of the fight. Gradients are now stored on the enemy instance (this._levGrad1, this._levGrad2) and created exactly once on first draw. Enemy objects are not pooled, so the gradient lives and dies with the enemy. Zero ongoing allocation.
PROJECTILE VIEWPORT CULLING
All active projectiles in the pool were drawn each frame regardless of visibility. Viewport bounds are now computed from camera position and zoom level each frame, and any projectile outside the viewport plus a 200-unit margin is skipped entirely. At high zoom-out levels with large maps, this culls a significant fraction of the active pool.
ROCKET TRAIL RING BUFFER
Rocket projectiles maintained their trail using a standard array with push/shift — 10 array mutations per rocket per frame. Replaced with a fixed-length ring buffer: a pre-allocated 10-slot array with head pointer arithmetic. No array allocations, no garbage collection pressure from trail updates. At multiple simultaneous rockets the difference in GC pause frequency is measurable.

These five changes are additive — each one reduces a specific category of overhead independently. The visual quality of all existing effects is unchanged. Performance Mode still offers a second tier of improvement by removing shadowBlur across the entire renderer.

TITAN FIX. GRENADE REBALANCED.

Two field-confirmed issues resolved in this dispatch.

Issue Was Now
Titan facing direction Faced away from player when attacking Correctly faces target at all times
Grenade Launcher — blast radius 360px 180px (−50%)

Titan: The Titan sprite artwork is drawn facing left by default. The sprite flip logic was not accounting for this, causing the Titan to turn its back to the player during every attack and charge. It looked deliberate. It was not. Added to the left-facing sprite registry — the Titan now correctly turns toward its target.

Grenade Launcher: A 360-pixel splash radius at 320 damage covered an area large enough to hit most of what was on screen simultaneously. Combined with the 7-charge burst, a single rotation of grenades could clear a dense wave entirely without skill-based aim. The weapon remains powerful — 180px still covers meaningful area and burst fire is unchanged. It now requires placement rather than direction.

Three systems in one dispatch. The battlefield is more readable than it has ever been — every standard threat now communicates its role, its state, and its danger level without the operator needing to memorise a unit roster. The renderer is running leaner heading into the high-wave content where enemy density peaks. And two confirmed field anomalies have been corrected.

The demo is live at blitzlaststand.com/demo. All changes in this report are active in the current build. Questions and anomalies via Discord.

The field is readable. Identify. Prioritise. Survive.

THREAT RECOGNITION ACTIVE — Blitz Command · 30 AUG 2026

DEVLOG #5 — PRESSURE DOCTRINE

Seven bosses recalibrated across all phases. Vortex Cannon restricted to wave 40. Cryo Blaster performance corrected. FPS stability improved. JACKPOT Crate added to the field.

← PREVIOUS DISPATCH NEXT DISPATCH →

▸ FREE — NO DOWNLOAD REQUIRED

PLAY THE DEMO