Skip to content

Game Design Document

Rhys edited this page Nov 14, 2020 · 3 revisions

Eigengrau's Generator

(or, Eigengrau's Essential Establishment Generator, or EEEGen)

Tagline

A TTRPG Generator Unlike Any Other

Long Form:

A generator unlike any other, Eigengrau's Generator procedurally generates towns and NPCs, all in paragraphs suitable to read out to players.

Overview

Eigengrau's Generator is a procedural generator webapp that creates towns and NPCs for use in generic fantasy TTRPGs. It is unique in that it generates an entire contiguous town, with NPCs referencing one another, with complex webs of relationships, as well as the sociopolitics and geography of the town impacting what is generated.

How to use the Generator

The Generator is a tool for the User to automate many of the dull parts of world-building; creating towns, NPCs, and events for the players automatically, it is intended to be used by the Dungeon Master, preferably as part of their session prep. Ideally, the User should be reading one sentence ahead of the Players for whatever part they are reading out, so they can omit any details which they do not feel are appropriate.

Target Audience

This is targeted towards GMs (or DMs) of fantasy tabletop roleplaying games, such as Dungeons and Dragons, Pathfinder, Dungeon World, 13th Age, and others. It is relatively system-agnostic, though preference is shown towards 5th Edition Dungeons and Dragons due to its popularity.

Play Flow

The User loads the website, which automatically generates a town for the User. They have a brief overview of the size of the town, as well as its political system and racial demographics, and are presented with a list of the available buildings that have been generated. The Players drive the story forward, and will presumably ask for either something specific, or an overview of what they encounter; if something does not fit (a church in a world without religion, for example), the User can simply omit it from their narration.

The User navigates to the buildings that the Players are interested in, and is presented with the overview of the building. They can then read out the content as they see fit; parts can be omitted freely, without disruption. If the User requires more in-depth information about an NPC, they can navigate to the NPC's "profile", which has roleplaying tips, physical characteristics, their financial situation, backstory, and relationships.

Interface

The interface mimics the look of the Dungeon Master's Guide 5th Edition, including watercolour illustrations and double column layout on screens that are large enough to support it. It has been modernised and adapted to the computer format, featuring hyperlinks, saves, and other modern conveniences to make the DMing experience easier.

Sidebar

The sidebar hosts the meta content; links to the Discord server, Patreon, and "Toolbox" of random tools are stored here. There are also the settings, saves, and restart functions here. It can be stowed for removing distractions.

Toolbox

A collection of the many different sub-generators that make up the Generator, the Toolbox is used when the User is unsure of where to find something, or wants to generate something specific in an instant ("I need to make up a potion to include in that loot...")

Settings

Settings are self-explanatory, and include the "power user" features, such as changing to the metric system, disabling sexism, and changing to the Silver Standard.

Saves

Saving is the primary way that users can maintain a copy of their towns, if needed for future reference. They can be saved to the harddrive, or can be stored in the cookies.

Restarting

Restarting is the primary way to generate a new town; it rolls up a new seed, and presents the User with an entirely new settlement.

History bar

The top of the page has a sticky "history" of the links that the User has clicked on to get to the current page. This is so the User can always "retrace" their steps, and doesn't lose their place.

Elements

Hovertext

The Generator makes extensive use of hovertext to provide additional context about things on demand which do not necessarily necessitate their own passage; singular words or short descriptions that suffice for a GM's general overview can be expanded upon in an instance by hovering over, giving more context. Hovertext is delineated by the standard accessibility format of a dotted underline, except where the text is also a hyperlink, which takes precedence.

Hyperlinks

The Generator is modelled as a quasi-wiki, with interconnected articles linking to one another. Hyperlinks take the User to a new page, and follow the standard blue colouring of hyperlinks. However, they do not open in new tabs, as the app is entirely self-contained.

Additive links

"Additive" links are links that create new content without leaving the page that the User is on. They are distinguished by being bolded (they're "full" of text).

Regenerative links

"Regenerative" links are links that replace existing content with new content, without leaving the page that the User is on. They are distinguished with an oblique font (or italics, if unavailable).

Code

You may see several unusual functions that are unfamiliar, such as .random(). These are SugarCube macros, evaluated in the SugarCube passages. You can read more about SugarCube macros here.

Important Objects and Concepts

  • Passages: files with the extension .tw or .twee are Twee passages. These are what the player sees, and they use SugarCube syntax.
  • setup: SugarCube's global object. Great for storing data, not great for storing anything that's not entirely static.
  • lib: Namespace for TypeScript; the equivalent of setup.
  • State.variables / $: SugarCube syntax for state variables. When referencing inside JavaScript, use State.variables.
  • Temporary Variables / _: SugarCube syntax for temporary variables. These are wiped upon Passage movement. When referencing inside JavaScript, use State.temporary. You probably won't need to, though- if you do, reconsider.
  • $town: The town object. This is the lifeblood of everything, and commonly the first passed argument.
  • $npcs: where all the NPCs live. Reference NPCs via their key, i.e. $npcs[$currentNPC.key].

Town

Building

NPC

Faction