Module 31

Survival / Crafting

Dropped into a hostile world with nothing — gather, craft, and build your way to survival | Wilderness Survival

"The genius of survival games is that a wooden door feels like a fortress when you built it yourself from trees you chopped with an axe you made from sticks you picked up off the ground."

Week 1: History & Design Theory

The Origin

Minecraft did not invent the survival game, but it defined the modern template when Markus "Notch" Persson released the alpha in 2009. The concept was disarmingly simple: you spawn in a procedurally generated world made of blocks. You can break any block. Breaking a tree gives wood. Wood becomes planks, planks become sticks, sticks and planks become a pickaxe. The pickaxe breaks stone faster. Stone makes better tools. And then night falls, and monsters come. Minecraft's genius was the crafting tree — every material led to something that led to something else, and the survival pressure provided just enough motivation to keep climbing the tech tree without dictating how.

How the Genre Evolved

Minecraft (2011) — Established the core loop: punch tree, get wood, craft tools, mine deeper, build shelter, survive the night. The procedural world meant every player's experience was unique. Proved that gathering and crafting are inherently satisfying even without traditional goals.

Don't Starve (2013) — Klei Entertainment dialed up the consequence. Death was permanent. The game tracked hunger, health, and sanity — three stats that all drained simultaneously. Night was lethal without a light source. Don't Starve proved that multiple competing survival stats created more interesting decisions than a single health bar.

Valheim (2021) — Iron Gate Studio added progression that felt like an adventure. Valheim structured its crafting tree around boss fights — each boss unlocked tools for the next biome. The building system was physics-based. It showed that the survival loop was not just a solo experience but a social one.

What Makes It "Great"

A great survival game makes the player feel like they earned every inch of safety. The world starts hostile and stays hostile — the key is that the player's relationship to that hostility changes. On night one, a dark cave is terrifying. By night twenty, the player has a walled base with torches, a furnace, and iron tools. The world did not get easier; the player got more capable, and every piece of that capability was built by hand.

The Essential Mechanic

The gather-craft-survive loop — turning raw materials into tools that enable gathering better materials.


Week 2: Build the MVP

What You're Building

A top-down survival game on a grid-based world. The player spawns with nothing in a world containing trees, rocks, bushes, and ore deposits. They gather raw materials, craft tools and structures, manage hunger/thirst/health stats, and build shelter to survive nightly enemy waves. Each night is harder than the last.

Core Concepts

1. Resource Gathering Loop

The player interacts with world objects to harvest raw materials. Each object yields specific resources and has durability. Some objects require specific tools — bare hands can gather wood, but stone requires a pickaxe.

WORLD_OBJECTS = {
    "tree":     {resource: "wood",  amount: 3, hitsToBreak: 5, requiresTool: null},
    "rock":     {resource: "stone", amount: 2, hitsToBreak: 8, requiresTool: "pickaxe"},
    "bush":     {resource: "berry", amount: 2, hitsToBreak: 1, requiresTool: null},
    "ore_vein": {resource: "iron",  amount: 1, hitsToBreak: 12, requiresTool: "iron_pickaxe"}
}

function gatherResource(player, worldObject):
    objData = WORLD_OBJECTS[worldObject.type]
    if objData.requiresTool and not player.hasEquipped(objData.requiresTool):
        return "Requires " + objData.requiresTool
    worldObject.durability -= getToolDamage(player.equippedTool)
    if worldObject.durability <= 0:
        player.inventory.add(objData.resource, objData.amount)

Why it matters: The gathering loop is the foundation everything else is built on. The tool-gating system creates natural progression tiers that guide the player without a tutorial.

2. Crafting Tree

Recipes form a dependency tree: raw materials produce basic tools, basic tools enable access to better materials, better materials produce advanced tools and structures. The crafting tree IS the progression system.

RECIPES = {
    // Tier 1
    "wood_axe":     {ingredients: {"wood": 3, "stone": 2}, tier: 1},
    "wood_pickaxe": {ingredients: {"wood": 3, "stone": 2}, tier: 1},
    "campfire":     {ingredients: {"wood": 5, "stone": 3}, tier: 1},
    // Tier 2
    "furnace":      {ingredients: {"stone": 10}, tier: 2, requires: "wood_pickaxe"},
    // Tier 3
    "iron_pickaxe": {ingredients: {"wood": 2, "iron": 3}, tier: 3, requires: "furnace"}
}

Why it matters: There are no experience points, no skill trees, no level-ups. You progress by crafting better things. The tree structure means the player always has a visible next goal.

Interactive: Crafting Dependency Tree

A visual dependency tree showing raw materials at the bottom, intermediate items in the middle, and advanced items at the top. Click any item to see its recipe and highlight the raw materials needed.

Click an item to see its recipe

3. Hunger / Thirst / Health Drain

Three stats drain over time. Hunger and thirst decrease steadily; if either hits zero, health drains. Eating food restores hunger, drinking water restores thirst. The player must continuously gather and consume resources just to stay alive.

function updateSurvivalStats(player, deltaTime):
    player.hunger -= HUNGER_DRAIN * deltaTime
    player.thirst -= THIRST_DRAIN * deltaTime
    if player.hunger <= 0:
        player.health -= HEALTH_DRAIN * deltaTime
    if player.thirst <= 0:
        player.health -= HEALTH_DRAIN * deltaTime
    if player.health <= 0:
        triggerDeath(player)

Why it matters: Multiple draining stats create competing priorities. The interplay between stats creates interesting decisions: eat the berries now, or save them for the dangerous area ahead?

4. Day/Night Cycle

A continuous clock cycles between day and night. During the day, the world is lit and enemies do not spawn. At night, visibility drops and hostile enemies spawn at map edges and move toward the player. Each successive night is longer or spawns more enemies.

DAY_NIGHT_CONFIG = {
    dayDuration: 180,       // seconds
    nightDuration: 120,
    playerLightRadius: 3,   // tiles visible at night
    campfireLightRadius: 6
}

function spawnNightEnemies():
    if phase != "night": return
    count = BASE_ENEMIES + (dayCount * ESCALATION_PER_NIGHT)
    for i in range(count):
        enemy = createEnemy("hostile", getRandomEdgePosition())
        enemy.target = player

Why it matters: The day/night cycle creates the fundamental rhythm: gather during the day, survive at night. It gives the crafting system purpose (you build shelter because night is coming) and makes light a gameplay mechanic.

Interactive: Day/Night Cycle

Watch a scene transition from day to night. During the day, resources (green dots) spawn. At night, the world darkens and enemies (red dots) approach from the edges. A countdown shows time until dawn.

Day Time: 0s Day 1 Enemies: 0

5. Base Building / Structure Placement

The player places crafted structures (walls, doors, campfires) onto the grid. Walls block enemy pathfinding, doors can be opened by the player but not enemies, and campfires provide light and enable cooking.

STRUCTURE_DATA = {
    "wood_wall":  {durability: 50, blocksEnemies: true, lightRadius: 0},
    "wood_door":  {durability: 30, blocksEnemies: true, lightRadius: 0},
    "campfire":   {durability: 100, blocksEnemies: false, lightRadius: 6},
    "furnace":    {durability: 200, blocksEnemies: true, lightRadius: 2}
}

Why it matters: Base building transforms the survival experience from reactive to proactive. The base is the player's home, and defending it creates emotional investment that pure combat cannot match.

6. World Persistence

The entire world state — every gathered resource, placed structure, and entity position — must be serializable and loadable. Persistence is what allows the player to build something over time.

function saveGame(world, player):
    saveData = {
        dayCount: dayNightClock.dayCount,
        player: {position, health, hunger, thirst, inventory},
        grid: [modified tiles only],
        entities: [all entity states]
    }
    writeToFile("save.json", serialize(saveData))

Why it matters: A survival game without persistence is a roguelike. Persistence lets the player build a base that grows night by night, a stockpile that accumulates, a world that bears the marks of their decisions.

7. Threat Escalation

Each night is harder. More enemies spawn, and after certain day thresholds, tougher enemy types appear. This creates a soft timer — the player must progress through the crafting tree fast enough to handle the escalating threat.

ENEMY_TYPES = {
    "zombie":      {health: 20, damage: 5, speed: 1.0, spawnAfterDay: 1},
    "fast_zombie": {health: 15, damage: 8, speed: 2.0, spawnAfterDay: 4},
    "brute":       {health: 60, damage: 15, speed: 0.7, spawnAfterDay: 7}
}

Why it matters: Without escalation, survival games stagnate. Once the player has food and shelter, there is no reason to keep playing. Escalation is why you need iron tools, not just stone ones.


Stretch Goals

MVP Spec

ComponentMinimum Viable Version
World32x32 tile grid with trees, rocks, bushes, ore veins
GatheringInteract with objects to collect wood, stone, berries, iron
Crafting10 recipes across 3 tiers
Survival StatsHealth, hunger, thirst
Day/Night3-minute day, 2-minute night, visual darkness
EnemiesSpawn at night, pathfind toward player
Base BuildingWalls, doors, campfires
EscalationMore enemies per night, tougher types after days 4 and 7

Deliverable

A playable survival game where the player gathers resources, crafts tools and structures through a tiered recipe system, manages survival stats, builds a base to defend against nightly enemy waves, and survives as long as possible against escalating threats.


Discussion Questions

  1. The Crafting Tree as Implicit Tutorial: Minecraft never tells you to make a pickaxe before mining stone — the crafting tree forces it. How does designing a dependency graph replace traditional tutorials?
  2. Balancing Scarcity: Don't Starve is punishing; Minecraft on easy mode is forgiving. How do you tune drain rates, enemy difficulty, and resource availability?
  3. Persistence and Consequence: How does the death penalty change how players engage with crafting and building?
  4. The Late-Game Problem: Most survival games become trivially easy once the player has the top crafting tier. How do you keep the game interesting?