SplinterFaction Real-time strategy
Shields that React

Thursday October 22nd, 2026

Filed by Scary le Poo

DesignGraphics

Shields are the Loz Alliance's signature. Every Loz unit carries a personal overshield, the Protector projects a bubble over its neighbors, and the shield generators cover whole bases. They are central to how the faction plays, and until this week they looked like a tinted balloon.

That has changed. Shields now react to what happens to them.


What you will see

Impacts. Every projectile a shield absorbs leaves a mark where it landed: a bright flash at the contact point that fades over a third of a second, and a ring that spreads outward across the surface of the sphere. The size and brightness of both scale with how much of the shield's capacity the hit took. A scout's laser leaves a small, quick ripple; a heavy artillery shell lights up a quarter of the dome. Beams and rapid-fire weapons hitting the same spot merge into one impact that grows the longer they stay on target, so a sustained laser reads as a sustained burn rather than a strobe.

A surface, not a tint. The bubble has a faint cell pattern drifting across it, and its edge brightens as it turns away from you. It reads as a thin membrane with an inside and an outside, rather than a colored sphere painted over the scene.

Contact with the world. Where the dome passes through terrain, buildings or units, the surface glows along the line of intersection. This is the single biggest cue that the shield is a real volume occupying space, and it has a practical side: you can see exactly where the edge of a shield generator's coverage falls on the ground.

Charge. A full shield is bright and steady. As it runs down, the color shifts toward the shield's warning color and the surface dims. Below roughly twenty percent it starts to flicker. When it finally breaks, it does not vanish: the sphere blows outward and dissolves over half a second, and when the generator recovers enough charge to bring it back, it fades in with a small overshoot. You can read a shield's state from across the map without looking at a health bar.


Personal overshields. Loz units do not walk around inside visible bubbles; that would turn every army into a pile of soap. Instead the overshield is invisible at rest, and only shows itself when it takes a hit: the impact ripple appears on a tight sphere hugging the unit, with a brief flash across its whole body, and then it is gone again. Under fire a Loz formation shimmers with impacts. Out of combat it looks like any other army.


Air punched. The biggest hits also fire a shockwave through the screen-space distortion system, so a heavy shell on a shield bends the air at the contact point as well as lighting up the surface.

How it works

The old shields were drawn by LUPS, the Lua particle system that Spring games have used since 2008. Each shield was a sphere with a two-color gradient, drawn one at a time in immediate-mode OpenGL. There was no way for it to know it had been hit. Oddly, the gadget that tracked shields did know: it had inherited a full hit-tracking pipeline from Zero-K that recorded every absorbed projectile, merged nearby hits and decayed them over time. That pipeline was feeding a particle class SplinterFaction never had, behind a quality setting that was never enabled. It had been running for years, producing data nobody drew.

The new system is a single GL4 widget. Every shield on the map is one instance in one instanced draw call: position, radius, two colors, charge, and a buffer of up to eight recent impacts, each stored as a direction on the sphere, a frame number and a strength. The vertex shader places one shared sphere mesh; the fragment shader does the rest. The impact ripples are computed per pixel from angular distance to each hit direction, so they are resolution-independent and cost the same whether there is one shield on screen or forty.

The intersection glow uses the same trick as the distortion effects: the shader reads the engine's depth buffer, reconstructs the world position of whatever is behind each pixel of the shield, and brightens the surface when that position is close to it. No geometry queries, no per-unit work on the CPU.

For the personal overshield, the Protoss-style shield gadget that already handled the damage absorption now reports each absorbed hit with its position (the projectile's, or for beams a point on the unit facing the attacker), and the widget spawns a short-lived instance around the unit only while there is something to show.

Tuning

Everything that makes up the look is a number in a named block at the top of the widget, and can be changed live from the console while a game is running. The current values are a first pass. If shields feel too loud, too quiet, or the wrong color for a particular unit, that is a five-second change rather than a shader rewrite, and we would like to hear about it on Discord.