The Miasma spreading across a surface

System and tool

The Miasma System

An effect that only works in the level it was authored for is not a system, so I built the Miasma to read the space it is placed in and spread through it on its own.

Role
Tools and Systems Programming
When
March 2025 to April 2025 (4 weeks)
Engine
Unreal Engine 5
Award
GradEX 2025, 2nd place in Tools and Systems, individual entry
  • C++
  • Blueprints
  • EQS
  • Pathfinding
  • Niagara
  • 2ndGradEX 2025, Tools and Systems
  • 4Weeks

The Miasma System is the hazard that gives Miasma Ashlung its name, extracted and rebuilt as a reusable tool. It took second place in the Tools and Systems category at GradEX 2025 as an individual entry.

Why it is a system and not an effect

The first version was authored for one room. It looked correct there and nowhere else, because everything about how it moved was baked into that geometry.

Rebuilding it meant separating what the Miasma is from where it is. The version that shipped reads the navigable surfaces around it, scores where it can reach, and spreads accordingly. Drop it into a level it has never seen and it behaves.

Traversal

Spreading uses the same pathfinding and Environment Query System data the enemy AI consumes. That was a deliberate choice: two systems reasoning about the same space should not have two different opinions about what is reachable, and reusing the navigation data meant the Miasma inherited every level fix the AI got for free.

It handles surface traversal across floors, walls and the transitions between them, and can switch type mid spread so a single volume can change behaviour as it grows.

Designer control

Everything configurable lives in data tables. A designer defines a Miasma type by filling in a row: spread rate, target surfaces, visual variant, the audio it drives. No code, no Blueprint graph, no programmer.

That constraint shaped the architecture more than anything else. Once the tuning surface is a table, the system has to be written so that every knob a designer might reach for is data rather than logic.

The look

The material pulses, with veined structures moving through it and chromatic aberration at the edges where it meets clean geometry. It is deliberately unpleasant. The visual variants are part of the same data-driven configuration, so a new Miasma type is a row and a material instance rather than a rebuild.

Performance

Spreading is scheduled on timers rather than evaluated every tick, and the query work is spread across frames. A hazard that grows continuously is a hazard that can quietly consume your whole frame budget, so the scaling behaviour had to be designed in rather than profiled out afterwards.

Breakdown

Miasma System breakdown: the configuration data tables and four Miasma variants spreading over the same geometry
Miasma System breakdown: the configuration data tables and four Miasma variants spreading over the same geometry

See it running