Skip to content

World Entities

A life is not only numbers. It has a friend from down the road, a pantry worth raiding, a town you were bored in. Those are world entities, and a fragment declares the ones it touches in exactly the blocks it already uses for variables.

*use
character kevin
place the_town
*enduse
*declare
character mara { name: "Mara", description: "a girl from the year above, all elbows and opinions" }
place the_pantry { description: "the walk-in cupboard behind Kevin's kitchen" }
*enddeclare

*use names somebody another fragment already established. *declare introduces one: character|place <name> { … }. The kinds are character and place. The kind word only counts as the first word on the line, so a count named character_arc is still a variable.

Why it goes in the same blocks. A person is shared state as much as a counter is. Nothing about the word “Kevin” sitting in your paragraph tells the next writer that Kevin exists. So two fragments invent two different Kevins under one name, and a third introduces the player to a friend they have known since they were nine. Declaring puts it in the file, where it is checkable and, more to the point, readable.

Attribute
description:requiredWho or what this is. It goes into the registry and it is what the next writer reads before putting them in a scene.
name:optionalHow the Library writes the name, when the id alone does not do it justice: the_town wants “The town”.
reserved:optionaltrue or false, unquoted. Defaults to false.

The description is the whole difference between declaring somebody and mentioning them. A name is just a word; what a maintainer records and what a stranger needs is the sentence that says who they are.

reserved: true asks to be consulted before anybody else builds on them. The world is open by default, so leaving it off means other writers may use your character without asking. Reserving is a request to a person, not a lock: the build only points it out, and the Contributor Agreement is what says silence is not consent.

There is no token for printing a name. Kevin is called Kevin, so type Kevin:

*use
character kevin
*enduse
You and Kevin split the bottle in his mother's pantry.

The *use line is what records that your fragment features him. The prose is prose.

*declare means nobody has written this person yet. If the registry already has them, the build says who introduced them and tells you to *use them instead. That is the same rule variables follow, and it is what keeps introducedBy honest.

Your declaration is a proposal until the fragment is accepted. On acceptance the entry is written into content/world.json, and from then on the two have to agree.

The World page in the Library lists every element, who introduced them, what they are, and which fragments use them. That page is how you find out Kevin exists before you invent a second one.