Module 33

Survival Horror

You are not the hunter — you are the hunted, and you never have enough bullets | The Dark Below

"The scariest thing in a game is not what you can see — it is the sound of footsteps in a hallway you thought was empty."

Week 1: History & Design Theory

The Origin

In 1996, Shinji Mikami and Capcom released Resident Evil and coined the term "survival horror." The game dropped players into a mansion filled with zombies and gave them almost nothing to fight back with — a knife, a handgun with scarce ammunition, and a handful of healing herbs. Inventory was limited to six slots, and saving consumed a finite resource (ink ribbons). Every system was designed around a single principle: scarcity. You never had enough ammo to kill everything, enough health to take hits carelessly, or enough saves to retry freely. This scarcity transformed a third-person action game into something genuinely frightening — not because the zombies were scary, but because facing them meant spending resources you could not afford to lose.

How the Genre Evolved

Resident Evil (1996) — Defined the genre's mechanical vocabulary: fixed camera angles that obscure threats, tank controls that make movement vulnerable, strict inventory limits, save points that consume resources, and ammunition so scarce that players learned to dodge enemies rather than fight them.

Silent Hill 2 (2001) — Shifted from physical horror to psychological horror. The town was shrouded in fog and darkness, and monsters were manifestations of guilt. Audio designer Akira Yamaoka created a soundscape where industrial noise and radio static were as frightening as any monster. Proved that atmosphere surrounding the monster was the most powerful tool.

Amnesia: The Dark Descent (2010) — Frictional Games removed combat entirely. The player could run, hide, and close doors. Enemies could not be killed. A sanity mechanic degraded the player's perception in darkness, but light attracted enemies. Proved that powerlessness is the purest form of fear.

What Makes It "Great"

A great survival horror game is an exercise in controlled deprivation. Every system takes something away: ammo, health, visibility, safe places, sanity. The pacing alternates between tension and release: a safe room is an emotional reset that makes the next dark hallway feel even darker. The enemy design matters less than the enemy's presence — a monster that patrols unpredictably is scarier than one that attacks on sight. What the player cannot see is more frightening than what they can.

The Essential Mechanic

Resource scarcity — never having enough ammo or health to feel safe, forcing careful decision-making.


Week 2: Build the MVP

What You're Building

A top-down survival horror game in an abandoned facility. The player navigates interconnected rooms, collecting sparse ammo and health kits while avoiding a stalker enemy that uses a 5-state AI (patrol, investigate, chase, search, return). The player has a flashlight with limited battery. Darkness is a core mechanic: rooms are dark unless illuminated. Some rooms are safe rooms where the enemy cannot enter.

Core Concepts

1. Resource Scarcity Design

The total ammunition and health items in the game is deliberately insufficient to kill every enemy and heal every wound. The player is forced to decide: fight and spend bullets, or sneak past and risk taking damage?

RESOURCE_BUDGET = {
    totalAmmo: 24,          // Enough to kill ~4 enemies, but there are 8
    totalHealthKits: 5,     // Each heals 40 HP; player has 100 HP
    totalBatteries: 3,      // Each adds 60 seconds of flashlight
    totalSaveItems: 4       // Limited saves (ink ribbon style)
}

ENEMY_STATS = {
    "zombie":  {health: 30, damage: 20, bulletsToKill: 6},
    "stalker": {health: 999, damage: 35, bulletsToKill: null}  // Cannot be killed
}

Why it matters: Scarcity is the fundamental design lever. Without it, the game is an action game with creepy art. With it, every encounter becomes a risk-reward calculation.

2. AI Stalker / Hunter Enemy

The stalker cannot be killed and uses a multi-state behavior system: patrol (walks a route), investigate (heard a sound), chase (spotted the player), search (lost sight, checks nearby), and return (gives up, resumes patrol). The stalker reacts to player sounds and line-of-sight.

STALKER_STATES = {
    PATROL:      {speed: 1.0, detectionRange: 5},
    INVESTIGATE: {speed: 1.5, detectionRange: 7},
    CHASE:       {speed: 2.5, detectionRange: 12},
    SEARCH:      {speed: 1.2, detectionRange: 8},
    RETURN:      {speed: 1.0, detectionRange: 5}
}

function updateStalker(stalker, player, deltaTime):
    switch stalker.state:
        case PATROL:
            followPatrolRoute(stalker)
            if canSeePlayer(): stalker.state = CHASE
            else if heardSound(): stalker.state = INVESTIGATE
        case CHASE:
            moveToward(stalker, player.position)
            if not canSeePlayer(): stalker.state = SEARCH
        case SEARCH:
            searchNearby(stalker, lastKnownPos)
            if searchTimer <= 0: stalker.state = RETURN

Why it matters: The stalker creates unpredictable tension. Every decision — run or walk, flashlight on or off, shortcut through darkness or long way through lit halls — is filtered through "where is the stalker right now?"

Interactive: Stalker AI State Machine

A top-down grid with a player (blue) and enemy (red). The enemy has states: Patrol, Investigate, Chase, Search. Move the player with arrow keys or WASD to trigger state transitions. The current AI state is shown. Press N to make noise and attract the enemy.

State: PATROL Move with arrows/WASD. Press N for noise.

3. Sound Design for Tension

Player actions generate sound events with a radius. The stalker's hearing system detects these events. Running is louder than walking. Shooting is loudest. The player's panic response (running away) can make the situation worse.

SOUND_EVENTS = {
    "walk":      {radius: 2, alertLevel: 0.2},
    "run":       {radius: 6, alertLevel: 0.7},
    "shoot":     {radius: 12, alertLevel: 1.0},
    "open_door": {radius: 4, alertLevel: 0.5}
}

function emitPlayerSound(soundType, position):
    world.activeSounds.add({
        position, radius: SOUND_EVENTS[soundType].radius,
        alertLevel: SOUND_EVENTS[soundType].alertLevel
    })

Why it matters: Sound creates a feedback loop: the player's own actions attract the stalker, meaning panic makes things worse. The safe room's silence is itself a form of design.

4. Camera as a Fear Tool

The player can only see within their flashlight cone plus a small ambient radius. Anything behind or to the sides is invisible. The flashlight rotates with the player's facing direction, creating blind spots.

CAMERA_CONFIG = {
    ambientVisRadius: 2,
    flashlightArcAngle: 45,   // degrees
    flashlightRange: 8,       // tiles
    fullDarkAlpha: 0.95
}

function calculateVisibility(player):
    visibleTiles = getTilesInRadius(player.position, ambientVisRadius)
    if player.flashlightOn:
        for tile in getTilesInCone(player.position, flashlightRange, flashlightArc):
            if hasLineOfSight(player, tile):
                visibleTiles.add(tile)
    return visibleTiles

Why it matters: Restricted visibility is the most powerful fear tool. The player must choose between seeing further (flashlight on, battery draining, visible to stalker) and hiding (flashlight off, nearly blind, conserving battery).

Interactive: Flashlight / Darkness

A dark room with a player. Arrow keys to move, mouse to aim the flashlight. Only the cone of light reveals the room. Hidden items (yellow) are only visible in the light. Press F to toggle the flashlight on/off.

Battery: 100% Items Found: 0 / ? Flashlight: ON

5. Safe Rooms / Tension-Release Pacing

Safe rooms are areas where the stalker cannot enter. They contain save points, sometimes pickups, and distinct calm audio. The level alternates between dangerous exploration and safe room respites.

function enterRoom(player, room):
    if room.isSafeRoom:
        stalker.state = SEARCH   // Cannot follow
        crossfadeAudio(SAFE_ROOM_MUSIC)
        room.lightLevel = 1.0    // Fully lit
        showNotification("Safe Room")

Why it matters: Safe rooms reset the player's emotional baseline. The calm music and full lighting create genuine relief that makes the next dark hallway feel even worse.

6. Inventory Tetris

Items have different sizes and must fit into a grid-based inventory. Ammo takes 1 slot, health kits take 2. The inventory screen does not pause the game — the stalker can still approach.

INVENTORY_CONFIG = { gridWidth: 4, gridHeight: 2 }  // 8 cells

ITEM_SIZES = {
    "handgun_ammo": {w: 1, h: 1},
    "health_kit":   {w: 1, h: 2},
    "battery":      {w: 1, h: 1},
    "key_card":     {w: 1, h: 1}
}

Why it matters: Inventory Tetris forces the player to think about what they truly need. The non-pausing design means spending too long rearranging items is itself a risk.

7. Darkness and Lighting as Mechanics

The flashlight is a resource, a detection tool, and a risk. It drains battery, and batteries are scarce. Turning it on makes the player visible to the stalker from greater range. The tension between seeing and hiding is the core dilemma.

FLASHLIGHT_CONFIG = {
    maxBattery: 100,
    drainRate: 8,              // ~12 seconds continuous use
    detectionMultiplier: 2.0,  // Stalker sees from 2x range
    flickerThreshold: 20       // Starts flickering when low
}

Why it matters: The flashlight creates a rhythm of on-off-on-off, constant micro-decisions. The flicker at low battery is pure psychological design: unreliable light is more frightening than no light.


Stretch Goals

MVP Spec

ComponentMinimum Viable Version
Map10 interconnected rooms (7 dangerous, 2 safe, 1 exit)
PlayerMove, aim flashlight, shoot, interact, open inventory
Stalker5-state AI: patrol, investigate, chase, search, return
FlashlightCone visibility, battery drain, flicker at low charge
Inventory4x2 grid, items have sizes, does not pause game
Resources24 ammo, 5 health kits, 3 batteries across entire game
Safe Rooms2 rooms with save points, calm music, full lighting
DarknessRooms dark by default, flashlight provides visibility

Deliverable

A playable survival horror game where the player navigates a dark facility with a limited flashlight, collects scarce resources, manages a grid-based inventory, and avoids a stalker enemy driven by a 5-state AI. The player should feel genuinely tense in dark rooms and genuinely relieved in safe rooms.


Discussion Questions

  1. The Powerlessness Spectrum: Resident Evil gives you a gun with scarce ammo. Amnesia gives you nothing. Where on the spectrum should your MVP sit? Is a player with 3 bullets more scared or less scared than one with 0?
  2. Sound as Game Design: The stalker reacts to player sounds, meaning panic makes things worse. How do you communicate this without breaking immersion?
  3. Pacing and Desensitization: After 30 minutes, even the most frightening stalker becomes familiar. How do you prevent desensitization?
  4. The Inventory Decision: Non-pausing inventory means opening the bag is itself a risk. How does this change player behavior compared to a paused inventory?