@opencharacter/orc-sf-2e 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.
Files changed (34) hide show
  1. package/README.md +6 -12
  2. package/content/backgrounds/raised-by-belief.yaml +4 -1
  3. package/content/classes/witchwarper/anchors/core-memories.yaml +3 -215
  4. package/content/feats/ancestry/android-lore.yaml +4 -8
  5. package/content/feats/ancestry/barathu-lore.yaml +4 -8
  6. package/content/feats/ancestry/borai-lore.yaml +4 -8
  7. package/content/feats/ancestry/extra-devotion.yaml +4 -8
  8. package/content/feats/ancestry/fixation.yaml +53 -1
  9. package/content/feats/ancestry/kasatha-lore.yaml +4 -8
  10. package/content/feats/ancestry/lashunta-lore.yaml +4 -8
  11. package/content/feats/ancestry/pahtra-lore.yaml +4 -8
  12. package/content/feats/ancestry/prismeni-lore.yaml +4 -8
  13. package/content/feats/ancestry/shirren-lore.yaml +4 -8
  14. package/content/feats/ancestry/skittermander-lore.yaml +4 -8
  15. package/content/feats/ancestry/ysoki-lore.yaml +4 -8
  16. package/content/feats/envoy/effortless-influencer.yaml +4 -0
  17. package/content/feats/skill/assurance.yaml +57 -30
  18. package/content/features/envoy/style/from-the-shadows.yaml +1 -1
  19. package/content/features/solarian/re-forge-solar-weapon.yaml +19 -24
  20. package/content/features/spellcasting/archetype-repertoire.yaml +1 -1
  21. package/content/heritages/warblood-vesk.yaml +18 -1
  22. package/content/spells/shield.yaml +1 -0
  23. package/dist/i18n/en.js +1 -1
  24. package/dist/i18n/en.json +41 -54
  25. package/dist/index.js +1 -1
  26. package/dist/release.json +1446 -5662
  27. package/i18n/en/ancestries.yaml +1 -0
  28. package/i18n/en/ancestry-feats.yaml +40 -0
  29. package/i18n/en/witchwarper.yaml +0 -54
  30. package/pack.yaml +2 -2
  31. package/package.json +2 -2
  32. package/rules/spellcasting.yaml +0 -4
  33. package/rules/strikes.yaml +6 -91
  34. package/upgrades/0.1.1-to-0.2.0.yaml +18 -0
package/README.md CHANGED
@@ -28,9 +28,9 @@ const { ruleset } = loaded;
28
28
 
29
29
  // A new character, made by the random creation start: every pick is drawn, so it finishes.
30
30
  const blank = {
31
- specVersion: '0.1.0',
31
+ specVersion: '0.2.0',
32
32
  id: 'new-character',
33
- packs: [{ id: 'orc-sf-2e', version: '0.1.0' }],
33
+ packs: [{ id: 'orc-sf-2e', version: '0.2.0' }],
34
34
  creating: true,
35
35
  };
36
36
  const created = startAction(ruleset, blank, {
@@ -236,16 +236,10 @@ reads it as below. These are the pack's provisional calls; a table may rule othe
236
236
  other creatures' sheets, starships and drones; most harmony and quantum field effects; skill
237
237
  feats that change time or what the GM tells you; more than half the spells (utility,
238
238
  summoning, counteracting, illusions, areas over time); the rituals' outcomes; services.
239
- - **Format gaps** (each filed as a spec-change issue; the pack works around it):
240
- - Formulas can't test a string's prefix
241
- ([#21](https://github.com/pixelqueue/opencharacter/issues/21)): the solarian's form
242
- templates are collected into a set field (`solarian.forms`) to find them on a weapon.
243
- - An action's choice step can't take its options from a list
244
- ([#22](https://github.com/pixelqueue/opencharacter/issues/22)): a modular weapon's damage
245
- types and Core Memories' skills are written options, each gated by `when`.
246
- - A grant can't preset the granted item's choices
247
- ([#23](https://github.com/pixelqueue/opencharacter/issues/23)): Assurance takes its skill
248
- from grant state; feats with nested choices can't be granted preset.
239
+ - **Format gaps** (the pack works around it):
240
+ - No upgrade step moves a pick from one choice to another, so saved picks can't follow a
241
+ merged choice: the operative's specialization skill feat stays one copied choice per
242
+ specialization.
249
243
 
250
244
  ## Sources
251
245
 
@@ -6,7 +6,10 @@ effects:
6
6
  value: { tag: skill.lore.custom1 }
7
7
  when: "!('skill.lore.custom1' in skills.chosen)"
8
8
  - { target: skills.trainings, op: add, value: 1 }
9
- grants: [{ item: feats.skill.assurance }]
9
+ grants:
10
+ - item: feats.skill.assurance
11
+ when: size(picksOf('divine-skill')) > 0
12
+ choices: { skill: [{ option: { formula: "picksOf('divine-skill')[0]" } }] }
10
13
  choices:
11
14
  - { id: boost, unique: background-boosts, from: { type: boost } }
12
15
  - { id: free-boost, unique: background-boosts, from: { type: boost } }
@@ -36,222 +36,10 @@ actions:
36
36
  - id: skill
37
37
  kind: choice
38
38
  recommend: 'options[0]'
39
- options:
40
- - id: acrobatics
41
- when: "'skill.acrobatics' in skills.trained || 'skill.acrobatics' in skills.chosen"
42
- changes:
43
- - { type: set, field: witchwarper.memorySkill, value: "'skill.acrobatics'" }
44
- - id: arcana
45
- when: "'skill.arcana' in skills.trained || 'skill.arcana' in skills.chosen"
46
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.arcana'" }]
47
- - id: athletics
48
- when: "'skill.athletics' in skills.trained || 'skill.athletics' in skills.chosen"
49
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.athletics'" }]
50
- - id: computers
51
- when: "'skill.computers' in skills.trained || 'skill.computers' in skills.chosen"
52
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.computers'" }]
53
- - id: crafting
54
- when: "'skill.crafting' in skills.trained || 'skill.crafting' in skills.chosen"
55
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.crafting'" }]
56
- - id: deception
57
- when: "'skill.deception' in skills.trained || 'skill.deception' in skills.chosen"
58
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.deception'" }]
59
- - id: diplomacy
60
- when: "'skill.diplomacy' in skills.trained || 'skill.diplomacy' in skills.chosen"
61
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.diplomacy'" }]
62
- - id: intimidation
63
- when: "'skill.intimidation' in skills.trained || 'skill.intimidation' in skills.chosen"
64
- changes:
65
- - { type: set, field: witchwarper.memorySkill, value: "'skill.intimidation'" }
66
- - id: medicine
67
- when: "'skill.medicine' in skills.trained || 'skill.medicine' in skills.chosen"
68
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.medicine'" }]
69
- - id: nature
70
- when: "'skill.nature' in skills.trained || 'skill.nature' in skills.chosen"
71
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.nature'" }]
72
- - id: occultism
73
- when: "'skill.occultism' in skills.trained || 'skill.occultism' in skills.chosen"
74
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.occultism'" }]
75
- - id: performance
76
- when: "'skill.performance' in skills.trained || 'skill.performance' in skills.chosen"
77
- changes:
78
- - { type: set, field: witchwarper.memorySkill, value: "'skill.performance'" }
79
- - id: piloting
80
- when: "'skill.piloting' in skills.trained || 'skill.piloting' in skills.chosen"
81
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.piloting'" }]
82
- - id: religion
83
- when: "'skill.religion' in skills.trained || 'skill.religion' in skills.chosen"
84
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.religion'" }]
85
- - id: society
86
- when: "'skill.society' in skills.trained || 'skill.society' in skills.chosen"
87
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.society'" }]
88
- - id: stealth
89
- when: "'skill.stealth' in skills.trained || 'skill.stealth' in skills.chosen"
90
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.stealth'" }]
91
- - id: survival
92
- when: "'skill.survival' in skills.trained || 'skill.survival' in skills.chosen"
93
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.survival'" }]
94
- - id: thievery
95
- when: "'skill.thievery' in skills.trained || 'skill.thievery' in skills.chosen"
96
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.thievery'" }]
97
- - id: lore-academia
98
- when: "'skill.lore.academia' in skills.trained || 'skill.lore.academia' in skills.chosen"
99
- changes:
100
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.academia'" }
101
- - id: lore-alcohol
102
- when: "'skill.lore.alcohol' in skills.trained || 'skill.lore.alcohol' in skills.chosen"
103
- changes:
104
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.alcohol'" }
105
- - id: lore-android
106
- when: "'skill.lore.android' in skills.trained || 'skill.lore.android' in skills.chosen"
107
- changes:
108
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.android'" }
109
- - id: lore-animal
110
- when: "'skill.lore.animal' in skills.trained || 'skill.lore.animal' in skills.chosen"
111
- changes:
112
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.animal'" }
113
- - id: lore-art
114
- when: "'skill.lore.art' in skills.trained || 'skill.lore.art' in skills.chosen"
115
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.lore.art'" }]
116
- - id: lore-augmentation
117
- when: "'skill.lore.augmentation' in skills.trained || 'skill.lore.augmentation' in skills.chosen"
118
- changes:
119
- - type: set
120
- field: witchwarper.memorySkill
121
- value: "'skill.lore.augmentation'"
122
- - id: lore-barathu
123
- when: "'skill.lore.barathu' in skills.trained || 'skill.lore.barathu' in skills.chosen"
124
- changes:
125
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.barathu'" }
126
- - id: lore-borai
127
- when: "'skill.lore.borai' in skills.trained || 'skill.lore.borai' in skills.chosen"
128
- changes:
129
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.borai'" }
130
- - id: lore-business
131
- when: "'skill.lore.business' in skills.trained || 'skill.lore.business' in skills.chosen"
132
- changes:
133
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.business'" }
134
- - id: lore-cooking
135
- when: "'skill.lore.cooking' in skills.trained || 'skill.lore.cooking' in skills.chosen"
136
- changes:
137
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.cooking'" }
138
- - id: lore-corporate
139
- when: "'skill.lore.corporate' in skills.trained || 'skill.lore.corporate' in skills.chosen"
140
- changes:
141
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.corporate'" }
142
- - id: lore-games
143
- when: "'skill.lore.games' in skills.trained || 'skill.lore.games' in skills.chosen"
144
- changes:
145
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.games'" }
146
- - id: lore-genealogy
147
- when: "'skill.lore.genealogy' in skills.trained || 'skill.lore.genealogy' in skills.chosen"
148
- changes:
149
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.genealogy'" }
150
- - id: lore-history
151
- when: "'skill.lore.history' in skills.trained || 'skill.lore.history' in skills.chosen"
152
- changes:
153
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.history'" }
154
- - id: lore-hyperspace
155
- when: "'skill.lore.hyperspace' in skills.trained || 'skill.lore.hyperspace' in skills.chosen"
156
- changes:
157
- - type: set
158
- field: witchwarper.memorySkill
159
- value: "'skill.lore.hyperspace'"
160
- - id: lore-infosphere
161
- when: "'skill.lore.infosphere' in skills.trained || 'skill.lore.infosphere' in skills.chosen"
162
- changes:
163
- - type: set
164
- field: witchwarper.memorySkill
165
- value: "'skill.lore.infosphere'"
166
- - id: lore-kasatha
167
- when: "'skill.lore.kasatha' in skills.trained || 'skill.lore.kasatha' in skills.chosen"
168
- changes:
169
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.kasatha'" }
170
- - id: lore-labor
171
- when: "'skill.lore.labor' in skills.trained || 'skill.lore.labor' in skills.chosen"
172
- changes:
173
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.labor'" }
174
- - id: lore-lashunta
175
- when: "'skill.lore.lashunta' in skills.trained || 'skill.lore.lashunta' in skills.chosen"
176
- changes:
177
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.lashunta'" }
178
- - id: lore-legal
179
- when: "'skill.lore.legal' in skills.trained || 'skill.lore.legal' in skills.chosen"
180
- changes:
181
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.legal'" }
182
- - id: lore-life-science
183
- when: "'skill.lore.life-science' in skills.trained || 'skill.lore.life-science' in skills.chosen"
184
- changes:
185
- - type: set
186
- field: witchwarper.memorySkill
187
- value: "'skill.lore.life-science'"
188
- - id: lore-media
189
- when: "'skill.lore.media' in skills.trained || 'skill.lore.media' in skills.chosen"
190
- changes:
191
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.media'" }
192
- - id: lore-mining
193
- when: "'skill.lore.mining' in skills.trained || 'skill.lore.mining' in skills.chosen"
194
- changes:
195
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.mining'" }
196
- - id: lore-pahtra
197
- when: "'skill.lore.pahtra' in skills.trained || 'skill.lore.pahtra' in skills.chosen"
198
- changes:
199
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.pahtra'" }
200
- - id: lore-physical-science
201
- when: "'skill.lore.physical-science' in skills.trained || 'skill.lore.physical-science' in skills.chosen"
202
- changes:
203
- - type: set
204
- field: witchwarper.memorySkill
205
- value: "'skill.lore.physical-science'"
206
- - id: lore-piracy
207
- when: "'skill.lore.piracy' in skills.trained || 'skill.lore.piracy' in skills.chosen"
208
- changes:
209
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.piracy'" }
210
- - id: lore-plant
211
- when: "'skill.lore.plant' in skills.trained || 'skill.lore.plant' in skills.chosen"
212
- changes:
213
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.plant'" }
214
- - id: lore-prismeni
215
- when: "'skill.lore.prismeni' in skills.trained || 'skill.lore.prismeni' in skills.chosen"
216
- changes:
217
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.prismeni'" }
218
- - id: lore-shirren
219
- when: "'skill.lore.shirren' in skills.trained || 'skill.lore.shirren' in skills.chosen"
220
- changes:
221
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.shirren'" }
222
- - id: lore-skittermander
223
- when: "'skill.lore.skittermander' in skills.trained || 'skill.lore.skittermander' in skills.chosen"
224
- changes:
225
- - type: set
226
- field: witchwarper.memorySkill
227
- value: "'skill.lore.skittermander'"
228
- - id: lore-sports
229
- when: "'skill.lore.sports' in skills.trained || 'skill.lore.sports' in skills.chosen"
230
- changes:
231
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.sports'" }
232
- - id: lore-underworld
233
- when: "'skill.lore.underworld' in skills.trained || 'skill.lore.underworld' in skills.chosen"
234
- changes:
235
- - type: set
236
- field: witchwarper.memorySkill
237
- value: "'skill.lore.underworld'"
238
- - id: lore-vesk
239
- when: "'skill.lore.vesk' in skills.trained || 'skill.lore.vesk' in skills.chosen"
240
- changes: [{ type: set, field: witchwarper.memorySkill, value: "'skill.lore.vesk'" }]
241
- - id: lore-vidgame
242
- when: "'skill.lore.vidgame' in skills.trained || 'skill.lore.vidgame' in skills.chosen"
243
- changes:
244
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.vidgame'" }
245
- - id: lore-warfare
246
- when: "'skill.lore.warfare' in skills.trained || 'skill.lore.warfare' in skills.chosen"
247
- changes:
248
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.warfare'" }
249
- - id: lore-ysoki
250
- when: "'skill.lore.ysoki' in skills.trained || 'skill.lore.ysoki' in skills.chosen"
251
- changes:
252
- - { type: set, field: witchwarper.memorySkill, value: "'skill.lore.ysoki'" }
39
+ options: { values: { formula: 'skills.trained + skills.chosen' } }
40
+ changes: [{ type: set, field: witchwarper.memorySkill, value: picked.value }]
253
41
  - { id: result, kind: outcome, result: "'chosen'" }
254
42
  grants:
255
43
  - item: feats.skill.assurance
256
44
  when: "witchwarper.memorySkill != ''"
257
- state: { skill: witchwarper.memorySkill }
45
+ choices: { skill: [{ option: { formula: witchwarper.memorySkill } }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.thievery }
14
14
  when: "!('skill.thievery' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.android }
19
- when: "!('skill.lore.android' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.android.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: android }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.medicine }
14
14
  when: "!('skill.medicine' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.barathu }
19
- when: "!('skill.lore.barathu' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.barathu.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: barathu }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.religion }
14
14
  when: "!('skill.religion' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.borai }
19
- when: "!('skill.lore.borai' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.borai.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: borai }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.thievery }
14
14
  when: "!('skill.thievery' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.custom3 }
19
- when: "!('skill.lore.custom3' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.custom3.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: custom3 }] }
@@ -2,4 +2,56 @@ id: feats.ancestry.fixation
2
2
  type: feat
3
3
  tags: [trait.skittermander]
4
4
  fields: { level: 1, category: ancestry, ancestry: ancestries.skittermander }
5
- grants: [{ item: feats.skill.additional-lore, waivePrerequisites: true }]
5
+ choices:
6
+ - id: topic
7
+ from:
8
+ values:
9
+ [
10
+ academia,
11
+ alcohol,
12
+ android,
13
+ animal,
14
+ art,
15
+ augmentation,
16
+ barathu,
17
+ borai,
18
+ business,
19
+ cooking,
20
+ corporate,
21
+ games,
22
+ genealogy,
23
+ history,
24
+ hyperspace,
25
+ infosphere,
26
+ kasatha,
27
+ labor,
28
+ lashunta,
29
+ legal,
30
+ life-science,
31
+ media,
32
+ mining,
33
+ pahtra,
34
+ physical-science,
35
+ piracy,
36
+ plant,
37
+ prismeni,
38
+ shirren,
39
+ skittermander,
40
+ sports,
41
+ underworld,
42
+ vesk,
43
+ vidgame,
44
+ warfare,
45
+ ysoki,
46
+ custom1,
47
+ custom2,
48
+ custom3,
49
+ ]
50
+ grants:
51
+ - item: feats.skill.additional-lore
52
+ when: size(picksOf('topic')) > 0
53
+ waivePrerequisites: true
54
+ choices: { lore: [{ option: { formula: "picksOf('topic')[0]" } }] }
55
+ - item: feats.skill.assurance
56
+ when: size(picksOf('topic')) > 0
57
+ choices: { skill: [{ option: { formula: "'skill.lore.' + picksOf('topic')[0]" } }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.society }
14
14
  when: "!('skill.society' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.kasatha }
19
- when: "!('skill.lore.kasatha' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.kasatha.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: kasatha }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.society }
14
14
  when: "!('skill.society' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.lashunta }
19
- when: "!('skill.lore.lashunta' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.lashunta.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: lashunta }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.performance }
14
14
  when: "!('skill.performance' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.pahtra }
19
- when: "!('skill.lore.pahtra' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.pahtra.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: pahtra }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.stealth }
14
14
  when: "!('skill.stealth' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.prismeni }
19
- when: "!('skill.lore.prismeni' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.prismeni.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: prismeni }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.society }
14
14
  when: "!('skill.society' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.shirren }
19
- when: "!('skill.lore.shirren' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.shirren.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: shirren }] }
@@ -13,12 +13,8 @@ effects:
13
13
  value: { tag: skill.society }
14
14
  when: "!('skill.society' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.skittermander }
19
- when: "!('skill.lore.skittermander' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.skittermander.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
24
16
  - { target: languages, op: grant, value: { item: languages.skittermander } }
17
+ grants:
18
+ - item: feats.skill.additional-lore
19
+ waivePrerequisites: true
20
+ choices: { lore: [{ option: skittermander }] }
@@ -13,11 +13,7 @@ effects:
13
13
  value: { tag: skill.stealth }
14
14
  when: "!('skill.stealth' in skills.chosen)"
15
15
  - { target: skills.trainings, op: add, value: 1 }
16
- - target: skills.trained
17
- op: grant
18
- value: { tag: skill.lore.ysoki }
19
- when: "!('skill.lore.ysoki' in skills.chosen)"
20
- - { target: skills.trainings, op: add, value: 1 }
21
- - target: skills.lore.ysoki.granted
22
- op: add
23
- value: '(level >= 3 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 15 ? 1 : 0)'
16
+ grants:
17
+ - item: feats.skill.additional-lore
18
+ waivePrerequisites: true
19
+ choices: { lore: [{ option: ysoki }] }
@@ -3,3 +3,7 @@ type: feat
3
3
  tags: [trait.envoy]
4
4
  fields: { level: 16, category: class, class: classes.envoy }
5
5
  prerequisites: [{ id: feat, when: '@feats.envoy.influence in feats.held' }]
6
+ grants:
7
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.deception }] } }
8
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.diplomacy }] } }
9
+ - { item: feats.skill.assurance, choices: { skill: [{ option: skill.intimidation }] } }
@@ -4,40 +4,67 @@ tags: [trait.fortune]
4
4
  fields: { level: 1, category: skill, skills: [skill] }
5
5
  repeatable: true
6
6
 
7
- state:
8
- skill: { type: string, default: '' }
9
- effects:
10
- - {
11
- target: assurance.skills,
12
- op: grant,
13
- value: { formula: self.skill },
14
- when: "has(self.skill) && self.skill != ''",
15
- }
16
7
  choices:
17
8
  - id: skill
18
- when: "!has(self.skill) || self.skill == ''"
19
9
  from:
20
10
  values:
21
- [
22
- skill.acrobatics,
23
- skill.arcana,
24
- skill.athletics,
25
- skill.computers,
26
- skill.crafting,
27
- skill.deception,
28
- skill.diplomacy,
29
- skill.intimidation,
30
- skill.medicine,
31
- skill.nature,
32
- skill.occultism,
33
- skill.performance,
34
- skill.piloting,
35
- skill.religion,
36
- skill.society,
37
- skill.stealth,
38
- skill.survival,
39
- skill.thievery,
40
- ]
11
+ - skill.acrobatics
12
+ - skill.arcana
13
+ - skill.athletics
14
+ - skill.computers
15
+ - skill.crafting
16
+ - skill.deception
17
+ - skill.diplomacy
18
+ - skill.intimidation
19
+ - skill.medicine
20
+ - skill.nature
21
+ - skill.occultism
22
+ - skill.performance
23
+ - skill.piloting
24
+ - skill.religion
25
+ - skill.society
26
+ - skill.stealth
27
+ - skill.survival
28
+ - skill.thievery
29
+ - skill.lore.academia
30
+ - skill.lore.alcohol
31
+ - skill.lore.android
32
+ - skill.lore.animal
33
+ - skill.lore.art
34
+ - skill.lore.augmentation
35
+ - skill.lore.barathu
36
+ - skill.lore.borai
37
+ - skill.lore.business
38
+ - skill.lore.cooking
39
+ - skill.lore.corporate
40
+ - skill.lore.games
41
+ - skill.lore.genealogy
42
+ - skill.lore.history
43
+ - skill.lore.hyperspace
44
+ - skill.lore.infosphere
45
+ - skill.lore.kasatha
46
+ - skill.lore.labor
47
+ - skill.lore.lashunta
48
+ - skill.lore.legal
49
+ - skill.lore.life-science
50
+ - skill.lore.media
51
+ - skill.lore.mining
52
+ - skill.lore.pahtra
53
+ - skill.lore.physical-science
54
+ - skill.lore.piracy
55
+ - skill.lore.plant
56
+ - skill.lore.prismeni
57
+ - skill.lore.shirren
58
+ - skill.lore.skittermander
59
+ - skill.lore.sports
60
+ - skill.lore.underworld
61
+ - skill.lore.vesk
62
+ - skill.lore.vidgame
63
+ - skill.lore.warfare
64
+ - skill.lore.ysoki
65
+ - skill.lore.custom1
66
+ - skill.lore.custom2
67
+ - skill.lore.custom3
41
68
  effects:
42
69
  - { target: assurance.skills, op: grant, value: { formula: pick.value } }
43
70
 
@@ -9,5 +9,5 @@ effects:
9
9
  - { target: skills.trainings, op: add, value: 1 }
10
10
  grants:
11
11
  - item: feats.skill.assurance
12
- state: { skill: "'skill.stealth'" }
12
+ choices: { skill: [{ option: skill.stealth }] }
13
13
  waivePrerequisites: true