Regions

regions

Regions are the geographic map units - the named zones that appear as cells on the player's interactive map. A realm contains all regions; locations are the specific points of interest inside a region.

In the editor

"Geographical regions of the world"

Editor location
Files → World → Regions
Editor type
Edit in Studio + View JSON
Size limits
  • regions.*.basicInfo — 4,000
  • regions.*.hiddenInfo — 4,000
  • regions (entire section) — 500,000

Schema

json
{
  "regions": {
    "<key>": {
      "name": "string",
      "basicInfo": "string",
      "x": "number",
      "y": "number",
      "realm": "string",
      "factions": [
        "string"
      ],
      "hiddenInfo": "string",
      "initialKnown": "boolean",
      "npcLevelRange": {
        "min": "number",
        "max": "number"
      },
      "images": {
        "map": {
          "crop": {
            "focus": "...",
            "zoom": "..."
          },
          "imageUrl": "string"
        }
      }
    }
  }
}

Example

json
{
  "regions": {
    "The Heartland": {
      "name": "The Heartland",
      "basicInfo": "The central heartland of the realm — a patchwork of managed farmland, well-maintained roads, and market towns spaced a day's travel apart. The terrain is flat to gently rolling with no significant natural obstacles; what defences exist are man-made. Climate is temperate with reliable summer harvests and mild winters, making this the most economically productive region in the realm. The ruling administration maintains visible presence here: tax collectors, licensed guild representatives, and city watch detachments at major crossroads. Beneath the administered surface the region is contested: three major trade families have unresolved disputes over road tolls, and the intelligence apparatus has more active operations here than its published mandate suggests.",
      "x": 0,
      "y": 4,
      "realm": "The Compact",
      "factions": ["Ruling Council", "Mage Academy", "Rangers", "Merchant Guild"],
      "initialKnown": true,
      "npcLevelRange": { "min": 1, "max": 25 }
    }
  }
}

Note: Each region value must be a plain object.

Fields

name

Display name of the region, shown on its map cell. Required, and the outer key must match it exactly: Voyage rejects a world whose key and name differ.

Note (runtime control via triggers/scripts): triggers move the party to a region with the party-region effect and reveal or hide one with known-entity, and conditions can gate on the party's current party-region. Moving via party-location already cascades the region, so you rarely set party-region directly.

npcLevelRange

Optional level band, { min, max }, for NPCs in this region that have no explicit level: such an NPC is rolled near the party's level, then clamped into this band. It applies when the NPC's location has no band of its own, and an NPC with an authored level ignores it. Both values must be positive whole numbers; Voyage rejects anything else. The pair shapes the difficulty curve: a starter zone might use { min: 1, max: 10 }, a contested mid-tier zone { min: 15, max: 45 }, an endgame frontier { min: 60, max: 100 }.

Note: npcLevelRange is also accepted on individual locations (same { min, max } shape), where it overrides the region's band for that location. Use this for outlier locations -- a high-tier dungeon inside a low-tier region, or a starter-friendly hub inside a high-tier region. See Locations for the location-level field.

hiddenInfo

Secrets about the region that players do not read directly. The engine reads them, and they shape the story, quests, newly generated locations, encounters and NPCs; players uncover them gradually as they explore. Omitting it or leaving "" is fine.

realm

Optional key of the realm this region belongs to; a key that names no realm raises a warning. A single-realm world can leave it out. Players can only reach locations in regions whose realm is known, or that have no realm.

factions

Keys of factions with a broad, region-wide presence (patrols, political control, cultural influence); a key that names no faction raises a warning. For site-specific faction presence use locations.*.factions instead.

images.map.imageUrl

Optional string. URL of a map image shown in the region view. Region images render as the region's square map cell, minimum 600×600; other ratios get cropped to the square. In the editor you can upload your own image or generate one from a prompt; both set this URL. Without one, the engine generates a map during play and saves it back, and an existing map is never regenerated. Whenever images.map is present, its crop is required.

images.map.crop.focus.x

Positions the visible window over the source image along the horizontal axis, as a percentage: 0 holds the left edge, 50 centres it, 100 holds the right edge. Defaults to 50. Out-of-range values are clamped. Saved by the crop control rather than typed by hand.

images.map.crop.focus.y

Positions the visible window over the source image along the vertical axis, as a percentage: 0 holds the top edge, 50 centres it, 100 holds the bottom edge. Defaults to 50. Out-of-range values are clamped. Saved by the crop control rather than typed by hand.

images.map.crop.zoom

Scales the image inside its frame, as a percentage of the unzoomed fit: 100 fills the frame with no magnification, 150 shows it at one and a half times, cropping to the area picked by the focus fields. Ranges from 100 to 300, default 100. Out-of-range values are clamped. Saved by the crop control rather than typed by hand.

basicInfo

Player-facing description of the region; the narrator reads it during play.

x

Integer horizontal map-grid cell of the region; each region occupies one cell. Must be a finite number. The Builder's Map view sets it by dragging.

y

Integer vertical map-grid cell of the region; positive y is north. Must be a finite number. The Builder's Map view sets it by dragging.

initialKnown

Whether players know the region from the start. Set it to true for a region they should know from the start; a region without it starts unknown, and the @ picker offers a region only once it is known.

Map coordinate system

You can plan out the shape of your realm and arrange the regions in whatever order you want.

Region and location coordinates use completely different systems.

Region x/y (grid cell position)

  • Each integer unit represents one full region cell (regionSize=100 units wide)
  • Adjacent regions should differ by exactly 1 in x or y (e.g., (0,1) and (1,1) are side-by-side)
  • A gap of 2+ between coordinates = empty random-terrain cells between regions
  • DO NOT use large values like 95, 220, 555 — these place regions thousands of cells apart, making the map unnavigable
  • x increases eastward, y increases northward: north is +y, south is -y, east is +x, west is -x (positive y renders upward on the map)

Example 11-region grid layout:

        x=0           x=1           x=2           x=3           x=4
y=2  [safe NW]    [mid NE]      [random]      [random]      [random]
y=1  [safe W]     [mid W]       [mid C]       [frontier E]  [frontier FE]
y=0  [coastal S]  [random]      [danger C]    [danger E]    [endgame]

Each region's playable area is its ±50 local grid. The map editor shows all regions on a global grid for editing. Players navigate between regions via in-game travel.

Location x/y (local offset)

Location coordinates are a local offset from the parent region's center, not global.

  • Range: ±50 (since regionSize=100 → each region spans 50 units in each direction from center)
  • A location at (0,0) appears at the region center; (-23,25) is 23 units west, 25 units north
  • The location editor shows e.g. x=-23, y=25, and the pin appears correctly inside the region box

Realm vs region

Realm ≠ geographic zone. A realm is the top-level container — roughly equivalent to a world, country, or plane of existence. Most scenarios should have exactly one realm containing all regions. Regions are the actual geographic map units visible on the interactive player map. Do NOT split a single world into multiple realms as if they were continents or zones — use regions for that.

Cross-region travel

When players travel past a region boundary, coordinates wrap into the adjacent region. With locationSettings.regionSize: 100:

From location (95, 50) in region (2, 2)
Travel +10 in x direction
→ Arrive at (5, 50) in region (3, 2)

The regionSize setting in locationSettings determines the float coordinate space within each region (default 100).

Authoring tips

What belongs in region basicInfo

A region describes a geographic area — the physical terrain, climate, landmarks, and who lives there. It does not describe a nation, political entity, or cultural tradition. Those belong in worldLore.

basicInfo should describe:

  • Terrain type (plains, mountains, coast, forest, desert, urban)
  • Climate and weather (temperature, rainfall, seasonal variation)
  • Physical landmarks (rivers, peaks, coasts, notable formations)
  • Who inhabits it (sparse vs dense, what kind of settlement)
  • Local flavour (what makes this patch of land distinct to look at)

basicInfo should NOT describe:

  • Full national history, dynastic succession, or political lore — that belongs in worldLore
  • Cultural traditions, religious practices, or economic systems in depth
  • School reputations, sports results, or institutional standing

A brief note on current political or military situation is appropriate — who controls this land and whether that control is contested helps the AI understand the region's mood and NPC loyalties. Keep it to one sentence; the details belong in worldLore.

basicInfo template (3-aspect pattern)

One paragraph covering three aspects:

  1. Geography — terrain, landmarks, natural features
  2. Climate / atmosphere — weather patterns, sensory details, mood
  3. Inhabitant hints — who or what lives here, without full faction details

Pattern: "[Terrain description]. [Climate and atmospheric details]. [Brief mention of inhabitants or dangers]."

Region scope

Regions are large geographic areas, typically containing 3-8 locations. Think a forest (not a single grove), a mountain range (not a single peak), a coastal stretch (not a single beach), a district or quarter (not a single building).

One region per geographic zone, not per country

A large nation with 10+ locations should be split into geographic sub-regions (northern highlands, southern plains, capital valley, coastal zone). Put the nation's political and cultural identity in worldLore under that nation's entry. The region just describes what the land looks like and who lives on it.

Example: Instead of "The Kingdom of Varn: an ancient monarchy with a proud military tradition.", write "A high granite mountain range forming the kingdom's northern border. Permanent snowfields at elevation, forested mid-slopes, and glacial valleys. Cold and dry at altitude. Two passes are the only overland routes through."

Geographic layout tip

Adjacent regions connect for travel, so arrange them to hint at geography — e.g. safe starting regions on the west, dangerous frontier regions on the east, coastal regions in the south. This makes the map feel coherent without requiring any additional config.