@opencharacter/awn-core 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 +48 -3
- package/content/edges/educated.yaml +11 -0
- package/content/edges/focused.yaml +1 -0
- package/content/edges/forged-by-fire.yaml +1 -0
- package/content/edges/hardened-genetics.yaml +1 -0
- package/content/edges/mutant.yaml +17 -0
- package/content/edges/mutation-acceleration.yaml +24 -0
- package/content/edges/prodigy.yaml +1 -0
- package/content/foci/unstable-mutant.yaml +14 -0
- package/content/mutation-categories/cognition.yaml +2 -0
- package/content/mutation-categories/exotic.yaml +2 -0
- package/content/mutation-categories/hybrid.yaml +2 -0
- package/content/mutation-categories/pseudo-psychic.yaml +2 -0
- package/content/mutation-categories/sense.yaml +2 -0
- package/content/mutation-categories/structure.yaml +2 -0
- package/content/mutations/cognition/augmented-cognition.yaml +1 -1
- package/content/mutations/cognition/ballistic-calculator.yaml +1 -1
- package/content/mutations/cognition/eidetic-memory.yaml +1 -1
- package/content/mutations/cognition/internal-map.yaml +1 -1
- package/content/mutations/cognition/intuitive-leap.yaml +1 -1
- package/content/mutations/cognition/memory-eater.yaml +1 -1
- package/content/mutations/cognition/mental-bifurcation.yaml +1 -1
- package/content/mutations/cognition/mind-over-body.yaml +1 -1
- package/content/mutations/cognition/omniglot.yaml +1 -1
- package/content/mutations/cognition/predictive-analysis.yaml +1 -1
- package/content/mutations/exotic/chameleon-field.yaml +1 -1
- package/content/mutations/exotic/electrical-generation.yaml +1 -1
- package/content/mutations/exotic/hemovore.yaml +1 -1
- package/content/mutations/exotic/image-projection.yaml +1 -1
- package/content/mutations/exotic/metamorph.yaml +1 -1
- package/content/mutations/exotic/molecular-phasing.yaml +1 -1
- package/content/mutations/exotic/natural-projectiles.yaml +1 -1
- package/content/mutations/exotic/pheromone-cloud.yaml +1 -1
- package/content/mutations/exotic/photon-manipulation.yaml +1 -1
- package/content/mutations/exotic/sound-generation.yaml +1 -1
- package/content/mutations/hybrid/aquatic-adaptation.yaml +1 -1
- package/content/mutations/hybrid/arboreal-aptitude.yaml +1 -1
- package/content/mutations/hybrid/centauroid.yaml +1 -1
- package/content/mutations/hybrid/crushing-jaws.yaml +1 -1
- package/content/mutations/hybrid/digitigrade-legs.yaml +1 -1
- package/content/mutations/hybrid/functional-wings.yaml +1 -1
- package/content/mutations/hybrid/prehensile-limb.yaml +1 -1
- package/content/mutations/hybrid/savage-claws.yaml +1 -1
- package/content/mutations/hybrid/thick-hide.yaml +1 -1
- package/content/mutations/hybrid/venom-glands.yaml +1 -1
- package/content/mutations/pseudo-psychic/force-field.yaml +1 -1
- package/content/mutations/pseudo-psychic/induce-confusion.yaml +1 -1
- package/content/mutations/pseudo-psychic/limited-precognition.yaml +1 -1
- package/content/mutations/pseudo-psychic/mental-domination.yaml +1 -1
- package/content/mutations/pseudo-psychic/mind-reader.yaml +1 -1
- package/content/mutations/pseudo-psychic/neural-lockdown.yaml +1 -1
- package/content/mutations/pseudo-psychic/panic-wave.yaml +1 -1
- package/content/mutations/pseudo-psychic/spatial-displacement.yaml +1 -1
- package/content/mutations/pseudo-psychic/telekinetic-reach.yaml +1 -1
- package/content/mutations/pseudo-psychic/thermokinesis.yaml +1 -1
- package/content/mutations/sense/accelerated-perception.yaml +1 -1
- package/content/mutations/sense/acute-hearing.yaml +1 -1
- package/content/mutations/sense/acute-olfaction.yaml +1 -1
- package/content/mutations/sense/echolocation.yaml +1 -1
- package/content/mutations/sense/empathic-sensitivity.yaml +1 -1
- package/content/mutations/sense/night-vision.yaml +1 -1
- package/content/mutations/sense/panoptic-vision.yaml +1 -1
- package/content/mutations/sense/tactile-analysis.yaml +1 -1
- package/content/mutations/sense/telescopic-sight.yaml +1 -1
- package/content/mutations/sense/thermal-vision.yaml +1 -1
- package/content/mutations/structure/augmented-muscle.yaml +1 -1
- package/content/mutations/structure/explosive-exertion.yaml +1 -1
- package/content/mutations/structure/hypercontortion.yaml +1 -1
- package/content/mutations/structure/improved-joints.yaml +1 -1
- package/content/mutations/structure/leaper.yaml +1 -1
- package/content/mutations/structure/redundant-organs.yaml +1 -1
- package/content/mutations/structure/regenerator.yaml +1 -1
- package/content/mutations/structure/reinforced-tissues.yaml +1 -1
- package/content/mutations/structure/sealed-systems.yaml +1 -1
- package/content/mutations/structure/stamina-reserves.yaml +1 -1
- package/content/prepared/backpack.yaml +5 -0
- package/content/prepared/binoculars.yaml +4 -0
- package/content/prepared/camping-kit.yaml +4 -0
- package/content/prepared/cash.yaml +4 -0
- package/content/prepared/cold-weather-clothes.yaml +5 -0
- package/content/prepared/criminal-firearm.yaml +7 -0
- package/content/prepared/first-aid-kit.yaml +4 -0
- package/content/prepared/flashlight.yaml +4 -0
- package/content/prepared/heavy-pistol.yaml +7 -0
- package/content/prepared/knife.yaml +5 -0
- package/content/prepared/laptop.yaml +4 -0
- package/content/prepared/light-pistol.yaml +7 -0
- package/content/prepared/lighters.yaml +4 -0
- package/content/prepared/lockpick-kit.yaml +4 -0
- package/content/prepared/preserved-food.yaml +4 -0
- package/content/prepared/profession-item.yaml +4 -0
- package/content/prepared/purification-tablets.yaml +4 -0
- package/content/prepared/radio.yaml +4 -0
- package/content/prepared/rifle.yaml +7 -0
- package/content/prepared/shotgun.yaml +7 -0
- package/content/prepared/sleeping-bag.yaml +4 -0
- package/content/prepared/smartphone.yaml +4 -0
- package/content/prepared/solar-charger.yaml +4 -0
- package/content/prepared/tent.yaml +4 -0
- package/content/prepared/toolkit.yaml +4 -0
- package/content/prepared/walkie-talkies.yaml +5 -0
- package/content/prepared/water-purifier.yaml +4 -0
- package/content/weapons/primitive-bow.yaml +1 -0
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.json +101 -34
- package/dist/index.js +1 -1
- package/dist/release.json +2008 -1434
- package/i18n/en/content.yaml +49 -0
- package/i18n/en/core.yaml +52 -34
- package/pack.yaml +2 -2
- package/package.json +2 -2
- package/rules/advancement.yaml +41 -42
- package/rules/backgrounds.yaml +17 -16
- package/rules/checks.yaml +5 -1
- package/rules/combat.yaml +1 -1
- package/rules/creation.yaml +71 -25
- package/rules/features.yaml +9 -4
- package/rules/gear.yaml +20 -1
- package/rules/layout.yaml +2 -0
- package/rules/mutations.yaml +50 -26
- package/rules/skills.yaml +8 -4
- package/rules/starting-equipment.yaml +24 -101
- package/rules/tags.yaml +13 -0
package/README.md
CHANGED
|
@@ -15,6 +15,9 @@ edition and is used with the author's permission. Nothing from the paid edition
|
|
|
15
15
|
pnpm add @opencharacter/awn-core @opencharacter/engine
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
+
This release needs spec 0.3: `@opencharacter/engine` 0.3.0 or later. An engine for an older
|
|
19
|
+
spec refuses it (`spec-version-unsupported`).
|
|
20
|
+
|
|
18
21
|
```ts
|
|
19
22
|
import { applyChanges, loadRuleset, startAction } from '@opencharacter/engine';
|
|
20
23
|
import apocalypse from '@opencharacter/awn-core';
|
|
@@ -25,9 +28,9 @@ const { ruleset } = loaded;
|
|
|
25
28
|
|
|
26
29
|
// A random survivor: every roll and pick made by the engine.
|
|
27
30
|
const blank = {
|
|
28
|
-
specVersion: '0.
|
|
31
|
+
specVersion: '0.3.0',
|
|
29
32
|
id: 'survivor',
|
|
30
|
-
packs: [{ id: 'awn-core', version: '0.
|
|
33
|
+
packs: [{ id: 'awn-core', version: '0.2.0' }],
|
|
31
34
|
creating: true,
|
|
32
35
|
};
|
|
33
36
|
const run = startAction(ruleset, blank, {
|
|
@@ -83,13 +86,55 @@ const run = startAction(ruleset, blank, {
|
|
|
83
86
|
- **Encumbrance:** Readied (equipped) and Stowed loads against Strength, small items bundled
|
|
84
87
|
three to one when stowed, and the slower moves of pushing past the limits. A start that brings
|
|
85
88
|
more than its Strength can haul stows Readied items, then leaves Stowed ones behind, heaviest
|
|
86
|
-
first, until it is within the limits.
|
|
89
|
+
first, until it is within the limits. A guided player picks which, but can't stop early.
|
|
87
90
|
- **Rolled twice:** Weak Heart's Exert checks keep the worse of two 2d6 rolls; Constant
|
|
88
91
|
Secretions (the `grapple` situational choice) and Survivalist (`foraging`) keep the better. An
|
|
89
92
|
attack given its target's view (`participants.target`) rolls laser damage twice against Light
|
|
90
93
|
Sensitivity, the higher kept.
|
|
91
94
|
- **System strain and stress:** maximums with the edges, foci and mutations that change them.
|
|
92
95
|
|
|
96
|
+
## Add-on packs
|
|
97
|
+
|
|
98
|
+
A pack that depends on `awn-core` can add content of its types, and creation and advancement offer
|
|
99
|
+
it with the core's, in the guided picks and the random draws:
|
|
100
|
+
|
|
101
|
+
- **Edges and foci** join every pick. Their limits are tags, not IDs: `repeatable`, `first-edge`
|
|
102
|
+
(Forged By Fire), `needs-mutant`, `makes-mutant`, `not-mutant`, `not-underdog`. One with
|
|
103
|
+
`gainPart: true` runs its own `gain-part` action (`listed: false`) when taken, as Educated,
|
|
104
|
+
Mutant, Mutation Acceleration and Unstable Mutant do; an edge's mutation points are an effect on
|
|
105
|
+
`mutations.points.edges`.
|
|
106
|
+
- **Prepared survivors' picks** are content of the type `prepared`: the item (`gear`, by ID;
|
|
107
|
+
another pack's qualified), its quantity, readied or not, and what comes with it (`extra`).
|
|
108
|
+
- **Weapons:** a wasteland warrior's weapon is any primitive melee weapon, or a primitive one with
|
|
109
|
+
`kitAmmo` (the bow and its arrows), which comes with that ammunition.
|
|
110
|
+
- **Mutations** join the chosen and the fallback picks; the d6 category and d10 tables, and the
|
|
111
|
+
d100 negative table, keep the book's odds.
|
|
112
|
+
- **Mutation categories** are content of the type `mutationCategory`, which a mutation names in
|
|
113
|
+
`category`. An added category joins the "two in one category" pick; its mutations' `roll` is
|
|
114
|
+
their d10 roll within it.
|
|
115
|
+
- **Tagged steps** take an add-on's rules-level `option` and `changes` effects: `creation.kit`
|
|
116
|
+
(the starting equipment option: an added option is another way to equip), `creation.mutation`
|
|
117
|
+
(how mutation points are spent), `creation.finish` (the last step of creation) and
|
|
118
|
+
`advancement.level` (each new level's level and skill points).
|
|
119
|
+
|
|
120
|
+
- **Open enums:** the stigma fields (`stigma.part`, `stigma.part2`, `stigma.nature`,
|
|
121
|
+
`stigma.detail`), for more suggestions to set by hand; the rolled tables keep the book's.
|
|
122
|
+
- **Naming what an add-on adds:** it names each added value, option or key in its own text,
|
|
123
|
+
under the key this pack would use, and `createText` finds it there when the app passes the
|
|
124
|
+
ruleset's `enumOrigins`, `optionOrigins` and `familyOrigins`. For example,
|
|
125
|
+
`tail` added to `awn-core:fields.stigma.part` is
|
|
126
|
+
`fields.stigma.part.values.tail.name: Tail` (through `enumOrigins`).
|
|
127
|
+
|
|
128
|
+
- **Skills** are the `skill` family: an add-on adds one (`families: { 'awn-core:skill': [<key>] }`)
|
|
129
|
+
and declares its `skills.<key>.level` (tagged `skill` and `skill.<key>`), `.credit` and `.cap`
|
|
130
|
+
(tagged `skill-cap` and `skill.<key>`). The core's changes reach them through `fieldId`, so
|
|
131
|
+
creation, `improve-skill`, skill points and a forbidding mutation gain, raise and lower it as the
|
|
132
|
+
core's. A background's entries (`freeSkill`, `quickSkill1`, `quickSkill2`, `growth1`–`growth6`,
|
|
133
|
+
`learning1`–`learning8`) and the parameters `improve-skill.skill` and `gain-benefit.entry` are
|
|
134
|
+
open enums that take its key.
|
|
135
|
+
|
|
136
|
+
The near-future and wasteland d20 tables are the book's own tables.
|
|
137
|
+
|
|
93
138
|
## Rule readings
|
|
94
139
|
|
|
95
140
|
- **Learning picks** may take any skill: every Learning table ends with Any Skill.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
id: edges.educated
|
|
2
2
|
type: edge
|
|
3
3
|
fields:
|
|
4
|
+
gainPart: true
|
|
4
5
|
bonusSkill:
|
|
5
6
|
[
|
|
6
7
|
administer,
|
|
@@ -27,3 +28,13 @@ effects:
|
|
|
27
28
|
- target: skills.perLevel
|
|
28
29
|
op: add
|
|
29
30
|
value: 1
|
|
31
|
+
actions:
|
|
32
|
+
# Taken after 1st level: the bonus skill points of the levels before.
|
|
33
|
+
- id: gain-part
|
|
34
|
+
listed: false
|
|
35
|
+
steps:
|
|
36
|
+
- id: points
|
|
37
|
+
kind: changes
|
|
38
|
+
when: '!character.creating'
|
|
39
|
+
changes:
|
|
40
|
+
- { type: adjust, field: skills.points, by: level - 1 }
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
id: edges.mutant
|
|
2
2
|
type: edge
|
|
3
|
+
tags: [makes-mutant]
|
|
4
|
+
fields:
|
|
5
|
+
gainPart: true
|
|
6
|
+
effects:
|
|
7
|
+
- { target: mutations.points.edges, op: add, value: 2 }
|
|
3
8
|
choices:
|
|
4
9
|
# After the mutations: one attribute with a modifier of -1 or better takes -1.
|
|
5
10
|
- id: penalty
|
|
@@ -20,3 +25,15 @@ choices:
|
|
|
20
25
|
}
|
|
21
26
|
op: add
|
|
22
27
|
value: -1
|
|
28
|
+
actions:
|
|
29
|
+
# Taken after creation: the mutations come at once.
|
|
30
|
+
- id: gain-part
|
|
31
|
+
listed: false
|
|
32
|
+
params:
|
|
33
|
+
random: { type: boolean, default: false }
|
|
34
|
+
steps:
|
|
35
|
+
- id: mutate
|
|
36
|
+
kind: action
|
|
37
|
+
when: '!character.creating'
|
|
38
|
+
use: mutate
|
|
39
|
+
params: { random: params.random }
|
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
id: edges.mutation-acceleration
|
|
2
2
|
type: edge
|
|
3
|
+
tags: [needs-mutant]
|
|
3
4
|
prerequisites:
|
|
4
5
|
- { id: mutant, when: mutations.mutant }
|
|
6
|
+
fields:
|
|
7
|
+
gainPart: true
|
|
8
|
+
effects:
|
|
9
|
+
- { target: mutations.points.edges, op: add, value: 2 }
|
|
10
|
+
actions:
|
|
11
|
+
# Taken after creation: its two points are spent at once.
|
|
12
|
+
- id: gain-part
|
|
13
|
+
listed: false
|
|
14
|
+
params:
|
|
15
|
+
random: { type: boolean, default: false }
|
|
16
|
+
steps:
|
|
17
|
+
- id: buy1
|
|
18
|
+
kind: action
|
|
19
|
+
sheet: proposed
|
|
20
|
+
when: '!character.creating && mutations.points.left >= 1'
|
|
21
|
+
use: buy-mutation
|
|
22
|
+
params: { random: params.random }
|
|
23
|
+
- id: buy2
|
|
24
|
+
kind: action
|
|
25
|
+
sheet: proposed
|
|
26
|
+
when: '!character.creating && mutations.points.left >= 1'
|
|
27
|
+
use: buy-mutation
|
|
28
|
+
params: { random: params.random }
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
id: foci.unstable-mutant
|
|
2
2
|
type: focus
|
|
3
|
+
tags: [needs-mutant]
|
|
3
4
|
prerequisites:
|
|
4
5
|
- { id: mutant, when: mutations.mutant }
|
|
6
|
+
fields:
|
|
7
|
+
gainPart: true
|
|
8
|
+
actions:
|
|
9
|
+
# A new level-1 focus: one free positive mutation, rolled.
|
|
10
|
+
- id: gain-part
|
|
11
|
+
listed: false
|
|
12
|
+
params:
|
|
13
|
+
random: { type: boolean, default: false }
|
|
14
|
+
steps:
|
|
15
|
+
- id: mutation
|
|
16
|
+
kind: action
|
|
17
|
+
use: roll-mutation
|
|
18
|
+
params: { origin: "'unstable'", random: params.random }
|