As I wrote earlier, I’m thinking about starting up a campaign.
I decided to build a campaign world, as it is something I can do all by my lonesome; Reading and programming are my other solitary hobbies.
So I assembled my initial tools:
- An Echo, Resounding
- A Random Map
An Echo, Resounding
I’ve said it before, but I love the concept of the Bloodstone adventure series. Adventure and domain management create different layers. There is the fast burn of an adventure but the slow burn as the seasons roll on.
Sine Nomine’s An Echo, Resounding is a resource for building domains in tension. There are rules for maintaining domains, handling mass combat, and heroic participation. While it is written for Labyrinth Lord, it appears to be easy enough to port to 5E 📖 .
I re-read a few bits, then grabbed a random map.
I found a good hex generator over at Isomage’s House. After a few clicks, I settled on something like the above map.
I liked the map, but I wanted something I could continue to tinker with.
I am not an Adobe person, preferring text based representations. I remembered Alex Schroeder’s TextMapper (available on Github) from a blog post I can no longer cite.
The gist of TextMapper is you can write your maps in plain text. Then generate an SVG 📖 image from the text. Specify some attributes (or use the awesome defaults), then give the grid coordinates.
grass attributes fill="green" sea attributes fill="blue" 0101 grass 0102 sea 0201 grass 0202 sea
TextMapper comes with a random generator, but I had fallen in love another map.
I set about translating the image into a text file. I used Google Sheets to record the entries; A few hours of transcription and I was done.
I threw the table into a plain text file. Then translated the information into Ruby arrays (with a few regular expressions).
From there I began augmenting the text version of the map. I…
- added towns, cities, rivers, and roads.
- tweaked the colors.
- placed ruins, lairs, and resources.
When I wanted a new version of the map, I ran the following shell command:
$ perl ~/bin/text-mapper.pl map="$(ruby ./campaign2015/mapping.rb)" | tail -n +3 > ./campaign2015/map.svg ; open ./campaign2015/map.svg -a Firefox
Why All the Work?
All of this was a lot of work. I could’ve drawn the map by hand. Which I may still do. But the purpose of this map is not to generate an artifact.
The purpose of this map is to convey the current state of the game. And to handle updates to that state as game play progresses.
In pushing things to text, I’m able to work in a domain that I am very comfortable. I can…
- Generate numerous contextual maps (GM only, Players, Ruins only)
- Version changes
- Begin modeling the information to grow a campaign-centric application
- Consider how I might drill down into a smaller scale
- Generate a map from a simple script