@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,162 @@
1
+ contentTypes:
2
+ # Implanted cyberware. Each system adds its System Strain as permanent strain.
3
+ cyberware:
4
+ fields:
5
+ cost: { type: integer, default: 0, min: 0 }
6
+ category:
7
+ type: enum
8
+ open: true
9
+ values: [body, head, skin, limb, sensory, medical, nerve]
10
+ required: true
11
+ concealment: { type: enum, values: [medical, touch, sight], required: true }
12
+ strain: { type: decimal, default: 0, min: 0 }
13
+ # Eye and ear mods cost half their strain with a pair of cybereyes or cyberears.
14
+ eyeMod: { type: boolean, default: false }
15
+ earMod: { type: boolean, default: false }
16
+ # System Strain triggering the system costs, for systems that cost it every time.
17
+ triggerStrain: { type: integer, min: 1 }
18
+ # The base Armor Class dermal plating gives, and a bonus to the Trauma Target.
19
+ baseAc: { type: integer }
20
+ traumaMod: { type: integer, default: 0 }
21
+ state:
22
+ # Damaged cyber is useless until repaired.
23
+ damaged: { type: boolean, default: false }
24
+ # Bought with the Wired Edge's budget.
25
+ wired: { type: boolean, default: false }
26
+ effects:
27
+ - id: ranged-ac
28
+ target: ac.ranged.base
29
+ op: set
30
+ value: item.baseAc
31
+ when: has(item.baseAc) && !self.damaged
32
+ - id: melee-ac
33
+ target: ac.melee.base
34
+ op: set
35
+ value: item.baseAc
36
+ when: has(item.baseAc) && !self.damaged
37
+ - id: trauma
38
+ target: trauma.target
39
+ op: add
40
+ value: item.traumaMod
41
+ when: item.traumaMod != 0 && !self.damaged
42
+ actions:
43
+ - use: trigger-cyber
44
+
45
+ # A skillplug chip, slotted (`equipped`) in a skillplug jack: a skill at its level. Physical
46
+ # skills need a Skillplug Jack II, and level-2 and level-3 plugs Skillplug Wiring.
47
+ skillplug:
48
+ carried: true
49
+ equippable: true
50
+ fields:
51
+ cost: { type: integer, default: 0, min: 0 }
52
+ plugLevel: { type: integer, required: true, min: 0, max: 3 }
53
+
54
+ # Optional alienation: a chrome syndrome raises the alienation the character can bear.
55
+ syndrome:
56
+ fields:
57
+ alienation: { type: integer, required: true, min: 0 }
58
+ effects:
59
+ - { id: allowance, target: alienation.max, op: add, value: item.alienation }
60
+
61
+ fields:
62
+ cyber.eyes:
63
+ type: boolean
64
+ formula: "countCopies(copy.type == 'cyberware' && 'cybereyes' in copy.tags) > 0"
65
+ # The best skillplug jack implanted (1 for Jack I, 2 for Jack II) and Skillplug Wiring.
66
+ cyber.plugJack: { type: integer, formula: '0' }
67
+ cyber.plugWiring: { type: boolean, formula: 'false' }
68
+ cyber.ears:
69
+ type: boolean
70
+ formula: "countCopies(copy.type == 'cyberware' && 'cyberears' in copy.tags) > 0"
71
+ # Strain from implants, eye and ear mods halved by a pair of cybereyes or cyberears.
72
+ strain.cyber:
73
+ type: decimal
74
+ formula: >-
75
+ sumCopies(copy.fields.strain
76
+ * ((copy.fields.eyeMod && cyber.eyes) || (copy.fields.earMod && cyber.ears) ? 0.5 : 1),
77
+ copy.type == 'cyberware')
78
+ # Implant strain the body ignores (Cybernetic Infrastructure Baseline).
79
+ strain.cyberIgnored: { type: decimal, formula: '0' }
80
+ # A cyberdoc's maintenance lowers implant strain by one or two points until the next one.
81
+ strain.maintenanceRelief: { type: integer, input: true, default: 0, min: 0, max: 2 }
82
+ # Other permanent strain: Hypervigilant, linked magic items, an implant complication.
83
+ strain.otherPermanent: { type: decimal, input: true, default: 0, min: 0 }
84
+ strain.permanent:
85
+ type: decimal
86
+ formula: >-
87
+ max(0, strain.cyber - strain.cyberIgnored - strain.maintenanceRelief) + strain.otherPermanent
88
+ # Strain from drugs, healing and cyber activation; one point goes each night's rest.
89
+ strain.temporary: { type: integer, input: true, default: 0, min: 0 }
90
+ strain.total:
91
+ type: decimal
92
+ formula: strain.permanent + strain.temporary
93
+ limits: { max: strain.max }
94
+ # The Constitution score the maximum counts (20 for a full body conversion).
95
+ strain.constitution: { type: integer, formula: attributes.con.score }
96
+ strain.max: { type: integer, formula: strain.constitution + lifestyle.strain }
97
+
98
+ # The Wired Edge's budget and the cyber bought with it.
99
+ cyber.wiredBudget: { type: integer, formula: '0' }
100
+ cyber.wiredUsed:
101
+ type: integer
102
+ formula: "sumCopies(copy.fields.cost, copy.type == 'cyberware' && copy.state.wired)"
103
+
104
+ # Optional: cyberware alienation. Each system adds its strain rounded up, two more for Nerve
105
+ # cyber; going over the Wisdom score (plus the chrome syndromes' allowances) is cyber-induced
106
+ # psychosis.
107
+ alienation.permanent:
108
+ type: integer
109
+ formula: >-
110
+ sumCopies(ceil(copy.fields.strain
111
+ * ((copy.fields.eyeMod && cyber.eyes) || (copy.fields.earMod && cyber.ears) ? 0.5 : 1))
112
+ + (copy.fields.category == 'nerve' ? 2 : 0), copy.type == 'cyberware')
113
+ alienation.current: { type: integer, input: true, default: 0, min: 0 }
114
+ alienation.max: { type: integer, formula: attributes.wis.score }
115
+ alienation.total:
116
+ type: integer
117
+ formula: max(alienation.permanent, alienation.current)
118
+ limits: { max: 'campaign.alienation ? alienation.max : 1000' }
119
+
120
+ constraints:
121
+ - id: wired-budget
122
+ check: cyber.wiredUsed <= cyber.wiredBudget
123
+
124
+ actions:
125
+ # Trigger a system that costs System Strain each use. It can't be triggered past the maximum.
126
+ - id: trigger-cyber
127
+ tags: [cyber]
128
+ available: >-
129
+ has(item.triggerStrain) && !self.damaged && strain.total + item.triggerStrain <= strain.max
130
+ results: [triggered]
131
+ steps:
132
+ - id: strain
133
+ kind: changes
134
+ changes:
135
+ - { type: adjust, field: strain.temporary, by: item.triggerStrain }
136
+ - { id: result, kind: outcome, result: "'triggered'" }
137
+
138
+ # Pick cyber with the Wired Edge's budget: new systems the character's strain can carry.
139
+ - id: acquire-wired-cyber
140
+ listed: false
141
+ tags: [building]
142
+ params:
143
+ random: { type: boolean, default: false }
144
+ results: [acquired]
145
+ steps:
146
+ - id: cyber
147
+ kind: choice
148
+ sheet: proposed
149
+ options:
150
+ content:
151
+ type: cyberware
152
+ where: >-
153
+ item.cost <= cyber.wiredBudget - cyber.wiredUsed
154
+ && strain.total + item.strain <= strain.max
155
+ && countCopies(copy.item == item.id) == 0
156
+ repeat: { max: 8 }
157
+ recommend: options[0]
158
+ random: params.random
159
+ changes:
160
+ - type: addItem
161
+ entry: { item: picked.id, state: { wired: true } }
162
+ - { id: result, kind: outcome, result: "'acquired'" }
@@ -0,0 +1,38 @@
1
+ contentTypes:
2
+ # Drones. Portable ones (tagged `portable`) have Encumbrance; fittings and mods are templates
3
+ # that add to the copy's fields.
4
+ drone:
5
+ carried: true
6
+ equippable: true
7
+ fields:
8
+ cost: { type: integer, default: 0, min: 0 }
9
+ enc: { type: integer, min: 0 }
10
+ ac: { type: integer, required: true }
11
+ traumaTarget: { type: integer, required: true }
12
+ hp: { type: integer, required: true, min: 1 }
13
+ fittings: { type: integer, default: 0, min: 0 }
14
+ fittingsUsed: { type: integer, default: 0, min: 0 }
15
+ move: { type: integer, required: true, min: 0 }
16
+ moveKind: { type: enum, values: [ground, fly, swim], required: true, open: true }
17
+ hardpoints: { type: integer, default: 0, min: 0 }
18
+ state:
19
+ hp: { type: integer, default: item.hp, min: 0, max: item.hp }
20
+ # Bought with a Drone Pilot's gear budget.
21
+ focusGear: { type: boolean, default: false }
22
+
23
+ fields:
24
+ # A pilot's attack bonus with a drone's guns: their attack bonus, Int or Dex, and the better of
25
+ # Drive or Program.
26
+ drones.attackBonus:
27
+ type: integer
28
+ formula: >-
29
+ combat.attackBonus + max(attributes.int.mod, attributes.dex.mod)
30
+ + max(skills.drive.level, skills.program.level)
31
+ # Drones a pilot can command at once: one with a control board, one plus Drive with a Remote
32
+ # Control Unit.
33
+ drones.commandable: { type: integer, formula: '1' }
34
+
35
+ constraints:
36
+ - id: drone-fittings
37
+ copies: { type: drone }
38
+ check: item.fittingsUsed <= item.fittings
@@ -0,0 +1,80 @@
1
+ contentTypes:
2
+ # Edges are picked in the rules-level choices below: two at creation, a bonus one under the
3
+ # Underdog Rule, and a third at 5th level.
4
+ edge:
5
+ grantOnly: true
6
+ copies: { max: 0 }
7
+ fields:
8
+ # The skill the Edge grants as a bonus skill: a skill, `combat` (a combat skill) or `any`.
9
+ bonusSkill:
10
+ type: enum
11
+ open: true
12
+ values:
13
+ [
14
+ administer,
15
+ connect,
16
+ drive,
17
+ exert,
18
+ fix,
19
+ heal,
20
+ know,
21
+ lead,
22
+ notice,
23
+ perform,
24
+ program,
25
+ punch,
26
+ shoot,
27
+ sneak,
28
+ stab,
29
+ survive,
30
+ talk,
31
+ trade,
32
+ work,
33
+ cast,
34
+ summon,
35
+ combat,
36
+ any,
37
+ ]
38
+ # A magical Edge: only in campaigns with magic, only for new characters, and never as the
39
+ # Underdog Rule's bonus Edge.
40
+ magic: { type: boolean, default: false }
41
+ # What taking the Edge brings besides its effects, which the action that gains it adds: gear
42
+ # by content ID, program elements, a cyber budget, spells, a Focus pick, Friend Contacts.
43
+ startingItems: { type: set, of: string, default: [] }
44
+ # Cyberware it brings, installed when the character's System Strain can take it all.
45
+ startingCyber: { type: set, of: string, default: [] }
46
+ startingCyberStrain: { type: decimal, default: 0, min: 0 }
47
+ programElements: { type: integer, default: 0, min: 0 }
48
+ cyberBudget: { type: integer, default: 0, min: 0 }
49
+ spells: { type: integer, default: 0, min: 0 }
50
+ extraFocus: { type: boolean, default: false }
51
+ friendContacts: { type: integer, default: 0, min: 0 }
52
+ # The Edge buys Graced arts with its art points.
53
+ buysArts: { type: boolean, default: false }
54
+ # The Edge asks for an attribute (Prodigy).
55
+ asksAttribute: { type: boolean, default: false }
56
+ effects:
57
+ - id: taken
58
+ target: edges.taken
59
+ op: grant
60
+ value: { formula: item.id }
61
+
62
+ fields:
63
+ edges.taken: { type: set, of: edge }
64
+ # Extra hit points on each hit die (Hard to Kill).
65
+ hp.dieBonus: { type: integer, formula: '0' }
66
+ # Skill points each level brings (Educated adds one).
67
+ skillPoints.perLevel: { type: integer, formula: '3' }
68
+
69
+ choices:
70
+ - id: edge
71
+ slots: [1, 2, 5]
72
+ unique: edges
73
+ when: slot < 5 || level >= 5
74
+ from: { type: edge }
75
+ eligible: (campaign.magic || !item.magic) && (slot < 5 || !item.magic)
76
+ - id: underdog-edge
77
+ unique: edges
78
+ when: underdog
79
+ from: { type: edge }
80
+ eligible: '!item.magic'
@@ -0,0 +1,118 @@
1
+ contentTypes:
2
+ # A Focus is a copy with its level: the first time it is chosen it is level 1, the second time
3
+ # level 2. Specialist may be taken again for another skill.
4
+ focus:
5
+ fields:
6
+ maxLevel: { type: integer, default: 2, min: 1, max: 2 }
7
+ # Bonus skills on taking the first level: a skill or `combat`, `any`, `punch-stab`, or
8
+ # `noncombat` (the Specialist's skill). `bonusSkill2` is a second one.
9
+ bonusSkill:
10
+ type: enum
11
+ open: true
12
+ values:
13
+ [
14
+ administer,
15
+ connect,
16
+ drive,
17
+ exert,
18
+ fix,
19
+ heal,
20
+ know,
21
+ lead,
22
+ notice,
23
+ perform,
24
+ program,
25
+ punch,
26
+ shoot,
27
+ sneak,
28
+ stab,
29
+ survive,
30
+ talk,
31
+ trade,
32
+ work,
33
+ combat,
34
+ any,
35
+ punch-stab,
36
+ noncombat,
37
+ ]
38
+ bonusSkill2:
39
+ type: enum
40
+ open: true
41
+ values:
42
+ [
43
+ administer,
44
+ connect,
45
+ drive,
46
+ exert,
47
+ fix,
48
+ heal,
49
+ know,
50
+ lead,
51
+ notice,
52
+ perform,
53
+ program,
54
+ punch,
55
+ shoot,
56
+ sneak,
57
+ stab,
58
+ survive,
59
+ talk,
60
+ trade,
61
+ work,
62
+ ]
63
+ # A bonus skill on taking the second level (Ace Driver's Fix).
64
+ levelTwoSkill:
65
+ type: enum
66
+ open: true
67
+ values:
68
+ [
69
+ administer,
70
+ connect,
71
+ drive,
72
+ exert,
73
+ fix,
74
+ heal,
75
+ know,
76
+ lead,
77
+ notice,
78
+ perform,
79
+ program,
80
+ punch,
81
+ shoot,
82
+ sneak,
83
+ stab,
84
+ survive,
85
+ talk,
86
+ trade,
87
+ work,
88
+ ]
89
+ # Gear the first level brings, by content ID, and the gear budget it opens.
90
+ startingItems: { type: set, of: string, default: [] }
91
+ # Cyberware it brings, installed when the character's System Strain can take it all.
92
+ startingCyber: { type: set, of: string, default: [] }
93
+ startingCyberStrain: { type: decimal, default: 0, min: 0 }
94
+ gearBudget: { type: enum, values: [vehicle, drone] }
95
+ state:
96
+ level: { type: integer, default: 1, min: 1, max: item.maxLevel }
97
+
98
+ fields:
99
+ # Focus levels the character may have: one at creation, one more at levels 2, 5, 7 and 10, and
100
+ # one per Focused Edge.
101
+ foci.allowed:
102
+ type: integer
103
+ formula: '1 + (level >= 2 ? 1 : 0) + (level >= 5 ? 1 : 0) + (level >= 7 ? 1 : 0) + (level >= 10 ? 1 : 0)'
104
+ foci.taken:
105
+ type: integer
106
+ formula: "sumCopies(copy.state.level, copy.type == 'focus')"
107
+
108
+ constraints:
109
+ - id: foci-allowed
110
+ check: foci.taken <= foci.allowed
111
+ - id: focus-once
112
+ copies: { type: focus, where: "!('repeatable' in item.tags)" }
113
+ check: countCopies(copy.item == item.id) <= 1
114
+
115
+ followUps:
116
+ - id: gain-focus
117
+ while: '!character.creating && foci.taken < foci.allowed'
118
+ action: gain-focus
@@ -0,0 +1,185 @@
1
+ contentTypes:
2
+ # Mission gear: kits, tools, clothing, comms. Readied gear is `equipped`.
3
+ gear:
4
+ carried: true
5
+ equippable: true
6
+ fields:
7
+ cost: { type: integer, default: 0, min: 0 }
8
+ # Encumbrance; none for gear that fits in a pocket. Gear tagged `worn` (clothing, packs)
9
+ # counts nothing while Readied.
10
+ enc: { type: integer, min: 0 }
11
+
12
+ # Pharmaceuticals and street drugs. `minHeal` is the Heal skill needed to administer one (none
13
+ # for anyone); `strain` the System Strain a dose adds.
14
+ drug:
15
+ carried: true
16
+ fields:
17
+ cost: { type: integer, default: 0, min: 0 }
18
+ enc: { type: integer, default: 1, min: 0 }
19
+ minHeal: { type: integer, min: 0 }
20
+ strain: { type: integer, default: 0, min: 0 }
21
+ # Hit points a dose heals, plus the Heal skill of whoever applies it.
22
+ healDice: { type: dice }
23
+ actions:
24
+ - use: use-drug
25
+
26
+ fields:
27
+ # Encumbrance: Readied gear up to half Strength, Stowed gear up to Strength. A character may
28
+ # push past both by two Readied and four Stowed, twice, losing Move each time.
29
+ enc.readied:
30
+ type: integer
31
+ formula: >-
32
+ sumCopies(copy.fields.enc * copy.quantity,
33
+ has(copy.fields.enc) && copy.equipped && !('worn' in copy.tags))
34
+ limits: { max: enc.readiedMax + 4 }
35
+ enc.stowed:
36
+ type: integer
37
+ formula: >-
38
+ sumCopies(copy.fields.enc * copy.quantity, has(copy.fields.enc) && !copy.equipped)
39
+ limits: { max: enc.stowedMax + 8 }
40
+ enc.readiedMax: { type: integer, formula: floor(attributes.str.score / 2) }
41
+ enc.stowedMax: { type: integer, formula: attributes.str.score }
42
+ # How far past the limits the load is: 0, 1 (Move 7 m) or 2 (Move 5 m).
43
+ enc.overload:
44
+ type: integer
45
+ formula: >-
46
+ min(2, max(0, max(ceil((enc.readied - enc.readiedMax) / 2),
47
+ ceil((enc.stowed - enc.stowedMax) / 4))))
48
+
49
+ # Mods a tech can keep maintained: Int and Con modifiers plus three times Fix (Tinker doubles
50
+ # it, and at level 2 counts Fix one level higher).
51
+ maintenance.multiplier: { type: integer, formula: '1' }
52
+ maintenance.fixBonus: { type: integer, formula: '0' }
53
+ maintenance.max:
54
+ type: integer
55
+ formula: >-
56
+ max(0, attributes.int.mod + attributes.con.mod
57
+ + 3 * min(5, max(0, skills.fix.level + maintenance.fixBonus))) * maintenance.multiplier
58
+ # Mods the character keeps up, counted by the player.
59
+ maintenance.used: { type: integer, input: true, default: 0, min: 0 }
60
+
61
+ # Focus gear budgets (Ace Driver and Roamer for vehicles, Drone Pilot for drones), and what the
62
+ # character's focus gear costs against them.
63
+ budget.vehicle: { type: integer, formula: '0' }
64
+ budget.drone: { type: integer, formula: '0' }
65
+ budget.vehicleUsed:
66
+ type: integer
67
+ formula: "sumCopies(copy.fields.cost, copy.type == 'vehicle' && copy.state.focusGear)"
68
+ budget.droneUsed:
69
+ type: integer
70
+ formula: "sumCopies(copy.fields.cost, copy.type == 'drone' && copy.state.focusGear)"
71
+
72
+ effects:
73
+ - id: overload
74
+ target: combat.move
75
+ op: add
76
+ value: '-[0, 3, 5][enc.overload]'
77
+ when: enc.overload > 0
78
+
79
+ constraints:
80
+ - id: vehicle-budget
81
+ check: budget.vehicleUsed <= budget.vehicle
82
+ - id: drone-budget
83
+ check: budget.droneUsed <= budget.drone
84
+
85
+ actions:
86
+ # Take a dose: spends the copy, adds its System Strain and, for healing drugs, heals.
87
+ - id: use-drug
88
+ tags: [drug]
89
+ available: self.quantity > 0
90
+ params:
91
+ healerSkill: { type: integer, optional: true }
92
+ results: [applied]
93
+ steps:
94
+ - id: heal
95
+ kind: roll
96
+ when: has(item.healDice)
97
+ tags: [healing]
98
+ parts:
99
+ - dice: item.healDice
100
+ - value: 'has(params.healerSkill) ? params.healerSkill : 0'
101
+ - id: take
102
+ kind: changes
103
+ changes:
104
+ - { type: adjustQuantity, entry: self, by: -1 }
105
+ - { type: adjust, when: item.strain > 0, field: strain.temporary, by: item.strain }
106
+ - { type: adjust, when: has(steps.heal), field: hp.current, by: steps.heal.total }
107
+ - {
108
+ id: result,
109
+ kind: outcome,
110
+ result: "'applied'",
111
+ data: { healed: 'has(steps.heal) ? steps.heal.total : 0' },
112
+ }
113
+
114
+ # Buy vehicles or drones with a Focus's gear budget: the dearest one the budget buys is
115
+ # recommended. More are offered while the budget lasts, the dearest that still fits recommended,
116
+ # so an automatic run spends the budget; a player stops with `#done`.
117
+ - id: acquire-focus-gear
118
+ tags: [building]
119
+ available: budget.vehicle > budget.vehicleUsed || budget.drone > budget.droneUsed
120
+ params:
121
+ kind: { type: enum, values: [vehicle, drone] }
122
+ random: { type: boolean, default: false }
123
+ results: [acquired]
124
+ steps:
125
+ - id: vehicle
126
+ kind: choice
127
+ when: params.kind == 'vehicle'
128
+ sheet: proposed
129
+ options:
130
+ content:
131
+ type: vehicle
132
+ where: >-
133
+ item.cost <= budget.vehicle - budget.vehicleUsed && !('restricted' in item.tags)
134
+ prefer: item.cost
135
+ random: params.random
136
+ changes:
137
+ - type: addItem
138
+ entry: { item: picked.id, state: { focusGear: true } }
139
+ - id: vehicles
140
+ kind: choice
141
+ when: params.kind == 'vehicle'
142
+ sheet: proposed
143
+ options:
144
+ content:
145
+ type: vehicle
146
+ where: >-
147
+ item.cost <= budget.vehicle - budget.vehicleUsed && !('restricted' in item.tags)
148
+ repeat: { max: 5 }
149
+ prefer: item.cost
150
+ random: params.random
151
+ changes:
152
+ - type: addItem
153
+ entry: { item: picked.id, state: { focusGear: true } }
154
+ - id: drone
155
+ kind: choice
156
+ when: params.kind == 'drone'
157
+ sheet: proposed
158
+ options:
159
+ content:
160
+ type: drone
161
+ where: >-
162
+ item.cost <= budget.drone - budget.droneUsed && !('restricted' in item.tags)
163
+ && (!has(item.enc) || enc.stowed + item.enc <= enc.stowedMax)
164
+ prefer: item.cost
165
+ random: params.random
166
+ changes:
167
+ - type: addItem
168
+ entry: { item: picked.id, state: { focusGear: true } }
169
+ - id: drones
170
+ kind: choice
171
+ when: params.kind == 'drone'
172
+ sheet: proposed
173
+ options:
174
+ content:
175
+ type: drone
176
+ where: >-
177
+ item.cost <= budget.drone - budget.droneUsed && !('restricted' in item.tags)
178
+ && (!has(item.enc) || enc.stowed + item.enc <= enc.stowedMax)
179
+ repeat: { max: 5 }
180
+ prefer: item.cost
181
+ random: params.random
182
+ changes:
183
+ - type: addItem
184
+ entry: { item: picked.id, state: { focusGear: true } }
185
+ - { id: result, kind: outcome, result: "'acquired'" }