Common mistakes
The failures that produce no error at all — collected in one place.
Every item here is silent. None of them produce an error; all of them produce a rule that looks right and does nothing.
$.stat('might') instead of $.stat('might')
Reads by display name, so it breaks the moment anyone renames the stat. A stat nobody has
reads 0, so the rule keeps running with a wrong number.
A var in a rule body
Not a step, and it takes the whole body with it. The rule does not partially run; it does not run.
Treating a missing field as 0
It is null, and null loses every comparison including <. A rule gated on
infection < 5 fires on nobody who lacks the field.
Reading $.player when you meant the party
$.player is the host only. A rule about everyone uses $.party — otherwise the engine
can refuse a sleep while a companion starves and your plugin cannot tell.
Pricing a per-turn system off $.event.minutes
In a clockless game those minutes are the narrator's estimate. A wordy turn becomes seven times more expensive than a terse one.
refuse where you meant veto
refuse stops the player's action. veto stops one proposed event. Answering another
plugin's event with refuse tells a player standing still that hunger clawed them out of a
sleep they never started.
→ Steps
Freezing a dial's value into a literal
Correct until someone retunes the dial, then silently wrong with two numbers that disagree.
Passing zero to $.damage()
Damage floors at 1, so a dial tuned to zero still costs a point. Branch around the step instead.
→ Steps
Putting a number in narration
The narrator never sees mechanics. $.narrate("fever reduced by 2") breaks voice; write
the sentence a player should read.
→ Steps