Context-aware Random Tables

The concept behind context-aware random tables is simple; the results of rolls on such a table affects future rolls on the same table. For example, let's say we have a random table for weather. It makes sense for today's weather to affect tomorrow's weather, so the weather doesn't fluctuate too much. This is simple to achieve - let me show you how.

How to create a context-aware random table

In its simplest form, all you have to do to make a random table context-aware is add a modifier column to it. Let's look at our weather example again. Say you have a table which looks like this:

Traditional random weather table

2d6 Weather
2 Thunder/snowstorm
3 Heavy rain/snow
4 Rain/snow
5 Light rain/snow
6-7 Overcast
8 Cloudy
9 Scattered clouds
10-12 Clear skies

There is nothing wrong with this random table, but it does run the risk of generating weather that changes back and forth more than one would wish. So, to reduce the risk of that happening, we simply add a modifier column, and add that modifier to subsequent rolls.

Context-aware random weather table

2d6 Weather Mod
2 Thunder/snowstorm -2
3 Heavy rain/snow -2
4 Rain/snow -1
5 Light rain/snow -1
6-7 Overcast
8 Cloudy +1
9 Scattered clouds +2
10-12 Clear skies +2

On the very first roll - day one (or "Watch one" if you roll multiple times per day) - you ignore the "Mod" column. So let's roll for that first day - we got a 10, that's "clear skies". That means on day two, we add the modifier ("mod") from that row, which is +2, to the roll. That roll ended up being 6. Adding +2 to that, we get 8, which is "cloudy".

Because we got a modifer of +2 on the second roll, it wasn't possible to get a result lower than "rain/snow", which makes sense since we had "clear skies" on the first one.

A fix for the context-aware table to make sense

Since we can now get modifiers ranging from -2 to +2, it is now possible to get results below 2 and above 12 - let's fix the first and last rows on the first column to reflect this.

2d6 Weather Mod
2 or less Thunder/snowstorm -2
3 Heavy rain/snow -2
4 Rain/snow -1
5 Light rain/snow -1
6-7 Overcast
8 Cloudy +1
9 Scattered clouds +2
10 or more Clear skies +2

Avoiding stagnation - we're not quite done yet

The table above still has a problem. The weather might seem to get "stuck" at one end of the table for extended periods of time. There can only be so much rain before it gets old (and excessively wet). We can make two alterations which help adress this issue.

  1. Alteration 1: The "reset" roll

    On a 2d6, 7 is the most common result. We can use this and say that "any time we roll a natural 7, we ignore the modifiers and let the result be overcast". This simulates a break in the weather; a new front moves in.

  2. Alteration 2: Reduce modifiers at the extremes

    If we move the modifiers at the top and bottom rows of the table closer to 0 (from -2 to -1, and from +2 to +1), the weather is less likely to get stuck there.

Final version of the weather table

2d6 Weather Mod
2 or less Thunder/snowstorm -1
3 Heavy rain/snow -2
4 Rain/snow -1
5 Light rain/snow -1
6-7 Overcast
8 Cloudy +1
9 Scattered clouds +2
10 or more Clear skies +1

Note: An unmodified roll of 7 always ignores the modifiers, and "resets" the weather back to overcast.

Other examples of context-aware random tables

Context-aware random tables can be used any time you want results which don't change too much between rolls.

Hex flowers - an alternative solution

The Hex Flower by the Goblin's Henchman blog is a different, more complex approach to solving the same problem that might also be of interest to you.