Builder's Manual · Chapter 4

Locations and the Map

A city is not a flat list of places. It is a three-tier hierarchy — city at the top, districts in the middle, points of interest at the bottom — connected by parent references that form a tree. The location files in this project are the spatial scaffold the AI uses to answer "where are you?" and "whose territory is this?" every single scene.

The Three-Tier Hierarchy

The category enum defines each location's layer:

  • City (category: "city"): The root. Exactly one location — the root city — sits at this level. It has no parent. Everything else descends from it.
  • District (category: "district"): Neighborhoods and regions — the downtown core, the historic quarter, the docks, the university district, the outskirts. Each district has parent pointing at the root city.
  • POI (category: "poi"): Specific venues, havens, and gathering places — a nightclub, a university hall, a funeral home, an avant-garde theatre. Each POI has parent pointing at its district.

This hierarchy matters because the AI uses it for spatial reasoning. If a character's location is a nightclub, the AI can walk up the chain (nightclub → riverside district → the city) to determine faction territory, SI presence, and hunting difficulty at every level.

Key Location Fields

Faction Control

faction uses an enum: Camarilla Domain, Anarch Territory, Contested Grounds, Neutral Ground, Sabbat Territory, Second Inquisition Cenacle, Lupine Territory. This tells the AI who rules this turf. Feed in the wrong faction's territory and you have a Fifth Tradition problem. The AI checks this field when a player describes where they are hunting.

POI Type

poiType is free-form text for Kindred-specific classification: Elysium, Haven, Gathering Place, Rival Domain, Hunting Ground, Chantry, Necropolis. This is how the AI knows that the court Elysium enforces no-violence rules while the shadow-court nightclub merely expects you to afford the consequences.

SI Presence

siPresence uses Low, Moderate, High, or Critical. This is the Second Inquisition threat level. A Critical zone means the AI should be rolling for surveillance, hunter patrols, and compromised havens. The Technology Ban carries more weight in High and Critical zones.

Hunting Difficulty

huntingDifficulty is rated 1–5, matching V5's hunting rules. It reflects surveillance density, population availability, and social cohesion. The AI uses it to set difficulties for feeding rolls. A downtown core at 5 is the hardest; the outskirts at 2 are easier but come with Anarch politics.

Threats

threats is a free-form array of strings: "SI surveillance", "Lupine patrols", "Nosferatu informants", "Lasombra shadow traps". The AI draws on these for complications during scenes.

Atmosphere

atmosphere is a prose field describing the sensory and emotional character of the location. Good atmosphere writing gives the AI concrete details: what it smells like, what the light does, who watches from the corners.

How Locations Appear on Maps

Locations with the location designation can have maps. The platform renders them with a background image, a grid (optional), and placed elements — pins for points of interest, tokens for characters, areas for territories. A district's map can show its child POIs as pins. A city map can show districts as areas.

When you add a new POI, place a pin on its parent district's map so the spatial relationship is visible. When a coterie claims territory, draw an area on the relevant district map and link it to the coterie's location.

The Parent Chain Convention

Every location except the root city itself must have a parent. A POI with no parent floats in space — the AI cannot determine its faction, its SI presence, or its place in the city's power structure. Always populate parent.

For a new district: set category: "district", parent to the root city's slug, faction to the controlling sect, and add huntingDifficulty and siPresence. Then add POIs inside it.

For a new POI: set category: "poi", parent to the district slug, poiType to its Kindred function, and faction to match its district (or override if it is contested). Write a strong atmosphere string.

What Not to Do

  • Don't create a second city-category location. The three-tier system has one root.
  • Don't leave parent empty on a district or POI. The AI loses spatial context.
  • Don't set faction to a value that doesn't match the chronicle's political geography. If the Anarchs hold a district in the lore, don't mark its POIs as Camarilla Domain.
  • Don't skip huntingDifficulty. A location without it makes feeding scenes mechanically flat.
Manual updated Sep 8, 2026.