@opencharacter/orc-sf-2e 0.1.1 → 0.3.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 (110) hide show
  1. package/README.md +58 -15
  2. package/content/backgrounds/raised-by-belief.yaml +4 -1
  3. package/content/classes/envoy.yaml +2 -52
  4. package/content/classes/mystic/connections/akashic.yaml +1 -1
  5. package/content/classes/mystic/connections/elemental.yaml +62 -1
  6. package/content/classes/mystic/connections/healing.yaml +1 -1
  7. package/content/classes/mystic/connections/rhythm.yaml +1 -1
  8. package/content/classes/mystic/connections/shadow.yaml +1 -1
  9. package/content/classes/mystic.yaml +2 -51
  10. package/content/classes/operative.yaml +1 -44
  11. package/content/classes/solarian.yaml +1 -44
  12. package/content/classes/soldier.yaml +2 -51
  13. package/content/classes/witchwarper/anchors/core-memories.yaml +4 -216
  14. package/content/classes/witchwarper/anchors/focal-point.yaml +1 -1
  15. package/content/classes/witchwarper/anchors/tangible-object.yaml +1 -1
  16. package/content/classes/witchwarper/paradoxes/analyst.yaml +1 -1
  17. package/content/classes/witchwarper/paradoxes/anomaly.yaml +1 -1
  18. package/content/classes/witchwarper/paradoxes/lost-history.yaml +1 -1
  19. package/content/classes/witchwarper/paradoxes/precog.yaml +1 -1
  20. package/content/classes/witchwarper.yaml +3 -55
  21. package/content/effects/treated-disease.yaml +4 -0
  22. package/content/effects/treated-poison.yaml +4 -0
  23. package/content/feats/ancestry/android-lore.yaml +4 -8
  24. package/content/feats/ancestry/barathu-lore.yaml +4 -8
  25. package/content/feats/ancestry/borai-lore.yaml +4 -8
  26. package/content/feats/ancestry/extra-devotion.yaml +4 -8
  27. package/content/feats/ancestry/fixation.yaml +15 -1
  28. package/content/feats/ancestry/harmonic-sensitivity.yaml +16 -6
  29. package/content/feats/ancestry/kasatha-lore.yaml +4 -8
  30. package/content/feats/ancestry/lashunta-lore.yaml +10 -8
  31. package/content/feats/ancestry/pahtra-lore.yaml +4 -8
  32. package/content/feats/ancestry/prismeni-lore.yaml +4 -8
  33. package/content/feats/ancestry/shirren-lore.yaml +4 -8
  34. package/content/feats/ancestry/skittermander-lore.yaml +4 -8
  35. package/content/feats/ancestry/ysoki-lore.yaml +4 -8
  36. package/content/feats/archetype/envoy/envoy-dedication.yaml +2 -88
  37. package/content/feats/envoy/effortless-influencer.yaml +4 -0
  38. package/content/feats/mystic/new-epiphany.yaml +1 -1
  39. package/content/feats/mystic/realized-epiphany.yaml +1 -1
  40. package/content/feats/mystic/syncretic-epiphany.yaml +1 -1
  41. package/content/feats/skill/additional-lore.yaml +54 -391
  42. package/content/feats/skill/assurance.yaml +3 -30
  43. package/content/feats/skill/skill-training.yaml +1 -57
  44. package/content/features/envoy/style/from-the-front.yaml +1 -1
  45. package/content/features/envoy/style/from-the-shadows.yaml +2 -2
  46. package/content/features/envoy/style/guns-blazing.yaml +1 -1
  47. package/content/features/envoy/style/in-the-spotlight.yaml +1 -1
  48. package/content/features/envoy/style/infosphere-director.yaml +1 -1
  49. package/content/features/envoy/style/through-desperate-times.yaml +1 -1
  50. package/content/features/solarian/re-forge-solar-weapon.yaml +19 -24
  51. package/content/features/soldier/style/action-hero.yaml +1 -1
  52. package/content/features/soldier/style/armor-storm.yaml +1 -1
  53. package/content/features/soldier/style/bombard.yaml +1 -1
  54. package/content/features/soldier/style/close-quarters.yaml +1 -1
  55. package/content/features/soldier/style/erudite-warrior.yaml +1 -1
  56. package/content/features/spellcasting/archetype-repertoire.yaml +1 -1
  57. package/content/gear/comm-unit.yaml +1 -0
  58. package/content/heritages/warblood-vesk.yaml +18 -1
  59. package/content/spells/elemental-barrier.yaml +2 -1
  60. package/content/spells/elemental-weapon.yaml +10 -1
  61. package/content/spells/guidance.yaml +2 -0
  62. package/content/spells/shield.yaml +1 -0
  63. package/content/spells/sure-strike.yaml +8 -1
  64. package/content/spells/true-target.yaml +2 -0
  65. package/content/templates/elemental/air.yaml +6 -0
  66. package/content/templates/elemental/earth.yaml +6 -0
  67. package/content/templates/elemental/fire.yaml +6 -0
  68. package/content/templates/elemental/metal.yaml +6 -0
  69. package/content/templates/elemental/water.yaml +6 -0
  70. package/content/templates/elemental/wood.yaml +6 -0
  71. package/dist/i18n/en.js +1 -1
  72. package/dist/i18n/en.json +51 -73
  73. package/dist/index.js +1 -1
  74. package/dist/release.json +6191 -8327
  75. package/i18n/en/ancestries.yaml +1 -0
  76. package/i18n/en/ancestry-feats.yaml +4 -0
  77. package/i18n/en/archetypes.yaml +2 -2
  78. package/i18n/en/core.yaml +8 -2
  79. package/i18n/en/headline.yaml +4 -0
  80. package/i18n/en/mystic.yaml +12 -0
  81. package/i18n/en/sf-core.yaml +0 -11
  82. package/i18n/en/skills.yaml +6 -3
  83. package/i18n/en/tags.yaml +2 -0
  84. package/i18n/en/types.yaml +1 -0
  85. package/i18n/en/witchwarper.yaml +0 -54
  86. package/i18n/en.yaml +14 -1
  87. package/pack.yaml +2 -2
  88. package/package.json +2 -2
  89. package/rules/advancement.yaml +1 -0
  90. package/rules/afflictions.yaml +4 -5
  91. package/rules/archetypes.yaml +1 -0
  92. package/rules/building.yaml +7 -1
  93. package/rules/checks.yaml +1 -1
  94. package/rules/conditions.yaml +1 -0
  95. package/rules/core.yaml +1 -0
  96. package/rules/creation.yaml +18 -0
  97. package/rules/equipment.yaml +7 -2
  98. package/rules/heritages.yaml +1 -1
  99. package/rules/layout.yaml +62 -4
  100. package/rules/mystic.yaml +24 -1
  101. package/rules/skill-actions-stealth.yaml +1 -1
  102. package/rules/skills.yaml +254 -81
  103. package/rules/solarian.yaml +1 -2
  104. package/rules/spellcasting.yaml +89 -25
  105. package/rules/spells-high.yaml +3 -3
  106. package/rules/strikes.yaml +9 -92
  107. package/rules/tags.yaml +6 -0
  108. package/rules/witchwarper.yaml +7 -7
  109. package/upgrades/0.1.1-to-0.2.0.yaml +18 -0
  110. package/upgrades/0.2.0-to-0.3.0.yaml +12 -0
@@ -10,63 +10,7 @@ choices:
10
10
  - id: skill
11
11
  unique: skill-training
12
12
  from:
13
- values:
14
- [
15
- skill.acrobatics,
16
- skill.arcana,
17
- skill.athletics,
18
- skill.computers,
19
- skill.crafting,
20
- skill.deception,
21
- skill.diplomacy,
22
- skill.intimidation,
23
- skill.medicine,
24
- skill.nature,
25
- skill.occultism,
26
- skill.performance,
27
- skill.piloting,
28
- skill.religion,
29
- skill.society,
30
- skill.stealth,
31
- skill.survival,
32
- skill.thievery,
33
- skill.lore.academia,
34
- skill.lore.circus,
35
- skill.lore.farming,
36
- skill.lore.legal,
37
- skill.lore.scribing,
38
- skill.lore.underworld,
39
- skill.lore.warfare,
40
- skill.lore.alcohol,
41
- skill.lore.art,
42
- skill.lore.cooking,
43
- skill.lore.engineering,
44
- skill.lore.fortune-telling,
45
- skill.lore.games,
46
- skill.lore.genealogy,
47
- skill.lore.gladiatorial,
48
- skill.lore.guild,
49
- skill.lore.heraldry,
50
- skill.lore.herbalism,
51
- skill.lore.labor,
52
- skill.lore.mercantile,
53
- skill.lore.mining,
54
- skill.lore.sailing,
55
- skill.lore.tanning,
56
- skill.lore.theater,
57
- skill.lore.cave,
58
- skill.lore.desert,
59
- skill.lore.forest,
60
- skill.lore.mountain,
61
- skill.lore.plains,
62
- skill.lore.swamp,
63
- skill.lore.dwarf,
64
- skill.lore.elf,
65
- skill.lore.goblin,
66
- skill.lore.halfling,
67
- skill.lore.leshy,
68
- skill.lore.orc,
69
- ]
13
+ values: { formula: skills.offered + skills.lores }
70
14
  where: '!(value in skills.trained) && !(value in skills.chosen) || value in choice.picks'
71
15
  effects:
72
16
  - { target: skills.chosen, op: grant, value: { formula: pick.value } }
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.from-the-front
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.from-the-shadows
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -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
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.guns-blazing
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.in-the-spotlight
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.infosphere-director
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -1,6 +1,6 @@
1
1
  id: features.envoy.style.through-desperate-times
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: envoy.leadership-style }
4
4
  effects:
5
5
  - target: skills.trained
6
6
  op: grant
@@ -33,30 +33,25 @@ actions:
33
33
  repeat: { max: 2, min: 0 }
34
34
  recommend: "'#done'"
35
35
  options:
36
- - id: disarm
37
- when: "picks == 0 && !('disarm' in ['agile', 'twin']) || ('disarm' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
38
- - id: free-hand
39
- when: "picks == 0 && !('free-hand' in ['agile', 'twin']) || ('free-hand' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
40
- - id: grapple
41
- when: "picks == 0 && !('grapple' in ['agile', 'twin']) || ('grapple' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
42
- - id: nonlethal
43
- when: "picks == 0 && !('nonlethal' in ['agile', 'twin']) || ('nonlethal' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
44
- - id: parry
45
- when: "picks == 0 && !('parry' in ['agile', 'twin']) || ('parry' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
46
- - id: shove
47
- when: "picks == 0 && !('shove' in ['agile', 'twin']) || ('shove' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
48
- - id: sweep
49
- when: "picks == 0 && !('sweep' in ['agile', 'twin']) || ('sweep' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
50
- - id: trip
51
- when: "picks == 0 && !('trip' in ['agile', 'twin']) || ('trip' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
52
- - id: versatile
53
- when: "picks == 0 && !('versatile' in ['agile', 'twin']) || ('versatile' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
54
- - { id: reach, when: 'true' }
55
- - { id: two-hand, when: 'true' }
56
- - id: agile
57
- when: "picks == 0 && !('agile' in ['agile', 'twin']) || ('agile' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
58
- - id: twin
59
- when: "picks == 0 && !('twin' in ['agile', 'twin']) || ('twin' in ['agile', 'twin'] && @feats.solarian.twin-weapons in feats.held)"
36
+ values:
37
+ - disarm
38
+ - free-hand
39
+ - grapple
40
+ - nonlethal
41
+ - parry
42
+ - shove
43
+ - sweep
44
+ - trip
45
+ - versatile
46
+ - reach
47
+ - two-hand
48
+ - agile
49
+ - twin
50
+ where: >-
51
+ picks == 0
52
+ && (!(value in ['agile', 'twin']) || @feats.solarian.twin-weapons in feats.held)
53
+ && (value in ['reach', 'two-hand'] ? size(steps.traits.picked) == 0
54
+ : countList(steps.traits.picked, x in ['reach', 'two-hand']) == 0)
60
55
  - id: apply
61
56
  kind: changes
62
57
  changes:
@@ -1,6 +1,6 @@
1
1
  id: features.soldier.style.action-hero
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: soldier.fighting-style }
4
4
  effects:
5
5
  - target: { steps: [strike.hit] }
6
6
  op: changes
@@ -1,6 +1,6 @@
1
1
  id: features.soldier.style.armor-storm
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: soldier.fighting-style }
4
4
  effects:
5
5
  - { target: soldier.armorStorm, op: set, value: true }
6
6
  - target: { incoming: { fields: [hp.current], tags: [damage] } }
@@ -1,4 +1,4 @@
1
1
  id: features.soldier.style.bombard
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: soldier.fighting-style }
4
4
  effects: [{ target: soldier.bombard, op: set, value: true }]
@@ -1,4 +1,4 @@
1
1
  id: features.soldier.style.close-quarters
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: soldier.fighting-style }
4
4
  grants: [{ item: feats.soldier.whirling-swipe, waivePrerequisites: true }]
@@ -1,6 +1,6 @@
1
1
  id: features.soldier.style.erudite-warrior
2
2
  type: feature
3
- fields: { level: 1 }
3
+ fields: { level: 1, classOption: soldier.fighting-style }
4
4
  choices:
5
5
  - id: skill
6
6
  from: { values: [skill.diplomacy, skill.society] }
@@ -2,7 +2,7 @@ id: features.spellcasting.archetype-repertoire
2
2
  type: feature
3
3
  fields: { level: 2 }
4
4
  state:
5
- source: { type: string, default: bard }
5
+ source: { type: string, default: mystic }
6
6
  choices:
7
7
  - id: cantrips
8
8
  pick: "fieldOf('spellcasting.archetype.{archetypeSource}.cantrips', self.source)"
@@ -1,3 +1,4 @@
1
1
  id: gear.comm-unit
2
2
  type: gear
3
+ tags: [tool.compass]
3
4
  fields: { level: 1, price: 7, bulk: 0.1, hands: 1 }
@@ -1,4 +1,21 @@
1
1
  id: heritages.warblood-vesk
2
2
  type: heritage
3
3
  fields: { ancestry: ancestries.vesk }
4
- grants: [{ item: feats.ancestry.brutal-anatomy, waivePrerequisites: true }]
4
+ choices:
5
+ - id: attacks
6
+ pick: 2
7
+ activate: false
8
+ from:
9
+ items:
10
+ - features.ancestry.vesk-claw
11
+ - features.ancestry.vesk-jaws
12
+ - features.ancestry.vesk-tail
13
+ grants:
14
+ - item: feats.ancestry.brutal-anatomy
15
+ when: size(picksOf('attacks')) > 0
16
+ waivePrerequisites: true
17
+ choices: { attack: [{ option: { formula: "picksOf('attacks')[0]" } }] }
18
+ - item: feats.ancestry.brutal-anatomy
19
+ when: size(picksOf('attacks')) > 1
20
+ waivePrerequisites: true
21
+ choices: { attack: [{ option: { formula: "picksOf('attacks')[1]" } }] }
@@ -1,4 +1,5 @@
1
1
  id: spells.elemental-barrier
2
2
  type: spell
3
3
  tags: [trait.focus, trait.manipulate, trait.mystic, trait.uncommon]
4
- fields: { rank: 4, cast: two, range: 30, targets: 1, duration: minutes, durationAmount: 1 }
4
+ fields:
5
+ { rank: 4, cast: two, range: 30, targets: 1, duration: minutes, durationAmount: 1, applyTo: self }
@@ -1,4 +1,13 @@
1
1
  id: spells.elemental-weapon
2
2
  type: spell
3
3
  tags: [trait.concentrate, trait.focus, trait.manipulate, trait.mystic, trait.uncommon]
4
- fields: { rank: 1, cast: three, range: 30, targets: 1, duration: minutes, durationAmount: 10 }
4
+ fields:
5
+ {
6
+ rank: 1,
7
+ cast: three,
8
+ range: 30,
9
+ targets: 1,
10
+ duration: minutes,
11
+ durationAmount: 10,
12
+ applyTo: self,
13
+ }
@@ -8,3 +8,5 @@ effects:
8
8
  value: 1
9
9
  stackKey: status-bonus
10
10
  scope: applied
11
+ then:
12
+ - { type: removeEffect, entry: self }
@@ -19,3 +19,4 @@ effects:
19
19
  value: 'min(5 + 5 * floor((self.rank - 1) / 2), -incoming.amount)'
20
20
  when: 'situational.shieldSpellBlock && incoming.amount < 0'
21
21
  scope: applied
22
+ then: [{ type: removeEffect, entry: self }]
@@ -1,4 +1,11 @@
1
1
  id: spells.sure-strike
2
2
  type: spell
3
3
  tags: [tradition.arcane, tradition.occult, trait.concentrate, trait.fortune]
4
- fields: { rank: 1, cast: one, duration: until-end-of-turn }
4
+ fields: { rank: 1, cast: one, duration: until-end-of-turn, applyTo: self }
5
+ effects:
6
+ - target: { rolls: [attack] }
7
+ op: rollModifier
8
+ value: { kind: advantage }
9
+ scope: applied
10
+ then:
11
+ - { type: removeEffect, entry: self }
@@ -7,3 +7,5 @@ effects:
7
7
  op: rollModifier
8
8
  value: { kind: advantage }
9
9
  scope: applied
10
+ then:
11
+ - { type: removeEffect, entry: self }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.air
2
+ type: template
3
+ tags: [trait.air, trait.electricity]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: electricity }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.earth
2
+ type: template
3
+ tags: [trait.earth]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: bludgeoning }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.fire
2
+ type: template
3
+ tags: [trait.fire]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: fire }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.metal
2
+ type: template
3
+ tags: [trait.metal, trait.acid]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: acid }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.water
2
+ type: template
3
+ tags: [trait.water, trait.cold]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: cold }
@@ -0,0 +1,6 @@
1
+ id: templates.elemental.wood
2
+ type: template
3
+ tags: [trait.wood, trait.poison]
4
+ removeTags: [trait.cold, trait.fire]
5
+ appliesTo: { type: spell }
6
+ fields: { damageType: poison }