Expert blueprint for horror games: sawtooth tension pacing, Director macro-AI, sensory predator AI, sanity/stress FX, and scarcity loops.
Use when building psychological/survival horror, dual-brain stalker AI (cheating Director + honest LoS/sound), flashlight/fog atmosphere, or safe-room saves.
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Claude CodeNot declared
CursorNot declared
CodexNot declared
GitHub CopilotNot declared
WindsurfNot declared
Gemini CLINot declared
ClineNot declared
OpenCodeNot declared
Repository health
Stars678
LicenseLICENSE
Default branchmain
Open issues0
Status
Active
Package contents
Files included with this skill beyond the listing page.
skill mdSKILL.md16,054 B
docsSUMMARY.md3,980 B
History
First seen on skills.sh
First recorded snapshot · 242 installs
SKILL.md
NEVER Do (Expert Anti-Patterns)
Atmosphere & Tension
NEVER maintain 100% tension at all times; strictly use a Sawtooth Pacing model (buildup → peak/scare → dedicated relief period) to prevent player "numbing" and exhaustion.
NEVER rely on jump-scares as the primary source of horror; focus on atmosphere, spatial audio cues, and the anticipation of a threat to build genuine dread.
NEVER make environments pitch black to the point of frustrating navigation; darkness should obscure threats (details), not the floor. Use rim lighting or a limited-battery flashlight.
NEVER grant the player unlimited resources; survival horror relies on Scarcity. Limited battery, rare ammo, and slow animations are mandatory to force stressful decision-making.
AI & Senses
NEVER allow AI to detect the player instantly; implement a Suspicion Meter or a 1-3s reaction window before the AI enters full aggression to avoid "unfair cheating" feel.
NEVER use predictable AI paths; an enemy on a perfect loop is a puzzle, not a predator. Use the Director to periodically "hint" a new destination near the player.
NEVER use Area3D overlap signals for instant, frame-perfect Line-of-Sight (LoS) checks; use nodeless raycasting via PhysicsDirectSpaceState3D.intersect_ray() for fixed-physics sync.
NEVER calculate complex AI vision or pathfinding for monsters far outside the camera's frustum; use VisibleOnScreenNotifier3D to disable processing logic.
NEVER leave navigation avoidance layers unconfigured on chasing monsters; explicitly assign avoidance masks to prevent visual "stacking" in tight corridors.
Technical & Scarcity
NEVER use the visual SceneTree (like GridContainer children) as the source of truth for inventory; strictly maintain a typed memory structure like Dictionary[StringName, Resource].
NEVER rely on instantiating standard Nodes to store base item stats/definitions; use custom Resource scripts to reduce memory overhead and allow direct Inspector editing.
NEVER forget to call duplicate(true) on an item's Resource when adding to inventory; if items have mutable states (ammo/durability), you will overwrite the global resource otherwise.
NEVER parse massive JSON save files synchronously; strictly offload heavy parsing to the WorkerThreadPool to prevent auto-save freezes.
NEVER use standard strings for hot-path IDs (states, item types); strictly use StringName (&"chasing") for pointer-speed comparisons.
NEVER evaluate exact floating-point equality (sanity == 0.0); strictly use isequalapprox() or threshold checks for deterministic triggers.
NEVER write screen-reading shaders expecting Godot 3 SCREENTEXTURE; strictly use sampler2D with hintscreen_texture.
NEVER instantiate detailed monster meshes or lights without culling; strictly configure visibility_range for automatic HLOD efficiency.
NEVER rely on AnimationPlayer for random flickering; use Tween for programmatic, clean energy manipulation.
NEVER load heavy scare scenes or 4K textures synchronously via load(); strictly use ResourceLoader.loadthreadedrequest() to prevent frame stalls.
NEVER scale CollisionShape3D non-uniformly; strictly adjust internal shape resource parameters (radius, height) to prevent erratic physics.
NEVER perform synchronous, heavy file I/O in a Safe Room; strictly use Thread and Mutex to handle background saving without stalling the main game thread.
NEVER check for hiding spot types by casting; strictly use Object metadata (set_meta) for performant, decoupled AI queries.
🛠 Expert Components (scripts/)
Original Expert Patterns (MANDATORY at architecture steps)
[directorpacing.gd](scripts/directorpacing.gd) - Invisible orchestrator managing the "Sawtooth" tension wave and relief periods. MANDATORY before wiring any pacing/Director.
[predatorstalkingai.gd](scripts/predatorstalkingai.gd) - Dual-brain stalker (Director hints + honest senses) with view-cone avoidance. MANDATORY before implementing predator AI.
Modular Components
[monsterloscheck.gd](scripts/monsterloscheck.gd) - Physics-synced raycasting for high-performance visibility checks.
[flashlightflicker.gd](scripts/flashlightflicker.gd) - Procedural light interference for atmospheric tension.
[inventorydatastorage.gd](scripts/inventorydatastorage.gd) - Typed data structure for sparse resource management.
[asyncscareloader.gd](scripts/asyncscareloader.gd) - Threaded resource loading for hitch-free jump-scares.
[spatialnoiseemitter.gd](scripts/spatialnoiseemitter.gd) - Shape-based sound sensing for sensory AI.
[itemstateduplicator.gd](scripts/itemstateduplicator.gd) - Deep duplication for managing unique weapon/item states.
[fogclausintensifier.gd](scripts/fogclausintensifier.gd) - Volumetric fog manipulation for dread buildup.
[offscreenlogicsuspender.gd](scripts/offscreenlogicsuspender.gd) - Culling logic for AI processing outside camera view.
Controls pacing so players never stay at 100% tension.
MANDATORY read: [directorpacing.gd](scripts/directorpacing.gd) — do not paste a one-off tension enum. Wire Director events to near-player investigation targets, never instant on-player teleports during quiet phases.
2. Sensory Perception (Micro AI)
Honest monster senses (vision + sound) that the Director may only hint, never hard-cheat.
MANDATORY reads: [predatorstalkingai.gd](scripts/predatorstalkingai.gd) for dual-brain orchestration; [monsterloscheck.gd](scripts/monsterloscheck.gd) + [spatialnoiseemitter.gd](scripts/spatialnoiseemitter.gd) for LoS/sound. Prefer PhysicsDirectSpaceState3D.intersect_ray() over Area overlap for vision.
3. Sanity / Stress System
Distorting the world based on fear.
Load [sanitymanager.gd](scripts/sanitymanager.gd) + [sanityshadermanager.gd](scripts/sanityshadermanager.gd) for value → shake/bus/shader pipelines. Keep thresholds on isequalapprox / bands, never sanity == 0.0.
Key Mechanics Implementation
Pacing (The Sawtooth Wave)
Horror needs peaks and valleys.
Safety: Save room.
Unease: Strange noise, lights flicker.
Dread: Monster is known to be close.
Terror: Chase sequence / Combat.
Relief: Escape to Safety.
The "Dual Brain" AI
Director (All-knowing): Cheats to keep the alien relevant (teleports it closer if far away, guides it to player's general area).
Alien (Senses only): Honest AI. Must actually see/hear the player to attack.
3. Hiding-Spot Metadata System
Use setmeta / groups — MANDATORY: [predatorstalkingai.gd](scripts/predatorstalking_ai.gd) + peer godot-genre-stealth. Do not paste hiding-spot tutorials inline.
4. Adaptive Audio (Stress Muffling)
Bus LPF / volume from fear — MANDATORY: [sanitymanager.gd](scripts/sanitymanager.gd) + peer godot-audio-systems.
5. Safe-Room Multithreaded Save
Threaded checkpoint I/O — MANDATORY: peer godot-save-load-systems (Thread/Mutex / WorkerThreadPool). Never sync FileAccess on the main thread in a safe room.
Expert knowledge (on demand)
LLM-ignorance rule: If a general agent would not know it before reading, load the reference — never delete expert deltas.
Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.