A downloadable tool

Buy Now$13.99 USD or more

A sanity meter tells your player a number. This decides what is in the room.

Lucidity is one value your game erodes, five tiers it falls through, and a director that makes each tier true in the world. You author thresholds — not five copies of your game.

Forty-four apparitions, and not one of them is a file

Every manifestation is drawn at runtime by the plugin’s own routines: figures, watchers, architectural lies, surface phenomena, script, light lies, doubles. There is no sprite sheet to license, no atlas to author, and nothing for you to draw.

  • Doorway silhouettes, hall-end watchers, a walking double, a crowd of three
  • Paired eyes in dark tiles, a crack that stares, a portrait that follows, a window with too many eyes
  • False doors, stairs to nothing, an extra window, a shadow going the wrong way
  • Creeping stains, a breathing wall patch, frost that isn’t, handprints climbing
  • Whisper glyphs rising off surfaces, a crawling line of text, a mirrored word, a tally in the margin
  • A second shadow, a flicker halo, light under a door that is not there
  • Your own after-image, footprints arriving behind you, a reflection that lags, breath that is not yours

They arrive as lucidity falls, and they change as it falls: the palette walks from cold blue through violet to arterial red, the hand trembles wider, and each one renders nearer. Placement is seeded per save, map and tier — so a corridor haunts the same way every time your player comes back to it, and a different save haunts differently.

It is not a filter over your game

Keep your horror filters. This decides what is real.

  • Event pages swap themselves. Put <Lucidity Tier: 2+> in a page comment and MZ’s own page selection does the rest. The shrine is swept and tended at 90, and the offerings are fresh with nobody here in years at 15. No new editor, no parallel event tree.
  • The screen escalates. One custom filter — cold desaturation, a breathing vignette, red seeping into the shadows, film grain — eased between tiers, never snapped. It is applied to the world, so the hallucinations stay legible while the room goes.
  • Battle changes. An auto-state per tier, mapped by you.
  • A common event fires on every tier transition, so anything else you want to happen, happens.

The Psyche screen, which is the status

Not a bar. A seal generated from the record itself — concentric rings, radial spokes, orbital script, a calm closed centre. As lucidity falls the rings fracture, symmetry collapses, debris drifts between them and something at the centre opens an eye. A whole mind and a broken one are not the same drawing; they are not even the same geometry.

Beside it: the five tiers as a ladder with your player’s position on it, and “what did this to you” — the last six causes, named. Every change to the value goes through one chokepoint that records why, so the ledger reads the door on the wrong wall and she said your name, in the strings you wrote. Runs are coalesced, so a room draining slowly is one line, not two hundred.

There is no windowskin anywhere in this scene. No default frame, no default font, no stock cursor — zero Window_Base instances, asserted in-engine rather than claimed.

It drives from anything you already have

<Lucidity Drain: 0.2>        on a map note, per second
<Lucidity Region 3: 0.9>     region-local, and a negative value RESTORES
<Lucidity: +18>              on an item or a skill
<Lucidity Density: 1.2>      more or fewer apparitions on this map
<Lucidity Quiet>             this map never manifests

Or point mirrorVariable at a game variable and Lucidity drives off your stat instead, doing no drain of its own. Already using a stat framework? Bind it and keep it.

Tuned by measurement, not by feel

A sanity system is a distribution, not a behaviour, and there is no unit test that fails because a curve is miserable. So it ships with a balance probe, and the numbers it produced are written beside the constants they set:

  • Without a restoring force, a 20-minute dungeon spent 66–93% of its frames at the worst tier — five tiers and forty-four gated motifs cannot breathe on that curve. A one-sided settle (0.15/s toward 60) pulls Broken to 0.0% on a normal duty cycle and makes Frayed the home band.
  • Hysteresis is mandatory and it is real: enter a tier at its ceiling, leave it only five points above, so the world cannot strobe at a boundary.

Built to sit in a real project

  • Three raw, readable, uncompressed JavaScript files. No minification. Take LucidityCore alone if you only want the tier machine driving your own events.
  • Every core patch is a prototype extension with the original saved — no method clobbered, which is the number one cause of plugin conflicts.
  • Versioned save schema with a migration path; round-trip proven in the real engine.
  • Deterministic. No Math.random in generation or placement.
  • Apparitions live in a plugin-owned layer above the tilemap — never in your map data, so they cannot corrupt a save, break pathing or fire a trigger.
  • Pooled sprites and cached bitmaps: measured in-engine at 0 texture uploads and 0 bitmap redraws per frame with twelve apparitions live, and zero display-object growth.

Compatibility

Complementary to the horror-filter shelf by design — theirs is the effect, this decides when. Works alongside stat frameworks (bind a variable). Tier afflictions are ordinary states, so anything that understands states understands these.

RPG Maker MZ. Five plugin commands, ten parameters, one tier struct. Nothing else to wire up.

Purchase

Buy Now$13.99 USD or more

In order to download this tool you must purchase it at or above the minimum price of $13.99 USD. You will get access to the following files:

lucidity-mz-plugin.zip 38 kB
Version 1.0.0

Leave a comment

Log in with itch.io to leave a comment.