@opencharacter/wwn-srd 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 +41 -3
- package/content/classes/mage.yaml +2 -14
- package/content/foci/lucky.yaml +3 -2
- package/content/foci/traditional-education.yaml +1 -1
- package/content/partials/accursed.yaml +1 -0
- package/content/partials/bard.yaml +1 -0
- package/content/partials/beastmaster.yaml +1 -0
- package/content/partials/blood-priest.yaml +1 -0
- package/content/partials/duelist.yaml +1 -0
- package/content/partials/healer.yaml +1 -0
- package/content/partials/mage.yaml +2 -23
- package/content/partials/mageslayer.yaml +1 -0
- package/content/partials/skinshifter.yaml +1 -0
- package/content/partials/thought-noble.yaml +1 -0
- package/content/partials/vowed.yaml +1 -0
- package/content/partials/wise.yaml +1 -0
- package/content/traditions/elementalist.yaml +8 -0
- package/content/traditions/high-mage.yaml +8 -0
- package/content/traditions/invoker.yaml +9 -0
- package/content/traditions/necromancer.yaml +8 -0
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.json +21 -17
- package/dist/index.js +1 -1
- package/dist/release.json +3461 -2759
- package/i18n/en/content.yaml +13 -15
- package/i18n/en.yaml +8 -2
- package/pack.yaml +2 -2
- package/package.json +2 -2
- package/rules/advancement.yaml +7 -9
- package/rules/backgrounds.yaml +1 -0
- package/rules/classes.yaml +1 -0
- package/rules/combat.yaml +2 -2
- package/rules/creation-steps.yaml +6 -6
- package/rules/creation.yaml +30 -95
- package/rules/display.yaml +108 -21
- package/rules/foci.yaml +1 -0
- package/rules/health.yaml +5 -3
- package/rules/magic.yaml +46 -59
- package/rules/saves.yaml +1 -1
- package/rules/skills.yaml +1 -1
- package/rules/tags.yaml +7 -0
- package/upgrades/0.1.0-to-0.2.0.yaml +61 -0
package/README.md
CHANGED
|
@@ -18,6 +18,9 @@ Publishing.
|
|
|
18
18
|
pnpm add @opencharacter/wwn-srd @opencharacter/engine
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
This release needs spec 0.3: `@opencharacter/engine` 0.3.0 or later. An engine for an older
|
|
22
|
+
spec refuses it (`spec-version-unsupported`).
|
|
23
|
+
|
|
21
24
|
The package's default export is the pack's release, ready for `loadRuleset`; its English text is
|
|
22
25
|
`@opencharacter/wwn-srd/i18n/en`.
|
|
23
26
|
|
|
@@ -31,9 +34,9 @@ const { ruleset } = loaded;
|
|
|
31
34
|
|
|
32
35
|
// A random character: attributes, skills and silver rolled, every other pick drawn.
|
|
33
36
|
const blank = {
|
|
34
|
-
specVersion: '0.
|
|
37
|
+
specVersion: '0.3.0',
|
|
35
38
|
id: 'new',
|
|
36
|
-
packs: [{ id: 'wwn-srd', version: '0.
|
|
39
|
+
packs: [{ id: 'wwn-srd', version: '0.2.0' }],
|
|
37
40
|
creating: true,
|
|
38
41
|
};
|
|
39
42
|
const run = startAction(ruleset, blank, {
|
|
@@ -87,7 +90,7 @@ computeSheet(ruleset, made.character).values['wwn-srd:saves.physical']?.value; /
|
|
|
87
90
|
- **Gear:** the SRD's weapons, armor, adventuring gear, gear bundles and beasts, with
|
|
88
91
|
encumbrance in Readied and Stowed items, bundles, worn clothing, coins and movement. A new
|
|
89
92
|
character rolls 3d6 x 10 silver and buys a weapon, armor and up to six pieces of gear at list
|
|
90
|
-
price.
|
|
93
|
+
price; gear it couldn't carry isn't offered.
|
|
91
94
|
- **Creation:** two starts running `create-character`, in the book's order.
|
|
92
95
|
- `random`: attributes, three rolls split between Growth and Learning, and silver are rolled;
|
|
93
96
|
the background, class, partial classes, Foci, arts, spells and purchases are drawn evenly
|
|
@@ -95,6 +98,41 @@ computeSheet(ruleset, made.character).values['wwn-srd:saves.physical']?.value; /
|
|
|
95
98
|
finishes.
|
|
96
99
|
- `guided`: the player picks, each pick recommended.
|
|
97
100
|
|
|
101
|
+
## Add-on packs
|
|
102
|
+
|
|
103
|
+
A pack that depends on `wwn-srd` can add content of its types, and creation and advancement offer
|
|
104
|
+
it with the core's, in the guided picks and the random draws: classes, partial classes,
|
|
105
|
+
backgrounds, foci, arts, spells, weapons, armor and gear.
|
|
106
|
+
|
|
107
|
+
- **A Mage's tradition** is `tradition` content: its `key` is a key of the `trad` family, which
|
|
108
|
+
the add-on extends (`families: { 'wwn-srd:trad': [<key>] }`) and declares the fields for
|
|
109
|
+
(`tradition.<key>.tier`, counting the picks as the core's do, and `tradition.<key>.skill`, the
|
|
110
|
+
bonus skill at creation, set by an effect of the content that brings the tradition). A
|
|
111
|
+
tradition that casts from the spell lists joins `spellTrad` too; its spells are those of the
|
|
112
|
+
list named by its key, and the High Magic list.
|
|
113
|
+
- **Spell lists and arts:** a spell's `list` and an art's `tradition` are open enums; an add-on adds
|
|
114
|
+
its tradition's key to them (`extendEnums`). A tradition with arts joins `artTrad` and declares
|
|
115
|
+
`arts.<key>.allowed`, `.taken` and `.owed`, which the art picks and `arts.owed` read. Joining
|
|
116
|
+
`armorTrad` (armor and shields stop its arts, as they stop spells) or `heavyArmorTrad` (medium
|
|
117
|
+
or heavy armor or a large shield do, as for the Duelist) sets when `commit-effort` is offered.
|
|
118
|
+
- **Effort:** a tradition with Effort joins `effortTrad` and declares `effort.<key>.max`,
|
|
119
|
+
`.scene`, `.day`, `.ongoing` and `.free`; the core's `commit-effort` and `release-effort` change
|
|
120
|
+
them for its arts, and a night's rest and a scene's end clear them, as the core's.
|
|
121
|
+
- **Skills:** a skill joins the `skill` family (`families: { 'wwn-srd:skill': [<key>] }`) and
|
|
122
|
+
declares `skills.<key>` (tagged `skill`) and `skillCredit.<key>`; creation and `improve` gain
|
|
123
|
+
and raise it as the core's. A background's table entries (`types.background.fields.freeSkill`,
|
|
124
|
+
`growth1`–`growth6`, `learning1`–`learning8`), a focus's `bonusSkill` and a weapon's `skill`
|
|
125
|
+
are open enums that take its key.
|
|
126
|
+
- **Naming what an add-on adds:** it names each added value, option or key in its own text,
|
|
127
|
+
under the key this pack would use, and `createText` finds it there when the app passes the
|
|
128
|
+
ruleset's `enumOrigins`, `optionOrigins` and `familyOrigins`. For example,
|
|
129
|
+
a tradition `stormcaller` added to `wwn-srd:types.spell.fields.list` is
|
|
130
|
+
`types.spell.fields.list.values.stormcaller.name: Stormcaller` (through `enumOrigins`).
|
|
131
|
+
- **Tagged steps** take an add-on's rules-level `option` and `changes` effects: `creation.purse`
|
|
132
|
+
(the starting silver), `creation.finish` (the last step of creation), `advancement.level` (each
|
|
133
|
+
new level's level and skill points), `rest.night` (a night's rest) and `rest.scene` (the end of
|
|
134
|
+
a scene).
|
|
135
|
+
|
|
98
136
|
## Left to the app or the table
|
|
99
137
|
|
|
100
138
|
- **Text effects.** Most arts, Foci and spells change no number on the sheet; their names are
|
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
id: classes.mage
|
|
2
2
|
type: class
|
|
3
|
+
tags: [full-mage]
|
|
3
4
|
effects:
|
|
4
5
|
- { target: class.mage, op: add, value: 2 }
|
|
5
6
|
choices:
|
|
6
7
|
- id: tradition
|
|
7
|
-
from:
|
|
8
|
-
options:
|
|
9
|
-
- id: high-mage
|
|
10
|
-
effects:
|
|
11
|
-
- { target: tradition.highmage.tier, op: add, value: 2 }
|
|
12
|
-
- id: elementalist
|
|
13
|
-
effects:
|
|
14
|
-
- { target: tradition.elementalist.tier, op: add, value: 2 }
|
|
15
|
-
- id: necromancer
|
|
16
|
-
effects:
|
|
17
|
-
- { target: tradition.necromancer.tier, op: add, value: 2 }
|
|
18
|
-
- id: invoker
|
|
19
|
-
effects:
|
|
20
|
-
- { target: tradition.invoker.tier, op: add, value: 2 }
|
|
8
|
+
from: { type: tradition }
|
package/content/foci/lucky.yaml
CHANGED
|
@@ -5,6 +5,7 @@ fields:
|
|
|
5
5
|
requires: low-attribute
|
|
6
6
|
prerequisites:
|
|
7
7
|
- id: low-attribute
|
|
8
|
+
# A score that gives -1 or less, whatever later bonuses (Xenoblooded) do to the modifier.
|
|
8
9
|
when: >-
|
|
9
|
-
min(attributes.str.
|
|
10
|
-
attributes.wis.
|
|
10
|
+
min(attributes.str.score, attributes.dex.score, attributes.con.score, attributes.int.score,
|
|
11
|
+
attributes.wis.score, attributes.cha.score) <= 7
|
|
@@ -9,7 +9,7 @@ prerequisites:
|
|
|
9
9
|
choices:
|
|
10
10
|
# The specialist tradition whose spells and first-level arts the Invoker gains.
|
|
11
11
|
- id: tradition
|
|
12
|
-
from: { values:
|
|
12
|
+
from: { values: { formula: "keysOf('spellTrad')" } }
|
|
13
13
|
recommend: "'elementalist'"
|
|
14
14
|
effects:
|
|
15
15
|
- { target: invoker.education, op: set, value: pick.value }
|
|
@@ -4,6 +4,7 @@ tags: [mage-class]
|
|
|
4
4
|
effects:
|
|
5
5
|
- { target: class.mage, op: add, value: 1 }
|
|
6
6
|
- { target: tradition.accursed.tier, op: add, value: 1 }
|
|
7
|
+
- { target: tradition.accursed.skill, op: set, value: "'magic'" }
|
|
7
8
|
choices:
|
|
8
9
|
# The starting art: Accursed Blade or Accursed Bolt.
|
|
9
10
|
- id: starting-art
|
|
@@ -4,5 +4,6 @@ effects:
|
|
|
4
4
|
- { target: chassis.attackExpert, op: add, value: 1 }
|
|
5
5
|
- { target: chassis.hitsExpert, op: add, value: 1 }
|
|
6
6
|
- { target: tradition.bard.tier, op: add, value: 1 }
|
|
7
|
+
- { target: tradition.bard.skill, op: set, value: "'perform'" }
|
|
7
8
|
grants:
|
|
8
9
|
- { item: arts.bard.a-thousand-tongues }
|
|
@@ -5,5 +5,6 @@ effects:
|
|
|
5
5
|
- { target: class.mage, op: add, value: 1 }
|
|
6
6
|
- { target: chassis.fragile, op: add, value: 1 }
|
|
7
7
|
- { target: tradition.duelist.tier, op: add, value: 1 }
|
|
8
|
+
- { target: tradition.duelist.skill, op: set, value: "'stab'" }
|
|
8
9
|
grants:
|
|
9
10
|
- { item: arts.duelist.favored-weapon }
|
|
@@ -8,26 +8,5 @@ effects:
|
|
|
8
8
|
choices:
|
|
9
9
|
- id: tradition
|
|
10
10
|
unique: partial-traditions
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
- id: high-mage
|
|
14
|
-
prerequisites:
|
|
15
|
-
- { id: no-invoker, when: tradition.invoker.tier == 0 }
|
|
16
|
-
effects:
|
|
17
|
-
- { target: tradition.highmage.tier, op: add, value: 1 }
|
|
18
|
-
- id: elementalist
|
|
19
|
-
prerequisites:
|
|
20
|
-
- { id: no-invoker, when: tradition.invoker.tier == 0 }
|
|
21
|
-
effects:
|
|
22
|
-
- { target: tradition.elementalist.tier, op: add, value: 1 }
|
|
23
|
-
- id: necromancer
|
|
24
|
-
prerequisites:
|
|
25
|
-
- { id: no-invoker, when: tradition.invoker.tier == 0 }
|
|
26
|
-
effects:
|
|
27
|
-
- { target: tradition.necromancer.tier, op: add, value: 1 }
|
|
28
|
-
- id: invoker
|
|
29
|
-
prerequisites:
|
|
30
|
-
- id: no-other-caster
|
|
31
|
-
when: tradition.highmage.tier + tradition.elementalist.tier + tradition.necromancer.tier == 0
|
|
32
|
-
effects:
|
|
33
|
-
- { target: tradition.invoker.tier, op: add, value: 1 }
|
|
11
|
+
requiresOption: true
|
|
12
|
+
from: { type: tradition }
|
|
@@ -4,6 +4,7 @@ effects:
|
|
|
4
4
|
- { target: chassis.attackWarrior, op: add, value: 1 }
|
|
5
5
|
- { target: chassis.hitsExpert, op: add, value: 1 }
|
|
6
6
|
- { target: tradition.mageslayer.tier, op: add, value: 1 }
|
|
7
|
+
- { target: tradition.mageslayer.skill, op: set, value: "'magic'" }
|
|
7
8
|
# Arts at a set rate.
|
|
8
9
|
grants:
|
|
9
10
|
- { item: arts.mageslayer.antimage, when: level >= 1 }
|
|
@@ -4,6 +4,7 @@ tags: [mage-class]
|
|
|
4
4
|
effects:
|
|
5
5
|
- { target: class.mage, op: add, value: 1 }
|
|
6
6
|
- { target: tradition.vowed.tier, op: add, value: 1 }
|
|
7
|
+
- { target: tradition.vowed.skill, op: set, value: 'vowed.skill' }
|
|
7
8
|
grants:
|
|
8
9
|
- { item: arts.vowed.martial-style }
|
|
9
10
|
- { item: arts.vowed.unarmed-might }
|
|
@@ -3,6 +3,7 @@ type: partial
|
|
|
3
3
|
effects:
|
|
4
4
|
- { target: chassis.hitsExpert, op: add, value: 1 }
|
|
5
5
|
- { target: tradition.wise.tier, op: add, value: 1 }
|
|
6
|
+
- { target: tradition.wise.skill, op: set, value: 'wise.skill' }
|
|
6
7
|
choices:
|
|
7
8
|
# The skill that suits the Wise's concept.
|
|
8
9
|
- id: skill
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
id: traditions.invoker
|
|
2
|
+
type: tradition
|
|
3
|
+
fields:
|
|
4
|
+
key: invoker
|
|
5
|
+
prerequisites:
|
|
6
|
+
- id: no-other-caster
|
|
7
|
+
when: tradition.highmage.tier + tradition.elementalist.tier + tradition.necromancer.tier == 0
|
|
8
|
+
effects:
|
|
9
|
+
- { target: tradition.invoker.skill, op: set, value: "'magic'" }
|