Idraluna Archives

The Great Antarctic Hexcrawl pt. 6 - Hexes for The Hex God

This is my own version of lore24, an admittedly over-ambitious attempt to procedurally generate a 128,000 43,000-hex crawl for my homebrewed far-future Antarctica, Antibor. Part 1, Part 2, Part 3, Part 4 and 4b, Part 5.

While chipping away at 'Gygaxian building blocks' in previous posts, I've been reading up on hexcrawls and drafting my own hexfill procedure. The truth is, aside being a player in a Hot Springs Island campaign I have precious little experience running, writing, or playing hexcrawls.

Types of Feature

Early on, I found it challenging to decide how to categorize different points of interest. After what feels like dozens of scrapped iterations, I've approximately stabilized around the following simple schema:

  1. Rare, complex sites that get pointcrawls, each occurring at a rough rate of 1 per 500 hexes:
    1. Dungeons
      1. Pointcrawl map of rooms, key listing monsters, treasure, entrances, and traps
    2. Cities
      1. Pointcrawl map of districts or points of interest
      2. Notable trading opportunities
      3. Notable factions and NPCs
      4. Taxes, lodging costs, annoying laws, odds of mugging, and other nuts-and-bolts things that might affect a resupply run or downtime
    3. Modules by others (see note at the end of this post)
    4. Other? The ability to generate random pointcrawl maps opens up a lot of possibilities. I like the idea of a few randomly selected hexes getting pointcrawls, maybe stuff like major faction bases
  2. Things that can be rendered with a single sentence or paragraph in the key:
    1. Monster lairs
      1. How many monsters
      2. Leader (if applicable)
      3. Subtype (if applicable, e.g. are the bandits pirates, deserters, etc.?)
      4. Treasure
      5. Flavor (OPTIONAL)
    2. Minor settlements like forts, temples, estates (neutral/lawful lairs)
      1. Ditto
    3. Weird (unique hexfill with hooks for interaction)
      1. Description
    4. Flavor (descriptive hexfill without hooks for interaction)
      1. Short description

As I'll expand on below, this breakdown is borrowed partially from Luke Gearing's procedure & roughly matches how my favorite hexcrawls do it.

Density

It would be impossible to render 43,000 hexes with the same detail as, say, Hot Springs Island (i.e. full page spreads with multiple points of interest per hex). In Pt. 5 I wrote a rambly justification for bumping hex size up from 6 to 10 mi. In short: if I can only write/generate a finite number of interesting hexes, it's better to make them big so the map isn't dominated by empty hexes.

That said, there's some utility to empty hexes. Antibor's interior is an enormous swathe of cold steppe, and I want it to have a 'Lawrence of Arabia / Russian novel / spaghetti western' sense of vastness. Players venturing out into it shouldn't be tripping over points of interest every hex.

Thus, I began with Luke Gearing's procedure (at least the first part of it) with minor adjustments:

On a die:

  1. Lair
  2. Flavor (unique hexfill text that doesn't contain an implied interaction; just stuff to look at or to weave into a random encounter)
  3. Weird (unique hexfill text with hooks for interaction)
  4. Minor settlement

5+. Nothing

I used different (virtual) dice to vary the density of features by biome: a d3 for xenoformed, a d6 for forest, chaparral, savannah, jungle and taiga, a d8 for desert, and a d10 for steppe and tundra.

hexfill <- function(biome){
  if (biome %in% c(0,14,15)){return(NA)}
  if (biome %in% c(16)){  # xenoformed
    die <- c('Lair', 'Flavor', 'Weird')
  }
  if (biome %in% c(2,4,5,7,12)){ # temperate
    die <- c('Lair', 'Settlement', 'Weird', 'Flavor', 'Empty', 'Empty')
  }
  if (biome %in% c(1,6)){ # jungle taiga
    die <- c('Lair', 'Settlement', 'Weird', 'Flavor', 'Empty', 'Empty')
  }
  if (biome %in% c(13)){ # desert
    die <- c('Lair', 'Settlement', 'Weird', 'Flavor', 'Empty', 'Empty', 'Empty', 'Empty')
  }
  if (biome %in% c(8, 10, 11)){ #tundra steppe
    die <- c('Lair', 'Settlement', 'Weird', 'Flavor', 'Empty', 'Empty', 'Empty', 'Empty', 'Empty', 'Empty')
  }

  return(sample(die, 1))
}

A test spin in R results in 19,000 empty hexes, 6,000 flavor hexes, 6,000 lairs, 5,000 minor settlements, and 6,000 weird hexes. It will be a lot to fill, but I think these are numbers I can work with.

Here's the Knorthern half of Antibor post-hexfill.

Lairs & Settlements

Exactly how to separate 'lair' and 'settlement' has vexed me for a while. Is a bandit camp a 'lair' because the inhabitants are likely to be hostile? Or is it a 'settlement' because there are sentient beings living there?

My initial 'simulationist' impulse leans toward the latter, but I suspect that the intent behind Gearing's elegant procedure is to balance hostile and non-hostile encounters as players traverse the landscape. Thus, bandits live in lairs, and soldiers live in settlements.

Settlements (d8)

  1. Fort
    1. Major fort
    2. Outpost
    3-4. Watchtower
  2. Icosidyadic temple 1-2. Lone anchorite 3-5. Monastery 6-7. Shrine 8-9. Temple 10. Cathedral
  3. Exultant's villa 1-2. Country estate 3. Hunting lodge 4. Pleasure palace
  4. Thaumaturge's manse
    1. Archimage's tower
    2. Wizard's manse
    3. Occult academy
    4. Witch's cottage

5+. Autochthonous village (Specific prompts will be assigned based on cultural region)

Style

I've been perusing all the hexcrawls I can get my hands on to develop a writing style for Antibor. So far, Carcosa by Geoffrey McKinney1, Luke Gearing's Pariah campaign (also his review of Carcosa), and several of the crowdsourced hexcrawls archived on Save vs Total Party Kill (especially Synthexia) have been my main touchstones. All are examples of parsimonious, disciplined writing (particularly the first two), and each exemplifies what is now the G.A.H refrain: better an interesting prompt than a boring result.

Weird

I'm won't waste ink overthinking the presentation of lairs and minor settlements. If "Village of 350 Yellow Men ruled by the Yellow Prince of Winds, a chaotic 9th-level Lord" was good enough for Geoffrey McKinney, it will do for me. However, it works because Carcosa is interspersed with weird and brilliant hexfills like:

A mysterious garden about half a mile in diameter is overgrown with the gaudiest and most gorgeous tropical blossoms. A close inspection will reveal that the flowers’ creepers very slowly move and writhe. If humans enter the garden for more than 5 minutes, they must make a saving throw vs. dragon breath. Those who fail become intoxicated by the sweet, thick scents of the blooms. Such unfortunates are then swiftly entwined by the resilient creepers, which pierce the skin and enter the orifices. Within a few minutes the victims are completely transformed into flowering creepers.

For Antibor to be remotely fun, I will need to pack it with hexes that are surprising, clever, funny, scary, and above all, interactive.

In my hexfill procedure, I introduced a distinction between 'weird' and 'flavor'. The latter convey setting and act as landmarks but don't invite interaction (though they could be woven in to a random encounter). 'Weird' hexes prompt some kind of investigation or interaction. They might have treasure, they might be red herrings, or they might be elaborate mini-adventures. I wouldn't bother with this distinction for a smaller map, but at scale it keeps me honest, ensuring that interesting hexes won't get lost in a sea of underdeveloped descriptions like 'radioactive craters' or 'luminous boulders'.

I don't expect to be able to write 5,000 equally unique & brilliant hexfills, but luckily I have shortcuts at my disposal. I can cheat and repeat a few; the chance of players encountering a duplicate among 43,000 hexes is miniscule. Furthermore, my janky Perchance clone allows me to insert random generation prompts into a description and turn it into (potentially) dozens of unique hexes. And finally, not all hexfills need to be award-winning experiments in avant-garde microfiction. Plenty of those in the exemplary hexcrawls I've read wouldn't elicit more than a 'wow, cool' if I encountered them as a player.

Even so, at the end of the day I have to draw the rest of the owl -- I'm aiming for a list of at least 2000 unique 'weird' prompts. Creative writing isn't my strong suit, but like with my attempts at illustrating Archons & Armigers, I'm trying to enjoy the process for what it is & accept that it's a learning experience.

Etc.

Hidden Hex Features

I may choose to run the hexfill algorithm a second time to generate secondary, hidden features (likely with either a flat likelihood multiplier -- say, 1-in-10, or with adjusted hexfill 'dice' by biome).

Data Structure

Right now, my hexes are stored as a QGIS .gpkg file. At some point, it will be easier to shunt whatever data isn't map-critical onto a separate csv linked by hex ID number (this will be what I feed into LaTeX to make the final printable key file).

Right now my vague metadata plan looks like is as follows. Italicized entries are only to appear in the key (i.e. not needed for mapping)

Connections

One of the markers of a good hexcrawl is the presence of hexes that refer to NPCs, items, events, or situations in other hexes. I'm still working out how to implement this at scale, but rest assured -- it's in the works...

Modules

I'm planning on hand-placing a few modules that feel like they'd fit reasonably well into Antibor. Some under consideration include Deep Carbon Observatory by Patrick Stuart and Scrap Princess, XQ1: The Castle That Fell from The Sky by Steve Robertson, Lair of The Lamb by Arnold K, Holy Mountain Shaker by Luka Rejec, Expedition to the Barrier Peaks by Gary Gygax, Dyson's Delve by Dyson Logos, and Aberrant Reflections by directsun.

These obviously wouldn't be reproduced in whole or part in the key except as a note indicating the module to reference and perhaps some guidelines on system/setting conversion.


  1. Content warning: Supplement V: Carcosa contains descriptions of magic rituals involving rape, cannibalism, and probably other stuff (couldn't bring myself to read it all). I can appreciate it in a detached way as a work of extremely transgressive cosmic horror, and (in the context of GAH) do my best to separate it from the game design aspects, but it is undeniably upsetting. I can't deny how inspiring Carcosa has been, but I'd never pitch it to my IRL group without major revision or extreme levels of trust.

#DIY #antibor #lore24