Who decides
Required
Every sentence in your design has a level of authority: it says who decides that part of the game. There are three levels:
- Fixed: the builder follows the sentence exactly. The builder is the person, team or AI that turns your package into a game. This is the default: text that no tag covers is Fixed.
- Delegated: the builder decides, inside the limits you write.
- Personalization: you write a question, and each build records its own answer.
02-mechanics.md, a prose chapter
The furnace processes one piece of ore at a time. Any additional ore
waits in a queue. A finished bar remains in the furnace until the player
collects it.
> DELEGATED: Decide how the furnace looks and sounds while processing ore.
> A player crossing the room must be able to tell that it is still running.
> PERSONALIZATION: furnace_signal
>
> Choose how the furnace signals that a bar is ready: a steady glow, or
> a glow with a soft chime. Either choice must be clear from across the
> room.
The first paragraph has no tag, so it is Fixed. The delegated passage starts directly after DELEGATED:, on the tag line itself. The text after PERSONALIZATION: is different: it is an id. furnace_signal must be declared as a question in personalization.json, or validation fails.
The limits you write still apply. The builder may choose how the furnace looks while it runs, but a player crossing the room must still be able to tell that it is running.
Every tag covers its blockquote and nothing more. The blockquote is the tag line and the lines starting with > directly under it. A line with only > continues the blockquote, so one tag can cover several paragraphs. The first ordinary paragraph after the blockquote is outside the tag, so it is Fixed again. Write everything you delegate inside the blockquote.
02-mechanics.md, a one-line delegation, then a Fixed rule
> DELEGATED: Decide how the furnace looks and sounds while processing ore.
The furnace never hides the ore queue from the player.
The first line is a complete delegation. The last sentence is outside the blockquote, so it is Fixed: the builder may choose how the furnace looks, but the queue stays visible.
A tag can also sit inside another tag's blockquote, in a nested quote that starts with > >. The inner tag then decides for its nested quote. Two DELEGATED: or PERSONALIZATION: tags at the same level of one blockquote are an error; start a new blockquote for the second tag. A tag inside a code block is only an example and has no effect.
A Delegated choice may change how the game plays when the passage states its target and its limits. The target is what the choice must achieve. The builder then chooses inside those limits. A passage that states no target does not settle such a choice, so you must still decide it. The next section says when a choice changes how the game plays.
A Personalization answer may also change how the game plays, when you define the alternatives yourself. The Personalization questions chapter shows how to write the question and its answers.
Deciding by value or by target#
You decide every difference that a player could notice and that changes how the game plays. Your package records each of these decisions in one of two ways:
- by its value: you state it exactly, such as a smelting time of 4 seconds;
- by its target: a rule, an acceptance test, or a sentence saying what it must achieve.
A difference changes how the game plays when it changes at least one of these five things:
- what the player can do;
- what the player knows at the moment of a decision;
- the state of the game, or the result of an action;
- when something happens, or how much time the player has to act;
- whether the player succeeds or fails.
Pictures, sound, the camera and feedback change how the game plays only when they change one of these five things. For example, when a chime is the only sign that a bar is ready, the chime changes what the player knows.
A target lets you decide what a number is for before you know the number. Suppose you think "smelting should take around 3 seconds, but I'm not sure". You write that as an open number in tuning.json: you write your guess there, and you write the target in your prose, next to the number's name. The Tuning chapter shows how to write one.
02-mechanics.md, the target beside an open number
A piece of ore becomes a bar in
furnace.smelt_seconds. The bar must be ready before a player walking the mine loop comes back to the furnace.
The builder finds a value that meets the target. No tag covers the target sentence, so it is Fixed: you decide what the number must achieve. A Delegated passage that states a target works in the same way: you decide the target, and the builder chooses inside the limits. For a choice that does not change how the game plays, such as how the furnace looks, the limits are enough. A sentence about looks that no tag covers is still Fixed.
Some rules force a choice, such as which of two things goes first, or what the game does when two events happen at the same moment. When a rule allows two or more results, and a player could notice which one is chosen, the rule needs a tie-break: a statement of which result is chosen. Write the tie-break in the rule itself, or write it once in a Fixed sentence that covers several rules, such as "When two candidates are equal, the one that was created first is chosen."
The validator (the checking tool) can give optional review hints about missing tie-breaks. The hint check reads one paragraph at a time, so a hint can appear at a rule that your shared sentence already covers. A hint never makes a package invalid. The What validation proves chapter explains hints.
Rulesets#
Most games do not need this part. Some games replace one complete set of rules, a ruleset, with another during play, such as act one and act two. A > RULESET: <id> tag puts its blockquote in one ruleset. It covers its blockquote in the same way as the other tags. Write (initial) on one tag only: the ruleset the game starts with. Text outside every ruleset applies in all rulesets.
02-mechanics.md, changing the gate rules between two acts
> RULESET: act-one (initial)
>
> The east gate opens after the bell puzzle.
> RULESET: act-two
>
> The east gate begins open and cannot close.
>
> > DELEGATED: Choose the music for act two.
The west gate stays locked.
The act-one blockquote applies at the start. The act-two blockquote applies after the game switches to it. Inside it, the nested quote, written with > >, is Delegated. The last sentence is outside both rulesets, so it applies in both acts.
Tags say who decides a sentence, not what the sentence means. Validation checks the tag itself: a PERSONALIZATION: id must name a real question. No machine checks whether the builder kept your limits. An audit of the finished game judges that. The format defines one effect that a machine applies: a personalization answer that sets a tuning number.
Full rules: OpenGDD specification, §2, §2a and §2c.