Superstition generator

17th century painting of Stockholm, depicting an ominous ‘sun dog’ event in 1535.

This simple generator is a slightly tweaked version of the ‘Superstition Generator’ from Johnn Four’s Role Playing Tips newsletter #356. As this is a direct conversion, there are no options to select from. Just click the button to get the latest rumor from the superstition front.



It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.

Friends & Relatives

Raphael: “Self-portrait with a friend” (1519)

Characters need friends and contacts both to ask help from and to rescue from whatever predicament the game master has whipped up this time.

This generator creates one line descriptions of family, relatives, neighbors and acquaintances for just such occasions.


The button calls for the {lib:friend#detail} version of the generator, which adds to the relation either a habit, personality, complication or goal (or a combination of those) to make th person feel more memorable.


It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.

Random Meal

The well-stocked kitchen, with Jesus in the house of Martha and Mary in the background.
Joachim Beuckelaer: “The well-stocked kitchen” (1566)

To complement the Random Drinks table, here is something to go with the brew.

The summary subtable lists the recipe and the main ingredients (when appropriate):


The detail subtable contains information also about the finishing and/or the general appearance of the meal:


Bon Appétit!


It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.

Random Drinks

A monk tasting wine from a barrel whilst filling a jug.
From “Li Livres dou Santé” by Aldobrandino of Siena (late 13th century)

This table produces beverages that are compatible with most worlds, from medieval to futuristic time periods.

Calling the {lib:drink#summary} subtable produces just the name of the drink:


Calling {lib:drink#detail} produces more details of the scent, taste or structure of the drink:


Tavern patrons should be warned, though: the range is wide, from foul concoctions to sweetest nectars.


It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.

One-Line Location Description

Medieval Town by Water
Karl Eduard Biermann: “Cathedral Towering over a Town” (c. 1830)

This generator is quite a simple affair. It produces one-line descriptions of locations in various terrains – with variations and complications.


The result string can have four different forms:

  • just the location name
  • a descriptive adjective + the location name
  • location name with a complication
  • a descriptive adjective + the location name + a complication

Even this limited amount of variation can create an impression of a wide range of results – which is nice, as the generator is still a work in progress and could feature a much wider selection of different types of locations.

I plan to return to expand this table from time to time, as this is a fun table to work with in small increments.

Random Fuzzy Numbers

A ring with 3 gems.
Photo credit: Max Pixel.

This generator has its origins in the jewelry table. I wanted to have the generated jewelry to optionally have a number of gems set in them. But it felt boring to have just a simple numeric value like 3 or 15 gems. I put together this help table to produce results like a septet, dozens of or even four-score and ten gems adorning the jewelry.


More Specific Ranges

A {lib:number#common} call produces results from 1 to 99, while with {lib:number#rare} the result can vary between 100 and several millions. Please note that the results are fuzzy and not a full range of numbers is included for results above 30. The table attempts to imitate how humans express numbers, and can create results like close to a hundred or millions and millions.

You can set the desired range in more exact manner by calling subtables from {lib:number#one digit} to {lib:number#seven digits}.

Special Cases

I of course got carried away and added also some special subtables:

  • {lib:number#negative}
  • {lib:number#zero}
  • {lib:number#small number}
  • {lib:number#fraction}
  • {lib:number#one}
  • {lib:number#few}
  • {lib:number#many}
  • {lib:number#very many}
  • {lib:number#big number}
  • {lib:number#countless}
  • {lib:number#uncountable}
  • {lib:number#infinite}

These produce natural language variations in the indicated range. Especially the big number subtable is a testament to obsessiveness, as it includes both US and European variations of big numbers up to quingentilliard (10E3003). That will be one expensive piece of jewelry…


It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.

Jewelry Generator

antique ring
Photo credit: Max Pixel.

Jewelry is a classic subject for random generators, so this was one of my first slightly more complicated generators.


Level of Detail

This generator is quite a basic affair, and maybe the most interesting aspect is how you can control the level of generated detail based on which subtable you call.

If you call the generator without specifying a subtable, the output will be randomly either a summary or a more detailed description. But if you call {lib:jewelry#summary}, the output will be something like this:

  • bracelet
  • hand chain
  • hair stick (for holding a hair bun)
  • hairpin
  • chatelaine (decorative waist chains)

Note that an explanation in parenthesis will still be included for pieces of jewellery that may not belong to everyone’s vocabulary. While this can be a useful feature, it also breaks the flow of the text. I plan to revisit that when setting variables hopefully becomes easier at some point. Then the explanation could be stored in a footnote variable, which could be displayed when requested.

When you call {lib:jewelry#detail}, the generator will produce longer output:

  • pin with 6 large, rectangle, peruzzi-cut azurites fastened with bezel setting (metal band wrapped around the gem)
  • hairpin with 8 tiny rubys fastened with flush setting (the gem rests in a hole, blending with the surface)
  • jewellery chain with eight small, fiery, princess-shaped peruzzi-cut opals fastened with prong setting (metal claws holding the gem)

Now the explanations unfortunately can make the output downright hard to take in, so this definitely should be fixed.

Other Options

Calling {lib:jewelry#common} generates jewellery worn on the more usual locations of head, neck, chest, arm and hand. A {lib:jewelry#rare} produces more obscure varieties of jewelry that are worn on hair, waist, legs and feet.

The {lib:jewelry#modern} subtable offers a slight chance of getting also fake or pirated jewelry, as well as luxury brands and even haute couture items. Similarly {lib:jewelry#fantasy} can generate also cursed items or jewelry created by non-human races, or even something stranger:

  • sentient link bracelet (linked ornaments)
  • dwarf-made brooch (jewelry attached to garment)
  • cursed bangles with a quartet of large azurites fastened with invisible setting (fastened without visible prongs or bars)

It is not possible to specify subtables for generators embedded in the blog, but the source data for this generator is available in the GitHub repository. You can copy and paste the .json file contents into the Generator Service text box and start experimenting with the generator. Subtables can be specified in the resultPattern string.

If you are already using Campaign Logger, open one of your campaign logs, click the cogwheel-shaped Options button, select Manage Custom Generators, then Add new generator… and paste the generator data in the text box. After you save the generator, click the Show Generators button in your campaign log to access the new generator.