Striker Trait Equation DSL (STEDSL)
A machine-readable, human-readable notation for describing the effects of any entity in the Striker RPG rules. Characters, gear, cyberware, geneware, vehicles, and strikers can all be expressed as sequences of trait equations.
This document serves both as a reference for human authors writing SRD content, and as a specification for parser implementations (primarily EquationParser.ts).
1. Top-level structure
An effect string is a sequence of segments separated by -> (arrow). Each segment is a sequence of items separated by : (colon, meaning and).
segment0 -> segment1 -> segment2
item0 : item1 : item2
The first segment is the action declaration — it identifies what is being done, by whom, and when. Everything that follows the first -> is the outcome of that action.
feint(bonus-act, R) -> imp-sv(Insight)=8+M(Deception)+R(Cbt-Melee)
└─── action ─────── └─────────────── outcome ─────────────────────
A full weapon usage string has three outcome phases:
chk(TC)= +M(Cbt-Ranged) -> audio=800 : ray=30 : dmg(hp,elec)=6d8 -> 13ep t=act
└─── action (check) ─── └──────── hit effects ───────────────── └── cost ──
Here the action is the check — the roll pair chk(TC)=formula is simultaneously the action declaration and the first outcome phase.
Alternative modes (◊)
The ◊ character separates alternative selections (ammunition types, operating modes). Everything before the first ◊ is a shared prefix; each subsequent ◊-delimited block is one option.
chk(TC)= +M(Wpn-Rifles (Cbt-Ranged)) -> Strength(min)=-1 : recoil=L : audio=600
◊ ap(rounds) -> range=50|150 : dmg(hp,prc)=1d6 +M : pen=3 -> 1hp [10act]
◊ hp(rounds) -> range=50|150 : dmg(hp,prc)=2d4 +M -> 1hp [12act]
◊ std(rounds) -> range=50|150 : dmg(hp,prc)=1d6 +M : pen=1 -> 1hp [12act]
The shared check line applies to all alternatives. The first ◊ is a body/alts boundary, not a logical OR with the check line.
2. Action declaration
The action declaration is the opening clause of any effect string. It establishes:
- What action is being performed (the
ActionKey) - How long it takes (one or more
Periodvalues) - Rank requirement (optional
R,2R, etc.) - Aspect (optional provenance or autoaspect qualifier)
Form
actionKey(period[, period][, R|NR][, aspect])
Multiple periods are comma-separated. The + suffix on a period means at minimum this duration, ongoing:
gen(main-act) — generic action, one main act
know(free-act) — knowledge check, free action
feint(bonus-act, R) — feint, bonus action, ≥1 rank required
search(min+) — search, at least one minute
search(min+, R, Bio|Tech) — search with rank and provenance aspect
bypass(min, R, Bio|Tech) — bypass, one minute, rank required
repair(hr+, R, Bio|Tech) — repair, at least one hour
modify(day+, R, Bio|Tech) — modify, at least one day
resequence(permanent) — resequence action (geneware installation)
implant(permanent) — implant action (cyberware installation)
attack(main-act) — standard attack
melee-att(main-act) — melee attack
ranged-att(main-act) — ranged attack
strike(rnd & day+, 1fp) - strike action (go into hyperspace), featuring a compound timing.
Rank qualifier
R after the timing means the action requires at least 1 rank in the parent skill. 2R requires 2, and so on. Actions with no rank requirement omit R entirely.
Aspect qualifier
The aspect qualifier restricts which characters can perform the action, or classifies its character. Up to two aspects may appear:
| Aspect | Meaning |
|---|---|
B | Body autoaspect — physically based |
S | Skill autoaspect — technique based |
B|S | Either body or skill |
Bio | Biological provenance (living systems, geneware) |
Tech | Technological provenance (machines, cyberware) |
Bio|Tech | Either biological or technological |
Both aspect categories may appear together: search(min+, R, B, Bio|Tech).
Multi-key actions
Some actions can be triggered by multiple keys (e.g. a technique that augments either a check or a save):
chk|sv(C)=+M(Skill) — usable as either a check or a save
Actions as state flags (opLine)
In gear opLine strings the action-declaration slot is instead the item's current operational state — bare flags indicating what the item is currently doing or wearing status:
inactive, worn ◊ s2a -> 1hp 2ep t=bonus-act
└── state flags ──── └─ state transition ─
s2a (scaffold-to-artefact) is the label of the available transition, not an ActionKey. The -> cost that follows it gives the timing and resource cost of performing the transition.
For installation operations the action declaration is the action:
implant -> rst(corr)+2 : Agility+B+1
resequence -> hp(v)+20 : Health+2
CostLine — no action declaration
The costLine of a gear entry carries only flat property assignments — no action declaration:
cost=1400|2 : wt=0.8 : CC=13
3. Separators at a glance
| Token | Meaning |
|---|---|
-> | Phase separator — leads to / costs |
: | Item separator — and (concurrent) |
, | Also an item separator (legacy, especially in armour lists) |
◊ | Alternative selector — or, pick one |
| | Logical or within a single item |
< | Before (preceding phase qualifier) |
4. Trait assignments
Simple assignment
key=value
Sets a trait to a value. No space around =.
audio=800
Strength(min)=-6
Agility+B(max)=5
range=20|60
wt=0.8
cost=1400|2
CC=13
The value can be:
- An integer:
800,-6,5 - A float:
0.5 - A pipe-delimited range pair (two integers):
20|60— typically short|long range, or cost|rarity - A bare capital letter:
M,H,L— used for stepped traits likerecoil=H - A formula (see §8):
6d8,+M(Cbt-Ranged),8+M(Health)
Additive modification
key+N key-N
Adds or subtracts N from the current trait value.
rst(prc)+1
TC+1
pen-1
Agility+B+1
The scan for the ±N suffix is right-to-left and depth-aware, so + or - signs inside parentheses are not split on. chk(Stealth+B,ls,gs)+1 correctly produces key chk(Stealth+B,ls,gs), modifier +1.
Qualified keys
Many traits have a parenthetical qualifier as part of their key:
rst(frc) — resistance to force
dmg(hp,prc) — piercing health-point damage
fld(elec) — electrical field
mishap(cyberware)=2
hp(v,curr) — vital HP current value
Strength(min)=-6 — minimum Strength required
Agility+B(max)=5 — cap on Agility+B modifier
The qualifier is syntactically part of the key, not a separate token.
5. Challenge keys
Used as the argument to roll pairs (§6). All use parentheses for sub-qualifiers:
| Key | Meaning |
|---|---|
TC | Target Challenge — standard opposed roll |
TC,A | Area TC — the roll targets an area (all creatures within) |
SC | Skill Challenge — untargeted skill contest |
PC | Psion Challenge |
CC | Complexity Challenge — artefact complexity rating |
CC,Q | CC (Quality) — enhanced quality level of the artefact |
CC,S | CC (Security) — security complexity route |
C | Generic challenge |
6. Roll pairs
A roll pair is always two consecutive tokens: a roll type with its challenge qualifier, then = with the formula.
chk(TC)= +M(Wpn-Rifles (Cbt-Ranged))
sv(SC)= +M(Resolve)
imp-sv(Agility+B)= 8+M
psv(C)= 10+M(Perception)
set(TC,A)= 12
| Roll | Meaning |
|---|---|
chk(C)= | Contested check — roll d20 + formula vs challenge C |
chk+(C)= | Boosted check — effectively max(d20, 10) + formula |
sv(C)= | Save — roll d20 + formula vs challenge C |
imp-sv(Skill)= | Imposed save — the attacker imposes a save on the target; the qualifier is the saving skill, not the challenge (which is the attacker's result) |
psv(C)= | Passive check — sets a passive value (10 + formula) rather than rolling |
set(C)= | Sets a static challenge value, e.g. set(TC,A)= 12 |
The skill name in +M(...) may itself include parenthetical category qualifiers:
chk(TC)= +M(Wpn-Rifles (Cbt-Ranged))
↑ category in parens — depth-aware splitting handles this
7. Formulae and modifiers
Formulae appear as the value in a roll pair or assignment. Terms are space-separated and additive unless qualified.
| Notation | Meaning |
|---|---|
+M(Skill) | Add the character's M modifier in Skill |
+M*(Skill) | Add the resource-improved M modifier |
+R(Skill) | Add the character's rank in Skill |
+½•R(Skill) | Add half rank |
+(QualifierSkill) | Add the qualifier skill bonus (e.g. +(Aegis)) |
NdX | Roll N X-sided dice, e.g. 6d8, 2d6 |
fp•d6 | Roll focus-points × d6 |
weap | The weapon's own damage value |
N | A literal integer constant |
+M(Str) +M(Skill) | Sum of two modifiers |
Fractional operators: ½•, ⅓•, ¼•, ⅕• multiply the following term.
Grouping: 2•(fp•d6 +M(Psimetabolism)) — the parenthesised sub-formula is multiplied.
8. Resource costs
A resource cost is a compact Namount notation — value directly adjoined to the resource key, no operator symbol:
3hp 2ep 1fp
Multiple resource costs are separated by spaces (the parser normalises them to :), but when followed by a /period consumption token they are written space-separated as a unit:
3hp 1ep /8•hr
20hp /10•act
2ep /10•rnd
Resources:
| Key | Meaning |
|---|---|
hp | Health points |
ep | Energy points |
fp | Focus points |
Multiplier suffixes on cost values: 5K = 5,000 · 1.2K = 1,200 · 2M = 2,000,000.
9. Action timing (t=)
The t= token marks the action cost of performing the preceding effect. It is distinct from consumption rate (§10).
t=main-act
t=bonus-act
t=act
t=8•act (8 acts — unusual, but valid)
t=instant
t=w/act (alongside another act)
Legacy bracket form is also accepted by the parser ([main-act], [8act]) but t= is the canonical authoring form.
All period values
free-act bonus-act re-act main-act move-act act w/act w/move-act turn contest instant rnd min scene hr day rest week permanent
act is a generic any action timing. w/act means performed as part of / accompanying another action.
10. Consumption rate (/period)
/period marks the rate at which a gear item consumes resources while operating. It follows a resource cost block and always belongs to that block, not to any preceding item.
3hp 1ep /8•hr consumed every 8 hours (suits, powered armour)
20hp /10•act capacity = 20hp over 10 actions (tracker form)
2ep /10•rnd capacity = 2ep over 10 rounds (tracker form)
1hp /act 1hp per act
Action/round-based consumption (/N•act, /N•rnd) is rendered as a tick-off tracker in the character sheet, with circles representing individual units. Time-based consumption (/hr, /day, etc.) is rendered as bold text.
t= vs /period:
t=main-actis the cost to fire the weapon once — paid every time you pull the trigger.20hp /10•actis the magazine capacity — the total resource available before reloading/recharging.
11. Damage
dmg(hp,frc)=2d6 +M force damage to health points
dmg(hp,prc)=1d8 +M piercing hp damage
dmg(hp,elec)=6d8 electrical hp damage
dmg(ep)=3d4 energy point damage
dmg(fp)=2d4 focus point damage
Damage types
frc prc sls elec fire cold heat corr (corrosive) psn (poison) rad (radiation)
Untyped: dmg(hp), dmg(ep), dmg(fp).
Penetration
pen=3 penetrates 3 points of armour resistance
pen+1 adds 1 to penetration
Field damage
A field is an ambient environmental effect, not a targeted attack. Same type keys, prefixed fld:
fld(press)=0.25 pressure field intensity
fld(elec)=2d6 electrical field
12. Resistance
rst(frc)+2 +2 resistance to force damage
rst(corr)+3
rst(all)+1 +1 to all damage types
All resistance types mirror the damage types: frc prc sls elec fire cold heat corr psn rad plus all and any.
13. Area of effect
All values in metres unless otherwise stated.
| Notation | Shape |
|---|---|
range=20|60 | Single-target; short/long range pair |
ray=30 | Line from caster, 30 m |
cone=20 | Cone, 20 m length |
spray=40 | Spray arc, 40 m |
radius=10 | Circle, 10 m radius |
14. Audio
audio=800 the loudness of an effect (800 = very loud, 20 = very quiet)
audio is the output loudness of a weapon or device — it tells observers and sensors how detectable the effect is.
Not to be confused with audiosense:
audiosense=20 the character's hearing sense (targeting increment 20 m)
audiosense=N is a character trait; audio=N is a gear trait.
15. Sense traits
Character sense traits use the same trait=N form:
lightsense=30
gravitysense=20
sonarsense=40
magnetosense=15
olfactorsense=10
audiosense=20
allsense=20
Sense properties D (darksense), S (sensitive), DS (both) are appended with +:
lightsense+D
lightsense+DS
lightsense+20|D (range 20 with darksense property)
16. Conditions
cond(prone)
cond(stunned)
cond(frightened)
cond(invisible)
cond(paralysed)
cond(mental,any)
cond(physical,any)
Full list: asleep charmed confused dazed diseased driven dulled enthralled flanked frightened hypersleep invisible paralysed prone restrained sickened stunned unconscious
17. Vulnerability and immunity
vuln(elec) vulnerable to electrical damage
vuln(psn|rad) vulnerable to poison or radiation
imm(sv,Psimetabolism) immunity to saves involving Psimetabolism
18. Mishaps
Cyberware and some geneware carries a mishap rating. A character's mishap in a category equals the highest value across all installed items.
mishap(cyberware)=2
mishap(insanity)=1
mishap(mortality)=3
Categories: cyberware electric exhaustion insanity lycanthropy mortality poison teleporter
19. Targets
tg(self) self-targeting
tg(touch) touch range
tg(opp) one opponent
tg(opp,see) one opponent in sight
tg(ally) one ally
tg(ally|opp) ally or opponent
tg(area,see) all targets observed
tg(area,in-range) all targets in area/range
tg(area,triggered) creatures triggering a sensor
tg(artefact) a machine/vehicle/bot
tg(vehicle) a vehicle
tg(effect) targeting an existing effect
20. Qualifier operators
These modify or restrict the preceding item.
| Form | Meaning |
|---|---|
regain(day) | The preceding item can only be used again after 1 day |
regain(3•day) | Only regainable after 3 days |
freq(1/day) | Usable up to once per day |
after(1•day) | Not available until 1 day has passed |
after(1•day,short rest) | After 1 day or a short rest |
if(using off-hand) | Only applies if the stated condition holds |
21. Advantage and disadvantage
adv(chk,Agility+B) advantage on checks involving Agility+B
dadv(chk,Cbt-Melee) disadvantage on Cbt-Melee checks
dadv(sv,Psimetabolism) disadvantage on Psimetabolism saves
imm(sv,Psimetabolism) immunity (cannot be subject to saves involving this skill)
22. Op-line prefixes (installation state)
The opLine of a piece of gear describes its operational state — what mode it is in and the cost to shift between states.
inactive, worn ◊ s2a -> 1hp 2ep t=bonus-act
inactive, worn— the item's current-state flags (read as bare flags before the first◊)s2a— scaffold-to-artefact: the action of converting from scaffold (unprinted) to artefact (ready-to-use)-> 1hp 2ep t=bonus-act— the cost of that conversion
For enhancements that are permanently installed:
implant -> rst(corr)+2 : Agility+B+1 applied permanently when implanted
resequence -> hp(v)+20 : Health+2 applied permanently when resequenced
The implanted / resequenced bare flags indicate current installation state.
23. Common full patterns
Skill — simplest form
gen(main-act) -> chk|sv(C)=+M(Skill)
The gen action with no rank requirement. chk|sv means the player may roll as either a check or a save.
Skill technique requiring rank
feint(bonus-act, R) -> imp-sv(Insight)=8+M(Deception)+R(Cbt-Melee)
The technique costs a bonus action and requires at least 1 rank. On success it imposes an Insight save on the target, with difficulty set by the attacker's Deception modifier plus their Cbt-Melee rank.
Engineering action
repair(hr+, R, Bio|Tech) -> chk(CC)=+M(Machinery) + (CC,Q - CC)
At least one hour, rank required, applies to Bio or Tech provenance artefacts. The check formula includes the quality difference CC,Q - CC (quality CC minus base CC).
Ranged weapon (single-target)
chk(TC)= +M(Wpn-Rifles (Cbt-Ranged)) -> Strength(min)=-1 : recoil=L : audio=600 : range=20|60 : dmg(hp,prc)=2d6 +M : pen=3 -> 3hp [10act]
Phase 0: roll d20 + Rifles M vs TC.
Phase 1: hit effects — minimum Strength, light recoil, audio level, range, damage, penetration.
Phase 2: resource cost — 3hp per 10 acts (magazine capacity, tracker).
Ranged weapon (area)
chk(TC,A)= +M(Wpn-Spray (Cbt-Ranged)) -> Strength(min)=-2 : audio=400 -> imp-sv(Agility+B)= 8+M -> spray=40 : dmg(hp,fire)=3d6 -> 20hp /10•act
Phase 0: area check (TC,A) vs all targets in area.
Phase 1: weapon properties.
Phase 2: imposed save — targets must save Agility+B vs 8+M attacker.
Phase 3: spray shape + damage.
Phase 4: consumption — 20hp over 10 acts.
Melee weapon
chk(TC)= +M(Wpn-Blades-Long (Cbt-Melee)) -> Strength(min)=0 : recoil=L : audio=20 : dmg(hp,sls)=1d8 +M
No resource cost phase — melee weapons have no ammo.
Environmental suit
rst(frc)+1 : rst(heat)+2 : Agility+B(max)=5 -> 3hp 1ep /8•hr
Phase 0: defensive properties while worn.
Phase 1: consumption — 3hp + 1ep per 8 hours of operation.
Cyberware (permanent enhancement)
implant -> rst(corr)+2 : Agility+B+1
Implanting applies the effects permanently. No consumption.
Cyberware (activated ability)
active (implanted) -> chk(TC)= +M(Cbt-Melee) -> dmg(hp,elec)=2d6 -> 2ep t=main-act
The active (implanted) guard means the effect is only available when the item is active and installed.
Geneware (periodic — Lycanthropy)
Periodic geneware effects (transformations) are not applied to base character traits. The player applies them manually when the transformation completes.
Psi technique
chk(SC)= +M(Psimetabolism) -> tg(opp,see)=1 -> dmg(fp)=2d4 -> 2fp t=main-act : regain(rest)
Phase 0: SC check + Psimetabolism modifier.
Phase 1: targets one visible opponent.
Phase 2: focus-point damage.
Phase 3: 2fp cost, main action; can only be used again after a rest.
24. Output forms
A STEDSL expression can be rendered in three ways depending on context.
Full form
The raw notation, exactly as written. Skill and technique names are shown in full within their M(...) / R(...) qualifiers. No values are pre-computed.
chk(TC)= +M(Wpn-Handguns (Cbt-Ranged)) -> dmg(hp,prc)=2d6+M -> 2ep t=act
Context form
Like Full form, but skill references that are obvious from the surrounding context (e.g. the weapon's own category) may be omitted. Kept when ambiguous or unusual, such as M(Strength) in a melee attack that would normally use a combat skill.
Applied form
Used on printed character sheets. The M, M*, R, and R* references are resolved to the character's actual values at the time of printing. The formula is wrapped in [...] and rendered in midtone grey immediately after the calculated value.
Rule: evaluate the entire sub-expression that contains the M/R reference numerically, then render as VALUE[formula] — where VALUE is the computed number (with sign) and [formula] is the original expression without the embedded value.
| Raw (after M*-resolution) | Applied form | Notes |
|---|---|---|
M*[6] | 6[M*] | standalone |
+M*[6] | +6[M*] | sign-prefix; value positive |
+M[-2] | -2[+M] | sign-prefix; value negative → + moves into formula |
10+M*[6] | 16[10+M*] | additive constant: 10+6=16 |
8+M[10] | 18[8+M] | additive constant: 8+10=18 |
4•M*[11] | 44[4•M*] | integer coefficient: 4×11=44 |
½•M*[11] | 5[½•M*] | fraction coefficient: floor(½×11)=5 |
3+½•M*[6] | 6[3+½•M*] | const + fraction: floor(3+½×6)=6 |
3+⅓•M*[11] | 6[3+⅓•M*] | const + fraction: floor(3+⅓×11)=6 |
fp•d6+M[5] | fp•d6+5[M] | non-numeric prefix (fp•d6) left unchanged |
M* and R* — the star suffix means the character spends the minimum required resource (fp or ep) on completing the conjugate, so M* = M + min_cost. The printed value is therefore a minimum guarantee; spending more resource raises it further. See §17.
25. Gear catalogues: cost/op/usage structure
Every Gear entry has three expression fields:
| Field | Purpose | Typical form |
|---|---|---|
costLine | Cost, weight, complexity | `cost=1400 |
opLine | Operational state and s2a cost | inactive, worn ◊ s2a -> 1hp 2ep t=bonus-act |
usage[].effect | Effect at action time | chk(TC)= +M(...) -> dmg(...) |
cost=value|rarity — pipe-separated; left is the credit cost, right is the rarity tier.
wt=artefact|scaffold — pipe-separated; left is the artefact weight, right (if present) is scaffold weight.
CC=N — Complexity Challenge rating (analogous to TC/SC/PC for artefact complexity; not a credit deduction).