Sketch 1 - Map Driven Narrative


Middle Earth map

One of my favorite parts of fantasy fiction novels is the maps on the inside cover. The maps lend the storyworld an undeniable realism and character, but they also shape the events, or plots of the novel itself. Frodo starts off living in the Shire, attempts to cross the Misty Mountains, pass through the Mines of Moria, spend some time in Lothlórien before setting off for Mordor. Some books, like Norton Juster’s The Phantom Toolbooth add a layer of awareness on top of this, imbuing the fantasy locations with character becoming of their physical nature in more ways than one - the Doldrums, a set of sleepy foothills is where Milo, the protagonist, spends time distracted in a daze before getting on with his mission.

the doldrums

So if maps can reflect the events, or plot of a narrative as well as color its storyworld, perhaps it would be a useful creative device to use a map to perform the reverse process - to generate a plot procedurally.


In this sketch I define a basic set of rules for creating maps and then procedurally generating plot skeletons from it, using the primary formalism of “plot == set of chronological events.” The map metaphor additionally allows for some embellishment and the addition of supplementary events through its two dimensional spatial properties. In addition, although the most intuitive way to use the tool is to create linear maps and plots, there is no reason why the maps must be linear and could in fact serve as a useful templating tool for an interactive or multithreaded story structure.

Here is the basic outline: events are represented by locations on a map, like a town, city, mountain range, etc. Roads connect these locations, and the character of these roads serve as additional detailing or context for these events. Additionally, one location should be marked as START, which separately maps to an initial setting or character motivation.

Map Element Story Event
Road Transition to Next Event
Location Story Event, or Starting Motivation
Road Changes to Horizontal character seeks out <next event>
<Event> is Approached From Horizontal character achieves <event> through effort
Length of Road Proportional to the Intensity of <next event>

You can view the spreadsheet containing the full ruleset here. The specific implementation of what each location represents, or what intensity should map to is inspired primarily by my own aesthetic sense of what different classic fantasy map elements might represent in a story set in contemporary life. After all, who doesn’t want to relate mundane life struggles through an imaginary quest set in a fantastic land?

Here’s an example map and output. The ruleset that I made can be modeled with digital tiles (eg, in a spreadsheet) but one benefit of using representation of physical space is that I can represent it with physical objects which is a bit more satisfying to look at!


Map Element Category Story Event
Pasture START character seeking escape
Town EVENT meets a new friend
Horizontal Road TRANSITION (character was seeking social experience)
Road Length (3) INTENSITY (the new friend is from a strange place , but the same age
Swamp EVENT the person betrays them
Vertical Road TRANSITION unexpectedly
Road Length (1) INTENSITY (they steal some material goods)
River EVENT our character then achieves self understanding
Vertical Road TRANSITION (transition is undefined for River)
Road Length (2) INTENSITY (they realize the consequence of their escape-seeking)


I’m generally happy with this story-generation system. While putting examples together it was easy to focus purely on the map-building task, and somewhat exciting to see what the system might produce. I could imagine streamlining it to make it automated/interactive relatively easily. I also like how the events are generally vague enough that additional detail could be fleshed out by anyone using the system - I definitely imagine the system being used as a plot-generation inspiration tool for people looking for story ideas.

I wish that there was some way to approach this system, or similar systems, without simply requiring a large pool of predefined story components. One idea I considered was mining public data, such as Reddit or NYT for story components, which definitely could have been an interesting direction to go in, although in the end I decided it might be worth pursuing as a future iteration or variation on the project.


Sign up for the mailing list