All skills
thedivergentai avatar

/godot-genre-horror

@9d6e91e

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. Keywords: horror_game, tension_pacing, director_system, sensory_perception, sanity_system, volumetric_fog, AI_reaction_time.

Use this Skill: https://skilld.dev/gh/thedivergentai/gd-agentic-skills/godot-genre-horror

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ110 tokens always: the name and description. β‰ˆ3.9k when used: this file. β‰ˆ2.1k more on demand in 2 files.

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 is_equal_approx() or threshold checks for deterministic triggers.
  • NEVER write screen-reading shaders expecting Godot 3 SCREEN_TEXTURE; strictly use sampler2D with hint_screen_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.load_threaded_request() 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)

  • director_pacing.gd - Invisible orchestrator managing the "Sawtooth" tension wave and relief periods. MANDATORY before wiring any pacing/Director.
  • predator_stalking_ai.gd - Dual-brain stalker (Director hints + honest senses) with view-cone avoidance. MANDATORY before implementing predator AI.

Modular Components


Core Loop

  1. Explore: Player navigates a threatening environment.
  2. Sense: Player hears/sees signs of danger.
  3. React: Player hides, runs, or fights (disempowered combat).
  4. Survive: Player reaches safety or solves a puzzle.
  5. Relief: Brief moment of calm before tension builds again.

Skill Chain

Phase Skills Purpose
1. Atmosphere godot-3d-lighting, godot-audio-systems Volumetric fog, dynamic shadows, spatial audio
2. AI godot-state-machine-advanced, godot-navigation-pathfinding, godot-raycasting-queries Hunter AI, honest LoS/sound
3. Player godot-camera-systems, godot-genre-stealth, godot-physics-3d Lean/shake, hiding, CharacterBody3D movement
4. Scarcity godot-inventory-system Limited battery, ammo, health
5. Logic / saves this skill's Director scripts + godot-save-load-systems Sawtooth pacing + threaded safe-room saves

Do-NOT-Load (by fantasy)

Fantasy focus Load Do NOT load
Atmosphere / fog / flashlight only fog_claus_intensifier.gd, flashlight_flicker.gd Predator AI, LoS, noise, state machine
Stalker / dual-brain AI director_pacing.gd, predator_stalking_ai.gd, monster_los_check.gd, spatial_noise_emitter.gd Sanity shaders, inventory duplicator, scare loader
Sanity / stress FX sanity_manager.gd, sanity_shader_manager.gd Inventory scarcity scripts, async scare loader
Scarcity / inventory truth inventory_data_storage.gd, item_state_duplicator.gd Fog intensifier, sanity shaders
Hitch-free scare assets async_scare_loader.gd Full Director + sanity stack

Architecture Overview

1. The Director System (Macro AI)

Controls pacing so players never stay at 100% tension.

MANDATORY read: director_pacing.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: predator_stalking_ai.gd for dual-brain orchestration; monster_los_check.gd + spatial_noise_emitter.gd for LoS/sound. Prefer PhysicsDirectSpaceState3D.intersect_ray() over Area overlap for vision.

3. Sanity / Stress System

Distorting the world based on fear.

Load sanity_manager.gd + sanity_shader_manager.gd for value β†’ shake/bus/shader pipelines. Keep thresholds on is_equal_approx / bands, never sanity == 0.0.

Key Mechanics Implementation

Pacing (The Sawtooth Wave)

Horror needs peaks and valleys.

  1. Safety: Save room.
  2. Unease: Strange noise, lights flicker.
  3. Dread: Monster is known to be close.
  4. Terror: Chase sequence / Combat.
  5. 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 set_meta / groups β€” MANDATORY: predator_stalking_ai.gd + peer godot-genre-stealth. Do not paste hiding-spot tutorials inline.

4. Adaptive Audio (Stress Muffling)

Bus LPF / volume from fear β€” MANDATORY: sanity_manager.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.

Reference

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.

Official Documentation

  • Volumetric fog and fog volumes β€” density/albedo and light-dependent scattering for dread atmosphere.
  • Environment and post-processing β€” WorldEnvironment tonemap, glow, and fog modes that carry horror looks.
  • Lights and shadows β€” SpotLight3D flashlight cones, soft shadows, and bias for dark interiors.
  • Audio buses β€” LowPass/Reverb bus effects for stress muffling and spatial dread.
  • Ray-casting β€” PhysicsDirectSpaceState intersect_ray for honest monster LoS (not Area overlap).
  • Navigation introduction (3D) β€” predator chase paths and avoidance masks in tight corridors.
  • Background loading β€” ResourceLoader threaded requests so jump-scare assets never hitch.
  • Screen-reading shaders β€” hint_screen_texture sanity distortion (not Godot 3 SCREEN_TEXTURE).
  • Visibility ranges β€” GeometryInstance3D HLOD/culling for expensive monster meshes and lights.
  • Saving games β€” FileAccess patterns for safe-room checkpoints without inventing a format.
  • Using threads β€” Thread/Mutex and WorkerThreadPool for background saves and heavy parse work.
  • Resources β€” Resource definitions and duplicate(true) so mutable item state never aliases globals.

Related Skills

Prerequisites
  • godot-project-foundations β€” scene tree, autoloads, and import basics before Director/WorldEnvironment wiring.
  • godot-3d-lighting β€” volumetric fog, SpotLight3D flashlights, and shadow budgets that define horror atmosphere.
  • godot-audio-systems β€” buses, spatial emitters, and effect stacks the sanity/stress systems modulate.
Complements
Downstream / consumers
Master
  • godot-master β€” library router and mirrored module entry for cross-skill discovery.

Source: SKILL.md on GitHub

1 warning16d4 checks Β· Risk SAFE
  • Gen Agent Trust Hub16d

    The skill provides a comprehensive set of Godot game development patterns and scripts for horror game mechanics. No malicious patterns, data exfiltration, or unauthorized command executions were detected.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW Β· No issues

  • Runlayer7mo

    4/4 files flagged

Signed by skilld at 9d6e91e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 weeks ago.

Activeupdated 2 months ago

README badge

README badge for thedivergentai/gd-agentic-skills/godot-genre-horror