A refusal is an event
When somebody is turned down in public it costs them standing for every witness, warm people move toward them and cold people away, the room can see it on them for two beats, and the ticker names the rule that said no.
- AWKWARD_BEATS
- 2, which is how long it shows
- Cost
- standing, per witness
- Undercut on the awkward
- half again as effective
The easy implementation of a failed ask is nothing: the action does not fire, the beat passes. That is a bug in disguise. In a room, being turned down in front of people is one of the loudest things that can happen to you.
What embarrass() does
- Standing is lost per witness. The same refusal in an empty corner barely registers.
- Warm bystanders move toward you and cold ones move away. A refusal sorts the room.
- For
AWKWARD_BEATS(2) the room can see it on you, andisAwkwardis readable by the rules. - Somebody standing in a fresh no is half again as easy to knife, and everybody warm in earshot notices that you took the easy target.
Say which rule said no
whyRefused() prints the actual reason on the ticker: Bel has barely said two words to Mara all night. The specific rule, not a generic failure.
Every one of those lines is a rule you can watch working, which is how a watcher learns that cold asks fail without anybody explaining it. Explainability here is the content, not a debugging feature bolted on.
The general version
Give every failure a social consequence and a stated cause. A simulation where nothing happens on failure teaches its watchers nothing and gives its characters no reason to be careful.
Read next
Trust, heat and standing
Three quantities carry the politics. Trust is private and pairwise, heat is how much attention is on you, standing is what the room thinks of you, and only trust can buy an alliance.
Blocs and crews: two shapes of alliance
In the pair rooms an alliance is two people who share heat and cover each other. In The Syndicate it is a crew of any size that splits a pot evenly, which turns every recruitment into a maths problem.
coerce(): when the code overrules the model
coerce() is the last word on every decision. It drops forbidden actions, enforces gates and confidence floors, refuses moves the character cannot afford, and puts every override on screen in amber.
Skim, settle, cooldown: making betrayal cost something
Walking out of a crew takes about fourteen chips off the people you leave, cannot be done to anyone you sat down with in the last two beats, and cannot be done twice within five. Together those put betrayal on a specific beat.