Control options
control-options-2
This contract defines the behavior of controls: key bindings, presets, or remapping.
This contract decides which button, key, or touch runs each action, how players can change the controls, and what happens when a press is demanding, such as a hold or a combination.
Use in your package
The first button opens the authoring tool with this contract added and its questions unanswered. You can also download the zip file and add the contract later.
What is in the zip file
The zip file holds the contract and its acceptance tests. In the authoring tool, choose Add contract and pick this zip file. If you edit your package outside the authoring tool, unpack the zip file in your package folder. The files of the zip file go into contracts/. Fill in the answers there.
Questions
Up to 2 questions. Some appear only after earlier answers.
Try the answers
Pick answers to see which rules and tests apply. Nothing is saved here. In the zip file and in the authoring tool, the questions have no answers yet.
By default, how can players change the controls?
- Asked when
- the platform control sets list has at least one row.
- If not asked
- With no platform control set, this adoption makes no default remapping promise.
Why this is asked
A platform may offer fixed controls, presets, or free changes. This answer is the default answer. A platform row can choose another answer.
By default, what happens when an action needs a demanding press?
- Asked when
- the platform control sets list has at least one row.
- If not asked
- With no platform control set, this adoption makes no default demanding-input promise.
Why this is asked
A hold, rapid presses, a double press, or a button combination can stop a player from using an action that the player knows. This answer is the default answer.
Numbers and rulesno numbers, 1 rule
Numbers
This contract has no numbers to set.
Rules
-
Forbidden when Remapping default is Action and press style, and Demanding input default is Required as written.
Lists4 lists
Some settings are lists of rows.
A reference points to a number or a rule in your design. For a number, use the address of a decided number in your tuning, not an open one. For a rule, use its file and heading, such as 02-mechanics.md#recovery. The reference must match exactly one heading in that file. No > DELEGATED: or > PERSONALIZATION: tag may cover any part of the section under that heading. Each field's description says what it needs.
Platform control sets
platform-control-sets
Supported platforms or editions and their complete control policies. A separate row is required whenever mappings or options differ.
An empty list means: No platform receives a physical-control promise from this adoption.
Each row is: id, platform-declared-in, methods-declared-in, input-method-coverage, remapping, settings-rule-declared-in.
Every field
| Field | Kind | When it appears | Meaning |
|---|---|---|---|
id |
string | Required | A short name for the platform or edition in your game's words, such as pc or console-gamepad. |
platform-declared-in |
reference | Required | Where your game's rules name one platform or edition and its supported devices. Use another row when the control behavior differs. |
methods-declared-in |
reference | Required | Where your game's rules list the complete input methods and any required switch between them. A PC row may name keyboard and pointer as one mixed method. |
input-method-coverage |
choice: one-method-covers-all, player-chooses-method, mixed-methods-needed | Required | Whether one named method covers every action bound on the platform, several named methods each do so, or the named methods must be mixed. A console may offer complete gamepad and accessibility-controller methods. |
remapping |
choice: use-game-default, fixed-bindings, swap-only, presets-only, any-action-any-input, action-and-press-style | Required | The platform's remapping policy. Use the default answer, or choose another answer for this row. A console edition may offer presets while the PC edition allows free assignment. |
settings-rule-declared-in |
reference | Required | Where your game's rules state the platform's control menu. The rules also state what the platform's effective remapping answer needs: preset selection, conflict handling, or the press styles offered for each action. When bindings are fixed, the rules state explicitly that no changes are possible. |
Control presets
control-presets
Named complete binding sets offered on a platform. A preset maps every action bound on its platform.
An empty list means: No named control preset is offered.
Each row is: id, platform-control-set, label, availability, selection-rule-declared-in.
Every field
| Field | Kind | When it appears | Meaning |
|---|---|---|---|
id |
string | Required | A short name for the preset in your game's words, such as gamepad-default or gamepad-alternate. |
platform-control-set |
string | Required | The supported platform or edition that offers this preset. |
label |
string | Required | The player-facing preset name, such as Standard or Southpaw. |
availability |
choice: starting-and-selectable, player-selectable, mode-selected | Required | Whether this preset is the starting set and remains selectable, is another selectable set, or follows a cited player mode. An assisted-play mode may select its own complete preset. |
selection-rule-declared-in |
reference | Required | Where your game's rules state the route that selects this preset and makes its matching action-binding rows current. |
Action bindings
action-bindings
Physical inputs that produce actions on a platform or inside one named preset.
An empty list means: No physical input is promised to produce a game action.
Each row is: id, platform-control-set, preset, context-declared-in, action-declared-in, physical-input-declared-in, action-input, press-style, motion-use, demanding-input.
Every field
| Field | Kind | When it appears | Meaning |
|---|---|---|---|
id |
string | Required | A short name in your game's words for the platform, the action, and the input, such as pc-jump-space. A per-character control set names the character too. |
platform-control-set |
string | Required | The supported platform or edition where this binding exists. |
preset |
string | Optional | The preset that contains this binding. When this field is absent, the binding belongs to the platform's current base set or its freely remappable set. On a platform where players can change controls, the preset is the starting set. Accepted changes change only the current copy, not the preset. |
context-declared-in |
reference | Optional | Where your game's rules state the context in which this binding exists, such as a vehicle layer, menu, training mode, or unlock gate. When this field is absent, the binding exists throughout the selected control set. |
action-declared-in |
reference | Required | Where your game's rules name the game action that this binding contributes as a candidate. |
physical-input-declared-in |
reference | Required | Where your game's rules name the physical input and the device that supplies it. The physical input is a key, button, axis, touch region, gesture, directional sequence, or device-motion input. |
action-input |
string | Optional | A name for the one input that the game receives from this physical activation. Give the name when several bindings use the same physical activation. |
press-style |
choice: press, release, timed-press, hold, rapid-presses, repeated-presses, double-press, simultaneous-inputs, continuous-axis, gesture, input-sequence | Required | The physical performance required by this binding. A timed press has a target moment, rapid presses have a rate, repeated presses have a count, and an input sequence is a directional sequence completed by a press. |
motion-use |
choice: no-motion, optional-motion, required-motion | Required | Whether this binding uses no device motion, is an optional device-motion route beside another binding, or requires device motion. A handheld aim action may offer tilt as an alternative to the stick. A required-motion binding is demanding because of its motion. A press-style setting does not make it easier, so its easier route is a simpler alternative or another binding. An optional-motion binding has a no-motion binding for the same action on the same platform and preset. |
demanding-input |
choice: use-game-default, no-demanding-presses, simpler-alternative, player-can-change-it, required-as-written | Required | The demanding-input answer of this action binding. Use the default answer, or choose another answer for this row. A repeated crafting input may allow a hold even when combat combinations remain fixed. No binding answers required-as-written on a platform whose effective remapping is action-and-press-style. |
Simpler inputs
simpler-inputs
Separate simpler inputs that work without a setting change, for bindings whose effective demanding-input answer promises one.
An empty list means: No demanding binding promises a separate simpler input without a setting change.
Each row is: id, action-binding, alternative-declared-in, distinction-rule-declared-in.
Every field
| Field | Kind | When it appears | Meaning |
|---|---|---|---|
id |
string | Required | A short name for the alternative in your game's words, such as repair-tap-alternative. |
action-binding |
string | Required | The demanding binding for which this route is the simpler alternative. |
alternative-declared-in |
reference | Required | Where your game's rules name the physical input and the ordinary press style that perform the same game action without a setting change. |
distinction-rule-declared-in |
reference | Required | Where your game's rules prove that a successful use of this alternative cannot be mistaken for a failure to finish the demanding input. |
For builders
Exact wording for builders and 64 pack tests
Exact wording for builders
This text decides the order of the steps for platform selection, preset choice, remapping, physical-input matching, press style, simpler alternatives, device-motion use, and creation of action inputs. The questions and rows supply choices and cited game rules. They do not change the order.
A control set is the complete current mapping for one platform and input method. A preset is a named immutable source set that can become current. A binding joins one physical input and press style to one candidate action. An action input is the one signal that the game receives from a physical activation; it carries every matched binding's action as a candidate. Bindings that can be current together and share one physical activation share its optional action-input name, while a lone binding's name may remain implicit. A demanding input is a timed, held, rapid, repeated, double, simultaneous, input-sequence, or required-device-motion input.
1. Select exactly one matching platform-control-set from the running platform, edition, and supported device rules.
2. Resolve the platform's effective remapping answer. A row value other than use-game-default applies. Otherwise remapping-default applies.
3. Establish the starting control set from the platform's cited rule. When a preset is selected, copy its complete matching action-binding rows into the current set. The preset itself remains unchanged.
4. Apply control changes only through the effective remapping answer. Fixed bindings refuse all changes. Swap-only exchanges two existing assignments. Presets-only replaces the whole set with another declared preset. Free assignment moves one action independently and resolves conflicts before use. Action-and-press-style also permits a supported press-style change.
5. After an accepted change, the resulting complete set becomes current. Every later binding lookup reads that set, and each binding row's promises follow its action to the input the current set assigns. Presentation of the current binding is owned by Action legibility when adopted, otherwise by the game's UI rules.
6. On physical input, read every binding with a matching physical input and performance in the current platform, device, method, and preset-derived set. A press, release, hold, repeated activation, double activation, simultaneous group, axis, gesture, directional input sequence, or device-motion input matches only under its cited Fixed rule. An optional binding context makes the match provisional. Whether that context holds is decided at the accepted moment. Step 11 says how the accepted moment is determined. Rows that can be current together and share one physical activation agree on one action-input value. A physical input cited by a simpler-inputs row matches as if it were its named binding: it emits that binding's action input and contributes the same action.
7. Resolve the binding's effective demanding-input answer. A row value other than use-game-default applies. Otherwise demanding-input-default applies.
8. Under no-demanding-presses, the covered action has an ordinary route. Under player-can-change-it, the selected setting supplies the easier current press style. Under required-as-written, an incomplete demanding input produces no action input from this contract.
9. Under simpler-alternative, the demanding route and every matching simpler row remain available together without configuration. The alternative produces the same action only through its distinct cited input; failure to finish the demanding route never becomes the alternative by itself.
10. A no-motion binding reads no device motion. An optional-motion binding contributes the same action as its non-device-motion alternative when its gesture completes. A required-motion binding produces no action input from a non-device-motion attempt.
11. First, the physical input occurs. Then this contract emits the action input. Then Input forgiveness, when adopted, may shift the accepted moment. Then Action legibility, when adopted, selects the offered candidate at the accepted moment. The result is one action proposal. Thus an interact buffered during a cutscene evaluates candidates in the situation where the input is accepted, not the situation where it was pressed. The emitted action input carries every matched binding's action as a candidate; it is one input with N candidates, never N inputs.
12. When Action legibility is adopted, its shared-input case consumes that one action input and selects one candidate. Otherwise the game's cited Fixed selection rule resolves shared candidates, and the game's UI rules own their presentation. Event resolution begins only after the one action proposal exists.
The order of the steps is: platform, defaults, starting set, accepted control change, current set, physical match, demanding-input answer, simpler route, device-motion rule, one action-input creation, accepted-moment shared-action choice, and one action proposal.
Verification pack
sha256:af872c7dbbd7b7faeacfbfb6f9015a7e9988a6e44b4726318aa9f91e20fe39b2
The format calls an adoption that has its matching pack Checked. The tests are included, but this does not mean that a game has passed them. An adoption without the pack is Promised. The builder must still build the chosen behavior.
64 pack tests
Placeholders are filled from the adoption's answers, numbers, rows, and test inputs.
control options uses control sets, presets, bindings, action inputs, and demanding inputs
control-options-vocabulary
Applies for every adoption
A control set is the complete current mapping for one platform and input method. A preset is an immutable named source set that can become current. A binding joins one physical input and press style to one candidate action. One physical activation emits one action input carrying every matched binding's action. A demanding input is a timed, held, rapid, repeated, double, simultaneous, input-sequence, or required-device-motion input.
- Given
the
Instanceadoption and its cited control rules- When
- the control path is identified from platform selection through physical activation
- Then
- a control set is the complete current mapping for one platform and input method
- a preset is an immutable named source set that can become current
- a binding joins one physical input and press style to one candidate action
- one physical activation emits one action input carrying every matched binding's action
- a demanding input is a timed, held, rapid, repeated, double, simultaneous, input-sequence, or required-device-motion input
- Diagnostics
Instance-current-setInstance-action-input-log
Row.id is selected exactly for its cited platform and devices
platform-row-selects-exactly-when-cited
Applies for every adoption
Platform row Row.id is the one selected row exactly on the platform, edition, and supported devices at Row.platform declared in. It is not selected where that citation excludes it. The test names the address and restates nothing from it.
- Given
platform-control-set row
Row.idand the Fixed platform rule atRow.platform declared in- When
- the game runs on each cited platform, edition, and supported device combination and on the nearest combination the citation excludes
- Then
Row.idis the one selected row for every combination the citation coversRow.idis not selected for a combination the citation excludes- the test leaves the covered combinations to
Row.platform declared inand restates nothing from it
- Diagnostics
Instance-platform-selection
Row.id starts with the control set chosen by its cited rule
starting-control-set-follows-platform-rule
Applies for every adoption
On first play for Row.id, the complete starting control set comes from Row.settings rule declared in, and every first binding lookup reads it as current. The test names the address and restates nothing from it.
- Given
a first play on platform row
Row.idand the Fixed settings rule atRow.settings rule declared in- When
- the current set is first established
- Then
- the complete starting control set is the one selected through
Row.settings rule declared in - every first binding lookup reads that current set
- the test restates nothing from the cited rule
- the complete starting control set is the one selected through
- Diagnostics
Instance-current-set
preset Row.id becomes current through its cited route
preset-selection-copies-complete-set
Applies for every adoption
Preset Row.id, labeled Row.label, belongs to Row.platform control set. Through Row.selection rule declared in, it Bind availability result. Selection copies every matching binding into one complete current set and leaves the source preset unchanged. The test names the address and restates nothing from it.
- Given
preset
Row.idlabeledRow.labelfor platform rowRow.platform control setand the Fixed route atRow.selection rule declared in- When
- the cited route is used and the current set is inspected before and after selection
- Then
Row.idBind availability result- selection copies every matching action-binding row into one complete current set
- the source preset remains unchanged
- the test restates nothing from
Row.selection rule declared in
- Diagnostics
Instance-current-setInstance-change-log
Row.id input methods cover its actions as promised
input-method-coverage-holds
Applies for every adoption
Audit class: observer-judged. An observer, not the running game, judges this in each preset-derived current set Row.id can make current. For every action bound on the platform, under the complete methods and any required switch at Row.methods declared in: Bind coverage procedure. The test names the address and restates nothing from it.
- Given
platform row
Row.id, every action bound on that platform, and the complete methods and any required switch atRow.methods declared in- When
- in each preset-derived current set the platform can make current, an observer performs every action bound on the platform using the named method or methods
- Then
Bind coverage procedure- an observer, not the running game, judges this
- the test restates nothing from the cited rule
- Diagnostics
Instance-Row.id-observer-result
Row.id keeps fixed bindings by its row answer
remapping-fixed-override
Applies when row remapping is Fixed bindings.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every attempted change to an action's physical input or press style is refused, the current set stays unchanged, and the existing binding performs the action. Where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
the current set for
Row.idand its control setting route atRow.settings rule declared in- When
- an observer attempts to change an action's physical input and press style, then performs the action
- Then
- every control change is refused and the current set is unchanged
- the existing binding still performs the action
- where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-set
Row.id keeps fixed bindings by the default answer
remapping-fixed-default
Applies when Remapping default is Fixed bindings and row remapping is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every attempted change to an action's physical input or press style is refused, the current set stays unchanged, and the existing binding performs the action. Where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
the current set for
Row.idand its control setting route atRow.settings rule declared in- When
- an observer attempts to change an action's physical input and press style, then performs the action
- Then
- every control change is refused and the current set is unchanged
- the existing binding still performs the action
- where this platform has a movable or resizable touch control, changing its layout while keeping its action is not a control change; where it has none, this test checks nothing about a touch control
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-set
Row.id permits only exchanges by its row answer
remapping-swap-override
Applies when row remapping is Swap only.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: an exchange of two existing assignments is accepted, each new binding performs its exchanged action, and each old binding stops performing the action moved away from it. An independent move to an unused input is refused. The complete result becomes current for every later lookup. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
two supported existing assignments and one otherwise unused supported input in
Row.id, changed throughRow.settings rule declared in- When
- an observer exchanges the two assignments, performs both actions, and then tries to move one action independently to the unused input
- Then
- the exchange is accepted as one swap and the resulting complete set becomes current
- each new binding performs its exchanged action and each old binding no longer performs the action moved away from it
- the independent move is refused and leaves the current set unchanged
- every later binding lookup reads the new current set
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits only exchanges by the default answer
remapping-swap-default
Applies when Remapping default is Swap only and row remapping is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: an exchange of two existing assignments is accepted, each new binding performs its exchanged action, and each old binding stops performing the action moved away from it. An independent move to an unused input is refused. The complete result becomes current for every later lookup. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
two supported existing assignments and one otherwise unused supported input in
Row.id, changed throughRow.settings rule declared in- When
- an observer exchanges the two assignments, performs both actions, and then tries to move one action independently to the unused input
- Then
- the exchange is accepted as one swap and the resulting complete set becomes current
- each new binding performs its exchanged action and each old binding no longer performs the action moved away from it
- the independent move is refused and leaves the current set unchanged
- every later binding lookup reads the new current set
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits only preset selection by its row answer
remapping-presets-override
Applies when row remapping is Presets only.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: selecting another starting-and-selectable or player-selectable preset through Row.settings rule declared in is accepted, its complete copy becomes current, its new binding performs the action, and the old binding does not. An individual binding change through that route is refused. Every later lookup reads the new current set. A mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset. The test names the address and restates nothing from it.
- Given
two complete selectable declared presets for
Row.idand the settings route atRow.settings rule declared in- When
- an observer selects another starting-and-selectable or player-selectable preset through the settings route, performs an action whose binding differs, and then tries to change one binding through that route
- Then
- preset selection is accepted and its complete copy becomes current
- the new binding performs the action and the old binding does not
- the individual binding change is refused and leaves the current set unchanged
- every later binding lookup reads the new current set
- a mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits only preset selection by the default answer
remapping-presets-default
Applies when Remapping default is Presets only and row remapping is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: selecting another starting-and-selectable or player-selectable preset through Row.settings rule declared in is accepted, its complete copy becomes current, its new binding performs the action, and the old binding does not. An individual binding change through that route is refused. Every later lookup reads the new current set. A mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset. The test names the address and restates nothing from it.
- Given
two complete selectable declared presets for
Row.idand the settings route atRow.settings rule declared in- When
- an observer selects another starting-and-selectable or player-selectable preset through the settings route, performs an action whose binding differs, and then tries to change one binding through that route
- Then
- preset selection is accepted and its complete copy becomes current
- the new binding performs the action and the old binding does not
- the individual binding change is refused and leaves the current set unchanged
- every later binding lookup reads the new current set
- a mode-selected preset is entered through its cited mode, and this test checks nothing about such a preset
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits free assignment by its row answer
remapping-free-override
Applies when row remapping is Any action any input.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every covered action can move independently to every supported remappable input, including an unused one; conflicts resolve visibly before use; the new binding performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported assignment is refused. Each accepted complete result becomes current for every later lookup. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
each covered action, each supported remappable input including an unused one, and
Row.settings rule declared inforRow.id- When
- an observer independently assigns an action to each supported input, resolves a conflicting assignment, performs the action, and attempts one unsupported assignment
- Then
- every supported independent assignment is accepted, including assignment to the unused input
- a conflict is resolved visibly before use
- the new binding performs the action and the old binding does not
- after an accepted change, each binding row's promises follow its action to the input the current set assigns
- the unsupported assignment is refused and leaves the current set unchanged
- every accepted complete result becomes current for every later lookup
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits free assignment by the default answer
remapping-free-default
Applies when Remapping default is Any action any input and row remapping is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every covered action can move independently to every supported remappable input, including an unused one; conflicts resolve visibly before use; the new binding performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported assignment is refused. Each accepted complete result becomes current for every later lookup. The route is at Row.settings rule declared in; the test restates nothing from it.
- Given
each covered action, each supported remappable input including an unused one, and
Row.settings rule declared inforRow.id- When
- an observer independently assigns an action to each supported input, resolves a conflicting assignment, performs the action, and attempts one unsupported assignment
- Then
- every supported independent assignment is accepted, including assignment to the unused input
- a conflict is resolved visibly before use
- the new binding performs the action and the old binding does not
- after an accepted change, each binding row's promises follow its action to the input the current set assigns
- the unsupported assignment is refused and leaves the current set unchanged
- every accepted complete result becomes current for every later lookup
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-current-setInstance-action-input-log
Row.id permits input and press-style changes by its row answer
remapping-press-style-override
Applies when row remapping is Action and press style.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: every covered action can move to every supported remappable input and use every press style offered for it; the new combination performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported choice is refused. Each accepted complete result becomes current for every later lookup. Offered choices and the route stay at Row.settings rule declared in; the test restates nothing from it.
- Given
each covered action, each supported remappable input, each press style offered for that action by
Row.settings rule declared in, and one unsupported choice- When
- an observer changes the input and offered press style, performs the action with the new combination, then attempts the unsupported choice
- Then
- every supported input change and every offered press-style change is accepted
- the new binding and press style perform the action and the old combination does not
- after an accepted change, each binding row's promises follow its action to the input the current set assigns
- the unsupported choice is refused and leaves the current set unchanged
- every accepted complete result becomes current for every later lookup
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-setting-stateInstance-current-setInstance-action-input-log
Row.id permits input and press-style changes by the default answer
remapping-press-style-default
Applies when Remapping default is Action and press style and row remapping is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: every covered action can move to every supported remappable input and use every press style offered for it; the new combination performs the action and the old one does not. After an accepted change, the contract makes each binding row's promises follow its action to the input the current set assigns. An unsupported choice is refused. Each accepted complete result becomes current for every later lookup. Offered choices and the route stay at Row.settings rule declared in; the test restates nothing from it.
- Given
each covered action, each supported remappable input, each press style offered for that action by
Row.settings rule declared in, and one unsupported choice- When
- an observer changes the input and offered press style, performs the action with the new combination, then attempts the unsupported choice
- Then
- every supported input change and every offered press-style change is accepted
- the new binding and press style perform the action and the old combination does not
- after an accepted change, each binding row's promises follow its action to the input the current set assigns
- the unsupported choice is refused and leaves the current set unchanged
- every accepted complete result becomes current for every later lookup
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-change-logInstance-setting-stateInstance-current-setInstance-action-input-log
Row.id exists in its declared control-set scope
binding-scope-follows-current-set
Applies for every adoption
Binding Row.id belongs to its named preset while that preset is current, where the row names one; otherwise it belongs to Row.platform control set's base or freely remappable set. It exists throughout the selected control set, or only in the cited context where the row names one. For a preset or context that the row does not name, this test checks nothing.
- Given
binding
Row.idon platform rowRow.platform control set- When
- the current set is inspected across its reachable control-set and play contexts
- Then
- the binding belongs to its named preset while that preset is current, where the row names one; otherwise it belongs to the platform's base or freely remappable set
- the binding exists throughout the selected control set, or only in the cited context where the row names one
- for a preset or context that the row does not name, this test checks nothing
- Diagnostics
Instance-current-setInstance-match-trace
Row.id matches only its cited Row.press style performance
binding-matches-cited-performance
Applies for every adoption
For Row.id, when Bind performance under Row.physical input declared in, one action input carries the action at Row.action declared in. The nearest non-matching performance emits nothing from this binding. The test names both addresses and restates nothing from them.
- Given
binding
Row.id, actionRow.action declared in, and the physical input, device, and performance atRow.physical input declared in- When
Bind performancein the current platform, device, method, and set, then the nearest non-matching performance is attempted
- Then
- the matching performance emits one action input carrying the action at
Row.action declared in - the non-matching performance emits nothing from this binding
- the test leaves the physical details to
Row.physical input declared inand restates nothing from it
- the matching performance emits one action input carrying the action at
- Diagnostics
Instance-match-traceInstance-action-input-log
the context of Row.id is decided at the accepted moment
binding-context-settles-at-accepted-moment
Applies for every adoption
For Row.id, the physical match remains provisional until the accepted moment. Its action is a candidate only when the context at Bind context holds then. This test names the address, restates nothing from it, and checks nothing about how an accepted moment is shifted.
- Given
a physical performance matching
Row.idwhose context is cited atBind context- When
- the input is accepted once while the cited context holds and once while it does not
- Then
- the match remains provisional until the accepted moment
- the action at
Row.action declared inis a candidate only when the cited context holds at that moment - this test restates nothing from
Bind contextand checks nothing about how an accepted moment is shifted
- Diagnostics
Instance-match-traceInstance-action-input-log
Row.id exists only while preset Bind preset is current
binding-preset-is-current
Applies for every adoption
Under the contract, preset Bind preset is the starting source set for binding Row.id. Its cited performance can match through a current set derived from that preset, and an accepted change on the current copy does not remove the binding. It cannot match through this row while a set derived from another preset is current.
- Given
binding
Row.idassigned to presetBind preset- When
- its cited physical performance occurs while a set derived from
Bind presetis current, after an accepted change to that current copy, and while a set derived from another preset is current
- its cited physical performance occurs while a set derived from
- Then
Row.idcan match while a set derived fromBind presetis current- an accepted change on that current copy does not remove the binding
Row.idcannot match through this row while a set derived from another preset is current
- Diagnostics
Instance-current-setInstance-match-trace
Row.id shares action input Bind action input consistently
shared-physical-activation-stays-one-input
Applies for every adoption
Under the contract, rows form one shared-activation group only when they can be current together: they belong to the same platform row, either all omit a preset or all name the same preset, have no disjoint cited contexts, and share the physical activation at Row.physical input declared in. Every row that can be current with Row.id agrees on action input Bind action input. For rows in another preset or a disjoint context, this test checks nothing about this shared value. One such input is emitted with every matched binding's action as a candidate. This test checks nothing about a paired Action legibility adoption.
- Given
the physical activation at
Row.physical input declared inshared byRow.idand rows that can be current with it- When
- matching bindings on the same platform row are read from one current set
- Then
- every row that can be current with
Row.id, on the same platform row, all omitting a preset or all naming the same preset, with no disjoint cited contexts, names action inputBind action input - rows in another preset or a disjoint cited context are not in this group, and this test checks nothing about a shared value for those rows
- one
Bind action inputis emitted and carries every matched binding's action as a candidate - this test checks nothing about a paired Action legibility adoption
- every row that can be current with
- Diagnostics
Instance-match-traceInstance-action-input-logInstance-candidate-set
Row.id matches as binding Row.action binding
simpler-input-matches-named-binding
Applies for every adoption
Simpler route Row.id uses the input at Row.alternative declared in. It matches as if it were binding Row.action binding, emits that binding's action input, and contributes the same action. The test names the address and restates nothing from it.
- Given
simpler route
Row.idatRow.alternative declared infor bindingRow.action binding- When
- the cited alternative input is performed and the current set contains the named binding
- Then
- the input matches as if it were
Row.action binding - it emits that binding's action input
- it contributes the same action as the named binding
- the test restates nothing from the cited alternative rule
- the input matches as if it were
- Diagnostics
Instance-match-traceInstance-action-input-log
Row.id has an ordinary route by its row answer
demanding-none-override
Applies when row demanding input is No demanding presses.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer: the action for Row.id has an ordinary route without a setting change, and performing that route emits an action input carrying the action. A demanding input is not its only route.
- Given
binding
Row.idand its cited action and physical-input rules- When
- an observer performs the covered action through its ordinary route without changing a setting
- Then
- the ordinary route produces an action input carrying the action at
Row.action declared in - no demanding input is the action's only route
- an observer, not the running game, judges this
- the ordinary route produces an action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-action-input-log
Row.id has an ordinary route by the default answer
demanding-none-default
Applies when Demanding input default is No demanding presses and row demanding input is Use game default.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer: the action for Row.id has an ordinary route without a setting change, and performing that route emits an action input carrying the action. A demanding input is not its only route.
- Given
binding
Row.idand its cited action and physical-input rules- When
- an observer performs the covered action through its ordinary route without changing a setting
- Then
- the ordinary route produces an action input carrying the action at
Row.action declared in - no demanding input is the action's only route
- an observer, not the running game, judges this
- the ordinary route produces an action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-action-input-log
the demanding press style of Row.id follows simpler-alternative by its row answer
demanding-simpler-press-style-override
Applies when row demanding input is Simpler alternative and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of Row.id as demanding. Its completed demanding route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; failing to finish the demanding route triggers neither route.
- Given
binding
Row.id, its cited demanding press style, and every simpler-inputs row naming it- When
- an observer completes the demanding press style, performs every simpler route without configuration, and separately stops before completion
- Then
- the completed demanding route emits the binding's action input
- every simpler route remains available at the same time and emits the same action through its distinct input
- failure to finish the demanding route emits neither the demanding action input nor a simpler alternative by itself
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the required motion of Row.id follows simpler-alternative by its row answer
demanding-simpler-required-motion-override
Applies when row demanding input is Simpler alternative and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes Row.id demanding because it requires device motion. Its completed motion route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; a non-motion attempt triggers neither route.
- Given
binding
Row.id, its cited required motion, and every simpler-inputs row naming it- When
- an observer completes the required motion, performs every simpler route without configuration, and separately makes a non-motion attempt
- Then
- the completed required-motion route emits the binding's action input
- every simpler route remains available at the same time and emits the same action through its distinct input
- the non-motion attempt emits neither the demanding action input nor a simpler alternative by itself
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the demanding press style of Row.id follows simpler-alternative by the default answer
demanding-simpler-press-style-default
Applies when Demanding input default is Simpler alternative and row demanding input is Use game default and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of Row.id as demanding. Its completed demanding route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; failing to finish the demanding route triggers neither route.
- Given
binding
Row.id, its cited demanding press style, and every simpler-inputs row naming it- When
- an observer completes the demanding press style, performs every simpler route without configuration, and separately stops before completion
- Then
- the completed demanding route emits the binding's action input
- every simpler route remains available at the same time and emits the same action through its distinct input
- failure to finish the demanding route emits neither the demanding action input nor a simpler alternative by itself
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the required motion of Row.id follows simpler-alternative by the default answer
demanding-simpler-required-motion-default
Applies when Demanding input default is Simpler alternative and row demanding input is Use game default and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes Row.id demanding because it requires device motion. Its completed motion route and every declared simpler route stay available together without configuration and emit the same action through distinct inputs; a non-motion attempt triggers neither route.
- Given
binding
Row.id, its cited required motion, and every simpler-inputs row naming it- When
- an observer completes the required motion, performs every simpler route without configuration, and separately makes a non-motion attempt
- Then
- the completed required-motion route emits the binding's action input
- every simpler route remains available at the same time and emits the same action through its distinct input
- the non-motion attempt emits neither the demanding action input nor a simpler alternative by itself
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the demanding press style of Row.id follows player-can-change-it by its row answer
demanding-setting-press-style-override
Applies when row demanding input is Player can change it and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of Row.id as demanding. The observer changes the player-facing demanding-input setting, which is not a control-remapping route, and performs the action with the declared easier current press style; that performance emits the action input. The easier press style does not remove any device motion the binding requires. A stored setting alone is not evidence.
- Given
binding
Row.id, its cited demanding press style, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route- When
- an observer changes the setting and then performs the action with the easier current press style
- Then
- the setting replaces the demanding press style before the binding is used
- the easier press style does not remove any device motion the binding requires
- the observer's easier performance emits the action input carrying the action at
Row.action declared in - the result is judged from performed play and not from a stored setting alone
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-setting-stateInstance-action-input-log
the required motion of Row.id follows player-can-change-it by its row answer
demanding-setting-required-motion-override
Applies when row demanding input is Player can change it and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes Row.id demanding because it requires device motion. The demanding-input setting, which is not a control-remapping route, supplies an easier press style and never relieves the motion requirement; performed play with the required motion emits the action input. A stored setting alone is not evidence.
- Given
binding
Row.id, its cited required motion, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route- When
- an observer changes the setting and then completes the required motion with the easier current press style
- Then
- the setting supplies the easier press style before the binding is used, and the required motion stays required
- the easier press style never relieves the device-motion requirement
- the observer's easier performance with the required motion emits the action input carrying the action at
Row.action declared in - the result is judged from performed play and not from a stored setting alone
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-setting-stateInstance-action-input-log
the demanding press style of Row.id follows player-can-change-it by the default answer
demanding-setting-press-style-default
Applies when Demanding input default is Player can change it and row demanding input is Use game default and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of Row.id as demanding. The observer changes the player-facing demanding-input setting, which is not a control-remapping route, and performs the action with the declared easier current press style; that performance emits the action input. The easier press style does not remove any device motion the binding requires. A stored setting alone is not evidence.
- Given
binding
Row.id, its cited demanding press style, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route- When
- an observer changes the setting and then performs the action with the easier current press style
- Then
- the setting replaces the demanding press style before the binding is used
- the easier press style does not remove any device motion the binding requires
- the observer's easier performance emits the action input carrying the action at
Row.action declared in - the result is judged from performed play and not from a stored setting alone
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-setting-stateInstance-action-input-log
the required motion of Row.id follows player-can-change-it by the default answer
demanding-setting-required-motion-default
Applies when Demanding input default is Player can change it and row demanding input is Use game default and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes Row.id demanding because it requires device motion. The demanding-input setting, which is not a control-remapping route, supplies an easier press style and never relieves the motion requirement; performed play with the required motion emits the action input. A stored setting alone is not evidence.
- Given
binding
Row.id, its cited required motion, and the player-facing demanding-input setting for its declared easier press style, which is not a control-remapping route- When
- an observer changes the setting and then completes the required motion with the easier current press style
- Then
- the setting supplies the easier press style before the binding is used, and the required motion stays required
- the easier press style never relieves the device-motion requirement
- the observer's easier performance with the required motion emits the action input carrying the action at
Row.action declared in - the result is judged from performed play and not from a stored setting alone
- an observer, not the running game, judges this
- Diagnostics
Instance-Row.id-observer-resultInstance-setting-stateInstance-action-input-log
the demanding press style of Row.id follows required-as-written by its row answer
demanding-required-press-style-override
Applies when row demanding input is Required as written and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract treats the press style of Row.id as demanding: completing it emits the action input and stopping before completion emits none from this contract.
- Given
binding
Row.idand its cited demanding press style- When
- an observer completes the demanding press style and separately stops before completion
- Then
- the complete demanding input emits the action input carrying the action at
Row.action declared in - the incomplete demanding input emits no action input from this contract
- an observer, not the running game, judges this
- the complete demanding input emits the action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the required motion of Row.id follows required-as-written by its row answer
demanding-required-required-motion-override
Applies when row demanding input is Required as written and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row overrides the default answer. The contract makes Row.id demanding because it requires device motion: completing the motion emits the action input and a non-motion attempt emits none from this contract.
- Given
binding
Row.idand its cited required motion- When
- an observer completes the required motion and separately makes a non-motion attempt
- Then
- the complete required-motion input emits the action input carrying the action at
Row.action declared in - the non-motion attempt emits no action input from this contract
- an observer, not the running game, judges this
- the complete required-motion input emits the action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the demanding press style of Row.id follows required-as-written by the default answer
demanding-required-press-style-default
Applies when Demanding input default is Required as written and row demanding input is Use game default and row press style is Timed press or Hold or Rapid presses or Repeated presses or Double press or Simultaneous inputs or Input sequence and row motion use is No motion or Optional motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract treats the press style of Row.id as demanding: completing it emits the action input and stopping before completion emits none from this contract.
- Given
binding
Row.idand its cited demanding press style- When
- an observer completes the demanding press style and separately stops before completion
- Then
- the complete demanding input emits the action input carrying the action at
Row.action declared in - the incomplete demanding input emits no action input from this contract
- an observer, not the running game, judges this
- the complete demanding input emits the action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
the required motion of Row.id follows required-as-written by the default answer
demanding-required-required-motion-default
Applies when Demanding input default is Required as written and row demanding input is Use game default and row motion use is Required motion.
Audit class: observer-judged. An observer, not the running game, judges this. The row uses the default answer. The contract makes Row.id demanding because it requires device motion: completing the motion emits the action input and a non-motion attempt emits none from this contract.
- Given
binding
Row.idand its cited required motion- When
- an observer completes the required motion and separately makes a non-motion attempt
- Then
- the complete required-motion input emits the action input carrying the action at
Row.action declared in - the non-motion attempt emits no action input from this contract
- an observer, not the running game, judges this
- the complete required-motion input emits the action input carrying the action at
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
Row.id performs the same action without resembling a failed demanding input
simpler-route-is-distinct
Applies for every adoption
Audit class: observer-judged. An observer, not the running game, judges this. Performing Row.id through Row.alternative declared in emits binding Row.action binding's action input and contributes the same action. Failing to finish the demanding route does not trigger the alternative, and Row.distinction rule declared in keeps the records distinguishable. The test names both addresses and restates nothing from them.
- Given
simpler route
Row.id, its ordinary input atRow.alternative declared in, and its distinction rule atRow.distinction rule declared in- When
- an observer successfully performs the simpler route and separately fails to finish binding
Row.action binding
- an observer successfully performs the simpler route and separately fails to finish binding
- Then
- the successful simpler route emits the named binding's action input and contributes the same action
- the failed demanding route emits no alternative action input by itself
- the two records remain distinguishable under
Row.distinction rule declared in - an observer, not the running game, judges this
- the test restates nothing from either cited rule
- Diagnostics
Instance-Row.id-observer-resultInstance-match-traceInstance-action-input-log
Row.id follows its Row.motion use device-motion rule
device-motion-rule-holds
Applies for every adoption
For Row.id under Row.physical input declared in: Bind motion procedure. This test names the address, restates nothing from it, and checks nothing about device-motion quality.
- Given
binding
Row.idand its physical input and device atRow.physical input declared in- When
- the cited performance and the corresponding motion or non-motion comparison are each attempted
- Then
Bind motion procedure- this test checks nothing about device-motion quality
- Diagnostics
Instance-match-traceInstance-action-input-log
one physical activation emits one action input with all matched candidates
one-physical-activation-emits-one-action-input
Applies for every adoption
Each reachable physical activation emits one action input carrying every matched binding's action as a candidate. N matched actions remain one input with N candidates, never N inputs. Where no activation matches several bindings, this test checks nothing about several candidates.
- Given
each reachable physical activation in the
Instanceadoption, including one that matches several bindings where the adoption declares one- When
- the current set is matched and the contract emits its result to the game
- Then
- the activation emits one action input
- that one input carries every matched binding's action as a candidate
- N matched actions remain one input with N candidates and never become N inputs
- where no activation matches several bindings, this test checks nothing about several candidates
- Diagnostics
Instance-match-traceInstance-action-input-logInstance-candidate-set
the action input stops at the contract boundary
action-input-stops-at-handoff
Applies for every adoption
The contract emits one action input with all matched candidates and stops there. Input forgiveness can supply the accepted moment; Action legibility, when adopted, selects a candidate before one action proposal. Otherwise the game's cited Fixed selection rule owns shared-candidate selection. This test checks nothing about forgiveness windows, offered-action presentation, candidate ordering, refusal of a proposal, or action effects.
- Given
one action input emitted by the
Instanceadoption with all matched candidates- When
- the input crosses the contract boundary
- Then
- the emitted input is handed to Input forgiveness when adopted, which can supply the accepted moment, and then to Action legibility when adopted for candidate selection before one action proposal
- without Action legibility, the game's cited Fixed selection rule owns shared-candidate selection
- this test stops at emission and checks nothing about forgiveness windows, offered-action presentation, candidate ordering, refusal of a proposal, or action effects
- Diagnostics
Instance-action-input-log
control options keeps the order of its steps
control-options-authority-order
Applies for every adoption
The order of the steps is platform, defaults, starting set, accepted control change, current set, physical match, demanding-input answer, simpler route, device-motion rule, one action-input creation, accepted-moment shared-action choice, and one action proposal. A later step does not change an earlier decision.
- Given
a run that reaches platform selection, control setup, a physical activation, and the action-input boundary
- When
- the decision trace is read in order
- Then
- the trace orders platform, defaults, starting set, accepted control change, current set, physical match, demanding-input answer, simpler route, device-motion rule, one action-input creation, accepted-moment shared-action choice, and one action proposal
- a later step does not change an earlier decision
- Diagnostics
Instance-platform-selectionInstance-change-logInstance-current-setInstance-match-traceInstance-action-input-log
the adoption makes no promise beyond control options
control-options-boundaries
Applies for every adoption
The contract makes no promise about system-level remapping, virtual-control layout editing, chord member lists, device-motion quality, or saved profiles. Moving or resizing a touch control while keeping its action is not a control change. Presentation of the current binding is owned by Action legibility when adopted, otherwise by the game's UI rules. Beyond its stated hand-off order, the contract makes no promise about an action input after emission.
- Given
the
Instanceadoption and features adjacent to its control rules- When
- the adoption's promise boundary is reviewed
- Then
- the contract makes no promise about system-level remapping, virtual-control layout editing, chord member lists, device-motion quality, or saved profiles
- moving or resizing a touch control while keeping its action is not a control change
- presentation of the current binding is owned by Action legibility when adopted, otherwise by the game's UI rules
- the contract makes no promise about action-input behavior after emission except the stated hand-off order
- Diagnostics
Instance-declaration-record
empty row sets and absent default answers make no promise
empty-row-sets-make-no-promise
Applies for every adoption
This declaration check reads the adoption, not the running game. Where no platform row exists, no platform receives a physical-control promise, and the adoption makes no default remapping or demanding-input promise; where a platform row exists, this test checks nothing about these statements. Where no preset, binding, or simpler-input row exists, its row set makes its stated empty-set promise; where a row exists, this test checks nothing about that row set.
- Given
the
Instanceadoption, not the running game- When
- a reviewer checks each row set and the two default answers that depend on a platform row
- Then
- where no platform-control-sets row exists, no platform receives a physical-control promise from this adoption; where a row exists, this test checks nothing about this statement
- where no control-presets row exists, no named control preset is offered; where a row exists, this test checks nothing about this statement
- where no action-bindings row exists, no physical input is promised to produce a game action; where a row exists, this test checks nothing about this statement
- where no simpler-inputs row exists, no demanding binding promises a separate simpler input without a setting change; where a row exists, this test checks nothing about this statement
- where no platform-control-sets row exists, this adoption makes no default remapping promise; where a platform row exists, this test checks nothing about this statement
- where no platform-control-sets row exists, this adoption makes no default demanding-input promise; where a platform row exists, this test checks nothing about this statement
- Diagnostics
Instance-declaration-record
declaration check: preset Row.id names a platform row in this adoption
preset-platform-join
Applies for every adoption
This declaration check reads the adoption, not the running game. Preset Row.id must name an existing platform-control-sets row in this adoption: Row.platform control set. When the named platform row is missing or misspelled, the adoption is invalid, and this test fails.
- Given
the
Instanceadoption and presetRow.id, not the running game- When
- a reviewer checks the platform row that it names
- Then
- a platform-control-sets row with id
Row.platform control setexists in this adoption - a missing or misspelled platform row makes the adoption invalid, and this test fails
- a platform-control-sets row with id
- Diagnostics
Instance-declaration-record
declaration check: binding Row.id names a platform row in this adoption
binding-platform-join
Applies for every adoption
This declaration check reads the adoption, not the running game. Binding Row.id must name an existing platform-control-sets row in this adoption: Row.platform control set. When the named platform row is missing or misspelled, the adoption is invalid, and this test fails.
- Given
the
Instanceadoption and bindingRow.id, not the running game- When
- a reviewer checks the platform row that it names
- Then
- a platform-control-sets row with id
Row.platform control setexists in this adoption - a missing or misspelled platform row makes the adoption invalid, and this test fails
- a platform-control-sets row with id
- Diagnostics
Instance-declaration-record
declaration check: binding Row.id names a preset on the same platform
binding-preset-join
Applies for every adoption
This declaration check reads the adoption, not the running game. Binding Row.id must name an existing preset, Bind preset, and that preset must name the binding's platform row, Row.platform control set. When the named preset is missing or names another platform row, the adoption is invalid, and this test fails.
- Given
the
Instanceadoption and bindingRow.id, not the running game- When
- a reviewer checks preset
Bind presetand both platform names
- a reviewer checks preset
- Then
- a control-presets row with id
Bind presetexists in this adoption - that preset names platform row
Row.platform control set - a missing preset, or a preset that names another platform row, makes the adoption invalid, and this test fails
- a control-presets row with id
- Diagnostics
Instance-declaration-record
declaration check: optional-motion binding Row.id has a no-motion binding for the same action
optional-motion-has-no-motion-sibling
Applies when row motion use is Optional motion.
This declaration check reads the adoption, not the running game. The contract requires optional-motion binding Row.id to have another binding for the same action on platform row Row.platform control set and the same preset with motion-use no-motion. Any other shape makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption and optional-motion bindingRow.id, not the running game- When
- a reviewer compares its action, platform row, preset, and motion use with the other action-bindings rows
- Then
- another binding for the same action on platform row
Row.platform control setand the same preset has motion-use no-motion - any other shape makes the adoption invalid, and this test fails
- another binding for the same action on platform row
- Diagnostics
Instance-declaration-record
declaration check: simpler route Row.id names a binding in this adoption
simpler-binding-join
Applies for every adoption
This declaration check reads the adoption, not the running game. The contract limits simpler-inputs rows to bindings whose effective demanding-input answer promises an alternative. Simpler route Row.id must name an existing action-bindings row in this adoption, Row.action binding, and that binding's effective answer must be simpler-alternative. When the named binding is missing or misspelled, or its effective answer is not simpler-alternative, the adoption is invalid, and this test fails.
- Given
the
Instanceadoption and simpler routeRow.id, not the running game- When
- a reviewer checks the binding that it names
- Then
- an action-bindings row with id
Row.action bindingexists in this adoption - that binding's effective demanding-input answer is simpler-alternative
- when the named binding is missing or misspelled, or its effective answer is not simpler-alternative, the adoption is invalid, and this test fails
- an action-bindings row with id
- Diagnostics
Instance-declaration-record
declaration check: every presets-only platform has two selectable complete presets
presets-only-has-complete-choice
Applies for every adoption
This declaration check reads the adoption, not the running game. Under the contract, every platform whose effective answer is presets-only must have at least two presets whose availability is starting-and-selectable or player-selectable, and every preset maps every action bound on that platform. For a platform with another effective answer, this test checks nothing. A missing choice or incomplete preset makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption, not the running game- When
- a reviewer resolves each platform row's effective remapping answer and compares its preset and binding rows
- Then
- each platform whose effective answer is presets-only has at least two control-presets rows whose availability is starting-and-selectable or player-selectable
- every preset for that platform maps every action bound on the platform with a matching action-bindings row
- for a platform with another effective answer, this test checks nothing
- a missing choice or incomplete preset makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: every demanding simpler-alternative binding has a simpler row
simpler-answer-has-row
Applies for every adoption
This declaration check reads the adoption, not the running game. If Row.id has a demanding press style or requires device motion, and its effective answer is simpler-alternative, at least one simpler-inputs row must name it. Otherwise this test checks nothing. A missing simpler row makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption and bindingRow.id, not the running game- When
- a reviewer resolves the binding's effective demanding-input answer and classifies its cited performance
- Then
- if
Row.idhas a demanding press style or requires device motion, and its effective answer is simpler-alternative, at least one simpler-inputs row names it - otherwise this test checks nothing
- a missing simpler row makes the adoption invalid, and this test fails
- if
- Diagnostics
Instance-declaration-record
declaration check: every no-demanding binding has an ordinary route
no-demanding-answer-has-ordinary-route
Applies for every adoption
This declaration check reads the adoption and its cited prose, not the running game. Under an effective no-demanding-presses answer, Row.id must have a non-demanding press style and not require device motion, or have a cited ordinary route to the same action. Under another answer, this test checks nothing. A demanding-only route makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption, bindingRow.id, and its cited prose, not the running game- When
- a reviewer resolves the binding's effective demanding-input answer
- Then
- if the effective answer is no-demanding-presses,
Row.idhas a non-demanding press style and does not require device motion, or its cited prose states an ordinary route to the same action - otherwise this test checks nothing
- a demanding-only route makes the adoption invalid, and this test fails
- if the effective answer is no-demanding-presses,
- Diagnostics
Instance-declaration-record
declaration check: no platform or binding recreates the forbidden effective pair
forbidden-effective-pair-does-not-reappear
Applies for every adoption
This declaration check reads the adoption, not the running game. The contract's demanding-input field forbids a binding from having effective required-as-written on a platform with effective action-and-press-style. A row override that recreates this forbidden pair makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption, not the running game- When
- a reviewer resolves every platform's effective remapping answer and every binding's effective demanding-input answer
- Then
- no binding has effective required-as-written on a platform with effective action-and-press-style
- any platform-row or binding-row override that recreates that pair makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's settings citation covers its effective policy
settings-citation-covers-effective-change-policy
Applies for every adoption
This declaration check reads the adoption and Row.settings rule declared in, not the running game. Under any-action-any-input or action-and-press-style, that citation must state visible conflict handling before use; action-and-press-style must also state the press styles offered for each action. Under swap-only, it must state that a swap exchanges two existing assignments. Under presets-only, it must state that selection replaces the whole set and an individual binding change is refused. Under fixed-bindings, it must state the absence of changes. A missing duty makes the adoption invalid, and this test fails. This test checks nothing about reachability beyond what the citation states.
- Given
the
Instanceadoption, platform rowRow.id, andRow.settings rule declared in, not the running game- When
- a reviewer resolves the row's effective remapping answer and checks the cited rule
- Then
- under any-action-any-input or action-and-press-style, the citation states visible conflict handling before use
- under action-and-press-style, the citation states the press styles offered for each action
- under swap-only, the citation states that a swap exchanges two existing assignments
- under presets-only, the citation states that selection replaces the whole set and an individual binding change is refused
- under fixed-bindings, the citation states the absence of changes
- a missing duty makes the adoption invalid, and this test fails
- this test checks nothing about reachability beyond what the citation states
- Diagnostics
Instance-declaration-record
declaration check: rows sharing an activation agree on one action input
shared-action-input-declaration-agrees
Applies for every adoption
This declaration check reads the adoption and its cited physical activations and contexts, not the running game. Under the contract, one group contains only rows that can be current together: they use the same platform row, either all omit a preset or all name the same preset, have no disjoint cited contexts, and share one physical activation. Rows in mutually exclusive presets or disjoint contexts are not one group, and this test checks nothing about whether their action-input values agree. Every row in a multi-binding group supplies and agrees on one value, and the emitted input carries every matched action as a candidate. A lone binding's name can remain implicit, and this test checks nothing about a shared value for a lone binding. A missing, different, or split value makes the adoption invalid, and this test fails. This test checks nothing about a paired Action legibility adoption.
- Given
the
Instanceadoption and the physical activations, platforms, presets, and contexts described by its binding rows and citations, not the running game- When
- a reviewer groups rows that can be current together and share one physical activation
- Then
- one group contains only rows on the same platform row that either all omit a preset or all name the same preset, have no disjoint cited contexts, and share one physical activation
- rows in mutually exclusive presets or disjoint cited contexts are not one group, and this test checks nothing about whether their action-input values agree
- every group with several bindings supplies one action-input value shared by every row in that group
- the emitted input carries every matched binding's action as a candidate
- a lone binding's action-input name can remain implicit, and this test checks nothing about a shared value for a lone binding
- a missing, different, or split shared value makes the adoption invalid, and this test fails
- this test checks nothing about a paired Action legibility adoption
- Diagnostics
Instance-declaration-recordInstance-candidate-set
declaration check: no two rows mean the same platform, preset, or binding
rows-do-not-duplicate-meaning
Applies for every adoption
This declaration check reads the adoption and its cited prose, not the running game. No two rows can mean the same platform, preset, binding, or simpler alternative for one binding. The contract sets no maximum row count. A duplicate meaning makes the adoption invalid, and this test fails.
- Given
the
Instanceadoption and its cited prose, not the running game- When
- a reviewer compares every pair of rows in each row set
- Then
- no two platform-control-sets rows mean the same platform, edition, devices, and policy scope
- no two control-presets rows mean the same preset
- no two action-bindings rows mean the same binding
- no two simpler-inputs rows mean the same alternative for one binding
- the contract imposes no maximum row count
- a duplicate meaning makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's platform citation states its duty
platform-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.platform declared in, not the running game. The citation must name one platform or edition and its supported devices; different control behavior belongs in another row. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.platform declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.platform declared innames one platform or edition and its supported devices, with different control behavior in another row- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's methods citation states its duty
methods-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.methods declared in, not the running game. The citation must list every complete input method for Row.id and any required switch. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.methods declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.methods declared inlists every complete input method forRow.idand any required switch between methods- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's settings citation states its duty
settings-rule-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.settings rule declared in, not the running game. The citation must always state Row.id's control menu. Where the platform declares a preset, it must state preset selection. Under effective any-action-any-input or action-and-press-style, it must state conflict handling; action-and-press-style must also state the press styles offered for each action. Under effective fixed-bindings, it must state the explicit absence of changes. For a duty outside its stated condition, this test checks nothing. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.settings rule declared in, not the running game- When
- a reviewer resolves
Row.id's effective remapping answer and checks the citation's meaning
- a reviewer resolves
- Then
Row.settings rule declared instatesRow.id's control menu- where the platform has a control-presets row, the citation states preset selection; where it has none, this test checks nothing about preset selection
- under effective any-action-any-input or action-and-press-style, the citation states conflict handling; under another effective answer, this test checks nothing about conflict handling
- under effective action-and-press-style, the citation states the press styles offered for each action; under another effective answer, this test checks nothing about the offered press styles
- under effective fixed-bindings, the citation states the explicit absence of changes; under another effective answer, this test checks nothing about the absence of changes
- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: preset Row.id's selection citation states its duty
preset-selection-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.selection rule declared in, not the running game. The citation must state the route that selects preset Row.id and makes its matching bindings current. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.selection rule declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.selection rule declared instates the route that selects presetRow.idand makes its matching action-binding rows current- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's action citation states its duty
binding-action-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.action declared in, not the running game. The citation must name the game action that Row.id contributes as a candidate. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.action declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.action declared innames the game action thatRow.idcontributes as a candidate- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's physical-input citation states its duty
binding-physical-input-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.physical input declared in, not the running game. The citation must name Row.id's physical input, supplying device, and Bind performance duty. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.physical input declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.physical input declared innames the physical input, its supplying device, andBind performance dutyforRow.id- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's context citation states its duty
binding-context-citation-duty
Applies for every adoption
This declaration check reads the adoption and Bind context, not the running game. The citation must state the context in which binding Row.id exists. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andBind context, not the running game- When
- a reviewer checks the citation's meaning
- Then
Bind contextstates the context in which bindingRow.idexists- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's alternative citation states its duty
simpler-alternative-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.alternative declared in, not the running game. The citation must state the physical input and ordinary press style that perform the same action as binding Row.action binding without a setting change. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.alternative declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.alternative declared instates the physical input and ordinary press style that perform the same action as bindingRow.action bindingwithout a setting change- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
declaration check: Row.id's distinction citation states its duty
simpler-distinction-citation-duty
Applies for every adoption
This declaration check reads the adoption and Row.distinction rule declared in, not the running game. The citation must prove that success on Row.id cannot be mistaken for failure to finish binding Row.action binding. A missing duty makes the adoption invalid, and this test fails. The test names the address and restates nothing from it.
- Given
the
Instanceadoption andRow.distinction rule declared in, not the running game- When
- a reviewer checks the citation's meaning
- Then
Row.distinction rule declared inproves that success onRow.idcannot be mistaken for failure to finish bindingRow.action binding- a missing duty makes the adoption invalid, and this test fails
- Diagnostics
Instance-declaration-record
control options holds for the whole run
control-options-hold
Applies for every adoption
Across Inputs scope, every accepted control change follows the platform's effective remapping answer and every refused change is refused; every binding matches only under its cited performance and emits one action input; every demanding binding meets its effective answer; every simpler route produces the same action distinguishably; every device-motion rule holds; and no physical activation produces more than one action input.
- Holds
every accepted control change followed the platform's effective remapping answer and every refused change was refused; every binding matched only under its cited performance and emitted one action input; every demanding binding met its effective answer; every simpler route produced the same action distinguishably; every device-motion rule held; no physical activation produced more than one action input
- Seeds
Inputs seeds- Scope
Inputs scope- Diagnostics
Instance-platform-selectionInstance-change-logInstance-current-setInstance-match-traceInstance-action-input-logInstance-observer-resultInstance-setting-state