Fact list
fact-list-1
This contract defines the behaviour of facts a player must always be able to read: health, ammo, or a status effect.
It decides which game facts players can always read, and how each one reaches them without relying on colour alone.
- 3 questions
- no numbers
- 1 list
- 6 tests
Use in your game
Opens the authoring tool with this contract added and its questions unanswered. Or download the ZIP and add it later.
What is in the ZIP
The ZIP holds the contract and its acceptance tests. In the authoring tool, choose Add contract and pick this ZIP. If you keep your design as files, put them in contracts/ and fill in the answers there.
Questions
3 questions.
Try the answers
Pick answers to see which rules and tests apply. Nothing is saved here: the ZIP and the authoring tool start unanswered.
Can a fact shown by the game use colour as its only clue?
Why this is asked
Colour can merge for some players. A second clue keeps enemies and allies distinct for everyone; a colour setting helps only the player who finds it.
Can a fact listed here use sound as its only clue?
Why this is asked
A sound-only warning disappears when the game is muted or a player cannot hear it. This choice says whether another clue is required.
Are you promising a player setting for any listed fact?
Why this is asked
Different players need different ways to read a fact. This choice says whether your game promises any presentation setting.
Lists1 list
Some settings are lists of rows.
A reference points to a number or a rule in your design. For a number, use its address in your tuning. For a rule, use its file and heading, such as 02-mechanics.md#recovery. Each field's description says what it needs.
Readable facts
readable-facts
List every fact and every independent way players can read it without colour. Use one row per pair, with no repeats. Two ways for health need two rows with the same citation. A finished adoption needs at least one row. The validator (the checking tool) does not count rows; a reviewer does.
Each row is: id, fact, channel, presentation-settings, without-audio.
Every field
| Field | Kind | When it appears | Meaning |
|---|---|---|---|
id |
string | Required | A short, stable name for this fact and its channel. Use a different name for each row. |
fact |
reference | Required | Where your fixed game prose defines the fact and its states. The same prose must name every play situation covered. |
channel |
choice: text, symbol-or-shape, place-or-size, animation, outline-or-contrast, audio-cue, spatial-audio, narration, audio-description, haptic | Required | The non-colour way that carries this fact by itself. In each named situation, an observer must identify every state from this way alone. Symbol-or-shape uses a pictorial symbol, bare form, or pattern, such as a shield badge or hatching. Place-or-size uses where something sits or how large or full it is, such as a threat arrow's direction. Animation uses movement over time, such as a pulsing border. Narration reads interface content. Audio description explains visual action that the interface does not name. |
presentation-settings |
string | Required | Name every player-facing setting that changes or can disable this row's channel, and say what happens at each end of the setting's range — for a switch, when it is on and when it is off. Write 'none' when no setting affects it. If a setting can disable the channel, name another row for the same fact that remains readable or state that the fact becomes unreadable. Unreadable is only allowed when your colour and sound answers do not require the fact to stay readable. The validator checks that this field exists; a reviewer checks its truth. |
without-audio |
string | Present when row channel is Audio cue or Spatial audio or Narration or Audio description. | Say what a player gets when audio is off. Name a non-audio row for the same fact, or state that the fact becomes unreadable. Unreadable is only allowed when your colour and sound answers do not require the fact to stay readable. The validator checks that this field is present on an audio row; a reviewer checks its truth. |
For builders
Exact mechanism wording and 6 pack tests
Exact mechanism wording
Each readable-facts row is one fact-and-channel promise. A fact carried by several non-colour channels repeats the same Fixed citation in several rows; a fact with no row makes no channel-readability promise under this contract.
A row promises that its channel alone lets a player distinguish the states the cited Fixed prose defines in every play situation the citation names. The check repeats for each named situation, with every other route to the fact removed or made identical across the states being distinguished — declared or not — so the named channel is the only thing that changes with the fact; developer instrumentation that is not a player-facing surface (an audit pane, a debug overlay, or a save file) is not a route. Within each named play situation, an observer meets each state the cited prose names at least once, in an order they do not know, and must name the state every time from the named channel alone.
A fact carried by memorable authored content, such as a published deck or a fixed map, can be readable through a route the channel rows do not describe; the rows promise presentation, not secrecy.
The ten channel ids are text, symbol-or-shape, place-or-size, animation, outline-or-contrast, audio-cue, spatial-audio, narration, audio-description, and haptic. Colour is not another channel: colour-alone is a game-wide policy for every fact the game shows, including a fact with no row, while a fact appears in readable-facts only when at least one non-colour channel carries it.
A listed fact may be a unit state, warning direction, resource amount, or card state. This contract records whether that fact is readable; it does not define tutorials, controls, or how the state changes.
Each row declares every player-facing setting that changes or can disable its channel. If a setting can disable that row's channel, the adoption either names another row for the same fact that remains readable or states that the fact becomes unreadable. The unreadable result is forbidden whenever another selected policy requires the fact to remain readable under that setting.
Package validation checks the list's shape, ids, channel choices, Fixed citations, and required setting declarations. The verification pack separately audits list completeness, the game-wide colour and audio policies, each setting declaration, and whether each channel distinguishes the cited states. Under fixed-by-game a row may declare no affected setting, but a setting a row does declare is binding and audited like any other row fact; colour-alone: player-recolourable independently still promises its colour setting.
Verification pack
sha256:d026a70c9b4f1e60109b61fb4c8f5645cbd8aff4e2cd6bfb28a9622ffa782771
The format calls an adoption with its matching pack Checked: the tests travel with it, but a game has not necessarily passed them. Without the pack the adoption is Promised: the builder still owes the chosen behavior.
6 pack tests
Placeholders are filled from the adoption's answers, values, rows, and verification inputs.
the readable-facts list is complete and has no duplicate pair
fact-policy-holds
Applies for every adoption
Audit class: observer-judged. Across the supplied scope, the readable-facts rows are non-empty, every fact the Fixed prose promises the player can read appears in at least one row, and no two rows name the same fact citation and the same channel.
- Scope
Inputs scope- Holds
the readable-facts rows are non-empty; every fact the Fixed prose promises the player can read appears in at least one row; no two rows name the same fact citation and the same channel
- Diagnostics
Instance-fact-list-completeness
the promised colour and audio policies hold throughout play
colour-and-audio-policy-holds
Applies for every adoption
Audit class: observer-judged. Across every fact the game's Fixed prose says the player can tell, including facts with no readable-facts row, and the play situations that prose names, Bind colour result; Bind audio result.
- Scope
every fact the game's Fixed prose says the player can tell, including facts with no readable-facts row, across the play situations that prose names
- Holds
Bind colour result;Bind audio result- Diagnostics
Instance-fact-observer-resultsInstance-colour-and-audio-state
the promised presentation setting changes a fact in play
presentation-control-visible
Applies when Presentation control is Player configurable.
Audit class: observer-judged. Across the supplied scope, at least one player-facing setting changes or can disable a channel named by a readable-facts row. Every row names each setting that affects its channel and the result at every supported end, and the running game matches that declaration in every applicable cited situation. A disabled channel points to another readable row for the same fact or admits that the fact becomes unreadable; any admission obeys the selected colour and audio policies.
- Scope
Inputs scope- Holds
at least one player-facing setting changes or can disable a channel named by a readable-facts row; every row names every setting that changes or can disable its channel and states the result at each supported end; each declaration matches the running game in every applicable play situation named by the row's fact citation; when a setting can disable the row's channel, the row names another channel row for the same fact that remains readable or states that the fact becomes unreadable, and any unreadable result obeys the selected colour and audio policies
- Diagnostics
Instance-presentation-settingsInstance-presentation-observer-results
the setting declaration for Row.id matches play
presentation-setting-effect-holds
Applies for every adoption
Audit class: observer-judged. For Row.id, observe every named setting at both ends of its supported range in every applicable situation named at Row.fact. The channel changes or is disabled exactly as declared. If disabled, another row keeps the fact readable or this row admits unreadability, and that result obeys the selected colour and audio policies. This row declares: Row.presentation settings
- Given
the channel at
Row.fact; this row declares:Row.presentation settings- When
- every named setting is observed at both ends of its supported range in every applicable play situation named at
Row.fact
- every named setting is observed at both ends of its supported range in every applicable play situation named at
- Then
- the channel changes or is disabled exactly as declared
- if the channel is disabled, another declared row keeps the fact readable or this row states that the fact becomes unreadable, and that result obeys the selected colour and audio policies
- Diagnostics
Instance-Row.id-presentation-setting-result
the audio-off result for Row.id matches play
audio-off-result-holds
Applies when row channel is Audio cue or Spatial audio or Narration or Audio description.
Audit class: observer-judged. With audio off in every situation named at Row.fact, the row promises: Row.without audio If that declaration says the fact becomes unreadable, the selected audio policy must allow it.
- Given
the audio channel at
Row.factand this row's audio-off declaration:Row.without audio- When
- audio is turned off in every play situation named at
Row.fact
- audio is turned off in every play situation named at
- Then
- the player receives the declared non-audio route or the fact becomes unreadable exactly as declared
- an unreadable result occurs only when the selected audio policy allows it
- Diagnostics
Instance-Row.id-audio-off-result
the fact defined at Row.fact is readable through Bind channel route alone
fact-readable-by-channel
Applies for every adoption
Audit class: observer-judged. The check repeats in every play situation named at Row.fact. Every other route to the fact is removed or made identical across the states being distinguished — declared or not — so Bind channel route is the only thing that changes with the fact; developer instrumentation that is not a player-facing surface (an audit pane, a debug overlay, or a save file) is not a route. Within each named play situation, an observer meets each state the cited prose names at least once, in an order they do not know, and correctly names the state every time from Bind channel route alone.
- Given
the fact defined at
Row.fact, checked separately in every play situation named there, with every other route to the fact removed or made identical across the states being distinguished — declared or not — soBind channel routeis the only thing that changes with the fact; developer instrumentation that is not a player-facing surface (an audit pane, a debug overlay, or a save file) is not a route- When
- within each named play situation, an observer using
Bind channel routemeets each state the cited prose names at least once, in an order the observer does not know, with no prior knowledge of which state is present
- within each named play situation, an observer using
- Then
- in each named play situation, the observer correctly names the state every time from
Bind channel routealone
- in each named play situation, the observer correctly names the state every time from
- Diagnostics
Instance-Row.id-observer-result