T08 iter 5: the DARVO sequence machine
Resolution step 3 (GR-R06), the last unimplemented step: - GR-D02 binding: one stage per consecutive round, DENY then ATTACK then REVERSE, regardless of the player's later Stress. - GR-D03 DENY: turn one face-up, unsolved, unprotected Problem face down and Deny it. Under the U3 default no legal target is a no-op and the sequence still advances. - GR-D04 ATTACK: one extra Attack under the normal relation rules, then place the Focus token beside the target even if it was cancelled. - GR-D05 REVERSE: flip Focus to Blame, +1 Stress to the holder, one Protection to the owner, unless the holder's GROUND-ND rejects it. Under the U5 default the owner takes -2 either way and the sequence ends. - GR-D06 early end: a Support through a Bond that predates this round's Support step cancels the stage and ends the sequence, and the placed Focus token is removed. GROUND-GR ends it after the stage resolves. - GR-D07: the marker returns to OFF, so a later End can re-trigger. The Attack rules are now one routine shared by the chosen ATTACK Action and the DARVO extra Attack, so GR-A06..A09 cannot drift between them. Stage targets are named by their own command during Reveal, validated against what the stage admits: DENY needs an eligible Problem, ATTACK another player, and only a player with a live sequence may choose. 18 scenarios pass; AM-1 coverage 47/58 (81%), up from 41/58. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
290ad06c31
commit
0e92535f11
5 changed files with 513 additions and 61 deletions
48
scenarios/ground/gr-d03-darvo-deny.yaml
Normal file
48
scenarios/ground/gr-d03-darvo-deny.yaml
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
scenario: ground/gr-d03-darvo-deny
|
||||
description: >
|
||||
The DENY stage turns one face-up, unsolved, unprotected Problem face
|
||||
down and Denies it (GR-D03), then the sequence advances to ATTACK
|
||||
(GR-D02). A protected Problem is not a legal DENY target (GR-A11).
|
||||
covers: [GR-D02, GR-D03, GR-P01]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.darvo": Deny
|
||||
"problems.2.face_up": true
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
# GR-D02: only a player with a live sequence names a stage target.
|
||||
- actor: P2
|
||||
cmd: choose_darvo_target
|
||||
args: { problem: 1 }
|
||||
- actor: P1
|
||||
cmd: choose_darvo_target
|
||||
args: { problem: 1 }
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: ProblemDenied
|
||||
problem: 1
|
||||
- kind: DarvoAdvanced
|
||||
player: 0
|
||||
stage: Attack
|
||||
state:
|
||||
"problems.1.denied": true
|
||||
"problems.1.face_up": false
|
||||
"players.0.darvo": Attack
|
||||
rejects: [4]
|
||||
53
scenarios/ground/gr-d04-darvo-attack.yaml
Normal file
53
scenarios/ground/gr-d04-darvo-attack.yaml
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
scenario: ground/gr-d04-darvo-attack
|
||||
description: >
|
||||
The ATTACK stage makes one extra Attack under the normal relation
|
||||
rules and places the Focus token beside the target (GR-D04), then
|
||||
advances to REVERSE.
|
||||
covers: [GR-D04, GR-T03]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.darvo": Attack
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
# GR-D04: the extra Attack targets another player.
|
||||
- actor: P1
|
||||
cmd: choose_darvo_target
|
||||
args: { target: P1 }
|
||||
- actor: P1
|
||||
cmd: choose_darvo_target
|
||||
args: { target: P2 }
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: StressSet
|
||||
player: 1
|
||||
stress: 3
|
||||
- kind: FocusPlaced
|
||||
owner: 0
|
||||
target: 1
|
||||
- kind: DarvoAdvanced
|
||||
player: 0
|
||||
stage: Reverse
|
||||
state:
|
||||
"players.1.stress": 3
|
||||
"focus.0": 1
|
||||
"players.0.darvo": Reverse
|
||||
# GR-L03: the extra Attack forms a Rivalry like any other.
|
||||
"relations.0-1": Rivalry
|
||||
rejects: [4]
|
||||
54
scenarios/ground/gr-d05-darvo-reverse.yaml
Normal file
54
scenarios/ground/gr-d05-darvo-reverse.yaml
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
scenario: ground/gr-d05-darvo-reverse
|
||||
description: >
|
||||
The REVERSE stage flips Focus to Blame in front of the Focus holder,
|
||||
gives them +1 Stress and the owner one Protection token, then the
|
||||
owner takes −2 Stress and the sequence ends (GR-D05, GR-D07).
|
||||
covers: [GR-D05, GR-D07, GR-T01]
|
||||
provisional: true
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.darvo": Reverse
|
||||
"players.0.stress": 3
|
||||
"focus.0": 1
|
||||
commands:
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: FocusFlippedToBlame
|
||||
owner: 0
|
||||
target: 1
|
||||
- kind: StressSet
|
||||
player: 1
|
||||
stress: 3
|
||||
- kind: ProtectionGained
|
||||
player: 0
|
||||
- kind: StressSet
|
||||
player: 0
|
||||
stress: 1
|
||||
- kind: DarvoEnded
|
||||
player: 0
|
||||
state:
|
||||
"players.1.blame_from": [0]
|
||||
"players.1.stress": 3
|
||||
"players.0.protection": 1
|
||||
"players.0.stress": 1
|
||||
# GR-D07: the marker is OFF, so a new sequence can trigger later.
|
||||
"players.0.darvo": Off
|
||||
"focus": {}
|
||||
rejects: []
|
||||
43
scenarios/ground/gr-d06-darvo-early-end.yaml
Normal file
43
scenarios/ground/gr-d06-darvo-early-end.yaml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
scenario: ground/gr-d06-darvo-early-end
|
||||
description: >
|
||||
A Support through a Bond that existed before this round cancels the
|
||||
current stage and ends the sequence; the placed Focus token is removed
|
||||
(GR-D06, GR-A04, GR-L05).
|
||||
covers: [GR-D06, GR-L05]
|
||||
provisional: false
|
||||
seed: 42
|
||||
setup:
|
||||
players: 3
|
||||
preset: standard-3p
|
||||
patch:
|
||||
"lead": 0
|
||||
"players.0.darvo": Attack
|
||||
"focus.0": 2
|
||||
"relations.0-1": Bond
|
||||
commands:
|
||||
- actor: P2
|
||||
cmd: select_action
|
||||
args: { action: SUPPORT, target: P1 }
|
||||
- actor: P1
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: P3
|
||||
cmd: select_action
|
||||
args: { action: INVESTIGATE, problem: 3 }
|
||||
- actor: SYSTEM
|
||||
cmd: reveal
|
||||
- actor: P1
|
||||
cmd: choose_darvo_target
|
||||
args: { target: P3 }
|
||||
- actor: SYSTEM
|
||||
cmd: resolve
|
||||
expect:
|
||||
events:
|
||||
- kind: DarvoEnded
|
||||
player: 0
|
||||
state:
|
||||
"players.0.darvo": Off
|
||||
# GR-D06: the stage never fired, so P3 took no extra Attack.
|
||||
"players.2.stress": 2
|
||||
"focus": {}
|
||||
rejects: []
|
||||
Loading…
Add table
Add a link
Reference in a new issue