Hexroll

November 2021 · 4 minute read

Visit pendicepaper.com/hexroll to get a sense of where we’re heading: a complete randomly generated sandbox to play in, no preparation required.

Hexmap

The generator runs every minute and creates a random sandbox in a single HTML page. It generates hex descriptions, villages, towns, cities, dungeons, factions, NPCs.. okay, you get the point. Stats and rules guidelines are currently tuned towards old-school B/X but it could be adjusted to work with most gaming systems out there.

The Quest

As a referee, I want:

Behind the Curtain

The generator itself is written in Python, and it is mostly a domain-specific YAML reader and runner.

The actual logic and content for creating the sandbox is in a set of YAML files containing entities, random tables and Jinja2 templates to create the text itself

Excerpt from github.com/rlofc/hexroll:

DungeonDebris:
   Description: !jinja >
     There’s also {{Debris1}} {{Debris1Location}} and some
     {{Debris2}} {{Debris2Location}}
    
   Debris1Location:
     - in the far corner
     - near the wall on the left
     ...
  
   Debris2Location:
     - next to it
     - spread all over the place
     ...
    
   Debris1:
     - an old, ripped backpack
     - a used flask of oil
     ...
    
   Debris2:
     - broken pieces of wood
     - torn pieces of clothing
     ...

Collections and data-injection

One of Hexroll’s abilities is to bind elements of the sandbox together by using collections and data-injection.

Collections allow the generator to store entities of various types in shuffled lists, where they can be retrieved from to populate other entities.

Data-injection allows entities to ‘inject’ attributes into other entities to create useful sandbox links.

Here’s a simple example, where we populate a tavern with some NPCs from a collection, injecting the tavern name as their favorite.

DistrictTavern:
  $extends: Tavern
  patrons:
    $popsome: 
      $collection: district_characters_for_tavern
      $min: 2
      $max: 5
      $inject:
        $values:
          FavoriteTavernName: !ref Name

What’s next

I have a long TODO list that I’m actively working on, with some help from my kids for the preliminary content.

The source files of the generator metadata are on GitHub. Willing contributors (wink wink) are invited to add variety to the existing sandbox content or propose model enhancements.

Another way to help Hexroll grow is by becoming a patron. I followed an advise from Reddit and opened a Patreon page for the project. This will help us fund a stronger server for ad-hoc generation and potentially get more quality content in.

TODO

** Generator
   [X] Generate the hex map graphics!
   [\] Add hyperlinks where needed.
   [ ] Add a players handout page
   [ ] Support more game editions/systems?
   [ ] Provide a "stitching" tool to create larger world maps?
   [ ] Integrate with other tools / map generators?
   [ ] Ad-hoc generation and parameterisation?
       [ ] Regions and hex count / climate
       [ ] Population density / number of settlements
       [ ] Add an option for pre-rolled encounters / random tables
   [ ] Permalinks with an online markdown editor?
   [ ] Allow regenerating based on seed value?
   [ ] Add 'save as markdown file'?
   [ ] Add 'generate PDF'?
 
** Model
   * Hex Map
      [ ] Add more hex types (lakes, jungle, swamps, sea)
   * Taverns & Inns
      [ ] Add food menus / services & prices
      [ ] Add staff NPCs
   * Dungeons
      [ ] Add traps!
      [ ] Improved foreshadowing based on monster classes
      [ ] Generate doors passphrases
      [ ] Additional dungeon types (old mines, ruins)
      [ ] Add organic caves graphics for caverns
      [ ] Add additional areas
      [ ] Adjust debris and decor based on dungeon type
      [ ] Adjust debris and decor based on area type
      [ ] Add dungeon levels?
   * Quests
      [ ] Add quest tiers (lower/higher level)
      [ ] Add more quest types (revenge, deliveries, etc.)
   * Realm
      [ ] Add additional structure, realm quests, etc.
      [ ] Add ruler-related NPCs (guards, sages, etc)
   * Factions
      [ ] Add faction membership rumors?
      [ ] Add inter-faction relations
   * NPCs
      [ ] Add competing parties
   * Breakglass
      [ ] Add visions and dreams?

** Content
   * NPCs
      [ ] Add variety to NPCs descriptions
   * Realm
      [ ] Add additional realm background stories
   * Hex Map
      [ ] Add more unique hex descriptions
      [ ] Add more dungeon entrances based on hex type
      [ ] Add more hex feature locations based on hex type
      [ ] Add additional landmarks and descriptions
   * Dungeons
      [ ] Add variety to dungeon debris and decor
      [ ] Add variety to foreshadowing based-on features
      [ ] Additional door features & descriptions
   * Quests
      [ ] Add variety to quest descriptions and rumors
   * Settlements
      [ ] Additional shop inventories and services offered
   * Taverns & Inns
      [ ] Add variety to tavern/inn names
   * Factions
      [ ] Add more faction types and purposes