$npx -y skills add thedivergentai/GD-Agentic-Skills --skill godot-genre-horrorExpert blueprint for horror games including tension pacing (sawtooth wave: buildup/peak/relief), Director system (macro AI controlling pacing), sensory AI (vision/sound detection), sanity/stress systems (camera shake, audio distortion), lighting atmosphere (volumetric fog, dynami
| 1 | # Genre: Horror |
| 2 | |
| 3 | Expert blueprint for horror games balancing tension, atmosphere, and player agency. |
| 4 | |
| 5 | ## NEVER Do (Expert Anti-Patterns) |
| 6 | |
| 7 | ### Atmosphere & Tension |
| 8 | - 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. |
| 9 | - 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. |
| 10 | - 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. |
| 11 | - 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. |
| 12 | |
| 13 | ### AI & Senses |
| 14 | - 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. |
| 15 | - 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. |
| 16 | - 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. |
| 17 | - NEVER calculate complex AI vision or pathfinding for monsters far outside the camera's frustum; use `VisibleOnScreenNotifier3D` to disable processing logic. |
| 18 | - NEVER leave navigation avoidance layers unconfigured on chasing monsters; explicitly assign avoidance masks to prevent visual "stacking" in tight corridors. |
| 19 | |
| 20 | ### Technical & Scarcity |
| 21 | - 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]`. |
| 22 | - 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. |
| 23 | - 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. |
| 24 | - NEVER parse massive JSON save files synchronously; strictly offload heavy parsing to the `WorkerThreadPool` to prevent auto-save freezes. |
| 25 | - NEVER use standard strings for hot-path IDs (states, item types); strictly use `StringName` (&"chasing") for pointer-speed comparisons. |
| 26 | - NEVER evaluate exact floating-point equality (sanity == 0.0); strictly use `is_equal_approx()` or threshold checks for deterministic triggers. |
| 27 | - NEVER write screen-reading shaders expecting Godot 3 `SCREEN_TEXTURE`; strictly use `sampler2D` with `hint_screen_texture`. |
| 28 | - NEVER instantiate detailed monster meshes or lights without culling; strictly configure `visibility_range` for automatic HLOD efficiency. |
| 29 | - NEVER rely on AnimationPlayer for random flickering; use `Tween` for programmatic, clean energy manipulation. |
| 30 | - NEVER load heavy scare scenes or 4K textures synchronously via `load()`; strictly use `ResourceLoader.load_threaded_request()` to prevent frame stalls. |
| 31 | - NEVER scale CollisionShape3D non-uniformly; strictly adjust internal shape resource parameters (radius, height) to prevent erratic physics. |
| 32 | - 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. |
| 33 | - NEVER check for hiding spot types by casting; strictly use **`Object` metadata (`set_meta`)** for performant, decoupled AI queries. |
| 34 | |
| 35 | --- |
| 36 | |
| 37 | ## Godot 4.7: Horror Lighting |
| 38 | |
| 39 | - **AreaLight3D** for flickering panels, TV glow, and rectangular soft shadows without GI hacks. |
| 40 | |
| 41 | ## 🛠 Expert Components (scripts/) |
| 42 | |
| 43 | ### Original Expert Patterns |
| 44 | - [predator_stalking_ai.gd](scripts/predator_stalking_ai.gd) - Sophisticated "Stalker" AI using dual-brain logic (Director + Senses) and player view-cone avoidance. |
| 45 | - [director_pacing.gd](scripts/director_pacing.gd) - Invisible orchestrator managing the "Sawtooth" tension wave and relief periods. |
| 46 | |
| 47 | ### Modular Components |
| 48 | - [monster_los_check.gd](scripts/monster_los_check.gd) - Physics-synced raycasting for high-performance visibility checks. |
| 49 | - [flashlight_flicker.gd](scripts/flashli |