@opencharacter/swn-revised 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -10
- package/content/classes/adventurer.yaml +2 -0
- package/content/classes/expert.yaml +2 -0
- package/content/classes/psychic.yaml +6 -6
- package/content/classes/warrior.yaml +2 -0
- package/content/foci/psychic-training.yaml +1 -0
- package/content/foci/specialist.yaml +1 -1
- package/content/foci/wild-psychic-talent.yaml +1 -0
- package/content/kits/barbarian.yaml +17 -0
- package/content/kits/blade.yaml +17 -0
- package/content/kits/civilian.yaml +12 -0
- package/content/kits/credits.yaml +11 -0
- package/content/kits/gunslinger.yaml +16 -0
- package/content/kits/hacker.yaml +18 -0
- package/content/kits/medic.yaml +18 -0
- package/content/kits/scout.yaml +19 -0
- package/content/kits/soldier.yaml +16 -0
- package/content/kits/technician.yaml +19 -0
- package/content/kits/thief.yaml +19 -0
- package/content/partial-classes/psychic.yaml +4 -6
- package/content/styles/expert-nimble.yaml +11 -0
- package/content/styles/expert-smart.yaml +11 -0
- package/content/styles/expert-smooth.yaml +11 -0
- package/content/styles/psychic-adept.yaml +11 -0
- package/content/styles/psychic-seer.yaml +11 -0
- package/content/styles/warrior-leader.yaml +11 -0
- package/content/styles/warrior-melee.yaml +11 -0
- package/content/styles/warrior-ranged.yaml +11 -0
- package/content/techniques/psychic-succor.yaml +16 -3
- package/content/weapons/advanced-bow.yaml +0 -2
- package/content/weapons/anti-vehicle-laser.yaml +0 -2
- package/content/weapons/combat-rifle.yaml +0 -2
- package/content/weapons/combat-shotgun.yaml +0 -2
- package/content/weapons/conversion-bow.yaml +0 -2
- package/content/weapons/crude-pistol.yaml +0 -2
- package/content/weapons/distortion-cannon.yaml +0 -2
- package/content/weapons/heavy-machine-gun.yaml +0 -2
- package/content/weapons/hydra-array.yaml +0 -2
- package/content/weapons/laser-pistol.yaml +0 -2
- package/content/weapons/laser-rifle.yaml +0 -2
- package/content/weapons/mag-pistol.yaml +0 -2
- package/content/weapons/mag-rifle.yaml +0 -2
- package/content/weapons/musket.yaml +0 -2
- package/content/weapons/plasma-projector.yaml +0 -2
- package/content/weapons/primitive-bow.yaml +0 -2
- package/content/weapons/railgun.yaml +0 -2
- package/content/weapons/revolver.yaml +0 -2
- package/content/weapons/rifle.yaml +0 -2
- package/content/weapons/rocket-launcher.yaml +0 -2
- package/content/weapons/semi-auto-pistol.yaml +0 -2
- package/content/weapons/shear-rifle.yaml +0 -2
- package/content/weapons/shotgun.yaml +0 -2
- package/content/weapons/sniper-rifle.yaml +0 -2
- package/content/weapons/spike-thrower.yaml +0 -2
- package/content/weapons/submachine-gun.yaml +0 -2
- package/content/weapons/thermal-pistol.yaml +0 -2
- package/content/weapons/thunder-gun.yaml +0 -2
- package/content/weapons/void-carbine.yaml +0 -2
- package/content/weapons/vortex-cannon.yaml +0 -2
- package/content/weapons/wheatcutter-belt.yaml +0 -2
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.json +140 -85
- package/dist/index.js +1 -1
- package/dist/release.json +5068 -3511
- package/i18n/en/content.yaml +105 -63
- package/i18n/en/rules.yaml +35 -22
- package/pack.yaml +2 -2
- package/package.json +2 -2
- package/rules/advancement.yaml +30 -9
- package/rules/character.yaml +30 -5
- package/rules/checks.yaml +8 -2
- package/rules/combat.yaml +11 -2
- package/rules/creation.yaml +164 -366
- package/rules/gear.yaml +16 -4
- package/rules/layout.yaml +4 -2
- package/rules/psionics.yaml +64 -4
- package/rules/start.yaml +46 -32
- package/rules/tags.yaml +11 -0
package/README.md
CHANGED
|
@@ -16,6 +16,9 @@ edition only, with the author's permission; nothing from the paid deluxe edition
|
|
|
16
16
|
pnpm add @opencharacter/swn-revised @opencharacter/engine
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
This release needs spec 0.3: `@opencharacter/engine` 0.3.0 or later. An engine for an older
|
|
20
|
+
spec refuses it (`spec-version-unsupported`).
|
|
21
|
+
|
|
19
22
|
The package's default export is the pack's release, ready for `loadRuleset`; its English text is
|
|
20
23
|
`@opencharacter/swn-revised/i18n/en` (also as JSON, `release.json` and `i18n/en.json`).
|
|
21
24
|
|
|
@@ -29,9 +32,9 @@ const { ruleset } = loaded;
|
|
|
29
32
|
|
|
30
33
|
// A random character from the quick creation tables: every table is rolled.
|
|
31
34
|
const blank = {
|
|
32
|
-
specVersion: '0.
|
|
35
|
+
specVersion: '0.3.0',
|
|
33
36
|
id: 'basil',
|
|
34
|
-
packs: [{ id: 'swn-revised', version: '0.
|
|
37
|
+
packs: [{ id: 'swn-revised', version: '0.2.0' }],
|
|
35
38
|
creating: true,
|
|
36
39
|
};
|
|
37
40
|
const run = startAction(ruleset, blank, {
|
|
@@ -82,11 +85,12 @@ sheet.values['swn-revised:saves.physical']?.value; // 15 less the better of Str
|
|
|
82
85
|
Learning table, or three rolls split between the Growth and Learning tables; a class (an
|
|
83
86
|
Adventurer picks two partial classes); a Psychic's two disciplines or a Partial Psychic's
|
|
84
87
|
one; one focus level, plus the Expert's non-combat and the Warrior's combat one; a hobby
|
|
85
|
-
skill; hit points; an equipment package or 2d6 × 100 credits
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
skill; hit points; an equipment package or 2d6 × 100 credits (the class's own package,
|
|
89
|
+
its `kit`, recommended).
|
|
90
|
+
- `quick` and `random`, the quick creation tables: class and style (the eight styles, d8),
|
|
91
|
+
background (d20), two disciplines for a psychic (d6), foci from the style's row (d6) and a
|
|
92
|
+
bonus skill (d20). `random` rolls every table, so an automatic run finishes the character;
|
|
93
|
+
the equipment package is drawn among the ten packages and the credits roll.
|
|
90
94
|
- Every skill pick follows the book: a skill's first pick is level-0, the second level-1,
|
|
91
95
|
and a third is any other non-psychic skill below level-1. A psychic skill raised to level-1
|
|
92
96
|
brings a free level-1 technique.
|
|
@@ -118,12 +122,62 @@ sheet.values['swn-revised:saves.physical']?.value; // 15 less the better of Str
|
|
|
118
122
|
- **Combat:** attack bonus, `attack` (d20 + attack bonus + combat skill, −2 untrained, +
|
|
119
123
|
modifier, +1 for energy weapons, +2 for burst fire) against the target's AC, damage, Shock on
|
|
120
124
|
a miss, ammunition and `reload`; Armor Class from the best armor, a shield and Dexterity.
|
|
121
|
-
- **System Strain:** permanent from cyberware, temporary from drugs; `use-drug
|
|
122
|
-
`trigger-cyberware`
|
|
125
|
+
- **System Strain:** permanent from cyberware, temporary from drugs; `use-drug`,
|
|
126
|
+
`trigger-cyberware` and Psychic Succor (given the target's `strain.total` and `strain.max`)
|
|
127
|
+
refuse what would pass Constitution. `rest` restores hit points, Strain,
|
|
123
128
|
Effort and the once-a-scene abilities.
|
|
124
129
|
- **Encumbrance:** Readied (equipped) items up to half Strength, Stowed up to Strength, and the
|
|
125
|
-
lightly and heavily encumbered bands.
|
|
130
|
+
lightly and heavily encumbered bands. An equipment package readies its items, then stows
|
|
131
|
+
readied gear and all but one weapon while they fit, so a weak character starts within the
|
|
132
|
+
limits where the package allows; armor stays worn.
|
|
126
133
|
- **Equipment:** every armor, ranged, melee and heavy weapon, general equipment and
|
|
127
134
|
pharmaceutical, and cyberware item of the free edition, with the equipment packages.
|
|
128
135
|
|
|
129
136
|
Starships, vehicles, drones and gear mods are not modeled.
|
|
137
|
+
|
|
138
|
+
## Add-on packs
|
|
139
|
+
|
|
140
|
+
A pack that depends on `swn-revised` can add content of its types, and creation offers it with the
|
|
141
|
+
core's, in the guided picks and in the random draws (a die with a face per option, the book's die
|
|
142
|
+
with the core content alone):
|
|
143
|
+
|
|
144
|
+
- **Classes and backgrounds** join the full procedure. A class names its recommended package in
|
|
145
|
+
`kit`.
|
|
146
|
+
- **Styles** (`style`) join the quick tables: the class, the six scores and, for the book's
|
|
147
|
+
styles only, `table`, the style's column of the quick foci table. A style without one picks
|
|
148
|
+
its foci as the full procedure does (one of any kind, plus the class's extra non-combat and
|
|
149
|
+
combat ones).
|
|
150
|
+
- **Equipment packages** (`kit`) are content: a package's own `unpack` action (`listed: false`)
|
|
151
|
+
adds its gear and sets the credits. The starting-gear action adds the package as the entry
|
|
152
|
+
`kit`, runs its `unpack`, then removes it, so only the gear stays.
|
|
153
|
+
- **Foci** join every focus pick; the tags `needs-psionics` and `no-psionics` limit one to
|
|
154
|
+
characters with psionic access or without it.
|
|
155
|
+
- **Open enums:** weapon `ammo`, gear `category` and `kind` (what a weapon reloads with), and
|
|
156
|
+
armor `category`. An add-on lists new values in `extendEnums`
|
|
157
|
+
(`'swn-revised:types.weapon.fields.ammo': [spikes]`) and names them in its text.
|
|
158
|
+
- **Naming what an add-on adds:** it names each added value, option or key in its own text,
|
|
159
|
+
under the key this pack would use, and `createText` finds it there when the app passes the
|
|
160
|
+
ruleset's `enumOrigins`, `optionOrigins` and `familyOrigins`. For example,
|
|
161
|
+
`spikes` added to `swn-revised:types.weapon.fields.ammo` is
|
|
162
|
+
`types.weapon.fields.ammo.values.spikes.name: Spike magazine` (through `enumOrigins`).
|
|
163
|
+
- **Tagged steps** take an add-on's rules-level `option` and `changes` effects: `creation.kit`
|
|
164
|
+
(the starting package pick: an added option replaces the package), `creation.focus` and
|
|
165
|
+
`level-up.focus` (a focus pick at creation or on advancement: an added option is taken instead
|
|
166
|
+
of a focus), `creation.finish` (the last changes of both creation actions, before creation
|
|
167
|
+
ends), `level-up.level` (each new level's skill points), `rest.night` (a night's rest) and
|
|
168
|
+
`rest.scene` (the end of a scene).
|
|
169
|
+
|
|
170
|
+
- **Skills and psychic disciplines** are families: an added skill joins `skill` and `general` or
|
|
171
|
+
`combat` (`families: { 'swn-revised:skill': [xenology], 'swn-revised:general': [xenology] }`), a
|
|
172
|
+
discipline `skill` and `psychic`, and the add-on declares its `skills.<key>.level` (tagged
|
|
173
|
+
`skill` and `skill.general`, `skill.combat` or `skill.psychic`), `.dice` and `.credit`, and its
|
|
174
|
+
check tag (`check.<key>`). The core's changes reach them through `fieldId`, so creation,
|
|
175
|
+
`raise-skill`, focus points and `skill-check` gain, raise and roll them. The enums that hold a
|
|
176
|
+
skill are open and take its key: a background's entries (`freeSkill`, `quick1`, `quick2`,
|
|
177
|
+
`growth1`–`growth6`, `learning1`–`learning8`), a focus's `skill`, a weapon's `skill`, and the
|
|
178
|
+
parameters `gain-skill.entry`, `focus-skill-points.entry`, `raise-skill.skill` and
|
|
179
|
+
`skill-check.skill`; a discipline's also `psionics.discipline`, a technique's `discipline` and
|
|
180
|
+
`pick-technique.discipline`, so a new skill level picks its techniques. The Partial Psychic's
|
|
181
|
+
and Psychic Training's discipline choices take it through `extendChoices`. The psychic classes
|
|
182
|
+
grant each trained discipline's core technique (`core: true`, its `discipline` the key), so an
|
|
183
|
+
added discipline's core technique comes with it.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
id: classes.psychic
|
|
2
2
|
type: class
|
|
3
|
+
fields:
|
|
4
|
+
kit: kits.medic
|
|
3
5
|
effects:
|
|
4
6
|
- { target: psionics.access, op: set, value: "'unrestricted'" }
|
|
5
7
|
grants:
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- { item: techniques.telepathic-contact, when: skills.telepathy.level >= 0 }
|
|
11
|
-
- { item: techniques.personal-apportation, when: skills.teleportation.level >= 0 }
|
|
8
|
+
# Each discipline the psychic has grants its core technique, an add-on's discipline too.
|
|
9
|
+
- forEach: keysOf('psychic')
|
|
10
|
+
when: "fieldOf('skills.{psychic}.level', x) >= 0"
|
|
11
|
+
item: { query: { type: technique, where: item.core && item.discipline == x } }
|
|
@@ -31,6 +31,6 @@ choices:
|
|
|
31
31
|
}
|
|
32
32
|
recommend: "'fix'"
|
|
33
33
|
effects:
|
|
34
|
-
- target: { fields: { where: "item.id == '
|
|
34
|
+
- target: { fields: { where: "item.id == fieldId('skills.{skill}.dice', pick.value)" } }
|
|
35
35
|
op: atLeast
|
|
36
36
|
value: self.level + 2
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: kits.barbarian
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.spear'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.light-primitive-armor'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'armor.shield'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'weapons.knife'", equipped: true } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.rations-1-day'", quantity: 7 } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.rope-tl0'" } }
|
|
17
|
+
- { type: set, field: credits.current, value: 500 }
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: kits.blade
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.monoblade-sword'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.woven-body-armor'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'armor.secure-clothing'" } }
|
|
13
|
+
- { type: addItem, entry: { item: "'weapons.thermal-knife'", equipped: true } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.lazarus-patch'" } }
|
|
17
|
+
- { type: set, field: credits.current, value: 50 }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
id: kits.civilian
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'armor.secure-clothing'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
12
|
+
- { type: set, field: credits.current, value: 700 }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
id: kits.credits
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- { id: credits, kind: roll, tags: [creation], parts: [{ dice: 2d6 }] }
|
|
8
|
+
- id: gear
|
|
9
|
+
kind: changes
|
|
10
|
+
changes:
|
|
11
|
+
- { type: set, field: credits.current, value: steps.credits.total * 100 }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
id: kits.gunslinger
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-pistol'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.armored-undersuit'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'weapons.monoblade-knife'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.power-cell-a'", quantity: 8 } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
16
|
+
- { type: set, field: credits.current, value: 100 }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
id: kits.hacker
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-pistol'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.secure-clothing'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'gear.postech-toolkit'" } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.spare-parts'", quantity: 3 } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.power-cell-a'", quantity: 2 } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.dataslab'" } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.metatool'" } }
|
|
17
|
+
- { type: addItem, entry: { item: "'gear.line-shunt'", quantity: 2 } }
|
|
18
|
+
- { type: set, field: credits.current, value: 100 }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
id: kits.medic
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-pistol'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.secure-clothing'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'gear.lazarus-patch'", quantity: 4 } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.lift'", quantity: 2 } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.medkit'" } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
17
|
+
- { type: addItem, entry: { item: "'gear.bioscanner'" } }
|
|
18
|
+
- { type: set, field: credits.current, value: 25 }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
id: kits.scout
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-rifle'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.armored-vacc-suit'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'weapons.knife'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.survey-scanner'" } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.survival-kit'" } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.binoculars-tl3'" } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.power-cell-a'", quantity: 8 } }
|
|
17
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
18
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
19
|
+
- { type: set, field: credits.current, value: 25 }
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
id: kits.soldier
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.combat-rifle'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.woven-body-armor'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'weapons.knife'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.ammo-20-rounds'", quantity: 4 } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
16
|
+
- { type: set, field: credits.current, value: 100 }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
id: kits.technician
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-pistol'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.armored-undersuit'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'weapons.monoblade-knife'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.postech-toolkit'" } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.spare-parts'", quantity: 6 } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.power-cell-a'", quantity: 4 } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
17
|
+
- { type: addItem, entry: { item: "'gear.dataslab'" } }
|
|
18
|
+
- { type: addItem, entry: { item: "'gear.metatool'" } }
|
|
19
|
+
- { type: set, field: credits.current, value: 200 }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
id: kits.thief
|
|
2
|
+
type: kit
|
|
3
|
+
actions:
|
|
4
|
+
- id: unpack
|
|
5
|
+
listed: false
|
|
6
|
+
steps:
|
|
7
|
+
- id: gear
|
|
8
|
+
kind: changes
|
|
9
|
+
changes:
|
|
10
|
+
- { type: addItem, entry: { item: "'weapons.laser-pistol'", equipped: true } }
|
|
11
|
+
- { type: addItem, entry: { item: "'armor.armored-undersuit'", equipped: true } }
|
|
12
|
+
- { type: addItem, entry: { item: "'weapons.monoblade-knife'", equipped: true } }
|
|
13
|
+
- { type: addItem, entry: { item: "'gear.climbing-harness'" } }
|
|
14
|
+
- { type: addItem, entry: { item: "'gear.low-light-goggles'" } }
|
|
15
|
+
- { type: addItem, entry: { item: "'gear.power-cell-a'", quantity: 2 } }
|
|
16
|
+
- { type: addItem, entry: { item: "'gear.backpack-tl0'", equipped: true } }
|
|
17
|
+
- { type: addItem, entry: { item: "'gear.compad'" } }
|
|
18
|
+
- { type: addItem, entry: { item: "'gear.metatool'" } }
|
|
19
|
+
- { type: set, field: credits.current, value: 25 }
|
|
@@ -10,9 +10,7 @@ choices:
|
|
|
10
10
|
effects:
|
|
11
11
|
- { target: psionics.discipline, op: set, value: pick.value }
|
|
12
12
|
grants:
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- { item: techniques.telepathic-contact, when: skills.telepathy.level >= 0 }
|
|
18
|
-
- { item: techniques.personal-apportation, when: skills.teleportation.level >= 0 }
|
|
13
|
+
# Each discipline the psychic has grants its core technique, an add-on's discipline too.
|
|
14
|
+
- forEach: keysOf('psychic')
|
|
15
|
+
when: "fieldOf('skills.{psychic}.level', x) >= 0"
|
|
16
|
+
item: { query: { type: technique, where: item.core && item.discipline == x } }
|
|
@@ -6,15 +6,28 @@ fields:
|
|
|
6
6
|
core: true
|
|
7
7
|
actions:
|
|
8
8
|
# Heals by Biopsionics level (level-0 only stabilizes) and adds System Strain to the target:
|
|
9
|
-
# two points if they were mortally wounded. The Effort is the app's to Commit.
|
|
9
|
+
# two points if they were mortally wounded. The Effort is the app's to Commit. A target whose
|
|
10
|
+
# System Strain can't take it isn't helped.
|
|
10
11
|
- id: succor
|
|
11
12
|
tags: [psionics]
|
|
12
13
|
params:
|
|
13
14
|
mortallyWounded: { type: boolean, default: false }
|
|
14
15
|
participants:
|
|
15
|
-
target:
|
|
16
|
-
|
|
16
|
+
target:
|
|
17
|
+
max: 1
|
|
18
|
+
fields:
|
|
19
|
+
strain.total: { type: integer }
|
|
20
|
+
strain.max: { type: integer }
|
|
21
|
+
results: [healed, failed]
|
|
17
22
|
steps:
|
|
23
|
+
- id: strained
|
|
24
|
+
kind: outcome
|
|
25
|
+
when: >-
|
|
26
|
+
size(participants.target) > 0 && has(participants.target[0].strain.total)
|
|
27
|
+
&& has(participants.target[0].strain.max)
|
|
28
|
+
&& participants.target[0].strain.total + (params.mortallyWounded ? 2 : 1)
|
|
29
|
+
> participants.target[0].strain.max
|
|
30
|
+
result: "'failed'"
|
|
18
31
|
- id: heal
|
|
19
32
|
kind: roll
|
|
20
33
|
when: skills.biopsionics.level >= 1
|