@opencharacter/cwn-srd 0.0.0-stage → 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 (574) hide show
  1. package/LICENSE +144 -0
  2. package/README.md +170 -2
  3. package/content/armor/armored-clothing.yaml +10 -0
  4. package/content/armor/heavy-armored-suit.yaml +14 -0
  5. package/content/armor/impact-jacket.yaml +11 -0
  6. package/content/armor/light-armored-suit.yaml +13 -0
  7. package/content/armor/medium-armored-suit.yaml +13 -0
  8. package/content/armor/ordinary-clothing.yaml +8 -0
  9. package/content/armor/plated-longcoat.yaml +12 -0
  10. package/content/armor/reinforced-clothing.yaml +9 -0
  11. package/content/armor/reinforced-longcoat.yaml +10 -0
  12. package/content/armor/riot-shield.yaml +9 -0
  13. package/content/armor/street-leathers.yaml +9 -0
  14. package/content/armor/war-harness.yaml +10 -0
  15. package/content/armor-accessories/absorption-plates.yaml +13 -0
  16. package/content/armor-accessories/joint-reinforcement.yaml +10 -0
  17. package/content/armor-mods/absorption-pads.yaml +7 -0
  18. package/content/armor-mods/active-response.yaml +7 -0
  19. package/content/armor-mods/biostabilizing.yaml +5 -0
  20. package/content/armor-mods/customized.yaml +8 -0
  21. package/content/armor-mods/discreet-design.yaml +9 -0
  22. package/content/armor-mods/flexible.yaml +7 -0
  23. package/content/armor-mods/quickchange.yaml +5 -0
  24. package/content/armor-mods/sealed.yaml +5 -0
  25. package/content/armor-mods/tailored-rig.yaml +14 -0
  26. package/content/armor-mods/trauma-dampers.yaml +7 -0
  27. package/content/armor-mods/whisperlight.yaml +7 -0
  28. package/content/arts/alacrity-basic.yaml +6 -0
  29. package/content/arts/alacrity-improved.yaml +6 -0
  30. package/content/arts/alacrity-sublime.yaml +6 -0
  31. package/content/arts/arcane-senses.yaml +4 -0
  32. package/content/arts/arcane-skill.yaml +4 -0
  33. package/content/arts/blades-of-will.yaml +4 -0
  34. package/content/arts/brazen-thews.yaml +11 -0
  35. package/content/arts/faultless-grace.yaml +11 -0
  36. package/content/arts/flying-steps.yaml +4 -0
  37. package/content/arts/hand-of-doom.yaml +9 -0
  38. package/content/arts/hundred-faces.yaml +4 -0
  39. package/content/arts/inexhaustible-vigor.yaml +11 -0
  40. package/content/arts/martial-instinct.yaml +16 -0
  41. package/content/arts/occult-pavis.yaml +9 -0
  42. package/content/arts/personal-void.yaml +4 -0
  43. package/content/arts/refulgent-vitality.yaml +4 -0
  44. package/content/arts/skin-of-steel.yaml +14 -0
  45. package/content/arts/sorcerous-sight.yaml +4 -0
  46. package/content/arts/spiritbane.yaml +4 -0
  47. package/content/backgrounds/bum.yaml +18 -0
  48. package/content/backgrounds/bureaucrat.yaml +18 -0
  49. package/content/backgrounds/clergy.yaml +18 -0
  50. package/content/backgrounds/coder.yaml +18 -0
  51. package/content/backgrounds/corp-security.yaml +18 -0
  52. package/content/backgrounds/corper.yaml +18 -0
  53. package/content/backgrounds/criminal.yaml +18 -0
  54. package/content/backgrounds/doctor.yaml +18 -0
  55. package/content/backgrounds/drone-jockey.yaml +18 -0
  56. package/content/backgrounds/ganger.yaml +18 -0
  57. package/content/backgrounds/laborer.yaml +18 -0
  58. package/content/backgrounds/law-enforcement.yaml +18 -0
  59. package/content/backgrounds/manager.yaml +18 -0
  60. package/content/backgrounds/outlander.yaml +18 -0
  61. package/content/backgrounds/performer.yaml +18 -0
  62. package/content/backgrounds/soldier.yaml +18 -0
  63. package/content/backgrounds/spy.yaml +18 -0
  64. package/content/backgrounds/streetwalker.yaml +18 -0
  65. package/content/backgrounds/technician.yaml +18 -0
  66. package/content/backgrounds/trader.yaml +18 -0
  67. package/content/contacts/contact.yaml +2 -0
  68. package/content/cyberdeck-mods/bespoke-code-optimization.yaml +6 -0
  69. package/content/cyberdeck-mods/buffer-circuits.yaml +7 -0
  70. package/content/cyberdeck-mods/cpu-overclocking.yaml +7 -0
  71. package/content/cyberdeck-mods/memory-expansion.yaml +7 -0
  72. package/content/cyberdeck-mods/polymorphic-intrusion-algorithms.yaml +8 -0
  73. package/content/cyberdeck-mods/skeletal-case.yaml +8 -0
  74. package/content/cyberdeck-mods/thermal-exhaust-case.yaml +8 -0
  75. package/content/cyberdecks/beowulf.yaml +9 -0
  76. package/content/cyberdecks/icepick.yaml +9 -0
  77. package/content/cyberdecks/scrap-deck.yaml +9 -0
  78. package/content/cyberdecks/synapse.yaml +9 -0
  79. package/content/cyberdecks/taifu.yaml +9 -0
  80. package/content/cyberdecks/tanto.yaml +9 -0
  81. package/content/cyberdecks/tizona.yaml +9 -0
  82. package/content/cyberware/active-sense-processor.yaml +14 -0
  83. package/content/cyberware/aesthetic-augmentation-suite.yaml +11 -0
  84. package/content/cyberware/assisted-glide-system.yaml +7 -0
  85. package/content/cyberware/banshee-module.yaml +7 -0
  86. package/content/cyberware/body-blades-i.yaml +15 -0
  87. package/content/cyberware/body-blades-ii.yaml +15 -0
  88. package/content/cyberware/coordination-augment-i.yaml +11 -0
  89. package/content/cyberware/coordination-augment-ii.yaml +14 -0
  90. package/content/cyberware/courier-memory.yaml +7 -0
  91. package/content/cyberware/cranial-jack.yaml +13 -0
  92. package/content/cyberware/cyberears.yaml +9 -0
  93. package/content/cyberware/cybereyes.yaml +9 -0
  94. package/content/cyberware/cyberlimb.yaml +7 -0
  95. package/content/cyberware/cybernetic-infrastructure-baseline.yaml +10 -0
  96. package/content/cyberware/deadman-circuit.yaml +7 -0
  97. package/content/cyberware/dermal-armor-i.yaml +11 -0
  98. package/content/cyberware/dermal-armor-ii.yaml +11 -0
  99. package/content/cyberware/dermal-armor-iii.yaml +11 -0
  100. package/content/cyberware/dermal-armor-trauma-shielding.yaml +8 -0
  101. package/content/cyberware/discretion-insurance-unit.yaml +7 -0
  102. package/content/cyberware/ear-mod-filter.yaml +8 -0
  103. package/content/cyberware/ear-mod-positional-detection.yaml +8 -0
  104. package/content/cyberware/ear-mod-sonar.yaml +8 -0
  105. package/content/cyberware/ear-mod-tracer.yaml +8 -0
  106. package/content/cyberware/emergency-stabilization-factor.yaml +7 -0
  107. package/content/cyberware/enhanced-reflexes-i.yaml +7 -0
  108. package/content/cyberware/enhanced-reflexes-ii.yaml +8 -0
  109. package/content/cyberware/enhanced-reflexes-iii.yaml +8 -0
  110. package/content/cyberware/eye-mod-dazzler.yaml +9 -0
  111. package/content/cyberware/eye-mod-flechette-launcher.yaml +11 -0
  112. package/content/cyberware/eye-mod-impostor.yaml +8 -0
  113. package/content/cyberware/eye-mod-infrared-vision.yaml +8 -0
  114. package/content/cyberware/eye-mod-low-light-vision.yaml +8 -0
  115. package/content/cyberware/eye-mod-tactical-view.yaml +8 -0
  116. package/content/cyberware/eye-mod-zoom.yaml +8 -0
  117. package/content/cyberware/fleshmod.yaml +7 -0
  118. package/content/cyberware/full-body-conversion.yaml +11 -0
  119. package/content/cyberware/funes-complex.yaml +7 -0
  120. package/content/cyberware/gunlink.yaml +9 -0
  121. package/content/cyberware/headcomm.yaml +7 -0
  122. package/content/cyberware/hemosynthetic-filter-system.yaml +7 -0
  123. package/content/cyberware/holdout-cavity.yaml +7 -0
  124. package/content/cyberware/iron-hand-aegis.yaml +7 -0
  125. package/content/cyberware/limbgun.yaml +7 -0
  126. package/content/cyberware/medical-support-readout.yaml +7 -0
  127. package/content/cyberware/medusa-implant.yaml +7 -0
  128. package/content/cyberware/muscle-fiber-replacement-i.yaml +11 -0
  129. package/content/cyberware/muscle-fiber-replacement-ii.yaml +11 -0
  130. package/content/cyberware/neolimb.yaml +11 -0
  131. package/content/cyberware/neural-buffer.yaml +27 -0
  132. package/content/cyberware/omnihand.yaml +7 -0
  133. package/content/cyberware/poseidon-implants.yaml +7 -0
  134. package/content/cyberware/prosthetic-cyber-i.yaml +7 -0
  135. package/content/cyberware/prosthetic-cyber-ii.yaml +7 -0
  136. package/content/cyberware/reaction-booster-i.yaml +11 -0
  137. package/content/cyberware/reaction-booster-ii.yaml +11 -0
  138. package/content/cyberware/recovery-support-unit.yaml +7 -0
  139. package/content/cyberware/redundant-systems.yaml +7 -0
  140. package/content/cyberware/regulated-anagathic-substrate.yaml +7 -0
  141. package/content/cyberware/remote-control-unit.yaml +12 -0
  142. package/content/cyberware/retribution-shield.yaml +8 -0
  143. package/content/cyberware/sealed-systems-implant.yaml +7 -0
  144. package/content/cyberware/sensory-recorder.yaml +7 -0
  145. package/content/cyberware/sharkskin-electrodes.yaml +7 -0
  146. package/content/cyberware/shock-fists.yaml +8 -0
  147. package/content/cyberware/skillplug-jack-i.yaml +11 -0
  148. package/content/cyberware/skillplug-jack-ii.yaml +11 -0
  149. package/content/cyberware/skillplug-wiring.yaml +11 -0
  150. package/content/cyberware/skinmod.yaml +6 -0
  151. package/content/cyberware/skull-citadel.yaml +7 -0
  152. package/content/cyberware/skyborn-shielding.yaml +7 -0
  153. package/content/cyberware/stick-pads.yaml +7 -0
  154. package/content/cyberware/synthears.yaml +9 -0
  155. package/content/cyberware/syntheyes.yaml +9 -0
  156. package/content/cyberware/synthlimb.yaml +7 -0
  157. package/content/cyberware/therapeutic-control-dampers.yaml +7 -0
  158. package/content/cyberware/titan-gun-system.yaml +7 -0
  159. package/content/cyberware/trajectory-optimization-node.yaml +7 -0
  160. package/content/cyberware/viper-sting.yaml +7 -0
  161. package/content/cyberware/zombie-wires.yaml +8 -0
  162. package/content/cyberware-complications/bad-connection.yaml +4 -0
  163. package/content/cyberware-complications/blatant.yaml +4 -0
  164. package/content/cyberware-complications/complicated.yaml +4 -0
  165. package/content/cyberware-complications/debilitating.yaml +4 -0
  166. package/content/cyberware-complications/exhausting.yaml +4 -0
  167. package/content/cyberware-complications/fussy.yaml +4 -0
  168. package/content/cyberware-complications/inefficient.yaml +6 -0
  169. package/content/cyberware-complications/loud.yaml +4 -0
  170. package/content/cyberware-complications/petty-annoyance.yaml +4 -0
  171. package/content/cyberware-complications/power-hungry.yaml +4 -0
  172. package/content/cyberware-complications/uncooperative.yaml +4 -0
  173. package/content/cyberware-complications/unreliable.yaml +4 -0
  174. package/content/cyberware-mods/biocapacitors.yaml +6 -0
  175. package/content/cyberware-mods/durable-system.yaml +7 -0
  176. package/content/cyberware-mods/firewalled.yaml +6 -0
  177. package/content/cyberware-mods/hardened-weave.yaml +8 -0
  178. package/content/cyberware-mods/low-maintenance.yaml +6 -0
  179. package/content/cyberware-mods/monoblade.yaml +7 -0
  180. package/content/cyberware-mods/profile-adjustment.yaml +6 -0
  181. package/content/cyberware-mods/quick-detach.yaml +6 -0
  182. package/content/cyberware-mods/tailored-interface.yaml +8 -0
  183. package/content/cyberware-mods/targeting-processor.yaml +6 -0
  184. package/content/drone-fittings/ablative-code-buffer.yaml +7 -0
  185. package/content/drone-fittings/altitude-boost-unit.yaml +7 -0
  186. package/content/drone-fittings/ammo-caddy.yaml +7 -0
  187. package/content/drone-fittings/ammo-supply.yaml +7 -0
  188. package/content/drone-fittings/assisted-boost-burner.yaml +7 -0
  189. package/content/drone-fittings/cargo-space.yaml +8 -0
  190. package/content/drone-fittings/command-deck-follow.yaml +7 -0
  191. package/content/drone-fittings/command-deck-kill.yaml +7 -0
  192. package/content/drone-fittings/command-deck-patrol.yaml +7 -0
  193. package/content/drone-fittings/command-deck-watch.yaml +7 -0
  194. package/content/drone-fittings/emergency-evac-litter.yaml +7 -0
  195. package/content/drone-fittings/emissions-shielding.yaml +7 -0
  196. package/content/drone-fittings/enhanced-structure.yaml +8 -0
  197. package/content/drone-fittings/extended-range.yaml +7 -0
  198. package/content/drone-fittings/glider-grips.yaml +7 -0
  199. package/content/drone-fittings/improved-armor.yaml +9 -0
  200. package/content/drone-fittings/improved-targeting-logic.yaml +7 -0
  201. package/content/drone-fittings/laser-comms.yaml +7 -0
  202. package/content/drone-fittings/manipulator-tendrils.yaml +7 -0
  203. package/content/drone-fittings/memory-banks.yaml +7 -0
  204. package/content/drone-fittings/no-touch-web.yaml +7 -0
  205. package/content/drone-fittings/sleep-mode.yaml +7 -0
  206. package/content/drone-fittings/stealth-package.yaml +7 -0
  207. package/content/drone-fittings/suicide-charge.yaml +7 -0
  208. package/content/drone-fittings/telescopic-optics.yaml +7 -0
  209. package/content/drone-fittings/thermal-optics.yaml +7 -0
  210. package/content/drone-fittings/trauma-response-suite.yaml +7 -0
  211. package/content/drone-fittings/voice-broadcast.yaml +7 -0
  212. package/content/drone-fittings/wallcrawler.yaml +7 -0
  213. package/content/drone-fittings/weapon-hardpoint.yaml +8 -0
  214. package/content/drone-mods/additional-fitting.yaml +8 -0
  215. package/content/drone-mods/additional-hardpoint.yaml +8 -0
  216. package/content/drone-mods/battery-swapping.yaml +7 -0
  217. package/content/drone-mods/boosted-engine.yaml +7 -0
  218. package/content/drone-mods/heavy-plating.yaml +9 -0
  219. package/content/drone-mods/quick-launch.yaml +7 -0
  220. package/content/drone-mods/redundant-systems.yaml +8 -0
  221. package/content/drone-mods/stripped-fittings.yaml +9 -0
  222. package/content/drones/hummingbird.yaml +14 -0
  223. package/content/drones/javelin.yaml +14 -0
  224. package/content/drones/kerberos.yaml +11 -0
  225. package/content/drones/kraken.yaml +11 -0
  226. package/content/drones/mouse.yaml +14 -0
  227. package/content/drones/pitbull.yaml +14 -0
  228. package/content/drones/roach.yaml +14 -0
  229. package/content/drones/shrike.yaml +11 -0
  230. package/content/drones/sunfish.yaml +14 -0
  231. package/content/drugs/avalanche.yaml +5 -0
  232. package/content/drugs/boneshaker.yaml +5 -0
  233. package/content/drugs/chokeout.yaml +4 -0
  234. package/content/drugs/control-delete.yaml +4 -0
  235. package/content/drugs/hellbender.yaml +4 -0
  236. package/content/drugs/lurch.yaml +7 -0
  237. package/content/drugs/madeleine.yaml +4 -0
  238. package/content/drugs/medical-prescription.yaml +4 -0
  239. package/content/drugs/olympus.yaml +6 -0
  240. package/content/drugs/panacea.yaml +5 -0
  241. package/content/drugs/pillow.yaml +5 -0
  242. package/content/drugs/psycho.yaml +4 -0
  243. package/content/drugs/reset.yaml +6 -0
  244. package/content/drugs/sand.yaml +4 -0
  245. package/content/drugs/trauma-patch.yaml +4 -0
  246. package/content/drugs/window.yaml +5 -0
  247. package/content/edges/educated.yaml +10 -0
  248. package/content/edges/face.yaml +4 -0
  249. package/content/edges/focused.yaml +9 -0
  250. package/content/edges/ghost.yaml +4 -0
  251. package/content/edges/graced.yaml +9 -0
  252. package/content/edges/hacker.yaml +12 -0
  253. package/content/edges/hard-to-kill.yaml +9 -0
  254. package/content/edges/killing-blow.yaml +11 -0
  255. package/content/edges/masterful-expertise.yaml +2 -0
  256. package/content/edges/on-target.yaml +8 -0
  257. package/content/edges/operators-fortune.yaml +2 -0
  258. package/content/edges/prodigy.yaml +29 -0
  259. package/content/edges/spellcaster.yaml +10 -0
  260. package/content/edges/summoner.yaml +9 -0
  261. package/content/edges/veterans-luck.yaml +2 -0
  262. package/content/edges/voice-of-the-people.yaml +8 -0
  263. package/content/edges/wired.yaml +10 -0
  264. package/content/foci/ace-driver.yaml +10 -0
  265. package/content/foci/alert.yaml +4 -0
  266. package/content/foci/all-natural.yaml +41 -0
  267. package/content/foci/armsmaster.yaml +16 -0
  268. package/content/foci/assassin.yaml +4 -0
  269. package/content/foci/authority.yaml +4 -0
  270. package/content/foci/close-combatant.yaml +9 -0
  271. package/content/foci/cyberdoc.yaml +7 -0
  272. package/content/foci/deadeye.yaml +8 -0
  273. package/content/foci/diplomat.yaml +4 -0
  274. package/content/foci/drone-pilot.yaml +19 -0
  275. package/content/foci/expert-programmer.yaml +16 -0
  276. package/content/foci/healer.yaml +13 -0
  277. package/content/foci/henchkeeper.yaml +4 -0
  278. package/content/foci/many-faces.yaml +5 -0
  279. package/content/foci/pop-idol.yaml +9 -0
  280. package/content/foci/roamer.yaml +10 -0
  281. package/content/foci/safe-haven.yaml +4 -0
  282. package/content/foci/shocking-assault.yaml +12 -0
  283. package/content/foci/snipers-eye.yaml +4 -0
  284. package/content/foci/specialist.yaml +36 -0
  285. package/content/foci/tinker.yaml +12 -0
  286. package/content/foci/unarmed-combatant.yaml +14 -0
  287. package/content/foci/unique-gift.yaml +4 -0
  288. package/content/foci/unregistered.yaml +4 -0
  289. package/content/foci/whirlwind-assault.yaml +4 -0
  290. package/content/gear/active-hearing-protection.yaml +5 -0
  291. package/content/gear/ammunition.yaml +4 -0
  292. package/content/gear/anti-flash-goggles.yaml +5 -0
  293. package/content/gear/backpack.yaml +7 -0
  294. package/content/gear/basic-smartphone.yaml +4 -0
  295. package/content/gear/binoculars.yaml +5 -0
  296. package/content/gear/bus-pass-monthly.yaml +4 -0
  297. package/content/gear/cheap-vr-crown.yaml +7 -0
  298. package/content/gear/climbing-kit.yaml +5 -0
  299. package/content/gear/empty-magazine.yaml +5 -0
  300. package/content/gear/fashionable-clothing.yaml +7 -0
  301. package/content/gear/fashionable-smartphone.yaml +4 -0
  302. package/content/gear/gas-mask.yaml +5 -0
  303. package/content/gear/handheld-radio.yaml +5 -0
  304. package/content/gear/haute-couture-clothing.yaml +7 -0
  305. package/content/gear/ir-goggles.yaml +5 -0
  306. package/content/gear/kit-basic-tools.yaml +5 -0
  307. package/content/gear/kit-cyberdoc.yaml +5 -0
  308. package/content/gear/kit-medkit.yaml +5 -0
  309. package/content/gear/kit-survival.yaml +5 -0
  310. package/content/gear/lockpicks.yaml +5 -0
  311. package/content/gear/maintenance-supplies.yaml +5 -0
  312. package/content/gear/manufacturers-installation-kit.yaml +5 -0
  313. package/content/gear/military-ration.yaml +5 -0
  314. package/content/gear/ordinary-clothes.yaml +7 -0
  315. package/content/gear/portable-video-camera.yaml +5 -0
  316. package/content/gear/smartphone-service-plan.yaml +4 -0
  317. package/content/gear/surgical-theater-tools-level-1.yaml +5 -0
  318. package/content/gear/surgical-theater-tools-level-2.yaml +4 -0
  319. package/content/gear/surgical-theater-tools-level-3.yaml +4 -0
  320. package/content/gear/ultralight-tab-radio.yaml +5 -0
  321. package/content/gear/wearable-light.yaml +7 -0
  322. package/content/programs/subjects/avatar.yaml +6 -0
  323. package/content/programs/subjects/barrier.yaml +6 -0
  324. package/content/programs/subjects/camera.yaml +6 -0
  325. package/content/programs/subjects/cyber.yaml +6 -0
  326. package/content/programs/subjects/datafile.yaml +6 -0
  327. package/content/programs/subjects/door.yaml +6 -0
  328. package/content/programs/subjects/drone.yaml +6 -0
  329. package/content/programs/subjects/machine.yaml +6 -0
  330. package/content/programs/subjects/program.yaml +6 -0
  331. package/content/programs/subjects/sensor.yaml +6 -0
  332. package/content/programs/subjects/transmission.yaml +6 -0
  333. package/content/programs/subjects/turret.yaml +6 -0
  334. package/content/programs/verbs/activate.yaml +12 -0
  335. package/content/programs/verbs/analyze.yaml +12 -0
  336. package/content/programs/verbs/append.yaml +10 -0
  337. package/content/programs/verbs/blind.yaml +9 -0
  338. package/content/programs/verbs/deactivate.yaml +12 -0
  339. package/content/programs/verbs/decrypt.yaml +10 -0
  340. package/content/programs/verbs/defend.yaml +9 -0
  341. package/content/programs/verbs/delude.yaml +9 -0
  342. package/content/programs/verbs/erase.yaml +11 -0
  343. package/content/programs/verbs/frisk.yaml +11 -0
  344. package/content/programs/verbs/ghost.yaml +8 -0
  345. package/content/programs/verbs/glitch.yaml +10 -0
  346. package/content/programs/verbs/hijack.yaml +9 -0
  347. package/content/programs/verbs/kill.yaml +10 -0
  348. package/content/programs/verbs/lock.yaml +10 -0
  349. package/content/programs/verbs/paralyze.yaml +9 -0
  350. package/content/programs/verbs/replace.yaml +10 -0
  351. package/content/programs/verbs/sabotage.yaml +12 -0
  352. package/content/programs/verbs/sense.yaml +9 -0
  353. package/content/programs/verbs/siege.yaml +9 -0
  354. package/content/programs/verbs/silence.yaml +9 -0
  355. package/content/programs/verbs/stun.yaml +11 -0
  356. package/content/programs/verbs/terminate.yaml +10 -0
  357. package/content/programs/verbs/unlock.yaml +12 -0
  358. package/content/skillplugs/level-0.yaml +35 -0
  359. package/content/skillplugs/level-1.yaml +35 -0
  360. package/content/skillplugs/level-2.yaml +35 -0
  361. package/content/skillplugs/level-3.yaml +37 -0
  362. package/content/spells/arson.yaml +5 -0
  363. package/content/spells/blast.yaml +5 -0
  364. package/content/spells/blastwave.yaml +5 -0
  365. package/content/spells/bless.yaml +5 -0
  366. package/content/spells/cleanse-toxin.yaml +5 -0
  367. package/content/spells/cloak.yaml +5 -0
  368. package/content/spells/combat-precognition.yaml +5 -0
  369. package/content/spells/compulsion.yaml +5 -0
  370. package/content/spells/curse.yaml +5 -0
  371. package/content/spells/detect-target.yaml +5 -0
  372. package/content/spells/dispel.yaml +5 -0
  373. package/content/spells/disrupt.yaml +5 -0
  374. package/content/spells/emotion.yaml +5 -0
  375. package/content/spells/far-senses.yaml +5 -0
  376. package/content/spells/glide.yaml +5 -0
  377. package/content/spells/haste.yaml +5 -0
  378. package/content/spells/heal-injury.yaml +5 -0
  379. package/content/spells/illumination.yaml +5 -0
  380. package/content/spells/mirage.yaml +5 -0
  381. package/content/spells/muffle.yaml +5 -0
  382. package/content/spells/paralysis.yaml +5 -0
  383. package/content/spells/psychic-interrogation.yaml +5 -0
  384. package/content/spells/slow.yaml +5 -0
  385. package/content/spells/soul-link.yaml +5 -0
  386. package/content/spells/stun.yaml +5 -0
  387. package/content/spells/stunwave.yaml +5 -0
  388. package/content/spells/triage.yaml +5 -0
  389. package/content/spirit-powers/airy-steps.yaml +2 -0
  390. package/content/spirit-powers/artifice-wise.yaml +2 -0
  391. package/content/spirit-powers/aura-of-destruction.yaml +2 -0
  392. package/content/spirit-powers/curse.yaml +2 -0
  393. package/content/spirit-powers/ensnare.yaml +4 -0
  394. package/content/spirit-powers/favor.yaml +2 -0
  395. package/content/spirit-powers/feral-pact.yaml +2 -0
  396. package/content/spirit-powers/finned-swiftness.yaml +2 -0
  397. package/content/spirit-powers/flesh-of-clay.yaml +2 -0
  398. package/content/spirit-powers/ghostly-presence.yaml +2 -0
  399. package/content/spirit-powers/hideous-talons.yaml +4 -0
  400. package/content/spirit-powers/iron-eidolon.yaml +4 -0
  401. package/content/spirit-powers/merciful-hands.yaml +2 -0
  402. package/content/spirit-powers/mighty-form.yaml +4 -0
  403. package/content/spirit-powers/mislead.yaml +2 -0
  404. package/content/spirit-powers/misty-form.yaml +2 -0
  405. package/content/spirit-powers/mortal-disguise.yaml +2 -0
  406. package/content/spirit-powers/myrmidons-shield.yaml +2 -0
  407. package/content/spirit-powers/namebearer.yaml +2 -0
  408. package/content/spirit-powers/natural-immunity.yaml +2 -0
  409. package/content/spirit-powers/poltergeist.yaml +2 -0
  410. package/content/spirit-powers/skilled.yaml +2 -0
  411. package/content/spirit-powers/spiderlegs.yaml +2 -0
  412. package/content/spirit-powers/spirit-of-war.yaml +4 -0
  413. package/content/spirit-powers/spirit-whispers.yaml +2 -0
  414. package/content/spirit-powers/spirits-eye.yaml +2 -0
  415. package/content/spirit-powers/swift-pursuit.yaml +2 -0
  416. package/content/spirit-powers/violent-will.yaml +4 -0
  417. package/content/spirits/spirit.yaml +11 -0
  418. package/content/syndromes/brutal.yaml +4 -0
  419. package/content/syndromes/candid.yaml +4 -0
  420. package/content/syndromes/cold.yaml +4 -0
  421. package/content/syndromes/distant.yaml +4 -0
  422. package/content/syndromes/exultant.yaml +4 -0
  423. package/content/syndromes/fearless.yaml +4 -0
  424. package/content/syndromes/hypervigilant.yaml +4 -0
  425. package/content/syndromes/murderous.yaml +4 -0
  426. package/content/syndromes/ravenous.yaml +4 -0
  427. package/content/syndromes/savage.yaml +4 -0
  428. package/content/syndromes/secretive.yaml +4 -0
  429. package/content/syndromes/stressed.yaml +4 -0
  430. package/content/vehicle-fittings/advanced-sensors.yaml +7 -0
  431. package/content/vehicle-fittings/afterburners.yaml +8 -0
  432. package/content/vehicle-fittings/armor-plating.yaml +8 -0
  433. package/content/vehicle-fittings/cargo-space.yaml +6 -0
  434. package/content/vehicle-fittings/crash-pod.yaml +8 -0
  435. package/content/vehicle-fittings/ecm-emitter.yaml +8 -0
  436. package/content/vehicle-fittings/emissions-cloaking.yaml +8 -0
  437. package/content/vehicle-fittings/extra-durability.yaml +9 -0
  438. package/content/vehicle-fittings/extra-passengers.yaml +8 -0
  439. package/content/vehicle-fittings/field-portable.yaml +7 -0
  440. package/content/vehicle-fittings/ghost-driver.yaml +8 -0
  441. package/content/vehicle-fittings/hardpoint-support.yaml +10 -0
  442. package/content/vehicle-fittings/jack-control-port.yaml +7 -0
  443. package/content/vehicle-fittings/limpet-mount-medium.yaml +8 -0
  444. package/content/vehicle-fittings/limpet-mount-small.yaml +8 -0
  445. package/content/vehicle-fittings/living-quarters.yaml +8 -0
  446. package/content/vehicle-fittings/medbay.yaml +9 -0
  447. package/content/vehicle-fittings/offroad-package.yaml +9 -0
  448. package/content/vehicle-fittings/power-system-large.yaml +9 -0
  449. package/content/vehicle-fittings/power-system-medium.yaml +9 -0
  450. package/content/vehicle-fittings/power-system-small.yaml +8 -0
  451. package/content/vehicle-fittings/sealed-atmosphere.yaml +9 -0
  452. package/content/vehicle-fittings/smugglers-hold.yaml +7 -0
  453. package/content/vehicle-fittings/targeting-board.yaml +9 -0
  454. package/content/vehicle-fittings/tool-rack.yaml +8 -0
  455. package/content/vehicle-mods/augmented-armor.yaml +7 -0
  456. package/content/vehicle-mods/drone-hub.yaml +6 -0
  457. package/content/vehicle-mods/extra-seating.yaml +7 -0
  458. package/content/vehicle-mods/integrated-magazines.yaml +6 -0
  459. package/content/vehicle-mods/personalized-controls.yaml +6 -0
  460. package/content/vehicle-mods/power-system-upgrade.yaml +7 -0
  461. package/content/vehicle-mods/q-cladding.yaml +6 -0
  462. package/content/vehicle-mods/reactive-defenses.yaml +8 -0
  463. package/content/vehicle-mods/reinforced-chassis.yaml +8 -0
  464. package/content/vehicle-mods/remote-sensors.yaml +6 -0
  465. package/content/vehicle-mods/supplementary-tanks.yaml +6 -0
  466. package/content/vehicle-mods/ultralight-components.yaml +8 -0
  467. package/content/vehicle-mods/upgraded-speed.yaml +8 -0
  468. package/content/vehicles/apc.yaml +16 -0
  469. package/content/vehicles/car.yaml +14 -0
  470. package/content/vehicles/casra.yaml +17 -0
  471. package/content/vehicles/dropcraft.yaml +17 -0
  472. package/content/vehicles/gev.yaml +16 -0
  473. package/content/vehicles/helicopter.yaml +16 -0
  474. package/content/vehicles/micro-flyer.yaml +15 -0
  475. package/content/vehicles/motorcycle.yaml +14 -0
  476. package/content/vehicles/tank.yaml +16 -0
  477. package/content/vehicles/truck.yaml +14 -0
  478. package/content/weapon-mods/autotargeting.yaml +7 -0
  479. package/content/weapon-mods/body-blades-1.yaml +17 -0
  480. package/content/weapon-mods/body-blades-2.yaml +17 -0
  481. package/content/weapon-mods/concealed.yaml +4 -0
  482. package/content/weapon-mods/customized.yaml +6 -0
  483. package/content/weapon-mods/extended-mag.yaml +7 -0
  484. package/content/weapon-mods/hand-of-doom.yaml +16 -0
  485. package/content/weapon-mods/heavy-sabot.yaml +7 -0
  486. package/content/weapon-mods/integral-toxins.yaml +8 -0
  487. package/content/weapon-mods/onboard-gunlink.yaml +5 -0
  488. package/content/weapon-mods/predictive-guidance.yaml +8 -0
  489. package/content/weapon-mods/reel-wires.yaml +5 -0
  490. package/content/weapon-mods/savage-impact.yaml +8 -0
  491. package/content/weapon-mods/shock-burst.yaml +4 -0
  492. package/content/weapon-mods/stun-rounds.yaml +13 -0
  493. package/content/weapon-mods/thermal-charge.yaml +8 -0
  494. package/content/weapon-mods/unarmed-combatant-2.yaml +7 -0
  495. package/content/weapon-mods/unarmed-combatant.yaml +11 -0
  496. package/content/weapons/advanced-big-sword.yaml +15 -0
  497. package/content/weapons/advanced-bow.yaml +17 -0
  498. package/content/weapons/advanced-club.yaml +15 -0
  499. package/content/weapons/advanced-knife.yaml +16 -0
  500. package/content/weapons/advanced-sword.yaml +14 -0
  501. package/content/weapons/anti-materiel-rifle.yaml +19 -0
  502. package/content/weapons/automatic-rifle.yaml +18 -0
  503. package/content/weapons/big-club.yaml +16 -0
  504. package/content/weapons/big-sword.yaml +15 -0
  505. package/content/weapons/club.yaml +17 -0
  506. package/content/weapons/combat-rifle.yaml +18 -0
  507. package/content/weapons/combat-shotgun.yaml +18 -0
  508. package/content/weapons/demo-charge.yaml +17 -0
  509. package/content/weapons/drone-cannon.yaml +17 -0
  510. package/content/weapons/eye-flechette.yaml +14 -0
  511. package/content/weapons/flash-grenade.yaml +14 -0
  512. package/content/weapons/frag-grenade.yaml +16 -0
  513. package/content/weapons/gas-grenade.yaml +14 -0
  514. package/content/weapons/grenade-launcher.yaml +15 -0
  515. package/content/weapons/headshot-pod.yaml +17 -0
  516. package/content/weapons/heavy-machine-gun.yaml +20 -0
  517. package/content/weapons/heavy-pistol.yaml +15 -0
  518. package/content/weapons/knife.yaml +16 -0
  519. package/content/weapons/land-mine-anti-personnel.yaml +14 -0
  520. package/content/weapons/land-mine-anti-vehicle.yaml +15 -0
  521. package/content/weapons/light-pistol.yaml +15 -0
  522. package/content/weapons/main-tank-gun.yaml +17 -0
  523. package/content/weapons/mortar.yaml +17 -0
  524. package/content/weapons/mounted-autogun.yaml +18 -0
  525. package/content/weapons/rifle.yaml +16 -0
  526. package/content/weapons/rocket-launcher.yaml +17 -0
  527. package/content/weapons/semi-auto-shotgun.yaml +16 -0
  528. package/content/weapons/shotgun.yaml +16 -0
  529. package/content/weapons/shrieker-gun.yaml +15 -0
  530. package/content/weapons/smoke-grenade.yaml +14 -0
  531. package/content/weapons/sniper-rifle.yaml +18 -0
  532. package/content/weapons/spear.yaml +16 -0
  533. package/content/weapons/submachine-gun.yaml +17 -0
  534. package/content/weapons/sword.yaml +14 -0
  535. package/content/weapons/taser-pistol.yaml +14 -0
  536. package/content/weapons/unarmed.yaml +13 -0
  537. package/dist/i18n/en.d.ts +3 -0
  538. package/dist/i18n/en.js +2 -0
  539. package/dist/i18n/en.json +2531 -0
  540. package/dist/index.d.ts +3 -0
  541. package/dist/index.js +2 -0
  542. package/dist/release.json +38279 -0
  543. package/i18n/en/backgrounds.yaml +20 -0
  544. package/i18n/en/cyberware.yaml +299 -0
  545. package/i18n/en/edges.yaml +41 -0
  546. package/i18n/en/foci.yaml +184 -0
  547. package/i18n/en/gear.yaml +252 -0
  548. package/i18n/en/magic.yaml +174 -0
  549. package/i18n/en/tech.yaml +472 -0
  550. package/i18n/en/weapons.yaml +99 -0
  551. package/i18n/en.yaml +1491 -0
  552. package/pack.yaml +13 -0
  553. package/package.json +58 -3
  554. package/rules/advancement.yaml +163 -0
  555. package/rules/armor.yaml +81 -0
  556. package/rules/attributes.yaml +46 -0
  557. package/rules/backgrounds.yaml +102 -0
  558. package/rules/building.yaml +467 -0
  559. package/rules/character.yaml +100 -0
  560. package/rules/checks.yaml +187 -0
  561. package/rules/contacts.yaml +10 -0
  562. package/rules/creation.yaml +398 -0
  563. package/rules/cyberware.yaml +162 -0
  564. package/rules/drones.yaml +38 -0
  565. package/rules/edges.yaml +80 -0
  566. package/rules/foci.yaml +118 -0
  567. package/rules/gear.yaml +185 -0
  568. package/rules/hacking.yaml +131 -0
  569. package/rules/layout.yaml +426 -0
  570. package/rules/magic.yaml +207 -0
  571. package/rules/skills.yaml +61 -0
  572. package/rules/tags.yaml +137 -0
  573. package/rules/vehicles.yaml +30 -0
  574. package/rules/weapons.yaml +253 -0
@@ -0,0 +1,187 @@
1
+ settings:
2
+ # Rerolled or extra-die skill checks (Specialist, Healer, Sniper's Eye) don't stack: the best
3
+ # applies.
4
+ stacking:
5
+ keys: { skill-dice: highestOnly }
6
+
7
+ resultBands:
8
+ check:
9
+ - { id: success, when: roll.total >= flags.dc, success: true }
10
+ - { id: failure, when: true }
11
+ # A natural 1 always fails a save and a natural 20 always succeeds.
12
+ save:
13
+ - { id: failure, when: 'roll.kept[0] == 1' }
14
+ - { id: success, when: 'roll.kept[0] == 20 || roll.total >= flags.target', success: true }
15
+ - { id: failure, when: true }
16
+ major-injury:
17
+ - { id: death, when: roll.total <= 1 }
18
+ - { id: internal, when: roll.total == 2 }
19
+ - { id: brain, when: roll.total == 3 }
20
+ - { id: eye, when: roll.total == 4 }
21
+ - { id: gut, when: roll.total == 5 }
22
+ - { id: right-leg, when: roll.total == 6 }
23
+ - { id: left-leg, when: roll.total == 7 }
24
+ - { id: right-arm, when: roll.total == 8 }
25
+ - { id: left-arm, when: roll.total == 9 }
26
+ - { id: system, when: roll.total == 10 }
27
+ - { id: flesh-wound, when: true }
28
+
29
+ actions:
30
+ # A skill check: 2d6 plus the skill level (-1 untrained) and an attribute modifier, against a
31
+ # difficulty from 6 (simple) to 14+ (near impossible).
32
+ - id: skill-check
33
+ tags: [check]
34
+ params:
35
+ skill: { type: id, of: field, where: "'skill' in item.tags" }
36
+ attribute: { type: enum, values: [str, dex, con, int, wis, cha] }
37
+ difficulty: { type: integer, optional: true }
38
+ modifier: { type: integer, optional: true }
39
+ results: [success, failure, rolled]
40
+ steps:
41
+ - id: start
42
+ kind: branch
43
+ cases:
44
+ - when: true
45
+ flags: { dc: 'has(params.difficulty) ? params.difficulty : -1' }
46
+ - id: check
47
+ kind: roll
48
+ tags:
49
+ - skill-check
50
+ - { formula: params.skill.tags }
51
+ - { formula: "'attr.' + params.attribute" }
52
+ bands: check
53
+ parts:
54
+ - { dice: 2d6kh2, tags: [skill-dice] }
55
+ - field: params.skill.id
56
+ - field: "'attributes.' + params.attribute + '.mod'"
57
+ - { value: params.modifier, when: has(params.modifier) }
58
+ - id: result
59
+ kind: outcome
60
+ result: "flags.dc < 0 ? 'rolled' : steps.check.band"
61
+ data: { total: steps.check.total }
62
+
63
+ # A saving throw: 1d20 equal or over the save's target.
64
+ - id: saving-throw
65
+ tags: [save]
66
+ params:
67
+ save: { type: enum, values: [physical, evasion, mental, luck] }
68
+ modifier: { type: integer, optional: true }
69
+ results: [success, failure]
70
+ steps:
71
+ - id: start
72
+ kind: branch
73
+ cases:
74
+ - when: true
75
+ flags: { target: "fieldOf('saves.{save}', params.save)" }
76
+ - id: save
77
+ kind: roll
78
+ tags: [save, { formula: "'save.' + params.save" }]
79
+ bands: save
80
+ parts:
81
+ - dice: 1d20
82
+ - { value: params.modifier, when: has(params.modifier) }
83
+ - id: result
84
+ kind: outcome
85
+ result: steps.save.band
86
+ data: { total: steps.save.total, target: flags.target }
87
+
88
+ # Initiative: 1d8 plus the Dexterity modifier (the side rolls with its best).
89
+ - id: initiative
90
+ tags: [initiative]
91
+ results: [rolled]
92
+ steps:
93
+ - id: roll
94
+ kind: roll
95
+ tags: [initiative]
96
+ parts:
97
+ - dice: 1d8
98
+ - field: "'combat.initiative'"
99
+ - { id: result, kind: outcome, result: "'rolled'", data: { total: steps.roll.total } }
100
+
101
+ # The end of a fight or scene: Damage Soak and deck Shielding refresh, scene Effort returns.
102
+ - id: end-scene
103
+ tags: [rest]
104
+ results: [ended]
105
+ steps:
106
+ - id: refresh
107
+ tags: [rest.scene]
108
+ kind: changes
109
+ changes:
110
+ - type: setState
111
+ copies: { type: armor, where: self.soakUsed > 0 }
112
+ key: soakUsed
113
+ value: 0
114
+ - type: setState
115
+ copies: { type: cyberdeck, where: self.shieldingUsed > 0 }
116
+ key: shieldingUsed
117
+ value: 0
118
+ - { type: set, field: effort.mage.scene, value: 0 }
119
+ - { type: set, field: effort.summoner.scene, value: 0 }
120
+ - { id: result, kind: outcome, result: "'ended'" }
121
+
122
+ # A night's rest, warm and fed: hit points equal to the level (none while Frail), one point of
123
+ # System Strain, all Effort Committed for the day, the day's Access and Martial Instinct's rolls.
124
+ - id: rest
125
+ tags: [rest]
126
+ results: [rested]
127
+ steps:
128
+ - id: recover
129
+ tags: [rest.night]
130
+ kind: changes
131
+ changes:
132
+ - { type: adjust, when: '!hp.frail', field: hp.current, by: level }
133
+ - { type: adjust, when: strain.temporary > 0, field: strain.temporary, by: -1 }
134
+ - { type: set, field: effort.mage.day, value: 0 }
135
+ - { type: set, field: effort.mage.scene, value: 0 }
136
+ - { type: set, field: effort.summoner.day, value: 0 }
137
+ - { type: set, field: effort.summoner.scene, value: 0 }
138
+ - { type: set, field: hacking.access.spent, value: 0 }
139
+ - { type: set, field: arts.bonusRolls.used, value: 0 }
140
+ - { id: result, kind: outcome, result: "'rested'" }
141
+
142
+ # First aid from a medic: 1d6 plus their Heal skill (1d6-1 without one), and one System
143
+ # Strain. It can't be applied past the System Strain maximum.
144
+ - id: first-aid
145
+ tags: [healing]
146
+ available: strain.total + 1 <= strain.max
147
+ params:
148
+ healerSkill: { type: integer, min: -1, max: 4 }
149
+ results: [healed]
150
+ steps:
151
+ - id: heal
152
+ kind: roll
153
+ tags: [healing, first-aid]
154
+ parts:
155
+ - dice: 1d6
156
+ - value: params.healerSkill
157
+ - id: apply
158
+ kind: changes
159
+ changes:
160
+ - { type: adjust, field: hp.current, by: 'max(0, steps.heal.total)' }
161
+ - { type: adjust, field: strain.temporary, by: 1 }
162
+ - {
163
+ id: result,
164
+ kind: outcome,
165
+ result: "'healed'",
166
+ data: { healed: 'max(0, steps.heal.total)' },
167
+ }
168
+
169
+ # A Major Injury: after a failed Physical save at zero hit points in a scene with a Traumatic
170
+ # Hit, roll 1d12 on the table.
171
+ - id: major-injury
172
+ tags: [injury]
173
+ results: [rolled]
174
+ params:
175
+ modifier: { type: integer, optional: true }
176
+ steps:
177
+ - id: roll
178
+ kind: roll
179
+ tags: [major-injury]
180
+ bands: major-injury
181
+ parts:
182
+ - dice: 1d12
183
+ - { value: params.modifier, when: has(params.modifier) }
184
+ - id: result
185
+ kind: outcome
186
+ result: "'rolled'"
187
+ data: { injury: steps.roll.band }
@@ -0,0 +1,10 @@
1
+ contentTypes:
2
+ # A Contact: an NPC the character knows, named by the player. Acquaintances deal honestly and do
3
+ # safe favors; Friends take real risks for the character.
4
+ contact:
5
+ nameFrom: label
6
+ state:
7
+ label: { type: string, default: '' }
8
+ bond: { type: enum, values: [acquaintance, friend], default: acquaintance }
9
+ # Their profession and how the character knows them.
10
+ about: { type: string, default: '' }
@@ -0,0 +1,398 @@
1
+ creation:
2
+ - { id: guided, action: create-character }
3
+ - { id: random, action: create-character, params: { random: true }, random: true }
4
+
5
+ actions:
6
+ # Character creation in the book's order: attributes, background and its skills, two Edges,
7
+ # a Focus, the Underdog Rule, hit points, the free skill, Contacts and starting gear. The
8
+ # random start rolls the attributes in order and the background's skills, as the book does, and
9
+ # draws every pick the book leaves to the player.
10
+ - id: create-character
11
+ tags: [creation]
12
+ available: character.creating
13
+ params:
14
+ random: { type: boolean, default: false }
15
+ results: [created]
16
+ steps:
17
+ # Attributes: 3d6 in order, one of them may become 14; or the array 14, 12, 11, 10, 9, 7.
18
+ - id: method
19
+ kind: choice
20
+ options: [{ id: roll }, { id: array }]
21
+ recommend: "'roll'"
22
+ - id: str
23
+ kind: roll
24
+ tags: [creation]
25
+ when: steps.method.picked == 'roll'
26
+ parts: [{ dice: 3d6 }]
27
+ - id: dex
28
+ kind: roll
29
+ tags: [creation]
30
+ when: steps.method.picked == 'roll'
31
+ parts: [{ dice: 3d6 }]
32
+ - id: con
33
+ kind: roll
34
+ tags: [creation]
35
+ when: steps.method.picked == 'roll'
36
+ parts: [{ dice: 3d6 }]
37
+ - id: int
38
+ kind: roll
39
+ tags: [creation]
40
+ when: steps.method.picked == 'roll'
41
+ parts: [{ dice: 3d6 }]
42
+ - id: wis
43
+ kind: roll
44
+ tags: [creation]
45
+ when: steps.method.picked == 'roll'
46
+ parts: [{ dice: 3d6 }]
47
+ - id: cha
48
+ kind: roll
49
+ tags: [creation]
50
+ when: steps.method.picked == 'roll'
51
+ parts: [{ dice: 3d6 }]
52
+ - id: rolled
53
+ kind: branch
54
+ when: steps.method.picked == 'roll'
55
+ cases:
56
+ - when: true
57
+ flags:
58
+ totals: >-
59
+ [steps.str.total, steps.dex.total, steps.con.total, steps.int.total,
60
+ steps.wis.total, steps.cha.total]
61
+ # The recommendation: the lowest score, if it is under 14.
62
+ - id: substitute
63
+ kind: choice
64
+ when: steps.method.picked == 'roll'
65
+ options:
66
+ - { id: none }
67
+ - { id: str, when: steps.str.total < 14 }
68
+ - { id: dex, when: steps.dex.total < 14 }
69
+ - { id: con, when: steps.con.total < 14 }
70
+ - { id: int, when: steps.int.total < 14 }
71
+ - { id: wis, when: steps.wis.total < 14 }
72
+ - { id: cha, when: steps.cha.total < 14 }
73
+ recommend: >-
74
+ minList(flags.totals, x) >= 14 ? 'none'
75
+ : ['str', 'dex', 'con', 'int', 'wis', 'cha'][
76
+ indexOf(flags.totals, minList(flags.totals, x))]
77
+ - id: scores
78
+ kind: changes
79
+ when: steps.method.picked == 'roll'
80
+ changes:
81
+ - type: set
82
+ field: attributes.str.base
83
+ value: "steps.substitute.picked == 'str' ? 14 : steps.str.total"
84
+ - type: set
85
+ field: attributes.dex.base
86
+ value: "steps.substitute.picked == 'dex' ? 14 : steps.dex.total"
87
+ - type: set
88
+ field: attributes.con.base
89
+ value: "steps.substitute.picked == 'con' ? 14 : steps.con.total"
90
+ - type: set
91
+ field: attributes.int.base
92
+ value: "steps.substitute.picked == 'int' ? 14 : steps.int.total"
93
+ - type: set
94
+ field: attributes.wis.base
95
+ value: "steps.substitute.picked == 'wis' ? 14 : steps.wis.total"
96
+ - type: set
97
+ field: attributes.cha.base
98
+ value: "steps.substitute.picked == 'cha' ? 14 : steps.cha.total"
99
+ - id: array
100
+ kind: allocate
101
+ when: steps.method.picked == 'array'
102
+ fields: { type: field, where: "'attribute-base' in item.tags" }
103
+ values: [14, 12, 11, 10, 9, 7]
104
+ random: params.random
105
+ recommend:
106
+ attributes.str.base: 10
107
+ attributes.dex.base: 14
108
+ attributes.con.base: 12
109
+ attributes.int.base: 11
110
+ attributes.wis.base: 9
111
+ attributes.cha.base: 7
112
+
113
+ # Background: its free skill, then three rolls on its tables or two picks from Learning.
114
+ - id: background
115
+ kind: choice
116
+ options: { content: { type: background } }
117
+ recommend: options[0]
118
+ random: params.random
119
+ changes:
120
+ - { type: choose, path: { choice: [background] }, option: picked.id }
121
+ - id: freeSkill
122
+ kind: action
123
+ use: gain-skill
124
+ params: { code: steps.background.item.freeSkill, random: params.random }
125
+ - id: tables
126
+ kind: branch
127
+ cases:
128
+ - when: true
129
+ flags:
130
+ growth: >-
131
+ [steps.background.item.growth1, steps.background.item.growth2,
132
+ steps.background.item.growth3, steps.background.item.growth4,
133
+ steps.background.item.growth5, steps.background.item.growth6]
134
+ learning: >-
135
+ [steps.background.item.learning1, steps.background.item.learning2,
136
+ steps.background.item.learning3, steps.background.item.learning4,
137
+ steps.background.item.learning5, steps.background.item.learning6,
138
+ steps.background.item.learning7, steps.background.item.learning8]
139
+ - id: skillMethod
140
+ kind: choice
141
+ options: [{ id: roll }, { id: pick }]
142
+ recommend: "params.random ? 'roll' : 'pick'"
143
+ - id: table1
144
+ kind: choice
145
+ when: steps.skillMethod.picked == 'roll'
146
+ options: [{ id: growth }, { id: learning }]
147
+ recommend: "'learning'"
148
+ random: params.random
149
+ - id: roll1
150
+ kind: roll
151
+ tags: [creation]
152
+ when: steps.skillMethod.picked == 'roll'
153
+ parts: [{ dice: "steps.table1.picked == 'growth' ? 1d6 : 1d8" }]
154
+ - id: entry1
155
+ kind: branch
156
+ when: steps.skillMethod.picked == 'roll'
157
+ cases:
158
+ - when: true
159
+ flags:
160
+ entry: >-
161
+ steps.table1.picked == 'growth' ? flags.growth[steps.roll1.total - 1]
162
+ : flags.learning[steps.roll1.total - 1]
163
+ - id: skill1
164
+ kind: action
165
+ when: "steps.skillMethod.picked == 'roll' && !(flags.entry in ['any-stat-1', 'physical-2', 'mental-2'])"
166
+ use: gain-skill
167
+ params: { code: flags.entry, random: params.random }
168
+ - id: stat1
169
+ kind: action
170
+ when: "steps.skillMethod.picked == 'roll' && flags.entry in ['any-stat-1', 'physical-2', 'mental-2']"
171
+ use: gain-attribute
172
+ params: { code: flags.entry, random: params.random }
173
+ - id: table2
174
+ kind: choice
175
+ when: steps.skillMethod.picked == 'roll'
176
+ options: [{ id: growth }, { id: learning }]
177
+ recommend: "'learning'"
178
+ random: params.random
179
+ - id: roll2
180
+ kind: roll
181
+ tags: [creation]
182
+ when: steps.skillMethod.picked == 'roll'
183
+ parts: [{ dice: "steps.table2.picked == 'growth' ? 1d6 : 1d8" }]
184
+ - id: entry2
185
+ kind: branch
186
+ when: steps.skillMethod.picked == 'roll'
187
+ cases:
188
+ - when: true
189
+ flags:
190
+ entry: >-
191
+ steps.table2.picked == 'growth' ? flags.growth[steps.roll2.total - 1]
192
+ : flags.learning[steps.roll2.total - 1]
193
+ - id: skill2
194
+ kind: action
195
+ when: "steps.skillMethod.picked == 'roll' && !(flags.entry in ['any-stat-1', 'physical-2', 'mental-2'])"
196
+ use: gain-skill
197
+ params: { code: flags.entry, random: params.random }
198
+ - id: stat2
199
+ kind: action
200
+ when: "steps.skillMethod.picked == 'roll' && flags.entry in ['any-stat-1', 'physical-2', 'mental-2']"
201
+ use: gain-attribute
202
+ params: { code: flags.entry, random: params.random }
203
+ - id: table3
204
+ kind: choice
205
+ when: steps.skillMethod.picked == 'roll'
206
+ options: [{ id: growth }, { id: learning }]
207
+ recommend: "'learning'"
208
+ random: params.random
209
+ - id: roll3
210
+ kind: roll
211
+ tags: [creation]
212
+ when: steps.skillMethod.picked == 'roll'
213
+ parts: [{ dice: "steps.table3.picked == 'growth' ? 1d6 : 1d8" }]
214
+ - id: entry3
215
+ kind: branch
216
+ when: steps.skillMethod.picked == 'roll'
217
+ cases:
218
+ - when: true
219
+ flags:
220
+ entry: >-
221
+ steps.table3.picked == 'growth' ? flags.growth[steps.roll3.total - 1]
222
+ : flags.learning[steps.roll3.total - 1]
223
+ - id: skill3
224
+ kind: action
225
+ when: "steps.skillMethod.picked == 'roll' && !(flags.entry in ['any-stat-1', 'physical-2', 'mental-2'])"
226
+ use: gain-skill
227
+ params: { code: flags.entry, random: params.random }
228
+ - id: stat3
229
+ kind: action
230
+ when: "steps.skillMethod.picked == 'roll' && flags.entry in ['any-stat-1', 'physical-2', 'mental-2']"
231
+ use: gain-attribute
232
+ params: { code: flags.entry, random: params.random }
233
+ - id: pick1
234
+ kind: choice
235
+ when: steps.skillMethod.picked == 'pick'
236
+ options: { values: { formula: "filterList(flags.learning, x != 'any')" } }
237
+ recommend: filterList(flags.learning, x != 'any')[0]
238
+ random: params.random
239
+ - id: learned1
240
+ kind: action
241
+ when: steps.skillMethod.picked == 'pick'
242
+ use: gain-skill
243
+ params: { code: steps.pick1.picked, random: params.random }
244
+ - id: pick2
245
+ kind: choice
246
+ when: steps.skillMethod.picked == 'pick'
247
+ options: { values: { formula: "filterList(flags.learning, x != 'any')" } }
248
+ recommend: filterList(flags.learning, x != 'any')[1]
249
+ random: params.random
250
+ - id: learned2
251
+ kind: action
252
+ when: steps.skillMethod.picked == 'pick'
253
+ use: gain-skill
254
+ params: { code: steps.pick2.picked, random: params.random }
255
+
256
+ # Two Edges and a Focus (more with Focused).
257
+ - id: edge1
258
+ kind: action
259
+ use: gain-edge
260
+ params: { choice: "'edge-1'", random: params.random }
261
+ - id: edge2
262
+ kind: action
263
+ use: gain-edge
264
+ params: { choice: "'edge-2'", random: params.random }
265
+ - id: focus
266
+ kind: action
267
+ use: gain-focus
268
+ params: { random: params.random }
269
+
270
+ # The Underdog Rule: a modifier total of -1 or less earns a bonus, non-magical Edge.
271
+ - id: modifiers
272
+ kind: branch
273
+ sheet: proposed
274
+ cases:
275
+ - when: true
276
+ flags: { underdog: 'attributes.modTotal <= -1 && !(@edges.prodigy in edges.taken)' }
277
+ - id: underdog
278
+ kind: choice
279
+ when: flags.underdog
280
+ options: [{ id: take }, { id: decline }]
281
+ recommend: "'take'"
282
+ changes:
283
+ - { type: set, when: "picked.id == 'take'", field: underdog, value: true }
284
+ - id: underdogEdge
285
+ kind: action
286
+ when: has(steps.underdog) && steps.underdog.picked == 'take'
287
+ use: gain-edge
288
+ params: { choice: "'underdog-edge'", random: params.random }
289
+
290
+ # Hit points: 1d6 plus the Constitution modifier (and Hard to Kill's +2), at least 1.
291
+ - id: hp
292
+ kind: roll
293
+ tags: [creation, hit-points]
294
+ sheet: proposed
295
+ parts:
296
+ - dice: 1d6
297
+ - field: "'attributes.con.mod'"
298
+ - field: "'hp.dieBonus'"
299
+ - id: hpMax
300
+ kind: changes
301
+ changes:
302
+ - { type: set, field: hp.rolled, value: 'max(1, steps.hp.total)' }
303
+
304
+ # The free skill: any skill but a magical one.
305
+ - id: freePick
306
+ kind: action
307
+ use: gain-skill
308
+ params: { code: "'any'", random: params.random }
309
+
310
+ # Contacts: two Acquaintances or one Friend.
311
+ - id: contacts
312
+ kind: choice
313
+ options: [{ id: acquaintances }, { id: friend }]
314
+ recommend: "'acquaintances'"
315
+ random: params.random
316
+ changes:
317
+ - type: addItem
318
+ when: "picked.id == 'acquaintances'"
319
+ entry: { item: "'contacts.contact'", state: { bond: "'acquaintance'" } }
320
+ - type: addItem
321
+ when: "picked.id == 'acquaintances'"
322
+ entry: { item: "'contacts.contact'", state: { bond: "'acquaintance'" } }
323
+ - type: addItem
324
+ when: "picked.id == 'friend'"
325
+ entry: { item: "'contacts.contact'", state: { bond: "'friend'" } }
326
+
327
+ # Gear: $500 to spend, one item of up to $1,000 and a month of middle-class life.
328
+ - id: freeItemKind
329
+ tags: [creation.item]
330
+ kind: choice
331
+ options: [{ id: weapon }, { id: armor }, { id: gear }, { id: cyberdeck }, { id: drone }]
332
+ recommend: "'weapon'"
333
+ random: params.random
334
+ - id: freeWeapon
335
+ kind: choice
336
+ when: steps.freeItemKind.picked == 'weapon'
337
+ options:
338
+ content: { type: weapon, where: "item.cost <= 1000 && !('restricted' in item.tags)" }
339
+ recommend: options[0]
340
+ random: params.random
341
+ changes:
342
+ - type: addItem
343
+ entry: { item: picked.id }
344
+ - id: freeArmor
345
+ kind: choice
346
+ when: steps.freeItemKind.picked == 'armor'
347
+ options:
348
+ content: { type: armor, where: "item.cost <= 1000 && !('restricted' in item.tags)" }
349
+ recommend: options[0]
350
+ random: params.random
351
+ changes:
352
+ - type: addItem
353
+ entry: { item: picked.id }
354
+ - id: freeGear
355
+ kind: choice
356
+ when: steps.freeItemKind.picked == 'gear'
357
+ options:
358
+ content: { type: gear, where: "item.cost <= 1000 && !('restricted' in item.tags)" }
359
+ recommend: options[0]
360
+ random: params.random
361
+ changes:
362
+ - type: addItem
363
+ entry: { item: picked.id }
364
+ - id: freeCyberdeck
365
+ kind: choice
366
+ when: steps.freeItemKind.picked == 'cyberdeck'
367
+ options:
368
+ content: { type: cyberdeck, where: "item.cost <= 1000 && !('restricted' in item.tags)" }
369
+ recommend: options[0]
370
+ random: params.random
371
+ changes:
372
+ - type: addItem
373
+ entry: { item: picked.id }
374
+ - id: freeDrone
375
+ kind: choice
376
+ when: steps.freeItemKind.picked == 'drone'
377
+ options:
378
+ content: { type: drone, where: "item.cost <= 1000 && !('restricted' in item.tags)" }
379
+ recommend: options[0]
380
+ random: params.random
381
+ changes:
382
+ - type: addItem
383
+ entry: { item: picked.id }
384
+ - id: gear
385
+ tags: [creation.gear]
386
+ kind: changes
387
+ changes:
388
+ - { type: set, field: money, value: 500 }
389
+ - { type: set, field: lifestyle, value: "'middle'" }
390
+
391
+ - id: finish
392
+ tags: [creation.finish]
393
+ kind: changes
394
+ sheet: proposed
395
+ changes:
396
+ - { type: set, field: hp.current, value: hp.max }
397
+ - { type: finishCreation }
398
+ - { id: done, kind: outcome, result: "'created'" }