Source: MetaCat
The on-chain game design medium has multiple capabilities and limitations, one of which is the heavy emphasis on collective decision-making. Exploring this capability through a prototype system, we proposed Sentences: an on-chain collaborative world-building tool structured around a primitive structure with only appended branching narratives. It is built using a MUD, providing a lightweight environment for collective narrative generation. Each new game of Sentences generates a new world, and then players come to life it by incrementally adding their lore.
Motivation
In an autonomous world space, a common task for the birth of new projects is collective "world-building", building a common lore system that determines the player's experience of the world. Such exercises are often informal and unstructured, but can also be supported with ordered prompts and exercises that help worldbuilders shape the structure and coherence of their worlds.
These exercises are a world in themselves. They construct a system of information between narrators, a set of rules that allow narrative to flourish. This set of rules is the world, and it creates a space of unresolved realities for new ideas to be born. The choice of exercises will also necessarily affect the narrative created: a set of questions will assume a space of potential answers; a prompt in one direction may hinder exploration in another.
Thus, Sentences is a "worldbuilding world"; a primordial sandbox for collaborative knowledge generation. It is necessarily sparse and constrained, intended as a laboratory for testing new ideas. There is no chat or contribution other than to expand the narrative. In the world of Sentences, the world is built linearly, but can branch out in many directions from the initial seed.
Mechanics
Unless a world is already in progress, loading the Sentences client will give the player the option to generate a new world. Once generated, the player will receive a prompt with a core mechanic that the player can use to develop the story, an example might be:
"This society is most important for nature"
"This civilization is completely dependent on leveling"
"This group is built on money"
Once generated, the world will be active and authors have a fixed time (we set it to 20 blocks, which ticks regularly) to propose new additions to the story. After the time is up, the second phase will begin, and participants will vote for their favorite proposals. After the votes are counted, the most popular proposal will be added to the story and the process will start again.
If no proposals are made within the time window, the world will die. This extinction is not absolute: worlds simply add other extinct worlds to the archive. Since all proposals and votes are on-chain, all worlds contain a complete history of possible directions, as "extinct" branches, representing a set of possible parallel universes.
Contracts
The state of a narrative is managed by two interconnected systems: one that manages the generation of new narratives, and another that handles time, votes, and proposals for new narrative content.
A new story is initialized by randomly selecting a sentence from a list of hardcoded prompts encoded in the input system FirstEntrySystem.sol. These prompts are generated using a simple substitution grammar script. In future versions, this script can also be copied across contracts to provide more diverse starting points.
Once the story is initialized, this initial prompt is added to the chain and a new proposal period begins. This period lasts n blocks (about one second each) and is defined by the variable periodEndsBlock, which is set on the active story at the beginning of each new proposal period.
During the proposal period, new narrative entries are suggested, and participants vote on which expansions they choose. Both proposals and votes are handled by ProposalsSystem.sol, which validates the timing of these contributions based on the periodEndsBlock variable. Each proposal that is made points to a "parent" (the proposal it responds to), and successful proposals form a linked list.
At the end of the proposal period, the votes for each proposal are tallied. In the event of a tie, one of the two proposals is chosen at random (it would be interesting to see this as a branching case in future versions). If no proposals are made, the story ends. The story is archived, and the next action a player can take would be to generate a new story.
Applications
We envision that Sentences works best in sessions of 10-50 participants, who may or may not know each other, but come together in the spirit of Archetypal Tales. For example: hosting an event on Discord with a goal to generate five new worlds in an hour.
On its own, Sentences isn't particularly exciting, being a tool rather than an engaging world. However, as a modular component, Sentences' narrative generation mechanics could fit nicely into a richer role-playing game, weaving the fabric of the game as it progresses. Voting mechanisms could also be used to support the inclusion of generation outputs in player-generated prompts.
One weakness of the current version of Sentences is the specificity of the initial prompts. This is easily changeable for different deployments, but it would be interesting to expand the game's prompt generation mechanics to be more consistent with the open-ended nature of the narrative portion.
Alternatives
The form of Sentences is inspired by text-based games, improvisation, lore, and TTRPGs. Some specific references we looked to when making this game included Max Kreminski's Epitaph (a fantasy narrative generation game) and Kate Compton's Tracery alternative grammar tool. These projects leverage simple randomness and modularity to create complex branching narratives, and in our case we were interested in the potential of these primitives to be used in collective settings.
While Sentences is built with this in mind when building worlds, and is somewhat subjective in this regard (ie: only appending narrative), one could also imagine it being used for other constrained collaborative writing scenarios (e.g.: Toggle the table of contents Twitch Plays Pokémon?).
Extensions and Future Work
An obvious extension of Sentences would be for anyone initializing a world to set specific rules about how new sentences are appended to the narrative. For example, these rules could modify the voting system to require a certain number of players to continue the narrative, or modify the voting time to slow down or speed up the narrative. This makes Sentences a prototyping tool not only for worlds, but also for constraints and dialogue structures that produce specific story styles.
Another equally interesting direction for development is the option to generate parallel worlds from "dead" branches of the current world. As a mechanism, this might be best implemented by generating a new "new world" contract with a pointer to the old branch, rather than generating a new world from scratch.