Files
TheriapolisV3/theriapolis-rpg-procgen.md
Christopher Wiebe b451f83174 Initial commit: Theriapolis baseline at port/godot branch point
Captures the pre-Godot-port state of the codebase. This is the rollback
anchor for the Godot port (M0 of theriapolis-rpg-implementation-plan-godot-port.md).
All Phase 0 through Phase 6.5 work is included; Phase 7 is in flight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 20:40:51 -07:00

714 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Theriapolis — Procedural World Generation
### Technical Design Document (High Level)
---
## Executive Summary
The continent of Veldara is procedurally generated each playthrough while preserving
the narrative spine of the main quest. The player experiences the same story in a
different world every time — settlements shift, roads reroute, dungeons relocate, and
the spaces between fixed narrative anchors are always fresh.
The core principle: **Geography is authored. Topology is generated.**
Meaning: the continental layout (temperate east, plains center, mountains west, tundra
north, subtropical south) is fixed as a macro-template. But the specific shape of
coastlines, the exact placement of mountain passes, the course of rivers, and the
location of every settlement, road, and point of interest within those macro-regions
is procedurally determined per seed.
---
---
## LAYER 0: THE CONTINENTAL TEMPLATE
### What Is Fixed (Every Playthrough)
The continental template is a hand-authored **macro-biome map** — a low-resolution grid
(approximately 32×32 cells, each cell representing a large region) that defines the
broad strokes:
```
NORTH
┌──────────────────────────────────┐
│ TUNDRA / BOREAL FOREST │
│ (Polar Ursid, Wolverine-folk) │
├──────────────────────────────────┤
│ TEMPERATE │ NORTHERN │
│ FOREST │ PLAINS │
│ (Mixed Clade) │ (Canid-heavy) │
├────────────────┼─────────────────┤
│ EASTERN │ CENTRAL │ WESTERN
│ INDUSTRIAL │ GRASSLANDS │ MOUNTAINS
│ BELT │ (Bovid/Cervid) │ (Mixed)
│ (Multi-Clade) │ │
├────────────────┼─────────────────┤
│ SOUTHEASTERN │ SUBTROPICAL │
│ COAST │ LOWLANDS │
│ (Trade ports) │ "The Tangles" │
│ │ (Hybrid/fringe)│
└──────────────────────────────────┘
SOUTH
```
Each macro-cell carries:
- **Biome type** (tundra, boreal, temperate deciduous, grassland, mountain, subtropical,
coastal, wetland)
- **Dominant Clade affinity** (which Clades historically settled here, influencing
population ratios and architecture)
- **Development level** (industrial, agricultural, frontier, wilderness, urban)
- **Covenant enforcement strength** (strong, moderate, weak, nominal)
These macro-cells are NOT randomized. They are the authored skeleton that ensures
narrative coherence. The main quest expects certain regions to exist in certain
relative positions.
### What Is Generated (Per Seed)
Everything inside and between those macro-cells:
- Coastline shape, island placement, bay/peninsula formation
- Mountain range contours, pass locations, elevation profiles
- River systems (source to sea, branching, confluence points)
- Forest density and treeline boundaries
- Micro-biome variation within macro-cells (a grassland cell might contain
river-bottom woodlands, rocky outcrops, seasonal wetlands)
---
---
## LAYER 1: TERRAIN GENERATION
### Method: Constrained Multi-Octave Noise
Standard Perlin/Simplex noise terrain generation, but constrained by the macro-template.
**Step 1 — Elevation Map**
Generate a base elevation heightmap using multi-octave Simplex noise. Then apply the
macro-template as a **constraint mask**:
- Cells tagged MOUNTAIN: elevation floor set high (0.71.0 range). Noise adds variation
within that range (peaks, valleys, ridgelines) but cannot drop below the floor.
- Cells tagged GRASSLAND: elevation ceiling set low (0.10.3). Gently rolling terrain.
Noise adds subtle hills but cannot spike.
- Cells tagged COASTAL: elevation forced to approach sea level (0.0) at the continent
edge. Noise shapes the specific coastline contour.
- Cells tagged TUNDRA: elevation moderate, flatness enforced with low noise amplitude.
- Transition zones between macro-cells use gradient blending over 23 cell widths to
prevent hard biome edges.
**Step 2 — Moisture Map**
Second noise layer, independent frequency. Combined with elevation to derive biome
detail:
- High elevation + low moisture = alpine desert, rocky peaks
- High elevation + high moisture = alpine meadow, glacier
- Low elevation + high moisture = swamp, wetland, river floodplain
- Low elevation + low moisture = dry grassland, scrubland
- Moderate elevation + moderate moisture = temperate forest (the default)
The moisture map is also constrained: cells tagged SUBTROPICAL get a moisture floor.
Cells tagged TUNDRA get a moisture ceiling (frozen, not wet).
**Step 3 — Temperature Map**
Derived primarily from latitude (north = cold, south = warm) with elevation modifier
(higher = colder). This is mostly deterministic from the other two maps, with minor
noise for local variation (cold pockets in valleys, warm microclimates on south-facing
slopes).
**Step 4 — Erosion Simulation (Optional, Performance Budget Permitting)**
Hydraulic erosion pass over the heightmap to create natural-looking river valleys,
canyon cuts, and sediment plains. This step transforms geometric noise terrain into
terrain that looks like water has been flowing over it for millennia. Expensive but
dramatically improves visual quality.
If performance is a concern, skip this and use the river placement algorithm in
Layer 2 instead (cheaper, less realistic, still functional).
---
### Biome Resolution
After the three maps are generated, each terrain cell (higher resolution now —
think 512×512 or 1024×1024 for the full continent) is assigned a **micro-biome**
based on its elevation/moisture/temperature values:
| Biome | Elevation | Moisture | Temperature |
|-------|-----------|----------|-------------|
| Tundra | LowMed | Low | Cold |
| Boreal Forest | LowMed | Med | Cold |
| Temperate Deciduous | LowMed | MedHigh | Moderate |
| Temperate Grassland | Low | LowMed | Moderate |
| Mountain (alpine) | High | Varies | Cold |
| Mountain (forested) | MedHigh | MedHigh | Moderate |
| Subtropical Forest | LowMed | High | Warm |
| Wetland/Swamp | Very Low | Very High | Warm |
| Coastal | Sea Level | High | Varies |
| River Valley | Low (carved) | High | Varies |
| Scrubland | LowMed | Low | WarmModerate |
| Desert (cold) | Med | Very Low | Cold |
Each biome carries associated data: traversal cost, encounter tables, resource
availability, visual tileset, ambient sound profile, and **ambient scent profile**
(this is Theriapolis — the world smells different in a boreal forest than a swamp,
and PCs with scent abilities should experience that).
---
---
## LAYER 2: HYDROLOGY — RIVERS, LAKES, COASTLINE
### Rivers
Rivers are the skeleton of civilization. They determine where settlements form, where
trade flows, and where borders harden.
**Generation Method: Drainage Simulation**
1. Identify the highest points on the elevation map (mountain peaks, ridgelines).
2. Simulate water flow downhill from multiple source points using gradient descent.
3. Water accumulates: streams merge into rivers based on flow volume thresholds.
4. Rivers carve into the elevation map slightly (lowering terrain along their path)
to create natural valleys.
5. Rivers terminate at the ocean (coastline), a lake basin (local elevation minimum),
or a swamp/wetland (flat, high-moisture area).
**Constraints:**
- At least one major river must cross each of the following macro-regions: Eastern
Industrial Belt, Central Grasslands, Subtropical Lowlands. The quest expects river
crossings and river-based settlements.
- Millhaven (Act I starting town) is always on a river. The generation guarantees a
river within the Eastern Temperate Forest macro-cell.
**River Classification:**
- Stream (narrow, wadeable): traversal cost low, no ferry needed
- River (moderate, bridgeable): settlements form at crossing points, bridges are
infrastructure
- Major River (wide, requires ferry or bridge): trade arteries, political borders,
major settlement anchors
### Lakes
Lakes form at local elevation minimums where river drainage collects. Size varies
by drainage basin. At least one large lake exists per playthrough (visual landmark,
potential quest location). Lakes in tundra regions freeze seasonally.
### Coastline
The continent's edge is generated by the elevation map meeting sea level. Noise
amplitude at coastal cells determines complexity: smooth beaches, rocky cliffs,
fjord-like inlets (north), mangrove swamp (south), bay harbors (east/southeast).
At least 3 natural harbor sites are guaranteed (the economy needs ports). Harbor
sites are identified algorithmically: sheltered bays where depth drops off near
shore. Trade cities always generate at harbors.
---
---
## LAYER 3: SETTLEMENT PLACEMENT
### The Rules
Settlements don't appear randomly. They form where biology, geography, and economics
demand them. The placement algorithm encodes this.
**Step 1 — Identify Settlement Seed Points**
Score every terrain cell for **habitability**:
```
habitability = (water_proximity × 3.0)
+ (flatness × 2.0)
+ (fertility × 2.0)
+ (trade_route_potential × 1.5)
+ (resource_proximity × 1.0)
- (elevation_extreme × 2.0)
- (hazard_proximity × 1.5)
```
Where:
- `water_proximity`: distance to nearest river or lake (closer = higher)
- `flatness`: inverse of local elevation variance (flatter = higher)
- `fertility`: derived from moisture + temperature (good growing conditions)
- `trade_route_potential`: centrality score — how many other high-habitability
cells are reachable without crossing mountains or deep water
- `resource_proximity`: distance to mineable mountains, fishable coast, timber forests
- `elevation_extreme`: penalty for very high or very low (swamp) elevation
- `hazard_proximity`: penalty for proximity to wilderness zones with high encounter rates
**Step 2 — Place Settlements by Tier**
Starting from the highest-scored cells, place settlements with minimum-distance
constraints (settlements can't be too close together — they compete for resources).
**Tier 1: Capital City (1)**
- Placed in the highest-scoring cell in the Eastern Industrial Belt macro-region or
at the intersection of the two highest-scoring macro-regions.
- This is Sanctum Fidelis (Act III). Its position shifts per seed but is always a
major, central, accessible city.
- Population: 1.5M2.5M (scaled for narrative, not simulated)
- Must be on or adjacent to a major river AND a rail line (rail is generated later
to connect to the capital, not the other way around).
**Tier 2: Major Cities (46)**
- Placed in the next highest-scoring cells, one per macro-region minimum.
- These include: Thornfield (Eastern Industrial), Fort Dustwall (Central Plains),
Heartstone (Western Mountains), plus 13 additional cities for economy/exploration.
- Population: 30K200K
- Must be on a river or coast.
**Tier 3: Towns (1525)**
- Mid-scoring cells. Regional hubs, market towns, garrison posts.
- Population: 2K30K
- Must be within 2 days' travel of a Tier 2 city OR on a major trade route.
- This tier includes Millhaven (Act I). Millhaven is always in the Eastern
Temperate Forest, always on a river, always at least 1 day from the nearest
Tier 2 city. It's small, rural, and accessible.
**Tier 4: Villages & Outposts (4080)**
- Lower-scoring cells. Farming communities, mining camps, border outposts, waystations.
- Population: 502K
- Minimum distance from Tier 3+ settlements, but otherwise distributed by habitability
score.
**Tier 5: Points of Interest (100200)**
- Ruins, caves, abandoned mines, hermit dwellings, Imperium-era structures, wild shrines.
- Placed in LOW habitability cells (the interesting stuff is in the places people don't
live). Mountain caves, deep forest, swamp islands, tundra ruins.
- Each PoI is tagged with: type (dungeon, ruin, landmark, resource node, secret),
level range, and loot table tier.
---
### Settlement Attributes — Generated Per Settlement
Each placed settlement receives procedurally generated attributes:
**Demographics:**
- Clade population ratio (weighted by macro-region affinity, with noise for variety).
A Central Grasslands town is 60% Bovid/Cervid ± 15%. An Eastern Industrial town
is more evenly mixed ± 10%. The Tangles skews toward hybrids and fringe populations.
- Hybrid population percentage (0.5%5% in most places, 10%30% in The Tangles
and progressive urban centers).
**Economy:**
- Primary industry: farming, mining, manufacturing, trade, military, fishing (derived
from terrain resources within the settlement's radius).
- Wealth level: poor, modest, comfortable, wealthy (derived from trade_route_potential
and resource_proximity).
- Market tier: determines what equipment is available for purchase. Tier 4 villages
have basic goods. Tier 1 capital has everything.
**Governance:**
- Government type: council, mayor, military commandant, clan elder, corporate, anarchic
(weighted by Clade demographics and development level).
- Covenant enforcement: strong, moderate, weak, absent (derived from macro-region +
government type + distance from capital).
**Culture:**
- Dominant cultural flavor: traditional Canid (hierarchical, pack-structured),
traditional Cervid (communal, cautious), industrial cosmopolitan (mixed, progressive),
frontier independent (libertarian, suspicious), hybrid underground (coded, communal).
- Festival calendar: each settlement has 13 local festivals tied to Clade traditions
and seasons. These are flavor events that provide bonuses, shopping opportunities,
and ambient worldbuilding.
**Architecture:**
- Size-dominant architecture: whose body the buildings are built for. A Bovid-majority
town has wide doors, reinforced furniture, low counters. A Mustelid quarter has narrow
corridors and ladder-access upper floors. Multi-Clade cities have adaptive zones.
- This affects gameplay: a Large PC in a Mustelid-scaled building has disadvantage
on DEX checks. A Small PC in an Ursid district can't reach standard counters
without accommodation.
**Scent Profile:**
- Each settlement has a generated ambient scent: industrial (coal, metal, chemical),
agricultural (grain, livestock, earth), maritime (salt, fish, tar), forest (pine,
decay, woodsmoke), urban dense (bodies, food, perfume, sewage).
- PCs with scent abilities experience this on arrival — atmospheric worldbuilding
delivered through a sense most games ignore.
---
---
## LAYER 4: INFRASTRUCTURE — ROADS, RAIL, TRADE
### Road Network
**Generation Method: Minimum Spanning Tree + Noise**
1. All Tier 13 settlements become nodes in a graph.
2. Edge weights = terrain traversal cost between settlements (mountains expensive,
plains cheap, rivers require bridge infrastructure).
3. Generate a Minimum Spanning Tree to ensure all settlements are connected.
4. Add 2040% additional edges (shortcuts, alternate routes) weighted toward
high-trade-potential connections.
5. Route each edge through the terrain using A* pathfinding (cheapest traversable path),
creating actual road paths that follow valleys, cross rivers at narrow points, and
wind through mountain passes.
**Road Types:**
- Footpath: connects Tier 45 locations. Narrow, unpaved. No wagon access.
- Dirt road: connects Tier 34 locations. Single-width, seasonal mud.
- Post road: connects Tier 23 locations. Maintained, way-stations every day's travel.
- Highway: connects Tier 12 locations. Paved (cobble or macadam), wide, patrolled.
### Rail Network
Rail technology exists in the Late Reconciliation Era. The rail network is sparser
than the road network — it represents major capital investment.
1. Capital (Tier 1) is the rail hub.
2. Rail lines extend to each Tier 2 city via the lowest-cost terrain route.
3. One additional rail line connects the easternmost port to the westernmost
Tier 2 city (the transcontinental line — essential for Act IV's journey).
4. Rail does NOT extend to Tier 3 or lower settlements. Getting off the rail
means switching to road, horse, or foot.
**Rail stations** generate at each rail-connected settlement. Stations are travel
hubs: shops, inns, information boards, and pickpocket encounters.
### Trade Routes
Trade routes overlay the road/rail network with economic flow:
1. Each settlement produces goods based on its economy (grain from agricultural,
ore from mining, manufactured goods from industrial, fish from coastal).
2. Each settlement demands goods it can't produce locally.
3. Trade routes are generated by matching supply to demand along the transport
network, weighted by distance and transport cost.
4. Active trade routes generate: merchant caravans (mobile shops, encounter
opportunities), bandit activity (proportional to route wealth), and economic
modifiers (settlements on busy routes are wealthier).
---
---
## LAYER 5: ENCOUNTER AND CONTENT DISTRIBUTION
### Overworld Encounters
The space between settlements is not empty. Encounters are distributed using a
**density map** layered over the terrain:
**Density Factors:**
- Distance from settlement: closer = safer (lower encounter rate), farther = wilder
- Terrain type: deep forest, mountain, and swamp have higher base encounter rates
- Road proximity: on-road encounters are social/economic (merchants, patrols, travelers);
off-road encounters are environmental/hostile
- Macro-region hostility level: frontier and poorly-governed regions have higher rates
**Encounter Types:**
| Type | Examples | Frequency |
|------|----------|-----------|
| Wildlife | Non-sentient predators, herd animals, dangerous fauna | Common (wilderness) |
| Traveler | Merchants, pilgrims, other adventurers, refugees | Common (roads) |
| Hostile | Bandits, Clade-nationalist paramilitaries, Maw agents (post Act I) | Moderate |
| Environmental | Weather events, terrain hazards, river crossings, cave-ins | Moderate |
| Social | Stranded NPC, roadside dispute, broken-down wagon, lost kit | Common (roads) |
| Scent Event | Unusual scent trail, predator territorial markers, fear-scent on the wind | Uncommon (flavor) |
| Rare Discovery | Hidden ruin entrance, Imperium artifact, wild Howl-stone, injured hybrid | Rare |
**Encounter Scaling:**
Encounters are level-scaled to the PC's current level ± 2. Wilderness encounters in
high-danger zones can exceed this by +3 (the world doesn't care what level you are —
wander into the deep tundra at level 3 and face consequences).
### Procedural Dungeons / Points of Interest
Tier 5 PoIs (the 100200 scattered locations) are generated using modular room templates:
**Dungeon Types:**
- Imperium Ruin: stone corridors, coliseum-adjacent architecture, old traps, undead
or feral non-sentient occupants. Loot: Imperium-era artifacts, historical documents.
- Abandoned Mine: tunnels, cave-ins, mineral deposits, possible Mustelid or Ursid
former inhabitants. Loot: ores, gems, mining equipment, occasionally alchemical
reagents.
- Cult Den: Clade-nationalist hideout, rawfang cult lair, or black-market lab.
Sentient hostiles. Loot: intelligence, contraband, pheromone compounds.
- Natural Cave: wildlife dens, geological features, underground rivers. Loot:
natural resources, rare herbs, fossils.
- Overgrown Settlement: abandoned village reclaimed by wilderness. Environmental
storytelling — why did they leave? Loot: domestic goods, letters, cultural artifacts.
**Modular Room Templates:**
Each dungeon type has 3050 pre-designed room templates (authored, not generated) that
are assembled procedurally:
1. Select dungeon type based on PoI's terrain and macro-region.
2. Determine dungeon size based on level range (small: 35 rooms, medium: 610,
large: 1120).
3. Select entry room template.
4. Connect rooms using a graph — linear for simple dungeons, branching for complex.
Dead-ends contain loot or lore. Branches reconnect for loop options.
5. Populate rooms from encounter tables appropriate to dungeon type and level.
6. Place loot using tier-weighted random tables.
7. Assign one room as "narrative room" — contains environmental storytelling (letters,
journals, scent-traces, bodies arranged to tell a story) that enriches worldbuilding
even without connecting to the main quest.
**Clade-Responsive Design:**
Dungeon architecture reflects who built it. Mustelid tunnels are tight (Large PCs
squeeze). Ursid ruins are vast (Small PCs feel exposed). Cervid-built spaces have
high ceilings and wide corridors. Bovid structures are reinforced, heavy, low. This
isn't decoration — it affects traversal mechanics and forces PCs to engage with the
body-diversity premise of the world.
---
---
## LAYER 6: NARRATIVE ANCHOR SYSTEM
### The Problem
The main quest (The Reckoning of Mouths) has fixed story beats that expect specific
locations: Millhaven, Thornfield, Fort Dustwall, The Tangles, Sanctum Fidelis,
Heartstone. But the world is procedurally generated. How do we guarantee the story
works while the map changes?
### The Solution: Narrative Anchors
**Narrative Anchors** are abstract requirements that the settlement placement system
must satisfy. They are NOT fixed coordinates — they are constraints.
| Anchor | Requirements | Assigned To |
|--------|-------------|-------------|
| MILLHAVEN | Tier 3 town. Eastern Temperate Forest. On a river. 12 day travel from nearest Tier 2. Rural, agricultural, multi-Clade but Canid-leaning. | Act I start |
| THORNFIELD | Tier 2 city. Eastern Industrial Belt. On a river or rail line. Industrial economy. Dense population. Mustelid-heavy workforce. | Act II (Name 1) |
| FORT_DUSTWALL | Tier 23 settlement. Central Grasslands, near border of a Clade-majority zone. Military. On a road, not necessarily rail. Bovid/Cervid region. | Act II (Name 2) |
| THE_TANGLES | Macro-region (not a single settlement). Subtropical Lowlands. Low Covenant enforcement. Contains 24 Tier 4 settlements + Thornback Hollow (Tier 4, hybrid community). | Act II (Name 3) |
| SANCTUM_FIDELIS | Tier 1 capital. Central-eastern continent. Major river + rail hub. Maximum multi-Clade diversity. Contains: Fang & Claw Hall, Scent Market district, Hybrid Quarter (The Splits). | Act III |
| HEARTSTONE | Tier 2 city. Western Mountains. High elevation. Ancient architecture. Not on rail (must be reached by road for final leg). Neutral ground. | Act V |
**Placement Priority:**
Narrative Anchors are placed FIRST, before general settlement distribution. The
algorithm:
1. Identify all terrain cells matching each Anchor's requirements.
2. Score matching cells by how well they satisfy requirements.
3. Place Anchors at highest-scoring cells, with minimum-distance constraints between
Anchors (they can't cluster — the story needs continental span).
4. Generate remaining settlements around the Anchors, treating Anchor settlements as
pre-placed nodes in the settlement graph.
**Internal Content:**
Each Anchor settlement has hand-authored internal content (quest-relevant NPCs, specific
buildings, story-critical locations) that generates inside the settlement regardless
of the procedural exterior. The slaughterhouse in Sanctum Fidelis exists every playthrough
— but its address in the city changes. The observatory above Heartstone exists every
playthrough — but which peak it sits on depends on the mountain generation.
Think of it as: **the rooms are authored, but the building's floor plan is generated.**
---
### Quest Path Generation
The main quest requires travel between Anchors. The path the PC takes is generated by
the road/rail network:
1. Act I → Act II: Millhaven to Thornfield (road + possible rail).
2. Act II (open order): Thornfield ↔ Fort Dustwall ↔ The Tangles. Three-hub travel.
Road and rail connections vary per seed. Some playthroughs, Fort Dustwall is a
short rail trip from Thornfield. Others, it's a 4-day overland trek. This variance
is a feature — different playthroughs feel different in pacing and encounter exposure.
3. Act III: Any Hub → Sanctum Fidelis. Rail is likely available for at least part of
this journey.
4. Act IV: Sanctum Fidelis → Heartstone. Cross-continent. This is always a long journey
because Heartstone is in the western mountains and rail doesn't reach it. The "Long
Road West" is long by design — the procedural system guarantees this by placing
Heartstone beyond rail terminus.
5. Act V: Already at Heartstone.
**Travel Events:**
The content the PC encounters between Anchors is procedurally populated from the
encounter system (Layer 5). Each journey segment generates: road encounters, off-road
discoveries, settlement stops (for resupply, side quests, rest), and terrain challenges
(river crossings, mountain passes, weather events).
---
---
## LAYER 7: FACTION TERRITORY
### Dynamic Faction Presence
Three factions (Inheritors, Thorn Council, Covenant Enforcers) have procedurally
generated territorial influence:
**Faction Influence Map:**
Each faction has a set of seed points (placed at appropriate settlements and PoIs)
that radiate influence outward, decaying with distance. Influence maps overlay the
world map, creating zones of control:
- **Covenant Enforcers:** Strongest near the capital, Tier 12 cities, and military
outposts. Decays toward frontier regions.
- **Inheritors:** Strongest in predator-Clade-majority zones, rural regions, border
territories. Anti-correlated with Covenant enforcement (strong where law is weak).
- **Thorn Council:** Strongest in prey-Clade-majority zones and progressive urban
centers (paradoxically — they recruit from the educated and frightened). Moderate
presence in The Tangles.
**Gameplay Effect:**
- In Enforcer zones: law is present, crimes are investigated, Covenant violations
are prosecuted. Hostile encounters are rarer. Authority can be leveraged.
- In Inheritor zones: predator-Clade NPCs are more aggressive, prey-Clade NPCs are
more fearful, black-market goods are available, Clade-nationalist propaganda is visible.
- In Thorn Council zones: prey-Clade NPCs are organized and suspicious of predators,
hybrid NPCs face extra scrutiny, separatist rhetoric is mainstream.
- In unclaimed zones (frontier, wilderness): no faction dominates. Encounters are
more random, law is self-made, and the PC's Clade identity matters more for
individual interactions.
**Dynamic Shift:**
Faction influence changes based on story progress. After Act II's Fort Dustwall events,
Inheritor influence expands in the central plains (emboldened by the incident). After
Act III's slaughterhouse raid, Enforcer presence tightens in the capital (crackdown).
After Act IV choices, influence maps shift to reflect political outcomes. This gives
the procedural world a sense of responding to the narrative.
---
---
## LAYER 8: WEATHER AND SEASONAL SYSTEMS
### Seasonal Cycle
The game spans approximately 34 months of in-world time (autumn through early winter).
Seasons affect:
- **Temperature:** northern regions grow colder, travel becomes harder, tundra becomes
impassable by late game. Southern regions remain mild. Clade-specific effects
(Polar Ursid advantage, lion-folk heat lethargy becomes irrelevant in cold).
- **Daylight:** northern regions lose daylight hours, affecting visibility and encounter
types (nocturnal predators more active). Southern regions maintain longer days.
- **Precipitation:** autumn rains swell rivers (crossing difficulty increases), mountain
passes accumulate snow (Act IV's westward journey gets harder as the story progresses —
built-in narrative pressure).
- **Shedding cycles:** relevant for thick-coated species. Narrative flavor, minor
mechanical effects (Stealth disadvantage from shed fur trails if not groomed).
- **Antler shed:** Cervid characters experience the 2-month shed window during the
game timeline. Mechanical impact per species rules.
### Weather Generation
Daily weather generated per region using Markov chains seeded by season and biome:
| Biome | Autumn Weather Probabilities |
|-------|------------------------------|
| Temperate Forest | Clear 30%, Overcast 30%, Rain 25%, Storm 10%, Fog 5% |
| Grassland | Clear 40%, Windy 25%, Overcast 20%, Rain 10%, Storm 5% |
| Mountain | Clear 20%, Overcast 20%, Rain 15%, Snow 25%, Storm 15%, Fog 5% |
| Subtropical | Clear 25%, Humid 25%, Rain 30%, Storm 15%, Fog 5% |
| Tundra | Clear 15%, Overcast 20%, Snow 35%, Blizzard 20%, Fog 10% |
Weather affects: visibility, travel speed, encounter rates, scent range (rain
suppresses scent, dry cold amplifies it), and combat conditions (mud, wind, snow).
---
---
## LAYER 9: SEED SYSTEM AND REPRODUCIBILITY
### World Seed
A single integer seed generates the entire world deterministically. Same seed = same
world, every time. This allows:
- Sharing seeds between players ("Try seed 47291 — the mountain pass in Act IV is brutal")
- Speedrun consistency (fixed seed category)
- Bug reproduction
- "Daily challenge" seeds
### Seed → Generation Pipeline
```
SEED
├─ Terrain Gen (elevation, moisture, temperature)
│ └─ Uses seed directly for noise generation
├─ Hydrology (rivers, lakes, coastline)
│ └─ Derived from terrain + seed offset for drainage sources
├─ Settlement Placement
│ └─ Narrative Anchors first (deterministic from terrain)
│ └─ General settlements (seed-based selection from scored candidates)
├─ Infrastructure (roads, rail, trade)
│ └─ Derived from settlement graph + terrain costs
├─ Encounter Distribution
│ └─ Seed-based density + level scaling
├─ Dungeon Generation
│ └─ Seed offset per PoI for room selection and population
├─ Faction Influence
│ └─ Derived from settlement demographics + seed-based variation
└─ Weather
└─ Seed-based Markov chains per region per day
```
### Performance Budget
World generation should complete in under 60 seconds on target hardware. Heaviest
operations: terrain generation (noise computation), erosion simulation (if included),
and road pathfinding (A* over large graph). All are parallelizable.
**Streaming:** The full continent does not need to be fully detailed at boot. Generate
at low resolution first (macro-regions, Tier 12 settlements, rail network), then
detail regions as the player approaches them (Tier 35 settlements, encounter
placement, dungeon generation). This amortizes the cost across play sessions.
---
---
## SUMMARY: WHAT CHANGES VS. WHAT STAYS
### Always the Same (Authored)
- Continental macro-biome layout (east/west/north/south character)
- Narrative Anchor requirements (Millhaven is always rural eastern forest, etc.)
- Main quest structure (5 acts, same story beats)
- Quest-critical NPC roster and their roles
- Internal content of Anchor settlements (quest buildings, NPCs, events)
- Clade-to-biome affinity rules
- Room templates for dungeons
### Always Different (Procedural)
- Exact coastline, mountain contours, river courses
- Specific placement of all settlements (including Anchors — they move within their
allowed macro-region)
- Road and rail network topology
- Distance and travel time between quest locations
- Overworld encounter content between Anchors
- Dungeon layouts (assembled from templates)
- Settlement demographics (within weighted ranges)
- Weather sequences
- Faction influence boundaries
- Trade route patterns and economic modifiers
- Points of Interest placement and content
### The Player Experience
First playthrough: "I traveled two days by rail from Thornfield to reach the capital,
crossing a river valley full of Cervid farmland."
Second playthrough: "The rail didn't connect Thornfield to the capital this time —
I had to ride overland through a mountain pass I'd never seen before, and got ambushed
by Inheritor scouts in a snowstorm."
Same story. Different world. That's the goal.
---
*Document Version 1.0 — Theriapolis Procedural World Generation Design*
*Compiled by ENI for LO*