Developer Journal

28 July 2026CrisTechnical development note

A Considerable Amount of Electricity: Building the BOB Pacifier Effect

How one reusable Niagara beam, a collection of deliberately placed anchors and some gameplay-honest Blueprint logic turned the BOB Pacifier into a machine which looks dangerous before it attacks.

Real-world production notes for The Outer Islands. This entry is not an Asylum Rock Trust record.

The BOB Pacifier firing a bright blue-white electrical arc from its front prod in the dark assembly hall.
The directed prod discharge is deliberately wider, more chaotic and longer-lived than the ambient body activity. It fires for every genuine attack discharge, including an honest miss.

I have spent the last few days making an angry cupboard leak electricity.

This is the BOB Pacifier, one of the less friendly members of the BOB machine family. The ordinary units are quite happy to block corridors, offer tea and politely insist that everybody return to the wards. The Pacifier has a large electrical prod on the front and a rather more direct interpretation of patient care.

The machine already worked as gameplay. What it lacked was the visible sense that it was permanently carrying rather more charge than was sensible. I wanted small arcs crawling over the casing, occasional strikes grounding themselves against the floor and a much stronger discharge when the prod actually fired.

That sounds like one particle effect. It turned out to be a small reusable electrical system, which is considerably more interesting.

The machine should look dangerous before it attacks

The ambient effect has an important job. A player should not need to be hit before understanding that this BOB is different. Small arcs across the body say that the machine is unstable or heavily charged. A strike to the floor says that the excess energy has somewhere to go. The forward prod arc then reads immediately as the deliberate weapon discharge.

Those three layers need different weight. If everything fires continuously, the Pacifier becomes a mobile fireworks display and the actual attack disappears into the noise. If the only electricity appears during an attack, the danger arrives without any visual preparation. The finished rhythm is therefore restrained: brief body activity, occasional grounding and one unmistakably stronger event at the prod.

This also gives the machine a peculiar kind of personality without requiring animation. It is not standing idle. It is ticking, leaking and occasionally throwing a small part of itself at the architecture.

One enormous Niagara system seemed like a terrible idea

I could have built one Niagara system which attempted to understand the Pacifier, find its body, choose points on the casing, locate the floor, react to an attack and run every spark, flash and vapour particle. It would also have become a small private religion which nobody could safely alter six months later.

Instead, the responsibilities are split. BP_BobPacifier knows where its scene components are, when the machine is attacking, what the native discharge direction is and whether a downward trace found a real surface. Niagara knows how to draw an electrical ribbon, how to throw sparks and how to produce a very brief flash of unpleasant light.

The short version is: Blueprint owns where, when and why. Niagara owns what it looks like.

The main assets are therefore deliberately modest. NS_Pacifier_Arc is a reusable beam. NS_Pacifier_GroundImpact contains separate flash, spark and ozone-vapour emitters. The lightning, flash and spark materials handle their individual rendering jobs. BP_BobPacifier joins those pieces to the actual machine and its gameplay events.

The reusable beam, and an early journey towards world origin

The core arc began with Unreal's Static Beam Niagara template. It is a ribbon spline between Beam Start and Beam End, with exposed width, jitter, lifetime and colour values. Nothing in that system knows whether it is on the Pacifier's body, travelling to the floor or leaving the weapon. It receives two positions and gets on with being electrical.

The endpoints are Niagara Position parameters rather than ordinary Vector3 parameters. That distinction matters in a large world. Blueprint sets them with Set Niagara Variable (Position), and both ends of the beam are marked as absolute. The scene components provide world locations, so the Niagara system must interpret them as world locations.

Before those settings matched, one end appeared near the emitter while the other stretched enthusiastically towards world origin. It was technically a beam. It was simply a beam with very different career ambitions.

Spawn Lightning Arc is the Blueprint function which now supplies the beam. It receives start, end, width, jitter, lifetime and colour, calculates the midpoint and spawns the transient Niagara component there. The world-space endpoints still control the visible arc; the midpoint merely gives the component sensible bounds and prevents it living at the origin while rendering elsewhere.

Auto Activate is disabled. Blueprint spawns the component, supplies every parameter and activates it only when the endpoints are ready. Auto Destroy and Niagara's Auto Release pooling then clear it away. This ordering avoids a one-shot beam waking up with default positions, doing something heroic for a fraction of a second and dying before Blueprint can explain what it was actually meant to do.

Making electricity crawl over a cupboard

The Pacifier has thirteen small Scene Components placed around its visible body. They are named ArcNode_00 through ArcNode_12 and collected into an array during construction. These are deliberately authored anchor points rather than random positions inside the actor bounds.

A random point inside a box is very easy to calculate. It is also quite capable of landing inside the mesh, across an empty gap or behind a panel, producing an arc which travels straight through the machine. The anchor nodes follow the real casing and front mechanism, so the electricity looks as though it is crawling over metal rather than taking a shortcut through the cupboard.

Each body event selects a random start index and connects it to the next anchor. Modulo wraps the last node back to the first. I initially considered choosing any second random node, but that created long diagonals through the centre. Neighbour-to-neighbour movement is simpler and looks considerably more intentional.

The current body anchors receive a local project correction of Z minus 100 because the component hierarchy and visible model have a consistent offset. I resisted putting that correction inside the shared arc function, because the prod does not need it. A future cleanup can turn it into a named BodyArcZOffset or move the components; at least the compromise is contained where it belongs.

Body arcs are narrow, moderately jittered and alive for roughly 0.12 seconds. They arrive in irregular clusters: usually another event after 0.06 to 0.18 seconds, occasionally a quiet gap of 0.45 to 1.20 seconds. Evenly spaced electricity looked like a metronome with anger issues. Electricity should feel unstable, not punctual.

Finding the actual floor

Grounding strikes use the same beam but a different piece of world knowledge. Blueprint chooses one body anchor and traces downward by 1,000 units on the Visibility channel, ignoring the Pacifier itself. A successful hit supplies the actual Impact Point as the beam end.

This is better than subtracting a convenient amount from Z and hoping the level remains flat forever. A traced endpoint works on slopes, platforms, stairs, raised machinery and different room elevations. If level design changes the floor, the electricity still finds it rather than stopping politely in mid-air.

The hit normal is converted into a rotation for NS_Pacifier_GroundImpact. Sparks therefore leave the surface instead of assuming that every object in the Outer Islands has been thoughtfully aligned to world up.

Ground arcs are slightly wider and more chaotic than the body activity, with a life of about 0.15 seconds. After a hit, the loop waits between 1.5 and 4 seconds. If the trace misses because the machine is over a gap, near an edge or temporarily missing streamed collision, it waits half a second and tries again. One absent floor should not silently retire the electrical system for the rest of the session.

Flash, sparks and the smallest possible cloud of ozone

The grounding endpoint has three emitters because each one answers a different visual question. ImpactFlash makes the instant of contact readable. ImpactSparks show energy leaving the point. OzoneVapour leaves a very small consequence behind after the fast parts have gone.

The flash uses a short radial sprite and a Niagara Light Renderer. The sprite's emissive material makes the flash visible; the light renderer briefly reveals nearby floor and wall geometry. Separating those controls matters in the dark asylum spaces, where the useful part of a flash is often what it lets the player see for a moment.

The sparks are narrow velocity-aligned sprites fired in a cone at roughly 250 to 900 units per second. Gravity, collision, modest restitution and friction give them one brief life against the actual environment. They use CPU simulation because there are perhaps a dozen or two of them and dependable world collision is more useful than deploying a vast GPU swarm to celebrate one mark on the floor.

The vapour is not meant to be a smoke grenade. A few transparent grey-blue particles rise, expand and disappear well inside a second. It suggests ionised air, hot dust and ozone without hiding the machine or making every discharge look as though somebody has started a small bonfire.

The prod fires honestly

The attack uses a dedicated ProdArcStart component placed on the visible metal tip. Fire Prod Discharge receives a target position and calls the same reusable beam with a wider arc, more jitter and a lifetime of roughly 0.3 seconds. Small body arc means stored charge; floor arc means excess charge; large forward arc means this is now very much your problem.

The visual event is connected to On Pacifier Discharged. Native code supplies the discharge origin, direction, intended subject and attack serial. Blueprint calculates a point 400 units along that authoritative direction, while the visible beam begins at the authored prod tip so it lines up with the model.

The important decision is that presentation is attached to the discharge event, not the accepted-hit event. The weapon must visibly and audibly fire even when it misses. Native gameplay broadcasts the presentation, then verifies sight, geometry and the final hit sweep. If collision wins, the player sees the arc miss rather than watching electricity magically attach itself through a wall.

That is what I mean by gameplay honesty. Niagara describes a real attempt. It does not decide that the player was hit, does not apply a stun and does not know anything about relocation or recharge. Native Pacifier logic remains authoritative over the result.

The test requirement is pleasantly simple: one Niagara burst for every real discharge, hit or miss. A dramatic effect may describe what the machine tried to do. Only gameplay may describe what actually happened.

Why there is no shower of sparks on the player

I considered a separate world-space impact system on the player's body. The game is first-person, however, so the player rarely sees enough of themselves for attached sparks to contribute anything useful. They are more likely to appear too close to the camera, clip through the view or turn a clean attack into a confusing luminous mess.

The better first-person responses already exist: the visible prod beam, electrical audio, camera shake, a brief screen response and the established movement-lock or knockout presentation. More particles are not automatically more information.

Leaving that system out also preserves the hit boundary. The prod always discharges visibly; player-specific presentation happens only after gameplay accepts the hit. There is no decorative body effect accidentally implying success before the sweep has earned it.

A dangerous effect which is not permanently expensive

The Pacifier looks electrically busy, but the runtime is intentionally modest. Normally only one short body arc is alive. Grounding happens every few seconds. The larger prod effect exists only during an attack. Every arc is transient, pooled and automatically released.

The recurring body and ground behaviour uses delayed Custom Events rather than Tick. The only collision-heavy particles are the small CPU spark group at an occasional ground impact. The system does not keep a cloud of particles, lights and traces awake simply because a Pacifier exists somewhere in the level.

Modularity also means the work is useful beyond this one machine. Spawn Lightning Arc can drive charger connections, damaged equipment, wall-to-machine arcs and scripted discharges. The ground-impact system can be used anywhere an electrical strike meets a surface. I have made one angry cupboard, but I have at least avoided making electricity exclusive to it.

What I learned from all this fizzing

The most useful lesson was not specifically about Niagara. It was about putting decisions in the system which already has the right information. Blueprint knows the actor, components, surface traces, timing and gameplay events. Niagara knows ribbons, particles, flashes, sparks and local light. Making either one impersonate the other would have produced a cleverer asset and a worse system.

The second lesson was that convincing effects are often about restraint and rhythm. The wider beam is not threatening unless the smaller arcs have established a scale. A flash feels brighter when it is brief. Ozone vapour works because there is almost none of it. Randomness looks natural only after it has been given sensible boundaries.

Finally, presentation should never be allowed to flatter gameplay. A beam which sticks to the player through a wall might look more immediately spectacular, but it tells a lie about what the machine knows and what the collision system accepted. Letting it miss is both technically cleaner and considerably more satisfying.

So the Pacifier now crackles across its casing, occasionally grounds itself against whatever floor the level has actually provided and fires one much stronger arc when the prod discharges. It looks dangerous before it attacks, readable while it attacks and, importantly, capable of making a very impressive noise while hitting absolutely nothing.

Which, now I think about it, makes it quite a lot like most experimental electrical work.

Working Material

Technical diagrams and working material

The BOB Pacifier with a short electrical arc across its front mechanism and a grounding strike reaching the metal floor.
The two ambient layers: a short neighbour-to-neighbour body arc and a traced grounding strike terminating on the actual collision surface.The Outer Islands / in-engine ambient electricity
Unreal Engine Niagara editor showing the reusable Pacifier arc system, its ribbon emitter modules, user parameters, preview and lifetime curve.
The reusable beam remains deliberately small. It receives absolute world-space endpoints, then controls the short burst, ribbon construction, jitter, width and lifetime without needing to understand the Pacifier's gameplay state.The Outer Islands / Niagara development capture
Unreal Engine Material Editor showing the additive unlit Pacifier lightning ribbon material and emissive graph.
The lightning material builds a narrow bright core and a wider corona. Niagara changes the shape of the arc; the material gives the shared electrical presentation its stable blue-white appearance.The Outer Islands / material development capture
Architecture diagram separating Pacifier Blueprint decisions from the reusable Niagara arc and ground-impact rendering systems.
Blueprint owns world context and gameplay timing; the reusable Niagara systems own beam, flash, spark, vapour and local-light presentation.The Outer Islands / Pacifier effect architecture
Flowchart showing the Pacifier discharge presentation firing before authoritative gameplay resolves an accepted hit or honest miss.
Presentation reports that the prod physically discharged. Sight, geometry, the final sweep and the current attack serial remain responsible for the result.The Outer Islands / discharge ownership flow

Archive Cross-References

Related material

All development notes