What it does
A director watches the night as the player lives it. Darkness, noise nearby, being seen or stalked unseen, time since the last scare, running and a failing torch raise the tension, and the night turns through calm, build, peak and relief. Scares are rationed: each costs points from a slowly refilling budget and has its own cooldown, conditions and phases, and one is only tried once the gap since the last has passed, with a chance that rises with tension. A quiet stretch really is quiet, and the next scare lands when the player is already on edge.
Every scare is a line of data naming what the presenter shows and what the sound plays, and the director places it through the map: behind the player, out of sight, at the edge of the light. A lamp fails in a burst of sparks and flickers back. A figure stands just beyond the torch's reach at the end of a corridor, gone when the beam reaches it. Footsteps follow and stop when you turn, a phone rings until you answer it, and a figure stands behind you in the mirror.
The player's torch drains, flickers and sputters, with batteries to find. They have stamina for a short sprint, fear and a heartbeat for the vignette and the thumping in their ears, hiding spots, and a lean for looking round corners. The stalker walks a beat, goes to what it hears, searches where it lost you and hunts what it sees. It cannot see you hidden unless it saw you hide, it flees, sidesteps or freezes in the beam, it will not follow you into bright lamplight, and now and then it fails to find you on purpose, so it stays frightening rather than unfair.
Features
- A pacing director — tension from darkness, noise, being seen, waiting, speed and the torch, through calm, build, peak and relief.
- A scare budget — refilling points, costs, cooldowns, nightly limits, phases and conditions.
- Thirteen scares as data — lights failing, an apparition, a window figure, a runner, a slam, footsteps, a whisper, a falling object, breathing, a phone, a distortion pulse, a stall opening and a mirror figure.
- Placement through the map — behind the player, out of sight, at corridor ends, just beyond the beam, at marked windows, mirrors, shelves, phones and stalls.
- A torch or a lantern — drain, flicker, sputter, pickups, spares and shake-to-recharge, with strength, cone and range for your light.
- Fear and a heartbeat — values for a vignette, breathing and a beat to thump.
- Hiding and leaning — lockers, desks and beds, peeking out, and a lean that moves the eye.
- The stalker — patrol, hearing, sight, search, forced doors, mercy, and fleeing, avoiding or freezing in light.
- Objectives — things to collect, an exit, a dawn to survive, and dread that can end the night.
- Two nights and their maps — a hospital and a crypt as plain sector-map data, with saves and seeded replays.
Good for
- First-person survival horror — a monster you hide from, a dying torch and a way out to find.
- A haunted-house walk — scares only, no monster, in the manner of a slow ghost story.
- A night-shift game — patrol a building until dawn with the lights going out around you.
- A horror level in another game — run it beside a shooter's rules for a stretch with a weak weapon.
- Tuning a level's mood — seeded, scripted nights replay exactly.
Make it yours
Every count, timing and rule is configuration, and the two presets show how far apart nights can be. Night Shift gives a torch on batteries, a sprint, hiding, leaning, the stalker and the whole scare library, with three fuses to find before the stairs light up. Crypt Vigil gives an oil lantern that lights all round but not far, no running, no hiding and no monster, twelve scares of its own (snuffed candles, a face at a grate, a tolling bell, a sliding coffin lid), and a vigil until dawn where being left in the dark is what kills you. Presets take overrides field by field, so a stalker that freezes when watched or a torch that only recharges by shaking is one line, and the director reads any map through a small interface.
A quick look
Prepare a sample map, start a night and step it with the player's doings.
const H = horrorDirector;
const map = createSectorMap(H.prepareHorrorMap(H.nightShiftMap()));
const night = H.createHorrorDirector(H.nightShift({ seed: 7 }), H.sectorHorrorWorld(map));
game.step('play', dt => {
for (const e of night.step(dt, { x, z, yaw, sprint, use, switchTorch })) present(e);
map.tick(dt);
});
Works with
sector-map— the lit, textured levels, their lamps, doors and things as hiding spots and scare anchors.world-3d,rig-fpsandaudio— the first-person camera, the torch's light and sound placed where it happens.fps-enemies— its world interface is the same, so the same map serves both.sector-shooter— for the fast shooter instead of the slow walk.
Good to know
- It moves nothing of the game's: you move the player (at most the speed it gives) and draw everything it describes.
- There is one stalker, not a horde, and figures are drawn points, not bodies.
- A sector map must be prepared with
prepareHorrorMapfor its lamps to fail and its doors to slam, and its lamps need tags. - The tension and fear model is tuned for a walking pace.






