Skip to content

v0.135.0 — Procedural maps: Towns and interiors

The fifth milestone of the procedural map generation program (M5): rooms dressed by what they are for, seven single-floor interiors, villages and towns whose roofs come off, camps, keeps and ruins, and chests that open. The program's documents are in docs/programs/mapgen/; this milestone's tasks, decisions and test script are in docs/programs/mapgen/m5-towns-and-interiors.md. Sites (a ruin or a camp placed in a forest) wait for map building's Library objects.

Rooms dressed by their purpose

  • [x] Room purposes are data: 44 of them (taproom, kitchen, shrine, barracks, throne room, command tent…), each saying what stands against the walls, in rows, in clusters and in the middle, and which lights it has. A tavern's taproom has a bar on the far wall with kegs behind it, tables with their benches and a hearth that lights the room; a dungeon shrine has its altar between two braziers.
  • [x] The dungeon and crypt dress every room by its purpose. Their maps change once, so the generator's version is 2; maps you committed don't move, and Edit in preview on an older dungeon says its recipe is older.
  • [x] Clutter only reveals or hides: a slider never moves a table.

Interiors

  • [x] Tavern or inn, house, shop, temple or shrine, manor (ground floor), warehouse and barracks: the footprint split into rooms by a purpose mix you can edit (add, remove, reorder: earlier purposes get bigger rooms), every room reachable, with doors, windows, floors by purpose, and Clutter, Light, Windows and Decay.

Villages, towns, camps, keeps and ruins

  • [x] Village: houses along the road, around a green or scattered, with an inn from six houses, gardens, fences, livestock pens, wells and carts.
  • [x] Town: 20 to 60 buildings in market, temple, slum and residential districts; a tavern, a temple, a manor; walls (none, palisade or stone) with gates where the roads leave; a market square with stalls and a fountain.
  • [x] Every building has its rooms under its roof. Roofs off shows them to the GM in the preview, and Show players roofs off shows them to players on a committed map.
  • [x] Roofs have their own map layer. Committing a village or town puts its roofs on a "Roofs" layer at the top of the map's layers: hide it to take every roof off for everyone, or fade it to see through them. Roofs off and Show players roofs off work as before.
  • [x] Step inside and the roof lifts. The token you play walks into a building and that building's roof comes off for you, so you see the room around you; every other roof stays on, and walls and fog of war still hide what your token can't see.
  • [x] Camp (bandit or military) with tents, campfires, a palisade and the command tent's locked chest; Keep with curtain walls, up to four towers, a gatehouse with a portcullis, a courtyard and the keep's ground floor; Ruins of a village, a keep or a dungeon, overgrown.
  • [x] Decay: below 60, rubble and ivy appear and nothing moves; from 60, walls open and roofs fall in.

Fixed at the release gate

  • [x] Doors read as doors, windows as windows. A door has a hinge and a handle, a window is a thin pane of blue glass, and a building's front door has a step outside and is labelled "Front door" for the GM. Door labels show in the preview too. This is the shared door and window art, so it changes them on every map, not only generated ones.
  • [x] Rooms beyond the purpose mix get the kind's extras (a tavern's guest rooms, storeroom, common room and stable) instead of repeating the mix, so a big tavern no longer has four kitchens.
  • [x] A token beside a generated door gets its door actions (Open, Lock, Force). The door is part of its wall, and the wall was taking them.
  • [x] Hiding the Objects layer hides everything a committed map put on it: lanterns, braziers and door labels too, not only walls, doors and chests.

Objects

  • [x] Chests and other interactive pieces are Objects once committed: they open like any Object, and a hidden one never reaches a player, not even as its position in the map's drawing.

Security

  • [x] Rolling on a roll table checks the campaign, like every other roll table route: only the campaign's members may roll, the table must be that campaign's, and a table linked from another campaign isn't rolled. Before, any signed-in user could roll another campaign's table by its id, and so read its entries; opening a single table had the same gap.
  • [x] Only an admin in Superuser Mode can change game systems. Creating, changing, copying, deleting, restoring and syncing game systems took no sign-in at all, and their traits (properties, conditions, bars, light and vision types, actions, damage types, currencies…) took any signed-in user. Both now need an admin in Superuser Mode; reading them is unchanged. In the Systems section, editing a system now needs Superuser Mode: without it the server refuses the change (the screens don't hide their edit controls yet).

For module authors: Module API 1.47.0

  • [x] GeneratedStructure.objects and .roofs, GeneratedMapDisplay.roofsOff, the snapshot's roofs, playerDisplay and roofLayerId (the map layer the roofs are on), and maps.setPlayerDisplay.

Under the hood

  • [x] packages/mapgen-core: the purpose engine (dressRoom), subdivision and buildInterior, the built-plan template harness, settlements (streets, parcels, footprints, roofs), decay; a list parameter kind.
  • [x] map-art-procedural 0.4.0 (furniture, props, roofs, floors: AI-generated placeholder art, replaced before general availability) and map-generator 0.4.0.