@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.
Files changed (123) hide show
  1. package/README.md +48 -3
  2. package/content/edges/educated.yaml +11 -0
  3. package/content/edges/focused.yaml +1 -0
  4. package/content/edges/forged-by-fire.yaml +1 -0
  5. package/content/edges/hardened-genetics.yaml +1 -0
  6. package/content/edges/mutant.yaml +17 -0
  7. package/content/edges/mutation-acceleration.yaml +24 -0
  8. package/content/edges/prodigy.yaml +1 -0
  9. package/content/foci/unstable-mutant.yaml +14 -0
  10. package/content/mutation-categories/cognition.yaml +2 -0
  11. package/content/mutation-categories/exotic.yaml +2 -0
  12. package/content/mutation-categories/hybrid.yaml +2 -0
  13. package/content/mutation-categories/pseudo-psychic.yaml +2 -0
  14. package/content/mutation-categories/sense.yaml +2 -0
  15. package/content/mutation-categories/structure.yaml +2 -0
  16. package/content/mutations/cognition/augmented-cognition.yaml +1 -1
  17. package/content/mutations/cognition/ballistic-calculator.yaml +1 -1
  18. package/content/mutations/cognition/eidetic-memory.yaml +1 -1
  19. package/content/mutations/cognition/internal-map.yaml +1 -1
  20. package/content/mutations/cognition/intuitive-leap.yaml +1 -1
  21. package/content/mutations/cognition/memory-eater.yaml +1 -1
  22. package/content/mutations/cognition/mental-bifurcation.yaml +1 -1
  23. package/content/mutations/cognition/mind-over-body.yaml +1 -1
  24. package/content/mutations/cognition/omniglot.yaml +1 -1
  25. package/content/mutations/cognition/predictive-analysis.yaml +1 -1
  26. package/content/mutations/exotic/chameleon-field.yaml +1 -1
  27. package/content/mutations/exotic/electrical-generation.yaml +1 -1
  28. package/content/mutations/exotic/hemovore.yaml +1 -1
  29. package/content/mutations/exotic/image-projection.yaml +1 -1
  30. package/content/mutations/exotic/metamorph.yaml +1 -1
  31. package/content/mutations/exotic/molecular-phasing.yaml +1 -1
  32. package/content/mutations/exotic/natural-projectiles.yaml +1 -1
  33. package/content/mutations/exotic/pheromone-cloud.yaml +1 -1
  34. package/content/mutations/exotic/photon-manipulation.yaml +1 -1
  35. package/content/mutations/exotic/sound-generation.yaml +1 -1
  36. package/content/mutations/hybrid/aquatic-adaptation.yaml +1 -1
  37. package/content/mutations/hybrid/arboreal-aptitude.yaml +1 -1
  38. package/content/mutations/hybrid/centauroid.yaml +1 -1
  39. package/content/mutations/hybrid/crushing-jaws.yaml +1 -1
  40. package/content/mutations/hybrid/digitigrade-legs.yaml +1 -1
  41. package/content/mutations/hybrid/functional-wings.yaml +1 -1
  42. package/content/mutations/hybrid/prehensile-limb.yaml +1 -1
  43. package/content/mutations/hybrid/savage-claws.yaml +1 -1
  44. package/content/mutations/hybrid/thick-hide.yaml +1 -1
  45. package/content/mutations/hybrid/venom-glands.yaml +1 -1
  46. package/content/mutations/pseudo-psychic/force-field.yaml +1 -1
  47. package/content/mutations/pseudo-psychic/induce-confusion.yaml +1 -1
  48. package/content/mutations/pseudo-psychic/limited-precognition.yaml +1 -1
  49. package/content/mutations/pseudo-psychic/mental-domination.yaml +1 -1
  50. package/content/mutations/pseudo-psychic/mind-reader.yaml +1 -1
  51. package/content/mutations/pseudo-psychic/neural-lockdown.yaml +1 -1
  52. package/content/mutations/pseudo-psychic/panic-wave.yaml +1 -1
  53. package/content/mutations/pseudo-psychic/spatial-displacement.yaml +1 -1
  54. package/content/mutations/pseudo-psychic/telekinetic-reach.yaml +1 -1
  55. package/content/mutations/pseudo-psychic/thermokinesis.yaml +1 -1
  56. package/content/mutations/sense/accelerated-perception.yaml +1 -1
  57. package/content/mutations/sense/acute-hearing.yaml +1 -1
  58. package/content/mutations/sense/acute-olfaction.yaml +1 -1
  59. package/content/mutations/sense/echolocation.yaml +1 -1
  60. package/content/mutations/sense/empathic-sensitivity.yaml +1 -1
  61. package/content/mutations/sense/night-vision.yaml +1 -1
  62. package/content/mutations/sense/panoptic-vision.yaml +1 -1
  63. package/content/mutations/sense/tactile-analysis.yaml +1 -1
  64. package/content/mutations/sense/telescopic-sight.yaml +1 -1
  65. package/content/mutations/sense/thermal-vision.yaml +1 -1
  66. package/content/mutations/structure/augmented-muscle.yaml +1 -1
  67. package/content/mutations/structure/explosive-exertion.yaml +1 -1
  68. package/content/mutations/structure/hypercontortion.yaml +1 -1
  69. package/content/mutations/structure/improved-joints.yaml +1 -1
  70. package/content/mutations/structure/leaper.yaml +1 -1
  71. package/content/mutations/structure/redundant-organs.yaml +1 -1
  72. package/content/mutations/structure/regenerator.yaml +1 -1
  73. package/content/mutations/structure/reinforced-tissues.yaml +1 -1
  74. package/content/mutations/structure/sealed-systems.yaml +1 -1
  75. package/content/mutations/structure/stamina-reserves.yaml +1 -1
  76. package/content/prepared/backpack.yaml +5 -0
  77. package/content/prepared/binoculars.yaml +4 -0
  78. package/content/prepared/camping-kit.yaml +4 -0
  79. package/content/prepared/cash.yaml +4 -0
  80. package/content/prepared/cold-weather-clothes.yaml +5 -0
  81. package/content/prepared/criminal-firearm.yaml +7 -0
  82. package/content/prepared/first-aid-kit.yaml +4 -0
  83. package/content/prepared/flashlight.yaml +4 -0
  84. package/content/prepared/heavy-pistol.yaml +7 -0
  85. package/content/prepared/knife.yaml +5 -0
  86. package/content/prepared/laptop.yaml +4 -0
  87. package/content/prepared/light-pistol.yaml +7 -0
  88. package/content/prepared/lighters.yaml +4 -0
  89. package/content/prepared/lockpick-kit.yaml +4 -0
  90. package/content/prepared/preserved-food.yaml +4 -0
  91. package/content/prepared/profession-item.yaml +4 -0
  92. package/content/prepared/purification-tablets.yaml +4 -0
  93. package/content/prepared/radio.yaml +4 -0
  94. package/content/prepared/rifle.yaml +7 -0
  95. package/content/prepared/shotgun.yaml +7 -0
  96. package/content/prepared/sleeping-bag.yaml +4 -0
  97. package/content/prepared/smartphone.yaml +4 -0
  98. package/content/prepared/solar-charger.yaml +4 -0
  99. package/content/prepared/tent.yaml +4 -0
  100. package/content/prepared/toolkit.yaml +4 -0
  101. package/content/prepared/walkie-talkies.yaml +5 -0
  102. package/content/prepared/water-purifier.yaml +4 -0
  103. package/content/weapons/primitive-bow.yaml +1 -0
  104. package/dist/i18n/en.js +1 -1
  105. package/dist/i18n/en.json +101 -34
  106. package/dist/index.js +1 -1
  107. package/dist/release.json +2008 -1434
  108. package/i18n/en/content.yaml +49 -0
  109. package/i18n/en/core.yaml +52 -34
  110. package/pack.yaml +2 -2
  111. package/package.json +2 -2
  112. package/rules/advancement.yaml +41 -42
  113. package/rules/backgrounds.yaml +17 -16
  114. package/rules/checks.yaml +5 -1
  115. package/rules/combat.yaml +1 -1
  116. package/rules/creation.yaml +71 -25
  117. package/rules/features.yaml +9 -4
  118. package/rules/gear.yaml +20 -1
  119. package/rules/layout.yaml +2 -0
  120. package/rules/mutations.yaml +50 -26
  121. package/rules/skills.yaml +8 -4
  122. package/rules/starting-equipment.yaml +24 -101
  123. package/rules/tags.yaml +13 -0
@@ -76,6 +76,12 @@ foci.specialist.choices.skill.options.trade.name: Trade
76
76
  foci.specialist.choices.skill.options.work.name: Work
77
77
  foci.unstable-mutant.prerequisites.mutant: Mutant
78
78
  templates.unarmed-combatant.name: '{base} (Unarmed Combatant)'
79
+ mutation-categories.cognition.name: Cognition
80
+ mutation-categories.exotic.name: Exotic
81
+ mutation-categories.hybrid.name: Hybrid
82
+ mutation-categories.pseudo-psychic.name: Pseudo-psychic
83
+ mutation-categories.sense.name: Sense
84
+ mutation-categories.structure.name: Structure
79
85
  mutations.structure.augmented-muscle.name: Augmented Muscle
80
86
  mutations.structure.explosive-exertion.name: Explosive Exertion
81
87
  mutations.structure.hypercontortion.name: Hypercontortion
@@ -334,3 +340,46 @@ gear.titan.name: Titan
334
340
  gear.trauma-patch.name: Trauma patch
335
341
  gear.weeper.name: Weeper
336
342
  gear.zen.name: Zen
343
+ types.prepared.name: Prepared survivor's pick
344
+ prepared.light-pistol.name: Light pistol
345
+ prepared.heavy-pistol.name: Heavy pistol
346
+ prepared.rifle.name: Rifle
347
+ prepared.shotgun.name: Shotgun
348
+ prepared.criminal-firearm.name: A criminal's non-military firearm
349
+ prepared.knife.name: Knife
350
+ prepared.smartphone.name: Smartphone
351
+ prepared.preserved-food.name: 7 days' preserved food
352
+ prepared.camping-kit.name: Camping kit
353
+ prepared.first-aid-kit.name: First aid kit
354
+ prepared.tent.name: Tent
355
+ prepared.toolkit.name: Toolkit
356
+ prepared.flashlight.name: Flashlight
357
+ prepared.cold-weather-clothes.name: Cold weather clothing
358
+ prepared.sleeping-bag.name: Sleeping bag
359
+ prepared.cash.name: '$1,000 in small bills'
360
+ prepared.laptop.name: Laptop
361
+ prepared.walkie-talkies.name: A pair of walkie-talkies
362
+ prepared.solar-charger.name: Solar charger
363
+ prepared.radio.name: Portable ham radio
364
+ prepared.lockpick-kit.name: Lockpick kit
365
+ prepared.lighters.name: 20 disposable lighters
366
+ prepared.purification-tablets.name: 100 water purification tablets
367
+ prepared.profession-item.name: An item from your background
368
+ prepared.backpack.name: Backpack
369
+ prepared.binoculars.name: Binoculars
370
+ prepared.water-purifier.name: Water purifier
371
+ types.prepared.fields.gear.name: Item
372
+ types.prepared.fields.quantity.name: Quantity
373
+ types.prepared.fields.equipped.name: Readied
374
+ types.prepared.fields.extra.name: Comes with
375
+ types.prepared.fields.extraQuantity.name: How many come with it
376
+ types.weapon.fields.kitAmmo.name: Starting ammunition
377
+ types.edge.fields.gainPart.name: Brings more when taken
378
+ types.focus.fields.gainPart.name: Brings more when taken
379
+ edges.educated.actions.gain-part.name: Educated's earlier skill points
380
+ edges.mutant.actions.gain-part.name: Mutate
381
+ edges.mutation-acceleration.actions.gain-part.name: Spend the new mutation points
382
+ foci.unstable-mutant.actions.gain-part.name: Roll a free mutation
383
+ edges.mutant.actions.gain-part.params.random.name: Random
384
+ edges.mutation-acceleration.actions.gain-part.params.random.name: Random
385
+ foci.unstable-mutant.actions.gain-part.params.random.name: Random
package/i18n/en/core.yaml CHANGED
@@ -12,13 +12,7 @@ actions.bonus-skill.results.gained.name: Gained
12
12
  actions.buy-mutation.name: Spend mutation points
13
13
  actions.buy-mutation.options.category.name: Roll two in one category (3 points)
14
14
  actions.buy-mutation.options.chosen.name: Pick one mutation (3 points)
15
- actions.buy-mutation.options.cognition.name: Cognition
16
- actions.buy-mutation.options.exotic.name: Exotic
17
- actions.buy-mutation.options.hybrid.name: Hybrid
18
- actions.buy-mutation.options.pseudo-psychic.name: Pseudo-psychic
19
15
  actions.buy-mutation.options.random.name: Roll one mutation (1 point)
20
- actions.buy-mutation.options.sense.name: Sense
21
- actions.buy-mutation.options.structure.name: Structure
22
16
  actions.buy-mutation.params.random.name: Random
23
17
  actions.buy-mutation.results.bought.name: Bought
24
18
  actions.buy-mutation.steps.category.prompt: Category
@@ -61,6 +55,7 @@ actions.create-character.steps.roll3.name: Table roll
61
55
  actions.create-character.steps.skillMethod.prompt: Background skills
62
56
  actions.create-character.steps.split.prompt: Divide three rolls
63
57
  actions.create-character.steps.stowArmor.prompt: Stow armor (over the Readied limit)
58
+ actions.create-character.steps.readyGear.prompt: Ready gear (over the Stowed limit)
64
59
  actions.create-character.steps.stowGear.prompt: Stow gear (over the Readied limit)
65
60
  actions.create-character.steps.stowWeapon.prompt: Stow a weapon (over the Readied limit)
66
61
  actions.create-character.steps.str.name: Strength
@@ -74,9 +69,34 @@ actions.gain-benefit.options.int.name: Intelligence
74
69
  actions.gain-benefit.options.wis.name: Wisdom
75
70
  actions.gain-benefit.options.cha.name: Charisma
76
71
  actions.gain-benefit.params.entry.name: Entry
72
+ actions.gain-benefit.params.entry.values.administer.name: Administer
73
+ actions.gain-benefit.params.entry.values.connect.name: Connect
74
+ actions.gain-benefit.params.entry.values.drive.name: Drive
75
+ actions.gain-benefit.params.entry.values.exert.name: Exert
76
+ actions.gain-benefit.params.entry.values.fix.name: Fix
77
+ actions.gain-benefit.params.entry.values.heal.name: Heal
78
+ actions.gain-benefit.params.entry.values.know.name: Know
79
+ actions.gain-benefit.params.entry.values.lead.name: Lead
80
+ actions.gain-benefit.params.entry.values.notice.name: Notice
81
+ actions.gain-benefit.params.entry.values.perform.name: Perform
82
+ actions.gain-benefit.params.entry.values.program.name: Program
83
+ actions.gain-benefit.params.entry.values.punch.name: Punch
84
+ actions.gain-benefit.params.entry.values.shoot.name: Shoot
85
+ actions.gain-benefit.params.entry.values.sneak.name: Sneak
86
+ actions.gain-benefit.params.entry.values.stab.name: Stab
87
+ actions.gain-benefit.params.entry.values.survive.name: Survive
88
+ actions.gain-benefit.params.entry.values.talk.name: Talk
89
+ actions.gain-benefit.params.entry.values.trade.name: Trade
90
+ actions.gain-benefit.params.entry.values.work.name: Work
91
+ actions.gain-benefit.params.entry.values.any-combat.name: Any combat skill
92
+ actions.gain-benefit.params.entry.values.any-skill.name: Any skill
93
+ actions.gain-benefit.params.entry.values.any-stat-1.name: +1 any attribute
94
+ actions.gain-benefit.params.entry.values.physical2.name: +2 physical attributes
95
+ actions.gain-benefit.params.entry.values.mental2.name: +2 mental attributes
77
96
  actions.gain-benefit.params.prefer.name: Preferred skills
78
97
  actions.gain-benefit.params.random.name: Random
79
98
  actions.gain-benefit.results.gained.name: Gained
99
+ actions.gain-benefit.results.none.name: Every skill at its cap
80
100
  actions.gain-benefit.steps.stat.prompt: Attribute bonus
81
101
  actions.gain-edge.name: Gain an edge
82
102
  actions.gain-edge.params.random.name: Random
@@ -114,6 +134,7 @@ actions.gain-skill.params.prefer.name: Preferred skills
114
134
  actions.gain-skill.params.random.name: Random
115
135
  actions.gain-skill.params.skills.name: Skills
116
136
  actions.gain-skill.results.gained.name: Gained
137
+ actions.gain-skill.results.none.name: Every skill at its cap
117
138
  actions.gain-skill.steps.skill.prompt: Skill
118
139
  actions.improve-attribute.name: Improve an attribute
119
140
  actions.improve-attribute.params.attribute.name: Attribute
@@ -225,6 +246,7 @@ actions.skill-points-toward.params.points.name: Points
225
246
  actions.skill-points-toward.params.random.name: Random
226
247
  actions.skill-points-toward.params.skills.name: Skills
227
248
  actions.skill-points-toward.results.spent.name: Spent
249
+ actions.skill-points-toward.results.none.name: Every skill at level-4
228
250
  actions.skill-points-toward.steps.skill.prompt: Skill
229
251
  actions.starting-equipment.name: Starting equipment
230
252
  actions.starting-equipment.options.1.name: Entry 1
@@ -247,39 +269,12 @@ actions.starting-equipment.options.6.name: Entry 6
247
269
  actions.starting-equipment.options.7.name: Entry 7
248
270
  actions.starting-equipment.options.8.name: Entry 8
249
271
  actions.starting-equipment.options.9.name: Entry 9
250
- actions.starting-equipment.options.backpack.name: Backpack
251
- actions.starting-equipment.options.binoculars.name: Binoculars
252
- actions.starting-equipment.options.camping-kit.name: Camping kit
253
- actions.starting-equipment.options.cash.name: '$1,000 in small bills'
254
- actions.starting-equipment.options.cold-weather-clothes.name: Cold weather clothing
255
- actions.starting-equipment.options.criminal-firearm.name: A criminal's non-military firearm
256
- actions.starting-equipment.options.first-aid-kit.name: First aid kit
257
- actions.starting-equipment.options.flashlight.name: Flashlight
258
- actions.starting-equipment.options.heavy-pistol.name: Heavy pistol
259
272
  actions.starting-equipment.options.innocents.name: Hapless innocents
260
- actions.starting-equipment.options.knife.name: Knife
261
- actions.starting-equipment.options.laptop.name: Laptop
262
- actions.starting-equipment.options.light-pistol.name: Light pistol
263
- actions.starting-equipment.options.lighters.name: 20 disposable lighters
264
- actions.starting-equipment.options.lockpick-kit.name: Lockpick kit
265
273
  actions.starting-equipment.options.near-future.name: 'Wasteland warrior: near-future survivor'
266
274
  actions.starting-equipment.options.pick.name: Pick one item
267
275
  actions.starting-equipment.options.prepared.name: You saw it coming
268
- actions.starting-equipment.options.preserved-food.name: 7 days' preserved food
269
- actions.starting-equipment.options.profession-item.name: An item from your background
270
- actions.starting-equipment.options.purification-tablets.name: 100 water purification tablets
271
- actions.starting-equipment.options.radio.name: Portable ham radio
272
- actions.starting-equipment.options.rifle.name: Rifle
273
276
  actions.starting-equipment.options.roll.name: Roll three times
274
- actions.starting-equipment.options.shotgun.name: Shotgun
275
- actions.starting-equipment.options.sleeping-bag.name: Sleeping bag
276
- actions.starting-equipment.options.smartphone.name: Smartphone
277
- actions.starting-equipment.options.solar-charger.name: Solar charger
278
- actions.starting-equipment.options.tent.name: Tent
279
- actions.starting-equipment.options.toolkit.name: Toolkit
280
- actions.starting-equipment.options.walkie-talkies.name: A pair of walkie-talkies
281
277
  actions.starting-equipment.options.wasteland.name: 'Wasteland warrior: wasteland wanderer'
282
- actions.starting-equipment.options.water-purifier.name: Water purifier
283
278
  actions.starting-equipment.params.random.name: Random
284
279
  actions.starting-equipment.results.equipped.name: Equipped
285
280
  actions.starting-equipment.steps.entry.prompt: Table entry
@@ -460,7 +455,7 @@ fields.xp.next.name: Next level at
460
455
  fields.xp.rate.name: Advancement rate
461
456
  fields.xp.rate.values.fast.name: Fast
462
457
  fields.xp.rate.values.slow.name: Slow
463
- groups.advancement-actions.label: Advancement
458
+ groups.advancement-actions.label: Advancement actions
464
459
  groups.advancement.label: Advancement
465
460
  groups.armor.label: Armor
466
461
  groups.attacks.label: Attacks
@@ -490,6 +485,7 @@ situational.versus.values.other.name: Anything else
490
485
  situational.versus.values.poison.name: Poison
491
486
  situational.versus.values.radiation.name: Radiation
492
487
  tags.advancement.name: Advancement
488
+ tags.advancement.level.name: New level
493
489
  tags.animal.name: Animal
494
490
  tags.attack.melee.name: Melee attack
495
491
  tags.attack.name: Attack
@@ -516,6 +512,9 @@ tags.bundleable.name: Bundles three to one
516
512
  tags.burst.name: Burst fire
517
513
  tags.check.name: Skill check
518
514
  tags.creation.name: Creation
515
+ tags.creation.finish.name: Creation finish
516
+ tags.creation.kit.name: Starting equipment pick
517
+ tags.creation.mutation.name: Mutation point spending
519
518
  tags.damage.name: Damage
520
519
  tags.drug.name: Drug
521
520
  tags.energy.name: Energy weapon
@@ -564,6 +563,12 @@ tags.suppress.name: Suppressive fire
564
563
  tags.thrown.name: Thrown
565
564
  tags.two-handed.name: Two-handed
566
565
  tags.vision.name: Improves sight
566
+ tags.repeatable.name: Taken more than once
567
+ tags.first-edge.name: Only as the first edge
568
+ tags.needs-mutant.name: Mutants only
569
+ tags.makes-mutant.name: Makes a mutant
570
+ tags.not-mutant.name: Not for mutants
571
+ tags.not-underdog.name: Not under the underdog rule
567
572
  types.armor.fields.ac.name: AC
568
573
  types.armor.fields.cost.name: Cost
569
574
  types.armor.fields.enc.name: Encumbrance
@@ -596,6 +601,7 @@ types.focus.fields.bonusSkill2.name: Second bonus skill options
596
601
  types.focus.fields.maxLevel.name: Levels
597
602
  types.focus.fields.specialty.name: Bonus skill is the specialised skill
598
603
  types.focus.fields.multiple.name: May be taken more than once
604
+ types.focus.state.level.name: Level
599
605
  types.focus.name: Focus
600
606
  types.gear.fields.cost.name: Cost
601
607
  types.gear.fields.enc.name: Encumbrance
@@ -603,10 +609,12 @@ types.gear.fields.healSkill.name: Heal skill to apply
603
609
  types.gear.fields.techLevel.name: Tech level
604
610
  types.gear.fields.wornFree.name: No encumbrance while worn
605
611
  types.gear.name: Gear
612
+ types.mutationCategory.name: Mutation category
606
613
  types.mutation.fields.bonusSkill.name: Bonus skill options
607
614
  types.mutation.fields.category.name: Category
608
615
  types.mutation.fields.roll.name: d10 roll
609
616
  types.mutation.name: Positive mutation
617
+ types.mutation.state.origin.name: How it was gained
610
618
  types.mutation.state.origin.values.category.name: Rolled in a category
611
619
  types.mutation.state.origin.values.chosen.name: Chosen
612
620
  types.mutation.state.origin.values.free.name: Free
@@ -614,6 +622,7 @@ types.mutation.state.origin.values.random.name: Rolled
614
622
  types.mutation.state.origin.values.unstable.name: Unstable Mutant
615
623
  types.negative.fields.roll.name: d100 roll
616
624
  types.negative.name: Negative mutation
625
+ types.negative.state.light.name: Lightly touched
617
626
  types.weapon.fields.attributes.name: Attributes
618
627
  types.weapon.fields.cost.name: Cost
619
628
  types.weapon.fields.damage.name: Damage
@@ -629,3 +638,12 @@ types.weapon.fields.techLevel.name: Tech level
629
638
  types.weapon.fields.traumaDie.name: Trauma die
630
639
  types.weapon.fields.traumaRating.name: Trauma rating
631
640
  types.weapon.name: Weapon
641
+ types.weapon.state.shots.name: Shots loaded
642
+ types.weapon.computed.skillLevel.name: Skill level
643
+ types.weapon.computed.attributeMod.name: Attribute modifier
644
+ types.weapon.computed.armed.name: Armed melee
645
+ types.weapon.computed.close.name: Close combat
646
+ types.weapon.computed.hit.name: Hit bonus
647
+ types.weapon.computed.damage.name: Damage bonus
648
+ types.weapon.computed.shockDamage.name: Shock damage
649
+ types.weapon.computed.shockAnyAc.name: Shock against any AC
package/pack.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  id: awn-core
2
- version: 0.1.0
3
- specVersion: 0.2.0
2
+ version: 0.2.0
3
+ specVersion: 0.3.0
4
4
  license: LicenseRef-sine-nomine-free-edition
5
5
  credit: >-
6
6
  Text from Ashes Without Number (Free Edition), © 2025 Sine Nomine Publishing, Inc., by Kevin
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencharacter/awn-core",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Unofficial Open Character Format pack for Ashes Without Number's character rules, with free-edition text used by the author's permission.",
5
5
  "keywords": [
6
6
  "ashes-without-number",
@@ -52,7 +52,7 @@
52
52
  "access": "public"
53
53
  },
54
54
  "devDependencies": {
55
- "@opencharacter/engine": "0.2.0"
55
+ "@opencharacter/engine": "0.3.0"
56
56
  },
57
57
  "engines": {
58
58
  "node": ">=22"
@@ -22,12 +22,13 @@ actions:
22
22
  # old maximum plus one. Saves and attack bonus follow the level.
23
23
  - id: level-up
24
24
  tags: [advancement]
25
- available: '!character.creating && level < 10'
25
+ available: '!character.creating && level < 10 && xp.current >= xp.next'
26
26
  params:
27
27
  random: { type: boolean, default: false }
28
28
  results: [advanced]
29
29
  steps:
30
30
  - id: up
31
+ tags: [advancement.level]
31
32
  kind: changes
32
33
  changes:
33
34
  - { type: set, field: level, value: level + 1 }
@@ -85,6 +86,7 @@ actions:
85
86
  # A new edge, with what it brings: its bonus skill (a pick at creation, three skill points
86
87
  # later), Educated's points for earlier levels, a later Mutant's mutations.
87
88
  - id: gain-edge
89
+ available: edges.count < edges.allowed
88
90
  tags: [advancement]
89
91
  params:
90
92
  random: { type: boolean, default: false }
@@ -97,12 +99,12 @@ actions:
97
99
  content:
98
100
  type: edge
99
101
  where: >-
100
- (!(item.id in edges.held) || item.id == @edges.focused)
101
- && (item.id != @edges.forged-by-fire || (character.creating && edges.count == 0))
102
- && (item.id != @edges.mutation-acceleration || mutations.mutant)
103
- && (item.id != @edges.mutant || !(@edges.hardened-genetics in edges.held))
104
- && (item.id != @edges.hardened-genetics || !mutations.mutant)
105
- && (item.id != @edges.prodigy || !edges.underdog)
102
+ (!(item.id in edges.held) || 'repeatable' in item.tags)
103
+ && (!('first-edge' in item.tags) || (character.creating && edges.count == 0))
104
+ && !('needs-mutant' in item.tags && !mutations.mutant)
105
+ && !('makes-mutant' in item.tags && mutations.barred)
106
+ && !('not-mutant' in item.tags && mutations.mutant)
107
+ && !('not-underdog' in item.tags && edges.underdog)
106
108
  random: params.random
107
109
  recommend: options[0]
108
110
  changes:
@@ -113,31 +115,13 @@ actions:
113
115
  when: size(steps.edge.item.bonusSkill) > 0
114
116
  use: bonus-skill
115
117
  params: { skills: steps.edge.item.bonusSkill, random: params.random }
116
- - id: educated
117
- kind: changes
118
- when: '!character.creating && steps.edge.picked == @edges.educated'
119
- changes:
120
- - { type: adjust, field: skills.points, by: level - 1 }
121
- - id: mutate
122
- kind: action
123
- when: '!character.creating && steps.edge.picked == @edges.mutant'
124
- use: mutate
125
- params: { random: params.random }
126
- - id: accelerate1
127
- kind: action
128
- sheet: proposed
129
- when: >-
130
- !character.creating && steps.edge.picked == @edges.mutation-acceleration
131
- && mutations.points.left >= 1
132
- use: buy-mutation
133
- params: { random: params.random }
134
- - id: accelerate2
118
+ # What the edge itself brings when taken (its own `gain-part`).
119
+ - id: part
135
120
  kind: action
136
121
  sheet: proposed
137
- when: >-
138
- !character.creating && steps.edge.picked == @edges.mutation-acceleration
139
- && mutations.points.left >= 1
140
- use: buy-mutation
122
+ when: steps.edge.item.gainPart
123
+ entry: 'steps.edge.added[0]'
124
+ use: gain-part
141
125
  params: { random: params.random }
142
126
  - id: result
143
127
  kind: outcome
@@ -146,6 +130,7 @@ actions:
146
130
  # A focus level: a new focus at level 1 with its bonus skills (a pick each at creation, three
147
131
  # skill points each later), or the second level of one the character has.
148
132
  - id: gain-focus
133
+ available: foci.count < foci.allowed
149
134
  tags: [advancement]
150
135
  params:
151
136
  random: { type: boolean, default: false }
@@ -161,7 +146,7 @@ actions:
161
146
  (countCopies(copy.item == item.id) == 0 || item.multiple
162
147
  || countCopies(copy.item == item.id && copy.state.level < item.maxLevel) > 0)
163
148
  && !(item.id in foci.held && countCopies(copy.item == item.id) == 0)
164
- && (item.id != @foci.unstable-mutant || mutations.mutant)
149
+ && !('needs-mutant' in item.tags && !mutations.mutant)
165
150
  random: params.random
166
151
  recommend: options[0]
167
152
  # Specialist again: a second level of a held one, or another skill.
@@ -230,17 +215,21 @@ actions:
230
215
  when: flags.new && size(steps.focus.item.bonusSkill2) > 0
231
216
  use: bonus-skill
232
217
  params: { skills: steps.focus.item.bonusSkill2, random: params.random }
233
- - id: unstable
218
+ # What a new focus itself brings (its own `gain-part`).
219
+ - id: part
234
220
  kind: action
235
- when: flags.new && steps.focus.picked == @foci.unstable-mutant
236
- use: roll-mutation
237
- params: { origin: "'unstable'", random: params.random }
221
+ sheet: proposed
222
+ when: flags.new && steps.focus.item.gainPart
223
+ entry: 'steps.add.added[0]'
224
+ use: gain-part
225
+ params: { random: params.random }
238
226
  - id: result
239
227
  kind: outcome
240
228
  result: "'gained'"
241
229
 
242
230
  # A bonus skill: a skill pick at creation, three skill points toward it afterwards.
243
231
  - id: bonus-skill
232
+ listed: false
244
233
  params:
245
234
  skills: { type: set, of: string, default: [] }
246
235
  random: { type: boolean, default: false }
@@ -263,11 +252,12 @@ actions:
263
252
  # Skill points spent toward one skill, raising it as far as they go with its credit; what's
264
253
  # left stays as credit. A skill at level-4 can't take them, so another is chosen.
265
254
  - id: skill-points-toward
255
+ listed: false
266
256
  params:
267
257
  skills: { type: set, of: string, default: [] }
268
258
  points: { type: integer, default: 3, min: 0 }
269
259
  random: { type: boolean, default: false }
270
- results: [spent]
260
+ results: [spent, none]
271
261
  steps:
272
262
  - id: offer
273
263
  kind: branch
@@ -288,6 +278,11 @@ actions:
288
278
  size(flags.open) > 0 ? flags.open
289
279
  : filterList(keysOf('skill'),
290
280
  fieldOf('skills.{skill}.level', x) < fieldOf('skills.{skill}.cap', x))
281
+ # Every skill at level-4: nothing to spend on.
282
+ - id: none
283
+ kind: outcome
284
+ when: size(flags.offered) == 0
285
+ result: "'none'"
291
286
  - id: skill
292
287
  kind: choice
293
288
  options: { values: { formula: flags.offered } }
@@ -326,10 +321,10 @@ actions:
326
321
  kind: changes
327
322
  changes:
328
323
  - type: set
329
- field: { formula: "'skills.' + steps.skill.picked + '.level'" }
324
+ field: { formula: "fieldId('skills.{skill}.level', steps.skill.picked)" }
330
325
  value: flags.level3
331
326
  - type: set
332
- field: { formula: "'skills.' + steps.skill.picked + '.credit'" }
327
+ field: { formula: "fieldId('skills.{skill}.credit', steps.skill.picked)" }
333
328
  value: flags.credit3
334
329
  - id: result
335
330
  kind: outcome
@@ -340,10 +335,12 @@ actions:
340
335
  # level-1 2, level-2 3 (from 3rd level), level-3 4 (from 6th), level-4 5 (from 9th).
341
336
  - id: improve-skill
342
337
  tags: [advancement]
343
- available: '!character.creating'
338
+ available: >-
339
+ !character.creating && (skills.points > 0 || maxList(keysOf('skill'), fieldOf('skills.{skill}.credit', x)) > 0)
344
340
  params:
345
341
  skill:
346
342
  type: enum
343
+ open: true
347
344
  values:
348
345
  [
349
346
  administer,
@@ -395,10 +392,10 @@ actions:
395
392
  kind: changes
396
393
  changes:
397
394
  - type: set
398
- field: { formula: "'skills.' + params.skill + '.level'" }
395
+ field: { formula: "fieldId('skills.{skill}.level', params.skill)" }
399
396
  value: flags.level + 1
400
397
  - type: set
401
- field: { formula: "'skills.' + params.skill + '.credit'" }
398
+ field: { formula: "fieldId('skills.{skill}.credit', params.skill)" }
402
399
  value: flags.credit - flags.fromCredit
403
400
  - { type: adjust, field: skills.points, by: 'flags.fromCredit - flags.cost' }
404
401
  - id: result
@@ -409,7 +406,9 @@ actions:
409
406
  # the first two from 2nd level, the others from 3rd, 6th and 9th. Not for underdogs.
410
407
  - id: improve-attribute
411
408
  tags: [advancement]
412
- available: '!character.creating && !edges.underdog && attributes.boosts < 5'
409
+ available: >-
410
+ !character.creating && !edges.underdog && attributes.boosts < 5
411
+ && skills.points > attributes.boosts && level >= [2, 2, 3, 6, 9][attributes.boosts]
413
412
  params:
414
413
  attribute: { type: enum, values: [str, dex, con, int, wis, cha] }
415
414
  results: [improved, maxed, level-too-low, not-enough-points]
@@ -8,6 +8,7 @@ contentTypes:
8
8
  freeSkill:
9
9
  {
10
10
  type: enum,
11
+ open: true,
11
12
  values:
12
13
  &entries [
13
14
  administer,
@@ -37,22 +38,22 @@ contentTypes:
37
38
  ],
38
39
  required: true,
39
40
  }
40
- quickSkill1: { type: enum, values: *entries, required: true }
41
- quickSkill2: { type: enum, values: *entries, required: true }
42
- growth1: { type: enum, values: *entries, required: true }
43
- growth2: { type: enum, values: *entries, required: true }
44
- growth3: { type: enum, values: *entries, required: true }
45
- growth4: { type: enum, values: *entries, required: true }
46
- growth5: { type: enum, values: *entries, required: true }
47
- growth6: { type: enum, values: *entries, required: true }
48
- learning1: { type: enum, values: *entries, required: true }
49
- learning2: { type: enum, values: *entries, required: true }
50
- learning3: { type: enum, values: *entries, required: true }
51
- learning4: { type: enum, values: *entries, required: true }
52
- learning5: { type: enum, values: *entries, required: true }
53
- learning6: { type: enum, values: *entries, required: true }
54
- learning7: { type: enum, values: *entries, required: true }
55
- learning8: { type: enum, values: *entries, required: true }
41
+ quickSkill1: { type: enum, values: *entries, required: true, open: true }
42
+ quickSkill2: { type: enum, values: *entries, required: true, open: true }
43
+ growth1: { type: enum, values: *entries, required: true, open: true }
44
+ growth2: { type: enum, values: *entries, required: true, open: true }
45
+ growth3: { type: enum, values: *entries, required: true, open: true }
46
+ growth4: { type: enum, values: *entries, required: true, open: true }
47
+ growth5: { type: enum, values: *entries, required: true, open: true }
48
+ growth6: { type: enum, values: *entries, required: true, open: true }
49
+ learning1: { type: enum, values: *entries, required: true, open: true }
50
+ learning2: { type: enum, values: *entries, required: true, open: true }
51
+ learning3: { type: enum, values: *entries, required: true, open: true }
52
+ learning4: { type: enum, values: *entries, required: true, open: true }
53
+ learning5: { type: enum, values: *entries, required: true, open: true }
54
+ learning6: { type: enum, values: *entries, required: true, open: true }
55
+ learning7: { type: enum, values: *entries, required: true, open: true }
56
+ learning8: { type: enum, values: *entries, required: true, open: true }
56
57
 
57
58
  constraints:
58
59
  - id: creation-background
package/rules/checks.yaml CHANGED
@@ -1,6 +1,10 @@
1
1
  resultBands:
2
2
  # A skill check succeeds at or over its difficulty; without one, the total is the result.
3
3
  check:
4
- - { id: success, when: 'has(params.difficulty) && roll.total >= params.difficulty' }
4
+ - {
5
+ id: success,
6
+ when: 'has(params.difficulty) && roll.total >= params.difficulty',
7
+ success: true,
8
+ }
5
9
  - { id: failure, when: has(params.difficulty) }
6
10
  - { id: rolled, when: true }
package/rules/combat.yaml CHANGED
@@ -119,7 +119,7 @@ situational:
119
119
 
120
120
  resultBands:
121
121
  save:
122
- - { id: success, when: 'roll.total >= flags.target' }
122
+ - { id: success, when: 'roll.total >= flags.target', success: true }
123
123
  - { id: failure, when: true }
124
124
 
125
125
  actions: